이 글은 카이스트 전산과를 다니며 느낀 코딩의 양면성에 대한 이야기입니다. 일단 배경지식에 대한 설명으로 글을 시작하겠습니다.
컴퓨터 시스템은 아주 크게 하드웨어와 소프트웨어로 나눌 수 있습니다.
하드웨어는 정보의 입력, 저장, 처리 등의 동작이 실제로 일어날 수 있는 물리적인 부분을 의미하고 소프트웨어는 하드웨어가 이러한 동작을 하기 위한 명령어들의 집합, 즉 프로그램의 집합을 의미합니다.
하드웨어와 소프트웨어는 각각 여러 구성요소들로 되어 있습니다.
하드웨어는 CPU, Memory, I/O device, System버스로 구성됩니다.
소프트웨어는 system software과 application software로 구성되며 system software에는 OS(운영체제), 언어 번역 프로그램(컴파일러, 인터프리터), Device Driver, Linker, Loader가 있습니다.
Application software는 일반적으로 우리가 생각하는 한글, 엑셀, 파워포인트 등 사용자가 컴퓨터 시스템의 환경 내에서 사용할 수 있는 프로그램입니다.
컴퓨터 공학과라고 하면 사람들은 앱을 만들다, 홈페이지를 만든다 등 일반적으로 Application software에 대한 부분에 대해서만 생각을 합니다. 저 역시 이런 프로그램들을 만들고 싶어서 컴퓨터 공학과에 진학을 했습니다. 하지만 진학 후에 알게 된 사실은 학교에서는 application software 코딩보다는 system software에 대한 코딩을 더 많이 한다는 사실이었습니다. 다른 대학의 커리큘럼에 대해서는 잘 모르지만 카이스트 전산과(카이스트는 컴퓨터 공학과 대신 전산과가 있다)의 경우 파일 시스템, 데이터베이스 시스템, 컴파일러, 운영체제 등 컴퓨터의 시스템을 구현하기 위한 코딩을 주로 합니다. 앱 코딩이나 웹페이지 만들기는 개인적으로 따로 공부하거나 관련 동아리에 들어가서 할 뿐 학과의 커리큘럼에는 거의 없습니다.
그래서 처음 전공에 들어가 코딩을 하는데 저는 알수 없는 찝찝함을 느꼈습니다. 저는 분명 코딩이 좋았고 실제로 사용할 수 있는 앱을 만들고 싶었는데 제가 지금 하는 코딩은 이상하게 재미가 없었고 낯설었습니다. 후에 알게된 그 찝찝함이 생긴 이유는 저는 사람들이 사용할 수 있는 프로그램을 만들고 싶었지만 학교에서 배우는 코딩은 컴퓨터가 쓸 수 있는 프로그램을 만들고 있었다는 것입니다. 또한 시스템 코딩은 컴퓨터 시스템에 대한 배경지식을 가지고 있어야 하기 때문에 그에 대한 지식이 없던 저에게는 어렵게 느껴졌습니다. 그래서 저는 이런 시스템 코딩에서는 흥미를 느낄 수 없었고 학교의 커리큘럼에 대해 반감을 느꼈습니다. 하지만 자꾸 application software을 만들기 위해 개인적으로 공부하다보니 좀 더 복잡한 application software를 만들수록 system software에 대한 지식이 필요하다는 것을 알았습니다. 결국 application software도 system위에서 작동하기 때문입니다. 그래서 지금은 학교의 커리큘럼이 다 이유가 있게 짜여진 거라는 것을 알게되었습니다. 그렇다고 시스템 코딩에 흥미가 생긴것은 아닙니다. 아직 저의 관심은 오로지 application software개발에 있습니다. 그래서 저는 따로 시간을 내서 학과 커리큘럼 이외에도 웹개발 언어나 앱 개발 언어를 따로 공부하는 중입니다.
앞의 이야기에서 system software 재미없다, 어렵다 너무 부정적으로 얘기한 것 같은데 제가 이 이야기를 쓴 의도는 그런것이 아닙니다. 오히려 주변에는 application software보다 system software개발에 더 흥미가 있는 친구들도 있습니다. 제가 이번 글을 통해 전달하고 싶은 것은 코딩이라는 것의 범위가 일반적으로 사람들이 생각하는 것보다 넓은 범위이고 컴퓨터 공학과에 진학하게 될 분들은 미리 컴퓨터 공학과에서 어떤 코딩을 배우는지 미리 알면 좋을 것 같다는 것입니다. 그리고 학과 커리큘럼이 재미없다면 거기에서 그치는 것이 아니라 따로 공부를 해서 자기가 하고싶은 것을 하면 좋을 것 같습니다.
'생각정리' 카테고리의 다른 글
코딩 처음 뭘로 시작하죠?(코딩공부순서) (1) | 2020.12.03 |
---|---|
코딩을 배워야 하는 이유(코딩 배우기) (0) | 2020.11.13 |
재미있게 사는 법 (0) | 2020.09.24 |
대학을 다니며... (0) | 2020.03.13 |
하고싶은 일을 한다는 것 (0) | 2020.02.17 |