왜 당신은 프로그래밍 기술력을 높이고자 노력하지 않는가?

김재우·2021년 8월 4일
1
post-thumbnail

시작하기 앞서

필자는 개발자로 일하고 있는지 벌써 20년이 넘어가고 있습니다. 또한, 최근에는 비전공자를 대상으로 하는 IT개발자 양성 강사로도 활동하고 있습니다. 다양한 사람들을 개발자로 양성하는 교육자로서 프로그래밍을 가르치는 경험에서 프로그래밍 학습에 대한 마음가짐에 대해서 생각할 수 있기에 몇자 적어보려고 합니다.

정리

초초해 하지 말고, 차분하면서 착실하게 꾸준히 학습하여 스킬을 길러 봅시다.
아무리 두뇌가 뛰어나다고해도, 전혀 학습하지 않은 상태에서 1개월 정도 공부한다고 해서 실무 수준의 개발자가 될 수는 없습니다.

단기 성과만에 눈을 돌리지 말고 장기적인 관점을 가지고 하십시오.
펜실베니아 대학 심리학 교수인 안젤라 더크워스의 연구결과를 정리한, "그릿 GRIT"책에 따르면 무엇인가를 이루기 위해서는 재능보다 해낸다는 힘이 더 중요합니다.(읽어보길 권장함)
즉, 자신이 노력하는 것을 포기하는 이유를 재능 탓하지 말라는 것입니다. 원래 재능의 차이는 약 2~3배정도라고 할까요? 독자가 인류에서 가능 재능이 없는 상태에서 구글의 최고수준의 개발자를 목표로 하는 것이 아니라면, 남들이 하는 노력하는 만큼만 해도 중급 개발자가 될 것입니다.
단, 잘못된 노력을 하면 의미도 없을 수 있기 때문에 프로그래밍 학습에 대한 마음가짐을 다시 다잡고 시작하고 싶은 사람은 이 글을 읽어보길 권장하고 싶습니다.

왜 이 글을 쓰게 되었을까?

초보자 또는 비전공자 대부분은 "포트폴리오를 빨리 완성시키고 싶다", "빨리 취업하고 싶다"라는 초조함에서 본질적인 이해학습이 가능하지 않다고 느꼈기 때문입니다.
지금 생각해 보면, 지금까지의 학교교육에서도 주변사람들을 보면, 그런 사람이 많다고 느껴집니다. 숙제의 답을 작성하려는 것에 목적이 되어서는 안됩니다. 유사한 문제와 처음 보는 문제가 나왔을 때에도 자신의 지식을 활용하여 풀 수 있도록 하는 것입니다.

초초함과 답답함을 느끼는 그 기분도 잘 압니다. 초보자나 비전공자는 여러가지 기억할 수 있는 능력은 있지만, 독자의 몸에 익숙해지고 남아 있을 때까지 다만 시간이 걸려 버리기 때문입니다.

그러나, 시간이 걸리는 것은 인간의 뇌의 숙명입니다. 일찌감치 포기하고 꾸준히 학습 훈련을 합시다.

참고, 필자는 평소 Python을 주로 사용하고 있고 언어로는 Java, Swift, JavaScript, TypeScript, Python을 사용하고 있지만, 다른 언어들도 같은 거라고 생각합니다.

이런 일에는 조심합시다.

구체적으로는 어떤 일을 조심해야할지에 대해서 설명합니다. 크게 하지 말라고 하는 안티패턴과 알면 좋은 팁 2종류가 있습니다.

안티패턴

머리가 나쁘다라고 하지 말자

자신이 머리가 나빠(재능이 없는) 할 수 없는 것이라고 생각하는 것은 아무런 도움이 안되니, 그만 합시다. 요즘은 "할 수 있다"라는 감각을 갖아야 한다는 것입니다.
최근 사람들에게는 자기긍정이라는 것을 통해 할 수 있다라는 감각을 실제로 학교 성적을 올리 수 있는지에 대한 실험들을 통해 밝혀지고 있습니다.
즉, 자신의 마음에 개입하는 것은 학습 효과를 높이는 중요한 요소가 되고 있다는 것입니다.
주의해야할 점은 어찌되었던 간에 자신을 기술 수 있다는 것은 아닙니다. 자신이 할 수 있는 인간이라고 믿어 버리면, 실패를 극도로 두려워 도전하지 않을 위험성이 있습니다. 이에 대한 어려운 문제에 도전하고 실패했을 때 가능한 인간이어야 할 자신을 부정하는 것이기 때문입니다.

스스로 하지 않는다

쉽게 단념한다는 것을 말합니다.
며칠동안 같은 오류로 고민하면서 전혀 진도가 못나가는 것도 문제이지만, 제대로 조사하지 않고 답을 가르쳐 달라는 것이 문제입니다.

스스로 생각없이 답부터 알려고 한다면, 자신의 생각이 어디에서 잘못되었는지를 이해하지도 못하고 다음에 비슷한 문제에 직면했을 때 스스로 해결할 수 없는 것입니다.

조금 괴롭지 않으면 뇌는 학습해주지 않는 구조로 되어 있기 때문에 조금은 스스로가 가설을 세우는 습관을 들입시다.

의미를 이해하지 않고 복사만 한다

다앙햔 사람들에게 맞춰주는 건 쉽지만, 비슷한 내용알 찾아 소스코드를 그대로 복사해서 붙여넣기를 하는 것입니다. 물론 복사하는 행위자체가 나쁜 것은 아닙니다. 효율적으로 작업할 수 있고 실수가 줄일 수 있습니다.

문제는 왜 그 소스코드에서 실행되고 있는지 이해하지 않고 사용하는 것입니다.

그리고 "이런 느낌으로 코딩하려면 어떻게 해야 합니까?"라는 질문도 그만 둡시다. 배우고 실행해본 소스코드가 손에 들어올 수 있지만, 독자의 뇌는 "복사해서 넣은 것"이라는 것외에는 아무것도 남지 않습니다.
어떻게 보면 심플한 것으로 이런 일은 없도록 합시다.

Tips

이제 "이런 것도 의식하고 있으면 좋다"라는 내용입니다.

제대로 보기

글을 읽지 않는 사람이 비교적 많다고 생각이 됩니다. 일반적으로 의무 교육을 마친 사람이라면 글을 읽을 수 없는 것은 없는 것으로 보고 그대로 읽도록 합니다.
"아니, 그럼 바보취급하는건가?"라고 생각하시는 독자는 아래부분에 내용을 읽고 자신에게 물어보십시오.

  • 오류문장
  • 공식문서
  • 인터넷기사

특히 오류문장은 제대로 읽읍시다. 대부부의 경우가 오류 문장에 대한 응답이나 조언에 쓰고 있습니다.
물론 영어가 약한 독자는 번역기를 사용하면 됩니다. 참고로 "제대로 읽기"라는 작성한 사람의 의도대로 문장의 의미를 이해하는 것입니다.

검증

초보자나 비전공자 정도는 검증하지 않는다라는 생각이 있습니다.
검증한다는 것은 좀 더 구체적으로 이야기하면, 어디까지나 정확하게 어디에서 잘못되었는지 확인하는 것입니다. 올바른 범위를 설정하면 잘못된 부분(오류 원인)을 반드시 확인할 수 있습니다.
이를 위해 필요한 것은 "처리 흐름을 이해하는 것"과 "디버깅"입니다.

  • 처리 흐름을 이해하는 것
    - 어떤 순서로 처리가 실행되고 있는지 이해하기
    - 입력값이 무엇이고 출력값이 무엇인지 이해하기
  • 디버깅
    - 이 과정까지는 문제없을 것이라는 가설
    - 위의 곳에서 처리를 일시중지 예상대로 데이터가 처리되고 있는지 확인하기
    - 예상대로라면 그 앞 어딘가에서 기대하지 못한 어딘가의 오류가 있다.

깔끔하게

다소 시간이 걸리더라고 정성그럽게 합시다. 왜 깔끔하게 할 필요가 있느냐면, 그 편이 결과적으로 시간을 절약할 수 있기 때문입니다.
그렇다면 다음 사항들을 주의합시다.

들여쓰기

들여쓰기가 잘못되어 있어도 언어가 올바르게 작동합니다. 다만 사람이 소스코드를 볼때 이해하는데 시간이 걸리기 때문에 들여쓰기는 특별한 사유가 없는 한 꼭 사용합시다.

오타 조심

오타에 대한 문제는 2가지가 있습니다.

  • 버그가 발생하게 된다.
  • 경쟁사와 비교되어 수준이 낮다고 생각되어 한번에 신뢰를 잃는다.

카카오톡과 같은 채팅상에서 오타정도는 문제가 없지만, 많은 사람들에게 보이는 문장은 하나도 없어야한다는 마음가짐으로 코딩을 합시다.

프로그래밍도 좁은 범위내에서 일시적으로 사용되는 변수명등이라면 타이핑하면서도 최소로 해야 합니다. 그러나, 테이블명이나 전역변수명등은 영향범위가 넓기 때문에 수정에 따른 비용이 증가되므로 이는 주의해서 작성해야 합니다.

알맞은 이름을 붙이기

이름만 봐도 그것이 무엇을 뜻하는지 상상해서 매우 알기 쉽게 구성해야 합니다.
초보자나 비전공자는 다음 사항에는 주의를 합시다.

  • 배열 데이터가 들어있는 경우에는 복수형으로
  • data등 추상적인 이름은 사용하지 말자
  • 무엇인가를 실행하는 메소드라면 동사를 추가하자
  • boolean형을 리턴해주는 메소드라면 "is"로 시작하거나 하자.

이런 내용에 대해 잘 알려진 책으로 "The Art of Readable Code"을 추천합니다. 개발자라면 한번은 읽어봐야 합니다. 번역서가 출간한걸로 기억하는데 이름이 기억나지 않네요.

한번에 하려고하지않기

조금씩 올바르게 작동하는지 확인하면서 구현해 갑시다.

복사하기 & 붙여넣기해서 작업하는 경우, 원본코드가 잘못되어 있는 부분이 있을 수 있어서 그것들을 하나하나 검증하는 것은 초보자나 비전공자에게는 힘든 일입니다. 그렇다면 아래와 같이 해보길 추천합니다.

  • 한국어로 처리단계를 내보내기
  • 첫번째 단계를 코딩하기 (모르면 조사해서 해결하기)
  • 1단계가 작성되면 실제로 실행되는지 확안하기
  • 다음 단계를 코딩하기 (이후 반복)

기초 학습을 마스터하기

기본적인 학습지식이 없으면 전반적인 작업 속도가 느려지고 학습속도도 떨어집니다.
누군가에게 가르쳐달라고 해도, 기초 지식이 없으면 할 수 없으며, 그만큼 더 많은 시간이 소요되기 때문에 조금이라도 개선해 나갈 수 있도록 합시다.

좀더 구체적인 내용을 써보면 아래와 같습니다.

키 이름

필자가 비전공자나 초보자에게 프로그래밍을 가르치면서 충격적이었던 사실은 탭, 콜론이란 단어를 이해못하는 학생도 있었다는 사실입니다. 그렇다고 L키 옆에 콜론키가 있다라고 설명할 필요까지는 없습니다.
다만 기본적인 이름은 기억해 둡시다.

  • tab (탭)
  • ":" (콜론)
  • ";" (세미콜론)
  • "_" (밑줄)
  • "'" (작은 따옴표)
  • "`" (백따옴표)
타이핑 속도

개발자라고 해서 항상 타이핑하는 것은 아닙니다. 다만, 어느정도 정확하고 빠르게 타이핑하는 것은 좋습니다. 채팅으로 교환할 수 있고 훈련만 하면 누구나 할 수 있습니다.

가급적 단축키는 사용

단축키 따위는 그다지 시간이 절약되지 않는다라고 생각할지 모르지만 단축키를 사용시 작업부담이 적어지도 귀찮은 작업을 줄여주기 때문에 일에 대한 집중이 높아집니다.

편집기의 유용한 기능 사용

VSCode등의 편집기에는 편리한 기능이 다수 포함되어 있습니다. 이런 유용한 기능을 활용하면 정확성등이 향상되고 작업량이 다소 줄어들어 부담감이 줄어듭니다.

용어의 이해

개발관련 용어는 조금씩 기억해 둡니삳. 용어의 의미를 알아야할 문서를 읽어도 이해하지 못하고 해결과제를 해결하기 어렵게 되었습니다.

반드시 이해할 수 있게 될때까지 꾸준이 학습해 나갑니다.

질문 잘하기

잘하는 질문과 못하는 질문으로 나뉩니다.
질문의 좋고 나쁨은 문제 내용을 어떻게 정확하게 그리고 얼마나 빨리 상대방에게 전달할 수 있을지에 대한 것입니다.

경력자는 질문을 제대로 할 수 있기 때문에 구글만 잘 검색해도 혼자서 과제를 해결할 수 있습니다. 또한 실제로 질문없이도 질문을 생각하는 것만으로 해결해 버리는 경우도 있습니다.

질문력을 높이려면

해결하고 싶은 것을 명확하게하기

우선 무엇이 목적인지 명확하게 합시다. "어떤 이런 느낌으로 하고 싶다"라고는 것도 안됩니다. 가능한 구체화하여 이미지화합니다.
어떤 구현 상세 정보도 최종 목표 이미지를 구체화해 둡니다.

무엇을 모르는지 명확하게 하기

초보자나 비전공자 중 질문이 서툰사람이 여기에서 길을 잘 못찾습니다.
"어쩐지 잘 모르겠지만..."라는 말은 하지 않도록 합시다.

여기가 잘되지 않으면 이전 달계로 돌아가서 "무엇을 실현하고 싶은거지?"라고 되 물어 봅시다. 자신이 달성하고자 하는 것으로 이를 위해 부족한 것이 밝혀진다면 성공한 것입니다.

알기 쉽게 글쓰기

전하고 싶은 것을 명확하게 하고 알기 쉽게 쓰지 않으면 전달되지 않습니다.

상대방에게 읽기 쉬운 문장을 쓰는 것은 최소한의 매너입니다. 읽기 어려운 문장을 쓰고 무시해도 어쩔수 없습니다. (무시하는 당사자가 문제임)

글쓴 후에는 독자입장에서 읽기 쉬운지 확인하는 습관을 들입시다.

우선 다음 규칙을 지키면 크게 문제는 없습니다.

  • 부탁당 한개
  • 부탁에 대한 설명까지
  • 보충 내용으로 마지막 장식

운동

학습과 관련이 없다고 생각하는 독자라면 생각을 고쳐봅시다.
운동의 이점은 여러가지가 있지만 그중 대표적인 3가지가 있습니다.

  • 뇌의 가소성 증가 (저장공간 확보)
  • 정신력 개선 (스트레스 해소)
  • 집중력 높여줌

효율적으로 학습하고자 한다면 운동을 안할 이유는 없습니다. 운동습관이 없는 독자라면 우선 걷기라도 시작해보면 어떨까요? (나름 효고가 있다)

마치며

여러가지 내용을 썼지만, 아무래도 하루아침에 습득되는 것은 아닙니다. 지금까지 축적된 힘에 대해서는 그 이상으로 차이가 발생할 수 있습니다.
학습하는데 기초능력이 부족한 사람은 꼭 학습강화가 필요하기 때문에 그 만큼 시간이 걸리는 것은 어쩔수 없습니다.

하지만, 프로그래밍을 어느정도 학습해 나가면 대학 수능시험에 비해 훨씬 난이도가 낮기 때문에 도전하고 싶은 마음이 있는지 있다면 쉽게 포기하지 않도록 합시다.

또한, 필자도 매일 개선하고 반성하면서 업무를 해나가고 있으며 일단 몸이 몇개라도 끝이 없습니다.

지금까지의 자신을 저주하면서 학습을 포기하는 것은 자유이지만, 약간의 의식만 바꾸면 그 근처에 있는 중급자들을 여유있게 추월할 것이기 때문에 꾸준히 해 나갑시다.

즉, 무엇이든간에 포기하지 말라는 것은 아닙니다.
이런 고생까지 하면서 개발자가 되고 싶지 않다라고생각한다면 포기하는 것을 추천하고 아무래도 시장가치가 높은 개발자가 되고 싶다면 약간의 고생은 있어서 잘 뽑아내야 합니다.

profile
Software Developer & Writer, Speaker

2개의 댓글

comment-user-thumbnail
2021년 8월 4일

감사합니다!

답글 달기
comment-user-thumbnail
2021년 12월 23일

감사합니다.

답글 달기