유튜브에서 '개발자의 품격'라는 채널을 우연히 보다가, 채널 운영자이신 고승원님의 저서인 <디자인 씽킹을 넘어 프로그램 씽킹으로> 라는 책을 알게 되었다.
비전공자 + 문과 출신으로 웹 개발, 프로그래밍 세계에 이제 막 발 딛은 나로서는 컴퓨터적 사고(?)에 대한 익숙함이 부족하다고 항상 느껴왔다. 때문에 어떻게 하면 컴퓨터를 이해하고 논리적 사고를 할 수 있을까 하는 고민이 많았다. '디자인 씽킹을 넘어 픞로그래밍 씽킹으로'는 그런 나에게 한줄기 빛처럼 느껴졌다.
이 책을 다 읽고나서 그동안 내가 코딩을 하면서 느꼈던 답답함과 시행착오들이 스쳐지나갔다. 동시에 왜 그런 고생을 하게되었는지, 어떤식으로 사고를 해야하고 개발 습관을 들여아 하는지에 대해 알게되면서 이제 어떻게 더 좋은 개발자로 성장할 수 있는지 알게 된 것 같았다.
"누구나 '코딩'을 할 수 있지만
모두가 '프로그래머'가 되지는 않는다"
개발자로 전향하기 전에 나를 포함해서 많은 비전공자 출신 오해하는 것이 코딩 === 프로그래밍 일 것이다. 개발 언어를 배우고 코딩을 배우면 프로그램을 뚝딱뚝딱 만들어 내는 프로그래머가 될 것 같았다. 하나의 서비스를 만들어 내는 일은 단순히 코딩을 할 줄 아는 것이 아니라 서비스 전체를 바라볼 수 있어야 한다는 것을 직접 일을 해보면서 절실히 느꼈다. 단순히 코드를 짜는 것에만 만족한다면 완성도 높은 프로젝트를 만들어 내는 것은 거의 불가능에 가까울 것이다.
자기가 짠 코드에 자신을 갖을 수 있어야 한다는 말은 예전에도 많이 들었다.
그런 코드를 짜기 위해 선행되어야하는 것은 프로그램 전체를 이해할 수 있어야하고, 프로그램을 잘 이해하고 오류를 줄여나가려면 프로그래밍적 사고가 꼭 필요하다고 느꼈다.
<디자인 씽킹을 넘어 프로그램 씽킹으로> 는 프로그래밍에 대한 얘기를 하고있지만, 책 내에서 코드를 찾아보기 어렵다. 개발에 대해 모르는 사람이라도 쉽게 읽고 이해할 수 있도록 잘 설명되어있다.
로직, 알고리즘을 고민할때 머리가 지끈지끈 했던 경험이 많았다. 이 책을 읽으면서 프로그래밍적 접근, 사고하는 방법을 알게되니 어떤식으로 문제를 바라보고 생각해야하는지 머릿속이 정리된 기분이 들었다. 내가 얼마나 초보적이고 비효율적으로 코딩을 해왔는지 깨닫게 되는 순간이었다.
책 속에 나오는 자판기와 엘리베이터로 든 프로그래밍 예시 이야기도 상당히 좋았다. 우리 삶속에 매일 이용하고 익숙한 기계덩어리에도 프로그래밍이 되어있고, 간단해 보이는 기능들에도 꽤 정교한 알고리즘으로 이루어져 있다는 것에 새삼 놀랐다. 자판기와 엘리베이터와 같이 생활속에 녹아 들어있는 물건을 그냥 지나치는게 아니라 프로그래밍적으로 관찰해보고 사고해보는것도 개발로서는 좋은 습관이 될 수 있을 것 같다.
<디자인 씽킹을 넘어 프로그램 씽킹으로> 에서 한국식 코딩 교육에 대한 문제점이 나온다. 최근들어 코딩에 대한 관심이 높아지고 열풍이 불면서 공교육 과정에 코딩 과목이 새로 편성되었다. 코딩 교육이 의무화 되면서 역시나 '한국식' 사교육 시장(코딩학원, 코딩과외)도 빠르게 늘고있다고 한다.
실습수업에서 중학생들이 '엔트리'라는 프로그램으로 수업을 진행한다. '엔트리'는 블록 형태로 여러가지 조합을 하여 프로그래밍을 간접 체험할 수 있게 해주는 프로그램이다.
문제는 학생에 따라 누구에게는 간단할 수 있고 누구에게는 굉장이 어렵게 느껴지기도 한다고 한다. 이는 두 학생에게 모두 좋지 않은 영향을 준다.
'엔트리'는 기능이 한정적인 프로그램이라, '엔트리'에서 제공하는 기능 범위내에서 문제를 사고해야하는 것은 사고의 범위를 제한하고, 따라하기 식의 수업방식 역시 생각할 기회를 빼앗는 좋지 못한 방법이다.
저자는 상상력이 뛰어난 아이들의 사고를 제한하지 말아야 한다고 말한다. '엔트리'같은 블록형 코딩보다 생활 주변의 문제를 발견하고 이를 '해결하는 방법을 찾아나가는 과정'을 작성해 보는 학습이 더욱 필요하다고 말한다. 나 역시 이 생각에 전적으로 동의하는 바이다.
지금은 기술적으로 불가능한 일도 미래에는 가능한 일이 될 수 있고, 아이들의 풍부한 상상력을 통해 꿈을 키우고 불가능한 일이 가능해지도록 지원해야 한다는 말이 정말 정확한 것 같다.
개발을 하기전에 해결해야할 문제는 어떤 것들이 있는지, 어떤 기능을 만들 것인지 바라보고 어떤 가능한 경우의 수가 있는지 생각하고, 구체적 과정들을 그려나가고 다시 그 과정들을 세분화하고 다시 과정을 확장하고 세분화하고 ...
반복을 통해 탄탄한 코드를 쌓아가면서도 길을 잃지 않는 개발자가 되어야겠다. 앞으로 종종 머리가 복잡해질 때 <디자인 씽킹을 넘어 프로그래밍 씽킹>을 다시 꺼내서 볼 것 같다.. 그때는 좀 더 성장해 있길 ..🙏