"언어만 배워서 그냥 줄줄 작성하면 되는 거 아니야?"라고 생각하는 도전자들이 많다. 단호히 이야기할 수 있다. "절대 안 된다!"라고. 개발자는 프로그래밍 언어뿐만 아니라 굉장히 다양한 것을 알아야만 한다. 이번 포스팅에서 반드시 배워야 하는 기술들에 대해 열거해보고자 한다. 해당 글은 "커리어 스킬"이라는 책을 보고 작성한 글입니다.
1. 프로그래밍 언어
"뭐야 언어만 있으면 안된다며?" 라고 반문할 수 있다. 맞다. 프로그래밍 언어는 기초단계이다. 하지만 개발자와 떼려야 뗄 수 없는 것이 프로그래밍 언어이다. 더도 말고 덜도 말고 일단 하나만 익히자. 어떤 언어를 배울지 생각하는 것은 그렇게 중요한 일이 아니다. 처음 입문하는 개발자들은 Java, JavaScript, python, C 등등의 뭐가 뭔지도 모르겠는 여러 언어들에 질겁한다. 내가 그랬다. Java와 JavaScript는 같은 언어의 줄임말인 줄 알았을 정도이다. 그리고 모든 것을 다 알아야만 취업할 수 있을 것 같았다. 하지만 아니다! 모든 언어를 겉핥기로 배우는 것은 전혀 도움이 되지 않는다. 하나의 언어를 배우는 것이 좋다. 여기서 중요한 것은 그 언어를 꼼꼼히 배우는 데 집중해야 한다는 것이다. 자신이 나아갈 방향에 필요한 언어 하나를 꼼꼼하게 익히자
2. 코드 구조화
코드 구조화? 이 말은 이 책을 보기 전까지는 생각해보지 못했던 말이었다. 용어 없이 그냥 중요하다고 생각해왔던 부분이었던 것이다. 코드 구조화란 주석 없이도 이해가능 한 코드를 작성하는 것을 의미한다. 코드만 딱 봐도 "아~ 이전 개발자가 이런 걸 원했구나~"라는 게 눈에 보이는 코드라는 것이다. 한 명이 모든 개발을 다 진행하고 절대 누군가에게 코드를 넘겨줄 생각이 없다면 필요 없을지도 모른다. 그런데 내 경험상 내가 작성한 코드도 일정 시간이 지나면 알아볼 수 없다. 주석이 필수적인 상태가 되었다. 하지만 주석 없이도 알아볼 수 있는 코드를 작성한다면 그 개발자는 정말 신으로 보일 것 같다. 생계유지 개발자가 아닌 전문직 개발자 소리를 듣고 싶다면 코드 구조화는 꼭 익혀야 할 기술이다. 저자는 "Code Complete"라는 책을 추천했다.
3. 객체지향 설계
"Java는 객체지향 언어이다." 라는 강의 때 들어본 기억이 난다. 뭔지도 모르면서 그냥 그렇게 받아들였다. 하지만 객체지향 설계는 많은 개발자의 관점이므로 이해해두어야 할 내용이다. 객체지향 설계는 쉽게 복잡한 걸 나눠둔 것이다. 복잡한 구조인 인체를 머리, 팔, 다리, 몸통으로 나누는 느낌이다. 복잡한 프로그램을 클래스와 객체라는 이름으로 나눈다. 그리고 그들의 기능을 캡슐화라는 용어로 묶는다. 클래스와 객체는 각자 특정한 역할과 책임을 수행하게 된다. 머리라는 클래스 혹은 객체는 생각하는 기능을 한다는 식이다. 다형성, 캡슐화, 클래스, 상속 등의 여러 개념들을 익히는 것이 좋다.
4. 알고리즘과 데이터 구조
알고리즘과 데이터구조는 컴퓨터공학과의 주된 수강 학문이라고 한다. 알고리즘은 프로그래밍이나 컴퓨터 공학 관련 문제들을 푸는 방법이다. 예시로 정렬 알고리즘 같은 것이 있다. 굉장히 다양한 알고리즘이 존재하고 이를 다양하게 변형해 가며 문제를 풀어낼 수 있다. 알고리즘을 잘 알고 있으면 어려운 문제도 쉽게 풀어낼 수도 있다. 배열, 벡터, 연결 리스트, 스택, 큐, 트리, 해시, 세트 등의 데이터 구조는 알고리즘과 같이 복잡한 문제를 해결해 내는 데 도움이 된다. 이 부분은 많은 기업의 면접에서 코딩테스트를 진행할 때 보게 된다. 예를 들어 마이크로소프트나 구글과 같은 회사의 면접 때도 이 영역은 아주 중요하다고 한다.
5. 개발 플랫폼
여기서 말하는 플랫폼은 개발 환경이라고 정의되고 있다. 운영체제와 같은 의미로 사용된다. 맥 운영체제를 사용하면 맥 개발자, 윈도우 운영체제를 사용하는 윈도 개발자, 특정 웹 플랫폼을 사용하는 웹 개발자가 그 예시다. 어떤 플랫폼을 선택하는 것은 완전한 자유다. 어떤 플랫폼이든 선택을 한다는 것 자체가 중요하다. 회사가 개발자를 고용하는 기준이 되기 때문이다. 맥에서만 실행하는 프로그램을 개발하는 회사에서 윈도 개발자를 뽑지는 않을 것이다. 어떠한 플랫폼 전문 개발자가 되겠다고 마음을 먹었다면 그와 관련된 전문 지식을 가지는 것이 좋다. 개발 도구나 관용적으로 사용하는 표현들, 프레임워크를 사용할 수 있는 것이 좋다. 특정 프로그래밍 언어는 특정한 플랫폼에서만 사용되는 것이 아닌지 걱정한다면 그것은 아니다. C#의 경우 웹으로는 맥과 윈도, 앱으로는 IOS와 안드로이드, 거기에 나아가서 리눅스와 임베디드 시스템용으로도 사용 가능하다.
댓글