훌륭한 개발자란 무엇일까?

이 부분을 단지 하나의 내용으로 정리하기엔 쉽지 않다.
왜냐면 아직까지 훌륭한 개발자 위인전은 등장하지 않았기 때문이다.

하지만 일반적인 관점이나 견해등은 존재한다.

다음은 내가 개인적으로 생각하는 훌륭한 개발자의 조건이다.
1번부터 중요한 순서대로 적어 내려 가도록 하겠다.


1. 끈기가 있어야 한다.
이건 개발자가 아닌 어떠한 일을 한다고 해도 마찬가지 이다.
어떠한 일도 한순간에 이루어 지지 않는다.
건물을 짓던 요리를 하던 아니면 다른일을 하던지 꾸준히 끈기를 가지고 노력하는 사람이 성공하는 것이 진리이다.

예를 들어서 보자.
높이와 폭이 10 m 인 강에 벽돌(20cm * 20 cm) 을 쌓아서 강을 막는다고 생각해보자.
하루에 벽돌을 하나씩 쌓는다.
그다음날에 하나를 더 쌓는다.
이제 강을 보자 과연 자기가 쌓은 벽돌이 보이는가? (까마득 할것이다.)
저걸 다 막을려면 2500 일이 지나야 한다.
그래야 겨우 벽돌이 수면까지 올라온다.
그 다음부터 벽돌을 쌓아야 결국 눈에 보이기 시작한다.
그때부터는 다른 모든 사람들도 확인할 수 있다.

개발자도 마찬가지 이다.
처음 시작으로는 아무것도 볼 수 없다.
꾸준히 노력하고 개선해 나가야만 자신이 원하는 실력을 키울 수 있고 자신의 프로그램을 올바르게 완성할 수 있다.

대부분의 초급 개발자와 이제 어떤일을 시작하는 보통의 사람들은 이 기간을 버티지 못한다.
(저 기간을 버틴 사람이 바로 일류의 경지에 오르는 것이다.)

지금 당장 개발이 힘들 수도 있다. 그리고 희망이 보이지 않을 수도 있다.
하지만 그렇다고 포기하면 거기서 끝이다. 잊지 말도록 하자.

2. 프로그램으로 이루고 싶은 꿈이 있어야 한다.
이건 두번째 요인이다. 끈기가 아무리 있는 사람이라도 자기가 하고 싶은일을 하지 않으면 오래 버티지 못한다.
즉 개발자(프로그래머)로서 자신이 만들거나 완성하고 싶은 프로그램이 하나쯤은 있어야 한다.
어떤 개발을 하던지 자신의 꿈과 도움이 되도록 그리고 도움이 된다고 생각하며 진행해야 한다.
만약 프로그래머로서 자신이 만들고 싶은 프로그램이 없다면 반성해 보아야 한다.


3. 기초가 튼튼해야 한다.
말이 필요없다. 실력이 증가하거나 점프하려면 무엇보다 중요시 되는게 기본이다.
칼을 쓰지 못하는 요리사가 무슨 소용이 있는가?
축구공을 잘 못차는 축구선수를 누가 쓰겠는가?(골키퍼 제외?ㅡ.ㅡ)

실력이 증가할수록 그리고 보다 많이 알수록 다시 생각해 보게 되는 것이 이 모든것들이 바로 기초에서 비롯된다는 것이다.
특히 요즘에 OOP로 넘어온 이후에도 여전히 C++ 로 C 형태의 코드 구성을 하는 개발자가 많이 존재한다.
그리고 OOP를 바탕으로 해서 보다 많은 이론들이 마구마구 생겨나고 있다.
OOP 뿐만 아니라 기본적인 자료구조, 알고리즘등 프로그래머로서 기초적인 지식이 필요한 것들이 존재한다.

단순히 지금 현상태를 유지하려면 저런것을 생각할 필요없이 그냥 하던대로 하면 된다.
하지만 자신의 실력을 키우고 싶거나 보다 높은 등급으로 가려면 기초부터 차분히 갈고 닦아야 한다.

4. 자신이 담당하는 분야(도메인)에 대한 전문성이 있어야 한다.
사실 이건 어렵다. 하지만 중요하다.
어떤 분야에서 인정받는 개발자가 되려면 해당분야에 대한 관심과 전문성이 있어야 한다.
사실 나도 그렇지만 개발자들이 이부분에서 많이 실수를 한다.
ERP를 개발하지만 ERP의 필요성을 모르는 개발자,
게임을 개발하지만 자신이 만든 게임을 한번도 하지않는 개발자,
어떤 프로그램을 개발하지만 사용자를 전혀 고려하지 않는 개발자 등...

이런 개발자가 프로그램을 개발하면 기술적으로는 화려하지만 사용자가 외면하는 프로그램이 완성된다.
이런 프로그램은 결국 사장된다.

게임으로 보자면 게임성은 무시하고 화려한 그래픽과 특정 기술만 바탕으로 홍보를 하다 사라져간 게임이 몇개인지 생각해 보면 된다.


5. 다양한 분야에 관심이 있어야 한다.
이 부분은 단지 기술적인 부분만을 의미하지 않는다. 보통 사람은 아는만큼 보인다고 한다.
특히 요즘 중요시 되는 창의성은 한순간에 만들어 지지 않는다.
다양한 분야에 관심을 가지고 꾸준히 노력하는 자만이 이러한 창의성과 감성을 지닐 수 있다.
가끔 보면 단지 현실에 안주하면서 자신이 하던거 외에는 신경안쓰는 개발자가 존재한다.
하지만 요즘같은 세상에서는 이런 개발자는 오래 버틸 수 없다.
개발자는 모든 분야, 특히 개발과 관련된 분야에 꾸준히 관심을 가지고 모든 것을 알려는 호기심을 지녀야 한다.
물론 일에 치여서 바쁘지만 책을 많이 보도록 하자.

6. 방법(툴) 보다는 물건(대상) 이 분명해야 한다.
요즘에도 이런거 가지고 싸우는 사람들을 보면 사실 약간 부끄럽다.
개발자가 왜 특정 툴이나 언어에 맹목적으로 집착해야 하는가? 그리고 어떤 언어가 무조건 옳다고 서로 싸워야 하는가?
어떤일을 하는데에 효율적이고 최적인 툴은 물론 존재한다.
그리고 배우기 어렵고 난이도가 높은 툴이나 언어도 존재한다.
하지만 해당 툴이 모든 곳에 적용되는 것은 아니다.
개발자는 프로그램 사용자가 아니다. 프로그램 자체를 만드는 예술가이다.
어떤 물건(프로그램)을 만들어야 한다면 해당 물건을 만드는 데 최적의 방법을 생각하자.
그리고 뭔가를 새로이 배워야 한다면 배워서 만들면 되는 것이다.
단 만약 새로 배워서 작성하는 시간보다 지금 현재 기술로 만드는 시간이 덜 걸리는 단기적인 프로젝트나 프로그램이라면
그냥 지금 현재의 툴이나 언어로 만드는 것이 보다 효율적이다.(이 부분은 7번과 연계된다.)

7. 툴을 다루는 능력도 일정 수준을 갖추어야 한다.
일단 어떤 툴을 뭔가 작업을 진행해야 한다면 해당 툴에 대한 지식과 기술이 있어야 한다.
칼을 쓰긴 하지만 제대로 다루지 못하는 요리사와 칼로 못만드는게 없을 듯한 요리사가 만드는 똑같은 요리가 존재할 때
어떤 요리를 빨리 제대로 먹을 수 있겠는가?
답은 모두가 알고 있다. 알고 있다면 노력하자!!

번외. 제자를 양성할 수 있어야 한다.
사실 이 항목은 넣을지 말지 정말 많이 고민했다.
하지만 내가 쓰는 글은 유능한 개발자가 아닌 훌륭한 개발자에 대하여 쓰는 글이기에 이 항목을 넣기로 했다.
만약 당신이 1 ~ 7의 항목을 어느정도 이루고 완성했다면 해당 방법은 자신의 후임이나 후배 들에게 알려주도록 하자.
가르치는 사람은 배우는 사람보다 최소 5배 이상 많이 공부하고 알아야 한다.
이것은 단지 제자 양성의 목적이 아니다.
제자라는 거울을 통해 자신의 초심을 확인하고 자신의 실력을 다시 갈고 닦는 것이다.(보다 높은 경지를 위해서...)
그리고 그 제자가 다시 다른 제자를 양성해서 전체적으로 등급이 올라가야 한다.
이것이 계속 반복되야만이 해당분야에서 인정받는 개발자가 될 수 있다.
어떤분야에서 인정받는 거장이나 마스터라면 이 부분은 필요악이다.
만약 이런 것이 귀찮거나 할 수 없다면 모든 항목을 갖추었다고 해도 존경을 받기는 힘들다.

 

- by 강태원(Meteor) -

 

출처 데브피아

+ Recent posts