Monday, April 30, 2018

프로그래머가 되기 까지의 회고(2) - 중고등학교 시절

2편을 쓰기까지 3년의 시간이 걸렸다.
오래 걸릴 일도 아니었는데, 그 동안 글 쓸 시간이 없었다는 핑계 외에는 할 말이 없다.
---

프로그래머가 되기 까지의 회고(1) - 태어나서 초등학교 시절까지

초등학교때 까지 컴퓨터 학원을 착실히 다니고
컴퓨터 학원 원장님도 날 괜찮게 봐주셨는지 엄마도 내가 나름 컴퓨터에 소질이 있다고 생각했던 모양이었다.

그래서 중학교에 진학했을 때 처음으로 컴퓨터 선물을 받았다.
삼성 알라딘 286 AT 컴퓨터로 그 당시에는 흔하지 않은 256색이 나오는 컬러 모니터에 40M 하드 디스크도 장착되어 있는 정말 부의 상징이 따로 없는 컴퓨터였다.

내 기억으로는 그 컴퓨터 가격이 거의 250만원에 육박했는데 컬러 모니터만 거의 70~80만원대였고 흑백 모니터로 샀다면 150만원은 넘었던 가격이었다. 하드디스크도 없고 흑백 모니터만 있는 컴퓨터도 100만원 부터 시작이었으니 정말 큰맘 먹고 사주셨던 것 같다.

하지만...
난 부모님의 기대에 크게 부응하는 그런 짓(?)을 하진 않았던 것 같다.
물론 처음에는 학습 명목으로 학원에서 배웠던 basic 프로그램도 짜고 교육용 프로그램도 설치해서 쓰고 했었지만, 사람의 마음이 간사해서 그 동안 학원에서만 했던 PC 게임들을 컬러로 할 수 있다는 그 사실 만으로도 좋았던 시기였다.

<호화스러운 컴퓨터로 접해서 엄청난 시간을 투자해서 플레이한 대항해시대,
현재 steam에서도 14,000원이라는 자비없는 가격에 판매중이다.
출처: steam https://store.steampowered.com/app/521720/Uncharted_Waters/>

일단 대항해시대, 삼국지, 프린세스 메이커 등 90년대에 학창시절을 보냈던 분들이라면 할 얘기가 많은 그런 게임들을 나도 플레이하며 시간을 보냈었다.

사실 게임 얘기를 하면 끝도 없고 그 시절에 컴퓨터 프로그래머가 될법한 뭔가를 했냐가 중요한 포인트이기에 그 얘기를 더 해보자면, 특별히 한 건 없다. 내가 좀 쓸데없이 거만한 면도 없지 않아 있었던게 초등학교 시절에도 컴퓨터 자체를 아는 친구들이 그렇게 많지도 않았었다. 그런 친구들이 중학교에 진학했다 하더라도 딱히 달라진건 없었다. 그러니까 그 놈들이 그대로 헤쳐모여서 중학교에 모여 왔을 뿐 특별히 프로그래밍에 취미가 있다던가 하는 친구들은 없었다.

물론 프로그래밍하고 상관없이 컴퓨터를 쓰는 것 자체에 관심이 많은 친구들은 꽤 됐다. DOS 최신판 구해서 뭐가 달라졌는지 써보기, PCTools 버전업 되면서 유용하게 쓸 수 있는 사용법, 배치파일 작성법 정도만 할 줄 알아도 컴퓨터에 대해 꽤 잘 아는 친구였었다. BASIC이나 C언어에 대해 논할 수 있던 친구를 만난 건 대학을 진학하고 나서였으니까.

중고등학교 시절에 프로그램 짠건, 어느 PC 잡지에 BASIC으로 달력 출력하는 코드 따라 쳐본거, 그리고 Q-Basic 언어로 낱말 맞추기 프로그램 짠거 따라 쳐본게 전부였다. 사실 C언어도 따로 공부한것도 하나도 없었고 잡지에 어떤 개념이 나오면 그냥 BASIC하고 어떻게 매핑되는 코드인지 정도만 봤었다. 그렇다는 것은 포인터라는 개념은 하나도 없었고 그게 어떻게 동작하는지도 모른채 그냥 잡지에 Text 상에 있는 내용의 결과가 이렇게 나오겠거니 하는 눈 디버깅 해본게 해본게 전부였다는 것이다.

대학에 진학하기 전까지 내가 한 건
  • BASIC 프로그램 짜는 방법을 잊어버리지 않았던 것
  • 한글과 영문 타자 연습을 꾸준히 했던 것
  • 삼국지 게임을 통해 숫자 키보드로 빠르게 숫자 입력하는 능력을 가진 것
  • PC 잡지, 게임 잡지 같은걸 꾸준히 보면서 프로그래머 (정확히는 게임 프로그래머)가 되겠다는 막연한 희망을 품었다는 것
이정도였다.

그리고 고등학교 2학년 여름방학때 쯤 덥고 무료한 날에 수학의 정석 책만 쳐다보다가 무심코 교과서의 수학책을 리뷰해 보면서 뭔가 제대로 수학을 알아야 겠다는 생각이 번뜩 들었다. 그 번뜩이는 생각이 뭐였냐 하면 그 전까지 수학은 다른 친구들과 마찬가지로 뭔가 공식 같은걸 외워서 낑낑대면서 따라가기 바쁜 그런 공부였는데, 다시 찬찬히 보니 수학은 그렇게 공부하는게 아니라는 걸 깨닫게 된 것이다. 어떤 원리가 나온 이유, 왜 이런 방법으로 수학적인 체계를 만들고 검증하게 되었는지에 대한 생각의 흐름을 읽다 보니 여태까지 바보 같은 공부를 하고 있었다는 걸 깨달은 것이다.

그 이후 처음부터 다시 개념을 이해하는 공부를 다시 시작해서 혼자 미친듯이 시간을 투자해 공부해서 수학 점수가 엄청 잘나왔었다. 수학을 좋아해서 이과를 선택한 것도 아니었는데 고등학교 2학년 여름 때 부터 수학을 좋아하게 되었고 그게 수능을 볼 떄도 반영이 되어서 상위 5%에 달하는 수학 점수를 받았다.

그게 컴퓨터공학과를 진학해서 프로그래머가 되겠다는 마음을 먹은 것에 상당히 중요한 기반이 되었다는 걸 한참 나중에 알게 되었다. 왜냐하면 대학 다닐때만 해도 크게 연관성이 없다고 생각했었고 코딩을 잘하는게 더 중요하다고 생각했었으니까. 지금 다시 생각해보면 프로그래머가 되려고 내가 그렇게 수학을 열심히 공부했나 하는 결과론적인 착각도 하게 된다.

중고등학교 때의 기억은 정말 게임만 미친듯이 했지만 "컴퓨터를 가지고 뭔가 하는 직업"이라는 막연한 꿈을 그냥 놓치지 않고 지냈던 것 같다.

Tuesday, April 10, 2018

기억을 만나다 영화 체험 후기

세계 최초 VR 영화라고 해서 관심이 가기도 했고 러닝타임 40분에 6천원이 적절한지에 대해서도 의문이 들어 보게 되었다.

<4DX VR 영화, 세계 최초란다. 새로운게 나오면 경험해 보고 싶은 것은 인간의 호기심.>

영화 내용이야 직접 보면 되고 "체험 후기" 니까 체험한 얘기를 써보고자 한다.

  • 좋은 점
    • 광고 및 예고편이 없는 듯?
      • 영화 시작 시간 10분 후 상영되는 걸 알고 일부러 5분 후에 들어갔는데, 영화 시작시간에 바로 시작한 듯 앞에 5분을 보지 못했다.
    • 친절한 안내
      • VR을 어떻게 써야 하는지 상영관 입장하기 전 설명을 해준다.
    • 상영관 내에서도 친절한 안내
      • 일단 VR 쓰고 뭘 보라는 것 부터가 무리수라. 나 같이 현업에서 VR 개발을 하고 체험도 많이 해본 사람은 상관 없지만, VR이 뭔지 모르는 사람이 대부분이기에 상영관 복도에 CGV 미소지기들이 대기하고 있다가 문제가 생기면 도와준다.
  • 안 좋은 점
    • 일단 화질
      • VR 화질 별로 안좋은거 알고 있긴 하지만 거짓말 조금 보태서 80년대 브라운관 컬러 TV를 20cm 앞에서 보는 느낌이다.
    • 참을 수 없는 무게
      • VR 헤드셋 부터가 무겁다. 영화 상영 내내 불편하다.
    • 쓰고 있기의 불편함
      • 땀, 화장 방지용 마스크를 주는데 이게 VR 헤드셋하고 겉돌아서 쓰고 맞추는데 상당히 힘들다.
  • 진짜 안 좋은점
    • 왜 VR로 찍었나?
      • 화질이 진짜 안 좋은점이라고 쓰고 싶지만 더 안 좋은점이 있는데, 이걸 굳이 VR로 만들 이유가 있나 싶었다. 솔직히 내가 기대한건 1인칭 시점에서의 동적인 화면이었는데, 영화를 너무 정적으로 찍었다.
    • 화면과 겉도는 사운드
      • 일반 영화를 보면 스크린이 멀찍이 있고 스피커도 그 쯤에 위치하기 때문에 화면에서 소리가 나오는 느낌이 든다.
      • 그런데 VR은 화면이 눈 앞에 있는데 소리는 저 멀리 스크린 쪽에서 나오기 때문에 이질감이 든다.
    • 뭔가 아쉬운 러닝타임
      • 40분 짜리 영화인 줄 알고 본거긴 하지만
      • 40분에 맞춰서 영화를 제작한게 아니라 원래 2시간 짜리 영화를 찍어놓고 40분 짜리로 편집한 느낌이 더 강하게 든다.
    • VR로 봐서 전해지는 감동이 없다
      • 왜 VR로 찍었는가에 이어지는 건데 VR로 봐서 재밌었다라는 느낌이 거의 들지 않았다.
  • 추가
    • 앞으로 VR 영화 컨텐츠는 이런 내용을 찍지 말고 1인칭 액션 영화를 찍는게 더 나을 수 있다. 이 얘기는 VR 기기 + 영화에 대한 분석을 좀 더 해봤으면 좋겠다는 뜻이다. VR 기기는 영화가 아니라 왜 게임이나 체험형 영상으로 인기가 더 있는지 부터 생각해 봐야 한다.
    • 생각해 보니 VR 기기를 쓰고 영화 볼거면 굳이 영화관에 앉아서 볼 이유가 없다. 그러니 VR 기기를 고장없이 그대로 돌려준다는 계약 하에 대여를 해주고 알아서 편한 장소에서 보라고 하는게 더 나을 수 있다.
    • 그리고 VR 기기로 영화를 상영한다는 것이 어떤 의미인지에 대한 생각을 안하고 다음에도 VR 영화를 계속 상영할 계획을 가지고 있다면 왜 사람들이 영화관에 가서 영화를 보는지 단순하고 중요한 원칙을 잘 생각해 보자. 집에 앉아서 IPTV로 영화 보는게 더 편할 수도 있는 세상인데 말이다.

Monday, April 2, 2018

프로그래머와 일반인이 이해하는 영어 차이

억지스러운 것도 있고, 웃자고 쓴 것도 있다.

퇴근할 때 문과/이과가 생각하는 "정의"의 영어 단어가 justice/definition 과 같이 다르다는 것에 웃다가 프로그래밍 용어도 생각해 보니까 바로 몇 개가 떠오르길래 쭉 정리해 봤다.

<요런 버전도 있다.
출처: http://knowyourmeme.com/photos/1215080-artist-vs-normal-people>


---- 억지로 만든거

Load
프로그래머: 데이터 읽어 들이기
일반인: 짐, 하중

Save
프로그래머: 저장
일반인: 절약

---- 괜찮다고 생각되는 거

Bug
프로그래머: 프로그램의 오류
일반인: 벌레

Build
프로그래머: 소스코드를 최종 실행 파일로 만드는 과정
일반인: 건축

Cache
프로그래머: 일반 램 보다 용량이 작고 속도가 빠른 메모리
일반인: (스펠링을 알려주기 전까지) 현금

Callback
프로그래머: 함수의 실행의 결과를 나중에 받기 위한 기법
일반인: (주로 전화통화에서의) 나중에 전화해!

Class
프로그래머: 객체지향의 class
일반인: 수업, 반

Client
프로그래머: 서버에 접속하기 위한 컴퓨터
일반인: 의뢰인, 고객

Cloud
프로그래머: AWS, Azure 등의 클라우드 서비스
일반인: 구름

Cookie
프로그래머: 웹 브라우저에서 작은 데이터를 저장하기 위한 파일
일반인: 쿠키 (먹는거)

Constructor
프로그래머: 객체지향에서의 생성자
일반인: 건설자

Crash
프로그래머: 알 수 없는 이유로 프로그램의 동작이 멈추는 현상
일반인: (주로) 자동차 사고

Function
프로그래머: 함수
일반인: 기능

(번외편) 함수
프로그래머: 호출할 수 있는 실행 블록, 파라미터와 결과값이 있을 수도 있고 없을 수도 있다.
일반인: (주로) f(x) 로 시작하는 방정식

Heap
프로그래머: 동적 실행시간에 생성되는 메모리 저장 공간
일반인: (마찬가지로 스펠링을 알려주기 전까지) 엉덩이

Matrix
프로그래머: 2차원 이상의 배열, 수학쪽에서는 행렬
일반인: 매트릭스 영화

Memory
프로그래머: 프로그램의 힙, 스택 등에 저장되는 데이터 공간
일반인: 기억

Method
프로그래머: 객체지향에서의 객체의 함수
일반인: 주로 영화에서의 메소드 연기

Operator
프로그래머: 연산자
일반인: 군대에 상황실이나 지통실에서 일하는 병사들이나 공장에서 기계를 조작하는 사람

Platform
프로그래머: 소프트웨어가 동작하게 하는 어떤 환경
일반인: 지하철/기차 타는 곳, 폰에 관심이 많은 사람이라면 휴대폰의 OS (라고 오해함)

Pointer
프로그래머: C/C++ 프로그래밍 언어에서의 주소를 가르키는 값
일반인: (주로 마우스) 커서 혹은 발표 때 사용하는 레이저 포인터

Property
프로그래머: 속성 값
일반인: 재산

Queue
프로그래머: 자료구조의 Queue
일반인: 모름
주로 영연방국의 유학생 혹은 IELTS를 공부한 사람: 대기줄

Record
프로그래머: 주로 데이터베이스에서의 어떤 테이블의 한 줄의 데이터
일반인: 기록, 녹음, (아재들에 한해) LP판, 음반

Request/Response
프로그래머: 클라이언트-서버간의 양방향 네트워크 통신을 설명하는 단어
일반인: 사전적 의미의 요청/응답

Return
프로그래머: 함수 처리의 결과값을 반환하는 키워드
일반인: 복귀, 반환, (주로 셀프 서비스 식당에서의) 식판 갖다주기

Run
프로그래머: 프로그램의 실행
일반인: 달리기

Stack
프로그래머: 자료구조의 Stack
일반인: 박스나 책들이 쌓여있는 상태

String
프로그래머: 문자열 타입
일반인: 기타 등의 악기 줄 혹은 스트링 치즈의 스트링

Tree
프로그래머: 자료구조에서 표현의 한 방법
일반인: 나무

Thread
프로그래머: 프로세스 안에서 실행되고 있는 흐름의 단위
일반인: 실

마지막으로

Coding
프로그래머: (속된 말로) 생계를 위해 일정에 쫓겨서 하는 키보드 타이핑 노가다
(웃자고 쓴 글이며, 저를 포함하여 프로그래머를 비하할 의도는 전혀 없음을 밝힘)

일반인: 4차 산업혁명 시대를 맞이하여 인공지능/가상-증강현실/빅데이터/딥러닝/머신러닝 등등의 멋지고 어려워 보이는 최신 기술을 활용 하여 컴퓨터에 코드를 입력하는 어떤 방법이며, 초등학생들도 이제 배운다고 하던데, 나는 잘 모르는 것.