... 한 언어가 아닌 모든 언어에 적용 할 수있는 프로그래밍 기술을 어떻게 개발할 수 있습니까?
이 질문의 핵심은 언어를 초월하고 코딩하는 언어 가 아닌 것으로 생각하는 것 입니다.
와트?
숙련 된 폴리 글 로트 프로그래머 는 자신의 언어 정신 모델의 추상 구문 트리 (AST)를 생각합니다. "여기에 for 루프가 필요합니다"라고 생각하지 않고 "어떤 것을 반복해야합니다"라고 생각하고 해당 언어에 대해 적절한 동안 또는 동안 또는 반복기 또는 재귀로 변환합니다.
이것은 언어를 배우는 것과 비슷합니다. 많은 언어를 유창하게 구사하는 사람들은 그 의미를 유창하게 생각 하며 주어진 언어로 나옵니다.
초보자 와 숙련 된 프로그래머의 눈의 움직임을 볼 수있는 시선 추적 및 시선 추적 코드 실험 (초보자)을 갖춘 시선 추적 비디오 코드 에서이 AST의 실마리를 볼 수 있습니다 . 숙련 된 프로그래머가 코드를 정신 모델로 '컴파일'하고 머릿속에서 '실행'하는 것을 볼 수 있지만 초보자는 키워드별로 코드 키워드를 반복해야합니다.
따라서 모든 언어 에 적용 할 수있는 프로그래밍 기술 개발 문제의 핵심 은 여러 언어를 학습하여 한 언어 의 정신 모델을 갖지 못하게 하고 문제에 대한 AST를 자체적으로 생성 할 수있는 능력을 개발하는 것입니다. 주어진 언어로 번역 된 헤드 언어.
일단 AST를 머리에서 사용할 수있는 능력이 있으면 비슷한 생각의 학교에서 다른 언어를 배우는 것이 좋습니다 ( Befunge 로 가는 것은 Java에서 약간의 점프이지만 Forth 에서는 그리 많지 않습니다 ). AST를 새로운 언어로 번역하면 3, 4, 5 등이 훨씬 쉬워집니다.
Real 프로그래머가 파스칼을 사용하지 않는 고전 기사가 있습니다 . 이것의 일부는 다음과 같습니다.
... 결정된 Real Programmer는 모든 언어로 Fortran 프로그램을 작성할 수 있습니다
또한 정신적 AST를 사용할 수없는 비트도 있습니다-언어로 생각해야합니다. 이 작업을 수행하는 데 약간의 시간이 걸립니다 (필자는 여전히 Perl 코드를 Python 으로 작성했다고 비난을 받았으며 첫 번째 Lisp 코드는 "이것은 매우 좋은 C 프로그램입니다."라고 검토되었습니다).
이를 위해 ACM에서 발행 한 기사, 어떤 언어로도 포트란을 작성하지 않는 방법을 지적해야합니다 . 기사의 세 번째 단락 (인용 부호가 아님)은 해당 문제를 직접 해결합니다.
모든 범용 프로그래밍 언어를 능가하는 우수한 코딩 특성이 있습니다. 자신에게 적용하면 거의 모든 코드에서 우수한 디자인과 투명한 스타일을 구현할 수 있습니다. 프로그래밍 언어로 인해 잘못된 코드를 작성할 수 있다고해서 반드시 코드를 작성해야하는 것은 아닙니다. 좋은 스타일과 디자인을 장려하도록 설계된 프로그래밍 언어는 코더가 충분히 창의적이라면 여전히 끔찍한 코드를 작성하는 데 사용될 수 있습니다. 1 인치의 물이 담긴 욕조에서 익사 할 수 있으며 예외 처리, 일반 유형 및 가비지 수집을 통해 고도 나 줄 번호가없는 언어로 완전히 읽을 수없고 유지 관리 할 수없는 프로그램을 쉽게 작성할 수 있습니다. Fortran, Java, C ++ 또는 Smalltalk를 작성하든 나쁜 코드 대신 좋은 코드를 작성하도록 선택할 수 있습니다.
AST를 갖는 것만으로는 충분하지 않습니다. AST를 다른 언어로 번역 할 수있는 AST가 필요합니다. Fortran AST를 사용하고 Java로 Fortran 코드를 작성하는 것은 좋지 않습니다. 언어로 생각할 수 있도록 언어와 관용구에 대해 잘 알고 있어야합니다 (맨 위에 말한 내용에도 불구하고).
C 코드 작성을 중단하지 않은 사람이 Java 코드를 작성하는 것을 보았습니다. 주된 방법으로 하나의 객체가있었습니다. 이 객체에는에 의해 호출 된 정적 메소드 main
와 퍼블릭 필드가있는 개인 내부 클래스가있었습니다 (따라서 스트럿처럼 보입니다). Java로 작성된 C 코드였습니다. 한 언어 의 구문 을 다른 언어 로 번역하는 것이 전부였습니다 .
이 시점을 벗어나려면 코드를 디자인 할 때 해당 언어를 생각 하지 말고 언어 관용구를 올바르게 사용하기 위해 디자인을 코드로 변환 할 때 생각해야합니다.
모든 언어에 적용 할 수있는 프로그래밍 기술을 개발할 수있는 유일한 방법은 언어를 계속 배우고 하나의 언어에 연결되지 않고 정신적 인 프로그래밍 언어를 유연하게 유지하는 것입니다.
(내가 제시 한 아이디어 에서 많은 돈을 빌려준 ChaosPandion에 사과드립니다 .)