컴퓨터 공부할 때 알아야 할 내용은?
+본 내용은 학부생 관점에서 적은 내용입니다
컴퓨터 공부를 해야겠다고 마음을 먹으면 사실 막막하다
알지도 못하는 컴퓨터언어, 검은 콘솔창, 어려운 설명과 특히 어디서부터
배워야하는지가 가장 막막하다
이번 글은 문과로 시작한 후
그래도 1년 반동안 공부하며 어떤 것을 느꼈는지에 대해 풀어놓은 포스팅이다
그래도 컴퓨터 공부를 하면서 꼭 알아야 하는 과목은 아래와 같다고 생각한다.
"컴퓨터구조-운영체제"
컴퓨터 구조는 기본적인 컴퓨터의 작동에 대한 내용이다. 따라서 내용이 매우 방대하고 이해하기가 어렵다. (정말 똑똑하고 재능있는 사람이 아닌 이상은) 한 학기가 끝나고 나서야 '수업시간에 이걸 말하려고 하셨구나', 1년이 지나고 나서야 '아 그떄 배운 내용이 이런 내용과 관련이 있구나' 정도의 난이도라고 보면된다. 물론 내용 자체는 가장 핵심적인 내용을 다루고 있다. 예를 들어서,가장 하부 단부터 시작하면, 우리가 하는 언어와 달리 컴퓨터는 0, 1의 전기 신호 를 바탕으로 신호를 전달한다. 이러한 바이너리(2진수)신호가 컴퓨터의 기계어로(어렵다) 그리고 그 기계어가 다시 높은 수준의 프로그래밍 언어로(흔히 말하는 개발언어) 그리고 이를 통해 개발된 어플리케이션 혹은 더 나아가 시스템이 바로 우리가 현실에서 사용하는 여러 기계들이라고 할 수 있다. 참고로 여기서 프로그래밍언어를 개발언어로 한정지었지만 사실 기계어 자체가 개발언어이며 시스템 또한 단순히 기계로 국한되지는 않는다. 많은 내용을 한번에 담아내려니 오해의 소지는 많다)
목수가 오두막을 지으려고 할 때, 흔히 쓰는 원목에는 어떤 것이 있는지, 톱은 언제 사용해야 하는지, 주방에서의 연기는 어떻게 굴뚝으로 이어지는지 등 방대한 내용들을 여기서 배운다.
"파이썬, 자바, 웹"
개인적으로 c언어가 기본이라고하지만 컴퓨터에 대한 아무런 지식이 없는 상태에서 c언어는 컴퓨터에 대한 흥미를 100에서 0으로 떨어뜨리기 딱 좋은 언어다. 그래서 차라리 파이썬을 추천한다. 학부 수준에서 배우는 개발언어의 경우, 자바는 인터페이스나 네스티드(nested)클래스 정도까지 배운다. 흔히 구글에코딩도장이나, 점프투파이썬이나, 아니면 코드아카데미처럼 언어를 배울 수 있는 공간은 많다.
요즘은 유투브도 많아 의지만 있으면 쉽게 '배울 수는'있다고 생각한다. 물론 개발언어같은 경우에는 흔히 공모전에서 피피티에 해당한다. 피피티만 잘 짠다고 공모전에서 상을 탈 수는 없으며, 아무리 좋은 기획안이 있어도 발표를 ppt로 해야하는 경우에 ppt를 모른다면 발표가 힘들 것이다. 웹프로그래밍의 경우 쉽게 말해 마크업언어를 이용했을 때 유저와 서버가 어떻게 데이터를 주고받는지를 배운다. html, css, javascript, jquery 등이 맨 처음 배우는 언어다."자료구조개론, 알고리즘"
요리를 할 때에는 국간장을 넣어야 하는군요!
같은 느낌의 과목이라고 할 수 있다. 쉽게 말해 자료구조개론은 데이터를 어떤 그릇에 담아야 할지 고민하는 과목이다. 예를 들어서 100L의 양동이에 물을 가득 담아야 한다고 했을 때, 스포이드를 선택하느냐, 숟가락을 선택하느냐, 물컵을 선택하느냐, 물병을 선택하느냐에 따라 양동이에 물이 담기기까지의 속도가 달라질 수 있다. 다른 예시로는 물을 담는 용기, 시리얼을 담는 용기, 목재를 담는 용기는 각각 다른 모양을 선택해야 한다. (돌맹이를 담는데 찻잔을 쓸 수는 없다) 알고리즘은 동작을 어떤 식으로 해야 하는지 배우는 과목이다. 아까의 100L양동이의 예시에서 어떤 사람은 물병을 가지고 있지만 1시간에 1번씩 양동이에 채워넣는다면 1초에 1000번씩 물컵을 가지고 양동이에 물을 채우는 사람보다 양동이를 채우기까지 걸리는 시간은 느릴 것이다. 위와 같은 고민들은 어떠한 어플리케이션을 만들더라도, 혹은 api를 이용하더라도 무조건 고민할 수 밖에 없는 문제이기에 매우 중요한 과목이다."데이터베이스개론, 네트워크개론, 소프트웨어공학개론"
실전을 위한 지식을 쌓기 위한 지식
이라고 할 수 있다. 데이터베이스의 경우 뉴스에도 매일 나오고 위키에 검색해봐도 금방 알 수 있다. 서류를 보관해야 하는데 상당히 멋진 파일철을 어떤 기업에서 만들어주어 서류정리를 쉽게할 수 있게 되는것도 하나의 예시가 될 수 있다. 흔히 SQL문을 익힌다고 하는데 그건 그 파일철을 어떻게 사용해야 하는지를 배우는 것이라고 보면 된다. SQL또한 구글에 치면 설치부터 예제까지 쉽게 나온다. 보통 mysql이 공짜이며 배울 때 많이 사용한다.네트워크 개론은 쉽게 말해 구글에서 네이버를 검색했을 때, 흔히 보는 웹페이지의 메인화면이 네이버 서버에서 어떻게 개인 컴퓨터의 모니터에 보여지는지 그 과정을 공부하는 학문이다. 소켓프로그래밍을 검색하면 이해가 빠를 것이다.
마지막으로 소프트웨어 공학은 정말 어렵다. 어려울 뿐더러 어떻게 배우느냐, 또 지금까지 무엇을 배워왔냐, 어떤 목표를 가지고 공부하느냐에 따라 그 결과물은 천차만별이다. 흔히 마케팅 공모전에서 "~~앱을 만들어야 합니다." 에서 끝난다면 소프트웨어 엔지니어링의 경우 "~~앱을 만들어야 합니다. 그래서 ~~게 만들었습니다"까지 이어진다고 생각하면 된다. 주변에서 쉽게 들어봤던 agile, architecture, design, warterfall model 등이 여기에 해당된다.