코딩 기술을 향상 시키려면 어떻게해야합니까? [닫은]


76

질문을 시작하기 전에 나에 대한 약간의 정보가 있습니다.

저는 컴퓨터 과학 학부이며 Java는 기본 코딩 언어입니다.

우리 대학의 기본 문제는 교육 표준입니다. 이론적 인 지식이 아니라 코딩 지식을 학생들에게 가르치는 것에 대해 아무도 걱정하지 않습니다.

그 결과, 동료 동료 대부분은 프로그래밍을 전혀 이해하지 못합니다.

심지어 전통적인 프로그래밍 환경에서 나올 수 없었기 때문에 코딩이 어느 정도 제한되었습니다.

프로그래밍 / 코딩 기술을 개발하고 확장 할 수있는 가능한 방법은 무엇입니까?

또한 동일한 출처를 제안 할 수 있습니까?

편집 : 코딩 기술 개발을 제안하는 출처.


13
참고 : 내 경험을 통해 이론적 지식은 확실히 나중에 도움이 될 것입니다
Gopi

6
"X 일 동안 수영하는 법을 가르쳐라"책을 읽는 것만으로 수영 할 수 있습니까?
pramodc84

9
"실천 연습". 현재 수준보다 약간 어려운 것을하고, 해결하고, 배우고, 반복하십시오.

7
@ pramodc84 그러나 수영과 관련된 책을 읽고 강에 뛰어 들면 강에 직접 뛰어 들어 수영을 배우려고 노력할 것입니다.
Gopi

5
대부분의 대학에서와 같습니다. 학위는 좋은 코더가되는 것이 아닙니다. 그것은 그 뒤에있는 이론과 그것을 적용하는 방법을 아는 것입니다. 좋은 코더가되는 것이 졸업생에게 운동으로 남아 있다고 말할 수 있습니다.
구성자

답변:


46

프로그래밍은 경험이 중요한 분야 중 하나입니다. 따라서 더 나은 코더가 되려면 더 많은 코드를 작성해야합니다. 그러나 글쓰기 만해야하는 것은 아닙니다. 또한 다른 개발자의 코드를 읽고 좋은 코드가 무엇인지 배워야합니다. 이에 대한 SO 질문을 참조하십시오 .

또한 코딩에 특화된 책이 유용 할 수도 있습니다. "Code Complete"와 같은 여기에는 좋은 코드가 무엇인지에 대한 설명이 포함되어 있으며 기본 지식과 결합하여 훌륭한 프로그래머가 될 수 있습니다.


8
코드 컴플리트 (Code Complete)는 좋은 독서입니다. 그것은 프로그래머로서 대학을 나왔을 때 가장 많이 읽었던 책입니다.
glenatron

2
이제 그 책이 내 must-read목록에 있습니다. :) 감사!
ykombinator

2
@ykombinator :(push 'code-complete must-read)
Giorgio

98

내가 가장 좋아하는 인용은 공자에서 온 것입니다.

들었습니다. 나는 기억한다. 이해합니다

내가 얻은 모든 지식은 하나의 전략을 적용하는 것입니다.

항상 가장 어려운 길을 택하십시오.

C #을 배우고 싶습니까? C # 개발자로 일하십시오.

이탈리아어를 배우고 싶습니까? 사전 영어 / 이탈리아어와 함께 가서 이탈리아어로 이야기하기

코딩을 배우고 싶습니까? 암호!


19
항상 가장 어려운 길을 택하려면 +1입니다. 결국 그들은 쉬운 길이됩니다! 좋은 대답입니다.
Ryan Hayes

3
도전을 시작하는 것은 어려운 일처럼 보이지만 성공의 동기를 부여합니다. 좋은 대답입니다. 내가 가장 잘 아는 언어는 실마리없이 먼저 머리를 숙이고 각 프로젝트를 통해 지속적으로 배운 언어입니다.
Chris

2
나는 가장 challending에 의해 가장 열심히 바뀌었다. 더 긍정적입니다

2
좋은 프로그래밍은 관중이 아닙니다.
시크릿

4
@ 피에르, 당신은 1) 라틴어와 2) 펄을 배우고 싶습니다. 라틴어로 된 코드 Perl : csse.monash.edu.au/~damian/papers/HTML/Perligata.html

21

코딩은 훌륭한 조언이지만 피드백을 줄 사람이 없으면 실수를 반복합니다. 직업을 찾고, 오픈 소스 프로젝트를 진행하며, 멘토를 찾아서 코드를 보도록하십시오.


1
바로 그거죠! 좋은 지적입니다. 아마 나는 아직 멘토가 없습니다.
ykombinator

4
코드를 작성하고 StackOverflow.com에 대한 특정 질문과 함께 게시하면 많은 것을 얻을 수 있습니다.
JeffO

2
그렇기 때문에 프로젝트에 대한 코드 검토를 계속하고 싶지만 "그럴 시간이 없습니다."
MetalMikester

1
@MetalMikester-하지만 끝낼 시간이 항상 있습니다.
JeffO

1
@JeffO 바로 지금 일어나고있는 일입니다. :(
MetalMikester

10

다음은 Dan North가 제공 한 프레젠테이션 과 QCon을 초보자에서 전문가 도구로 전환하는 방법대해 설명합니다 . 아래는 프레젠테이션의 주요 제안 사항입니다.

  1. 기본 연습 : 카타, 재미를위한 코드 ...
  2. 다른 사람들로부터 배우십시오 : 책, 블로그 등을 읽고, 코드를 읽고, 쌍으로 프로그램하십시오 ...
  3. 트렌드 이해 : 현재 업계에서 일어나는 일
  4. 지식 공유 : 무언가를 배우는 가장 좋은 방법은 그것을 이해하고 가르치는 것입니다
  5. 툴박스 유지 관리 : "영원한"툴과 새로운 툴 사용
  6. 학습 방법 배우기 : 학습 작동 방식 이해

8

간단한 언어의 컴파일러를 처음부터 작성하십시오. 당신은 길을 따라 기술을 많이 향상시킬 것입니다 (공식 언어 이론의 멋진 이론 기술을 보너스로 사용). 간단한 버전의 Excel을 작성하려고 시도했지만 매우 좋은 연습입니다.

다른 사람들이 말했듯이 코딩 기술을 향상시키는 유일한 방법은 실제로 수행하는 것입니다. 큰 프로젝트로 손을 더 럽히십시오. 그러나 큰 프로그램의 경우 소프트웨어 디자인 기술을 습득하는 것이 훨씬 중요합니다. 그렇지 않으면 프로그램 크기를 관리 할 수없는 것 같습니다.

네이트 커비 (Nate Kirby)의 좋은 인용문이 있습니다.

"나쁜 프로그래머는 세부 사항을 무시한다. 나쁜 설계자는 세부 사항을 잃는다."

따라서이 두 수준의 추상화 사이를 전환하는 것이 마스터해야 할 기술입니다.

또한 시간당 몇 줄의 코드를 작성할 수 있는지의 속도는 목표가 아닙니다. 나는 David Parnas 의 인용문을 좋아합니다 .

"종종 개발자들은 '대형 시스템을 빠르게 구축하는 방법을 알고있는 사람'이라고 묘사합니다. 큰 시스템을 신속하게 구축하는 데는 아무런 트릭도 없습니다. 더 빨리 구축할수록 더 커집니다! "


5

내가 배운 거의 모든 언어로 베팅 풀이나 바카라 게임을 구현했습니다.

이 유형의 소프트웨어는

  • 계산 날짜 및 시간
  • 통화 종류와 통화로 변환 할 수있는 통화 종류 및 사물
  • 테스트하기 쉬운 개별 규칙 세트
  • 상태, 상태 및 상태 전환을 담당하는 여러 엔티티 간 전환
  • 동일한 모델의 다른 뷰를 가진 여러 사용자
  • 다중 종료 조건

여러 플레이어 블랙 잭과 포커도 작동합니다.

한가지주의 할 점은 저의 일에서 저는 금융 시스템에서 일하고 있으며 멀티 플레이어 게임과 거래 시스템을 작성할 때 고려해야 할 사항이 상당히 겹친다는 것입니다.


4
  • 좋은 오픈 소스 프로젝트를 선택하고 코드를 읽으십시오.
  • 중간 규모의 프로젝트를 직접 수행하고 코딩을 시작하십시오.
    • 웹 개발에 관심이 있다면, 좋아하는 기술을 사용하여 기존 사이트를 처음부터 작성하십시오. 장고 트위터는 어때?
    • 데스크톱 응용 프로그램 개발에 익숙한 경우 메모장으로 시작하여 고급 기능 (정규식 검색)을 지원하도록 즉흥적으로 수정하십시오.

4

이것을 생각해보십시오 .... Tiger Woods는 골프를 보거나 그것에 대해 읽음으로써 "최고의"골퍼가되지 못했습니다. 그는 다른 운동 선수와 마찬가지로 공부하고 연습함으로써 게임을 향상시킬 수있는 곳을 찾고 그것에 대해 무언가를함으로써 그러한 방식을 얻었습니다.

코딩은 동일합니다. 더 잘하는 가장 좋은 방법은 다른 사람들이하는 일을 연구하고 왜 그렇게 하는지를 이해 한 다음 스스로하는 것입니다.


그렇습니다. Tiger Woods는 많은 연인을 확보함으로써 "최고의"골퍼가됩니다. :-) 그래서 그는 정말 좋은 예가 아닙니다.
DL

4

다른 인간 활동과 마찬가지로 개선 할 수있는 가장 좋은 방법은 지식을 연습하는 것이지만 이에 대한 연습이 필요합니다. The Pragmatic Programmer의 저자 중 한 명인 Dave Thomas 는 무술에서의 카타 개념과 유사한 Code Katas 의 개념을 소개했습니다 .

당신은 거기를 볼 수 있습니다 : http://codekata.pragprog.com/


4

물에 뛰어 들면 처음에는 차가울 수 있으며 빠져 나가고 싶은 유혹을 느끼지만 곧 몸이 익숙해지고 다시 따뜻해지며 물에 편안 해지면 수영을 할 수 있습니다. 깊은 끝.

나는 두 달 전에 자바를 공부하면서 대학을 마쳤다. 제대로 코딩하는 방법에 대한 단서가 없었던 것과 같습니다. 약 한 달 전에 PHP로 웹 앱을 만들고 싶었습니다. 나는 내가 뭘했는지 몰랐지만 그냥 갔다. 처음에는 협박하고 압도적이지만 연습하면서 자연 스럽습니다. 나는 심지어 훨씬 더 단순화 할 때마다 응용 프로그램을 여러 번 작성했습니다. 이제 앱을 처음부터 작업하고 있지만 이번에는 객체 지향 방법을 알아 내고 PEAR와 모듈 퀵폼을 사용하여 극복해야하지만 장애물이 있지만 결정하고 흥분했습니다.

연습하세요. 물에 뛰어 들어라! 행운을 빕니다 :)


3

좋아하는 언어의 모든 구문을 배우는 것이 좋습니다. 가상 함수, 상속, 람다가 존재하는 경우 사용법을 이해하십시오. 내가 한 일은 큰 무서운 라이브러리 (C ++에 대한 boost 및 STL 로이 작업을 수행)를 잡고 모든 행과 모든 키워드가 의미가 있는지 확인하는 것이 었습니다.

또는 최신 버전을 다루는 좋은 구문이있는 경우 언어 구문 참조를 읽을 수 있습니다. 예를 들어 여기 C # 참조가 있습니다 (맨 위의 버전이 아닙니다. 내가 찾고있는 구문을 가지고 있지 않은 더 인기있는 이전 버전을보고 실수했습니다)


3

일반적인 합의는 "더 많은 코드 작성"에 동의하지만, 다른 종류의 코드를 작성해야한다는 조언을 추가 할 것입니다. Java는 언어가 진행되는 한 괜찮지 만 전력 스펙트럼의 위아래로 코드를 작성해야합니다. Java 외에도 저급 언어 (C는 이것에 좋은 언어), 스크립팅 언어 (펄을 선호하지만 파이썬도 좋은 선택), 기능적 언어 (작은 언어)로 몇 가지 작은 프로젝트를 수행하는 것이 좋습니다. lisp는 일반적인 권장 사항이지만 OCaml과 Haskell도 좋은 선택입니다.) 적어도 어셈블리 언어를 읽는 데 익숙해집니다.

또한 구현하는 프로그램 유형에 따라 다양한 유형을 선택하십시오. 최소한 데스크탑 GUI, 리치 웹 애플리케이션, 네트워크 클라이언트 및 서버, 드라이버, 데이터 뭉킹 유틸리티, 광선 추적기 및 물리 시뮬레이션을 구현하는 방법을 살펴보십시오.

모든 프로젝트의 범위는 상대적으로 작아야하며, 목표는 기능이 풍부한 프로그램이 아니라 각기 다른 영역에서 폭 넓은 경험을 쌓고 각기 다른 유형의 사고를 배우는 것입니다. 관심사가 어디에 있는지 알아 내야합니다.

일단 그렇게하면, 가장 관심있는 프로그래밍 유형에 대한 좋은 아이디어를 얻을 수 있으며 오픈 소스 프로젝트를 찾거나 시작하여 대규모 코드 기반 작업 경험을 쌓을 수 있습니다. 프로젝트라는 용어와 다른 개발자와의 협력.


2

몇 가지 비슷한 답변을 얻었으며 내도 동일합니다. 코드를 작성하십시오. 그렇게 할 수있는 두 가지 좋은 방법이 있습니다.

  1. 실제로 당신에게 호소력이 있거나 관심있는 것을 고르고 그것을 구현하십시오. 게임을하고 있다면 게임을 작성하십시오. 웹에 관심이 있으시면 흥미롭고 독창적 인 웹 사이트를 만드십시오. 당신은 그것을 끝내지 못할 수도 있지만, 경험은 당신에게 많은 것을 가르쳐 줄 것입니다.
  2. 흥미롭고 참여할 수있는 오픈 소스 프로젝트를 선택하십시오. 기존 코드에서 배우고 버그를 수정하고 단위 테스트를 작성하며 새로운 기능을 구현하는 데 사용하십시오.

이 중 하나는 필요한 프로그래밍에 대한 직접적인 경험과 프로그래밍 커뮤니티에 대한 참여를 제공하고 더 많은 것을 얻기 위해 질문을해야 할 것입니다. 당신은 많은 실수를 할 것입니다. 실수하는 것을 그만두면 학습을 중단하고 새로운 도전의 길을 찾아야합니다.


2

내 제안

  • 애완 동물 프로젝트를 찾아서 당신이 알고있는 것과 다른 언어 (lyke python / c #)로 작성하십시오. 이것은 당신이 상상할 수있는 것 이상을 가르쳐 줄 것입니다. 비슷한 다른 프로젝트를보고 기능 패리티를 얻으십시오. 새로운 기능으로 난이도를 꾸준히 증가시키면서 목표를 달성 할 수 있습니다. 이것은 또한 면접을 위해 당신의 쇼 작품이됩니다.
  • 프로젝트에서 웹 서비스, 자바 스크립트, 아약스, 지오 코딩 및 기본적으로 소프트웨어 세계에서 발전하고있는 모든 관련 기술에 대한 용도를 찾으십시오.
  • Linux / freebsd와 같은 다른 운영 체제와 함께 플레이하십시오. 다른 종류의 시스템에 더 많이 노출 될수록 시스템에 대한 생각과 그들이 왜 그런 일을했는지 ​​이해하게 될 것입니다.
  • 코드의 일부로 작업을 마치면 코드로 돌아가 지속적으로 개선하십시오. 부족한 부분을 찾고 필요한 경우 설명을 추가하고 완성하십시오.
  • c2.com에서 발굴하십시오. 좋은 코딩 방법이 많이 있습니다. 이것들을 배우고 자신의 프로젝트에 적용하십시오.
  • 실용적인 프로그래머 및 코드 완성과 같은 책을 읽으면 전투 강화 프로그래밍에 대한 지식을 얻을 수 있습니다.
  • RC 자동차 경주, 악기 연주 또는 외국어 학습과 같은 자동차가없는 경우 다른 기술적 인 취미를 찾을 수 있습니다. 두뇌가 많을수록 더 좋습니다. 프로그래밍이 너무 많아 질 수 있기 때문에 때때로 긴장을 풀어야합니다.

2

동료 리뷰는 실제로 코드 품질을 향상시키는 데 도움이됩니다. 실제 멘토가없는 경우 StackOverflow 또는 RefactorMyCode 또는 메일 목록에 코드를 [최소한으로 줄인 후] 게시하면 사람들이 코드 품질을 개선하는 데 도움이됩니다.


1

"연습!" 그것은 진부하다.

수학 수업에서 배운 내용을 검토하고 문제를 다루는 프로그램을 만들어야합니다. 또한 자동 판매기 (동전 변경을 계산하는) 인 엘리베이터 프로그램을 구현하여 논리 기술을 연마하십시오. 일상 생활의 모든 것을 생각하고 구현하십시오.


1

예, 프로그래밍 기술을 개발하고 날카롭게 유지하려면 연습이 매우 중요합니다. 그러나 연습만으로는 지금까지만 걸릴 수 있습니다. 또한 자신보다 더 많은 지식을 가진 사람들로부터 배워야합니다. 들어 본 적이없는 기술, 이점이 분명하지 않은 관행 및 결코 스스로 발명 할 수없는 요령이 있습니다.

새로운 기술, 깔끔한 요령 및 유용한 방법을 배우는 방법은 많습니다. 책을 읽으십시오. 동료와 대화하십시오. 질문. 다른 사람의 코드를 검토하고 다른 사람의 코드를 검토하도록합니다. 이 사이트를 포함하여 프로그래밍에 관한 블로그와 기사를 읽으십시오. 요컨대, 진공 상태에서 작동하지 마십시오.

아, 그리고 NP-complete의 의미가 확실하지 않거나 big-O 표기법이 무섭다면 계산 및 알고리즘 클래스 이론을 취해야 할 것입니다.


1

Builder, Factory, Composite 및 Observer, Mediator 및 Flyweight와 같은 디자인 패턴을 읽어야한다고 말하고 싶습니다. 디자인 패턴은 코딩 솔루션에있어 가장 중요한 것은 아니지만 객체 지향 프로그래밍의 이론적 개념을 구현하는 방법을 보여줍니다.


1

나는 나를 위해 일한 것을 제안 할 수있다. 나는 프로그래밍 언어를 배우고 그것으로 체스 엔진을 만드는 꿈을 꾸었다. 나는 책, 기사 및 작은 샘플에 시간을 보냈습니다. 그래서 개발자를 위해 더 나은 문서가있는 실제 프로젝트를 확인하기로 결정했습니다. 하나를 선택하고 매일 프로젝트를 읽기 시작했습니다. 읽는 동안 며칠이 지났다고 생각하지 마십시오. 기사와 책을 읽는 데 시간을 보내는 것보다 훨씬 낫습니다. 첫눈에 분명하지 않은 많은 것들을 만날 수 있지만 매일 연구를 시도하면 이것이 바뀔 것입니다. 일주일 안에 모든 것을 이해하지는 마십시오. 일부 이해하지 못할 때는 낮은 자존감을 유지해야합니다.

열정이있는 기존 프로젝트를 선택하십시오. 코드를 읽고 디버깅하고 일상적인 방식을 이해하려고 노력하십시오. 또한 프로젝트를 직접 사용하십시오. 그런 다음 원하는 기능을 추가하십시오. 심지어 동일하거나 유사한 응용 프로그램을 작성하십시오.

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