컴퓨터공학과 프로그래밍은 다르다.
우선, 컴퓨터공학과 프로그래밍은 다르다. 컴퓨터공학에서 프로그래밍은 학문을 위해 프로그래밍이라는 도구를 가져다 쓰는 것이다. 컴퓨터공학은 '공학'이므로 전화기와 비슷하다고 보면 된다. 다른 학문과 마찬가지이지만 컴퓨터에 대해 공부하고 그 중에는 코딩이 필요한 과목이 있을 뿐이다. 만약 개발자가 목적이라면 학교의 교육과정 이외에 반드시 자신만의 개발 공부를 해야 한다고 생각한다.
개발에 필수적으로 프로그래밍이 포함된다. 그리고 개발자에 대한 전공자는 컴퓨터공학과 출신이다. 컴퓨터공학은 개발자의 필수조건이 아닌 우대사항인 경우가 많다. 프로그래밍을 효율적으로 하기 위해 컴퓨터공학의 지식을 이용하는 것이다. 전공자의 경우 프로그램이 돌아가는 원리를 비전공자에 비해 더 깊이 이해할 수 있다.
컴퓨터공학 ≠ 프로그래밍 임에도 불구하고 컴퓨터공학의 적성을 프로그래밍 능력과 연관시키는 경우가 많다. 그것은 프로그래밍이 적성을 많이 타는데 컴퓨터공학 과목 중에는 프로그래밍이 필요한 경우가 많기 때문일 것이다. 프로그래밍과 적성이 맞지 않음에도 고학점을 유지하는 경우가 있다. 그 이유는 앞에서도 말했듯이 컴퓨터공학 ≠ 프로그래밍 이기 때문이다. 코딩이 필요하지 않은 과목에서 A+를 받았을 것이다. 컴퓨터구조, 디지털공학, 컴퓨터공학개론 등은 코딩이 전혀 필요하지 않으면서도 중요한 과목이다.
그래서 내 의견은 컴퓨터공학은 프로그래밍과 다르지만 컴퓨터공학을 공부하면서 프로그래밍 능력도 일정 수준 필요하다고 생각한다. 그 외의 다른 부분은 적성이라기보다 순수하게 노력에 달려있다고 본다.
프로그래밍에 대한 적성
그럼 프로그래밍에 대해 알아보자. 편의상 프로그래밍을 두 가지로 나누겠다. 하나는 알고리즘이고 하나는 개발이다. 단순히 양으로 구분한다면 알고리즘은 100줄 이하의 짧은 코드이고 개발은 1000줄 이상의 긴 코드이다. 컴퓨터공학 1~2학년에는 솔직히 어떤 과목이든 알고리즘이나 개발이라고 부르기 민망한 수준의 코드를 요구한다. 성능보다 구현 자체가 목표인 경우가 많고 대표적인 알고리즘 요만큼(?)만 배울 뿐이다. 컴퓨터공학 후반에 갈수록 복잡한 알고리즘이나 개발에 대한 기법을 배우게 된다. (그런데 나는 컴퓨터공학 초반밖에 안 배워봤다..)
알고리즘을 필자의 기준으로 나눠보겠다. 가장 먼저 문제 해석능력이 필요하다. 가장 기본적이면서도 은근히 놓치는 경우가 많다. 재능의 영역은 아닌 것 같다. 그 다음으론 문제 해결 능력이다. 코드를 작성하기 전에 이론상으로 점검하는 부분으로 코딩보다는 수학적인 능력이 어느정도 필요하다. 마지막으로 구현능력이다. 이론으로 구상했던 내용은 실제 코드로 구현하는 단계로 꼼꼼해야하며 자연어 혹은 머릿속에 있는 내용을 코드로 바꿀 수 있어야 한다. 필자가 생각하는 적성이 갈리는 요인은 문제해결 능력의 일부와 구현력인 것 같다.
마지막으로 개발은 대량의 코드를 관리할 수 있는 능력이 필요하다. 당연한 얘기지만 1000줄, 10000줄이 넘는 코드를 하나의 파일로 관리하지 않는다. 마찬가지로 하나의 흐름으로 관리하지 않는다. 다행히 이에 관한 이론(디자인 패턴)이 어느정도 정리되어 있고 우리는 그 중 선택을 하면 된다. 하나의 프로젝트에 여러 가지 디자인 패턴이 필요하고 결코 쉽지 않지만 일단 이것은 논외로 치자. 개발에 대한 재능은 컴퓨터'공학'을 시작하는데 큰 영향을 미치지 않는다고 생각한다.
개인적인 생각으로, (수학, IQ테스트 등)문제 풀이에 대한 오기가 있고 꼼꼼한 성격이라면 꽤 높은 확률로 적성에 맞을 거라 생각한다.
'공부' 카테고리의 다른 글
컴퓨터공학과 대외 활동 (21.07.24.) (0) | 2021.03.03 |
---|---|
코딩은 Hello, World! 가 전부라고 생각한다. (2) | 2021.02.06 |
안드로이드 공부가 끝나면 무엇을 공부할까? (0) | 2020.11.19 |
카카오톡 클론 - 이미지 크기 (0) | 2020.11.02 |
코드에 대한 올바른 질문 - 코딩 질문 (2) | 2020.06.28 |