입문자를 위한 프로그래밍 학습의 핵심 요소

2021년 취업 시장에서 가장  핫했던 키워드를 꼽으라면 단연 '네카라쿠배당토'*가 아닐까 싶습니다. 기술 스타트업의 투자가 급격하게 늘어나고 IT 업계가 성장하자 개발자가 부족해지기 시작했습니다.

* 네이버 , 카카오, 라인, 쿠팡, 배달의민족, 당근마켓, 토스를 일컫는 말

이러한 개발자 부족 사태는 임금을 폭발적으로 상승시켰고, 코딩 교육 열풍을 몰고 왔습니다. 심지어 IT기업의 비개발자 채용에도 '교양으로 프로그래밍을 배워두면 좋다'라는 이야기가 생길 정도였죠.

그로 인해 정말 많은 사람들이 프로그래밍 언어를 배우고 주니어 개발자에 도전했지만, 현실은 녹록지만 은 않았습니다.

재능도 없고 적성과도 맞지 않다. 잘하는 사람이 너무 많다.
현업에서 사용되지 않을 것 같은데 이게 맞는 건지 모르겠다.
실제 개발자가 되는 건 바늘구멍 같다.

제가 멘토링을 하면서 직접 들었던 의견입니다. 개발을 배우는 동안 이런 생각이 자리 잡으면 대부분 중도 포기를 하거나 개발에 대한 동기부여가 약해지죠. 그럼 어떻게 하면 성공적으로 프로그래밍을 배우고 개발자가 될 수 있을까요?

그래서 이제 막 프로그래밍을 시작한 분들을 위한 해외 아티클을 준비했습니다. 이 아티클을 다 읽고 나시면 주니어 개발자에게 효과적인 학습법이란 무엇인지 알게 되실 거예요.

주니어 개발자를 위한 5가지 공부 원칙

by Rainer Hahnekamp

저는 20년 이상 프로그래밍을 해왔습니다. 그 동안 많은 분들과 함께 일할 수 있어 즐거웠고 많은 것을 배웠습니다. 또한 대학을 갓 졸업한 많은 학생들과 함께 일했는데, 그들과 함께 교사나 멘토의 역할을 맡아야 했습니다. 최근에는 완전 초심자에게 코딩을 가르치는 프로그램에 트레이너로 참여하고 있습니다. 프로그래밍 방법을 배우는 것은 어렵습니다. 나는 종종 대학 과정과 부트캠프가 프로그래밍의 중요한 측면을 놓치고 신인을 가르치는 데 좋지 않은 접근 방식을 취한다는 것을 알게 됩니다. 성공적인 프로그래밍 과정이 구축되어야 한다고 생각하는 5가지 기본 기둥을 공유하고 싶습니다. 항상 그렇듯이 저는 주류 웹 애플리케이션의 컨텍스트를 다루고 있습니다. 신인의 목표는 프로그래밍의 기초를 마스터하고 라이브러리와 프레임워크의 중요성을 이해하는 것입니다. 클라우드, 일반적인 운영 또는 빌드 도구와 같은 고급 주제는 커리큘럼에 포함되어서는 안 됩니다. 디자인 패턴에 관해서도 회의적입니다. 그들은 초보자가 한 번도 경험하지 못한 경험을 가정합니다. 이제 새로운 프로그래머가 어디서 시작해야 하는지 살펴보겠습니다.

Test-Driven Development (TDD)

TDD는 많은 이점을 제공합니다. 불행히도 초보자가 완전히 준비되지 않은 고급 주제입니다. 초보자는 테스트를 작성해서는 안됩니다. 이것은 그들의 기본 기술 수준에 비해 너무 많습니다. 대신 테스트를 사용하고 작업하는 방법을 배워야 합니다. 각 프로그래밍 과정은 연습을 중심으로 이루어져야 합니다. 나는 단위 테스트로 내 연습을 확장하고 해당 테스트를 실행하기 위해 이미 설정된 환경을 학생들에게 제공합니다. 학생들이 해야 할 일은 코드를 작성한 다음 테스트 러너의 표시등이 빨간색에서 녹색으로 바뀌는 것을 보는 것입니다. 결과적인 게임화는 좋은 부작용입니다. 예: 선택한 기술이 Spring인 경우 Spring 프로젝트 내에서 연습 및 테스트를 제공합니다. 학생들은 Spring에 대해 아무것도 알 필요가 없습니다. 그들이 알아야 할 것은 운동의 위치와 테스트를 트리거하는 버튼뿐입니다. 또한 학생들은 디버거를 사용하는 방법과 REPL(Read-Eval-Print Loop)을 편리하게 사용하는 방법을 알아야 합니다. 런타임 동안 코드를 분석하고 소규모 실험을 위한 놀이터를 갖는 기능은 TDD에서 필수적입니다. 요점은 학생들이 핵심 프로그래밍 기술을 습득한 후 기본적인 TDD 행동을 배울 필요가 없도록 하는 것입니다. 나중에 학생들의 경력에서 습관을 바꾸는 것은 지금 그 습관을 배우는 것보다 훨씬 더 어려울 것입니다. 그렇기 때문에 처음부터 유닛 테스트를 실행하고 호흡해야 합니다. 나중에 직장 생활을 하면 단위 테스트가 없는 프로젝트에 대해 반감을 가져야 합니다. 그들은 직관적으로 단위 테스트의 부재를 반패턴으로 봐야 합니다.

Fundamentals First

신인은 즉시 프레임워크로 시작해야 한다는 말을 자주 듣습니다. 이것은 사람들에게 랠리카에 태우고 오버스티어링을 피하도록 요청하여 운전하는 방법을 가르치는 것과 같습니다. 이것은 그들이 여전히 브레이크를 스로틀로 착각한다는 사실을 무시합니다. Angular와 같은 프레임워크로 학생들을 시작할 때도 마찬가지입니다. 초보자는 먼저 프로그래밍의 기초를 이해해야 합니다. 그들은 다른 사람의 것을 사용하기 전에 기본 요소와 코드 작성의 의미에 익숙해야 합니다. 함수, 변수, 조건 및 루프의 개념은 초보자에게 완전히 생소합니다. 이 네 가지 요소는 프로그래밍의 기초를 구축합니다. 프로그램이 만들어지는 모든 것은 그것들에 의존합니다. 학생들은 이러한 개념을 처음 듣지만, 학생들이 이에 익숙해지는 것이 가장 중요합니다. 학생들이 기초를 마스터하지 않으면 뒤따르는 모든 것이 마술처럼 보이며 혼란과 좌절로 이어집니다. 교사는 이러한 기본 사항에 더 많은 시간을 할애해야 합니다. 그러나 슬프게도 많은 사람들이 너무 빨리 진행합니다. 문제는 일부 교사들이 학생의 역할을 하기 위해 고군분투한다는 것입니다. 그들은 오랫동안 프로그래밍을 해왔고 초보자가 어떤 유형의 문제를 해결해야 하는지 잊어버렸습니다. 전문 랠리 드라이버와 매우 유사합니다. 그는 누군가가 브레이크를 밟기 전에 생각할 필요가 있다는 것을 상상할 수 없습니다. 그는 그것을 자동으로 수행합니다. 나는 네 가지 주요 요소의 조합을 사용하여 도전적이지만 합리적인 시간 내에 풀 수 있도록 연습을 설계합니다. 좋은 예는 로마 숫자와 아라비아 숫자 변환기입니다. 이 도전은 학생들의 인내가 필요합니다. 도전 과제를 해결하기 위해 네 가지 요소를 성공적으로 적용하면 동기 부여도 크게 향상됩니다. 기본이 중요합니다. 해결될 때까지 진행하지 마십시오.

Libraries and Frameworks

학생들이 코딩에 많은 시간을 보낸 후에는 대부분의 코드가 이미 라이브러리나 프레임워크의 형태로 존재한다는 것을 배워야 합니다. 이것은 패턴보다 마음가짐입니다. 이전에 썼던 것처럼: 현대 개발자는 올바른 라이브러리를 알고 선택합니다. 그들은 스스로 버그가 있는 버전을 작성하는 데 몇 시간을 소비하지 않습니다. 이러한 사고 방식 전환을 성공적으로 수행하려면 Moment.js, Jackson, Lodash 또는 Apache Commons와 같은 잘 알려진 라이브러리를 사용하여 "기본 단계"의 예제를 해결할 수 있어야 합니다. 이를 통해 학생들은 도서관의 가치를 즉시 이해하게 될 것입니다. 그들은 그 복잡한 문제를 둘러싸고 머리를 긁적였습니다. 이제 그들은 도서관이 문제를 즉시 해결한다는 것을 발견했습니다. TDD와 마찬가지로 학생들은 동료가 Redux를 불필요하게 만드는 자체 제작 상태 관리 라이브러리에 대해 자랑할 때 의심스러워야 합니다. 프레임워크와 관련하여 학생들은 라이브러리의 유용성을 이해하고 나면 그 중요성을 이해하는 데 문제가 없을 것입니다. 과정의 기간에 따라 틀에 시간을 할애하기 어려울 수 있습니다. 그러나 이미 지적했듯이 가장 중요한 측면은 학생의 사고 방식을 처음부터 모든 것을 프로그래밍하는 것에서 라이브러리 탐색 및 사용으로 전환하는 것입니다. 경험이 풍부한 개발자에게만 사용되는 도구이므로 이 기둥에 도구를 추가하지 않았습니다. 이 초기 단계에서 학생들은 도구를 통합하고 구성하는 방법을 배울 필요가 없습니다.

Master & Apprentice

20대 초반에는 피아노를 배우고 싶었습니다. 저는 선생님을 원하지 않았고 스스로 배울 수 있다고 생각했습니다. 5년 후, 나는 전문 튜터에게 자문을 구했다. 글쎄, 내가 무엇을 말할 수 있습니까? 5년 전보다 한 달 만에 더 많은 것을 배웠습니다. 피아노 선생님은 내가 들을 수 없는 연주의 오류를 지적하고 내가 상상하지 못했던 해석적인 것들을 깨닫게 해주었다. 결국 그녀는 나에게 음악과 예술에 대한 사고방식을 심어주었고, 둘 다 기술적인 사람으로서는 도달할 수 없었습니다. 프로그래밍에서도 마찬가지입니다. 누군가 프로그래밍 경험이 없다면 독학은 나쁜 생각이 될 수 있습니다. 많은 성공 사례가 있지만 혼자 하는 것의 효율성에 의문이 든다. 대신 "마스터 & 견습생" 관계가 있어야 합니다. 처음에 마스터는 견습생이 따라야 할 규칙을 맹목적으로 알려줍니다! 마스터는 규칙을 설명할 수 있지만 일반적으로 추론은 견습생이 이해할 수 있는 범위를 벗어납니다. 이러한 내재화된 규칙은 일종의 안전망을 형성합니다. 길을 잃으면 항상 돌아갈 안전한 장소가 있습니다. 가르침은 독백이 되어서는 안 된다. 마스터는 각 학생을 개별적으로 다루어야 합니다. 그는 학생들이 어떻게 작업하는지 확인하고, 조언을 제공하고, 진행 속도에 맞게 과정을 조정해야 합니다. 견습생이 어느 정도 숙달되면 새로운 영역을 탐험하도록 격려해야 합니다. 마스터는 "지혜"를 공유하고 토론에 열려있는 멘토로 진화합니다.

Challenge and Motivation

“페이스북 클론을 만들자!” 이것은 수많은 고위 소프트웨어 개발자와 수백만 유로의 예산이 뒷받침하는 CEO에게서 나온 것이 아닙니다. 프로그래머를 위한 입문 과정의 연습입니다. 그러한 사업은 사실상 불가능합니다. 설상가상으로 학생들은 이상한 나라에 들어가 자신이 진정으로 도달할 수 없는 기술을 가지고 있다고 믿게 됩니다. 의심할 여지 없이 교사는 그것을 알고 있지만 동기 부여를 위해 그러한 연습을 만듭니다. 운동의 주요 목표는 즐겁게 하는 것이 아닙니다. 특정 기술을 중심으로 작성되어야 하며 학생들이 해당 기술을 이해하는 데 도움이 되어야 합니다. 동기 부여는 좋지만 내용의 희생은 아닙니다. 프로그래밍은 쉽지 않습니다. 학생들에게 내재적인 동기가 없다면 코딩은 갈 길이 아닙니다. 초보자는 전문 개발자의 의미를 경험해야 합니다. 그들은 많은 시간을 투자하기 전에 무엇이 그들을 기다리고 있는지 알아야 합니다. 예를 들어, 많은 비즈니스 응용 프로그램은 복잡한 양식과 그리드를 중심으로 합니다. 이것들을 만드는 것은 연습을 통해 전달할 수 있는 중요한 기술입니다. Facebook과 유사한 애플리케이션을 구축하는 것은 학생들이 바로 배울 수 있는 최고의 교훈이 아닐 수 있습니다. 유사하게, 프로그래머가 아닌 사람은 개발자가 하루에 작성하는 코드 행 수가 얼마나 되는지에 놀랄 수 있습니다. 코드를 제거하거나 아무것도 얻지 못하는 경우도 있습니다. 왜요? 일이 항상 잘못되기 때문입니다. 우리는 단순한 오타로 판명된 매우 이상한 버그를 수정하는 데 끝없는 시간을 보냅니다. 라이브러리에 마이너 버전 업그레이드가 있다는 이유로 일부 도구가 작동하지 않을 수 있습니다. 또는 누군가가 git에 파일을 추가하는 것을 잊었기 때문에 시스템이 충돌합니다. 목록은 계속될 수 있습니다. 학생들은 이러한 경험을 즐겨야 합니다. 시간 압박을 받고 있는 알려지지 않은 라이브러리를 대상으로 하는 운동은 정확히 옳은 것일 수 있습니다. ;) 태양은 실생활에서 항상 빛나지 않습니다. 초보자는 프로그래밍의 현실에 대해 잘 준비해야 합니다.

Final Advice

마지막으로 중요한 것은 2주, 2개월, 심지어 1년 만에 전문 프로그래머가 될 수 없다는 것입니다.시간과 인내가 필요합니다.트레이너는 서두르거나 잘못된 약속을 해서는 안 됩니다.그들은 학생들이 개념을 이해하고 너무 빨리 진행하지 않는지 여부에 중점을 두어야 합니다

.2018년 6월 10일 www.rainerhahnekamp.com에 원래 게시되었습니다.

출처:

The main pillars of learning programming — and why beginners should master them.
by Rainer Hahnekamp The main pillars of learning programming — and why beginners should master them. I have been programming for more than 20 years. During that time, I’ve had the pleasure to work with many people, from whom I learned a lot. I’ve also worked with many students, coming