기능적 프로그래밍 언어를 선택해야합니까?


10

최근에 코드를 작성하는 방법에 대해 더 많은 관심을 기울였습니다. 디자인 패턴에 대한 몇 권의 책을 읽은 후 (그리고 그 패턴을 과도하게 구현 한 것이 확실합니다) 어떤 생각이 바뀌 었는지 캡슐화하는 방향으로 생각을 크게 바꿨습니다. 나는 술어, 행동 및 다른 대리자 작업을 통해 구식 클래스로 삶을 가꾸어주는 것을 선호하는 인터페이스와 메소드 지향 코드가 적다는 것을 알았습니다. 나는 그것이 종종 변화하는 행동이라고 생각하는 경향이 있으므로, 그것들을 캡슐화합니다. 항상 그런 것은 아니지만 종종 단일 메서드에 대한 인터페이스를 분류 한 다음 클라이언트 코드가 새 클래스를 작성하도록하는 대신 작업에 대리자를 사용하는 것을 선호합니다.

그래서 나는 그것을 때리는 것 같아요. 대신 함수형 프로그래밍을해야합니까?
편집 : 함수형 프로그래밍에 대한 오해가있을 수 있습니다.

현재 선택한 언어는 C #이며 C ++ 배경에서 왔습니다. 저는 게임 개발자로 일하고 있지만 현재 실직 상태입니다.

건축에 대한 열정이 있습니다. 내 미덕은 깨끗하고 유연하며 재사용 가능하며 유지 관리 가능한 코드입니다. 이런 식으로 독살을했는지, 아니면 더 나을 것인지 모르겠습니다. 리팩토링 열이 있습니까? 아니면 계속 진행해야합니까? 나는 이것이 "직업에 올바른 도구를 사용하는" 에 관한 질문 일 수 있음을 이해 하지만, 당신의 생각을 듣고 싶습니다.

기능적 언어를 선택해야합니까? 내 두려움 요인 중 하나는 Visual Studio의 편안함을 떠나는 것입니다.


Visual Studio를 떠나는 것이 획기적인 경우 F #을 사용해 볼 수 있습니다.
Adam Lear

거래 차단기가 아닙니다. 나는 다른 많은 대안을 시도하지 않았습니다. 나는 지능, 리팩토링 또는 유사한 도구없이 작업하는 것에 대해 약간의 두려움을 가지고 있으며 일반 텍스트 편집기에서 코드를 다시 작성한다는 개념을 가지고 있습니다.
Statement

나는 현재 실직자입니다 ... 이것이 가장 먼저 고쳐야합니까?
Job

나는 VS없이 잠시 동안 일하려고합니다. 매우 미니멀 한 방식으로 작업하는 것이 재미있을 수 있습니다.
Zachary K

@Job, 그렇습니다.하지만 최근에 일련의 아주 나쁜 사건에 부딪 쳤습니다. 새로운 것을 찾으십시오.
Statement

답변:


5

새로운 것을 배우는 것은 재미 있어야합니다. 그리고 새로운 프로그래밍 방법을 배우면 더 나은 프로그래머가 될 것입니다. Haskell 또는 Erlang 중 하나를 확인하십시오. 둘 다 작동하지만 매우 다릅니다. Haskell을 선택하면 YouTube 나 팟 캐스트에서 "Simon Payton Jones"의 몇 가지 대화를 찾으십시오. 그 사람은 훌륭한 연사입니다.


1
나는 여러 가지 이유로이 대답을 선택했습니다. @Zachary K는 잘 알려진 장소의 상자에서 나와 다른 관점을 갖는 것이 재미있을 수 있다고 말합니다. 나는 두려워하지 않아야 새로운 무언가를 시도. 끝이 아닙니다. 하스켈은 몇 번 전에 다양한 토론에서 관심을 끌었던 언어입니다. 나는하지 않습니다 알고 난 기능 언어를 필요로하는 경우 만 @Toby 알렌이 말한대로 그것은 다른 방법이 작동하고 좀 언리얼 스크립트를 시도한 후이 동의하는 방법 보는 좋은 방법이다. @ammoQ는 요점을 조금 놓쳤지만 내 질문에 대해 잘 정의하지 못했습니다. 나는 여전히 그의 관심사를 얻는다.
Statement

기쁘다. 재미
재커리 K

14

이런 * * * *. 은 총알이 없습니다. 내려오다. 긴장을 풀고 심호흡하십시오.

도구 상자에 도구가 있다고해서 도구를 사용해야한다는 의미는 아닙니다. 작업에 집중하십시오. 즉, 작동하는 프로그램을 작성하고 코드 냄새가 나면 리팩터링하십시오. 미래의 하루가 바뀔 수 있기 때문에 모든 세부 사항을 캡슐화하고 추상화하지 마십시오. IMO KISS & YAGNI를 직접 시작하고 실제로 변경 될 때 변화하는 요구 사항에 대응하는 것이 훨씬 좋습니다 .

나는 여기서 기능적인 언어가 당신의 필요에 더 잘 맞는지 아닌지 말할 수 없다고 생각합니다. 당신이 무엇을하고 있는지 말하지 않았기 때문입니다.


글쎄, 나는 지금 특별한 일을하고 있지 않다. 나는 직업 사이에있다. 저는 게임 개발자입니다.
Statement

3
이것은 과도한 엔지니어링과 관련된 위험한 상황입니다. 마감일, 잔고 없음, 세부 사항에 집착하기에는 너무 많은 시간이 없습니다.
user281377

(내 마음에 명확한 그림이 없기 때문에 많은 추측이 필요합니다.) "필요한 것"이 코드 작성을 선호 하는 방식에 더 많이 반영된 것 같습니다 . 나는 함수형 프로그래밍에 대해 많이 알지 못하며 그 이름이 약간 속일 수 있다고 생각합니다. 내 취향이 생각만큼 많은 객체 지향적이지는 않다고 생각합니다. 그래서 어쩌면 내가해야 즐길 다른 패러다임에서 작업?
Statement

그렇습니다. 나는 지금 학습의 단계에 있기 때문에 특정한 방식으로 글쓰기의 가능성을 탐구합니다. 직장에서 종종 그러한 코드를 작성할 시간이 없었으므로 개발자는 행동 강령을 존중하고 일관된 스타일을 유지해야합니다.
Statement

2
작업 사이에 있기 때문에 모든 도구를 사용할 때 절대적으로 괜찮습니다. 그러나 신발이 맞는지 여부를 알 수 없습니다.
user281377

12

F #을 선택할 수 있습니다 . .NET 기능 언어이므로 Visual Studio를 사용하고 많은 .NET 지식을 재사용 할 수 있습니다. 물론 어셈블리는 C # 어셈블리와 완벽하게 통합되므로 한 프로젝트에서 C #, C ++ / CLI 및 F #을 쉽게 결합 할 수 있습니다. F # 지원은 VS Pro 이상과 함께 제공되지만 기본적으로 활성화되어 있는지 확실하지 않습니다.


VS2008에는 F # 용 애드온이 있다고 생각하지만 VS2010에서는 기본값입니다.
apoorv020

F #은 무료 VS Shell에서도 작동합니다.
SK-logic

6

IMO, 기능적 언어를 사용해 볼 가치가 있습니다. 출시 된 제품에서 직접 사용하지 않더라도 학습하는 것은 프로그래밍에 대해 다소 다른 견해 / 조망을 제공하는 데 도움이 될 것입니다. C #에서 "실제"코딩을 모두 계속 수행하더라도 C #으로 작성하는 코드를 개선하는 데 도움이 될 가능성은 매우 높습니다.

다른 사람들이 언급했듯이 Visual Studio에 익숙한 사람에게는 F #이 기본적으로 Ocaml / Caml / ML 파생 상품입니다. IMO는 사람들에게 기능적 프로그래밍을 소개하는 데있어 Microsoft에서 좋은 선택이었습니다.이 기능은 본격적인 기능 언어이지만 일부 언어만큼 외국어 구문이 거의 없습니다 (예 : Lisp 기반 언어의 경우) 실제 장점이 있지만 초보자는 거의 항상 읽기가 어렵습니다.


2

그렇습니다.

Haskell과 같은 순수한 언어를 선택하면 새로운 언어뿐만 아니라 새로운 사고 방식을 배울 수 있습니다. 이것은 나중에 pro / ural 작업에서도 도움이 될 수 있습니다.

반면에 F #은 순수하지 않으므로 함수형 프로그래밍에서 중요한 것을 쉽게 놓칠 수 있습니다. 말하자면, 여기서 변수를 변경하는 절차 적 프로그램을 계속 작성하고 F # 구문으로 부작용을 수행 할 수 있습니다.


나는 실제로 tryhaskell.org 에서 시작했습니다 . :) 새로운 것을 배우는 것이 흥미 롭습니다.
Statement

1

이미 c #을 사용하고 있다면 확장 메소드, 람다 및 일반 Func / Action 유형의 조합으로 새로운 언어가 필요하지 않습니다. 전체 애플리케이션을 변경할 필요없이 가장 적합한 알고리즘.


1
항상 다른 언어가 필요합니다. 사용하지 않더라도 새로운 언어를 배우는 것은 훌륭한 학습 경험입니다. 어느 언어도 모든 것을 갖추고 있지 않습니다.
Toby Allen

항상 배워야하지만 항상 다른 언어를 배워야 할 필요는 없습니다. 이점은 언어 자체가 아닌 함수형 프로그래밍 개념을 배우면 얻을 수 있으며 친숙한 환경을 떠나 전체 프로젝트를 변경하지 않고도이를 수행 할 수 있습니다. C #은 충분하며 실제로는 실제로 혜택을받는 알고리즘에 기능 코드 만 있으면 큰 이점이 있습니다.
Tom Clarkson

그래, 나는 이것을 외우면서 자주 일하는 방식으로 방법 / 기능을 다루는 데 더 적합한 언어 (구문 적으로)가 있다면 내 관심사가 더 편향되어 있다고 생각한다. C #은 람다 식을 제공하지만 그 자체로는 훌륭하지만 예를 들어 함수가 매개 변수없이 값을 반환하면 () => x와 같은 코드를 생성하고 더 깨끗한 방법이있을 수 있습니다.
Statement

@Toby +1 방금 최근 UnrealScript 참조를 훑어 보았고 상태 등을 다루는 흥미로운 언어 솔루션을 보았습니다. 문제에 대한 생각의 관점에서 C #으로 넘어 가고 꽤 좋은 해결책이 있습니다. 그래서, 나는 당신이 당신의 샌드 박스에서 나와 당신이 찾은 모든 모래와 장난감에 대해 이웃을 약탈 할 때 당신이 많은 것을 배운다고 믿습니다 :)
Statement
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.