카테고리 보관물: Software

Software

좋은 프로그래머가되기위한 사고 기술 [닫기]

지난 15 년간 비 CS 학위로 프로그래밍을 해왔습니다. 내가 프로그래밍에 들어간 주된 이유는 새로운 것을 배우고 그것을 내 작업에 적용하기를 좋아했기 때문입니다. 그리고 프로그래밍 오류와 그 원인을 다른 것보다 빠르게 찾아서 수정할 수있었습니다. 그러나 나는 CS가 아닌 전공으로 인해 전문가 나 전문가를 찾지 못했습니다. 그리고 훌륭한 프로그래머를 보았을 때, 그들이 문제를 해결하는 데있어서 나보다 훨씬 더 훌륭하다는 것을 알았습니다.

중급 경력에서 내가 찾은 한 가지 기술은 요구 사항과 작업을 역순으로 추상적으로 생각하는 것입니다. 그런 식으로 세부 사항없이 실제로 필요한 작업을 확인할 수 있으며 이미 존재하는 솔루션의 일부를 빠르게 찾을 수 있습니다.

그래서 좋은 프로그래머가 될 다른 사고 기술이 있는지 궁금합니다. 아래 Q & A를 따라 실제로 권장되는 책을 읽었습니다. 그러나 프로그래밍 작업에 직접 적용 할 수있는 좋은 방법을 실제로 찾지 못했습니다.

프로그래밍 / 사고 기술을 개발하기 위해 프로그래머가 읽어야하는 프로그래밍 이외의 책은 무엇입니까?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie



답변

기존 질문에 대한 조언에 감사드립니다. 그에 대한 대답은 당신이 원하는 것을 이해하는 것과 다소 다릅니다. 나는 내 자신의 경험에서 몇 가지 제안을 할 것이다. 내 자신의 학위는 물리학에 있으며, 형식, 정확성 / 검증, 알고리즘 분석, 동적 프로그래밍, 데이터베이스 시스템, 데이터 구조 및 알고리즘의 시작, 선택에서 크게 차이가 나는 분야에 왔습니다. 가장 분명한 격차 (예 : 데이터 구조 및 알고리즘) 일찍 닫았지만 이해를 깊게하고 대안 프레젠테이션을보고 메모리를 새로 고치기 위해 해당 영역의 책을 계속 읽습니다. (저는 40 세 정도이므로 책은 저에게 효과적입니다.)

여기에 읽기 목록이 있습니다 (기억 된 순서 이외의 순서는 아님).

  1. 진주 프로그래밍 (Jon Bentley)
  2. 더 많은 프로그래밍 진주 (Jon Bentley)
  3. 컴퓨터 프로그래밍 기술 (도널드 크 누스)
  4. C ++의 알고리즘 (로버트 세지윅)
  5. 알고리즘 디자인 매뉴얼 (Steven Skiena)
  6. 프로그래밍 실습 (Kernighan and Pike)
  7. 프로그래밍 요소 (Stepanov)
  8. 해결 방법 (Polya)
  9. 컴퓨터 프로그램의 구조와 해석 (Abelson and Sussman)

또한 90 년대 중반에 읽을 때 솔리드 코드 작성 에서 많은 것을 얻었습니다 . 그러나 실제로 사고 기술과 밀접하게 관련되어 있지 않기 때문에 목록에 없습니다 (실수로 잘못 사용 될 가능성을 최소화하기 위해 API를 디자인하는 것이 더 중요합니다.

나는 또한 10 대로서 Gödel, Escher, Bach (Hofstadter) 에서 많은 것을 얻었 지만 이미 지적한 질문에 대한 답변에서 이미 언급되었습니다. 컴퓨터 과학 기술을 직접 개발하기보다는 즐거움을 위해 읽는 책입니다.

저는 꽤 많은 수의 재능있는 프로그래머들과 함께 일하고 있으며 거의 ​​보편적으로 Programming Pearls의 팬입니다 . 나는 인터뷰에서 더 많은 후보자들이 그 책의 4 장을 읽었 으면 좋겠다.


답변

먼저; 어떤 징계를 위해서든 어떤면에서든 항상 그것에 대해 훨씬 더 나은 사람이있을 것입니다. 그 부분에 대해 걱정하지 마십시오.

그때; CS 학위는 훌륭하고 모든 것, 그리고 그것이주는 이론적 지식은 확실히 유용하지만, 누군가가 좋은 프로그래머라는 것을 나타내는 것은 아닙니다. 최고의 프로그래머 중 일부는 자율적으로 가르치고 있으며 세상은 젖은 종이 봉지에서 벗어날 수없는 CS 졸업생들로 가득합니다. 따라서 그 부분에 대해서도 걱정하지 마십시오.

좋은 프로그래머가되기 위해 필요한 것은 두 가지가 필수적이라고 생각합니다. 하나는 엄격하게 공식적인 방식으로 문제에 접근하고 특정 수준의 추상화로 생각할 수 있어야한다는 것입니다. 포인터와 재귀를 이해하면이 전선에 능숙 할 것입니다. 다른 하나는 헌신과 끈기입니다. 다른 기술과 마찬가지로 프로그래밍에는 마스터하는 데 수만 시간의 집중적이고 집중적 인 연습이 필요하며 밤새도록 진행되지 않습니다. 어느 쪽이든 다른 방식으로 숙달하려면 최소한 10 년이 걸립니다. 열정적이라면 시간을 내고 집중하고 새로운 도전을 찾는 것이 쉬울 것입니다. 그렇지 않다면 여전히 가능하지만 즐거운 여행이 될 수는 없습니다.


답변

프로그래밍 언어를 배우기 시작할 때마다 기억하십시오. 먼저 개념을 배우고 한 번에 테스트하면 실제로 연습을하면 개념과 그 사용법을 잊을 수 없습니다.

다음으로 잘 알려진 “연습은 완벽하다”그리고 프로그래밍에도 적용됩니다. 코드를 더 많이 사용하고 코드를 실행하고 기존 코드를 수정하여 수정하면 gr8 프로그래머가 아니라 좋지 않습니다.


답변

내가 중요하다고 생각하는 두 가지 비 프로그래밍 책이 있습니다.

첫 번째는 Raymond Smullyan의 “Lady or the Tiger”입니다. 이것은 일종의 오토마타 이론 둘러보기를 포함하는 훌륭한 논리 퍼즐 세트입니다. 멋진 물건.

두 번째는 Douglas Hofstadter의 “Godel, Escher, Bach : Eternal Golden Braid”로 재귀와 언어 이론에 대해 생각하게합니다.

초보자를위한 좋은 습관을 원한다면 Hoover의 “Apprenticeship Patterns”와 Carter의 “The New Programmers Survival Manual”을 읽으십시오. 이 두 책은 기술을 확장하는 방법과 경력을 확장하는 방법에 대해 설명합니다. 그들은 다른 접근 방식을 취하지 만 함께 잘 작동합니다.


답변

다른 프로그래머의 기술을 평가하는 방법에 관심이 있습니다.

구체적이고 적용 가능한 지식은 일반적인 기술보다 훨씬 더 인상적인 결과를 낳습니다. 이미 상황이 많고 이전에 비슷한 문제가 발생한 경우 문제의 원인을 매우 빨리 찾을 수 있습니다. 적용 가능한 도구 세트를 사용하는 방법을 이미 알고 있다면 솔루션을 매우 빠르게 구축 할 수 있습니다. 아직 지식이 없지만 필요한 기술이 있다면 필요한 지식을 얻는 데 더 많은 시간이 걸립니다. 이 경우 더 많은 거리를 커버하는 데 시간이 더 걸리는다고해서 반드시 속도가 느려진 것은 아닙니다.

물론 지식을 쌓고 나중에 도움이 될 도구를 사용하는 방법을 배울 수 있다면 이점이 있습니다. 다양한 주제에 대해 조금 배우면 여기에서 예상보다 많은 부분이 중복되어 필요한 정보를 찾을 위치를 아는 것만으로도 많은 시간을 절약 할 수 있습니다. 하지만 어쩌면 그저 나일뿐입니다.


답변

새로운 것을 배우고 오류를 빠르게 수정할 수 있습니다. 그것은 당신이 전문가가되기위한 두 가지 핵심 요소, 즉 열정과 능력을 가지고 있음을 의미합니다. 그러나 당신은 결코 자신을 전문가로 여기지 않는다고 생각합니다. 아마도 초점과 시간이라는 두 가지가 더 필요할 것입니다. 예를 들어, Linus Torvalds가 1991 년에 Linux를 처음 릴리스했을 때 아무도 그를 그를 전문가로 간주하지 않았습니다. 그는 여전히 Linux에서 매일 작업하고 있으며 요즘 Linux 커널 Git 저장소에서 자신의 병합 로그를 볼 수 있습니다. 그의 초점은 그를 Linux 분야에서 가장 유명한 전문가입니다. 시간은 추상적 인 개념으로, 지속적인 연습을 통해 경험을 쌓고, 다른 사람들과 지식을 공유하고 후 향적으로 개선하는 것을 의미합니다.

나는 당신과 같은 상황입니다. 나는 비 CS 학위 (EE 학위)로 15 년 동안 프로그래밍을 해 왔으며 항상 내 분야의 전문가와의 격차로 혼란 스럽습니다. 그러나 나는 전문가가 되고자하는 오픈 소스 프로젝트에 참여하기 시작했습니다. 사고력은 연습과 경험에서 비롯됩니다. 일부 책은 도움이 될 수 있지만 그 중요성은 주로 교육적입니다. 자신의 사고력은 자신의 경험에서 비롯됩니다. 지금부터 시작하자!


답변