기능적인 코딩 스타일을 팀에 소개하는 방법은 무엇입니까?


10

그룹 내 대부분의 사람들이 함수형 프로그래밍에 대해 거의 또는 전혀 이해하지 못하는 객체 지향 프로그래밍 배경에서 온 상황이 있습니다. 클로저와 같은 기본조차도 아닙니다.

기능적 코딩 스타일을 소개하는 좋은 방법은 무엇입니까? 특정한 경우에 기능적인 방식으로 수행하면 많은 코딩 작업을 단축 할 수 있습니다.

이미 기능 및 코딩 패러다임에 대한 몇 가지 프레젠테이션을 제공했습니다. 불행히도 우리는 Haskell (기본적으로 레거시 코드는 C, C ++, Java)과 같은 적절한 기능적 프로그래밍 언어를 사용하지 않으므로 이것들과 관련하여 무엇이든해야합니다.


11
방법을 묻기 전에 이유를 물어보십시오 . 객체 지향 스타일보다 기능적 스타일로보다 쉽게 ​​해결할 수있는 문제에 대해 작업하고 있습니까? OO는 많은 것들 (실제로 성공한 이유)에서 잘 작동하지만 다른 사람들에게는 잘 작동하지 않습니다. 귀하의 질문에 따르면, "우리는 그것을 지원하는 언어가없고 팀이 그 방법을 모릅니다 할 수 있습니다! " 아주 나쁜 생각입니다. 올바른 작업을위한 올바른 도구를 기억하십시오.
메이슨 휠러

2
@MasonWheeler : 기능이 필요한 이유를 알고 있습니다. 이 달의 멋진 언어로하지 않습니다. 너무 늙었 어
Fanatic23

1
누군가 Haskell을 알고 있다고 가정 해 봅시다. 시스템에서 작동하게 할 수 있습니까?
JeffO

4
함수형 프로그래밍은 팀이 얻지 못한 문제를 해결하는 것처럼 보입니다. 그들은 함수형 프로그래밍을위한 자연스러운 후보가 아닌 C, C ++ Java를 코딩하는 방법을 알고 있습니다 (클로저 구현은 이러한 언어에서 끔찍합니다).
제임스 앤더슨

답변:


8

Luca Bolognese는이 훌륭한 프리젠 테이션 을 통해 실제로 훌륭한 커피 예제를 사용하여 F #을 제시하는 기능적 프로그래밍을 소개하고 친구 및 동료들에게 기능적 프로그래밍을 소개하는 데 많은 도움을주었습니다.

Petricek 의 Real World Functional Programming 을 볼 수도 있습니다. 이는 내 의견으로는 기능적으로 사고를 시작하는 훌륭한 방법입니다.


그 프리젠 테이션은 환상적입니다. 특히 뱀파이어가 주므로! 롤 !! j / k .. 사람들은 카리스마를 얻었다.
hanzolo

7

동료가 직장 밖에서 코드를 작성합니까?

회사에서 FP를 수행하지 않는다는 점을 고려하면 직접 작업 이외의 작업을 수행하지 않을 때 새로운 언어 / 패러다임을 배우도록하는 것은 불가능합니다.

그렇다면 기능 프로그래밍과 관련된 흥미로운 프로젝트를 찾아서 보여주십시오. 당신은 변화를 명령 할 수있는 입장에 있지 않으므로, 개인적인 차원에서 관심이 있다면 씨앗을 파종해야합니다. 이것이 나와 함께 일하는 가장 친한 친구에 의해 부여 된 방식입니다.

그 외에도 대부분의 사람들은 사소한 작업을 쉽게하기 위해 사내 도구를 작성합니다. 기능적 언어로 그 중 일부를 작성하십시오. 코드를보고 싶은 사람은 코드의 (희망적으로 / 가능하면) 아름다움에 노출되어있을 때 코드에 대해 물어볼 것입니다. 그것은 아이디어를 팔 수있는 기회입니다.

스택에서 작동하는 기능적 언어가 있습니다 (스칼라 / 클로저는 모두 JVM에서 실행 됨). 하스켈처럼 "순전히 기능적"인 것은 아니지만, 긴 여정에서 좋은 출발입니다.

고용을 통제 할 수 있다면 기능적 경험이 있거나 최소한 기능적 프로그래밍에 관심이있는 사람들을 고용하십시오.

그리고 마지막으로 ... 기능 코드 작성에 대한 열정이 있다면 잘못된 회사에있을 수 있습니다. 회사 전체가 소프트웨어를 작성하는 방식을 바꾸지 않을 것입니다. 특히 돈을 벌고 있거나 특히 짧은 시간 내에 돈을 버는 경우에는 더욱 그렇습니다.

이것은 개발자에게 판매하는 것입니다. 경영진은 완전히 다른 짐승입니다.


2

명령형 프로그래밍에서 순수 기능 프로그래밍으로 전환하는 것은 가파른 학습 곡선으로 큰 변화입니다. 덜 빠른 전환을 시도하는 것이 좋습니다.이 경우 많은 옵션이 있습니다. 예를 들어, 파이썬은 리스트 이해와 생성자 표현을 지원하고, 루비는 코드 블록 등을 통해 고차 함수 를 지원합니다 . 자바를 언급 했으므로 자바 배경이 있고 완전한 기능적 프로그래밍 지원을 원한다면 스칼라시도 할 수 있습니다 .


2

기능성 프로그래머 고용 (또는 사장을 고용)

결국, 이것은 팀의 나머지 부분을 문지르고 있습니다.

또한, 앞서 언급 한 바와 같이, 오프 타임에 기능 언어로 코드를 작성하도록 장려해도 문제가되지 않습니다.


2

함수형 프로그래밍이 실제로 귀하의 경우에 훨씬 쉽게 생활을 할 수있게하려는 경우 그러한 사례 중 하나를 격리하고 동료에게 OO 및 기능적 언어로 동등한 구현을 시연하는 것이 좋습니다.

복잡성의 차이가 당신이 말하는만큼 넓다면, 이것은 그 자체로 말해야합니다.


2

스칼라 언급에 대한 faif +1 :이 답변에 대한 의견으로 시작했지만 너무 커졌습니다 ...

함수형 프로그래밍 (C / C ++, 일부 Python 및 녹슨 Java에서 제공)에 대해 배우고 싶었습니다. 나는 Ocaml과 함께 깊은 끝에 다이빙을 시도한 다음 Haskell과 Just Did n't Get It. 그런 다음 스칼라를 시험 해보고 기능적인 접근 방식이 나를 피할 때 익숙한 명령 스타일로 쉽게 넘어갈 수있는 편안한 OOP / Java-ey 환경에서 기능적인 것을 사용할 수 있음을 알았습니다. 어떤 사람들은 언어의 "다중 패러다임", "하이브리드"특성에 대해 불평 할 수 있습니다. "순수한 기능"을 추구하기 위해 자신을 늘릴 필요는 없다는 것을 의미합니다. 필요할 때 쉽게 실제 작업을 수행 할 수 있습니다.

몇 년 동안 (그리고 나중에 Scala에서 200 + Project Euler Scala 솔루션) 기능과의 만남이 내 파이썬에 크게 영향을 미쳤습니다 (지도, 필터, 축소, 람다, itertools, 목록 이해 및 전달 기능을 훨씬 더 많이 사용합니다) C ++ : STL의 기능적 트래핑을 사용하려는 시도가 조금 더 많았지 만, 주된 영향은 TBB의 맵 / 감소 구문을 사용하여 훨씬 더 편안하고 불변성을 악용하여 복잡성을 길들이는 방법과 같습니다. 다중 스레드 코드에서.

그래서 개인적으로, 내가 당신이라면, 스칼라를 Java 세계 개발에 도입하는 사례를 만들고 싶습니다. 다음에 일어날 일은 새로운 아이디어를 "챔피언"하고 변화를 추진하는 것입니다. 그것은 훨씬 더 큰 문제 일 것 같습니다.


1
@timeday 아주 잘 말했다. 저는 Java / OO 사람입니다. 나는 1 년 전에 스칼라를 집어 들었다. 그리고 FP를 배우는 것은 매우 어려운 일이었습니다. 나는 한 번에 조금하고 있고 함께 앉아있다. 한 번에 모든 것을 얻으려고하지 않습니다.
chaotic3quilibrium

1

Scala를 사용한 점진적인 접근 방식을 추천하고 싶습니다. 그리고 Scala의 창작자 책인 "Scala 프로그래밍, 2 판"으로 시작하는 것이 좋습니다 . 이 책은 Scala를 사용하여 하나의 (FP) 기능 프로그래밍을 천천히 소개하는 환상적입니다. 그리고 FP 로의 이동을 보여 주면서 OO를 거부하지 않습니다. 실제로, 그것을 활용합니다. 나는 지금 두 번째 통과하고 있습니다.

기본적으로 스칼라는 하나의 세미콜론없이 Java / OO를 수행 할 수 있습니다. 그리고 전체 돼지를 갈 필요없이 약간의 FP를 시험해 볼 수 있습니다. 예를 들어, FP를 스스로 훈련시키는 과정에서 나는 일반적으로 클래스 메소드 레벨에서 참조 투명성에 초점을 맞출 것이지만, 나의 메소드가 첫 번째 단계를 수행하는 데 필요한 var-s, mutability 및 imperative-ness를 갖도록하자. 구현. 그런 다음 각 방법을 천천히 재 작업하여 순수한 FP로 이동하는 데 중점을 둡니다. 또한 자매 사이트를 사용하여 CodeOverview, CodeReview를 통해 정신 / 사고 전환에 대한 도움을받습니다. 다음은 내가이 일을 한 최근 게시물 의 예 입니다.

어쨌든 FP 여행에 행운을 빕니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.