지난 15 년간 비 CS 학위로 프로그래밍을 해왔습니다. 내가 프로그래밍에 들어간 주된 이유는 새로운 것을 배우고 그것을 내 작업에 적용하기를 좋아했기 때문입니다. 그리고 프로그래밍 오류와 그 원인을 다른 것보다 빠르게 찾아서 수정할 수있었습니다. 그러나 나는 CS가 아닌 전공으로 인해 전문가 나 전문가를 찾지 못했습니다. 그리고 훌륭한 프로그래머를 보았을 때, 그들이 문제를 해결하는 데있어서 나보다 훨씬 더 훌륭하다는 것을 알았습니다.
중급 경력에서 내가 찾은 한 가지 기술은 요구 사항과 작업을 역순으로 추상적으로 생각하는 것입니다. 그런 식으로 세부 사항없이 실제로 필요한 작업을 확인할 수 있으며 이미 존재하는 솔루션의 일부를 빠르게 찾을 수 있습니다.
그래서 좋은 프로그래머가 될 다른 사고 기술이 있는지 궁금합니다. 아래 Q & A를 따라 실제로 권장되는 책을 읽었습니다. 그러나 프로그래밍 작업에 직접 적용 할 수있는 좋은 방법을 실제로 찾지 못했습니다.
프로그래밍 / 사고 기술을 개발하기 위해 프로그래머가 읽어야하는 프로그래밍 이외의 책은 무엇입니까?
/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie
답변
기존 질문에 대한 조언에 감사드립니다. 그에 대한 대답은 당신이 원하는 것을 이해하는 것과 다소 다릅니다. 나는 내 자신의 경험에서 몇 가지 제안을 할 것이다. 내 자신의 학위는 물리학에 있으며, 형식, 정확성 / 검증, 알고리즘 분석, 동적 프로그래밍, 데이터베이스 시스템, 데이터 구조 및 알고리즘의 시작, 선택에서 크게 차이가 나는 분야에 왔습니다. 가장 분명한 격차 (예 : 데이터 구조 및 알고리즘) 일찍 닫았지만 이해를 깊게하고 대안 프레젠테이션을보고 메모리를 새로 고치기 위해 해당 영역의 책을 계속 읽습니다. (저는 40 세 정도이므로 책은 저에게 효과적입니다.)
여기에 읽기 목록이 있습니다 (기억 된 순서 이외의 순서는 아님).
- 진주 프로그래밍 (Jon Bentley)
- 더 많은 프로그래밍 진주 (Jon Bentley)
- 컴퓨터 프로그래밍 기술 (도널드 크 누스)
- C ++의 알고리즘 (로버트 세지윅)
- 알고리즘 디자인 매뉴얼 (Steven Skiena)
- 프로그래밍 실습 (Kernighan and Pike)
- 프로그래밍 요소 (Stepanov)
- 해결 방법 (Polya)
- 컴퓨터 프로그램의 구조와 해석 (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 년 동안 프로그래밍을 해 왔으며 항상 내 분야의 전문가와의 격차로 혼란 스럽습니다. 그러나 나는 전문가가 되고자하는 오픈 소스 프로젝트에 참여하기 시작했습니다. 사고력은 연습과 경험에서 비롯됩니다. 일부 책은 도움이 될 수 있지만 그 중요성은 주로 교육적입니다. 자신의 사고력은 자신의 경험에서 비롯됩니다. 지금부터 시작하자!