명령형 프로그래머에게 선언적 프로그래밍을 가르치려고 할 때 좋은 방법은 무엇입니까?


13

나는 회사에서 F #에 대해 약간의 훈련을하겠다고 제안했고 그들은 관심을 보였다. 그들은 일반적으로 너무 열정으로 프로그래밍을 따르지 않는 VB6 및 C # 프로그래머입니다. 기능적 문제로 생각할 때 올바른 코드를 작성하는 것이 더 쉽다고 느끼므로 분명히 이점을 얻을 수 있습니다.

누구든지 내가 어떻게 접근 해야하는지에 대한 조언을 줄 수 있습니까?

아이디어

  • 구문에 중점을 두지 말고이 언어와 그 언어가 사용하는 숙어를 어떻게 사용할 수 있는지에 중점을 두십시오.
  • 명령적인 방식으로 작성하기는 쉽지만 선언적인 방식으로 작성 될 때 우아한 코드로 변환되는 예제를 사용해보십시오.

F # 및 선언적 프로그래밍 ?????
P Shved

@Pavel-질문입니까?
ChaosPandion

3
@Pavel-알겠습니다. 왜 진술을했는지 설명해 주시겠습니까? 매우 모호한 코멘트를 한 것은 이번이 두 번째입니다. 매우 무례합니다.
ChaosPandion

3
en.wikipedia.org/wiki/Declarative_programming 함수형 프로그래밍 선언적 프로그래밍의 한 유형입니다. 또한 +1 좋은 질문입니다.
자기 소개-이름을 생각하십시오.

2
@Chaos, 내 의견으로는 F #은 선언적 프로그래밍 패러다임을 지원하지 않습니다. 열성적인 평가와 명령 기능은 언어를 C #에서 사용하는 명령과 같은 명령을 나타내는 편리한 기능적 형식으로 만듭니다. 심지어, 어서 makeF # 또는의 Caml보다 선언적 언어의 더! (
이론적으로

답변:


5

함수형 프로그래밍은 저에게는 이상한 짐승입니다. 나는 F #과 Haskell을 배우고 몇 가지 간단한 프로그램을 작성하고 사용하는 것을 좋아했지만 일부 사람들이 말하는 "계시의 섬광"은 없었습니다. 그러나 천천히, 나는 점점 더 많은 불변의 코드를 작성하여 작업을 더 작은 기능으로 나누고 델리게이트를 훨씬 더 많이 사용하려고한다는 것을 알았습니다. 이 기술의 가치가 자명하기 때문에 마음에 든다면 작업에 들어갑니다.

이제 실습을위한보다 실용적인 방법 : 두 가지 개념이 실제로 함수형 프로그래밍을 스타일로 클릭한다는 것을 알았습니다.

첫째, FP 스타일은 OOP에서와 같이 구성이 아니라 데이터 구조를 기반으로합니다. C #에서 List와 같은 것을 유형 안전 목록을 생성하는 영리한 트릭으로 보았습니다. 유형 안전 목록, 유형 (문자열)을 다른 유형 (목록)으로 구성했습니다. FP를 배운 후에는 이제 Monads와 같은 제네릭을 살펴 봅니다. List는 코드가 취할 수있는 구조화 된 형식이며 문자열을 장식합니다.

둘째, 아마도 C # / ASP 프로그래머에게 더 유용한 것은 FP가 재귀와 반복에 작동하고 OOP는 가변성과 반복에 작동한다는 생각입니다. ASP 페이지 수명주기를 이제 일종의 FP로 생각하는 경향이 있습니다. 각 요청은 전체 수명주기를 통해 처음부터 처리되므로 전체 페이지는 사실상 천천히 반복되는 하나의 큰 프로그램입니다. 이러한 개념을 좁힐 수 있다면 데이터를 가져 와서 처리하고 이전 데이터를 수정하는 대신 새 데이터를 반환하는 함수 루프를 중심으로 명령형 프로그램을 구성하는 방법에 대해 더 잘 알 수 있습니다.

적어도이 접근법으로 극복해야 할 가장 까다로운 장애물은 가변 객체를 사용할 때 많은 리소스를 낭비한다는 느낌이 많은 메모리를 절약한다는 것입니다. GC에서 우리는 신뢰하며, 실제로 프로그램이 실행되는 것을 볼 수있을 때까지 성능 문제를 해결하는 방법을 배워야했습니다.



1

많은 명령형 프로그래밍 언어 (Ada, C / C ++, Turbo Pascal, FoxPro)는 런타임시 평가할 수있는 (또는 리터럴을 호출 한 후 명명 된 프로 시저) 함수 또는 프로 시저 이름 리터럴에 대한 포인터를 정의 할 수 있습니다.

일반적인 예는 C의 qsort입니다. 데이터 구조에서 다른 알고리즘 을 실행하는 알고리즘을 정의 할 수 있다는 개념을 기반으로합니다 . 분명히 이것은 함수형 프로그래밍의 일부일뿐입니다. 그러나 나는 이것이 아이디어를 흡수하기에 좋은 출발점이라는 것을 알았습니다.

일단 들어가면 다른 것들 (불변성, 공유 없음 등)을 탐구 할 수 있습니다.


정정 : 내가 말하는 것은 다른 알고리즘을 매개 변수로 사용하여 데이터 구조에서 실행할 수있는 매개 변수화 된 알고리즘을 정의 할 수 있다는 개념을 기반으로한다는 것입니다.
luis.espinal

1

누구든지 내가 어떻게 접근 해야하는지에 대한 조언을 줄 수 있습니까?

확실한:

  • F # 코드는 문제를 우아하게 해결할뿐만 아니라 C # / VB로 가능한 것보다 훨씬 우아하게 예제를 신중하게 선택하십시오 . 패턴 매칭과 타입 추론이 여기에 있습니다.

  • 한 예를 사용하여 F #에서 발견 된 새로운 기능 (예 : 비동기 워크 플로우, 활성 패턴)의 이점을 강조하십시오.

  • 적절한 경우 변경 가능한 데이터 구조를 사용하여 부적절한 예를 제시하는 것을 두려워하지 마십시오. F #은 이유가 불완전합니다.

  • 만병 통치약으로 F #을 제시하지 마십시오. F #이 적합하지 않은 응용 프로그램과 다른 .NET 언어보다 훨씬 더 적합한 응용 프로그램을 설명하십시오.

  • F # (Bing AdCenter, Halo 3 등)을 사용한 실제 프로젝트뿐만 아니라 학습 할 수있는 장난감 샘플을 가리 킵니다.

  • F #이 문제를보다 쉽게 ​​해결하는 데 도움이되는 방법으로 모든 것을 설명하십시오. 종교 토론을 피하십시오. 다른 언어에 대해서는 부정적인 것이 아니라 F #에 대해서는 긍정적 인 태도를 유지하십시오. 사실과 증거로 무장 시키지만 그들 스스로 결론을 내릴 수 있습니다.

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