JHB의 프로그래밍 삽질기

대학을 졸업한 소프트웨어 개발자에게 중요한 능력 본문

PROGRAMMING/Essay

대학을 졸업한 소프트웨어 개발자에게 중요한 능력

roter 2013.04.26 15:00

 

자기를 전문적인 소프트웨어 개발자(프로그래머)라고 부를려면 무슨 능력이 필요할까

어플 하나 만들고 나는 개발자다!우왕ㅋ굳ㅋ 하면 뭐하러 대학 4년동안 소프트웨어를 전공한걸까

 

안타까운건 내가 중요하게 생각하는 능력은 대학 4년 다닌다고 저절로 생겨나지 않는다.

대학 4년을 다니면 세상을 보는 안목이 늘고 도전정신 등이 더 투철해 질 수는 있지만, 그만큼 학과 공부를 하는 등 다른 활동을 하느라 소프트웨어 공부만 깊게 해볼 수는 없는 노릇인 듯 하다.

 

그렇다고 대학생 개발자에게 높은 개발역량을 요구하는 것도 초중고 10년 교육을 막 받고 개발현장에 투입된 사람에게는 무리수인듯.

그렇다면 이제 막 대학을 졸업하고 산업 현장에 발을 내딛은 당신이 소프트웨어를 잘 하는 개발자가 되고 싶다면 무엇을 해야될까?

내가 생각해는 우선 순위를 매겨보았다.

 

1. 알고리즘

1. 협업 능력

2. 설계 능력

3. 가독성 좋은 코드

4. 어깨 너머로 배운 호기심어린 지식들을 실천해보는 도전정신

5. 열정

 

일단 하나씩 보자.

1. 알고리즘

협업 능력과 함께 가장 중요한 1순위로 꼽았다. 잘하면 잘할수록 좋다. 부족함이 없다. 소프트웨어 규모가 커질수록, 더욱 작은 기기에 들어갈 수록 퍼포먼스가 중요해 진다. Time Complexity, Space Complexity을 고려하여 완벽한(완벽하면 좋겠지만), 행복한 알고리즘을 만드는 것은 우수 개발자가 되기 위한 가장 중요한 요건! 빅데이터를 하건 이미지 프로세싱을 하건, 네트워크 설계를 하건 뭘 하건 간에 알고리즘을 잘 하는 사람이 그 분야를 움직인다. 이미지 프로세싱을 통한 얼굴 인식을 위해 PCA 알고리즘을 사용했는가? 다른 누군가 만든 알고리즘을 그대로 사용해서 더 나은 성능으로 개선 했는가? 만약 당신이 알고리즘 구현 능력이 뛰어나다면, 직접 만든 알고리즘으로 얼굴 인식 성능을 개선 시킬 수 있을 것이다. 다른 모든 분야에서 마찬가지다. 쉽게 예를 들면, 빅데이터 2년동안 전공했다고 우쭐해 봤자 결국 남이 만든 알고리즘이나 기법을 사용할 뿐이다. 결국에는 알고리즘 잘하는 개발자가 반년 동안 빅데이터를 공부해서 구현 할 수 있는 범위가 더 넓다.(약간 비약이 있지만 알고리즘이 그만큼 중요하다는 얘기)

만약 내가 회사 사장이고 소프트웨어 개발자를 뽑아야 하는 상황에서, HTML5, JSP, MFC, Android, Kernel, OpenGL 등을 잘 다루는 개발자A와 저런 툴은 아직 다룰줄 모르지만 알고리즘 능력이 탁월하게 뛰어난 개발자B가 있다면 나는 볼 것도 없이 개발자B를 선호할 것이고 더 높은 연봉을 줄 것이다.


 

1. 협업 능력

이건.. 중요하다기 보다는 기본 중의 기본이다. git, svn도 안쓰면서 전문 개발자라고 말하고 다니면..음..(경력있는 개발자 중에서도 두루 있다고 한다!).. '그건 전문 개발자가 아니야. 그냥 개발을 할 줄 아는 사람이야' 싶다. 심지어 개발을 할 줄 아는 사람들 중에서도 협업 잘하는 사람 찾는건 힘든일이 아니다. 이정도는 그냥 기본 중의 기본. 이거 할 줄 모르면 당장 구글에 svn 검색해서 튜토리얼 부터 해보도록 하자. 나의 경우는 변수 이름을 정하는데 팀원들과 회의를 한시간 동안 한 적도 있다.(약간 과장) 또한 if( a == 1 )과 if(a==1), if (a==1), if ( a == 1), if(a ==1) 등등은 모두 다르다! (이런 컨벤션은 사소해보이지만 소스길이가 길어지면 매우 중요해진다.). 이건 개발자라고 불리기 위한 기본 요건!

 

2. 설계 능력

사실 이것도 1순위에 두고 싶었지만 1이 세개면 뭔가 변별력이 없는 글 같아서 2로 둠.(사실 이 글은 변별력이 없다). 소프트웨어를 개발 할 때, 개발을 끝내고서 자신이 처음에 설계한 대로 소프트웨어가 나온다고 생각한다면 당신은 천재 개발자이거나 개발을 한두번 밖에 안해봤거나, 너무 작은 프로그램만 만드는 사람일 것이다. 개발을 해 나가면서 '더 나은 방향'이 떠오르는 것은 너무나 당연한 세상의 진리이며, 기간에 맞추기 힘들어서 '더 빠른 방향'으로 진행해야 하는 일도 생길 수도 있다. 힘든 점은, 프로그램의 제작 과정 중에 어느 부분을 바꾸려고 시도하는 것은 굉장히 굉장히 힘든 일이 라는 것이다.

다행인 점은, 당신 보다 먼저 입문한 수 많은 개발자들이 이와 똑같은 과정을 수천억번 거치면서 이에 대한 해결책을 조금씩 내놓고 있으므로 이에 관련된 지식을 찾아보는 것도 나쁘지 않다. 잘 모르겠지만 gof부터 검색해보자. 이건 좋은 개발자가 되기 위한 필수 요건!

 

3. 가독성 좋은 코드

이건 협업과 관계될 뿐만 아니라 개인적인 개발에도 관련된 것이다. 4년전에 짠 코드를 열어서 읽어보자. 뭘 짰는지 알겠능가!? 어디를 고쳐야 하는지 알겠능가!? 모르겠다면 가독성 좋은 코드를 짜지 않은 것이고 알 수 있다면 가독성 좋게 짠 것이다. 더 좋은 방향으로 나아갈려면, 본인만 알아보는 코드가 아닌, 누가 읽어도 이해 할 수 있는 코드를 짜는 것이다. 이 능력을 키우기 위해 가장 좋은 수련은 오픈소스 프로젝트에 참여해 보는 것이라고 생각한다. 사실 이 능력이 좋지 않으면 몇달에 걸친 개발을 하기는 매우 힘들며, 남들과 개발하기도 힘들다. 추천 요건.

 

4. 어깨 너머로 배운 호기심어린 지식들을 실천해보는 도전정신

사실 응용 프로그램 분야야 새로운 기술이 나오는게 크지 않다. MFC, WPF 등 '쉴새 없이' 기술이 쏟아지는 건 아니기 때문에 천천히 쫒아 갈 수 있다. 하지만 서버, 클라이언트, 웹 같은 세계에서는 기술들이 쉴새 없이 쏟아진다.... scala는 뭐지? git는? heroku? 들어 보면 이게 뭔지 궁금해지지 않는가!?? 그럼 어서 검색해서 이게 뭔지 알아보자. 다 도전해보라고는 못하겠지만 적어도 이게 뭔지 알고, 어느 상황에 적용하는지 정도는 꼭 알아야 된다고 본다.

 

5. 열정

두말하면 잔소리. 열정 없으면 소프트웨어 개발 못한다. 부장님의 퇴근 시간에 맞추어 퇴근하려는 눈치퇴근이야 싫겠지만, 문제가 해결되지 않아서 자리에서 일어나지 못하는 것은, 이 문제를 해결했을 때 주어질 엄청난 희열이라는 보상이 있기 때문에 가능한 일이다. 열정적이어라. 과유불급이라지만 이 부분은 과해서 부족할 것이 없다.

 

다들 훌륭한 개발자가 되세용

 

2013년 4월 26일에 작성한 글이지만 생각날때마다 수정 보완 해야겠다.

-

2013년 6월 9일 일부 수정

0 Comments
댓글쓰기 폼