귀찮아서 구글링한데서 긁어왔는데 -_-

이건 0.18 버전이라 지금은 아래의 property 세팅이 core-site.xml 등 여러 conf/ 에 있는 xml 파일들에 나눠져서 들어가 있다

아래 property 들을 잘 세팅해줘야 하고...

 <property>
    <name>dfs.namenode.logging.level</name>
    <value>all</value>
 </property>
 <property>
    <name>fs.default.name</name>
    <value>hdfs://MASTER_SERVER_NAME:PORT</value>
    <description><font color="red"> port현황을 참고하여 중복되지 않은 port번호를 입력 </font>
    </description>
 </property>

 <property>
    <name>mapred.job.tracker</name>
    <value>MASTER_SERVER_NAME:PORT</value>
    <description><font color="red"> port현황을 참고하여 중복되지 않은 port번호를 입력 </font>
    </description>
 </property>
 <property>
    <name>dfs.name.dir</name>
    <value>/home/hadoop/hadoop/filesystem/name</value>
    <description><font color="red"> 하둡 네임노드가 쓸 디렉토리를 지정해준다.</font>
 </property>
 <property>
    <name>dfs.replication</name>
    <value>1</value>
 </property>
 <property>
    <name>dfs.data.dir</name>
    <value>/home/hadoop/hadoop/filesystem/data</value>
    <description><font color="red"> 하둡 데이터노드가 쓸 디렉토리를 지정해준다.</font>
 </property>
<property>
    <name>mapred.map.tasks</name>
    <value>10</value>
    <description><font color="red"> 실행할 map의 개수 </font>
    </description>
 </property>
 <property>
    <name>mapred.reduce.tasks</name>
    <value>2</value>
    <description><font color="red"> 실행할 reduce의 개수 </font>
    </description>
 </property>



마스터 노드에서는 네임 노드를 포맷해줘야 한다

$ hadoop namenode -format

그 뒤에 ./start-all.sh
만약 heap size 때문에 문제가 생긴다면 hadoop-env.sh 에서 heap size 를 적당히 줄여줘야 한다

드디어 hadoop 세팅 완료~!! YAY~

  
트랙백 0  |  댓글 0  |
사실 java 패키지를 다시 설치한게, hadoop에서 세팅이 이상하게 꼬인 상태여서 그렇다
JAVA_HOME path 가 이상하게 되가지고...
내가 임의의 path (/usr/local/java) 에 깔아서 그런가 싶어서 apt-get 으로 다시 깐거다 -.-
default path 는 /usr/lib/jvm/java-6-sun

그리고 ${HADOOP_HOME}/bin/hadoop 에서 258 line (hadoop 0.20 기준) 에
  JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} "${JAVA}" -Xmx32m org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`

이런 line이 있는데, 여기서 ${JAVA} 를 " " 로 싸주시라...
뭔가 뻑이 날 때 요거 때문일 가능성이 있다 -.-

그리고 JAVA_HOME path 는 ${HADOOP_HOME}/conf/hadoop-env.sh 에서 export 를 해주는 값으로 세팅 되니까 괜히 엄한데서 export 하지 마시라...

사실 아직도
***.kaist.ac.kr: Error occurred during initialization of VM
***.kaist.ac.kr: Could not reserve enough space for object heap
***.kaist.ac.kr: Could not create the Java virtual machine.

이런 문제 때문에 hadoop 실행이 제대로 되고 있지는 않다...
아놔 메모리 충분하다고 -_-


  
트랙백 0  |  댓글 0  |
팀메가 apt-get 이 이상하다 그래서 걍 wget으로 java를 받았던건데, 왜 그런지 모르겠다 -.-
지금 다시 확인해보니까 잘 되기만 하는구만... -_-

aptitude는 이번에 첨 써봤다
사용법은 위키에 들어가면 http://en.wikipedia.org/wiki/Aptitude_%28program%29 친절하게 나오고...

$ vi /etc/apt/sources.list 에 가면 source list 를 관리할 수 있다
여기서 multiverse 를 추가해준 뒤
$ apt-get update 를 해줬다

deb http://ftp.daum.net/ubuntu hardy main restricted universe multiverse
deb http://ftp.daum.net/ubuntu hardy-updates main restricted universe multiverse
deb http://ftp.daum.net/ubuntu hardy-security main restricted universe multiverse

$ aptitude 들어가서 / 로 java sun 패키지 찾아서 + 체크, g 로 download...

편하네

  
트랙백 0  |  댓글 0  |
linux에 java 를 설치하려면 일단 내 linux 가 32bit 운영체제인지 64bit 운영체제인지 확인을 해봐야 한다

# uname -a
Linux ***.***.**.** 2.6.24-24-openvz #1 SMP Tue Aug 18 18:49:39 UTC 2009 x86_64 GNU/Linux

아하, x86_64 이라고 써있는 것을 보니 64bit군..
참고로 32bit 일 경우에는 i486, i586, i686..  과 같이 나온다

그럼, http://java.sun.com 에 접속, download 페이지로 간다
JavaSE JDK 6 를 다운 받는다
운영 체제 선택 시 당연히 Linux 64 로 선택..
다운로드 받는 링크를 복사한 뒤 shell 에서 wget 으로 받는다

그 뒤에는 알아서 설치를 쭉쭉 해준다..

나는 그냥 /root 에다 깔았는데,, 경로가 좀 거시기 하다 싶으면 심볼릭 링크를 걸어준다

# ln -s /root/jdk1.6.0 /usr/local/java

그 담에 PATH 에 추가시켜줘야 하니,,
# vi /etc/profile

들어가서

JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin

저장한 뒤,,

# source /etc/profile

잘 설치 됐나 확인

# java -version

java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)


잘 설치된거 같군...


우왕 ㅠㅠ
subversion만 좀 만져보다가 이거 첨 써보는데 처음부터 완전 헤맸다

예전에 소스코드 받아놓은게 있어서 update 좀 하려는데 서버 정보랑 id/passwd 정보가 달랐다
그래서 이걸 어디서 세팅하나 한참 CVSNT 폴더랑 TortoiseCVS 폴더를 뒤져보는데 세팅하는 곳이 안나오는거다
그래서 구글링 좀 해봤더니 cmd 창에서 set 으로 cvsroot 를 세팅하면 된다기에 그렇게 했는데 이건 커맨드 창에서 쓸 때나 되는거지 TortoiseCVS 쓸 때는 당연히 안되는거잖아!

그래서 다시 이걸 어떻게 하지 생각하고 있는데....
당연하게도 CVS 서버랑 연결되어 있는 폴더들은 각각 CVS 폴더가 있는거지...
....
그리고 여기에 있는 Root 파일에서 서버 및 아이디 정보를 가져오는거다...
...
이걸 한참 뒤에야 생각했다...
난 바보였더가~~ ㅠ.ㅠ


  
트랙백 0  |  댓글 0  |


괜찮은 프로그램 하나를 알게 됐다

[wavepad] 라는 놈인데,
다양한 사운드 포맷 편집이 가능하고, 컴퓨터에서 재생되는 소리를 다이렉트로 녹음도 가능하다

사실 요 기능 때문에 깔게 된거.. ㅎㅎ

상당히 쪼꼬만 프로그램인데다가 프리웨어라서 부담없이 쓸 수 있다

스트리밍으로밖에 못 듣는거 이거로 녹음해서 mp3로 변환해서 들고 다니면 되겠습니다


1. 인터넷 보안 옵션을 높음으로 해 놓으면 자바스크립트가 돌지 않는다. 우클릭 -> 소스 보기 됨.
2. 주소창에서 view-source:
3. 주소창 없는 경우에는 새 창 띄워서 보기. 링크 같은 경우에는 shift 클릭. 혹은 새 창 띄우기 ctrl + n.
4. 페이지를 다른 이름으로 저장해서 로컬에서 메모장으로 띄우고 소스 분석.
5. IEToy, 웹마 이용. 요게 쫌 짱.

내가 애용하는 방식은 요 정도인데,
더 괜찮은 방법 알고 계신 분 코멘트 좀 달아주셍 ㅎㅎㅎ

으아
초깜찍 발랄 게임이 나왔다



근데 귀여운건 둘째치고
아래는 게임 레벨 디자인 하는 동영상인데
이건 뭐 무슨 외계의 기술을 갖다 쓴 것 같다 -_-;



색감이나 질감 그리고 동작의 부드러운 처리가 무슨 애니메이션을 보는 듯한 착각에 빠지게 만든다
이번 GDC 2007에 발표되었다고 하는데 플랫폼은 PS3..
죽인다 죽여~


MB 급 말고 수십 수백 GB 끕으로 백업을 목적으로 드라이브간 파일 복사를 할 때 걍 윈도우에서 클릭 앤 드래그로 하면 뻑날 가능성이 농후하다
그럴 땐 cmd창을 띄워서 xcopy를 실행시키는 것이 보다 안전하다
사용법은 copy랑 똑같고, 뒤에 적당히 필요한 옵션들 줘서 쓰면 된다
예를 들면 이런 식으로...

xcopy c:\ e:\back_up /a /b /c /d

object본부장님 같은 경우는 원본 파일을 대상으로
attrib +A c:\*.* /S /D
이렇게 한 뒤에, xcopy 할 때 /M /Y /H /S /E /C 옵션을 쓴다는데,
이렇게 하면, 모든 파일에 대해서 보관 옵션 (A) 을 켜게 되고, 그 뒤에 /M으로 보관 옵션을 다 끄면서 카피를 하기 때문에 중간에 뻑이 나더라도 중간부터 진행이 가능하게 된다


아래는 옵션 목록들

/A 보관 특성을 가진 파일을 복사하며, 보관 특성을 수정하지 않습니다.
/M 보관 특성을 가진 원본 파일을 복사하며, 보관 특성을 지웁니다.
/D:m-d-y 지정된 날짜 이후에 바뀐 파일만 복사합니다.
날짜가 지정되지 않으면, 대상 파일보다 새로운 원본 파일만 복사합니다.
/EXCLUDE:파일1[+파일2][+파일3]...
문자열을 포함하는 파일 목록을 지정합니다. 각 문자열은 파일의 다른 행에 있어야 합니다.
일부 문자열이 복사할 파일의 절대 경로의 일부분과 일치하면 복사할 파일에서 제외됩니다.
예를 들면, \obj\ 또는 .obj에서는 obj 디렉터리 내의 모든 파일을 제외하거나 .obj 확장자를 갖는 모든 파일을 제외합니다.
/P 각 대상 파일을 만들기 전에 물어봅니다.
/S 비어 있지 않은 디렉터리와 하위 디렉터리를 복사합니다.
/E 디렉터리와 하위 디렉터리를 (비어 있어도) 복사합니다.
/S /E 스위치와 같으며, /T를 수정하는 데 사용될 수 있습니다.
/V 각각의 새 파일을 확인합니다.
/W 복사하기 전에, 아무 키나 누르라고 프롬프트합니다.
/C 오류가 생겨도 복사를 계속합니다.
/I 대상을 찾을 수 없고 두 파일 이상을 복사하면, 대상을 디렉터리로 지정합니다.
/Q 복사하는 동안 파일 이름을 표시하지 않습니다.
/F 복사하는 동안 원본과 대상 파일의 전체 경로 를 표시합니다.
/L 복사는 하지 않고, 복사할 파일을 표시만 합니다.
/G 암호화 기능을 지원하지 않은 대상에 암호화된 파일을 복사하도록 허용합니다.
/H 숨겨진 파일과 시스템 파일도 복사합니다.
/R 읽기 전용 파일을 겹쳐 씁니다.
/T 파일은 복사하지 않고 디렉터리 구조만 복사합니다. 빈 디렉터리와 하위 디렉터리는 포함되지 않습니다.
   /T /E 스위치를 함께 사용하면 빈 디렉터리와 하위 디렉터리를 포함합니다.
/U 대상에 이미 있는 파일을 업데이트합니다.
/K 특성을 복사합니다. 일반적으로 Xcopy는 읽기 전용 특성을 지웁니다.
/N 만들어진 짧은 파일 이름을 사용하여 복사합니다.
/O 파일 소유권과 ACL 정보를 복사합니다.
/X 파일 감사 설정을 복사합니다(/O 의미).
/Y 이미 있는 대상 파일을 덮어쓸지를 확인하기 위해 묻는 것을 금합니다.
/-Y 이미 있는 대상 파일을 덮어쓸지를 확인하기 위해 묻습니다.
/Z 다시 시작할 수 있는 모드에서 네트워크 파일을 복사합니다.

/Y 스위치가 COPYCMD 환경 변수에 나타날 수 있습니다.
명령줄에 있는 /-Y와 함께 무시될 수 있습니다.

  
트랙백 0  |  댓글 1  |

당근 퍼왔습니다~

---

How to be a Programmer: A Short, Comprehensive, and Personal Summary

프로그래머가 되는 방법: 짧고 폭넓고 개인적인 요약

http://samizdat.mines.edu/howto/HowToBeAProgrammer.pdf

번역 처로 강창기

Copyright © 2002, 2003 Robert L. Read

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with one Invariant Section being 'History (As of May, 2003)', no Front-Cover Texts, and one Back-Cover Text: 'The original version of this document was written by Robert L. Read without renumeration and dedicated to the programmers of Hire.com.' A copy of the license is included in the section entitled 'GNU Free Documentation License'.

목차

1 도입

2 초보자

2.1 개인적 기능들

2.1.1 디버그 배우기

2.1.2 문제 공간을 나눠서 디버그 하는 방법

2.1.3 오류를 제거하는 방법

2.1.4 로그를 이용해서 디버그 하는 방법

2.1.5 성능 문제를 이해하는 방법

2.1.6 성능 문제를 해결하는 방법

2.1.7 반복문을 최적화하는 방법

2.1.8 I/O 비용을 다루는 방법

2.1.9 메모리를 관리하는 방법

2.1.10 가끔씩 생기는 버그를 다루는 방법

2.1.11 설계 기능을 익히는 방법

2.1.12 실험을 수행하는 방법

2.2 팀의 기능들

2.2.1 시간 추정이 중요한 이유

2.2.2 프로그래밍 시간을 추정하는 방법

2.2.3 정보를 찾는 방법

2.2.4 사람들을 정보의 원천으로 활용하는 방법

2.2.5 현명하게 문서화하는 방법

2.2.6 형편없는 코드를 가지고 작업하기

2.2.7 소스 코드 제어 시스템을 이용하는 방법

2.2.8 단위별 검사를 하는 방법

2.2.9 막힐 때는 잠깐 쉬어라

2.2.10 집에 갈 시간을 인지하는 방법

2.2.11 까다로운 사람들과 상대하는 방법

3 중급자

3.1 개인적 기능들

3.1.1 의욕을 계속 유지하는 방법

3.1.2 널리 신뢰받는 방법

3.1.3 시간과 공간 사이에서 균형을 잡는 방법

3.1.4 압박 검사를 하는 방법

3.1.5 간결성과 추상성의 균형을 잡는 방법

3.1.6 새로운 기능을 배우는 방법

3.1.7 타자 연습

3.1.8 통합 검사를 하는 방법

3.1.9 의사소통을 위한 용어들

3.2 팀의 기능들

3.2.1 개발 시간을 관리하는 방법

3.2.2 타사 소프트웨어의 위험 부담을 관리하는 방법

3.2.3 컨설턴트를 관리하는 방법

3.2.4 딱 적당하게 회의하는 방법

3.2.5 무리 없이 정직하게 반대 의견을 내는 방법

3.3 판단 능력

3.3.1 개발 시간에 맞춰 품질을 조절하는 방법

3.3.2 소프트웨어 시스템의 의존성을 관리하는 방법

3.3.3 소프트웨어의 완성도를 판단하는 방법

3.3.4 구입과 개발 사이에서 결정하는 방법

3.3.5 전문가로 성장하는 방법

3.3.6 면접 대상자를 평가하는 방법

3.3.7 화려한 전산 과학을 적용할 때를 아는 방법

3.3.8 비기술자들과 이야기하는 방법

4 상급자

4.1 기술적 판단 능력

4.1.1 어려운 것과 불가능한 것을 구분하는 방법

4.1.2 내장 언어를 활용하는 방법

4.1.3 언어의 선택

4.2 현명하게 타협하기

4.2.1 작업 일정의 압박과 싸우는 방법

4.2.2 사용자를 이해하는 방법

4.2.3 진급하는 방법

4.3 팀을 위해 일하기

4.3.1 재능을 개발하는 방법

4.3.2 일할 과제를 선택하는 방법

4.3.3 팀 동료들이 최대한 능력을 발휘하게 하는 방법

4.3.4 문제를 나누는 방법

4.3.5 따분한 과제를 다루는 방법

4.3.6 프로젝트를 위한 지원을 얻는 방법

4.3.7 시스템이 자라게 하는 방법

4.3.8 대화를 잘 하는 방법

4.3.9 사람들에게 듣고 싶어 하지 않는 말을 하는 방법

4.3.10 관리상의 신화들을 다루는 방법

4.3.11 조직의 일시적 혼돈 상태를 다루는 방법

5 참고 문헌

5.1

5.2 웹 사이트

6 역사 (2003 5월 현재) / History (As Of May, 2003)

6.1 피드백 및 확장 요청 / Request for Feedback or Extension

6.2 원본 / Original Version

6.3 원저자의 경력 / Original Author's Bio

c# :: 전산

얼마 전에 C#을 처음 써봤는데 느낌이 상당히 색달랐다 java화 된 c++ 이랄까
전체적으로 c++보다 라이브러리 깔끔하고 코드 간결하고 쓰기 쉽다 스마트 기능이 함수 속성 이벤트 다 찾아다 준다 - -
근데 포인터가 없으니까 뭔가 시원섭섭한 느낌
폼과 내부 코딩이 파일 하나에 이루어지는 개념도 상당히 새로웠다 이것 덕분에 윈도우 폼 프로그래밍이 많이 쉬워졌다
그리고 이벤트에 += 을 쓰는 변태스러운 문법도 인상적이다

C# 연습도 해볼 겸 취미 삼아 간단한 프로그램을 하나 만들어볼까 구상 중이다
회원 관리 및 회계 장부 프로그램
이름은,, 일단 대충 Peppermint 정도? ㅎㅎ
C#
  
트랙백 0  |  댓글 4  |


1. jsript (.js) 에서는 windows message box 를 못 띄운다

2. vbscript (.vbs) 에선 한 줄로 가능하고,
  MsgBox "Hello World!"

3. windows script file (.wsf) 이란 놈을 처음 봤는데 여기서

<job id="TestEcho">
  <script language="Jscript">
  // jscript bluh bluh~
  WScript.Echo("Hello World!");
  </script>
</job>

이런 식으로 하면 jscript로 스크립팅하면서 윈도우 메시지 박스도 띄울 수 있다
오늘 현수형이 가르쳐준거
별거 아닌거 같은데 스크립팅을 거의 해본 적이 없다보니 알리가 없지
게다가 js는 대개 html에 embed 시켜서 썼는데
콘솔에서 직접 쓰려니 참 애매하더군
msdn이랑 구글링을 몇 시간 했는데 방법을 못찾았었다 -_- 좀 더 잘 해야지

4. script들은 도스에선 cscript, 윈도우에선 wscript가 컴팔해준다

요건 영진씨가 갈쳐준거

필자가 프로그래밍을 처음 시작한 지도 벌써 20년이 지났다. 우연인지 모르겠지만 필자가 막 컴퓨터 공부를 시작할 때 창간된 잡지가 마소였으니 필자의 컴퓨터 경력과 마소의 나이가 같은 셈이다.

처음 개발을 시작할 당시에는 지금처럼 많은 사람들이 컴퓨터를 쓰게 될 것이라고는 상상조차 못했었다. 8비트 컴퓨터인 애플 컴퓨터를 사용하던 시절이었으니 가정에서 취미로 가지고 노는 정도였지, 업무용으로 사용한다는 생각은 하지 못할 상황이었다. 그러나 20년이 지난 지금은 인터넷이 보편화되면서 가정마다 없어서는 안될 필수품으로 자리잡게 되었다.

그에 따라 개발 문화도 많이 달라졌다. 당시 PC 개발자는 먹고 살 수 있는 직업이 아니었다. 초기에는 개발 자체에 재미를 느끼는 마니아들이 주축을 이루었지만 생계를 위해서 다른 직업을 가지고 있는 경우가 많았다. 지금은 개발자도 어엿한 직업으로 자리잡았지만 열정이라는 측면에서 보면 당시의 개발자들에게 지금의 개발자들이 배워야 할 점이 많지 않을까 생각된다.

초창기 국내 개발자들은 많은 어려움을 겪어야 했다. 필자의 경우에도 자료를 구하는 데 무척이나 애를 먹었다. 인터넷도 없었고 주위에 물어볼 사람이 있는 것도 아니었다. 혼자서 모든 것을 분석하고 풀리지 않는 모든 문제들을 스스로 해결해야 하는 상황이었다. 당시 국내에는 IT 서적들도 별로 없었고 원서를 구하기도 만만치 않았기 때문이다.

80년대 후반부터는 컴퓨터 통신을 활용하여 미국 통신망에 접속할 수가 있었다. 아무리 연구를 해도 도저히 풀리지 않는 경우에만 국제 전화를 걸어서 미국 사람들에게 물어보고 자료도 받곤 했다. 당시 요금이 1분에 1000원이었으니까 1시간에 6만원 정도였는데, 당시에 필자 월급이 30만원 정도였던 것과 비교해보면 엄청나게 비싼 요금이었다. 그밖에는 모두 직접 분석해서 알아냈고 롬바이오스나 운영체제도 어셈블리어 수준에서 분석했다.

바이러스 분석도 마찬가지로 참고자료 없이 직접 분석해서 동작 원리를 알아냈다. 그러다 보니 그동안 공부한 것과 경험을 토대로 바이러스 관련 책을 쓸 때는 참고서적 한 권도 없이 필자의 자료와 기억만을 가지고 완성할 수 있을 정도였다. 이에 비해 요즘은 오히려 자료의 홍수 시대라고 할 만하다. 이제는 자료를 구하지 못해서 개발을 하지 못하는 경우는 거의 없는 것 같다. 그런 점에서 예전에 비하면 개발 환경은 엄청나게 좋아진 것임에는 틀림없다.


코더와 아키텍트

예전보다는 나아졌지만 개발자에게 불리한 환경은 여전히 남아 있다. 국내 개발 환경의 특성과 한계 때문이다. 최근 이공계열 기피가 심각한 문제가 되면서 개발자라는 위치 역시 다소 위축된 것처럼 보인다.
또한 우리나라에서는 전문가라고 할지라도 나이가 들면 관리직이 되어야 성공했다는 사회적 통념 때문에 개발자가 선택할 수 있는 미래가 제한적이며, 개발자의 생명도 짧은 편이다.

많은 개발자들은 영원한 개발자로 남고 싶어하며 관리자로서의 변신에 대한 두려움들이 상대적으로 크다. 반면에 하루가 다르게 변하는 기술적 진보로 인해 후배와 동등한 위치에서 새로운 개념의 기술에 적응해야 하는 부담도 많이 느낀다.


개발자가 선택할 수 있는 미래라는 면에서 SI 업체와 패키지 소프트웨어 업체는 상황이 조금 다르다. SI 업체와는 달리 패키지 소프트웨어 업체에서는 개발자가 선택할 수 있는 길이 조금 더 다양하다. 특히 패키지 소프트웨어 업체에서는 개발자의 연장선상에서 하나의 전문직으로서의 아키텍트가 앞으로 절실히 필요한 상황이 도래할 것이다.

개발자들은 일반적으로 프로그래밍, 더 정확하게는 코딩 자체에 많은 재미와 보람을 느낀다. 풀리지 않는 수학 문제를 오랜 고생 끝에 풀었을 때 희열감에 사로잡히고 자신이 만든 프로그램이 잘 동작하는 것을 보면서 자신의 분신처럼 애정을 느낀다.

그러나 이러한 것은 개발자의 보람 가운데 아주 작은 부분일 뿐이다. 미국에서는 이런 수준의 사람들을 코더라고 부른다. 많은 프로그래밍 경험을 통해서 좀더 수준이 올라가다 보면 세부적인 코딩 자체보다는 전체적인 아키텍처, 흐름, 프로토콜 등 설계에 해당하는 일들을 맡게 된다.

그러나 우리나라에서는 (소프트웨어 산업의 역사가 짧아서이겠지만) 코딩하는 재미에 묻혀 있거나 그것이 개발자가 하는 유일한 일로 생각하는 사람들이 많다. 물론 훌륭한 프로그래머 또는 아키텍트가 되기 위해서는 코더 시절에 탄탄한 기초를 다지는 것은 필수적이지만 어느 정도 실력이 쌓인 후에는 코더 단계를 뛰어 넘으려는 노력이 필요하다.

개발자들이 코더 단계에서만 머문 채 그 한계를 벗어나지 못하는 또 다른 이유 중 하나는 국내 패키지 소프트웨어 회사 수가 너무 적고 그 규모도 영세하기 때문이다. 일정 규모 이상의 회사가 많다면 각 회사마다 다양한 노하우가 쌓이고 회사간의 제휴나 인력 이동을 통해서 자연스럽게 함께 성장해 나갈 수 있겠지만, 숫자가 얼마 안 되고 영세하다 보니 같이 커 나갈 수 있는 여건이 형성되지 못한 것이다.

단적인 예로 현재 국내에서 100명이 넘는 개발자가 일하고 있는 패키지 소프트웨어 회사는 필자의 회사밖에 없다. 사정이 이렇다 보니 개발자가 나아갈 길을 적절하게 조언해 줄 수 있는 전문가들이 많지 않은 것이다. 이는 우리나라 개발자들의 불행이자, 우리나라 소프트웨어 산업의 불행이기도 하다.


국내 개발자들에게 부족한 점

IT 산업 발전에 따라 개발자의 역할에도 변화가 생기고 주위에서 변화를 요구하기도 한다. 특히 전문성에 대한 요구 수준은 갈수록 높아지고 있다. 전문 개발자로 남아서 계속 발전하기 위해서는 주위 여건도 여건이지만 개발자 자신의 부단한 노력이 필요하다. 그런 점에서 우리나라 개발자들에게는 아직도 부족한 부분들이 많다고 생각한다.

가장 떨어지는 능력 중 하나는 바로 커뮤니케이션 스킬이다. 그 이유는 필자를 포함하여 우리나라에서 교육을 받은 사람들은 개인 경쟁력 강화 위주의 공부, 즉 대부분 혼자서 책을 보고 공부를 하고, 혼자서 시험 문제를 푸는 교육을 받아왔기 때문이라고 할 수 있다.

지금처럼 복잡한 현대 사회에서는 혼자서 어떤 일도 할 수 없다. 개발을 할 때도 여러 개발자들간의 공동 작업이 요구된다. 또한 개발자만 작업해서 되는 것이 아니라 마케팅, 영업, 고객 지원, 기술 지원을 비롯하여 고객과도 직접 의사소통을 하면서 일을 해나가야 되는 세상이다.

이처럼 현대 사회에서는 커뮤니케이션 스킬이 필수적이지만 대학교를 졸업하고 바로 회사에 들어오는 사람들 가운데는 본인이 생각하는 바를 정확히 말로 표현하지 못하고 다른 사람이 말하는 것들을 정확하게 알아듣지 못하는 경우도 생각보다 많다.

둘째는 여러 사람들과 같이 팀으로 일해 본 경험이 부족하다 보니 팀 작업을 할 때 어떤 일을 어떻게 분담해서 하는지, 개발 이외의 다른 분야 사람들과 어떻게 일을 나누어 해야 하는지에 대한 훈련이 되어 있지 않아서 프로젝트 진행에 난항을 겪는다.
개발자들이 일정 수준의 단계를 뛰어 넘어 성장하기 위해서는, 즉 코더를 벗어나기 위해서는 공동으로 진행하는 큰 프로젝트의 경험이 필수적이다.

여기서 이야기하는 공동의 프로젝트, 큰 프로젝트라는 것은 SI 프로젝트보다는 패키지 소프트웨어 개발 경험이다. 그러나 불행하게도 우리나라에서는 SI 업체는 많지만 패키지 소프트웨어 개발 업체가 많지 않다 보니 경험을 쌓고 한 단계 도약할 수 있는 여건이 조성되어 있지 않은 것이다.

셋째로 전문 지식 자체도 떨어지는 편이다. 특히 전산학과를 갓 졸업한 사람들 중에는 바로 소프트웨어 개발 회사에 투입되어 개발을 할 수 있는 사람은 많지 않은 편이다. 업무에 필요한 지식보다는 학문에 필요한 기초 지식만 가지고 있다 보니 이들 간의 간격이 상당히 크다.

대기업이라면 많은 사람들에게 한꺼번에 자체적인 교육을 시킬 수 있겠지만 현재 패키지 소프트웨어 업체들은 벤처기업들이기 때문에 교육을 시킬 수 있는 여건이 부족하다. 따라서 결국은 학교를 다니면서 스스로의 열정이나 재미에 의해서 개발을 했거나 프로젝트를 했던 사람들을 주로 채용할 수밖에 없다.


미래형 개발자의 요건

시간이 흐를수록 모든 분야가 점점 더 어려워질 것으로 보인다. 미래에는 두각을 나타내려면 최소한 두 분야 이상의 깊이 있는 전문 지식을 가지고, 그것들을 바탕으로 다른 사람이 만들어내지 못하는 새로운 것을 만들어 내는 사람, 다른 사람 또는 다른 부서와 열린 마음으로 잘 협조할 수 있는 사람, 큰 시야와 창조적인 마인드를 가진 사람만이 성공할 수 있을 것이다.

개발자는 미래에도 역시 사회의 가장 중요한 인프라를 담당하는 일꾼이 될 것이다. 전산분야는 모든 분야에서 사용할 수 있는 하나의 툴이자 인프라이다. 따라서 자기 전공과 상관없이 지식 경영적인 측면에서 접근하고 전산을 잘 활용하는 사람이 결국은 두각을 나타낼 것이다.

그것은 하나의 전공만 잘한다고 되는 것은 아니다. 따라서 전산 전공자들도 결국은 다른 분야에서 전산을 활용하는 사람들에게 부가가치를 제공해 줄 수 있는 사람이 되지 않는다면 오히려 생존하기가 힘들어질 것이다.

이러한 생각은 자기의 발전을 가로막는 가장 큰 걸림돌이 된다. 다른 분야에 대한 기초 서적을 틈틈이 읽으면서 사고의 폭을 넓히고 업무를 하면서 다른 분야 사람들의 이야기를 많이 듣고 그들을 이해하려고 노력한다면 진정한 전문가로 클 수 있는 좋은 뒷받침이 될 것이다.

이와 함께 개발자에게는 '창조적 마인드'가 필수적이다. 인터넷이 확산되면서 기존 것을 그대로 가져다 사용하거나 베끼는 것을 갈수록 많이 본다. 예전 같으면 상상도 할 수 없었던 일이다. 옛날에는 소스를 구하기도 어려웠지만 구할 수 있더라도 처음부터 끝까지 자신이 직접 만들어 보아야 직성이 풀리는 사람도 많았다.

물론 그러한 방법은 실제 프로젝트에 들어가면 시간이 많이 걸릴 수 있겠지만, 이를 통해 자신의 실력을 쌓고 발전시키다 보면 나중에는 아무도 못 푸는 문제를 자기가 풀 수가 있는 것이다. 따라서 이 두 가지 방법을 적절하게 활용하는 자세가 필요하다.

마지막으로 필자는 우리나라 개발자들이 한마디로 '혼이 있는 개발자'이었으면 한다. 누구나 개발자는 될 수 있다. 그러나 누구나 할 수 있는 것이 아니라 오직 나만이 할 수 있다는 자신감과 함께 주어진 일이고 직업이기에 하는 것보다 능동적이고 적극적으로 임하는 '장이' 기질이 있어야 한다. 도자기는 누구나 만들 수 있지만 백자나 청자는 아무나 만드는 것이 아니기 때문이다.


전문가 육성을 위한 근본적인 접근이 필요하다

우리나라가 글로벌 시장에서 경쟁력을 갖추려면 지식정보 분야를 집중 육성해야 한다는 목소리가 높다. 지식정보 분야의 핵심은 소프트웨어인데 국내 환경은 전문가를 키우기가 어려운 구조이다.

그렇기 때문에 정부에서는 단기간의 처방보다는 장기적이고 근본적으로 이 사회가 요구하는 진정한 전문가를 키우고 국가 경쟁력을 강화하기 위한 제도적인 접근을 해야 한다. 또 학계에서도 업계와 협조하고 피드백을 받아서 현대 사회에 맞는 인재를 양성하기 위해 많은 노력을 해야 한다.

전문가형 개발자 육성을 위해서 교육 제도의 개선 노력도 반드시 필요하다. 특히 대학에서 가르치는 것과 현장에서 요구되는 것의 간격을 메우기 위한 노력이 일차적으로 필요하다. 교육 과정에 대해서는 인도가 좋은 벤치마크 모델이 될 수 있다고 생각한다. 인도 역시 10여 년 전만 하더라도 지금처럼 많은 우수한 개발자들을 배출하는 소프트웨어 강국이 될 것이라고는 아무도 생각하지 못했다.

현재 마이크로소프트 본사에서 인도 사람들이 나가버리면 회사가 쓰러질 지경이라고 이야기할 정도로 이들의 비중은 높다고 한다. 이는 제도적인 측면에서, 특히 교육 제도적인 측면에서 올바르게 접근했기 때문에 가능한 결과라고 생각한다. 우리나라도 인도를 벤치마킹해서 우리 실정에 맞는 제도를 운영한다면 경쟁력 있는 개발자들을 많이 배출할 수 있지 않을까 한다.

또한 개발자뿐만 아니라 풍부한 경험을 갖춘 프로젝트 매니저를 육성하기 위한 고민도 필요하다. 프로젝트 관리를 잘해서 함께 경험을 쌓고 시행착오를 줄이기 위해서는 프로젝트 매니저의 역할이 필수적인데, 우리나라의 패키지 소프트웨어 회사들은 이러한 프로젝트 매니지먼트가 외국에 비해서 상대적으로 취약한 편이다. 국내 소프트웨어 산업이 국가 경쟁력의 근간으로 자리매김하기 위해서는 개발자 자신들의 끊임없는 노력은 물론 전문 인력 양성을 위한 개발 환경의 성숙이 필수적이다.

안철수 (안철수연구소)

마이크로소프트웨어
2003/11/24



최소한 두 분야 이상의 깊이 있는 전문 지식...


  
트랙백 0  |  댓글 0  |



STL 코드는 기본적으로 템플릿이기 때문에 열면 다 보인다

안 보는 쪽이 정신건강에 좋다고 생각하지만

예전에 그거 다시 구현해보겠다는 생각 할 때나 봤지 만사 귀찮아진 지금이야 뭐

맵같은거 쓰다 보면 이게 타이트하게 구현하지 않았다고 느껴지는 부분이 많은데

그런거 해결할려면 재구현하든지 바퀴("바퀴를 새로 발명한다"에서의 바퀴 wheel)를 새로 만들어야 하는데

선택의 문제

회사 안에 연구 조직이 있다면 하이퍼포먼스 템플릿 라이브러리 만드는 조직이 하나쯤은 필요할듯

여러 모로 중요한데

일단 표준 라이브러리 같은 경우에는 디폴트 힙을 이용해서 구현돼 있지만 실제로 게임 만들 때 보면 힙을 새로 만들거나 해서

하다못해 얼로케이터 정도는 회사에서 하나 깔끔하게 구현한 것을 갖고 있어야 하는데 현실은 그렇지 않지

메모리 맵에다 대고 쓰는 자료구조라든지 이런게 있으면 생산성에 도움이 될텐데 회사에서 저런 조직 (기껏해야 10명도 안 필요한) 하나 투자할 여력이 없는것은 마인드의 문제라고 봄

근데 그게 이해는 가는게 코드 보면 알지만 바퀴에 버그가 있으면 지옥인데 그런 연구 조직은 고수준의 프로그래머를 요구하게 되지

그런데 그런 프로그래머는 신규 프로젝트에 투입하고 싶어하지

"당장" 돈을 못 버는 쪽에 투입시키고 싶진 않을 거니까

-- by gim



  
트랙백 0  |  댓글 0  |
코더들은 increment operator를 쓸 때 습관적으로 자기가 여태까지 써온대로 앞에 혹은 뒤에 연산자를 붙이게 된다.
간단하게 ++i 로 쓸 것이냐 i++ 로 쓸 것이냐의 차이인데...
예전에는 이 둘의 속도 차이 때문에 말이 많았다. pre 로 쓰는 것이 속도가 더 빠르기 때문에 반드시 post로 써야하는 경우가 아닌 이상 pre로 쓰는 것이 좋다. 라는 말이 있었다.

하지만 요즘에는 컴파일러가 많이 똑똑해져서 더 이상 구현상/속도상 차이가 나지 않는다. asm 코드를 봐도 pre/post 구현이 같다.
그러니 이제는 더 이상 pre냐 post냐 고민할 필요가 없다.
그냥 보기 편한대로..
(코딩을 할 때 둘 중의 하나를 선택해서 계속 한 쪽으로만 밀고 나가야 할 것은 당연하다.)

난 post로 쓰는게 더 보기 좋더라...


more..



  
트랙백 0  |  댓글 0  |

개발 관련 첫 포스팅은 책 소개부터 해줘야겠다.
데브캣에 들어오기 전까진 전산 관련 책을 보면서 공부해야겠단 생각이나 개념 자체가 별로 없었다.
기껏해야 봤다는게 학교 교과서에 UNIX 관련 기본 프로그래밍/ 네트워크 프로그래밍 관련 책, C/C++ n일 완성.. 생각나는건 뭐 이런 정도...; 붓그럽다. 물론 지금이라고 아주 많이 읽게 된건 아니지만서도, 적어도 책을 보면서 공부해야겠단 생각 정도는 든다.. 하하... -_-;;
거의 항상 구글링, msdn, 기타 레퍼런스를 찾으면서 하는게 버릇 되어놔서... 책을 잘 안봤던 것 같다.

Debugging Applications for MS .NET and MS Windows

Code Complete


이 두 권의 책은 참 주옥같은 책이다.
전산을 공부한다면 마땅히 다 보고 알아야 할 내용들을 담고 있다. (그런데 이제서야 보다니!)
보다 자세한 설명을 하려면 너무 길어지기 때문에 지면이 부족한 관계로(응?) 생략한다.

보면서 감동을 많이 먹었는데,, 생각해보면, 그 동안 많은 삽질을 한 후에 이렇게 보니 뭔가 깨달음도 오고 공부 좀 할껄 후회도 하고 그런거지.. 미리 봤으면 지금 같은 감동도 없었겠지.. (라고 핑계..)

나중에 다시 보면 또 뭔가 얻을게 있을만한 책이다.
그 땐 또 새로운 지평이 열리겠지.

(계속 공부를 열심히 했다면 말이지..)

  
트랙백 0  |  댓글 2  |
 이전  1   다음 

fotowall :: ncloud RSS Feeds today : 3   yesterday : 20
total : 2,640