brunch

You can make anything
by writing

C.S.Lewis

by 시류아 Mar 29. 2019

처음 프로그래밍에 관심 가지시는 분들께

처음 프로그래밍에 관심 가지시는 분들께 드리는 한 초보 엔지니어의 이야기


 불과 약 10여 년 전, 제가 중 · 고등학교를 다닐 때는 프로그래밍은 특정 분야 전문고를 진학하거나 개인적으로 관심을 가지고 공부하지 않으면 접할 기회가 없었습니다. 하지만 최근 "논리력 · 사고력 · 문제 해결력 · 컴퓨팅적 사고 · 창의력 중심 교육"을 외치면서 어느 순간부터 코딩 교육 열풍이 불기 시작하더니, 지난 2018년부터는 "초등학교 5~6학년 실과 교과 17시간 이상", "중학교 1~3학년 정보 교과에서 34시간 이상"으로 교육부 주체 하 소프트웨어 교육이 의무 교육으로 포함되었습니다.


 그래서일까요? 운영하고 있는 IT 커뮤니티에서도 이전에는 가끔가다 한두 분 나타나서는 어떻게 공부하면 좋을지 물어보시는 분이 계셨는데.. 요즘은 특정 시즌만 되면 자연스럽게 어떻게 공부하면 좋을지 물어보시는 분들이 하나 둘 늘어나고 있는 것이 알게 모르게 느껴지고 있습니다. 이를 지켜보고 있자니.. 스스로 공부하시려고 알아보시는 모습이 멋져 보이기도 하고, 여러모로 바뀌어가고 있는 시대적 흐림이 정말 신기하기도 하지만, 한 편으로는 정규 교과를 통해서 접해볼 수 있는 기회가 있다는 점이 참 부럽습니다.


 왜냐하면, 현재 4차 산업혁명이라 말하며 발생되는 시대적 변화에서 스마트 팩토리 · 인공지능 · 블록체인 · 자율 주행 등 다양한 주요 기술들이 가지고 있는 공통적으로 가지고 있는 핵심 골자를 살펴보면 바로 소프트웨어입니다. 그만큼 소프트웨어가 다양한 방면으로 융합되면서 가져올 시스템의 변화는 매우 크고 앞으로 다가올 시대에서 소프트웨어는 필수적인 요소 중 하나로 자리 잡아가고 있습니다. 이러한 흐름 속에서 정규과정이 어느 정도까지 인지는 모르겠지만, 그래도 맛보기라도 할 수 있다는 것 자체가 조금이나마 시대적 흐름에 뒤처지지 않고 맞추어나갈 수 있습니다.


 이번 글에서는 소프트웨어가 중요해져 가는 시대적 흐름에 발맞추어 나가기 위해서 프로그래밍에 관심을 가지고 처음 접해보고자 하시는 분들께, 그동안 매일같이 공부하고 일하고 있으면서 느낀 것들을 바탕으로 다소 진지하면서도 가볍게 개인적인 생각을 이야기해볼까 합니다.


 다만, 글을 시작하기 앞서서 한 가지 부탁을 드리자면, 저는 프로그래밍을 잘하는 것도 아니고, 많은 것을 알고 있는 것도 아닙니다. 더군다나 굳이 직업을 분류하자면 개발자보다는 엔지니어에 가까운 사람이다 보니, 지금 현재 종사하고 계신 분들께서는 이야기하는 내용이 다소 맞지 않다고 느껴지는 경우도 많이 있을 것이라 생각됩니다. 그러므로 "아 이 사람은 이렇게 생각하네?"하고 이해를 부탁드리겠습니다.






처음 맛보기는 스크래치부터..



 그동안 커뮤니티를 운영하면서 프로그래밍을 처음 배우고자 하시는 분들이 올린 글들을 살펴보면 공통적으로 먼저 하시는 이야기가 있습니다. 바로 "어떤 언어부터 배워야 돼요?"입니다. 이에 대해서 불과 몇 년 전까지만 하더라도 "C" 또는 "Java"를 먼저 공부하는 것이 좋다고 답변을 많이 드렸지만, 요즘은 다소 생각이 많이 바뀌어서 "스크래치"를 먼저 해보라고 말씀드립니다. 왜냐하면..


 언제나 첫 시작은 가볍고 간단하게 할 수 있는 것이 재미와 흥미가 빨리 생겨, 오랜 기간 꾸준하게 파고들기 좋습니다.


 프로그래밍이 어떠한 것인지 아무것도 모르는데, 첫 시작부터 프로그래밍 언어 강좌나 서적을 펼쳐놓고 차근차근 읽어보고 "Hello World!"부터 시작해서 입력한 값이 계산되어 나오는 것을 하나 둘 따라 한다고 이것이 머릿속으로 들어오거나 재미를 유발할까요? 저도 그랬고, 학교 후배들부터 시작해서 주변 동생들까지 가르쳐본 경험상으로는 일부를 제외한 대다수가 재미를 전혀 못 느끼고 막연해하는 경우가 많았습니다.


 결국 프로그래밍을 공부하는 것을 포기하고 거리를 두는 친구들의 이야기를 들어보면 "책 보고 따라 해보면 결과물은 나오는데.. 이게 왜 돌아가는 건지, 어떻게 움직이는 건지 전혀 모르겠다. 어렵고 재미가 없다"가  대다수의 반응이었고, 프로그래밍이란 학문을 손을 때고 거리를 두는 이유였습니다. 즉, 무작정 펼쳐놓고 공부한다고 된다는 것이 아닙니다.



 이에 있어서 스크래치는 상당히 재미를 유발하기 쉬우면서도 어떻게 흘러가는지 잘 보여주고 있습니다. 좌측 메뉴에서 블록을 가져와서 배치하는 것으로 하나의 코드가 작성되기 때문에 무작정 책을 보고 따라 하는 것보다 쉽고, 우측 화면에서 시작 버튼을 누르는 것으로 작성된 코드에 맞추어 캐릭터가 움직이기 때문에, "어? 이리 움직이네? 그럼 이렇게 하면 어떻게 될까?"하면서 책을 보고 코드를 따라치고 결과물을 보는 것보다 훨씬 빠르게 재미와 흥미를 느낄 수 있습니다.


 고로, 처음에는 "C" 나 "Java" 같은 텍스트 기반의 언어를 하는 것보다 블록 형식으로 그래픽 기반 언어인 "스크래치"를 먼저 해보시면서 재미와 흥미를 느껴보시는 것을 추천합니다.





하나라도 제대로 기초 공부하거나 깊게 파고들자



 커뮤니티 내에서 진행되는 서평 이벤트나 질문 글들을 꾸준하게 살펴보면, 꼭 올라오는 이야기가 있습니다. "이번에는 이 언어를 해보고 싶습니다"라 말씀하시면서 기존에 하고 있는 것 이외의 언어를 접해보고자 하신다는 것입니다. 다양한 언어를 접해보고 이것저것 하실 줄 아는 건 좋습니다. 다만, 그전에 한 번 본인이 주특기로 할 수 있는 언어 하나라도 제대로 끝까지 파고들거나 기초 공부를 확실히 하셨으면 좋겠습니다.


 왜냐, 개인적인 경험에서 하는 이야기입니다. 저 같은 경우 프로젝트와 인터페이스 해야 되는 장비들에 따라서 사용되는 언어가 다르다 보니, 이것저것 접하다 결국 다양한 언어를 사용할 수 있게 되었습니다. 이 점이 프로젝트에 따라서 매우 큰 강점으로 돌아오기는 한데.. 반대로 가장 큰 약점입니다. 진짜 한 언어를 전문적으로 쭉 하신 분들에 비해서 전문성이 확실히 차이 납니다. 그리고 이 차이로 인해서 일전에 진행했었던 몇몇 프로젝트에서는 엄청 많이 혼나기도 했었고요.


 물론, 최근 구인 공고들을 보고 있으면 하나의 언어보다는 몇 가지 언어를 할 수 있는 개발자분들을 찾는 경우가 많고, 풀스택 개발자를 요구하는 경우가 많습니다. 특히 한국에서는 점점 그러한 경향이 강해지고 있는 것처럼 보이기도 합니다. 하지만, 점점 소프트웨어들이 발전해 나갈수록 전문성 역시 더 중요해질 텐데.. 과연 이게 맞는 것인지.. 좋은 것인지 잘 모르겠습니다.



 상황에 따라서는 정말 부득이하게 어쩔 수 없이 다양한 언어를 구사할 줄 알아야 되는 경우도 없지 않아 있습니다. 이때, 적어도 한 가지 언어를 제대로 알고 있다면 나머지 언어들을 습득하는 데 있어서 어떠할까요?


 대다수 프로그래밍 언어들은 "C"를 베이스로 하거나 모티브를 삼고 있는 경우가 많기 때문에, 비슷하거나 동일한 경우가 많습니다. 이로 인해, 하나의 언어만이라도 제대로 공부해둔 상태이고 활용할 줄 안다면, 충분히 다른 언어의 레퍼런스 문서 및 공개되어있는 오픈소스 프로젝트들을 공부해보는 것만으로도 생각보다 빠르게 습득이 가능합니다. 아닐 것 같죠? 지극히 개인적인 경험이라 그런지 모르겠는데.. 그냥 한 언어를 제대로 공부한 상태에서 다른 언어를 볼 때, 정말 전문적인 수준까지는 안되더라도 어느 정도 수준까지는 금방 됩니다.


 마지막으로.. 주특기라 부를 수 있을 정도로 정말 빠삭하게 알고 있는 언어가 있다면.. 애초에 그 언어를 바탕으로 계속 일을 하게 될뿐더러, 여러 가지 언어를 하는 곳으로 가더라도 웬만해서는 프로젝트를 진행할 때 다른 언어를 하는 것보다 주특기인 언어를 하는 쪽을 하게 되어있습니다. 두말할 것 없이 주특기라 부를 수 있는 언어를 하는 게 업무 효율에서부터 시작해서 전문성까지 여러모로 이득입니다.


 고로, 여러 가지 언어를 경험해보고 하는 것도 좋지만, 정말 주특기라 부를 수 있을 정도로 한 가지 언어만이라도 제대로 깊게 공부해보셨으면 합니다.





문법은 소속된 곳에 맞추어서

공부할 때는 본인 편한 대로



 항상 다양한 커뮤니티를 보고 있으면, 꼭 논쟁의 대상으로 올라오면서 많은 질문을 받는 것이 있습니다. 바로 위의 예시의 이미지 중에서 왼쪽과 오른쪽 둘 중 "어느 쪽이 맞는 문법인가?"입니다. 이에 대해서 결론적으로 말씀드리자면, 둘 다 맞는 문법이고 프리랜서라면 참여하는 프로젝트에 따라서, 직장인이라면 회사에서 공통적으로 사용하고 있는 문법을 따르는 것이 맞습니다.


 왜냐? 개인 프로젝트가 아닌 이상 다수의 인원이 한 프로젝트에 참여하고 있을 것이고, 혼자 개발하는 것이 아니라 다수의 인원이 같이 보고 개발을 진행하고 있습니다. 이때 혼자서 "아! 이 문법 불편해, 난 내 스타일대로 할래"하면서 다른 사람들과 다른 문법을 사용한다면 어떠할까요? 딱 잘라서 협업에 있어서는 최악입니다. 본인은 본인 편하면 그만이겠지만, 그만큼 다른 사람들은 불편을 감수해야 됩니다. 고로, 프로젝트 또는 소속된 곳에서 지키고자 정의된 문법이 있다면 해당 문법을 지켜주는 것이 매너이자 서로 간의 배려입니다.


 그럼, 혼자서 공부할 때 또는 개인 프로젝트를 할 때는 어떤 문법을 맞추어야 되느냐? 그냥 본인이 편한 대로 하시면 됩니다. 어차피 공부할 때도 그렇고 개인 프로젝트도 그렇고 주는 본인이지 타인이 아닙니다. 그러니 본인 편한 대로 하시면 됩니다. 위에서 말씀드린 것처럼 다수의 인원이랑 협업할 때 다 같이 맞추기로 한 문법 꼭 지켜주시면 됩니다.





더 나은 코드를 위해서는



 많은 분들께서 보다 좋은 코드를 작성하기 위해서는 항상 하시는 이야기가 있습니다. "알고리즘" · "자료구조" · "수학" 이 세 가지는 꼭 공부하라는 이야기입니다. 불과 몇 년 전, 졸업작품으로 모션 시뮬레이터를 만들기 전까지만 하더라도 "굳이? 왜? 사칙연산만 잘하면 되지" 이렇게 생각하며 다소 등한시하고 있었지만, 레이싱 게임에서 차량의 좌표 정보를 받아내서 가공, 이후 얼마만큼 모터를 움직여야 되는지 계산하는 과정을 만들면서 그 생각이 완전히 뒤집어졌습니다.


 처음에 작성할 때는 단순하게 게임 내 차량의 위치 좌표의 높낮이만 가지고 모터를 움직였고, 그 결과 게임에 맞추어서 가는 느낌은 있어도 일체 된다는 느낌은 전혀 없었습니다. 더군다나 데이터 버퍼 처리 문제로 동작의 지연과 함께 엇박자가 심해졌습니다. 그 결과, 이건 정말 아니다 싶을 정도로 정말 재미가 없었습니다. 이를 해결하기 위해서 정말 많은 시도를 해보았고, 결국 그동안 등한시하고 있었던 "알고리즘", "자료구조", "수학"을 다시 공부하면서 데이터 버퍼 처리부터 시작해서 좌표 계산을 통한 정확한 모터 위치 계산까지 많은 부분을 개선해서 문제를 해결하고 완성했었습니다.


 이때 확실하게 느낀 것이, "알고리즘" · "자료구조" · "수학" 이 세 가지의 차이로 완성도 및 효율성이 정말 극명하게 난다는 점입니다.


 그리고 이는, 최근에 아두이노를 바탕으로 교육목적의 소형 6축 로봇 팔을 제작하면서 다시 한 번 느꼈습니다. 아두이노를 통해서 정말 간단하게 6개의 서보모터를 제어한다고 하면 막 모터의 위치 값을 일일이 계산해서 넣어주면 됩니다. 문제는 이 값들이 정말 많아진다면 어떻게 될까요? 특정한 물건 하나를 집어 들어서 옮기고 조립하는 동작을 만들어 내기 위해서 정말 많은 모터 위치를 계산해서 찾아내야 됩니다. 이게 별것 아닌 것 같아도 정말 짜증 날 정도의 반복 작업입니다. 이를 다른 사람들은 어떻게 해결했나 이리저리 찾아보았고, 삼각함수를 복합적으로 계산해서 동작시키는 것을 보고 참고해서 좌표 방식으로 움직이는 것으로 만들어 해결했었습니다.


 진짜 다른 말씀 안 드립니다. 더 좋은 코드 작성하려면, "알고리즘" · "자료구조" · "수학"은 꼭 공부해야 됩니다.





많은 경험을 쌓아보자



 마지막으로 하고 싶은 이야기는, 공부하시면서 "정말 다양하고 많은 시도를 해보면서 많은 경험을 쌓아보자"입니다. 이는 비록 얼마 되지는 않지만.. 그동안 프로그래밍을 하면서 한 프로젝트를 끝날 때마다 다시금 느끼고 있는 점입니다.


 프로젝트를 진행하면서 이슈가 발생되었을 때, 처음에는 잘 모르기 때문에 해결을 위한 대응을 하는데 정말 많은 시간과 노력이 필요로 합니다. 하지만, 이후 또다시 같은 이슈가 발생된다면 일전의 경험을 바탕으로 원활하게 대응할 수 있게 되고, 이게 하나 둘 쌓이고 또 쌓이면 노하우가 되어서 이슈가 발생된다고 하더라도 정말 문제없이 원활하게 대응할 수 있게 됩니다.


 즉, 수많은 경험은 정말 값진 자신이며 이를 바탕으로 만들어진 노하우는 확실하게 타인과의 차이를 만들어주는 요소입니다.


 고로, 정말 다양하고 많은 시도를 통해서 많은 경험을 해보시기를 바라며, 이를 통해서 자신만의 노하우를 쌓아 정말 멋진 프로그래밍을 하시기를 바라면서 이만 글을 마치도록 하겠습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari