brunch

You can make anything
by writing

C.S.Lewis

by 최재운 Sep 12. 2023

코딩을 잘하기 위해 필요한 마인드셋

코딩스킬보다 더 중요한 것

학부 시절, '산업정보화프로그래밍'이라는 전공필수 수업을 들었다. 당시 코딩이 정말 싫어서 관련 수업을 피해 다녔지만 전공필수라고 하니 어떡하겠는가. 눈물을 머금고 수업을 듣는데, 이론은 그래도 공부하면 되니 따라가겠는데 도통 실습이 하기 싫었다. 특히나 실습 과제는 며칠이 소요되는 골치 아픈 것들이었고, 과제를 하기 위해 코딩을 시작하면 등장하는 버그(bug)들이 미치게 만들었다. 결국 정석적인 방법보다 편법을 잘 찾고 잔머리지수 JQ가 그때도 발달했기에, 직접 할 생각을 하지 않고 주변에 코딩 잘하는 친구를 찾기 시작한다. 아웃소싱(outsourcing) 개념을 나도 모르게 도입한 것이다. 아웃소싱의 대가는 삼겹살 집에서 소삼을 대접하는 것.


아웃소싱 하던 기숙사 현장(?)

학기 중에 나오던 과제는 삼겹살로 어찌어찌 넘겼지만, 기말 과제가 정말 좌절하게 만들었다. 그동안 과제를 남의 손을 빌려했기에 실습 실력이 쌓여있지 않은 상황에서 등장한 대형 기말 과제는 마치 큰 벽과도 같았다. 결국 다시 한번 아웃소싱을 하게 되었다. 서버를 구축하고, DB를 만들어 백엔드와 연동되는 웹페이지를 만드는 것이 과제였는데, 지금 생각해 보면 뭐 그리 어려웠나 생각이 들지만 당시에는 꽤나 어려운 난관으로 느껴졌다. 친구가 기숙사 방에 와서 금요일부터 월요일 새벽까지 거의 잠을 자지 못하며 과제를 도와주었다. 나는 사진에서 커피를 들고 있는 아저씨처럼 옆 침대에서 힘내라는 응원과 함께, 때에 맞춰 배달 음식을 제공해 주고, 커피와 고카페인 스포츠음료를 무한으로 공급해 줬던 기억이 아직 생생하다. 3박 4일간의 철야 작업을 거쳐 기말 과제는 완성이 되었고, 무사히 B-라는 학점을 받으며 나름 선방했다는 자축 파티를 학교 근처 삼겹살 집에서 하며 수업은 마무리되었다. 


지금 생각해 보면 편법이 아닌 불법에 가까운 행위였고 다시는 해서는 안 될 부정행위였음에 명백하다. 다시금 반성을 해보면서, 부정행위에 대한 벌을 받은 건지 당시 아웃소싱의 업보는 계속해서 따라오게 된다. 피하고 싶었던 코딩은 대학원 과정에서도 이어졌고, 회사에 가서도 이어졌다. 결국 포기하면 편하다는 진리에 맞춰 순응하며 살다 보니 그럭저럭 적응을 하며 여기까지 오게 되었다.




그럼 아웃소싱을 도왔던 친구와 나의 가장 큰 차이는 무엇이었을까? 

바로 인내심이다.


코드는 처음부터 완벽하게 작동하지 않는다. 처음 짠 코드가 동작을 했다면 그거 나름대로 문제가 있는 것이다. 코딩이란 것은 처음 코드를 짠 후 버그를 찾아 수정하고 코드 구성을 계속해서 수정해서 구현하는 것이 필수이다. 이를 위해 가장 필요한 능력이 바로 인내심이다.


버그만 만나면 어떻게 개선해야 할지 몰라 짜증만 내던 나와 달리 친구는 버그를 만나도 어떻게 고쳐야 할까를 먼저 고민하는 타입이었다. 인내심을 가지고 작은 실수나 놓친 부분이 없는지 코드를 정확하게 읽어나갔고, 문제가 발견되면 다양한 해결책이나 접근 방식을 고려하며 효과적인 코드를 완성해 나갔다. 


학부 시절, 프로그래밍 수업을 듣고 C언어 및 JAVA를 다룰 줄 알고 있었음에도 과제를 완성하는데 실패했던 나와 과제를 이어받아 완성을 시킨 친구의 차이는 프로그래밍 언어를 다루는 스킬셋의 차이가 아니라 바로 마인드셋의 차이였다.


학부시절 일화를 양육에 대입해 보자. 아이를 양육하는 부모가 코딩부터 가르치게 되면 아이는 그 과정에서 나타나는 다양한 도전 과제와 어려움을 이겨내지 못하고 코딩이라고 하면 피해 다니고 싫어하는 아이로 커갈 수도 있다. 인공지능 시대에 맞는 인재로 키우려다 인공지능은 무서워 도망치게 되는 아이가 될 수도 있다는 말이다. 


자, 그럼 프로그래밍을 배우기 위해 필요한 가장 중요한 마인드셋은 무엇일까?

앞서 언급한 인내심이 될 수 있겠지만, 좀 더 고급진 표현이자 요즘 유행하는 말로 표현해 보자.


바로 회복탄력성(resilience)이다.



회복탄력성은 어려움이나 실패에 직면했을 때, 이를 극복하고 성장하는 능력을 의미하는 용어로 최근 육아와 양육 분야에서 많은 주목을 받고 있는 능력이다. 시중에는 회복탄력성과 관련된 다양한 서적이 출시되어 있고 일부 책들은 베스트셀러에 등극하며 그 인기를 과시하고 있다. 현대 사회를 살아가는데 중요한 능력 중 하나로 인식되고 있는 회복탄력성은 코딩과 프로그래밍 환경에서도 매우 중요하다. 


앞서 살펴본 바와 같이 프로그래밍에서는 버그나 예기치 않은 문제가 계속 발생한다. 회복탄력성이 높은 개발자라면 이런 문제에 좌절하지 않고 해결책을 찾기 위해 노력하게 된다. 또한 프로그래밍이라는 일은 프로젝트로 연결이 되는데, 대부분의 프로젝트는 예상치 못한 문제나 변경 사항이 늘 발생하게 된다. 회사에서도 이런 프로젝트 변화가 있을 때마다 불평을 쏟아내는 개발자가 있는 반면에 회복탄력성이 우수한 개발자는 이러한 도전과 변화를 긍정적으로 받아들여 프로젝트를 성공적으로 이끌기 위해 노력하는 모습을 볼 수 있다. 둘 중 누가 회사에서 성공할지는 자명하지 않은가?


또한, 코딩과 프로그래밍 영역은 기술이 빠르게 변화한다. 이에 맞춰 지속적인 학습을 필요로 한다. 새로운 도구나 프로그래밍 언어, IT 기술에 대한 학습 과정 역시 어려운 과정을 수반하게 된다. 이를 극복하고 필요한 기술과 지식을 습득하기 위해서도 회복탄력성은 필요하다. 


결론적으로, 회복탄력성은 코딩 및 소프트웨어 개발 환경에서 발생하는 다양한 어려움을 극복하는데 필요한 필수 능력이다. 이 능력이 갖춰져 있는 개발자는 장기적으로 봤을 때 더 효과적이고 생산적인 프로그래밍 업무를 할 수 있게 된다. 그러면 코딩에 도움이 되는 회복탄력성을 키우는 방법들로는 무엇이 있을까?




회복탄력성을 키우기 위해 제일 중요한 것은 실패를 학습의 기회로 받아들이는 것이다. 실패는 불가피하다. 우리가 살아가다 보면 크고 작은 실패를 할 수밖에 없다. 그것을 부정적인 경험으로만 보지 않고, 학습의 기회로 받아들일 수 있도록 해야 한다. 


아이를 양육하다 보면 아이들이 크고 작은 실패에 좌절하는 모습을 자주 보게 된다. 우리 아이 역시 좋아하는 블록 놀이를 하다가 찡찡거리거나 울음을 터트리는 경우가 종종 있다. 자기가 원하는 데로 블록이 쌓아지지 않고 블록이 넘어지는 경우가 바로 그것이다. 때로는 원하는 블록이 보이지 않을 때 짜증을 부리기도 하고, 본인이 생각한 작품은 거대한데 실제로 만들기 어려울 때 짜증을 내기도 한다. 마치 코딩이 잘 되지 않을 때 짜증을 부리는 프로세스와 흡사하다. 


블록이 잘 되면 좌측처럼 신나 하지만, 잘 되지 않으면 우측의 표정으로 짜증을 낸다. (블록을 하며 짜증내는 사진이 없어 짜증 표정으로 대체. 두 사진 모두 작년 이맘 때 사진)


블록을 쌓는 일이 코딩을 배우는 데에도, 문제 해결 능력을 키우는 데에도 좋다는 것을 이전 글(32개월 아이, 코딩 공부 첫 단추는?)에서 이야기 한 바 있다. 그럼, 블록놀이를 하다가 좌절하고 짜증을 내는 아이의 회복탄력성을 향상할 방법은 무엇이 있을까?


일반적으로 아이의 회복탄력성 형성에는 부모의 격려와 지지, 공감이 중요한 역할을 한다고 알려져 있다. 이를 응용해 보면 '얼른 해!', '이것도 못하니?', '그래, 안될 줄 알았어'와 같은 부정의 표현보다는 아이의 속상함에 먼저 공감해 줄 필요가 있다. 블록을 쌓고 싶은데 무너져서 속상했음을 공감해 주고 조금만 더 힘을 내보자는 격려의 메시지가 중요하다. 또한, 원하는 결과물이 나오지 않았더라도 결과보다 과정에 의미가 있음을 지속적으로 알려주는 것 역시 회복탄력성 형성에 큰 도움이 될 수 있다.


정서적 지원을 통해 아이의 회복탄력성 형성에 도움을 준다면 이후 도와줄 것은 목표 설정이다. 단기적, 중기적, 장기적 목표를 설정하고 단계적으로 나아가는 과정에서 방향성을 잃지 않도록 잡아주는 것이 부모의 역할이고, 중간중간 맞이하는 실패에 있어서도 하나의 과정으로 받아들일 수 있도록 지속적인 공감과 격려가 필요하다. 이렇게 성장한 아이는 인내심을 가질 수 있고 또한 유연성 역시 갖춰서 새로운 상황이나 도전에 대해 열린 마음으로 접근할 수 있는 아이로 성장할 수 있다. 


그렇다고 코딩에 필요한 스킬셋을 등한시하자는 것은 아니다. 기초적인 스킬셋 없이는 기본적인 코딩 작업조차 수행하기 어렵다. 따라서, 전문가로 성장하기 위해서는 필요한 스킬셋을 지속적으로 키워나가야 한다. 다만, 그 과정에서 발생하는 여러 도전과 어려움을 극복하는 데 있어 마인드셋이 중요한 역할을 한다는 것이다. 회복탄력성, 꾸준한 학습의 태도, 오픈 마인드, 자기 주도적 학습, 문제 해결 능력 등이 앞서 살펴본 코딩을 위한 마인드셋이다. 코딩을 배우는 초기 단계에서는 구체적인 스킬 셋이 중요할 수 있지만, 장기적으로 성장하고, 복잡한 문제를 해결하고, 지속 학습을 위해서는 마인드셋의 중요성이 더 커질 수 있다. 


결론적으로, 스킬셋과 마인드셋은 인공지능 시대를 대비하기 위한 코딩 실력 함양을 위해 모두 중요하다. 막연히 아이를 코딩 스킬만 배우게 하는데 집중하지 말고, 마인드셋을 갖출 수 있도록, 특히 회복탄력성을 키울 수 있도록 가정에서 지속적인 공감과 격려, 응원이 필요하다. 

이전 19화 AI시대 더 중요해지는 문해력
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari