언어의 세부 사항을 단순히 배우기보다는 실제로 프로그래밍하는 법을 배우고 있는지 어떻게 알 수 있습니까? [닫은]


82

나는 종종 실제 프로그래머가 일주일 이내에 어떤 언어라도 쉽게 배울 수 있다고 들었습니다. 언어는 일을 끝내기위한 도구 일뿐입니다. 프로그래밍은 배우고 숙달해야하는 최고의 기술입니다.

언어의 세부 사항을 단순히 배우기보다는 실제로 프로그래밍하는 법을 배우고 있는지 어떻게 알 수 있습니까? 그리고 한 언어가 아닌 모든 언어에 적용 할 수있는 프로그래밍 기술을 어떻게 개발할 수 있습니까?


25
다른 언어를 배우십시오. 새로운 언어로 모국어로 해결하는 방법을 이미 알고있는 문제를 해결하십시오. 처음에는 쉽지 않습니다. 그러나 오래된 문제를 새로운 방식으로 해결하면 배우기가 훨씬 쉬워집니다 (참고 : 시간이 조금 걸릴 수 있음).
FrustratedWithFormsDesigner

42
또한 일주일 내에 언어를 배울 수 있다고 주장하는 사람들은 "배우다"라고 말할 때의 의미를 정의해야합니다. "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!". 1 주일 후 :"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL

9
하나의 질문이 필요합니다. 논리를 구문으로 구성하거나 더 빠르고 효율적인 정신 모델을 사용합니까? 초보자 프로그래머는 구문을 사용하여 생각하는 경향이 있습니다.
ChaosPandion

10
@PaulR : 자전거를 타는 방법을 배우는 데 10,000 시간이 걸리지 않았습니다. 아니면 그 문제를 위해 수영하십시오.
Robert Harvey

7
@PaulR이 말은 단순히 "학습"하는 것이 아니라 기술 을 습득 하는 데 10k 시간이 걸린다는 것입니다.
Tobias Kienzler

답변:


96

다음과 같은 진술에서 일반적으로 들리는 어리석은 "기술"개념을 충족시키는 것에 대해 걱정하지 마십시오.

  • 모든 프로그래밍 언어는 기본적으로 동일합니다.
  • 한 언어를 잘 선택하면 다른 언어를 빠르고 쉽게 선택할 수 있습니다.
  • 언어는 도구 일 뿐이며 실제로 소프트웨어를 만드는 가장 중요한 두뇌 마법이 있습니다.

이 문장들은 모두 결함이있는 전제에 기초하고 있으며 광범위한 프로그래밍 언어에 대한 경험 부족을 배신합니다. 그것들은 매우 일반적인 진술이며 많은 프로그래머들에 의해 강력하게 믿어지고 있습니다.

Haskell , Prolog 또는 Agda 의 기본 사항을 배우려고 1 주일 (또는 실제로는 며칠이 넘는 시간)을 보내십시오 . 당신은 머릿속에서 오래된 세서미 스트리트 (Sesame Street) 노래를 듣는 것을 곧 시작하게 될 것입니다.

결과적으로, 우리 중 95 %가 수행했거나 수행 한 것과는 다른 외국의 프로그래밍 언어, 기술 및 접근 방식이 있습니다. 많은 사람들은 이러한 다른 개념들도 존재한다는 사실을 완전히 인식하지 못합니다. 이는 훌륭하며, 이러한 개념들이 고용되고 효과적인 프로그래머가 될 필요는 없습니다.

그러나 사실은 남아 있습니다. 이러한 기술과 접근 방식은 존재하며 많은 다른 것들에 유용하고 매우 유용 할 수 있지만, 여러분이 익숙한 것과 같지 않으며 사람들은 오후의 어리 석음으로 간단히 선택할 수 없습니다.

또한, 사람들이 프로그래밍 언어와 같은 복잡한 것들을 일주일 정도로 빨리 배우거나 주장 할 수있는 대부분의 경우에는 Wikipedia (강조 광산) 의 Dunning Kruger Effect 로 고통 받고 있습니다 .

독촉-크루거 효과는 미숙련 된 개인이 환상적 우월성을 겪고인지 능력이 실수보다 평균보다 훨씬 높게 평가되는인지 적 편견입니다. 이 편견은 미숙련자가 실수를 인식 할 수없는 메타 인 지적 능력이 없기 때문입니다.

Peter Norvig의 프로그램 학습 개념에 대한 경험이 풍부한이 견해를 사람들에게 소개하고자합니다 . 10 년 후 프로그램 배우기 .

연구원 (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973))은 체스 연주, 음악 등 다양한 분야에서 전문 지식을 개발하는 데 약 10 년이 걸린다는 사실을 보여주었습니다. 작곡, 전신 작전, 회화, 피아노 연주, 수영, 테니스, 신경 심리학 및 토폴로지 연구. 핵심은 심의적인 실천입니다. 반복해서하는 것이 아니라 현재의 능력을 넘어서는 과제로 도전하고, 시도하고, 수행하는 동안과 수행 한 후에 성과를 분석하고, 실수를 수정하는 것입니다. 그런 다음 반복하십시오. 그리고 다시 반복하십시오.


모든 언어를 쉽게 배울 수 있도록하는 중요한 원칙들이 있습니다!

아마도, 그러나 나는이 원칙들이 너무 커서 1 주일이 아닌 언어는 거의 항상있을 것이라고 주장합니다. 친숙하고 익숙한 목록에 새로운 개념을 추가하면이 언어 목록이 즉시 접근 할 수 없게되지만 사라질 것이라고 믿기가 어렵습니다. 사물에 대한 개념적 컴퓨팅 접근법의 목록은 연결 언어 에서 벡터 기반 언어 , AI 또는 메타 프로그래밍 전문 언어 ( 또는 정규식을 지원하기 위해 존재하는 언어) 에 이르기까지 매우 광범위합니다 .

10 년 후에는 일반적으로 프로그래밍 할 수 있습니다. 즉, 일부 언어 또는 언어 스타일로 다소 괜찮은 코드를 작성할 수 있습니다. 따라서 10 년이 지나면 남은 평생 동안 수많은 수많은 교차 절단 개념을 시작할 준비가되었고 Edsger W. Dijkstra , Donald Knuth 또는 John D. Carmack의 부족으로 인해 모든 것을 얻을 수는 없습니다. 그들의.


11
응 언어를 "인식"하는 것과 사소한 버그를 발견하고 수정하기에 능숙한 것에는 차이가 있습니다. 좋은 프로그래머는 후자의 언어를 사용하더라도 후자를 아주 빨리 할 수 ​​있습니다.
Telastyn

5
@ CharlesE.Grant 나는 대학에서 대다수가 배우는 것을 과대 평가하고 Haskell이나 Prolog와 같은 언어에서 반 숙련까지 걸리는 시간을 과대 평가한다고 생각합니다. 기능 프로그래밍 경험이없는 숙련 된 업계 숙련 된 엔지니어는 Haskell 프로그램에서 첫 번째 버그를 수정하는 데 일주일 이상이 소요될 것이라고 주장합니다.
Jimmy Hoffa

11
나는 여전히 기본적인 개념들이 매우 컴팩트하다고 주장한다. 용어 재 작성 을 이해하면 람다 미적분학, SK 미적분학, 튜링 머신, 마르코프 알고리즘 등을 정의 할 수있는 도구가 있습니다. 소수의 진정한 기본 아이디어는 대부분의 컴퓨터 과학을 포괄 할 수 있습니다. 그러나 당연히 복잡한 것처럼 보이는 단순한 패턴을 볼 수있는 경험이 필요합니다.
SK-logic

4
나는 단순히 "프로그래밍 언어"= "c- 스타일 프로그래밍 언어"라고 가정하는 것처럼 독촉-크루거 효과가 아니라고 말하고 싶습니다. 적절한 양의 C ++, 알맞은 양의 C # 및 펄과 파이썬의 일부를 알고 난 후 일주일 안에 Java, PHP 등에 능숙하게 유창해질 수 있다고 생각합니다. 반드시 전문가는 아니지만 최소한 유창합니다. 나는 않았다 며칠 자바 스크립트를 선택하십시오. 이 시점에서 주로 차이점을 배우는 것이 중요합니다. 참고 : 가장 많이 사용되는 실제 언어 c와 비슷합니다. 예를 들어, 프롤로그도 마찬가지 일 것입니다.
neminem

2
@WayneWerner 진심으로, Haskell 또는 Prolog와 algol 언어의 차이점은 구문 이상의 것입니다. 당신은 단지 신화를 영속시키고 있습니다. 1 주일 동안 Haskell을 배우고 그것이 어떻게 효과가 있는지 알아보십시오. 솔직히, 그것은 당신에게 좋을 것입니다.
Jimmy Hoffa 23.09에

51

... 한 언어가 아닌 모든 언어에 적용 할 수있는 프로그래밍 기술을 어떻게 개발할 수 있습니까?

이 질문의 핵심은 언어를 초월하고 코딩하는 언어 가 아닌 것으로 생각하는 것 입니다.

와트?

숙련 된 폴리 글 로트 프로그래머 는 자신의 언어 정신 모델의 추상 구문 트리 (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에 사과드립니다 .)


3
사과 할 필요가 없습니다. 나는 당신이 인상적인 답변을 작성했다고 생각합니다.
ChaosPandion

나는 그 방향으로 생각하게 한 사람에게 답을 쓰도록 신용하고 싶었다.

3
이것은 매우 좋은 답변입니다. 내가 두 번 투표 할 수 있으면 좋겠다.
Wayne Werner

2
실제로 이것은 당신이 OO를 먼저 배워서는 안되는 이유입니다. 이것은 두뇌를 상상할 수있는 최악의 AST 중 하나로 설정하기 때문입니다.
Morg.

1
@JimmyHoffa-당신이 옳을 수도 있습니다. 나는 항상 처음에는 하나의 언어를 사용하고 나중에 더 천천히 소개했습니다. 나는 항상 브레이크를 밟고 한 언어에 집중할 수 있기 때문에 탐험 할 가치가 있다고 생각합니다. (SML은 실제로 좋은 선택 인 것 같습니다.)
ChaosPandion

12

언어를 선택하고 코딩을 시작하십시오. Python은 초보자에게 적합한 선택이며 온라인 에서 사용할 수 있는 자습서가 있으므로이를 올바르게 수행하는 방법을 배울 수 있습니다.

그로부터 모든 것이 뒤 따른다. 여러분의 관심은 프로그램에 정교함을 더해줄 프레임 워크와 디자인 컨셉으로 이어질 것입니다. 당신은 기초와 이론에서 당신을 기초로 할 수있는 온라인 코스가 있으며, 탐구 할 수있는 다른 프로그래밍 패러다임 등이 있음을 알게 될 것입니다.

그렇습니다. 기초에 확고한 근거가 있다면 하스켈과 같은 새로운 언어를 발견하게 될 것입니다.

일부 프로그래머는 아마도 다르게 생각하게 만드는 언어에 노출되지 않았기 때문에 모든 언어가 동일하다고 생각할 것입니다. 가장 일반적으로 사용되는 모든 언어는 Algol (기본적으로 절차 언어 임)에서 파생되며 대부분 C와 유사한 중괄호 언어입니다. 일부 언어는 다른 언어보다 더 정교하지만 본질적으로 동일한 작업을 수행합니다.


2
그래도 사실이 아니십니까? 일부 프로그래밍 언어는 모든 것을 순수한 기능 (의사 결정 + 루프 포함)으로 인코딩합니다. 다른 것들은 세트 등에서 물건을 밀거나 터지는 등으로 모델링 할 수 있습니다.
jozefg

1
사실이 아닌가? 걷거나 달리기 전에 크롤링하는 방법을 배워야합니다.
Robert Harvey

1
아, 나는 마지막 단락을 의미하고, 나는 나머지 답변에 동의합니다
jozefg

1
나는 마지막 단락을 내 감정을 더 잘 반영하는 단락으로 대체했습니다.
Robert Harvey

5

프로그래밍은 솔루션이 프로그래밍 언어로 구현 될 수있는 제한된 문법으로 표현 될 수있는 방식으로 해결되는 문제에 관한 것입니다. 따라서 프로그래밍 기술은 문제를 해결하는 기술입니다.

특정 언어는 객체 지향, 이벤트 중심, 멀티 스레드 및 MVC 프레임 워크 기반과 같은 다른 프로그래밍 패러다임을 초대합니다. 이들은 모두 모델과 패턴 일 뿐이며 구현과는 전혀 관련이 없습니다.

코드로 쉽게 번역되고 해당 플랫폼에 적합한 모델과 관련이있는 방식으로 종이에 문제를 앉아서 해결할 수 있다면 프로그래머입니다. 당신이 할 수있는 모든 것이 그 해결책을 취하여 우리가 선택한 언어로 구현한다면, 그것은 또 다른 문제입니다.

저는 30 년 동안 프로그래밍을 해왔으며 (OMFG!) php.net제 첫 언어가 아니기 때문에 여전히 PHP에서 명령을 조회하는 데 사용합니다.

언어에 대한 전문 지식이 수동 또는 스택 오버플로를 얼마나 자주 보는지에 반비례한다고 말하고 싶습니다. 프로그래밍 전문 지식은 컴퓨터 프로그래밍 언어와 호환되는 방식으로 문제를 얼마나 쉽게 해결하는지입니다.

관련 뉴스에서 나는 지난주 루비를 배웠다. "전문가"는 아니지만 Perl로 작성할 수있는 문제를 해결 한 다음 좀 더 배우면서 Ruby로 번역하는 데 시간을 보냅니다.


귀하의 의견은 모델과 패턴에 대해 처음 읽은 것입니다! 나는 당신의 의견에 100 %입니다, 한 가지는 언어를 얻고 프로그램을 시작하는 것입니다. 다른 하나는 문제를 통해 생각하고 문제를 해결할 수있는 적절한 도구를 찾은 다음 언어를 찾고 프로그래밍을 시작하는 것입니다.

3

나는 무엇과 마찬가지로 연습이 완벽하다고 생각합니다. 항상 같은 일을하거나 항상 같은 언어를 사용하고 모든 프로젝트에서 계속 배우는 일을하지 마십시오.

기타 연주를 배우는 것과 같은 것을 쉽게 평행하게 그릴 수 있다고 생각합니다. 좋은 음악가라면 아주 짧은 시간에 새로운 곡을 연주하는 법을 배울 수 있습니다. 왜냐하면 모든 코드와 코드가 왜 연주되는지에 대한 이론을 이미 알고 있기 때문입니다. 그들은 어떻게 그것을 잘 얻습니까? 그들은 모든 패턴이 함께 혼합 된 노래를 너무 많이 연주하는 동시에, 실제 패턴 화 된 이론으로 지식을 보완하여 패턴이 구독하도록했습니다.

따라서 몇 곡을 아주 잘 연주 할 수는 있지만 새로운 곡을 빨리 옮길 수는 없습니다. 이것은 아마도 동일한 CRUD 응용 프로그램을 계속해서 계속해서 만드는 새로운 .NET 프로그래머와 같습니다 . 어떤 시점에서 새로운 것을 시도하거나 일부 웹 서비스 호출이나 고급 UI를 추가하거나 완전히 새로운 언어로 작성합니다. 문제가 발생하는 이유를 파악하고 스택 교환에 대한 질문을하는 등의 결과를 알아 차리면 결국 지속적으로 나타나고 일부 기본 이론을 알고 새로운 언어를 배우지 못하는 모든 패턴을 보게됩니다. 거의 끔찍한 것 같습니다.


1

언어를 배우는 데 걸리는 시간이나 언어를 배우는 것이 의미하는 바를 다루지 않겠습니다. 대신 실제 문제를 다룰 것입니다. .

문제를 개별 프로세스로 나누고 해당 프로세스를 사용하여 문제를 해결하는 방법을 배운 경우 프로그래밍 방법을 배웠습니다. 언어의 구문을 배우고 해당 언어로 구현 될 때 프로세스 작동 방식을 조정하는 방법을 알고 있다면 프로그램 언어를 배웠습니다.

이것은 Lisp를 사용할 때 Fortan에서 프로그래밍하거나 커서를 사용하여 db의 테이블에있는 열의 값을 합산해야한다는 의미는 아닙니다. 언어는 구현 세부 사항입니다. 필요한 프로세스를 변경할 수는 있지만 프로세스를 식별하고 생성 할 필요는 없습니다. 결국 입력 / 출력 및 원하는 결과를 제공하는 실제 구현이 있습니다.


1

나의 전략은 항상 특정 기술보다는 순수한 기술에 집중하는 것이 었습니다.

원하는 모든 것을위한 Python (또는 다른 언어)의 특수 구문을 배우는 대신, 해당 범주의 모든 문제를 가장 잘 해결하는 방법과 같은 추상적 문제를 해결하는 데 두뇌주기를 사용하십시오.

그렇게하면 언어에 관계없이 무엇을해야하는지 알 수 있으며 대부분의 언어로 프로그래밍하는 데 사용할 수있는 영원한 기술을 보유하게됩니다.

특히 이러한 도구를 사용하여 학습하는 도구에는 매우 많은 도구 관련 지식이 있으므로 쓸모없는 도구가 될 수 있으므로 MySQL과 같은 문제가있는 도구 나 Java와 같은 의견이 많은 언어를 사용하지 마십시오.

많은 답변에서 말한 것과는 달리, 다른 프로그래머의 말을 듣지 마십시오. 당신은 멍청하고 실제 거래에서 가짜를 알 수있는 방법이 없으므로 소금 한 숟가락으로 모든 것을 복용하는 것이 좋습니다.

항상 질문하고 솔루션이 빠르고 우아하며 신뢰할 수있는 경우에만 수락하려고합니다.


1
"다른 프로그래머의 말을 듣지 마십시오" – 물론입니다. "-읽기 쉽고 유지 관리가 쉬운 코드를 작성했는지 어떻게 알 수 있습니까?-동료가 코드를 검토 한 후 알려줍니다. 이론적 근거 : 코드 자체가 작성한 것보다 저자에 대해 더 많이 알기 때문에 직접 결정할 수는 없습니다. 컴퓨터 그림이 예술인지 아닌지를 알 수없는 것과 같은 이유로 여러분에게 말할 수 없습니다. 따라서 소프트웨어를 유지할 수있는 다른 인간이 필요합니다. 당신이 쓴 것을보고 의견을 말하십시오 ... " ( 인용 출처 )
gnat

@gnat은 당신이 좋아하는 것을한다. 나는 단지 대부분의 프로그래머가 똥을 코딩 할 수 없기 때문에 그들의 피드백은 잠재적으로 해롭다는 것을 말하고 있습니다. 또한 "모론이 편집하고 읽을 수있는"것은 품질의 표시가 아니라고 생각합니다. 사람들이 당신의 비전에 동의하지 않기 때문에 당신이 원하는 것을 믿으십시오.
Morg.

내 투표는 동의 여부에 상관없이 사후 품질 평가를 나타냅니다 (동의 함, 여기에 요점이 있다고 생각합니다). 나는 반대 의견이 아니라 확실한 의견이 있기 때문에 다른 의견을 인용했습니다 ( "RATIONALE"참조). 의견을 뒷받침하는 유사한 설명을 생각할 수 있다면 게시물을 편집 하여 추가하십시오.
gnat

도대체 무엇이. content> form. 당신의 양식을 유지, 나는 내 내용을 유지합니다.
Morg.

0

이론적 인 접근 방식이 있습니다. 컴퓨터가 실제로 작동하는 방식에 대해 학습합니다. 기본 프로세서 명령어가 어떻게 연결되어 고급 프로그래밍 영역에서 당연한 복잡한 작업과 구조를 만드는가?

그런 다음보다 실용적인 프로그래밍 방식이 있습니다. 전염병 사람들이 일반적으로 "좋은 프로그래머가 아닌 것"으로 분류 된 주요 문제점 한 언어 만 알고 있다는 것입니다. 그리고 다른 사람들을 알고 있더라도 모국어 와 같은 방식으로 프로그래밍합니다. 그들이 실제로 프로그래밍하는 법을 배우고 싶다면 그것은 반드시 깨져야 할 사이클입니다. 이에 대한 기본 답변은 각 프로그래밍 패러다임에서 적어도 하나의 언어를 배우는 것입니다. 따라서 OOP 언어, 기능적 언어, 스크립팅 언어 등을 배우십시오. 그리고 학습을 통해 구문을 배우는 것은 아닙니다 . 실제로 언어를 사용하여 무언가를 만들어 언어를 배웁니다.

개인적으로 새로운 언어를 배우고 싶을 때는 Project Euler 퍼즐 러를 사용합니다. 나는 OOP 언어로 이미 해결 한 퍼즐에 가서 (예를 들어) 새로운 언어의 모범 사례를 따르려고하면서 기능적 언어를 사용하여 해결하려고합니다. 근본적으로 다른 두 가지 접근 방식을 사용하여 동일한 문제를 해결하면 실제 차이점이 무엇인지 알 수있을뿐만 아니라 공통 영역의 위치도 알 수 있습니다. 모든 언어가 공유하는 이러한 공통 영역은 실제 프로그래밍 이며 차이점은이를 달성하는 다른 방법 일뿐입니다.


4
나는 컴퓨터의 물리적 행동에 대한 학습을 ​​"이론적 접근법", "이론적 접근법"은 이론을 배우고, 교회 학습 논문을 읽고, 카레 하워드 동 형사상을 배우고, 람다 미적분학과 수 이론의 기초는 이론적 토대입니다. 당신의 대답이 옳고 그르다 고 말하지 않고, 이론이 결여되어 있기 때문에 이론적이지 않은 구체적인 접근법이라고 말할 것입니다.
Jimmy Hoffa

@JimmyHoffa-좋은 포인트!
시스템 다운

1
"기본 프로세서 명령어가 함께 묶여있는 방법 (...)"은 초보자에게는 끔찍한 아이디어처럼 보입니다 (OP는 자신이 하나라고 말하지 않았지만 논쟁을 위해 가정 할 수 있습니다. 실제로 방법을 가르치지 않고 '마이크로 최적화'를 가르칩니다. 최적화하기 위해 (3-5 단계 아키텍처는 약간 오래된 것으로 간주 될 수 있습니다 ...) CA를 매혹스럽게 생각하십시오- '적절한'감상에는 '순서가 틀린'및 '다중 스칼라'와 같은 단어가 필요합니다. 아마도 기본적인 프로그래밍 경험이있을 것입니다.
Maciej Piechotka

0

글쎄, 내가 말하고 싶은 대부분의 말은 이미 언급되었습니다. 내가 추가하고 싶은 것은 매우 간단한 비유입니다.

프로그래밍 언어가 단순한 도구로 여겨지더라도, 케이크 워크에서 다른 사람을 능숙하게 만드는 논리는 전혀 없습니다.

명망 높은 마스터 검객들을 고려하고, 갑자기 검을 내려 놓고 7 일 훈련 후 창으로 전투를 시작했습니다. 무슨 일이 일어날 지? 그들은 학살 될 것입니다.

언어는 배우기가 어렵지 않지만 잘 이해하려면 인내와 운동이 필요합니다. 또한 프로그래밍을 배우는 올바른 방법 은 없습니다 .

프로그래밍 학습은 RPG 게임을하는 것과 같습니다. 때로는 칼, 때로는 창, 때로는 방패를 사용합니다. 당신이 죽일 때마다 경험치가 획득됩니다. 경험치가 충분하면 레벨이 올라갑니다. 이제 칼을 습득해도 활과 화살이 뛰어나지 않습니다. 그러나 이전에 얻은 경험의 일부는 체력과 속도를 증가시킵니다.

언어를 배울 때 할 수있는 몇 가지 일이 있습니다.

  • 언어에 대해 읽으십시오. 흥미롭게 들리면 Hello World 앱을 직접 사용해보십시오.
  • 튜토리얼, 트릭, 블로그를 읽으십시오.
  • 재미를 위해 간단한 앱을 만드십시오.
  • 다른 기능을 테스트하십시오.
  • 당신이 정말로 그것을 좋아한다면, 책이나 비디오 튜토리얼을 구입하십시오.
  • 좋은 도서관을 찾으십시오.
  • 답변을 검색하고 답변을 찾을 수없는 경우에만 물어보십시오.
  • 다른 사람들이 답변을 요청하도록 도와주세요
  • 유용한 것을 만드십시오. 계산기 앱을 만드는 것이 좋은 운동 일 수 있지만 TO-DO 목록 앱을 만들고 실제로 PC / 전화에서 사용하는 경우 느낌이 100 배 만족 스럽습니다.

새로운 언어를 경험하고 새로운 라이브러리를 탐색하며 자유 시간에 새로운 트릭을 배우십시오. 당신이 그것을 알기 전에 당신은 자신의 기술로 자신을 놀라게 할 것입니다.


0

필자의 경우 실제로 다음을 통해 프로그래밍하는 방법을 배웁니다.

  1. 마스터로부터 배우십시오. Podcast 프로그래밍을 듣고, 선택한 프로그래밍 주제의 전문 블로그를 읽고, 웹에 흩어져 있고 마지막으로 Pragmatic Programmer 와 같은 서사를 읽는 전문가가 수행 한 멋진 자습서를 읽거나 봅니다 . 이 책은 저자의 경력 전체에 축적 된 많은 프로그래밍 보석을 가지고 있습니다. 실제로 코딩하는 방법을 배우는 확실한 방법은 다른 성공적인 프로그래머가 어떻게 하는지를 아는 것입니다.
  2. 수행하여 경험하십시오. 그것에 대해 읽고 아는 것이 한 가지입니다. 실제로 그것을 실천하고 작동시키는 것은 또 다른 것입니다. 경험보다 더 나은 교사는 없으므로 코딩 캡을 착용하고 시작하십시오.
  3. 아는 사람에게 물어보십시오. 지금하고있는 것처럼 팀의 선배로부터 모범 사례 나 더 나은 방법을 물어 보거나, 선배 나 멘토 또는 전문가에게 접근 할 수 없을 정도로 불행한 경우, 그래도 여전히 나머지 stackexchange와 인터넷이 있습니다.

또한 댓글 작성자가 언급했듯이 도구도 숙달하는 것을 잊지 마십시오. 도구,이 경우 프로그래밍 언어에 대해 충분히 알지 못하면 모범 사례와 최고의 이론을 모두 배우는 것이 좋지 않거나 제대로 구현되지 않습니다.


0

만약 당신이 분석적으로 생각할 수 있다면, 당신은 시작이 좋다고 생각합니다.

프로그래밍을 가르치는 거의 모든 책에서 제시된 일련의 예제를 통해 원하는 언어를 배우고 직접 작업하십시오.

다음으로 자신의 문제를 해결하십시오. 다른 솔루션을 찾아 비교해보십시오. 속도와 메모리 사용량은 일반적으로 중요한 요소입니다. 솔루션을 다른 프로그래머와상의하십시오.

다른 프로그래머의 코드를 읽고 왜 이런 식으로 문제를 해결했는지 이해하십시오.

표준 접근법에 대한 개요를 얻으려면 알고리즘에 관한 책을 읽어야합니다. 새로운 문제는 종종 오래된 문제의 수정입니다.

팀에서 많은 연습과 코드 작업을 통해 기술을 단계별로 향상시킬 수 있습니다.

내 의견이 적어도 부분적으로 질문에 대답하기를 바랍니다.

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