나는 여기에 비슷한 질문이 있다는 것을 알고 있지만 최근에 Joel Spolsky 의이 게시물을 읽었습니다.
프로그래밍 경험이없는 밝은 사람에게 어떻게 프로그램을 가르 칠 수 있습니까?
그리고 그것은 나의 학습 방식과 그것이 장기적으로 실제로 해로울 지에 대해 생각하게했습니다.
나는 다양한 언어를 다루었지만 C #은 나의 첫 번째 심각한 언어이며 “Head First C #”을 읽고 몇 가지 프로젝트를 만들었습니다. 그러나 위의 게시물을 읽은 후 나는 그것이 잘못되었다는 것이 약간 실망 스럽습니다. 분명히 나는 저를 조금 던지게 한 Joel의 의견을 존중합니다.
나는 읽기 목록에서 권장하는대로 “코드”를 읽기 시작했고, 즐거웠지만 꽤 힘들다는 것을 알았습니다. Visual Studio에서 “noobish hacking about”의 빛을 발산 한 것 같습니다.
이제 어떤 경로를 선택해야하는지 잘 모르겠습니다. 물러서서 Joel의 조언을 따라 읽고 읽어야합니까?
내 주요 목표는 다른 모든 사람들과 마찬가지로 좋은 프로그래머가되는 것 같지만, 내가 존경하는 의견을 가진 사람이 해롭다 고 생각할 때 .NET 언어를 배워서 나쁜 연습을하고 싶지는 않습니다.
생각?
답변
나는 다양한 언어를 습득했지만 C #은 나의 첫 번째 심각한 언어이며 “Head First C #”을 읽고 몇 가지 프로젝트를 만들었습니다. 그러나 위의 게시물을 읽은 후 나는 그것이 잘못되었다는 것이 약간 실망 스럽습니다. 분명히 나는 저를 조금 던지게 한 Joel의 의견을 존중합니다.
나는 Joel의 의견도 존중하지만, 그들은 단지 의견 입니다. C #을 시작 언어로 사용하는 데 아무런 문제가 없습니다.
내가 바를 수있는 가장 큰 조언은 (바닐라 C에서 시작하더라도) 프로그래밍 을 하는 사람 은 정체되지 말고 종교적이지 않아야한다는 것 입니다. 나는 당신이 시작 하는 프로그래밍 언어, 또는 그 언어가 얼마나 순수하거나 의로운 지 상관하지 않습니다. 오늘날, 당신은 프로그래밍 세계에만 앉을 여유가 없습니다.
예를 들어, 십대 때 PHP3로 프로그래밍을 시작했습니다. 작은 웹 응용 프로그램과 몇 개의 웹 사이트를 만들었습니다. 나는 천재 프로그래머라고 생각하고 PHP3로 무엇이든 할 수 있다고 생각했으며 ASP 나 BASIC에 관한 사람들에게 눈살을 찌푸 렸습니다. 소년, 내가 틀렸다.
나는 시야를 넓히고 다른 프로그래밍 언어와 개념을 공부하기 시작할 때까지 개발자로서 진정으로 꽃을 피우기 시작하지 않았습니다. 고등학교 기간 동안 RealBASIC을 배우고 나중에 Visual Basic을 배웠습니다. 비즈니스 스쿨 후에 전문 개발자가되었을 때 C #과 Javascript를 본격적으로 배우기 시작했습니다.
자, 여기서 오해하지 마십시오. 나는 당신 이 모든 거래의 잭이 되려고 노력한다고 주장 하지 않습니다 . 마음에, 그리고 무역에서, 나는 여전히 PHP 프로그래머입니다. PHP는 빵과 버터이며, 안팎으로 알고 있습니다. 그러나 내 PHP 기술은 단지 PHP를하는 것이되지 않았습니다. 다음은 전문적인 작업에도 불구하고 PHP에서 파악하지 못한 매우 중요한 개념입니다.
- 자바 스크립트 : 폐쇄
- jQuery (예, 별도) : DOM과 Ajax
- Visual Basic : 객체 지향 프로그래밍
- C # : 제네릭 및 클로저
- Ruby (on Rails) : MVC 디자인의 힘
나는 계속해서 며칠 동안이 사이트의 다른 많은 사람들도 그렇게 할 수있었습니다. 필자는 PHP 프로그래머이지만 다른 모든 멋진 개념을 나와 함께 매일 수행하는 작업으로 가져올 수있었습니다.
내 요점이 뭐야? C #을 배우십시오. C # 의 주인 이 되십시오 -당신은 오래되고 성공적인 경력을 쌓을 것이며 아마도 놀라운 일들을 성취 할 것입니다. 그러나 스스로 구멍을 뚫지 마십시오 . 여행, 다른 언어와 환경 및 개념을 맛보십시오.
답변
의견을 존중하는 사람은 그것이 해롭다 고 생각할 때.
이것은 Richard Feynman과 관련된 이야기를 떠올리게합니다. Caltech의 한 학생은 저명한 우주 론자 Michael Turner에게 자신의 “바이어스”가 암흑 물질을 구성하기위한 후보로 어떤 종류의 입자를 선호하고 있는지 물었고 Feynman은 “왜 자신의 편견 을 알고 싶 습니까? … 당국에주의를 기울이지 말고 스스로 생각하십시오. “
프로그래머는 모든 단계에서 나옵니다. 자바는 오늘날 많은 고등학교와 대학에서 가르치고 있지만 Joel Spolsky가 학교에있을 때는 아직 발명 되지 않았습니다 . 좋은 프로그래머가 되려면 “진정한 길”이 없습니다. SICP와 같은 일부 고전은 대부분의 프로그래머가 어느 시점에서 우연히 발견하지만 단단하고 빠른 표준은 없습니다. 가장 중요한 것은 어딘가에서 시작하여 건축 개념에 집중하는 것입니다. 위대한 프로그래머는 한 번 다음과 같이 말했습니다.
나쁜 프로그래머는 코드에 집중하고, 좋은 프로그래머는 알고리즘에 집중합니다.
C #은 좋은 언어라고 생각하지만 Visual Studio에주의를 기울여야한다고 경고합니다. 그것은 엄청난 IDE,하지만 당신은 드래그하는 경우 DropDownList
와 바인드 GridView
A와 ObjectDataSource
와 사용하는 Button
컨트롤을 만들기 위해 DropDownList
기반 검색, 다음 작업의 대부분이 IDE에 의해 수행되며, 당신이 정말로 프로그래밍을하지 않을입니다. IDE 도구를 활용하되 항상 개념을 구축하고 지식을 개발하십시오.
답변
나는 단지 주니어 일 뿐이지 만, 더 많은 경험을 가진 사람들에 대한 모든 겸손과 존경으로, 나는이 태도도 얻지 못한다고 고백해야합니다.
한 프로그래머가 조엘의 대답은 아래에 댓글을 달았습니다 : ” 매우 자신의 C #을 능력을 권장 온 프로그래머”이상 책상에 머리를 세게했다 사람으로 “하지만 같은 간단한 것들을 할 수 없었던 매우 잘 문서화 기본 클래스 구현을 찾기 C 및 C ++ 프로그램에서 메모리 누수 “ …
그러나 C ++ 응용 프로그램에서 메모리 누수를 찾는 것이 왜 C ++ 을 모른다고 주장한 적이 없는가? 🙂 이해가 안 돼요. 치과 의사의 기술이 부족하다고 심리학자를 비판하는 것과 같습니다. 나는 확실히 좋은 프로그래머가 아니에요,하지만 난 C ++를 알 수 없기 때문에이없는 느낌 – 나는 충분히 내가 프레임 워크 및 언어를 모르기 때문에 그것의 하고 사용합니다.
“매우 잘 문서화 된 기본 클래스 (…)를 구현하는 것과 같은 간단한 일을 할 수 없었거나 자체적으로 문제를 파악하거나 적당한 속도로 새로운 아이디어를 배울 수 없었습니다.”
그러나 상관 관계가 인과 관계를 의미하는 것은 아니며 일반적인 프로그래밍 기술이 부족하다는 것이 언어 선택 의 결과 라고 가정하는 이유는 무엇 입니까?
아니면 C #이 첫 번째 언어 선택의 영향입니까?
나는 다른 그럴듯한 설명을 볼 수 있습니다 (아마도 C # 그냥 유행, 따라서 그것은 초보자의 많은 매력 … 대부분의 사람들은 누구를 위해 C #을 매우 긴 프로그래밍되어 있지 않은 최초의 언어 모두에서 , 그것은 더 핸디캡이다 다른 언어 등으로 프로그래밍하지 않는 것 자체의 권리 등).
답변
한 언어를 배우고 그 언어를 고수 하는 것은 어떤 언어로 시작해야하는지 결정하는 것보다 실수가 더 큽니다. 물론 배우기가 더 쉬운 언어도 있지만, 많이 사용하는 언어를 배우려고 시도하는 것이 좋습니다 (학교에서는 언어 선택이 이미 학교에서 결정합니다). 언어를 제대로 배우고 몇 달 후에 적극적으로 사용한 후에는 다른 프로그래밍 언어에 익숙해 져 비교해야합니다.
.NET에서 그것은 당신이 (갈 수 있도록 쉽게 정렬의 당신은 Visual Basic 및 C #을 전환 할 수 있기 때문에) 서로 다른 프로그래밍 언어. 따라서 Visual Basic을 배우고 차이점이 무엇인지 확인할 수 있습니다. 이 레벨에서는 세 가지 기본 프로그래밍 구조를 사용하여 기본 절차 적 코딩에 능숙해야합니다. 모두 독창적 일 수 있고 (변수 사용 방법을 알고있는 경우) 훌륭한 프로그래머가 되려면 다음과 같이하십시오.
- 순서-코드는 지정한 방식으로 서로 뒤 따르는 단계 순서로 작성됩니다 ( “점프”, 단계별 및 단계 정의).
- 조건부-코드에 의사 결정 지점이있을 수 있습니다 (if 문, 스위치 케이스 문 정의).
- 루핑 / 반복-코드는 어떤 결정이 주어지면 스스로 반복 될 수 있습니다 (위의 두 가지 모두의 확장이며 for-, do-while-loop를 정의합니다)
2 차 프로그래밍 언어가 가장 활발한 지 여부는 중요하지 않습니다. 프로그래밍 언어 (특히 동일한 패러다임을 따르는 경우)는 서로 매우 유사하며 작은 뉘앙스가 실제로는 길다는 사실 만 알고 있습니다. 소프트웨어 프로그래밍 작동 방식을 이해할 수 있습니다.
적어도 일년에 한 번, 다른 프로그래밍 패러다임 을 따르는 새로운 프로그래밍 언어를 배우 십시오 . 새로운 언어를 완전히 따라 잡을 필요는 없지만 다른 패러다임을 알고 있으면 몇 가지 이점이 있습니다. 몇 가지 패러다임이 있으며 일부 프로그래밍 언어는 여러 언어를 혼합합니다 (C #에는 실제로 다음 세 가지 하위 세트가 있음에 유의하십시오).
많은 프로그래밍 언어가 고유 한 관용구와 기본 API를 따른다는 사실을 알아야합니다. 따라서 새로운 언어를 배울 때 그 관용구와 API를 잘 배우고 물건을 만들 때 괜찮을 것입니다. 한 가지 좋은 이유는 프로그래밍 문제를 디자인하고 해결하는 데 더 능숙 해지기 때문입니다. 한 언어로 된 일부 관용구는 주요 언어의 문제를 해결하는 방법에 대한 통찰력을 제공 할 수 있습니다.
또한 가장 많이 사용하는 주요 언어 이외의 다른 프로그래밍 언어를 배워야하는 또 다른 이유도 있습니다. 취업 기회가 훨씬 더 큽니다.
답변
귀하의 질문과 여기에 많은 답변의 초점은 C #에 있습니다. 에서 위키 백과 :
C # 언어는 단순하고 현대적인 범용 객체 지향 프로그래밍 언어입니다.
이를 바탕으로 뇌에 장기적인 손상을주지 않으면 서 C #을 제 1 언어로 배울 수 있다고 말하는 것이 안전합니다. 나는 Joel이 다음 과 같이 썼을 때 전체 언어를 정죄하고 있다고 생각하지 않습니다 .
C # 및 ASP.NET에서 시작하는 것과 같이 지금 바로 배우고 자하는 정확한 내용을 바로 익히고 바로 학습하려고합니다.
문제는 언어가 아니고 지름길입니다. 사람들은 너무나 자주 단계별 자습서를 따르거나 “24 시간 안에 모든 것을 배우십시오”책을 통해 최종 목표를 빠르게 달성하려고합니다. “내 인생에서 코드를 한 번도 작성하지는 않았지만 iPhone을 사용하고 있습니다. 내가 원하는 것을 정확하게 수행하기위한 단계별 지침을 알려주시겠습니까? 감사합니다! ” 나는 당신이 그 접근법을 취하고 있다고 말하는 것이 아니라, 당신이 경계해야 할 것입니다.
견고한 프로그래밍 기술을 개발하려면 기본 기술을 배우는 것으로 시작해야합니다. OOP 및 GUI 응용 프로그램으로 바로 이동하려고하면 이러한 기본 사항을 놓칠 수 있습니다. 요엘이 지적한 책은 참으로 좋습니다. 난 단지를 통해 미끄러 져 한 C # 옐로우 북 (PDF),하지만 같은 외모는 아마 내가 상점에서 볼 수있는 C #을 책의 대부분보다는 프로그래밍에 더 소개합니다.
답변
나에게, 그 기사의 내용은 약간의 엘리트 주의자가되었다. 그렇습니다. SICP 는 실제로 더 나아지기를 원하는 진지한 개발자들에게 권장 되지만 “정상”을 넘어서 깊은 마법을 배우려는 사람들에게만 권장 됩니다. 실제로 수년간 SICP 는 표준 MIT 신입생 프로그래밍 텍스트였습니다. 그러나 많은 탄탄한 일을하는 프로그래머들은 그 훌륭하지만 값 비싸고 고도로 선택적인 기관에 다닐 기회가 없었습니다.
그래서 무엇을 할 나는 당신의 질문에 대답, 추천? 당신이 가진 것부터 시작하고 특정 언어를 배우기보다는 프로그래머처럼 생각하는 법을 배우십시오.
C # 구현을 사용할 수 있다면 Java, JavaScript, Python, Ruby, Scala, Scheme 및 기타 많은 언어와 같이 나와 같은 뻣뻣한 사람들에게 완벽하게 훌륭한 언어라고 말할 수 있습니다. 수년에 걸쳐 배웠습니다. 결국, 특정 작업에 적합한 언어와 도구를 선택하려고합니다. 즉, 모자와 같은 언어를 전환해야합니다.
Why ‘s Poignant Guide and Shoes 를 통해 Ruby에 접근하는 것과 같이 재미있는 학습 방법을 사용하는 데 아무런 문제가 없습니다 ( 최근 다른 게시물 에서 추천 한 것처럼 ). SICP로 가는 길 에 The Little Schemer 와 The Seasoned Schemer 를 상대로 머리를 두드리는 것과 같은 신비 롭고 신비로운 길이 있습니다. 많은 현대의 사상가들은 당신이 모든 오래된 학문과 “엔터 프시”를 건너 뛰고 대신 자바 스크립트, JQuery, HTML5로 직접 뛰어 들게합니다. 시작하는 방법에는 여러 가지가 있으므로 너무 많은 시간을 낭비하지 마십시오. 하나만 골라 코딩하십시오!
현실적으로 요즘에는 일하는 전문가가 거의 없기 때문에 어셈블러 또는 C / C ++를 먼저 배우기 위해 거꾸로 보낼 것입니다. 솔직히 그들이 그렇게한다면 나는 그들이 당신에게 많은 봉사를하고 있다고 믿지 않습니다.
따라서 “당신이 가진 것부터 시작”에 대해 조금 더 꾸미기 위해 세 가지 조언이 더 있습니다.
- 자신에게 멋진 프로그래밍 언어와 이해하기 쉬운 하나의 학습 방식을 선택하고 모든 것을 제공하십시오. 선택한 언어로 글을 읽습니다. 관리 할 수있는만큼 좋은 코드를 읽으십시오!
- 키보드로 바로 손을 잡고 배우면서 코딩을 시작하십시오. 프로그래밍 책의 모든 기본 연습을 직접 수행하고 손가락으로 클릭하여 찾을 수있는 모든 자습서를 실제로 클릭하여 실제로 작동하도록하십시오. 코드는 작동해야하지만 그렇지 않은 데모의 오류를 수정하는 동안 얻을 수있는 기술의 수에 놀랄 것입니다!
- 좋은 프로그래머가 문제를 극복하는 방법을 배우는 데 대부분의 노력을 기울이십시오. 복잡한 문제와 시스템을 분석하고 분해하여 실제로 이해할 때까지 분류하는 방법을 배웁니다. 그런 다음 자동화 된 솔루션을 합성하고 설계하는 방법을 배우고 지구상에서 일부 인간이 작업을 쉽게 수행 할 수 있도록 구축하십시오.
나는 FORTRAN IV와 QBASIC으로 시작했고, 그것들이 나를 망치지 않으면 C #도 당신을 해치지 않을 것입니다! 행운을 빕니다. 배우는 동안 즐겁게 지내십시오!
답변
사람들이 “어떤 언어를 배워야합니까?”라고 물어 보면 내가 본 것 중 최고의 조언이라고 생각합니다. 좋은 프로그래머는 모든 언어로 작업 할 수 있습니다.
나는 그 말에 반대하는 주장이 있지만, 요점은 언어 전문가가 아닌 좋은 프로그래머가되는 법을 먼저 배우는 것입니다. 건축업자는 정확히 하나의 토지를 건설하는 것을 전문으로하지 않으며, 거래 기술을 배우고 필요한 토지에 적용합니다.