들어가며
2018년이 시작한지 절반이 지났고, 2018년 상반기 동안 나는 무엇을 배웠으며 느꼈던 생각들을 정리하고 기록하기 위해 작성한다.
나는 무엇을 하는 사람일까?
예전의 나의 모습을 돌아보면 단순히 요구사항을 받아 프로그래밍하는 사람이였다. 그냥 주어진 업무에 대해 개발하고 그 과정에 발생하는 기술적인 문제에만 관심이 있었다. 그러던 와중에 CTO님이 개발자는 무엇을 하는 사람일까?
라는 질문을 받았고, 나는 사람들의 일을 편하게 해주는 사람이라고 대답했었다.
그러나 CTO님은 개발자란 문제 해결을 하는 사람
이라고 알려주셨다.
개발자 == 문제 해결을 하는 사람?
처음에는 그냥 개발 과정에 발생하는 기술 문제를 말하는 거라고 생각을 했었다. 그리고 시간이 흐르고 여러 글과 Meet-up을 참여해보니 시니어 개발자 분들의 생각은 비슷하다는 공통점을 발견하였다. 모두가 기술에 대한 초점이 아니라 문제 본질에 대한 초점을 중시하는 것이다.
구글 인터뷰로 예를 들어보자.
서울에 있는 모든 창문을 청소하는 비용은 얼마일까요?
위 문제는 출제자도 정답을 모른다. 그럼 왜 이런 문제를 낼까? 무엇을 확인하려고 이런 문제를 내는 것일까?
현재 내가 생각하고 있는 이유는 정답을 추측하기 어려운 추상화가 높은 문제를 어떻게 정의하는지, 어떻게 해결하는지 그 과정을 보고 싶어서 그런게 아닌가 싶다. 문제를 어떻게 정의하느냐에 따라 문제 해결 방법 또한 천차만별이다. 몇 일동안 열심히 고민하고 작성한 코드로 문제 해결을 할 수 있지만, 개발을 안하고도 문제 해결을 할 수도 있다.
단순히 기술 관점에서 문제를 바라 보는게 아니라 더 높은 차원에서 문제를 바라보고 문제의 본질을 찾아 해결하라는 의미로 말하신게 아닐까 싶다.
문제 해결을 잘하기 위해서는?
루스탐님뿐만 아니라 많은 분들이 문제를 해결하기에 앞서 문제를 이해하는 부분이 가장 중요하다고 하셨다. 이 문제가 어떠한 배경으로부터 출발했을까? 무엇이 필요하고 무엇이 불필요할까?
그렇다면 문제를 잘 이해하기 위해서는 어떻게 해야 할까?
‘무엇이든지 남에게 대접을 받고자 하는 대로 너희도 남을 대접하라’ - 황금률
우리가 문제를 겪는 사람의 입장이 되어 그들의 바라보는 시각으로 문제를 바라보고 문제를 이해해야 비로소 문제를 제대로 이해할 수 있지 않을까 싶다. 하지만 그 부분이 참 어려운 문제다. 하루 아침 사이에 그들이 될 수는 없으니 말이다. 다른 방법으로는 그들과 커뮤니케이션을 통해 문제에 대한 정보를 얻고 이해하는 방법이다.
아직 나는 문제 이해에 대해 부족한 부분이 많다. 앞으로 고민해보고 노력해야 할 부분이다.
아래의 링크는 나에게 좋은 영향을 준 글이다.
- 소프트웨어 교육을 보는 올바른 방향 - 이민석 교수님
- 자바 직렬화, 그것이 알고싶다 - 우아한 형제들
- 목차와 내용을 잘 정리되어 있어 읽기 쉽고 문제 정의와 해결 과정이 잘 나타나 있다.
커뮤니케이션
처음엔 코드를 이쁘게 프로그래밍만 하면 되는게 아닐까? 커뮤니케이션이 왜 중요한가 싶었다. 하지만 현재 나는 다른 사람들과 커뮤니케이션을 하면서 같이 소프트웨어를 만들고 있다. 결국엔 커뮤니케이션이 잘 안되는 팀이면 자연스럽게 만들어 놓은 기능도 분산되어 존재하고 유연하지 못한 소프트웨어를 만들게 된다.
“모든 시스템은 그 조직의 의사소통 구조와 동일하게 만들어진다.” - 콘 웨이 법칙
다양한 사람들과 얘기를 나누고 그들의 문화를 이해하고 배운게 된다면 문제를 이해 부분에 있어 큰 도움이 되지 않을까? 앞으로 사람들과 커뮤니케이션하려 노력하고 나의 부족함은 언제나 열린 마음으로 받아들이자. 또한 그들의 부족함을 찾아 건설적인 피드백을 주려고 노력하자.
아래의 링크는 나에게 좋은 영향을 준 글이다.
비판적인 사고
언제나 기술에는 빛이 있다면 그림자가 존재하듯이 장점이 있다면 늘 단점이 있었다. 예전의 나는 늘 새로운 기술에 흥미를 느꼈으며 배워보고 적용하고 싶었다. 이 과정에서 기술의 단점은 늘 잊어버린채 진행하게 되었다. 처음에는 좋았으나 보이지 않던 문제들이 등장하게 되고 결국엔 다시 구글링으로 돌아와 검색하게 되는 상황을 반복하게 되었다.
그러면 어떻게 위와 같은 실수를 반복하지 않을까?
Nudge라는 책을 읽고 생각이 많이 바뀌게 되었다. 우리가 선택하는 모든 옵션이나 사용하는 물건들은 제작자들의 고민을 통해 설계되어 나온 사실이라는 것이다.
그냥 아무런 생각없이 선택하고 사용하기보다는 왜 이렇게 했을까? 어떠한 고민을 통해 이런 결정이 나왔을까? 문제점은 없을까? 이런 고민을 한번이라도 하게 된다면 사용하는 부분에 있어서도 훨씬 이해도가 높고 활용도 또한 좋아진다. 더 나아가 문제점을 찾아 고쳐보기도 한다.
아래의 링크는 나에게 좋은 영향을 준 글이다.
글로벌
이전에는 글로벌의 글자도 생각을 해본적이 없었다. 그냥 단순히 사람들이 많이 사용하면 만족했다. 과제를 진행하던 도중에 한국 서비스를 외국에도 서비스해야 한다는 요구사항을 받게되었고 많은 고민과 노력이 필요하다는 것을 느꼈다.
우리나라에서는 대부분 하나의 인종과 언어, 같은 시간대에 존재하기 때문에 발생하지 않았던 문제들이다. 다른 나라, 문화, 인종, 시간등이 포함하게 되면 문제는 훨씬 복잡해진고 어려워진다.
유연한 소프트웨어를 만들기 위해 어느 부분까지 고려해야할까?
고민이 더 깊어지는 계기가 되었다.
아래의 링크는 나에게 좋은 영향을 준 글과 동영상이다.
소프트웨어 가치
내가 만드는 소프트웨어가 사람들에게 어떤 가치를 전해줄까? 소프트웨어 가치가 명확하고 사람들이 좋아해준다면 나는 가치를 지켜내고 싶은 마음이 생겼다.
더 나아가 더 이상 Google, Naver, Kakao가 만드는 소프트웨어가 과연 그들의 소유일까?라는 생각도 든다. 당장 내일 지도, 지하철, 검색, 유튜브가 사라진다고 생각하면 사람들은 어떻게 받아들일까? 이미 우리의 삶 속에는 많은 소프트웨어가 동작하고 있으며 우리는 더 이상 소프트웨어 없이는 살아갈 수 없는 존재가 되어버렸다. 그렇기에 내가 만드는 소프트웨어 가치에 대해 더 신중하고 고민해야 할 것 같다.
아래의 링크는 나에게 좋은 영향을 준 글이다.
정리하며
2018년이 시작한지 6-7개월동안 많은 것을 배웠고, 남은 기간동안 앞으로 많은 것을 배워가려 한다. 2018년도 마지막까지 지식의 부족함을 채우고 겸손하고 노력하자.
세상에 정해진 정답은 없었다. 정답은 사람들과 함께 만들어 간다는 사실을 기억하자.