Skip to main content

글로벌소프트웨어를 꿈꾸다 를 읽고나서

글로벌 소프트웨어를 꿈꾸다

이 책은, 앞으로 한국의 소프트웨어 회사에서 지향해야 할 것이 아주 자세히 기술되어 있다.
책의 내용은 아주 간단하다. 1)코딩하기 이전에 SRS를 적고, 2)소스관리시스템, 3)이슈(버그)관리시스템을 사용해야 한다는 것이다. 너무 쉽고 너무나도 잘 알려져 있는 사항이다. 그러나 그 것을 제대로 실행하고 있느냐가 문제이다.

본인은 일본에서 8~9년 가량 유학생활을 하면서, 파트타임으로 일본의 중소기업 (50명이내)에서 소프트웨어를 개발해 왔다. 그러나, 그들의 일하는 패턴은 저자가 서술한 실리콘밸리에서의 근무형태와 비슷했다. 사업이 시작되면 먼저 매니저가 고객과의 회의를 통해 전체적인 분석을 하고 문서화한다. 그리고 그 문서를 가지고 다시 고객을 찾아가 토의한 다음 문서를 보다 더 구체화시킨다. 최종적으로 고객과의 합의 된 문서를 기반으로 소프트웨어를 설계하기 시작한다. 설계가 어느 정도 되면 다른 엔지니어와 함께 토의를 몇 차례 거처 설계문서를 완료한다. 이 단계가, 전체 공정 중 거의 절반(50%)이다. 그 다음은 사내 인력과 외부인력 (아르바이트포함)으로 실제 코딩작업에 들어간다. 이 작업이 전체공정 중 약 3분의 1를 차지하게 되고, 나머지는 납기일까지 unit테스트, 통합테스트를 거쳐, 개발이 완료되고, 고객에게 납품을 한다. 여기서 프로젝트의 모든 업무가 완료된다.

이 회사의 규모는 우리회사와 비교조차 되지 않는다. 년간 매출이 100배 이상 차이가 난다. 하지만, 그들의 업무형태와 효율은 우리보다 상당히 뛰어나다. 우리가 앞으로 지향해야 할 것은 너무나도 뻔하다.a

우리나라사람들은 초등학생 때 바른 생활이라는 교과목을 배운다. 그 내용은 너무나도 간단한 것 부터 시작한다. 어른들을 만나면 공손히 인사를 한다. 길에 쓰래기가 버려져 있으면 주워서 쓰레기통에 버린다.
등등. 우리는 이런 사실들을 잘 알고 있다. 하지만 잘 지키고는 있지 않다. 오히려 어떤 이가 그 행위들을 잘 지키면 뉴스나 신문에 나오기도 한다. 이상한 세상이다. 당연히 해야 할 일을 하면 어리석어 보이고, 오히려 지키지 않는 이들을 추종하는 이들이 많은 현실이 안타까울 뿐이다.

한편, 저자는 엔지니어는 중간에 관리직으로 이전해서는 안 된다고 기술하고 있다. 이미 선진국에서는 관리직으로 이전하는 이들이 적다. 이웃 나라인 일본만 하더라도, 백발이 된 50세 이상의 베테랑 엔지니어들이 많이 근무하고 있다. 그들은 젊은 엔지니어들의 활동량에는 비길 수 없지만, 그들의 경험, 노하우, 견지능력은 놀랍다. 그러나 그들이 젊은 엔지니어들 보다 신 기술 습득능력이 뛰어나다라고 말할 수 없지만
말이다. 실례로 내가 일본회사에서 뭔가를 개발하고 있을 때, 이론과는 달리 잘 해결되지 않는 프로그래밍이 있었다. 그 상황을 베테랑 엔지니어에게 설명한 후 조언을 구하니, 아주 쉽고 명료한 해결책을 가르쳐 주었다. 그 것은 그가 나보다 기술이 좋아서가 아니라 많은 유사한 경험이 있어서 이다. 결국 연구 및 개발에서는 그 기술과 도구가 변하더라도, 본질적인 내용은 불변하기 때문이다. 마치 우리 인간이 태어나서 죽을 때까지의 행위의 본질이 원시인이던 현대인이던 같은 것과 같이 말이다.

저자가 주장하고 있는 사항들은 이미 선진국에서 증명되었다. 이제 이 문제는,
그 것을 우리들도 하던지 아니면 이전과 같이 비효율적으로 할 것인지를 결정하는 것이다.
그 결정권은 한국회사의 형태상 경영자에게 있고, 그 판단이 내려지면 하위 조직원들은 그 지시를 따라서 보다 더 나은 제도를 만들어야 할 것이다. 하루 빨리 우리도 기타 선진국들과 같이 엔지니어가 일하기 좋은 환경이 구축되었으면 하는 바램이다.

Comments

Popular posts from this blog

Linux Resources Monitoring

dstat Requirements:python Dstat is a versatile replacement for iostat, vmstat and ifstat http://linux.softpedia.com/get/System/Diagnostics/Dstat-1401.shtml  - download the source file  - tar -xvjf dstate-0.7.2.tar.bz2  - cd dstate-0.7.2  - sudo make install 사용법 dstat -cdngys --top-io-adv --top-bio-adv 창넓이가 크면 dstat -cdngys --top-io --top-bio dstat 기본옵션은 -cdngy 2. pktstat requirements: libpcap-devel, ncurses-devel pktstat man page 사용법:sudo pktstat -i eth0 -T -l 실행결과 interface: eth0    total: 43.9Mb (3s) cur: 12.3M (78%) min: 12.3M max: 15.8M avg: 14.5M bps    bps    %      b desc   1.4k   0%   4.3k arp  591.8   0%   1.2k ip proto 88 55.101.66.3 <-> igrp-routers  91.3k   0%  91.3k tcp a100236:4478 <-> console:ssh  42.6k   0% 216.4k tcp a100390:mailprox <-> console:ssh   1.1k   0%   ...

nginx로 다중 포트 설정 및 다중 react app 설정

nginx에 다중 포트 설정하기 react로 여러 webapp를 개발하고, 동일한 서버에 실행시킬 필요가 있다. 이때 간단히 nginx에서 다중포트로 여러 webapp를 동일한 서버에서 실행시킬 수 있다. /etc/nginx/sites-available/에 default 파일이 있다. 보통 port 80로 설정되어 있다. 이 파일을 복사해서 sub로 명명한다.   아래와 같이 포트 8080으로 정하고, react app를 build한 디렉터리를 root <dir>로 지정하고, $> sudo service nginx restart 하면 된다. $>sudo systemctl status nginx.service 로 nginx 상태 확인이 가능하면, $> netstat -ano | grep 8080 으로 8080 포트가 살아있는 또는 외부PC에서  $>telnet ip 8080으로 telnet 접속이 되는지 확인하면 된다. 종종 Nginx 500 Interval Server Error가 발생하는데, 이는 1) root <dir>에서 <dir> 주소가 정확하지 않거나, 2) 파일 권한이 없거나이다. chmod 755 <dir>하면 대부분 해결될 것이다. 그럼 오늘도 유익한 하루 되시길..   

SQLITE Result Codes

#define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ #define SQLITE_ERROR 1 /* SQL error or missing database */ #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ #define SQLITE_BUSY 5 /* The database file is locked */ #define SQLITE_LOCKED 6 /* A table in the database is locked */ #define SQLITE_NOMEM 7 /* A malloc() failed */ #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ #define SQLITE_NOTFOUND 12 /* NOT USED. Table or record not found */ #define SQLITE_FULL 13 /* Insertion failed because data...