프로그래밍 기술을 향상시키기 위해 가장 효과적인 방법은 무엇입니까?


876

프로그래머로서의 경력과 삶을 되돌아 보면 프로그래밍 기술을 향상시키는 여러 가지 방법, 즉 코드 읽기, 코드 쓰기, 책 읽기, 팟 캐스트 듣기, 스크린 캐스트보기 등이있었습니다.

내 질문은 : 프로그래밍 기술을 향상시키는 가장 효과적인 방법은 무엇입니까? 개선하고 싶은 사람들에게 무엇을 추천 하시겠습니까?

나는 여기에 다양한 답변을 기대하지만 단일 "하나의 크기가 모두 맞는"답변은 없습니다. 나는 다른 사람들에게 무엇이 효과가 있는지 알고 싶습니다.


18
연습, 연습, 연습. 그리고 가장 먼저 떠오르는 것에 만족하지 마십시오.
Mark Ransom

2
Mark Ransom의 경우 +1 ... 100 번째로 마음에 들지 않으면 어려움이 따릅니다!
Stimul8d

5
Programmers Stack Exchange 사이트에서 시간을 낭비하지 않으면 코딩 기술을 크게 향상시킬 수있었습니다.
Job

3
@ Mark Trapp 이것은 어떻게 건설적이지 않습니까?
rightfold

1
@WTP-설명을 읽으십시오. "이 질문은 Q & A 형식에 적합하지 않습니다." -이 질문을 한 사람으로서 동의합니다. 좀 더 편안한 시간에 요청되었습니다.
Oded

답변:


753

특정한 순서없이 ...

  • 나보다 훨씬 똑똑한 사람들과 협력

  • 주니어, 중급, 시니어 또는 전문가인지 여부에 관계없이 다른 사람들의 말을 항상 듣습니다. 직책은 아무 의미가 없습니다.

  • 다른 프레임 워크 / 언어를 배우고 그들이하는 일을보고 그것을 이미 알고있는 것과 비교

  • 패턴, 모범 사례를 읽은 다음 이전 항목을 검토하고 필요한 경우 해당 패턴을 적용

  • 페어 프로그래밍

  • 요엘의 말에 동의하지 않습니다. ;)


41
나는 그것이 정말로 무례하고 잠재적으로 평판이 좋은 것으로 보인다는 것을 안다. 그러나 만약 당신이 그 아이템들을 답변 당 하나로 분리한다면 사람들은 그들이 동의 한 것을 투표 할 수 있고,이 질문의 더 구체적인 최종 투표 "솔루션"을 허용 할 수있다.

117
똑똑한 사람들이 실수를 처리하는 방법을 살펴보십시오. 그 때 가장 많이 배워야 할 때입니다.

82
목록이 특정 순서가 아닌 경우 순서가 아닌 순서가 아닌 목록이 아니어야합니까? : P
Jon W

3
나는 mmyers에 동의합니다-당신이 누군가와 동의하지 않는다고해서 당신이 그들을 무시한다는 의미는 아닙니다. 실제로는 반대입니다. 동의하지 않기 위해 실제로주의를 기울이고 있습니다.
Cristián Romo

15
나는 조엘이 말한 모든 것에 동의하지 않는다. 나는 그가 말해야 할 흥미로운 것들이 많이 있다고 생각한다. 내 의견은 뺨에 혀였다. Joel에 관해서는 내가 동의하는 많은 것들이 있지만, 한 달에 한 번 정도 그는 내 머리를 흔들어 "뭐? 진심이야?!"라고 묻습니다. 내가 정말로 내 입장과 내가 믿는 것을 확인하도록 강요하는 가장 어려운 것들을 발견하면서 나는 좋아합니다.

557

결정 TO 는 '잭-의 모든 거래를'수

경력 초기에 저는 특정 데이터베이스 및 프로그래밍 언어 전문가였습니다. 불행히도 그 특정 데이터베이스는 '데이터베이스 전쟁'을 잃어 버렸고 내 경력 옵션이 제한적이라는 것을 알았습니다. 그 후 나는 다시는 그런 식으로 다시는 상자에 들어 가지 않게 의식적으로 결정했다. 그래서 나는 Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL 등 내가 사용할 수있는 모든 것을 연구했습니다. 크레이그에게 알지 못하면 배우게 될 것입니다. 결과적으로 환경 원격 측정을위한 임베디드 시스템에서 미사일 방어를위한 명령 및 제어 시스템에 이르기까지 모든 종류의 프로젝트를 수행했습니다.

내가 가진 유일한 문제는 내 전문 분야가 일반인이 될 때 나를 전문 분야에 집어 넣어달라고 주장하는 회사와 관련이 있습니다. [편집 : Polymath 또는 르네상스 맨 또는 다중 전문가 라고도 합니다. ]

명심해야 할 것 ... 첨단 기술에 대한 지식의 반감기는 무엇입니까? 그것은 무어의 법칙으로 추적됩니다 : 당신이 알고있는 모든 것의 반은 18-24 개월 안에 쓸모가 없습니다. 잘못된 징계를 선택하는 전문가는 기술 언론에 의해 쉽게 훼손 될 수 있습니다. 일반인은 더 많은 기술을 추가하고 해당 기술을 적용 할 때 과거의 교훈을 기억해야합니다.


224
"모든 거래의 잭, 아무도없는 마스터, 종종 하나의 마스터보다 낫다." -Adam Savage
jms

9
훌륭한 조언, 투표함. 내 과거의 "고아 기술"은 8 비트 아타리 (Atari)로 C64를 잃었다. 나는 같은 결론에 도달했다. 하인라인을 인용하자면 "전문화는 곤충을위한 것이다."

17
상충 관계는 항상 존재하며 하루에 86,400 초 밖에 걸리지 않습니다. 지출 방법을 결정해야합니다. 제 경우에는, 제가 흥미 로웠거나 미래에 수요가있을 것으로 생각되는 것들을 배우기 위해 여분의 시간을 ( '근무 시간'이상으로) 선택했습니다. 당신은 당신의 자신의 선택을해야합니다.
Craig Trader

74
"전문화는 곤충을위한 것이다." -Heinlein
Kelly S. French

31
"일반"배지는 어디에 있습니까? ^^
Arnis Lapsa

459

나는 항상 내 자신을 아주 핫한 프로그래머라고 생각했다. 그런 다음 아론이라는 새로운 남자가 우리 팀에 고용되었습니다. 아론은 대부분의 지역에서 나보다 훨씬 더 나았습니다. 그는 나보다 젊었 다. 그는 내가 지난 몇 년 동안 크게 개선되지 않았다는 것을 깨달았습니다. 나는 애드혹 해커 였고 평범한 해커였습니다.

이것은 의식적으로 나 자신과 특히 내가 작성한 코드의 품질 을 향상 시키려고 노력했다 .

Aaron은 저에게 많은 것을 배우도록 이끌었습니다. 그는 내가 작성한 코드의 대부분이 최소 몇 년 동안 유지되고 확장되어야하는 방법을 가르쳐 주었으므로이를 염두에두고 코드를 작성해야합니다. 코드에 대한 자동 테스트를 작성해야합니다. Aaron은 항상 첫 번째 작업 버전에서 멈추지 말고 코드가 우아해질 때까지 리팩토링하고 개선하는 방법에 대해 항상 이야기했습니다. 사용하고있는 언어와 도구가 개선의 여지가 많다는 것을 알게되었습니다.

내가 Aaron으로부터 배운 가장 중요한 것은 배우는 것을 멈추지 않는 것입니다.

2 년 후 Aaron은 회사를 떠났습니다. 나는 비어 있다고 느꼈다. 그와 함께 지난 몇 년 동안 나를 완전히 새로운 수준의 기술로 끌어 올렸고, 나는 이제 팀의 나머지 부분보다 훨씬 나아 졌다는 것을 깨달았습니다. 그들은 여전히 ​​나쁜 코드를 작성했고 이전과 같은 실수를 저지르고있었습니다. 나는 그들에게 가르치려고 노력했지만 배우는 데 관심이 없었습니다. 사실, 그들은 누군가가 자신이 저지르고있는 실수를 말해주기 위해 너무 거만 해 할 것을 염려했습니다.

그래서 몇 달 후에 저는 회사를 떠났습니다. 나는 재능있는 팀과 함께 작은 회사로 이사했습니다. 그곳의 모든 사람들이 더 많은 것을 배우고 싶었고 그것을 좋아했습니다.

아론을 만나서 다행입니다. 그가 없으면, 나는 아직도 오래된 회사에서 오래된 갱단과 일하고, 아무데도 가지지 않고, 나 자신을 너무 많이 생각하고있을 것입니다.


54
일반적으로 두 가지 방식으로 작동합니다. 나는 이제 'Aaron'으로 몇몇 회사에 들어 왔고 일단 다른 코더가 에너지를 얻었을 때 그들이 돈을 벌기 시작하고 저의 노력을 두 배로 늘리도록 격려한다는 것을 알았습니다. 좋은 포스트!

28
"Aaron은 항상 첫 번째 작업 버전에서 멈추지 말고 코드가 우아해질 때까지 리팩터링하고 개선하는 방법에 대해 항상 이야기했습니다"

17
"첫 번째 작업 버전에서 멈추지 마십시오"??? -나머지 작업은 언제해야합니까? :)

4
나는 Aaron이 되려고 노력했지만 때로는 효과가 있지만 때로는 틀렸다. "역사에서 배울 수없는 사람들은 그것을 반복 할 운명이 있습니다." 새로운 아이디어에 마음을 열어 두는 것이 좋지만 이미 실수를 저지른 사람들에 대해 n00b를 듣는 것은 좋지 않습니다. 우리 자신과 다른 사람들의 질문을 통해 배우는 것처럼 누구나 회의론이 필요합니다.

27
문제는 너무 많은 사람들이 그들이 "아론"이라고 생각하는 것입니다
cinqoTimo

257

두가지:

  1. 다른 사람들이 작성한 코드를 읽습니다.
  2. 다른 사람이 작성한 코드에 대한 설명서를 작성하십시오.

코드 작성은 매우 쉽습니다. 내가 아는 다른 모든 사람들이 그렇게 할 수 있습니다. 그러나 다른 사람의 코드를 읽고 그 기능을 알아내는 것은 완전히 새로운 세상이었습니다.


42
하지 말아야 할 것을 배우는 가장 좋은 방법 중 하나 :)
AviD

9
그들이 어떻게 행동하는지 볼 수 있습니다. 어쩌면 그들은 당신보다 더 나은 방법으로합니까?

4
정말 오래되고 완전히 문서화되지 않은 프로젝트를 파헤쳐 서 문서화하고 버그를 수정하여 새로운 시스템으로 이식해야했습니다. 나는 많은 것을 배웠고, 그 모든 것이하지 말아야 할 것이 아니 었습니다. 나는 의견의 가치를 배웠지 만.

문서를 작성하는 동안 해당 단위 테스트 사례를 작성하십시오 (없는 경우). 그런 다음 코드 사용 방법도 알게됩니다.
dhable

사실, 그것은 오랫동안 내 직업에서 가장 어려운 부분이었습니다.

199

체육관을 정기적으로 때린다.

진지하게, 내 몸매가 좋으면 뇌가 훨씬 잘 작동합니다. 문제가 쉬워지고 압도적이지 않고, 멍청이는 유혹에 빠지지 않으며, 단계별로 작업하는 것은 힘든 작업처럼 보이지 않습니다.


30
대다수의 사람들이 규칙적으로 운동을하거나 전혀 스트레칭을하지 않는다는 슬픈 사실은 오늘날 세계에서 큰 문제입니다.
Sneakyness 2009

5
가능하다면이를 어느 정도의 육체 여행으로 확장 할 것입니다. 때로는 수동 작업을 많이하지 않으면 육체적 피로를 느끼기 시작합니다. 정신적으로 쇠약 해지는 데 익숙 할 때 그것은 참신한 일이며, 원을 그리며 생각할 때 헤어지는 데 도움이됩니다.
Stimul8d

1
네, 오늘 큰 문제입니다. 근무 시간이 더 많은 곳 우리는 특히 파키스탄에 시간이 없어
maz3tt

2
더 많은 운동을 하려면 나 자신 을 상기시켜주는 +1 .
SingleNegationElimination

나는 스포츠가 위대한 동기라고 생각합니다. 저에게는 농구입니다.
Adel

181

프로그램 작성. 흥미로운 프로젝트 작업. 물건을 가지고 일하는 것과 같은 것은 없습니다. 특히 압력을 받고 있습니다. 나는 항상 프로그래밍 방법을 묻는 사람에게 멋진 프로젝트를 찾아서 작업하는 방법을 말해줍니다.


4
동의한다. 프로젝트에서 내 손을 더럽히는 것은 아마도 내 개선의 가장 큰 원인 일 것입니다. ; )
Mike Grace

1
바로 그거죠. 더 나은 코더가되는 가장 좋은 방법은 코딩하는 것입니다. 책, 팟 캐스트 및 동료로부터 원하는 모든 것을 배울 수 있지만 실제로 이해하기 전에 적용해야합니다. 더 코딩하고 더 다른 것들을 코딩하십시오. 같은 오래된 트릭을 반복하여 많은 것을 배우지 않기 때문입니다.

도전적이고 흥미로운 프로젝트 선택. 나는 당신의 안락 지대 밖에서 극복하려는 투쟁이 실제로 당신의 기술을 가속화한다고 생각합니다. 그들은 달 때문에 쉽게 가지 않았습니다.
김정우

172

우리 대학에서 아르바이트를하는 CS 학생들을 ok습니다. 실제로 다른 사람에게 설명해야 할 때 완전히 다른 수준에서 무언가를 이해하도록 강요합니다.


1
보증 할 수 있습니다.

1
대학의 한 강사가 제가 아직 학생이었을 때 개회에 대해 말했습니다. 졸업 후 거의 1 년 (파트 타임) 동안 머물 렀습니다.
Bill the Lizard

29
Douglas Adams는 "Dirk Gentley 's Holistic Detective Agency"에 다음과 같이 썼습니다. "가장 좋은 방법은 다른 사람에게 그것을 설명하고 설명하는 것입니다. 그것은 당신이 당신의 마음에 그것을 분류하도록 강요합니다. 더 많은 것들을 점점 더 단순한 아이디어로 분해해야합니다. "

2
너무 맞습니다. 사진 교육은 저에게 더 나은 사진 작가가되었습니다. 코더는 그리 많지 않습니다 :(
CAD bloke

9
mutuo ista fiunt, et homines dum docent discunt-Seneca

135
  1. 저는 "매년 프로그래밍 언어를 배우십시오"시스템을 좋아합니다. 1 년은 "괜찮아요. 구문을 알았으니 이제 언어를 알고 있어요"편견을 지나칠 수있는 충분한 시간이 주어집니다. 그리고 조금 더 나아가서 그 언어에서 유익한 것을 이해하고 그 언어 (즉, Ruby 구문을 사용하여 Java 응용 프로그램을 작성하지는 않습니다). 각 언어는 프로그래밍에 대한 생각 방식을 바꿀 것입니다. 재귀를 사용하는 방법을 알고 있었지만 프롤로그 수업을들 때까지 재귀에 대한 생각 은 일어나지 않았습니다 (ML과 같은 기능적 언어가 동일한 효과를 가질 것이라고 생각합니다).

  2. Pet 프로젝트를 시작하십시오. 좋은 애완 동물 프로젝트에 대한 나의 개인적인 방정식은, 당신이 경험 한 것 + 당신이하지 않는 것 = 유용한 것입니다. 예를 들어 Migratr (나의 caffeinated-weekend-turned-ongoing 프로젝트)은 "c #을 알고 있지만 웹 API에 대해 코딩 한 적이 없으며 모든 사진을 Zooomr로 옮기고 싶습니다"로 시작했습니다. "웹 API에 대해 코딩 한 적이 있지만 C #을 모른다"

애완 동물 프로젝트를 게시하는 것은 그 자체로 놀라운 교육 경험입니다. 갑자기 아무도 실제로 가르치지 않지만 모든 사람이 알아야 할 모든 것 (나에게 그것은 자신의 테스트 시스템을 설정하고, 버전 관리 시스템을 최대한 활용하는 방법, 아무도 마감일을 설정하지 않을 때 자신을 조정하는 방법, 사용자와 요청에 대해 "아니오"라고 말하는 방법을 알 수있는 방법), 그 모든 것들은 표면에 거품을 내고 적어도 전에는 dzone에서 화염 전쟁을 읽음으로써 이전에는 없었던 수준에서 스스로 교육하도록 강요합니다. "foo"대 "bar"방식의 장단점.

이 두 가지 작업을 수행하면 스펙트럼의 양쪽 끝이 모두 적용됩니다. 새로운 언어를 배우면 더 나은 코더가 될 것입니다. 애완 동물 프로젝트는 당신을 더 나은 개발자로 만들 것입니다 : P


나는 동의 할 수밖에 없다. "이전에 알 수없는 언어로 된 애완 동물 프로젝트"는 훌륭합니다.

반쯤 익숙한 것을 배우기위한 아주 좋은 제안.

좋은 제안 "당신이 경험 한 것 + 당신이하지 않는 것"! 감사합니다
sica07

지금 애완 동물이 필요합니다.
Adel

118

나 자신에게 어셈블리를 가르쳤다. 내가 13 살이었을 때 오래된 6502 칩에 있었습니까? 14? 너무 오래 전 그러나 비트 수준으로 내려가는 것보다 개발을 향상시킬 수있는 것은 생각할 수 없습니다.

학습 어셈블리는 컴퓨터가 기본적으로 낮은 수준에서 '생각'하는 방식에 대한 통찰력을 제공하며,이 수준의 우아함은 놀랍습니다. 이 수준에서 개발하면 효율성을 가르치고 비판적 사고 및 논리 기술을 연마 할 수 있습니다. 그것은 또한 당신이 상당히 빨리 버릇없는 습관을 치료할 것입니다!

65xx 칩에는 3 개의 레지스터 (어큐뮬레이터, X 및 Y)가 있으며 곱하거나 나누기위한 머신 레벨 명령이 없습니다. 나는 전투 피해를 계산하기 위해 루틴을 코딩하고, 책을 살펴보고, 내 자신의 수학 라이브러리를 작성해야한다는 것을 갑자기 깨달았습니다. 내 노트 전체에 1과 0을 낙서하는 데 2 ​​주가 걸렸으며 '분할'과 '소수점'이 실제로 무엇을 의미하는지 알아 내려고 노력했습니다.

나는 그 이후로 C ++, 파스칼, .NET, 다른 많은 것들을 연구했지만 ... 그들 중 누구도 나에게 많은 것을 가르쳐 주지도 않았고, 나에게 많은 관심을 보였거나, 내 오래된 코모도어에서의 어셈블리가 그랬던 '와우'라는 느낌을 가지지 못했습니다. .


16
멋진 추억을 되찾기 위해 당신을 투표해야합니다! 어쩌면 나는 심지어 조금 찢어 버렸다.
Charlie Flowers

3
저는 여전히 C / C ++를 68K 어셈블리 언어로 정신적으로 번역합니다. 모든 플랫폼에서 효율적인 코드를 작성하는 데 도움이되는 방법이 놀랍습니다.
밥 머피

1
아 6502는 위대한 추억을 되찾아줍니다. 이 칩에서 어셈블러로 많은 것을 배웠습니다.

5
모든 프로그래밍 학생은 교육 초기에 어셈블러에 깊이 노출되어야합니다!

2
나는 젊은이와 같은 일을했다. 그것은 실제로 고급 언어보다 컴퓨터가 작동하는 방식을 가르쳐주었습니다.
CAD bloke

110

내가 쓴 오래된 것들을 되돌아보고 그들이 얼마나 나쁜지를 깨달았습니다.


두 번째로 ... 나는 오래된 것들을 거의 읽을 수 없습니다.
Unkwntech

28
내가 오래된 것들을 지나갈 때 전체 파일을 삭제 해야하는 거의 불가피한 충동이 생깁니다. 때때로 전체 디렉토리.
Christopher Mahan

객관성 +1 이전 코드를 살펴보면 개선 방법과 개선되지 않은 방법 또는 반대로 개선 방법을 알 수 없습니다.

VB6에서이 전체 스크립트 인터프리터를 작성했습니다. 2 년 동안 작성했습니다. 창문을 만들고 이벤트를 처리 할 수 ​​있습니다. 프로그래밍에 관한 책을위한 프로그래밍을 포기하기 전에 필자가 마지막으로 썼다. 지금 나는 훨씬 더 나은 입니다. 그 괴물 프로젝트를 되돌아 보면 내가 얼마나 멀리 왔는지 알 수 있습니다
카슨 마이어스

3
@Christopher Mahan : 정말 나쁜 경우에는 전체 볼륨입니다.
Thanatos

93

읽다

  • 웹 사이트뿐만 아니라 책
  • 최신 프로젝트뿐만 아니라 자체 개선을 위해
  • 최신 기술뿐만 아니라 거래 개선에 대한
  • 작업하고있는 코드뿐만 아니라 코드를 읽습니다.

독서에 대한 식욕을 키우십시오.


2
게다가, frickin ', 1. 나는이 선택이 어디에 있는지 궁금해지기 시작했다.
Thanatos

87

프로그램 작성.

진지하게, 책이 있고, 코딩 카타가 있고, 이와 같은 사이트가 있지만, 개발자로서 개선하는 가장 좋은 방법은 실제 엔지니어링을 통해 끊임없이 변화하는 요구 사항을 가진 실제 고객에게 실제 프로젝트를 진행하는 것입니다 문제. 경험을 대신 할 수있는 것은 없습니다.


8
무언가를 더 잘하고 싶다면, 그것을하는 것보다 더 좋은 것은 없습니다.
Jeff Siver

4
+1- Forrester 찾기를 생각 나게합니다 . "쓰기의 첫 번째 열쇠는 ... 쓰는 것"
Wizard79

2
다른 대답은 없습니다. 사소한 코드를 작성하고 비즈니스 사람과 고객과의 몇 가지 제품 반복을 통해 고집 할 때까지 실제로 무엇을하고 있는지 말할 수는 없습니다. 새로운 요구 사항에 맞게 코드를 변경해야 할 때까지 코드가 얼마나 좋은지 / 실제로 / 알지 못합니다.
blucz

1
내 프로그래밍을 향상시키기 위해 내가 한 가장 좋은 일은 직업을 얻는 것입니다.
매트 엘렌

1
내 생각 엔 질문은 "프로그래밍 외에"를 암시하는 것입니다 ...
UncleZeiv

81

당신이 할 수있는 가장 중요한 일은 개선을위한 의식적인 노력을하는 것입니다. 단 하나의 총알이 없으므로 새로운 정보 출처, 새로운 경험 및 더 많은 연습을 계속 찾아야합니다.

그리고 두 번째로 중요한 것은 자신이하고있는 일, 왜하고 있는지, 어떻게 더 잘할 수 있는지 생각해보십시오. 이전 프로젝트와 동일합니다. 당신이 한 일과 지금 어떻게 다르게 할 수 있는지 되돌아보십시오. 더 잘했을 수있는 부분이나 개선 할 수있는 부분을 생각해보십시오.

나는 매일 직장에서 두 가지 훌륭한 예를 봅니다. 배우기를 좋아하고 그가 할 수있는 최고의 개발자가되기를 원하는 한 동료가 있습니다. 그는 다운 타임을 사용하여 블로그를 읽고, 책을 읽고, 프로그래밍 기술에 대해 토론하고, 수많은 질문을합니다. 그는 작년에 눈에 띄게 향상되었습니다. 다른 동료가 자신의 업무를 수행하고 상당히 잘 수행합니다. 그러나 이것이 그가하는 전부입니다. 그는 자신이 아는 것을 고수하고, 개선하기 위해 많은 노력을 기울이지 않고, 기존 프로젝트 이외의 프로젝트에서 작업하지 않으며, 4 년 후, 내가 만났을 때와 똑같은 기술과 프로그래밍 능력을 가지고 있습니다. 그를.


7
그리고 그의 지식 중 일부가 쓸모 없게 되었기 때문에 아마 기술이 떨어질 것입니다.

72

많은 사람들이 코드 작성을 제안했습니다. 다른 사람들의 코드를 읽는 것이 훨씬 유익하다고 말하고 싶습니다.


11
이 둘의 혼합은 실제로 저에게 가장 효과적인 방법입니다. 다른 사람의 코드를 읽고 그것이 더 읽을 수 있도록 리팩토링하는 것은 좋은 운동이다

물론 좋은 코드를 읽고 이해합니다. 그리고 수정하거나 테스트를 작성하십시오.

4
코드를 읽는 것은 심리적이지만 실제로 그것을하기 전까지는 실제로 피부 아래로 들어 가지 않습니다.

그것을 배우려면 반드시해야합니다. 자전거 타는 것과 같습니다.

70

매우 다양하고 의견이 많은 사람들과 쌍으로 프로그램


내가 가진 페어 프로그래밍의 유일한 "경험"은 동료 동료들을 도와야 할 때입니다. 저와 함께있는 다른 사람이있을 때 제가 직면 한 문제와 그 해결 방법을 논의하기 위해 훨씬 더 행복한 프로그램을 만들었습니다.
mhitza

67

프로그래머로서 도움이 된 기본 사항 :

  • 터치 타이핑을 배웠습니다.
  • 수줍음을 극복하고 질문하는 법을 배웠습니다.

프로그래머를위한 타이핑은 필수적입니다. 모든 사람은 정확히 두 손가락을 사용하여 입력하고 모든 것을 위해 키보드를 봐야하는 "프로그래머"동료가있었습니다. 재미 없어. 터치 타입 학습은 프로그래머로서의 생산성을 크게 향상시킵니다.

요청하지 않으면 아무도 말하지 않을 것입니다.


15
터치 타이핑이 가장 중요한 기술입니다. 프로그래밍에서 가장 큰 범죄는 몇 번의 키 입력을 저장하려는 사람들이 저지른 것입니다.

5
이것은 내 의견으로는 다른 모든 대답보다 뛰어납니다. 입력하면 많은 시간이 절약되므로 코드를 입력하고 시험하는 데 더 많은 시간을 할애 할 수 있습니다. 그것은 단지 고개를 끄덕이고 움직이고 잊는 대신 책에 예제를 입력 할 수 있다는 것을 의미합니다. 헌트 앤 페크 (Hunt-and-peck)로 프로그래머가 되려고 노력하는 것은 발로 아이보리를 간지럽 히는 콘서트 피아니스트가 되려는 것과 같습니다.
Kyralessa

2
나는 사람들이 2 개의 문자 명령을 복구하기 위해 15 개의 위쪽 화살표를 치는 것을 보았다. 꽤 슬프다. IDE가없는 아이들과 같습니다 ... 완전히 무능합니다.

7
반대로, 나는 유형을 만지는 법을 결코 배웠습니다. 나는 한 번 학습을 시도했지만 즉시 손목에 통증이 생겨 책상 위에 올려 놓고 올바른 손 위치가 가장 중요한 손목 관절 터널에 압력을 가하고 있다고 가정했습니다. 그래서 나는 타이핑 타이핑이 최소한 인체 공학적 이점을 가지고 있다고 생각합니다. 그리고 나는 오랫동안 그것을 해왔고, 키보드를 간헐적으로 만 볼 수 있으므로 실제 생산성 손실은 없습니다. 대부분의 시간은 어쨌든 문자를 입력하는 데 소비되지 않고 코드를 읽고 문제가 발생할 때 가장 잘 해결하는 방법을 찾는 데 소비됩니다.
Eloff

2
손의 위치는 중요하지 않습니다. 중요한 것은 보지 않고도 입력 할 수 있다는 것입니다. 랩탑에서 손목을 쉬지 않습니다.


53

원하는 모든 책, 코드 및 오픈 소스 프로젝트를 읽을 수 있지만 소프트웨어 개발의 최종 사용자 측면을 이해해야합니다. 반향 실에서 나와야합니다. 따라서 기술 경력에 도움이 될 몇 가지 비 기술적 요점을 다룰 것입니다.

  1. 키보드에서 벗어나 최종 사용자와 상호 작용하고 소프트웨어를 사용하는 방법을 눈으로 확인하십시오. 최종 사용자는 일반적으로 기술적이지 않으므로 소프트웨어를 마법의 일로 간주하고 소프트웨어를 논리적 단계로 간주합니다. 두 세계는 완전히 다릅니다. 따라서 당신에게 쉽고 논리적으로 보이는 것은 다른 사람들에게는 비밀스럽고 위협적인 것처럼 보일 수 있습니다.

  2. 테스트, 테스트, 테스트 대기업에서 본 많은 소프트웨어는 테스트 사례를 사용합니다. 그들은 JUnit, xUnit 및 다른 모든 단위 테스트 언어를 사용합니다. 그러나 내가 본 문제는 대부분의 프로그래머가 프로덕션에서 소프트웨어가 어떻게 보이는지 전혀 모른다는 것입니다. 사용자 (또는 배치 작업 인 경우 시스템)가 응용 프로그램, 라이브러리 또는 인터페이스와 상호 작용하여 어떤 종류의 끔찍한 정보를 던지는 지 알아보십시오. 이를 통해 좋은 테스트 사례를 생성하고 프로그램에 항상 올바른 데이터 세트가 제공된다고 가정 할 수 있습니다.


참된. 기술이 아닌 것으로 알고있는 많은 사람들이 시험해 보도록하여 최종 버전을 테스트 할 수 있습니다. 이것은 조금이라도 도움이되지 않습니다.)

48

배운 계획.


네, 저도 저에게 큰 것이 었습니다. 터치 타이핑 및 페어 프로그래밍도 중요했습니다.

46

코드 작성 및 많은 것.


우리 모두는 엉터리 코드를 작성하기 시작합니다. 당신이 충분히 쓰고 당신이 그 일을하면 더 나아질 것입니다. 코드 검토가 도움이되지만 가장 좋은 방법은 자신의 코드를 검토하는 것입니다.

코드와 그 많은 것을 읽는 것.
Stefan

3
많은 코드를 읽고 쓰기 ... 오픈 소스는 우리에게 큰 혜택입니다.)
Oded

45

정규식 학습.


내가 4 개월 전에 펄을 가르치기 시작했을 때 방금 했어요! vim과 unix를 사용하는 능력은 일반적으로 급등했습니다! 놀랄 만한.
sixtyfootersdude

정규 표현식은 유용 할뿐만 아니라 다른 방식으로 생각하도록합니다.
Tikhon Jelvis

+1. 완전히 동의하십시오. 나는 사람들이 vi, sed 또는 grep에서 아주 기본적인 일을하는 것을 자주 놀라게하는 것에 놀랐습니다.

39

14
TopCoder에 약간 문제가 있습니다. 좋아, 그것은 알고리즘에 대해 더 잘 생각하게하지만, 나쁜 스타일 (한 클래스의 모든 코드)로 작업하고 시간 압력을 받아야하므로 주석을 달거나 테스트하지 않을 것입니다. 아마도 프로젝트 오일러가 더 나은 선택 일 것입니다.

3
나쁜 스타일로 작업하지 않아도됩니다. 당신은 당신이 원하는만큼 수업을 가질 수 있습니다. 또한 단일 에지 사례에 실패한 솔루션은 0 점을 얻으므로 일관되게 통과하려는 경우 더 나은 테스트를 수행했습니다.

2
@hstoerr - (자신의 솔루션 도전 어렵습니다) 경쟁이 읽을 자신의 코드 어렵게에 대한 보상을하고 있다는 사실을 언급하지 않기 위하여
셰인 Fulmer

7
(이것이 불쾌하게 들리면 죄송합니다) Topcoder (또는 다른 유사한 콘테스트)를 좋아하지 않는 사람들이 왜 그렇게하는 것이 당신을 끔찍한 프로그래머로 만들 수 있는지 이유를 고안하려고합니다. 마음에 들지 않으면 괜찮습니다. 그러나 가짜 이유를 확인하는 것은 도움이되지 않습니다. TC의 심각한 참가자는 의도적으로 코드를 난독 처리하지 않습니다 (실제로 적발 될 경우 실격 처리 근거가됩니다). 경쟁하지 않는 많은 사람들이 항상 나쁜 코드를 작성하는 것을 봅니다. 알고리즘 콘테스트는 좋은 코딩 습관을 가르치는 것이 아니라 (어딘가에서 배우는 것), 더 깊은 것을 가르치고 개발하는 것을 목표로합니다.
MAK

2
TopCoder는 당신이 얼마나 더 나아질 수 있는지 보여줄 수있는 방법입니다.

38

자신 만의 프로젝트, 이정표, 리소스, 종속성, 요구 사항 및 테스트 계획을 작성하십시오. 특정 매개 변수 내에서 작동하도록 프로그래밍 기술을 향상시킬뿐만 아니라 가장 개선해야 할 부분을 정확하게 강조하는 역할을합니다. 블로그 또는 공식적인 프로젝트 업데이트를 통해 진행 상황을 정기적으로 업데이트하여 현재 위치와 가고 싶은 곳을 정확하게 볼 수 있습니다.


36

마지막 일을 그만두세요


2
나도! (더 많은 문자가 필요합니다 ...)

6
이유를 알려 주시면 답변이 될 수도 있습니다. ;-)

2
사내 프레임 워크 (EJB2 기반)로 만든 프로젝트를 지원하는 것은 제 재미가 아닙니다. 새로운 것은없고 오래된 쓰레기 일뿐입니다. 그리고 새로운 직업에 대한 관점은 좋지 않습니다. :(
mihn

거기에 있었어요.
Allbite

+1 막 다른 골목이 아닌 직업을 상륙 시키십시오.
Tomek Szpakowicz

29

나는 당신이하는 일에 끊임없이 의문을 제기하는 것이 가장 큰 것이라고 생각합니다. 코드가 완벽하다고 생각하지 말고 항상 개선하려고 노력하십시오.

내 코드가 완벽하다고 생각했을 때 2 ~ 3 번 있었던 것처럼 보였고, 갈 길이 멀다는 것을 깨달았습니다.

가장 큰 것은 컴퓨터가 아닌 다른 프로그래머가 소비하는 코드 자체를보기 시작했을 때였습니다. 기계가 처리 할 수있는 코드를 작성하는 것은 쉽지만 이해하기 쉬운 DRY를 작성하는 것은 어렵습니다.

그리고 "이 라인의 기능"을 이해하는 것이 아니라, "이 클래스가 다른 모든 클래스와 어떻게 조화를 이루고 있는지"를 이해하는 것은 사소한 일이며, 클래스 인터페이스를 실제로 구성하는 것은 사실상 불가능합니다. 오용하기 위해.


29

그들은 좋은 코드의 70 %가 오류 검사 및 처리라고 말합니다. 그런 식으로 프로그래밍을 시작했을 때 코드가 훨씬 좋아졌습니다. 무엇이 잘못 될 수 있는지 생각하고 바로 처리하면 큰 차이가 생겼습니다. 그것은 느낌이 모든 검사 그냥 코드를 위로 받고 실행하는 방법으로 점점 일을 좋아하지만 2 ~ 4 배 처음부터 끝까지의 시간을 단축 할 수 있습니다.

이 사람들은 누구이며 "그들"은 어디에 살고 있습니까?


28

내가이 일을 어떻게 문서화것인지 궁금해하기 시작했을 때 코딩 기술이 많이 향상되었다 .

여기서 "일"은 가능한 모든 세분성을 가져야합니다. 방법에서 전체 제품까지. 예를 들어 메소드 레벨에서는 실제로 작성하기 전에 API에 맞지 않거나 불분명 한 메소드를 추가하지 못하게합니다. 그리고 실제로 문서화 할 수없는 방법을 구현 해야하는 경우 어딘가에 디자인 문제가 있다는 신호입니다 ...

자동으로 " 설명 할 수 없으면 작성하지 않는다 "는 태도 잘못된 코드를 걸러 내고 반대로 문서를 올바르게 문서화하는 방법을 알게되면 구현하기가 더 단순하고 깔끔해집니다.


28

끊임없이 배운 것을 배우고 연습하십시오.

수단 :

  1. 개인 프로젝트 : 프로그래밍을 시작한 이후로 개인 프로젝트를하고 있습니다. 작은 게임, 이미지 처리, 스테 가노 그래피, 파일 형식 사양 구현, 처음부터 다양한 프로토콜 구현 또는 시간이 지남에 따라 다양한 프로그램 구현에 이르기까지 다양합니다.

  2. 책 읽기 : 나는 여가 시간에 다양한 책을 읽고 따르기로 결정했습니다. 전문가들이 읽은 것을 기다리면서 앉아있는 책들이 많이 있습니다. 책에서 얻을 수있는 깊이는 다양한 포럼 게시물을 읽는 것과 비교할 수 없습니다.


10
책을 언급하면 ​​+1 모든 일이 잘못된 방식으로 일을한다면 많은 경험이 가치가 없습니다.
mbillard

27

이것은 일반적으로 새로운 기술을 배우는 연대순입니다.

  1. 좋은 블로그 (Atwood, Martin Fowler 등)를 정기적으로 읽고 , 기술 뉴스를 최신으로 유지하고, 흥미로운 새로운 기술에 대한 내용을 따르십시오. 이 단계를 통해 추가 탐색이 필요한 항목이 있는지 결정할 수 있습니다.

  2. 레벨에 맞는 올바른 책 이나 기타 자료를 읽으십시오 (예 : 디자인 패턴을 배우려는 초보자에게는 '헤드 우선 디자인 패턴'을 제안합니다). 나는 또한 책에 대한 특정 환경 설정이 있습니다 .

  3. 밖으로 롤 장난감 프로젝트 내가 배운 것을 사용하거나 두 가지를. 프로젝트의 유용성에 대해 걱정하지 않습니다. 내 의도는 단지 내 학습을 활용하는 것입니다. (예 : OOP를위한 계산기 프로젝트는 괜찮을 것입니다)

  4. 나는 직장에서 물건을 사용할 수 있는지 볼 입니다. (예 : 직장에서 서브 버전을 사용하지 않더라도 로컬 리포지토리로 사용합니다. 그렇지 않으면 너무 단조롭고 시간이 많이 걸리는 작업에 Ruby를 사용했습니다)

  5. 이것은 대부분의 사람들이 그리워하는 가장 좋은 부분입니다. 지식 공유 세션 : 예를 들어 동료 팀 구성원에게 세션을 제공하십시오. 교수법은 기술을 실제로 배우는 가장 좋은 방법 중 하나라고 생각합니다. 나는 당신이 기술에 대한 당신의 이해 수준이 청중의 기술 유무에 관계없이 여러 가지가 될 것이라고 보장합니다. :-)


24

몇 달 동안 일부 오픈 소스 프로젝트를 해킹하십시오. 클수록 좋습니다. 당신을 잘 모르는 고도로 의견이 많고 지리적으로 다양한 사람들과 대화 할 때, 당신은 실수를 훨씬 더 빨리 도울 수는 없습니다. 또한 하나 또는 두 명의 똑똑한 사람들을 식별하면 순수한 지식이 아닌 경우 소중한 지식을 얻을 수 있습니다.

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