본문 바로가기
👩‍💻 Programming/잡동사니

당신이 프로그래머가 되어서는 안 되는 10가지 이유

by codingBear 2022. 11. 27.
728x90
반응형

 이 글은 '[翻訳]あなたがプログラミングに向いていない10のサイン'을 옮긴 글입니다.


들어가며

스티커를 많이 붙인다고 해서, 더 성장하는 것은 아니다.

 최근 Reddit이나 Quora에서 '제가 프로그래머로서 성장할 수 있을지 어떻게 하면 알 수 있을까요?'라는 질문을 자주 본다. 전직을 검토하거나 소프트웨어 개발에 흥미가 있다면 매우 자연스러운 질문이다.

 

 컴퓨터에 관한 정식적인 수업을 받지 않는 경우 사람들은 프로그래머가 되는 것에 큰 심리적인 장벽을 가진다. 프로그래밍이 적성에 맞지 않는다면 당신은 자신이 프로그래머로서 재능이 없는 사람이라 여기는 것은 자연스러운 생각이다. 만일 당신이 배우가 되고 싶은데 자신은 연기를 못하는지 잘하는지 의문을 갖는 것과 마찬가지로 말이다. 

 

 나는 풀스택 웹 개발을 가르치는 교육자로서 많은 초보 프로그래머를 가르쳤다. 그리고 좋은 소식은 프로그램을 '학습'하지 못하는 학생을 거의 보지 못했다는 점이다. 읽고, 쓰고, 계산하는 것처럼 나는 프로그래밍을 기본적인 사람의 기술이라고 생각한다. 그것은 우리들의 일반적인 능력인 일부이지만 '학습'할 필요가 있다.

 

 지난 2년 간 교육을 하면서 나는 여러 학생들이 그 과정에서 분투해온 것과 학생들의 분투에 나타나는 공통적인 과제를 발견했다. 당신이 앞으로 소개할 목록을 보고 진심으로 자신의 이야기라고 생각한다면 아마 프로그래밍이 적성에 맞지 않는다는 뜻이리라. 당신은 다른 할 일을 찾아야만 할 것이다. 그래도 당신이 개발자가 되겠다는 목표를 향해 끊임없이 헌신한다면 이러한 문제는 손쉽게 바꿀 수 있을 것이다.

 

 프로그래밍은 읽고, 쓰고, 계산하는 것처럼 인간의 기본적인 기술이다. 누구나 시간과 노력을 들인다면 프로그램을 학습할 수 있다.

 

 아래 목록은 당신의 적성에 프로그래밍이 맞지 않는지, 그리고 당신이 그것들을 개선하려 할 때 무엇을 할 수 있을지 깨닫는 데 도움될 것이다.


1. 호기심의 결여

 컴퓨터나 테크놀로지가 어떻게 변화하는지 흥미가 없다면 프로그래머로서 절대 성공하지 못한다.

 

 학습을 위한 기본적인 요건은 당신이 학습하는 분야에 대한 적극적인 관심이다. 테크놀로지에 흥미가 없다면 성공한 프로그래머가 되기 위해 필요한 넓고 깊은 지식을 끊임없이 학습하는 에너지를 갖지 못할 것이다.

 

 테크놀로지의 세계는 흥미 깊은 분야, 서로 연관된 아이디어, 그리고 상상력을 자극하는 가능성이 잠재된 거대한 바다와 같다. 그곳에 몸을 던져 자신이 할 수 있는 모든 것을 발견하고 싶다면 자발적인 동기가 필요하다.

 

 당신의 호기심을 발견하라. 프로그래밍이 정말로 흥미로운 것인지 자기자신에게 질문을 던져보아라. 혹시 그렇지 않다면 자신이 흥미를 갖고 있는 것을 찾으러 가길 바란다. 자신의 시간과 에너지를 아끼자. 하지만 그 대답이 'Yes'라면 지금까지 깨닫지 못한 새로운 것을 찾기 위해 자기자신을 격려하며 그 바다가 거대하다는 사실을 인식하며 좀더 깊은 곳으로 빠져들길 바란다.


2. 자율성과 지혜의 결여

 만일 자기자신의 문제해결능력을 늘리지 않는다면 프로그래머로서 절대 성공하지 못한다.

 

 틀림없이 성공한 개발자가 되기 위해서는 자신의 자기학습능력에 자신을 가져야 한다. 이것은 실제로는 기본적인 라이프스킬이다. 당신이 18세 이상이라면 그 누구도 당신에게 무언가를 가르쳐줘야 할 의무가 없다. 이것이 현실이다. 정보를 찾아 자기자신에게 필요한 것을 계속해서 배워나가는 것은 자신이 하기 나름이다.

 

 프로그래밍 세계에서는 당신이 필요로 하는 모든 정보는 이전까지는 정보의 슈퍼 하이웨이로서 알려진 마법과 같은 장소에 있었다. 이 대규모 도서관에는 구글이라는 거대한 입구가 있다. 필요한 정보를 구글을 통해 손에 넣을 수 있다는 사실을 배우는 것이 테크놀로지를 습득하는 데 있어 필요한 스킬로서 제일 처음 극복해야 할 장애물이다.

 

 훌륭한 구글러가 되는 것에 더해 모든 프로그래밍 언어에는 그 언어가 어떻게 동작하는지를 작성한 명확한 문서가 있다. 그것을 사전처럼 써서 당신이 모르는 단어를 봤을 때 그 단어를 찾아야 한다. 프로그래머로서의 스킬을 익히기 위한 가장 빠르면서도 믿을 만한 방법은 그저 문서를 읽는 것이다. 문자 그대로 읽는 것이다.

 

 자원을 활용하라. 당신이 필요로 하는 모든 답은 그곳에 존재한다는 사실을 알길 바란다. 질문이 있다면 다른 사람에게 묻기 전에 구글에다 먼저 검색해보고 문서를 확인하길바란다. 당신이 정말로 대답을 찾아내지 못했을 때를 위해 다른 사람의 시간을 절약하자.


3. 문제를 직면해도 끈질기게 매달리지 못한다.

 만약 문제를 직면했을 때 쉽게 단념한다면 프로그래머로서 절대 성공하지 못한다.

 

 프로그래밍의 본질은 문제를 해결하는 것이다. 그것은 컴퓨터가 발명된 모든 이유이다. 당신이 프로그램 작업을 시작할 때는 언제든지 수 많은 문제를 만날 것이다. 당신이 문제를 해결한다 해도 대부분의 경우 그 뒤에 또 다른 문제가 따른다. 당신은 앞으로 나갔겠지만 새로운 문제와는 항상 만나게 된다.

 

 이처럼 많은 문제와 직면한다는 것은 정신이 아득해지면서 의욕을 잃게 만들 때도 있다. 모든 일이 그저 '잘 풀릴 것'이라고 생각한다면 문제가 계속되는 상황 속에서 에너지를 지속적으로 갖지 못해 조금씩 문제해결을 위한 원동력 잃고 말 것이다. 말 그대로 당신의 일은 왜 모든 일이 잘 풀리지 않는지 파악하는 것이다.

 

 내 경험으로는 보통 수업마다 학생 한두 명은 다른 학생보다 많은 문제를 만나는 능력을 지닌 듯하다. 그것은 완전히 무작위이며 애매한 문제이다. 나는 그 학생들에게 직면하는 문제가 많을수록 더 깊고 철저하게 배울 수 있다는 점을 가르친다. 그들은 다른 학생보다도 많은 문제를 해결함으로써 보다 자신감을 가질 것이다.

 

 인내심을 가져라. 문제는 프로그래밍에 당연히 따르는 것으로 실제로는 문제라기보다는 도전이다. 앞으로 직면하고 극복할 다양한 도전은 당신에게 보다 깊은 이해와 새로운 과제에 맞설 능력과 그때까지 주어진 과제를 재빠르게 해결할 능력을 가져다 줄 것이다.


4. 문제를 해결해도 성취감을 느끼지 못한다.

 문제를 해결한 후 흥분이나 달성감을 느끼지 못한다면 프로그래머로서 절대 성공하지 못한다.

 

 이는 앞선 3번째 항목과도 연관되는데 문제를 직면해도 간단하게 포기해버리는 까닭은 문제를 해결한다 해도 '좋은 감정'을 느끼지 못하기 때문이다. 버그나 문제를 수정하는 것이 끝이 없는 러닝머신처럼 느껴진다면 당신은 문제해결에 흥분을 느끼지 못하게 된다.

 

 당신은 ㅁ누제를 해결할 때에 도파민을 느낄 필요가 있다. 이것은 비디오 게임의 레벨을 클리어하거나 십자 말풀이나 스도쿠와 같은 과제를 해결했을 때 경험하는 것과 닮았다. 우리들은 도전을 통해 지속하고 그리고 마지막에 이기는 것에서 오는 좋은 감정이 있다는 사실을 안다. 하지만 당신에게 그 감정이 없거나 정말로 아무 것도 느끼지 못한다면 당신은 프로그래밍에 의한 기쁨을 경험하지 못할 것이다. 혹시 프로그래밍이 단조로운 일이고 간단하게 결과를 얻을 수 있다고 생각한다면 당신이 성공한 프로그래머가 될 일은 결코 없을 것이다.

 

 당신의 승리를 축하하라. 당신이 고생하던 문제를 해결했을 때 설령 아무리 작은 문제였다 하더라도 항상 달성한 것을 자랑스레 여기고, 휴식을 취하고, 자신의 일을 축하하자. 다음에 직면할 문제에 대비해서 자신의 기운을 차리자.


5. 학습과 이해를 하는 데 서두른다. 

 당신이 급하게 배워 모든 것을 편하게 금방 통달하는 것을 기대한다면 프로그래머로서 절대 성공하지 못한다.

 

 인간인 우리는 한계를 가지는 생물이다. 우리들의 세계는 점점 빠르게 움직이고 있는데 컴퓨터가 커다란 원인이라 하더라도 우리들은 할 수 있는 한 최선을 다해 빠르게 움직일 뿐이다. 우리들의 두뇌는 일정한 속도로 움직이며 우리들의 과ㅣ거, 신념, 감정, 건강에 따라 우리는 모두 다른 속도로 정보를 습득한다.

 

 기술의 세계는 광대한 바다와 같다. 당신은 바다의 모든 것을 알 수 없으며 무엇도 배우지 않고 있는다면 바다의 일부분에도 닿지 못할 것이다. 혹시 그 사실에 압도된다면 당신은 항상 따라잡기에 급급해 모든 것을 알 수 없다고 느낄 것이다. 자신의 지식을 받아들이고 조금씩 배우지 않는다면 당신은 자신의 위치를 잃고 포기하고 말 것이다.

 

 대신 당신은 배움의 여정을 즐겨야 한다. 당신이 얻는 조금의 지식 혹은 당신이 얻은 새로운 스킬은 당신을 흥분시켜야만 한다. 문제를 해결했을 때와 마찬가지로 혹시 그것이 사소한 일일지라도 당신이 한 걸음 나아갔다는 사실을 자랑으로 여기자.

 

 당신의 진보를 인정하라. 배워야 할 것은 너무나 많고 프로그래밍의 여정은 결코 끝나지 않는다. 하지만 지식은 축적되므로 자신이 아는 것을 자랑으로 여기고 자신이 배운 것이나 노력은 자신의 커리어를 위한 튼튼한 기반이 된다는 사실을 믿길 바란다.


6. 사고하기를 지루해하거나 피곤해한다.

 당신이 사고나 집중에 대해 게으르거나 귀찮아한다면 프로그래머로서 절대 성공하지 못한다.

 

 프로그래밍은 사고활동이다. 인간인 우리들은 생각하는 것에 특화되어 있지만 현실에서는 하루 종일 게으르게 지낸다. 당신이 집중하는 데 익숙하지 않다면 문제에 대해 집중력을 잃지 않기 어려울 것이다.

 

 이 증상으로서 화면을 멍하니 바라보거나 문제를 미루거나 브라우저 탭을 둘러보거나 답을 찾으려 StackOverflow를 필사적으로 뒤지거나 하는 것이 있다. 이것은 당신이 정신적으로 한계에 달했기 때문에 한숨 돌릴 필요가 있다는 신호이다.

 

 프로그래밍을 하고 있는 당신은 지치고, 생각하는 일은 문자 그대로 몸을 움직이는 것과 마찬가지로 물리적인 에너지를 소비하는 일이다. 당신이 그것에 필요한 정신적인 에너지를 활용하는 데 익숙하지 않다면 계속해서 집중하는 일이 어렵게 느껴질지도 모른다. 하지만 그것은 헬스장에 가는 것과 마찬가지로 반복할수록 단련될 것이다.

 

 당신의 정신은 근육이다. 당신의 뇌가 근육과 같다는 사실을 믿어라. 당신이 사고하면 사고할수록 뇌는 보다 좋아지고 보다 효율적으로 움직인다. 당신이 조각을 모아 정신적인 개념을 개발함에 따라 해결책을 발견하는 일은 훨씬 쉬워질 것이다.


7. 자신에 대해 생각하지 않는다.

 자신의 상황을 보지 않고 타인이 자신에 대해 생각해주길 바란다면 프로그래머로서 절대 성공하지 못한다.

 

 당신이 무언가 새로운 것을 배울 때 자신의 지식과 경험은 미숙하다고 여겨 자신만의 의견을 가지지 못할지도 모른다. 그 분야에서 남들보다 앞서거나 행동하거나 발언하다 실패하는 일은 위험하다고 여길 것이다.

 

 우리들은 틀리는 것에 대해 본질적인 두려움을 느낀다. 그 틀리는 행위에 대한 두려움이 당신의 탐구와 호기심을 저해하고 진정한 지식, 경험이나 '실패'에서 오는 지식을 얻지 못한 채 괴롭게 만들 것이다. '일인자'의 의견이나 인기 블로거, 베스트 프랙티스, 혹은 '교과서'의 해답에 의존한다면 실제로 프로그래밍에 필요한 지식은 진정한 의미로는 익힐 수 없다.

 

 무엇이 잘 되는지 혹은 안 되는지 자신만의 의견을 가져야 한다. 당신은 왜 자신의 해결책이 잘 되는지 그 이점은 무엇인지 이해할 필요가 있다. 명백한 것이 아닌 세세하게 들여다봐야 하는 개발을 하자. 당신은 자신의 의견으로 이야기를 나눌 필요가 있으며 그렇게 할 수 있게 된다면 자기자신의 새로운 시점을 가질 수 있을 것이다.

 

 자신에 대해 생각하라. 경험과 비판적 사고를 통해 당신 자신의 사고방식을 기르자. 합리적인 추측을 하고 포지션을 취하고 새로운 정보를 얻었을 때는 의견을 바꾸는 일도 주저하지 말아라.


8. 경직된, 좁은, 무질서한 사고

 당신의 생각이 완고하고 당신의 코드를 정리하기가 어렵다면, 그리고 확장으로 정리하는 데 초점을 맞춘다면 프로그래머로서 절대 성공하지 못한다.

 

 내가 학생에게 때때로 발견하는 두 가지 극단적인 예가 있다. 하나는 경직되고 좁은 사고방식이다. 그 태도는 누군가에게 도움 받기를 거부하며 피드백을 받아도 아무 것도 바꾸려고 하지 않는다. 사물을 한 가지 관점에서만 바라보며 무언가를 제안 받아도 무시한다.

 

 두 번째는 체계화되지 않은 사고이다. 학생은 필요 이상으로 사고를 복잡하게 하여 그들의 코드는 지저분하고 다루기가 힘들다. 그들은 문제를 지나치게 생각하여 10줄이면 충분할 것을 100줄씩 코드를 작성한다.

 

 이 두 가지 사고방식을 조합하면 결과적으로 프로그래밍에 대한 끔찍한 접근법이 생겨난다. 이것은 몇 번이고 수정이나 핵(hack)을 초래하는 강력한 접근법과 같다. 필요한 것은 해결책을 수정하여 그것을 재평가하고 처음의 접근법을 포기하여 재편성하는 능력이다.

 

 다른 가능성을 생각하거다 피드백을 받지 못한다면 능력을 성정시켜 개선하는 일은 어렵다. 상황을 정리하지 않는 것은 다른 명백한 패턴을 떠올리는 일과 멀어진다는 뜻이다. 그리하여 당신의 작업은 전체적으로 질이 떨어질 것이다.

 

 자기분석. 당신은 한 발 물러나서 당신이 사고를 어떤 식으로 하는지 바라볼 필요가 있다. 어떻게 하면 이것을 보다 좋게 할 수 있을까? 당신의 인생을 편하게 하기 위해 할 수 있는 일은 없을까? 당신을 도와주는 것을 놓치고 있지는 않은가?


9. 여러 정답 사이의 '좋고' '나쁨'의 연속성을 깨닫지 못한 채 '올바른' 정답만을 바란다. 

 프로그래밍의 최종 목표가 올바른 해결책을 찾는 일이라고 생각한다면 프로그래머로서 절대 성공하지 못한다.

 

 스킬이나 프로그래밍을 배우기 시작할 때 학생은 종종 그들이 한 일이 '올바른지' 아닌지 알고 싶어한다. 그 대답은 '경우에 따른다'이다.

 

 컴퓨터 사이언스는 트레이드 오프(trade-off)를 평가하는 과학이다.

 

 다양한 상황 속에서 그 선택이 올바른지 아닌지는 모든 상황과 목적에 따라 다르다. 당신이 프로그래밍을 올바른 대답인지 틀린 대답인지 분별해내야 하는 시험이라 생각한다면 큰 그림을 보지 못한 채 당신의 창조성을 버리고 말 것이다. 상황에 대해 정당성을 부여할 수 있다면 어떤 대답이든 '올바른' 것이다.

 

 프로그래밍은 시나 단편소설 (혹은 프로그램이 큰 경우 잠재적으로 소설)을 적는 일과 닮았다. 당신의 코드는 미학과 아름다움을 갖추고 있고 때로는 그것은 당신과 다른 프로그래머에 의해서만 인식된다. 당신이 그 해결책을 어떻게 사고하여 선택했는지는 '올바른 방법' 혹은 '틀린 방법'보다 중요하다. 예술가의 마음을 갖는 것은 단 하나의 방법만이 있다고 생각하는 것이 아니라 여러 개의 선택지나 가능성을 존재할 수 있게 한다. 그것이 프로그래밍의 아름다움이며 문제를 해결하기 위한 방법은 다양하다. 그리고 여러 선택지를 고려하는 것은 어떤 선택이 상황에 가장 알맞는지 선택하는 감각을 길러줄 것이다.

 

 창조적으로 생각하라. 문제를 해결하는 데는 많은 방법이 있다는 사실을 인식하고 경험과 아웃풋을 통해 어떤 해결책이 다른 해결책보다 나은지 느끼는 미묘한 감각을 시간을 들여 키워라. 큰 그림을 보면서 다양한 가능성을 고려하고 직감을 믿는 일은 보다 만족스러운 해결책을 내놓는 일로 이어질 것이다.


10. 사소한 데 주의를 기울이지 않는다.

 세부 사항을 얼버무리며 사소한 일을 놓친다면 프로그래머로서 절대 성공하지 못한다.

 

 컴퓨터는 정확한 기계이다. 프로그래밍에서는 컴퓨터가 기대한 대로 필요한 커맨드를 정확하게 넘겨줘야 한다. 그렇지 않으면 아무 작동도 하지 않을 것이다. 컴퓨터에게는 어느 정도는 작동한다는 중간 지점은 없다. 잘 돌아가는지 아닌지밖에 없다.

 

 그것은 당신이 프로그래밍을 할 때 세부 사항에 주목해야 한다는 뜻이다. 모든 공간, 대괄호, 혹은 세미콜론의 수 등이다. 엉뚱한 데다 입력하면 아무 것도 기능하지 않게 된다. 컴퓨터가 에러 메시지를 뱉어낼 때는 그 메시지를 보고 그것이 무엇을 전달하는지를 정확하게 이해할 피룡가 있다. 그리고 현실에서는 그처럼 세부사항을 놓칠 경우 문자 그대로 잘못 입력한 결과 초래된 문제를 잡는 데 몇 시간이고 허비하게 될 것이다.

 

 컴퓨터가 말하듯 악마는 세부 사항에 있다. 그리고 그것은 프로그래밍에도 적용된다.

 

 세부 사항에 주의를 기울여라. 세부사항은 중요하며 당신은 그것을 받아들여야 한다. 한 번 코드를 작성하면 코드의 이상한 부분을 훑어보자. 당신은 자신의 코드를 체계화하여 문제를 빠르게 특정하는 데 도움을 주는 도구들을 활용해야 한다.


보너스: 비즈니스 지향적인 태도

 이것은 내가 깨달은 부산물이다. 특히 비즈니스 지향적인 학생은 과정보다도 결과에 초점을 맞추는 경우가 많다. 그들은 자신의 비즈니스 아이디어를 실현하는 '실용적인 어플'을 손에 넣어 '최초로 시장에 참여'하기를 바라고 그들은 학습곡선을 비즈니스를 성공하기 위한 목표의 걸림돌이라고 여긴다.

 

 프로그래머로서 성장하는 것을 도와주는 일이 어려웠던 학생을 돌이켜 보면 그들은 테크놀로지를 진정으로 이해하기 위한 과정에 초조함을 느꼈다. 그들은 기술을 탐구하고 즐기기 위함이 아니라 목표를 달성하기 위한 수단으로 치부하는 경향이 있다.

 

 이 이야기의 연장으로서 비즈니스에 흥미가 있어 학습에 어려움을 겪었던 학생도 있었다. 그들은 자신이 갖지 못한 스킬을 프리랜서인 고객에게 부탁했다. 바로 써먹을 수 있는 리소스나 템플릿을 찾는 데 분투하거나 작업을 아웃소싱하거나 했으리라. 그들은 정말로 프로그래밍을 못하긴 했지만 사람들에게 돈을 받아낼 수 있는 훌륭한 프로그램을 만들어냈다.

 

 그 때문에 내가 덧붙이고 싶은 말은 비즈니스나 세일즈, 네트워킹, 비즈니스 개발에 뛰어난 학생은 프로그래밍 스킬을 습특하기 위해 다른 사람보다 고생할지도 모른다는 것이다. 경제적 기회를 창출하여 사람들에게 해결책을 제시하고 싶다는 그들의 자연스러운 바람은 프로그래밍의 세부 사항을 익히는 지난한 일에 초조함을 느끼게 할 것이다.


결론

 프로그래밍은 습득이 어려운 스킬이지만 대부분의 사람이 습득할 수 있다는 것은 확실하다. 위에 기술한 목록에는 장애물이 되는 사고방식이나 태도가 포함되어 있지만 대부분의 사람은 그것들을 극복하여 프로그래밍 분야에서 능력을 키울 수 있다. 

 

 당신이 프로그램을 배우는 것에 흥미가 있다면 여정을 시작하길 권한다. 위의 목록을 염두에 두고 당신을 바로 앞으로 나아가게 해주는 온라인으로 이용 가능한 리소스를 찾길 바란다. 분명 후회하지 않을 것이다.

728x90
반응형

댓글