O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Why Functional Programming Matters

825 visualizações

Publicada em

FunFun Study에서 발표된 내용입니다. 왜 FP를 내가 공부해야할지. FP를 한다면 어떤 것에 주안점을 두어야할지 등에 대해 고민하고 공부한 내용을 공유합니다

Publicada em: Tecnologia
  • Entre para ver os comentários

Why Functional Programming Matters

  1. 1. Why Functional Programming matters @nurinamu LezhinEntertainment - BizDevTeam
  2. 2. Why do I consider FP?
  3. 3. Long long time ago • 회사에서 JDK7로 개발. 모던 Language에 대한 지적 호기심 • (당시 GAE가 지원안함. 얼마전부터 지원 시작) • 문제가 터지면 70%는 NPE… (난 null 증오해) • 사내에 약장수가 존재 했음… ( @kunny )
  4. 4. Kotlin • Null Safety 기능이 아주 훌륭해! • Codeless!!. 코드량과 버그량은 비례 • lambda 처음 써봤어. 그냥 막 다 좋아! • (옆에서 스칼라에 다 있는 기능이야..라고 해도 좋았음)
  5. 5. 이 약을 어떻게 팀에 전파하지?
  6. 6. Kotlin 전파시 가장 많이 듣는 질문 • 그거 java8에 다 있는 기능이야 • 그거 scala에 다 있는 기능이야 • Kotlin은 android에만 쓰게 될거야 • 아직 미성숙 언어야 • 굳이 왜 써야함?
  7. 7. 포기란 배추 셀 때 쓰는 말 • 회사에 또 다른 약장수가 있다. ( @lazysoul ) • Functional Programming이란 약이 Kotlin 사용하는 데 도움을 줄 수 있다고 한다. • 근데 내가 FP가 뭔지 모르겠다; • FP 스터디에 들어와라.
  8. 8. Functional Programming • 선언문이 없고 함수로만 구성되도록 프로그래밍 하는 패러다임 • 음..OOP로도 가능해보이는데 정확하게 왜 FP에 대해 알아야할지 나도 모르겠음.
  9. 9. Reference : https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
  10. 10. 제대로 약장사임 • Paper : https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf • Code Mesh 2015 : https://www.youtube.com/watch?v=FGQAP0GxlW8 • Erlang Factory SF 2016 : https://www.youtube.com/watch?v=Z35Tt87pIpg • Functional Conf 2016 : https://www.youtube.com/watch?v=XrNdvWqxBvA • Lambda Days 2017 : https://www.youtube.com/watch?v=1qBHf8DrWR8
  11. 11. 서문 • 1.Functional Programming 이란?
 
 - Main Function -> Functions -> Bottom Level Function 구조로 만들어가는 프로그래밍 기법. 모든 구 성은 함수. 
 - Bottom Level Function 만이 Primitives로 구성됨.
  12. 12. 서문 cont’ • 2. FP의 특징
 - 선언문이 없다. : 변수가 한번 주어지면 변경할 수 없 다.(Immutable)
 
 - Side-Effect가 없다. : 모든 함수는 같은 입력을 받으 면 출력이 동일해야한다. 
 - Side-Effect가 없기 때문에 함수들의 호출 순서와는 무관하게 동일한 결과를 얻을 수 있다. -> 제어 흐름에 대한 제약이 줄어든다 -> 연산에 대한 호출의 시간적 제약이 없기 때문에 변수와 값의 교체를 자유롭게할 수 있다. -> 참조 투명성 -> 이런 자유도가 정규화된 프로그래밍 방식보다 수학적 으로 더 적합한 프로그래밍을 할 수 있게한다.
  13. 13. 서문 cont’ • FP의 장점
 - 엄청난 생산성 : 코드량이 확실히 줄어든다. 
 왜? 선언문이 없어지니까 (코드의 대부분은 선언문) • 하지만…
 - 참조 투명성과 같은 이슈에 둔감하거나 필요성을 못느끼는 개 발자들에게는 딱히 좋은 점이 안느껴진다.
 - FP의 철학을 제대로 이해하지 못하고 코드를 작성하면 FP의 장 점을 제대로 얻을 수 없다. • 서문에 언급한 특징만으로는 FP의 힘을 설명하기 어렵고, FP 개 발자들이 추구해야할 방향에 대해서 설명하기 어렵다. • 이 논문에서 이 문제들을 짚어볼 것이다.
  14. 14. 구조적 프로그래밍을 통한 유추 • 구조적 프로그래밍(Structured Programming, SP)을 통해 FP의 강력함을 유추해본다. • SP의 장점들은 다음과 같다.
 - goto가 없다.
 - block에는 entry와 exit가 하나씩만 존재한다.
 - SP는 UnSP보다 수학적으로 더 다루기 쉽다. • SP의 장점들은 FP와 큰 차이가 없다.
  15. 15. 구조적 프로그래밍을 통한 유추 (Cont’) • SP vs UnSP 의 가장 큰 차이점
 - SP는 모듈화가 가능하다. • 모듈화는 엄청난 생산성 향상을 가져온다.
 - 모듈의 소형화는 코드를 빠르고 쉽게 작성할 수 있게 함.
 - 일반화된 모듈은 재사용이 가능. 재사용이란 관점은 절처형 프로그래밍의 빠른 발전에 기여했다.
 - 프로그램의 모듈화는 테스트를 독립적으로 할 수 있게 만들었다. 이것은 디버깅 시간을 줄이는데 도움을 주었 다.
  16. 16. 구조적 프로그래밍을 통한 유추 (Cont’) • SP는 커다란 프로그램을 작은 단위의 프로그램으로 만들어 주는데 큰 도움을 주었다. • 하지만…
 - 모듈화는 하나의 문제를 분할해서 여러개의 문제로 만드 는 단점이 있다. 근본 문제를 해결하기 위해서는 작은 문제 들을 하나하나 모두 해결해야만한다. • 그래서 모듈화와 마찬가지로 중요한 것은 나눠진 모듈들을 다시 잘 접착하는 것이 중요하다.
 - 이 접착 방법에 대한 것이 중요한 이슈이고 이 문제를 해 결하는 것이 FP의 가장 중요한 장점으로 이야기되어야한다.
  17. 17. - John Hughes “FP 개발자들은 잘 접착할 수 있는 더 작고, 더 단순 하고 더 일반화된 모듈들을 추구해야한다.” 아마도 이 모듈이 Function으로 생각됨. - nurinamu
  18. 18. Gluing Functions Together
  19. 19. Gluing Functions Together (cont’) • Function을 작은 단위의 함수로 정의하면, 새로운 함수 도 해당 함수로 모두 표현이 가능하다. • High-order functions (고차함수) 지원은 함수들의 결 합에 필수 지원 기능이다.
  20. 20. Gluing Programs Together • g, f는 각각의 프로그램. 위 상황에서 g는 f가 output을 완전히 반환하기 전까지는 대기 상태.
 - f의 output을 완전히 반환한다는 것은 특정 메모리를 그 크기만큼 선점해야한다는 것. 만약 해당 output이 거대하다면 메모리 낭비가 큼.
 - 그래서 g가 연산 시작이 가능한 만큼이 만들어지면 그 때 g가 해당 f의 output을 input으로 사용하여 처리.
 - 이것이 “Lazy Evaluation”
  21. 21. Gluing Programs Together (Cont’) • Lazy Evaluation은 fp에서 모듈화를 위한 최고의 기능. • 그럼 왜 non-FP에서는 Lazy Evaluation을 도입하지 않 는 것일까?
 - 도입이 가능하다. 하지만 코드의 기대치가 Lazy를 기대하지 않고 만들어진 시스템에 Lazy가 도입 이되면 다른 side effect를 일으킬 수 있어, 디버깅을 더 어렵게 만든다. 그래서 처음부터 해당 기능 에 대한 고려가 없는 시스템에 추가하는 것은 좋은 고려사항이 되지 못한다.
  22. 22. Gluing Programs Together (Cont’) • Newton-Raphson Square Roots • Numerical Differentiation • Numerical Integrations • Lazy Evaluation은 또 다른 주제로 추가 스터디가 필요 함.
 - 심화된 Lazy Evaluation 기법을 위해서는 Monads도 공부 필요.
  23. 23. An Example from A.I • 간단한 틱택토 게임을 예제로 이야기. • Static evaluation의 한계점을 이야기함.
 - input 마다 모든 결과를 연산하는 것은 판이 커질 수 록 시간도 오래걸리고, 어느 순간에는 연산 불가 상태가 됨.
 - 필요한 만큼만 얻고 반환하는 형태 : Lazy Evaluation 이 필요. • High-order function을 이용해 모든 것을 함수로 표현 가능
  24. 24. Conclusion • 모듈화(Modularity)는 성공적인 프로그래밍의 Key. • 생산성 향상을 목표로하는 언어들은 반드시 모듈화 프로그래 밍을 잘 지원해야한다. • 모듈화 프로그래밍을 지원하기 위해서는 나누는 것 뿐만 아니 라 결합에 대한 고려도 잘 되어있어야한다. • FP는 High-order function과 Lazy Evaluation이라는 접착제 를 고려한 패러다임이다. • 그래서 FP 개발자들은 해당 기능에 대한 숙지가 반드시 필요 하다.
  25. 25. 그래서 Kotlin은? • Kotlin에서의 Lazy Evaluation.
 https://www.safaribooksonline.com/library/view/ introduction-to-kotlin/9781491964125/ video283045.html
 • Global Function 선언이 가능.
  26. 26. 팀원들에게는… • 1. 모듈화된 코드를 짜도록 노력하자. 
 - OOP로 이미 하고는 있지만 더 작은 단위인 함수로
 - 모듈단위 TC도 편해진다. • 2. Side-Effect 없이 또는 예상 가능한 코드를 짜자. 
 - FP를 해보자 • 3. JVM 언어중에 FP로 접근할 수 있는 언어인 Kotlin을 해보자.
 - Kotlin 좀 써봅시다
  27. 27. 과연 Lezhin BizDevTeam의 미래는…?
  28. 28. http://tech.lezhin.com/recruit/biz_backend_develop 함께할 용자를 찾습니다. 24시간 1:1 상담 대기중 @nurinamu in funfun slack

×