프로그래밍 언어를 어떻게 마스터 할 수 있습니까?


103

언어를 배우고 책을 사거나 예제를 따르고 가능할 때마다 연습을 해 볼 수 있습니다. 그러나 내가 정말로 찾고있는 것은 일단 당신이 그것을 배우고 나면 언어를 마스터하는 방법입니다.

이제 나는 경험이 중요한 요소라는 것을 알고 있지만 언어의 내부를 배우는 것과 기초 구조는 무엇인가 등을 알고 있습니다.

이 책을 읽고, 그 책을 읽고,이 게임과 그 게임을 만든다는 기사가 있습니다. 그러나 이것이 언어를 마스터한다는 의미는 아닙니다. 아무리 힘들어도 다른 사람들의 코드를 읽고 이해하고 싶습니다. 기능 사용시기 및 기타시기 등 이해

목록은 계속 이어질 수 있지만 나는 내가 지적한 것으로 믿는다. :)

마지막으로, 필요한 경우 C를 예로 든다면 가장 좋은 언어가 될 수 있습니다.


11
경험은 그것이 진정으로 끓는 전부입니다. 당신이 전문가 인 모든 이론은 실제로 적용 할 수 없다면 쓸모가 없습니다.
Simon Whitehead

2
이 언어의 컴파일러를 구현하십시오. 사실, 그것은 새로운 언어를 시도하는 가장 좋아하는 방법입니다. 너무 쉽고 지루하게 들리면 K 프레임 워크 또는 이와 유사한 것을 사용하여 공식 언어 의미를 대신 정의하십시오.
SK-logic

6
"사람, 감자는 공룡, 자동차 우주"입니다. 언어를 얼마나 숙달하든 문제가되지 않습니다. 코드가 잘못되어 이해가되지 않으면 이해하기 어렵습니다.
Renato Dinhani

2
요점을 조금 놓친 것 같습니다. 언어는 진화하기 때문에 언어의 통 달성이 없으며 언어에 따라 성장할수록 더 많이 배울수록 배울 수 있습니다.
nycynik

2
코드 및 코드 읽기 임의의 리눅스 커널 (C Programming)을 가져 와서 함수가 무엇을하는지 알아 낸다.
Alex Hart

답변:


166

"위의 모든 것"에 대답해야합니다. 사람들은 코딩이 예술, 공예, 공학 분야 또는 수학 분야인지에 대해 논쟁하며, 그것이 각각의 일부라고 말하는 것이 가장 공정하다고 생각합니다. 따라서 언어를 익히기 위해 더 많은 기술을 사용할수록 좋습니다. 다음은 부분 목록입니다.

  • 하루 종일 언어를 사용하십시오. 일반적으로 이것은 언어에 풀 타임으로 고용되는 것을 의미합니다.

  • 언어에 대해 할 수있는 모든 것을 읽으십시오. 특히 "모범 사례"및 관용구.

  • 사용자 그룹에 가입하여 언어 및 언어에 대해 다른 사람들과 대화하십시오.

  • 다른 사람의 코드로 작업하십시오! 언어로하지 말아야 할 것을 배우는 더 빠른 방법은 끔찍한 일을 한 후에 청소해야합니다.

  • 작성한 코드를 지원하십시오-모든 버그는 최악의 결정을 내립니다!

  • 컴퓨터 과학 및 언어 공부

  • 매우 다른 언어를 배우십시오. C에 대한 큰 칭찬은 Lisp와 같은 기능적 언어 일 것입니다. 이것은 절차 적 언어에 대한 당신의 생각을 밖으로 바꿀 것입니다.

  • 해당 언어에 사용 가능한 프레임 워크 및 API를 사용하는 방법을 배웁니다.

  • 시간을내어 언어를 직접 실험 해보십시오. SICP는 C에는 적용되지 않지만 한계를 테스트하여 언어를 배우는 태도는 매우 생산적인 것입니다.

  • 언어의 역사를 읽고 왜 그것이 원래대로 만들어 졌는지 알아보십시오.

  • 회의에 참석하여 언어 작성자의 말을 듣거나 업계 리더가 해당 언어로 무엇을하고 있는지 듣습니다.

  • 언어 수업을 들으십시오.

  • 다른 사람들에게 언어를 가르치십시오 ( Bryan Oakley 에게 감사드립니다 )

요약하면 생각할 수있는 모든 것을하십시오. 대부분의 언어에 대한 모든 것을 알 수있는 방법은 없습니다. 사용하는 모든 학습 기술은 이해에 추가적인 관점을 제공합니다.


76
+5 지원 코드 작성 – 모든 버그는 최악의 결정을 내립니다!
Jennifer S

8
최종 문장에 대해서만 +1 :Every technique you use to learn brings and additional perspective to your understanding.
Izkata

1
@ 이즈 카타 : 세상에, 내가 쓴거야? 나는 실제로 영어 원어민입니다! 수정했습니다. 감사!
GlenPeterson

2
@GlenPeterson ... 실제로, 나는 문장이 "off"인 것에 많은주의를 기울이지 않고 붙여 넣기를했습니다. +1은 그 뒤에 의도적으로있었습니다. = P
Izkata

13
+1 "매우 다른 언어를 배우십시오. C에 대한 훌륭한 칭찬은 Lisp와 같은 기능적 언어 일 것입니다. 그러면 절차 언어에 대한 사고 방식이 뒤집어 질 것입니다." -아마도 가장 중요 할 것입니다. 프로그래밍에 대해 배우는 방법 (즉, 어떤 상황에서 무엇을 찾아야하는지)을 배우는 데 도움이됩니다.
naught101

53

10,000 시간의 연습이 필요합니다.

"10 년 안에 스스로 프로그래밍을 가르치십시오"를 읽으십시오

위의 요점 :

  • 가져 관심 프로그래밍, 그리고 재미 있기 때문에 몇 가지를 않습니다. 당신이 당신의 10 년 / 10,000 시간을 기꺼이 넣을 수 있도록 충분히 재미있게 지내십시오.
  • 프로그램. 가장 좋은 종류의 학습은 실천함으로써 배우는 것입니다.
  • 다른 프로그래머 와 대화하십시오 . 다른 프로그램을 읽으십시오.

1
그것이 제가 게시하려고하는 것입니다! 나는 아직 P.SE에 충분한 시간을 보냈다.
Martijn Pieters

@MartijnPieters : :-D
vartec

8
책에 대한 훌륭한 제목! 나는 속편을 기다릴 수 없다. "20 년 안에 스스로 프로그램을 잘 가르쳐라!"
GlenPeterson

16
그러나 동일한 10 시간을 1000 번 반복하지 않도록해야합니다.
Izkata

어떤 기술 전문 지식도 누군가가 프로그램을 자동화하거나 만들 수있는 것을 아는 데 도움이되지 않습니다. 이것은 말과 같습니다. 체육관에 가서 매일 1 시간 동안 10 년 동안 농구의 모든 기본 운동을하십시오. of! 당신은 농구 슈퍼 스타 (마스터)입니다. 아니오, 그것은 단지 기술적 인 기술 그 이상입니다. 그러므로 나는 이것이 질문에 대한 대답, 즉 마스터가되는 방법으로 간주하지 않습니까? 이것은 솔루션의 일부일 수도 있지만, 마스터 쉽을위한 마법의 물약은 아닙니다. 알아요-저는 주인이 아닙니다!
oemb1905 2018

36

그보다 더 나은 언어를 구현할 때까지 자신을 전체 언어의 대가로 생각하지 마십시오 . 즉, 특정 언어가 아래에서 어떻게 작동하는지 배우려면 언어의 컴파일러 / 통역 개념을 가르치는 책을 얻으십시오. 예를 들면 다음과 같습니다.

  • C : LCC 컴파일러 책

  • C ++ : C ++의 디자인과 진화

  • Java : "Inside JVM"을 얻고 javac 소스 코드를 얻으십시오. "java"의 .C 코드도 도움이됩니다

  • 파이썬 : CPython 구현.

  • ObjectiveC : ObjC 런타임 환경 및 컴파일러 소스 코드의 내부에 관한 Apple의 거의 모든 자료가 도움이 될 것입니다.

  • Lisp : SICP Book (언어와 같은 lisp를위한 Scheme과 기본 인터프리터-컴파일러를 가르칩니다) : 작은 조각으로 된 Lisp (또 다른 좋은 책).


1
이제 이것이 내가 대답이라고 부릅니다. 나는 이미 하나를 받아 들였지만 조금 더 이른 경우 "최고의 답변"을받을 자격이 있습니다
cprogcr

2
당신은 당신의 대답이 얼마나 도움이되었는지 전혀 모른다. 나는 당신이 언급 한 책들에 대해 읽고 있는데 그것들은 내가 필요로하는 종류입니다.
cprogcr

나는 그들에게서 배웠다. 도움을
주셔서 감사합니다

C를 예로 들었으므로 두 권의 책 이름을 선물로하겠습니다. 선물로 C를 마스터하는 데 사용했습니다. 1. OOC.PDF (무료 온라인 제공) 및 2. Minix Book (OS 구현 자 책이지만 Linus Torvalds가 Linux를 구현하기 전에 읽은
것임

1
네, 앤드류 테넨 바움 (Andrew Tenenbaum)이 그 책입니다. 모든 판을 읽는 것이 좋습니다. "C"의 작동 방식은 알려주지 않지만, 구축 한 운영 체제에서 작동하도록 C 라이브러리가 어떻게 구현되는지 알게되면 C를 더 잘 이해하기 시작합니다! . (OOC가 들어오는 곳 그리고 그건) 어쩌면 충분히 당신이 그것을 수정할 수하는
아니 켓 인게

12

사용하지 않는 언어를 사용하십시오. Python으로 디바이스 드라이버를 작성하거나 COBOL로 매트릭스 조작 라이브러리를 작성하십시오. 언어를 습득 할 수있는 가장 좋은 방법 중 하나는 언어를 강요하여 약점을 극복하는 것입니다.


1
내가 대학에있을 때 나는 Pong을 쓴 후에 언어를 "마스터 링"하기로 결정했다. 이것은 MIPS를 배울 때까지 꽤 잘 작동했습니다. 여전히 악몽이 있습니다.
냉동 완두콩의 Roddy

C로 웹 사이트를 만들 수 있습니까?
BigSack

10

나는 당신을 쉽게 만들 것입니다. 당신은 결코 언어를 습득하지 않을 것입니다. 기간. 당신이 있다고 생각한다면, 당신은 분명히하지 않았습니다. 갑자기 산 정상에 도달하여 "글쎄, 나는 그 언어를 완전히 마스터했습니다. 지금 무엇?" 수십 년 동안 같은 언어로 일해 온 노련한 프로그래머조차도 때때로 새로운 아이디어, 프로세스, 관행 등을 뛰어 넘어 가고 있다고 말할 것입니다. 진정한 목표는 언어에 대한 개념적 이해를 마스터하는 것입니다. 새로운 개념을 배우는 능력과 언어에서 새로운 기능이나 변경된 기능을 채택 할 수있는 속도는 모든 키워드와 구문에 대한 지식보다 훨씬 중요합니다. 언어 "마스터 링"에 대해 걱정하지 말고 코드의 품질과 효율성을 지속적으로 개선하고 개선하는 것에 대해 걱정하십시오.


2
The true goal is to master your conceptual understanding of a language or languages.바로 그거죠. 이것이 바로 제가 의미 한 바입니다.
cprogcr

모든 프로그래밍 언어는 유한합니다. 한정된 수의 개념으로 구성되며 한정된 수의 관용적 트릭이 필요합니다. 따라서 모든 언어를 쉽게 익힐 수 있습니다. 물론, 일반적으로 프로그래밍 을 마스터 할 수는 없으며 , 추가 개선 가능성은 항상 있지만 질문은 특정 언어 에 관한 것 입니다 .
SK-logic

SK-logic : 프로그래밍 언어가 변하고 라이브러리와 환경도 변경됩니다. 결과적으로 언어 작업 방식도 변경됩니다. 예를 들어 jQuery는 Javascript 작업 방식을 변경했습니다.
orlp

그것은 아무도 정말 C ++와 같은 언어를 마스터 할 수 없다는 것을 아마 사실이지만 계획과 같은 다소 최소한의 것들에 대한 꽤 가능해야한다 - SK-논리 말한다 @로, 그것은 정말 프로그래밍 마스터 할 수없는 어떤 언어로는,의 때문에, 응용 분야는 무한합니다.
leftaroundabout

1
@nightcracker, 언어는 "진화되지 않습니다". C99는 항상 C99이며 변경되지 않습니다. C ++ 11은 차세대 언어로 대체 된 후에도 항상 C ++ 11로 유지됩니다. 환경은 "진화"하지만 jQuery는 다른 언어 커뮤니티에 알려지지 않은 새로운 기술을 도입하지 않았습니다 . 그들은 좁은 자바 스크립트 커뮤니티에만 새로운 것이 었습니다.
SK-logic

5

당신은 이미 이것에 대한 답을 알고 있습니다

  • 언어를 사용해야합니다. 많이. 가능한 한 다양한 문제를 해결하기 위해
  • 다른 사람들의 코드, 바람직하게는 어느 정도 숙달 된 언어 (즉, 언어의 적어도 일부 측면에 대한 깊은 이해)를 읽고, 이상적으로는 함께 작업해야합니다. 또한 언어 문제 해결에 대해 사람들과 이야기 할 수 있다면 훨씬 더 좋습니다.

그것은 열심히 일하고 결단력을 잃어 버리고 당신이 결코 거기에 도착할 수없는 모든 것에 달려 있습니다.

마스터 장인이 되려면 견습생이되어야했고 여행사 였을 때만 마스터가 될 수있는 기회를 가질 수있었습니다. 그 길을 따라 당신은 배우고 실천할 것이며, 그들의 공예에서 다른 사람들을 관찰하고 질문하고 그들로부터 배우기를 바랍니다.

마법의 총알이 없습니다 ...


2

SDLC (일명 소프트웨어 개발 수명주기) 가 무엇인지 읽고 이해하는 것으로 시작하십시오 . 자기 개선, 학습,**practicing, practicing...**

여기에 이미지 설명을 입력하십시오

그러면 어떤 영역을 배우거나 개선해야하는지에 대한 시야가 열릴 것입니다. 몇 가지 핵심 소프트웨어 엔지니어링 서적이 있으며, 독자적으로 몇 개의 응용 프로그램을 빌드 한 후에는 읽을 때 매우 유용합니다.

또한 OOP 언어에 자신감이 생기면 디자인 패턴 학습을 시작할 수 있으며 Head First Design 패턴 은 실제로 고려해야 할 좋은 책입니다. 나는이 책을 좋아한다.


1
감사. 나는 이것을 읽을 때 이미 답변을 선택했지만 당신의 조언을 확실히 취할 것입니다.
cprogcr

왜 투표가 어려운지 잘 모르겠다면 개선이 필요한 부분을 알려주십시오.
EL Yusubov

2

경험에 대한 대안은 없습니다. 무언가를 습득하기 위해서는 많은 것들을 위해 그것을 많이 / 사용해야합니다.

계속해서 연습 (예 : 프로젝트 오일러 ) 및 개인 프로젝트, 실제로 필요한 것 또는 흥미 롭다고 생각하는 것에 사용하십시오. 원하는대로 게임, 웹앱, 파서를 작성하십시오. 또한 모든 단계에서 코드를 붙여 넣거나 지침을 따르지 않고 현재하고있는 일을 이해하려고 노력하십시오.

아무리 힘들어도 다른 사람들의 코드를 읽고 이해하고 싶습니다.

기본 구문을 이해하면 바로 할 수 있습니다. 몇 가지 코드 만 사용하여 자세히 알아 보려면 시간을 내십시오. 이해하지 못하는 내용을 찾거나 Stack Overflow 와 같은 장소에서 특정 질문을하십시오 .


2

문제의 높은 수준에서 아키텍처에 대해 배우십시오. 프로젝트를 구성하는 방법, 구조는 무엇입니까? 그들이 무작위로 자라게하지 마십시오.

중간 수준에서 다양한 기술과 패러다임을 배웁니다. 레퍼토리에 다양한 도구가있을수록 더 큰 힘을 발휘할 수 있습니다. Java, python 및 ruby ​​만 연구했다면 프로그래밍 공간의 일부에만 노출되어 있습니다. 명령형 및 함수형 프로그래밍, 프롤로그 및 J를 배우십시오. 아이디어는 백개 언어를 "마스터"하는 것이 아니라 동일한 문제를 해결하는 다양한 방법에 대해 배우는 것입니다.

문제의 낮은 수준에서 더 나은 프로그래머가되는 데 도움이 될 수있는 한 가지 사실은 (실제로 무엇을하든 더 나은) 플랫폼의 훌륭한 정신 모델을 갖는 것입니다. 예를 들어 C 컨트롤 구조의 작동 방식을 배우고 가장 일반적인 라이브러리를 알 수 있지만 포인터와 메모리의 작동 방식에 대한 정신적 모델이 없으면 약간 복잡한 표현에 문제가있을 수 있습니다.


1

몇 가지 제안을해도 될까요?

먼저 언어 사용에 대해 토론하고, 최고의 팁과 요령을 얻고, 한 기술이 다른 기술보다 나을 때 대답 할 멘토를 찾을 수 있다면.

둘째, 가능한 많이 연습하고 최대로 언어를 시험해보십시오! 나는 팀에서 일했었습니다. (재미있는 일로) 매일 매뉴얼에서 동사 또는 다른 프로그래밍 언어 조각을 골라냅니다. 그날 코딩 작업을 할 수 있다면 영광입니다. 이것은 전체 프로그래밍 팀이 효과적으로 이해하고 사용하기 위해 (때로는) 모호한 용어를보고 이해해야한다는 것을 의미했습니다. 언젠가 우리는 실패했다. 그러나 그 팀은 일하는 것이 즐거웠고 기술적으로 실제로 켜졌다!!


0

프로그래밍 언어는 범용 소프트웨어 개발 또는 특수 목적 소프트웨어 개발을 위해 개발 된 프로그래밍 패러다임의 아이디어를 반영합니다. 예를 들어 Java와 같은 프로그램 언어는 객체 지향 프로그램 패러다임을 나타내지 만 AspectJ (Java의 확장)는 Aspect 지향 프로그래밍에 따라 프로그래밍하는 데 사용됩니다.

이 짧은 소개가 주어지면 언어를 실제로 익히기 위해 책을 사거나 읽는 것이 그다지 도움이되지 않습니다. 원하는 언어를 사용하여 프로그래밍하고 패러다임에 대해 배우며 언어를 사용하여 의미있는 응용 프로그램을 구축 할 수있는 환경을 이해해야합니다. 언어가 제공하는 다양한 도구를 맛볼 수있는 작은 응용 프로그램을 작성하는 것은 정말 유용한 학습 방법입니다.

나는 사람들이 객체 지향에 대해 배우지 않고 Java 또는 objective-c를 배우는 데 어려움을 겪지 않고 순수한 C 커뮤니티에서 온 사람들을 보았습니다. 또한 사람들이 사용자 인터페이스 요소, 이벤트 중심 프로그래밍 등을 이해하지 못했을 때 사용자 인터페이스 프로그래밍에 어려움을 겪는 것을 보았습니다 ...

이게 도움이 되길 바란다!


0

Glen 님의 목록에 두 항목을 추가하겠습니다

  • 다른 사람들이 가지고있는 어려운 문제를 해결하려고 노력하십시오.
  • 언어 디자이너 블로그 / 책을 읽으십시오. 그것은 깊은 지식의 최고의 자원입니다. X 이유의 디자인 결정이 무엇인지 알 것입니다.

0

@TMN의 말을 바탕으로합니다. 같은 프로그램을 다른 언어로 작성하여 언어를 배우는 데 큰 성공을 거두었습니다.

예를 들어 CSV 파일로 읽는 프로그램을 작성하고 텍스트를 구문 분석 한 다음 열을 역순으로 두 번째 CSV에 다시 작성합니다.

이렇게

열 1, 열 2, 열 3

열 3, 열 2, 열 1

이것은 당신에게 기본적인 이해 나 언어를 줄 것입니다. 그런 다음 다른 무엇을 할 수 있는지보십시오. 값 대체, 순서 변경 또는 명령 행 읽기를 허용 할 수 있습니다. 원하는만큼 복잡하게 만드십시오.

또한 @GlenPeterson이 말한 것에 대해 생각합니다.

매우 다른 언어를 배우십시오. C에 대한 큰 칭찬은 Lisp와 같은 기능적 언어 일 것입니다. 이것은 절차 적 언어에 대한 당신의 생각을 밖으로 바꿀 것입니다.

좋은 생각입니다. 최신 버전에서는 네 가지 프로그래밍 패러다임, 절차 적, 논리적 또는 기능적 패러다임을 모두 사용하여 프로그래밍 할 수 있기 때문에 Haskell 과 같은 언어를 제안 합니다. 실제로는 기능적인 언어이지만 좋은 학습 경험이 될 다른 패러다임을 구현하기 위해 노력할 수 있습니다.

놀기에 좋은 언어.


0

책에서 언어를 배울 수 없습니다. 연습과 연습 만 있으면됩니다. 특정 책이나 특정 소스에서 언어를 배울 수 있다고 생각하지 말고 프로그래밍 언어는 인간 언어와 동일하다고 생각하십시오. 특정 책을 읽음으로써 단순히 영어 나 불어를 배울 수는 없습니다. 일상 생활. 처음부터 코드를 작성하고 기능을 확장하면 약간의 만족을 줄 수있는 무언가를 만들려고 노력하며 언어를 완전히 이해하고 프로그래밍 언어의 각 요소를 실용적인 코딩에 사용하는 것으로 생각하는 경우 .YOU CA N'T. 또는 가능하더라도 10-15 년이 걸릴 수 있습니다.

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