2019. 7. 3. 01:52ㆍ책, 1년에 100권
JAVA 나 앱프로그래밍 관련 책을 대출하려고 도서관의 컴퓨터 공학관련 서적 쪽에서 이책 저책을 훓어 보는 중에 기술 서적 이외에 편하게 읽으면 좋을 것같아 보여 같이 빌렸다. 프로그래머라는 직업으로 살아오면서 체득한 자신만의 공부법, 프로젝트 진행 방법, 실패 사례 등에 대해서 서술되어있었다.
프로그래밍 언어 및 개발 도구
소프트웨어 개발 도구는 프로그래밍 언어 못지 않게 중요한 개발자의 무기이다. 어떤 개발 도구가 더 좋은가에 대해서는 정답이 어렵다. 전문 개발자라면 당연히 업계에서 가장 많이 사용하는 개발도구를 선택하는 것이 좋고, 아마추어라면 자신의 프로그래밍에 도움되거나 앞으로 전문적인 개발자가 되었을때 유리한 것을 선택하는 것이 좋다. 개인적으로 윈도우즈 애플리케이션 개발에는 비쥬얼 스튜디오를, 그리고 iOS와 안드로이드용 애플리케이션 개발에는 각각 네이티브 개발 도구인 Xcode,이클리스를 추천한다.
간혹 iOS/안드로이드를 동시에 개발할 수 있다는 개발 도구들이 나와서 현업 개발자들을 유혹하기도 하지만, 별도의 개발환경이기 때문에 공부해서 익혀야 한다는 것에서는 차이가 없고, 양쪽 플랫폼을 모두 지원하야 하므로 각각의 플랫폼에 대한 세밀한 지원이 어려운 한계가 있다. 더 큰 문제는 수시로 변경되는 OS와 SDK의 업그레이드 속도를 해당 개발 도구가 제대로 따라가면서 지원할 수 있겠느냐는 것이다. 따라서 부지런하고 현명한 개발자라면 한번에 일거양득의 효과를 노리기보다는 각각의 플랫폼에 대해서 정확하게 이해하고 파악하는 데 신경을 쓰는 것이 좋다.
개발 지원 소프트웨어
전문 개발자가 되고자 한다면, 다른 개발자들과의 협업을 위한 소스 관리 도구와 이슈 관리 도구, 효율적인 개발 업무 수행을 위한 문서 관리 도구 등도 잘 활용해야 한다. 더 나은 프로그램 개발을 위해 개발자 커뮤니티나 개발 전문 블로그 등을 정기적으로 구독하면서 최신 트렌드를 익히고 실제 참여하고 있는 프로젝트에 활용해 보자.
● 소스(버전) 관리 도구
소프트웨어 개발시에 작성하는 소스코드나 문서 파일등에 버전을 부여해서 관리하는 프로그램. 소프트웨어가 개발되는 과정에서 변경된 사항과 그것을 수정한 개발자를 추적할 수 있기 때문에 문제 발생시 해당 원인을 쉽게 찾을 수 있다. 소스관리 도구로는 서브버전(Subversion, SVN), CVS, 비주얼 소스세이프(Visual SourceSafe), Git, 토토이스SVN(Tortoise SVN) 등 다양한 프로그램이 있다. 개인적으로 현업에서 많이 사용하는 SVN을 추천.
● 이슈(버그) 관리 도구
프로그램 개발시에 발생하는 이슈를 관리하는 도구. "이슈 트래커"라고 하는데 버그 트래킹 시스템에서 발전된 개념이다. 어떤 문제가 누구에게 발견되어 보고되었고, 그것을 누가 고쳤는지를 상세하게 기록으로 남겨서 관리할 수 있다. 일반적으로 많이 사용되는 이슈 트래커는 트랙(Trac)이지만, 개인적으로는 맨티스(Mantis)를 오래 상요해 왔다. PHP와 MySQL을 조합하여 사용하기때문에 설치 및 운영이 간단하나, 위지(Wiki)나 SVN과의 연동이 불편하다.
● 이미지 편집 도구
간단히 이미지 편집 작업을 해야할 때, 포토샵과 같은 전문 프로그램이 없다면 GIMP(김프)를 추천한다. 포토샵을 대체할 수준은 아니지만 간단한 이미지 편집을 위해 사용하기에는 충분하다
● 문서 관리 도구
대부분 마이크로 소프트 오피스 제품을 사용한다. 이것이 비용적 부담이 된다면 오픈 오피스(OpenOffice.org)라는 오픈 소스 소프트웨어를 추천. 하지만 제대로 편집을 해야 하기 위해서는 어쩔수 없이 MS 오피스를 사용해야함
● 구글 드라이브
소프트웨어 개발을 위한 공유 문서 관리용 클라우드 서비스. 문서를 공유한 모든 사용자가 항상 최신 버전의 문서에 접근가능. 하지만 문서 변경사항에 대한 히스토리 관리가 쉽지 않은 단점이 있다.
프로그래머 (필자의 주관적인 구분)
● 시스템 프로그래머 - 운영체제 레벨에서 직 간접적으로 시스템에 접근하는 프로그램을 개발하는 프로그래머. 하드웨어/소프트웨어 시스템 전반에대해 잘 이해하고 있어야하고, 해당 운영체제에서 제공하는 기능을 잘 활용할 줄 알아야함. C/C++, 어셈블리어 공부를 추천.
● 응용 프로그래머 - 컴퓨터 또는 스마트폰 시스템 상에서 사용자들이 사용할 수 있는 소프트웨어를 개발하는 프로그래머.
● 웹 프로그래머 - 사용자가 웹 브라우저를 이용하여 인터넷으로 웹 서버에 접속해서 구동시키는 프로그램을 개발하는 프로그래머. 다양한 종류의 웹 브라우저에서 구동되는 프로그램을 개발. 서버 플랫폼, 데이터베이스, UI 를 구성하는 HTML, CSS, 자바스크립트 및 플래시 등에 대한 이해, 그리고 JSP, ASP, PHP와같은 개발 언어 숙지, 및 네트워크 기술에 대한 학습 필요
● 서비스형 프로그래머 - 독립적으로 기획하고 개발 및 운영되는 서비스(포털사이트나 게임)를 일반 사용자에게 공급하거나, 특화된 솔루션을 개발하여 특수한 사용자에게 공급하는 프로그램을 만드는 개발자. 즉, 남이 소유하게될 프로그램을 대신해서 만들어주는 것이 아니라 자신들이 서비스하고 운영하게 될 프로그램을 직접 개발
● SI형 프로그래머 - 철저하게 기능직 직종, 자신이 보유한 기술을 제공하고 그에 대한 대가를 받는 형식으로 일함. 정규직 보다는 대부분 비정규직.
프로그래밍 공부를 위한 자세
프로그래머 라는 직업은 평생 공부를 해야만 살아 남을 수 있다.
1. 프로그래밍 공부에 대한 목표와 비전을 확실히 설정
자신이 만들고 싶은 프로그램, 또는 원하는 소프트웨어 개발 업체 취업 등등.
2. 자기 계발 방법 선택 및 수행
한정된 시간을 최대한 활용 할 수 있도록 철저한 시간 관리 필요. 현지 진행하고 있는 일의 중요도에 따라 그 비중을 조절.
프로그램 제작시 진행 순서
1. 확실한 동기 부여
나의 '의지'에만 의존하기보다는 제3자에 의해서 어느 정도의 '강제성'을 띄게 하는 방법을 이용. 소프트웨어 공모전 출품을 목표로 한다던지, 개발비를 받고 프로그램을 만드는 등. 또는 학교나 학원에서 진행되는 프로젝트에 참여.
2. 유사한 프로그램을 벤치마킹
새로운 프로그램을 기획할 때 유사한 프로그램들을 직접 사용해보면서 해당 프로그램의 장단점을 분석하면 본인이 만들고자 하는 프로그램에 대한 구체적인 요구사항을 정리하기에 훨씬 수월해진다. 더 나아가 해당 프로그램들에 대한 사용자들의 리뷰나 댓글 등을 검색하여 요약하는 것도 필요
3. 기획 및 설계도 작성
남들의 이해 여부와는 상관없이 나 자신이 정확하게 이해할 수 있는 형태의 설계도를 만들어 본다. 형식에 구애 받지 말고 가장 효과적인 결과를 만들어 낼 수 있는 나만의 방법을 찾아야 한다. 그것을 표현하기 위한 도구로 워드프로세서나 스프레드시트, 또는 파워포인트 같은 문서 편집기가 될 수도 있고, 사람에 따라서는 연필과 종이만 있어도 충분 할 수 있다. 가장 쉬운 방법은 프로그램을 구현해야하는 화면과 화면 사이의 관계를 정리하는 것이다. UI가 전혀 필요 없는 서버 프로그램이 아닌 한, 프로그램 대부분은 사용자에게 결과를 보여주고 명령을 받기위한 화면이 필요하기 마련이다. 따라서 프로그램에서 보일 화면과 각 화면을 구성하는 구성 요소들을 먼저 뽑아내는 것이 중요하다. 그다음에는 그렇게 정리된 화면들과 구성요소들 사이의 연관 관계를 명확하게 정의해 준다. 그러면 프로그램에 대한 기본적인 설계가 끝난다. 이렇게 정리된 문서를 흔히들 '스토리보드'라고 한다.
4. 구현에 필요한 레퍼런스 준비
개발 방향이 정해지면 그것을 구현하기 위해 여러 이슈(기술적 이슈, 디자인 이슈, 기획 이슈)들이 존재. 개발 서적이나 개발자 커뮤니티 사이트(CodeGuru, CodeProject, Devpia 등), 개발자 블로그, 개발 레퍼런스 사이트 등을 통해 해결 방안을 찾을 수 있다. 최신 기술의 경우 맨땅에 해딩을 해야하는 경우도 있다. 샘플 소스의 경우 라이센스에 대한 확인도 필요하다.
5. 데드라인을 정하여 계획적으로 구현
다소 시행착오를 염두해두고 현실적으로 달성할 수 있는 데드라인을 설정한다. 구현 기능 목록 작성, 구현이 완료 될 때마다 체크
6. 프로그램 공개
프로그램을 공개함으로써 최소한 두가지를 얻을 수 있따. 첫째, 공개를 위해 어쩔수 없이 프로그램의 완성도를 높이는데 신경을 쓸 수 밖에 없게 된다는 점. 둘째, 사용자의 피드백을 받을 수 있다는 점.
7. 사용자의 피드백 수렴
개발 진행시 염두해 두어야 할 것들
● 낙관적으로 상황을 판단하기 보다는 부정적인 요소들에 대해서도 충분히 고려하며 대비해야한다.
함께 일해 본적 없는 팀원 개인의 역량을 정확하게 파악하기는 어렵다.
프로젝트 자체가 가지고 있는 여러 난제는 프로젝트 초기에 완벽하게 찾아내는 것은 어렵다. (진행하는 과정에 튀어나오기도 한다)
● 프로그래밍 공부를 할 때에는 시시각각으로 변하는 시장의 흐름과 기술 트렌드에 빨리 적응하고, 필요하다면 이전까지 사용하던 기술은 모두 버리고 새로운 환경을 배우고 익힐 수 있어야 한다. 그러므로 자기 계발에 소홀하게 되면 금세 시대에 뒤떨어지는 프로그래머가 될 수 밖에 없다.
● 부서장간, 혹은 팀원간의 커뮤니케이션이 중요하다.
업무 협의는 가급적 이메일로 한다. 인간의 기억력은 불완전하다. 사소한 협의 내용도 가능하면 이메일로 관련된 사람들에게 모두 공유하는 습관이 필요한다. 구두 협의를 통한 업무 협의는 차후에 곤란함에 빠질 수 있다.
이슈 트래커를 활용한다.
● 상대방은 '우리는 시행착오를 겪지 않고 곧바로 투입할 수 있는 사람이 필요하다'고 하지만 아쉽게도 수요자들이 원하는 것처럼 모든 조건을 완벽하게 갖춘 후보자를 찾기란 말처럼 쉽지 않다. 그렇다면 조금이라도 자신들의 희망 사항에 근접한 인재를 찾아야 하는데, 바로 그럴 때 좋은 후보자는 '새로운 환경'에 개방적이고 적극적인 태로를 보이는 인재가 될것이다.
● 즉시 전력으로 활용할 수 있는 인재는,
1. 현재의 흐름을 알고 있어야 한다. 매일매일 주요 카테고리의 뉴스 기사 타이틀을 잘 훓어보는 습관과 관심분야의 기사나 곡 읽어야 할 것 같다고 판단되는 뉴스 기사는 선별하여 내용까지 꼼꼼히 챙겨볼 수 있어야 한다.
2. 어디서 찾으면 되는지 정리해 놓는다. 모든것을 다 기억하려하기 보다는 단서를 기록으로 남기고 그것을 이용하여 이후에 원하는 정보를 손쉽게 찾을 수 있도록 하는것이 편하다.
3. 도전 정신을 가져야 한다. '완벽'해야만 비로소 일을 착수할 수 있는 사람들의 딜레마는 '어느 정도가 완벽한 준비인가?'에 대한 기준이 모호하다는 것이다. 실패를 줄이기 위한 준비가 되었느냐에 못지않게 중요한 것이, 비록 준비가 덜 되어 있더라도 그것을 실행에 옮길 수 있느냐의 여부다. 이때 필요한 것이 '도전 정신'인데 이 도전 정신은 예상치 못한 실패에 대한 걱정보다는 그 과정에서 무엇을 얻을 수 있을 것인가가 더 중요한 사람들만이 가질 수 있다.
4. 결정했다면 즉시 실천에 옮긴다.
● 예전처럼 하나의 개발 언어만 제대로 알아도 5년, 10년 이상을 써먹을 수 잇는 시대는 이미 끝났다. 빠르게 변화하는 시대 흐름에 순응하느냐와 도태되느냐의 선택만 있을 뿐이다.
'책, 1년에 100권' 카테고리의 다른 글
지식 제로부터 배우는 소프트웨어 테스트 (0) | 2019.09.24 |
---|---|
월급보다 내사업 (0) | 2019.08.21 |
모두 거짓말을 한다 (0) | 2019.06.13 |
누구나 자료구조와 알고리즘 (0) | 2019.05.07 |
시장의 흐름이 보이는 경제 법칙 101 (0) | 2019.05.05 |