본문 바로가기
프로그래밍

프로그래밍을 하면 알게 되는 컴퓨터의 ㅇㅇㅇ!

by Good.PhD 2024. 10. 30.

이런 !@#$&* (욕설). 퍽퍽. 심지어 구타하는 소리까지. 대학교 실습 시간에 일어났던 일이다. 이 수업은 프로그래밍 실습 시간에 실제로 일어난 사건이다. 가해 학생은 처음엔 조용했다. 1시간이 지날쯤 흥분하기 시작했다. 그리고 실습 2시간 중 나머지 1시간에 욕설과 구타 사건이 발생했다. 피해자는 조용하다. 사건 정황은 이러하다. 이 수업은 프로그래밍 실습 수업이었다. 학생들은 주어진 과제를 수행하기 위해서 프로그래밍을 하고 있지만 좀처럼 원하는 결과가 나오지 않는다. 시간은 흐르고... 점점 시간에 쫓기게 되자 가해자가 흥분하기 시작했다. 처음엔 욕설. 그 후 구타가 시작됐다. 피해자는? 실습실 컴퓨터다. 학생이 너무 답답하고 화가나서 컴퓨터를 두들겨 팬 사건이다. 컴퓨터가 말귀를 못 알아들어서 발생한 사건.

 

프로그래밍을 하던 학생은 왜 화가 났을까?

via GIPHY

눈치 없는 사람. 대화하면 답답하다. 컴퓨터는 눈치 없는 사람보다 더 눈치가 없다. 척하면 척하고 알아들어줘야 되는데 그게 안되니 화가 난다. 그래서 코딩을 하다보면 울화통이 터진다. '이 정도는 알아서 알아들어 먹어야 되는거 아냐?' 라는 게 없다. 조금만 틀려도 에러가 발생한다. 그래서 그 학생은 화가 많이 났었다. 컴퓨터를 걷어찰 정도로!

얼마나 답답하길래? 어마어마하게 답답하다. 코딩에 익숙하지 않다면 이 과정에서 분통 터지는 일이 생긴다. 또한 수업에서 다루는 문제도 문제다. 문제가 문제다. 문제가 문제라고? '이걸 왜 하는거지..?'싶은 과제를 하는 것도 문제다. 에를 들면 이런 식의 문제를 풀어야 한다.

입력받은 숫자의 2배를 반환하는 함수를 만드시오.

...? 이걸 왜 하는거지? 그냥 숫자에 2 곱하면 되는거 아닌가? 굳이 이걸 내가 함수로 만들어야 하나? 프로그래밍에서 함수라는 개념을 이해시키기 위한 과제다. 하지만 멍청한 문제다. 계산기를 쓰면 되는데... 내가 왜 굳이 이걸 코드로 만들고 있지? 그리고 만들어 놓은 결과물도 멍청하다.

입력받은 숫자의 2배를 반환하는 함수

 

def로 시작하는 줄이 함수다. double_number는 함수 이름. def는 함수를 정의하기 위한 명령어. 함수에 입력값을 넣어주려면 괄호 ()를 사용해야 한다. 괄호에 숫자를 입력하면, 2를 곱한후 반환한다. return이라는 명령어가 반환 값을 의미한다. return 뒤에 있는 값 num*2를 출력한다. 한줄 짜리 부터 이해가 잘 안되면 답답하고 짜증이 난다. 이건 거의 외국어다. double_number에 2, 3을 넣으면 예상대로 2를 곱한 값이 나온다. 그런데 '2'를 입력하니까 갑자기 다른 숫자가 나온다. 게다가 two라고 넣으면 또 안된단다. double_number에서 괄호를 빼먹으면 또 이상한 내용이 나온다.

여기서 2는 숫자로 인식하지만 '2'는 문자로 인식한다. 컴퓨터에서는 입력값의 타입(type)을 구분시켜줘야 한다. 그래서 아래와 같이 type()이라는 함수를 사용해보면 2는 정수형 (int: integer) '2'는 문자란다. (str: string) 

2랑 '2'는 다른 값이다.

그래서 double_number에 2를 넣으면 2*2가 되는 거다. double_number에 '2'를 넣으면 ? '2'라는 문자와 '2'라는 문자를 연결시켜서 '22'가 나온거다. str에 곱하기 2를 하면 문자를 복제시키기 때문이다. 그래서 문자열에 연산을 시키면 이렇게 나온다. 'haha'라는 문자의 2배는 'hahahaha'다. haha를 2개 연결시켜준 것. 곱하기 3이었으면 haha를 3번 연결시킨 문자열이 나온다.

haha x 2 = ??

 

이렇게 이해할 수 없는 기괴한 처리 방식과 2라고 썼냐, '2'라고 썼냐에 따라서 값이 서로 다르게 나오는 변태같은 현상 때문에 프로그래밍을 기피하게 된다. 유연성이 없어서 에러가 발생하게 되는 것이다.

 

이걸 배워서 어디다 써먹음?

via GIPHY

A: 코딩 배우고 싶어요.

나: 어떻게 활용하시게요?

A: ...? 그런게 있어요? 그냥 해보고 싶어요.

나: 음......

 

코딩 배우고 싶어하는 분과 나눴던 대화. 막연하게 배워보고 싶어하는 사람이 있다. 어디에 적용할지 분명하지 않으면 사실 시작하기도 힘들다. 동기부여도 안되고... 업이 프로그래머라고 해서 모든 것을 아는 것도 아니다. 내가 먹고 사는데 필요한 기능만 익숙하게 알면 된다. 프로그래밍을 배우는 것 보다 중요한것? 내가 어떤 문제를 해결하고 싶은가! 이것만 명확하면 그렇게 어렵지 않게 배울 수 있다. 코딩도 분야별로 특화되어 있기 때문이다.

 

대학 시절 실용성이 전혀 없는 문제만 해결하다 보니 졸업이 왔다. 뭔가 배우긴 했는데... 이걸로 뭘 할 수 있지? 취업은 시켜줄라나..? 좀 더 공부를 해야하나? 이런 고민이 꼬리에 꼬리를 물게 된다. 자신감도 없고... 이력서 속 내 모습은 호랑이지만 실체는 새끼 고양이다. 수업을 위한 예제 문제는 동기부여도 안되고 배움에도 도움이 안된다. 지금 와서 보니 한 학기 수업 동안 한 가지 문제만 풀더라도 실용적인 문제를 풀어 볼 수 있는 경험을 해보는 것이 낫다.

 

나는 생물학 전공자다. 그리고 컴퓨터공학을 복수전공 했다. 성적표에는 C가 가득했다. 수업에 안 빠지고 과제도 어떻게라도 제출하면 C는 받았다. D나 F를 받을 줄 알았기 때문에 C면 나쁘지 않다고 생각했다. 초중고 시절이랑 별 차이 없는 대학교 수업. 생물학은 외우는 것 투성이. 컴퓨터공학은 알아들을 수 없는 것 투성이. 어쩌다 보니 꾸역꾸역 대학생활을 해내면서 겨우 졸업했다. 나중에 같이 수업듣는 컴공 전공자들과 대화를 해보니 전공을 살려서 개발자로 취업하려는 사람들도 소수였다. 나도 거의 포기 상태였다. 주변에서 포기하지 말라고 응원해주셨던 분들 덕에 졸업했다고 생각한다.

 

복수전공을 한 이유? 앞으로 생물정보학 분야를 하고 싶었다. 문제는 내가 그게 뭔지 모른다는 것. 그냥 친구 아버지 조언으로 '생물정보학'이라는 단어를 알게 되었다. 그래서 생물학 배우고 컴퓨터 배우면 되는 줄 알았다. 좀 더 배우고 싶어서 대학원에 가게 되었다. 대학원 랩실에서도 제대로 가르쳐주는 사람이 없었다. (모르는 것을 모른다고 하면 엄청 욕먹는 분위기였다. 그래서 더 배우기 힘들었다.) 살아남으려다 보니 발로 짠 것 만도 못한 코드를 작성하기 시작했다. 그걸로 졸업을 했다. 코드에서는 발 냄새가 났지만, 결과물은 이쁘게 포장해서 발 꼬랑내를 지워버렸기 때문이다. 대학원에서 얻은것? 똥을 된장으로 분장시키는 기술. 그래서 똥인지 된장인지 구분 못하게 하는 것.

 

처음엔 나만 이런 줄 알았다. 그런데 돈 받고 일하는 개발자들도 별 차이 없다는 것을 알게 되었다. 한번은 문제가 생긴 결과물을 놓고 회의를 한 적이 있었다. 눈 앞에서 같이 코드를 수정하는데, 아 글쎄! 그 개발자는 독수리 타법으로 코드를 수정했다. 그리고 디버깅 실력이 나랑 별반 차이가 없다는 생각이 들었다. 유레카 모먼트. 이 정도 해도 먹고 사는구나!

 

중요한 것은 주어진 문제를 해결하는 것. 발로 짠 코드일찌라도. 개똥 같은 코드 일찌라도. 작동해서 문제를 해결하면 되는거다. 코드가 깔끔하고 관리하기 좋고.. 는 다음 문제다. 일단 내가 원하는 기능을 어떻게든 구현해내는 경험을 하는 것이 중요하다.

 

복수전공자로 컴퓨터공학 수업을 들을 때 별 수업을 다 들었다. 네트워크, 임베디드 시스템, 운영체제, 전자 회로 등등. 배우면 어딘가 쓸데가 다 있어. 나는 별로 동의하지 않는다. 용어 정도 아는 건 도움이 되지만, 알아듣지도 못하는 수업을 꾸역꾸역 듣는 것은 시간 낭비다. 내가 써먹고 싶은 문제를 명확히 하고, 그 문제를 해결해보는 것. 이 과정 자체는 오랜 시간을 요구하지도 않는다. 그리고 몰라도 하면서 배우면 된다. 문제 없다.

 

인공지능 시대에도 코딩 배우는게 의미가 있을까?

via GIPHY

필수라고 본다. AI도 코딩을 할 줄 아는 사람들이 더 잘 활용한다. 생성형 AI API를 활용하면 그냥 남들이 만들어놓은 앱을 사용하는 것보다 훨씬 효율적으로 일할 수 있다. 생성AI가 코드 다 짠다면서요? 그렇게 다 짜준 코드도 활용하지 못하는 경우를 본다. 인공지능 시대에는 프로그래밍 언어가 필수로 배워야 하는 제2외국어가 될 거다. 나는 그렇게 믿는다.