Post

[BOOK]IT개발자의 거의 모든 것

IT개발자의 거의 모든 것

책을 읽다가 대부분이 PM(Product manager)과 관련된 내용이어서 현재의 나에게 필요한 내용이 아닌 부분은 과감하게 뛰어넘으면서 읽었다.

Part1.입문편

  1. 개발자로 살아남기

실시간 기업이란 무한 경쟁사회에서 회사들이 빠르게 급변하는 세계의 트렌드에 초 단위로 실시간 대응을 하는 시스템을 말한다. 어떤 특정 시스템을 지칭하기 보다는 현대 사회의 기업에는 변화의 속도가 중요함을 강조하기 위해 사용되고는 한다.

“대학에서 배운 것은 다 쓸모없어”

개발 초년생이 취업을 앞두고 가장 많이 듣는 말 중 하나일 것이다. 절반은 맞고 절반은 틀린 말이다.국내 개발자는 해외 개발자들만큼 전문적인 분야가 세분화되어 있지 않기 때문에 여러 가지 개발을 도맡는 경우가 많기 때문이다. 이런 소프트웨어 개발환경에서 국내 학사과정에 문제는 없는지 짚고 넘어가보자. 이 문제점을 정확히 알아야 자신의 진로를 효율적으로 설정할 수 있을 것이다. 대학에서 기업이 요구하는 수준의 개발자를 양성하는 데는 구조적으로 문제가 많고, 미래의 젊은 개발자들은 확실한 정보나 구체적인 가이드가 없이 사회로 나오게 된다.정보 부재로 인한 시간 손해 또한 흔히 있는 일이다. 대학교에서 실무나 업계에 대한 상황을 접하지 못한 학생들은 인터넷이나 선배들이 전해주는 정보에 의존할 수밖에 없다. 이런 경우 왜곡된 현실을 접할 가능성이 매우 높다. 씁쓸한 현실에서 위안을 찾자면 모두 출발점은 동일하다는 데 있다.

‘기술’보다 더 중요한 것은 ‘꿈’ 학사과정에서 중요한 것은 무언가를 배우기보다는 무언가 새로운 것을 만들어보고 싶다는 꿈을 갖는 것이다. 개발자는 무언가를 만드는 창의적인 직업이다. 개발자에게 꿈이 없으면 뭔가를 만들고 ㅅ깊다는 열망을 가질 수가 없다.자신의 열정을 되살려줄 꿈이 바탕이 되지 않고는 개발자로서, 기술자로서 큰 성취를 이룩하기 쉽지 않다. 그만큼 끈기가 필요한 길이고 평생을 공부하지 않으면 나아가기 쉽지 않은 길이기도 하다.국내 대학교의 학사 시스템과 커리큘럼은 개발자 양성에 있어서는 몹시 비효율적이다. 졸업 할 때까지 IT 서비스 제작을 한번도 체험해 보지 못한다는 것은 참으로 안타까운 일이다. 개발자의 기술력은 책을 보고 지식을 습득하는 것만으로는 높아지지않는다. 반드시 체득의 과정이 있어야 한다. 수영을 예로들어 책으로만 수영을 배운 사람이 실제로 수영을 잘한다고 볼 수 있겠는가? 이론을 이해하고 외우는 것과 직접 해보는 것에는 큰 차이가 존재한다. 개발 또한 그렇다. 책을 보고 지식을 얻는 과정만으로는 기술력을 쌓을 수 없다. 직접 몸으로 부딪치며 개발해보는 과정이 반드시 필요하다.

개발자의 성장 그래프 개발자의 대부분은 학사과정을 거쳐 사회로 나오지만, 늦은 나이에 소프트웨어 개발을 시작하는 사람들도 많다. 그만큼 진입장벽이 낮다는 얘기다. 특정 자격증이 없어도 되고, 학벌도 중요하지 않으며, 국비지원 교육들도 있다. 하지만 도중에 자신의 적성과 맞지 않아서 그만두기도 하고 끊임없이 공부를 해야 하는 현실을 버겁게 여기고 포기하기도 한다. 실력이 뛰어난 어린 친구와 일을 하다가 기술격차로 인한 자격지심을 이기지 못하고 그만두는 사람도 있다. 저자는 이러한 상황을 볼 때마다 안타까워 했는데, 끊임없이 노력해서 기술력을 쌓는다면, 그 결과에 배신당할 일이 엊ㄹ대 없는 직종이기 때문이다. 자신이 뛰어난 개발자라면 어떤 프로젝트이든 내가 속한 프로젝트가 즐겁고 안정적일 가능성이 높다. 자연히 인간관계도 좋아질 것이며, 성취감 또한 높아질 것이기 때문에 삶의 질도 훌륭해진다. 그렇다면 뛰어난 개발자란 어떤 사람을 말하는가?

image

기술력은 처음부터 직선으로 상승하지 않는다. 기술력이 쌓일수록 구글링이나 책을 통해 지식을습득하는 쓸데없는 시간이 줄어들고 자신이 알고자 했던 기술만 집중적으로 습득할 수 있는 능력이 생긴다. 또 어느 정도 전반적인 기술을 이해하게 되면 신기술잉나 미처 체특하지 못한 기술들도 훨씬 빠른 속도로 습득할 수 있다. 개발 초년생의 심적부담감은 정말 이루 말할 수 없을 것이다. 기술은 마치 무협지 주인공들의 무공처럼 윗사람들에게 금세 낱낱이 까발려지기 때문이다. 해당 그래프의 점선처럼 기술 성장을 이루어낼 수 있을까? 당연히 가능하다. 쉽지는 않지만 불가능하지 않다. 개발자가 중요시해야 할 요소는 코딩이 아니라 매력적인 서비스로 개발자로서 회사라는 조직에 몸을 담고 맡은 과제를 수행한다는 것은 결국 서비스를 구현한다는 의미이다. 이 쉽고 단순한 진리에 따라 프로젝트에 임하는 자세로 프로젝트가 갖는 정체성을 정확히 판단하고, 해당 부분에서 일을 수행할 때 필요한 요소를 능동적으로 처리하면 쓸모 없는 시간을 빼앗길 필요가 없다. 개발 능력에 대한 정의를 완전히 다시 이해할 필요가 있어 보이지 않는가? 저자는 기술력과 개발력을 구분해야 한다고 생각한다. 어떤 개발자의 개발력은 기술력만으로 평가할 수 없다. 어떤 프로젝트를 수행할 때 개발자는 한두 가지 능력만으로는 일을 제대로 수행할 수 없기 때문이다.

한발짝 더 나아가기 위한 다섯 가지 기술

  1. 개발 기술력 프로젝트를 수행할 떄 없어서는 안될 필수 요소이다.기본 적으로 개발 툴에 대한 이해도가 높아야한다.
  2. 커뮤니케이션 능력 기획안이나 디자인적인 부분을 개발 측에서 모두 수용할 수 없는 일이 다반사다. 개발 일정을 고려하지 않고 적용된 수많은 요구 사항에 대해서는 개발자가 현업에게 최대한 쉽고 납득할 만한 논리로 부드럽게 논리적 반론으로 대응하는 것이 중요하다.
  3. 리더십 개발자에게 리더십이 없다면, 팀이 흔들릴 가능성이 커진다. 리더는 다른 말로 표현하면 손해 보는 자이다. 누군가에게 따르고 시은 마음을 얻는 사람은 대체로 무언가 가치 있는 유무형의 요소를 나누어 주는 경우가 많다.
  4. 개방성 많은 개발자들은 자신이 가진 기술을 맹신하고, 잘 모르는 기술은 무조건 배척하려는 경향이 있따. 그 마음의 저변에는 다른 라이브러리나 개발 기술을 도입할 경우 지금도 힘겨운 일정이 더욱더 힘들어질 수도 있다는 자기방어적인 ㅣ유가 섞여 있다. 새로운 것을 받아들일 때 또다시 공부해야 하는 부담감 떄문에 기피하는 경우도 있따. 이는 피해서 될일이 아니다. 새로운 걳을 도입해보려는 개발자의 용기가 필요할 뿐이다.
  5. 잉여력 저자는 위 네가지 보다 이 잉여성을 더 중요하게 생각한다. 잉여성은 행복에 관한 힌트를 제공한다. 많은 개발자들은 개발이라는 분야에 대해 제법 즐거움을 느끼고 있다고 말한다. 결국 개발이라는 행위 자체가 개발자에게는 놀이가 될 수 있다는 이야기다. 이런 개발자들은 시간이 남을 때 휴식을 취하다가 싫증을 느끼면, 평소에 관심은 있었으나 보지는 않았던 신기술 개발 서적을뒤적거리기 시작한다. 개발자에게 놀이이자 공부인 개발은 남는 시간에 하는 트레이닝이자 새로운 시익원으로 ㅕㄴ모한다. 이 잉여력 넘치는 개발물은 오로지 자기만의 영역이기 떄문에 유쾌함을 안겨준다.잉여력이 어떻게 프로젝트에 필요한 능력이 될 수 있냐는 의문이 들 수도 있다. 필요한 능력이라기보다 그런 상황을 만들어 내는 능력이라고 해야 맞겠다.프로젝트에서 여유롭게 개발을 마무리한 개발자는 남는 시간에 휴식을 취하며 시간을 보낼 수 있다. 우리의 뇌는 컴퓨터처럼 작동하지 않아 프로그램 작성이 완료되자마자 곧바로 고도화하고 버그를 찾아내 수정할 수 없다. 또 지쳐 있는 뇌는 지금 당장 문제가 발생하지 않으면, 깊숙한 곳에 숨어 있는 버그를 발견하고도 수정하지 말아야 하는 이유를 스스로 만들어낸다. 휴식시간 동안 충붆리 여유를 취한 후에야 뇌는 비로소 이 버그가 근본적인 문제점을 가지고 있다고 느끼고, 모듈을 수정할 수 있는 잉여ㅑ력을 발생시킨다. 이는 아주 탄탄한 개발물의 토대가 된다.

시간쪼개기 공부에는 왕도가 없듯 개발자에고도 왕도는 없다. 그저 수많은 서비스(회사에서 진행하는 프로젝트 뿐만 아니라 자신만의 서비스)를 스스로 개발해보는 것밖에 방법이 없다.보통 일반 업무 개발자로 프로젝트에 참여한다면 전체적인 설계나 분석과 같은 머리 아픈 역할은 수행하지 않는다. 프로젝트에 사공이 많아져 ㅅ자칫하면 산으로 갈 수 있기 떄문이다. 하지만 개발자들이 아무런 문제를 제기하지 않고 프로젝트가 진행됐다면, 마지막에 가서는 야근에 시달릴 것이다. 이를 피하는 앞서 나온 특성들을 가진 사람들은 탁월한 프로젝트 관리 능력 덕분에 잉여 시간을 많이 누리게 된다. 여기서 주목할 사실은 개발자가 단지 기술력과 일 처리능력이 탁월해서 잉여시간을 만들어 낸게 아니라는 것이다. 성실하고 끈기 있는 사람이 자신의 무기를 꾸준히 갈고 닦아 기술력을 높임으로써ㅏ 그 잉여력을 쟁취해냈다고 말하는게맞다. 앞서 보여준 그래프에서 점선 그래프의 성장 패턴을 갖게 되면 관리자의 기대치를 항상 상회하면서 상급자가 주는 높은 기대치에 대한 스트레스에서도 벗어날 수 있다. 이것은 특정한 사람에게 국한된 이야기가 아니라 누구에게나 가능하다. 개발자의 기술 발달의 핵심은 결국 시간 쪼개기에서 나온다고 볼 수 있다. 이를 다시 말하면 꾸준함이라고 표현 가능하다.최대한 자기 체력을 유지하고 잉여력을발산해야 한다. 칼퇴근을 하는 것과 회사에서 틈이 날 때 쉬는 것을 두려워하지 말아라. 당신이 개발자인 이상 회사에서 노는 것이 단순히 노는 것이 아님을 명심하라.

Part2. 심화편

  1. 내 손으로 구현하는 상상 속의 기술

개발자라면 인공지능과 친해질 것.

전문가 시스템(experts ststem)은 인간이 쌓아온 전문가적인 지식을 컴퓨터가 활용할 수 있는 빅데이터 집합으로 정제한 것을 의미한다. 영화 <아이언맨>에 나오는 인공지능 운영체제 ‘자비스’가 전문적인 지식을 빠르게 분석하고 알려주는 작용은 전문가 시스템의 방대한 데이터양 덕분에 가능하다. 그러나 전문가시스템에서 다루는 지식은 단순히 전문적인 데이터만을 의미하지 않는다. 한때 ‘심심이’라는 챗봇은 전문가 시스템의 일부를 흉내낸 것인데, 방대한 양의 질문에 대한 답변을 미리 적재해두고 해당 질문이 들어오면 앵무새처럼 반복하는 인공지능 챗봇이다.

퍼지논리(Fuzzy Logic) 보통 아날로그 감성이라고 부르는 인간의 영역은 binary형태로 나뉘는 디지털 환경과는 다르다. 이를 설명하기 위해 나온 논리인데, 우리가 사는 세상은 1과 0, 또는 흑과 백이라는 이분법적 논리로 구분해서 묘사하거나 인식할 수 없는 애매모하한 것(이른바 Fuzzy)들로 구성되어 있다. 하지만 인간이 느끼는 애매모호한 영역을 디지털로 범위화해서 더 부드럽게 가다듬으면 컴퓨터도 의미를 이해할 수 있을 것이다.이런 규칙을 더 확장하여 0과 1사이에 수많은 선택지가 존재하는 것을 인정하면 이것을 집합이란 개념으로 두루뭉술하게 판단하도록 다듬는 것이 가능하다. 한 명이 ‘달다’고 하는 기준은 주관적이지만 천명의 의견이 모이면 그 집합은 객관적이라고 볼 수 있는것과 같다.

기계학습(machine learnning)

인공신경망

유전자 알고리즘(Genetic Algorithm) 스스로 진화하는 연산체계라는 느낌이 강하다. 위의 시스템들은 아무리 정교하게 잘 만든다고 해도 시간이 흐르면 금세 구식이 되어버린다. 그렇다면 어떻게 하면 컴퓨터도 성장할 수 있을까? 그것을 연구하는 분야가 바로 이 유전자 알고리즘이다. 유전자 알고리즘은 별도의 시스템에서 비용,시간,인력 등을 지속적으로 가중 판단하여 비효율적인 지점을 찾아내고 그 비효율 영역을 자동으로 기존 시스템에 부가적인 판단 정보로 주입하면, 그 시스템은 최소한의 자원으로 최대한의 효율적인 판단을 스스로 작용하고 진화하게 된다. 이때 프로그래밍의 화두는 진화 요소를 스스로 자신의 시스템에 패치할 수 있는가이다.

인공지능이 더욱 강력한 위력을 발휘하는 부분은 인간의 보조 도구로의 진화이다.인간이 컴퓨터를 조작하거나 회사의 업무를 수행할 때 사용하는 업무 보조 도구로서의 인공지능은 그간의 업무 효율을 극적으로 높인다. 제한적 판단 지령을 이용한 인공지능 업무보조는 사용자의 지루한 소모 작업을 대폭줄여준다. 인공지능이 극적으로 발전하면 이제 인간은 키보드와 마우스에 작별을 고할 수도 있을 것이다.

빅데이터가 주도하는 세상. 빅데이터는 IoT의 센서 데이터가 대량 생산되고 대량 소비되는 미래 사회에 진정한 힘을 발휘할 것이다. 지금 빅데이터라고 부르는 분야는 딱히 새로울 것이 없다. 대량으로 쌓여있는 과거의 데이터를 의미있는 총합으로 둔갑시키는 다분히 영업적인 기능을 하고 있다.빅데이터라고칭할 수 있는 데이터가 센서에 힘입어 마이크로 데이터까지 확장되자 그 가능성을 높게 산 업계들의 기대감이 부풀고 있다. 하지만 센서와 같은 사물 데이터들이 이제 막 등장했기 때문에 아직은 그영향력이 그다지 크지 않다. 센서 데이터가 충분히 쌓이기 시작하면 상화은 달라질것이다. 센서데이터만 놓고 보면 별볼일 없는 데이터 지만 여러 군데 뿌려지고 오랜기간 쌓이면 대단히 의미 이쓴 데이터가 될 것이다.결국 IoT로 조밀하게 구성된 스마트 센서 시스템이 오랜 기간 축적한 데이터가 빅데이터와 결합해 우리 사회를 유동적인 ㄷ주체들로 바꾸어놓을 것이다.

개발자는 상상을 현실로 만든다 앞서 설명한 신기술들은 결국 기존의 기술들을 적절히 조합하거나 새로운 환경에 편입시키면서 확장된 시스템일 뿐이다.그러니 어렵게 생각하지 말자. 세상에 존재하는 많은 개발자들은 기계가 대체할 수 없다. 그 기계조차 개발자가 만드는 것이기 떄문이다. 상상하는 모든 것이 현실이 되는 세상. 개발자가 있기에 가능한 세상이다.

ETC.

객체지향의 사실과 오해 라는 도서와 비슷한 문구가 적혀있었다.

데이터 직군을 꿈꾸는 나에게 특화된 책은 아니다. 하지만 ‘개발자’라는 타이틀로 해석하자면 나에게도 유의미한 조언을 해주는 책이었다.

This post is licensed under CC BY 4.0 by the author.