태그

2016년 2월 26일 금요일

브런치 링크 공유

올해 들어서 카카오의 작가 플랫폼인 브런치에 글을 기고하고 있습니다.

https://brunch.co.kr/@insuk

한 10개 정도 기고했네요..

관심 있으신 분들, 오셔요.. :)

2015년 12월 29일 화요일

[독후감] 인터랙티브 디벨로퍼

인터랙티브 디벨로퍼 (김종민, 한빛미디어)

3시간 정도에 독파하였음.. 사진이 많아서 글자가 많지 않아 쉽게 쉽게 읽혔고, 밤에 쉽게 잠을 못 이루게 만들었음..

이 책은 필자의 10여년간의 행적을 스스로 돌아보면서 대한민국 개발자에게 전하고 싶은 메시지를 툭툭 던져주고 있다. 결국 꿈을 향해 한발 한발 나아가는 발걸음에 큰 박수를 보내고 싶다. 실은 깊이 강조가 되지는 않지만 본인이 좋아하는 것을 발견하고, 그 것을 잘 하는 사람들을 찾아서 멘토로 삼아 스스로의 차별성을 찾아가는 모습은 무척이나 닮고 싶은 부분이다.

책을 다 읽고 나서 나를 다시 한번 돌아 보게 되었다.

내가 지금까지 했던 것을 이렇게 멋지게 정리해 볼 수 있을까..
전형적인 B2B의 백엔드 엔지니어로서 나의 포트폴리오는 무엇인가..
누군가의 찬사를 받을 만한 일을 한 적이 있는 가.. 혹은 할 수 있는가..

올해에 지금까지 시도 하지 않았던 여러가지 시도를 해 본 한해였다.
내년에 계획대로 된다면.. 나도 나만의 포트폴리오를 하나 하나씩 만들어 갈 수 있을 듯 하다.

책을 읽으면서 인상 깊었던 구절 들이다.
실은 내가 지향하는 바와 무척 닮아있다.

내가 찾은 해결책 (44p~45p)

첫 번째로 플래시라는 특정 기술이 아닌 나만의 '내공'을 가지기 위해 노력했다. 세상엔 플래시를 잘 하는 사람은 많지만, 그 플래시를 사용해서 아름다운 작품을 만들어내는 사람은 많지 않았다. 플래시를 열심히 공부해 뛰어난 '플래시 개발자'가 되기보단, 디자인, 모션, 화면전환, 그리고 유저 인터팩션 등이 완성도 있는 결과물을 만드는 사람이 되고자 했다. 초점을 개발 언어에서 콘텐츠로 옮긴 것인데, 웹사이트의 디자인과 모션의 디테일을 높이기 위해 고민하고, 사용자가 어떻게 편하게 웹사이트를 이용할 수 있을지, 메뉴 클릭 시 나오는 모션은 어떤 게 제일 직관적인지 등을 더 연구했다. 거기엔 시장에서 요구하는 기술은 항상 빠르게 변하기 때문에 한 가지 기술에만 의존하는 사람이 되는 것은 위험한 발상이라는 생각이 있었다. 세상엔 영원한 것이 없듯이 플래시라는 기술 또한 언젠간 대체될 것이니 시대가 변해도 변하지 않는 나만의 '내공'을 가지자고 생각했다. 그렇게 쌓인 내 실력은 후에 플래시 시장이 죽고 HTML5가 대세가 되었을 때도 내가 뒤처지지 않고 계속해서 이 일을 할 수 있게 해주었다.

두 번째로는 '크게 보고 눈앞의 작은 것에 연연하지 말자'라는 것이었다. 당장 눈앞의 연봉, 직급 등에 연연해서 스트레스를 받거나 승진을 위해 윗사람에게 아부하는 데 시간을 쓰지 말고, 내가 되고자 하는 사람이 될 수 있도록 실력을 쌓고 싶었다. 즉, '이 회사에서 높은 자리에 올라가 연봉을 많이 받자' 가 목표가 아니라, 내가 스스로 성장한 모습을 목표로 삼았다. 그러기 위해서 좁은 시야로 눈앞의 작은 것을 가지기 위해 에너지를 낭비하지 말고 오직 내가 좋아하는 일에 모든 에너지를 쏟고 싶었다. 일에만 집중하자는 생각은 지금도 변함이 없는데, 평소 시계나 반지 같은 손을 움직으는 데 거추장스러운 액세서리는 하지 않고, 옷도 편하고 빨리 입을 수 있는 운동복을 즐겨 입는 이유이다. 회사에서 어떤 일을 하느냐, 혹으 내가 얼마나 성장하느냐가 중요하다....

나의 작업 철학 (132p~134p)

플래시 개발자에게서 쉽게 HTML5 개발자로 바뀔 수 있었던 것에는 내가 가진 작업 철학이 큰 도움이 되었다. 고등학교를 졸업할 당시 나의 희망직업은 영화의 미니어처 등에 쓰이는 모형을 만드는 장인이었다. 그때 내 재능에 대해 진지하게 스스로 반문을 해본 적이 있다. 모형응ㄹ 만드는 장인이 되려면 처음부터 모형을 직접 빚어내고 완성을 해야 한다고 생각했는데 나는 그러지 못했다. 내 실력은 이미 만들어진 모형을 사서 조립하고 색칠하는 수준밖에 되지 않는다는 것을 깨달았다. 즉, 취미로는 훌륭할지 몰라도 직업이라고 말하기에는 부족했다. 내가 그 분야의 진짜가 되기 위해선 본질이 되는 작업이 가능해야 한다고 생각했다. 개발의 본질은 개발코드를 사용해 구조를 설계하고 움직임을 만드는 일이다. 코드에 대한 이해가 없이 툴(Tool)이나 라이브러리(Library)만을 사용해 결과물을 만드는 것은 시중에서 모형을 사다가 조립하고 색칠만 하는 취미 정도의 수준과 다르지 않다는 생각이었다.

{중략}

라이브리리도 마찬가지 부분이다. 라이브러리는 '개발에 필요한 특정 기능을 미리 구현해둔 소스 파일'로, 잘 사용하면 개발시간을 단축할 수 있는 유용한 도구이다. 하지만 코드에 대한 이해 없이 라이브러리에만 의존하는 것은 피해야 한다. 하지 않는 것과 할 수 없는 것엔 큰 차이가 있다. 라이브러리를 사용하는 것이 문제가 되진 않는다. 문제는 라이브러리를 사용해 만들어진 결과물이 자신의 실력이라고 생각하는 경우이다. 그때 본인의 실력에 대해 거짓말을 하게 되는데, 컬렉터(Collector)가 되기 쉽다. 컬렉터란, 실력을 쌓는 데 시간을 쓰기보단 라이브러리를 수집하는 데 더 많은 시간을 보내는 사람들을 말한다. 이런 습관은 처음엔 괜찮을지 몰라도 시간이 지날수록 자신을 옭아매는 덫이 된다.

{중략}

툴이나 라이브러리는 분병 편리한 점이 많지만, 실질적인 코드에 대한 이해가 낮아지고, 툴에서 제공하는 한정된 기능만을 사용할 수 있다는 단점이 있다. 툴의 기능이 아무리 뛰어나고 그것을 100% 이해하고 사용한다고 해도 한계가 있다. 툴이나 라이브러리도 결국에는 코드로 만들어진 것들이다. 어려워도 툴의 도움 없이 개발의 본질인 코드를 이해하고 사용한다면 더 넓은 시야를 가질 수 있다.

---------------

좋은 책이다. :)

2015년 6월 28일 일요일

Python, R, Java, C

Python R을 비교한 좋은 링크가 하나 있어 공유 드립니다.

그리고 Python C 혹은 Java와의 조합 이야기도 있었는데요. 찾아 보니 내용이 조금 다르더군요.

Python C 환경에서 사용할 수 있는 것이 Cython(싸이썬) 입니다.
간혹, CPython 이 보이기도 하는데요, 이건 Python 개발을 한 C 프로젝트를 말하는 겁니다. (Python C로 개발되었습니다.)

Cython Python을 작성한 코드를 C로 컨버팅 해주는 개념입니다.
컴파일을 하면, 마치 C 컴파일러로 컴파일 한 것과 같은 산출물이 나오는 것이죠. 여기서 LLVM 이라는 컴파일러를 활용하고 있습니다.

Java와 연계가 가능한 Jython(자이썬)은 위와 같은 개념이기 한데, 조금 더 나아가서..
Python 코드에서 Java 라이브러리를 호출하여 사용이 가능합니다.
Python 으로 코딩하면서 Java 코드를 삽입 하는 개념이죠.

이후 컴파일 하면, JVM 용 바이트코드로 변환하여, JVM 상에서 구동 됩니다.

R Python의 연계도 가능합니다.
rpy Python에서 R 함수를 호출 할 수 있는 개념입니다.

반대로도 가능합니다. R에서 Python을 콜하는 건 rPython 이라 하는 군요.


이외에도 여러 방면에서 조합이 가능합니다.

하지만 무리하게 한 프로젝트에서 여러 언어를 쓸 필요는 없겠죠? :)

>_

2015년 3월 23일 월요일

Python for Data Scientist

http://www.datacommunitydc.org/blog/2013/04/son-of-getting-started-with-python-for-data-scientists

http://www.datacommunitydc.org/blog/2013/03/getting-started-with-python-for-data-scientists

2015년 3월 11일 수요일

Python 을 시작 하면서..

어떻게 Python을 시작할까 고민하다가, 책을 사서 보는 건 경험상 큰 도움이 되지 않기에, Python 개념 및 사상을 배우기 위해 인터넷을 이리저리 뒤졌다.

실은 위키피데아 내용 만 보더라도, 어느 정도 파악 하는 데는 무리가 없었다.
http://en.wikipedia.org/wiki/Python_(programming_language)

코딩의 시작은 일단 웹 사이트를 통해 시작했다.
http://www.codecademy.com/

세상 참 좋아진 듯.. 내가 경력이 그리 긴건 아니지만, 2000년 초반에 Java를 배우기 위해서는 책보고 관심 있는 사람끼리 모여서 스터디 한 것 밖에 없었던 듯.. 요즘은 코딩 배우는 싸이트도 많고, 코세라나 edx 같이 세계의 유명한 교수들의 강의를 무료로 들을 수 도 있고, 크라우드 펀딩을 통해서 개발 하면서 경쟁 할 수 도 있고.. 소스가 너무나도 많다.

Python 기초 과정을 한 40% 진행하며서 느낀 점은..

일단 쉽다. 다들 이 점을 강조 하는데, 실제로 구현 해 보니 증말 쉽다.

어떤 언어든 개발 경험이 있다면, 코딩 문법을 익히는 데 몇 일 안 걸릴 듯..
개발자가 아니더라도 어렵지 않게 배울 수 있을 듯..

세미콜론이 없는 게 얼마나 편한지,
함수 정의문이나 if-else 문을 감싸는 중괄호(())가 없는 게 얼마나 편한지,
단순히 띄워쓰기를 지킴으로써 얻을 수 있는 가독성, 생산성은 가히 놀라울 듯 하다.

변수 정의 시 미리 타입, 크기 등을 정할 필요가 없어 개발시 편하지만, 디버깅은 어려울듯..

Node.js의 JavaScript와 너무나도 비슷하다. 비동기식 이벤트 기반 코딩이 가능 한 1급 함수라는 부분도 똑같다.

상속관련해서는 JavaScript는 prototype 객체를 통해 상속 및 오버라이트는 가능하나, 클래스를 정의하여 상속 받는 개념은 없는데, Python은 완전한 클래스 생성이 가능하고 다중상속등이 가능해 보인다.

기초과정 완료 되면, 더 추가 하겠다.

To be continued..

>_

내가 Python을 시작하게 된 이유

그 동안 SI회사에서 다양한 필드의 엔터프라이즈급 시스템 개발을 하다가, 중공업 회사의 SW개발팀으로 옮긴 뒤, 우여곡절이 많았다.

일단, 내가 가지고 있던 'IT(Information Technology)' 기술은 중공업 분야의 플랜트 산업에 적용되고 있는 'OT(Operational Technology)' 기술과는 거리가 멀었다.

기존에는 복잡한 알고리즘 보다는 얼마나 단순하게 비즈니스 요구사항을 충족시키는 아키텍처를 설계/구현을 하고, 성능이슈 등은 불특정 다수의 사용자의 트래픽을 어떻게 하면 분산시키면서 빠르고 안정적이고 신뢰성 높은 시스템을 만들 수 있을 까를 고민하였다.

하지만 플랜트 쪽은 예전에 내가 다루던 아키텍처보다 훨씬 단순했고, 현재 최신 기술 트랜드에는 훨씬 미치지 못 하고 있었으나, 주기적으로 발생하는 플랜트의 운전 데이터를 통해 과거 데이터 학습을 통해 앞으로의 일을 예측하고, 예상하지 않았던 장애를 미리 방지 하여 플랜트의 수명을 연장 시키는 것에 초점이 맞추어져 있다. 이렇다 보니, 예전에는 잘 다루지 않았던 인공지능, 머신러닝과 관계가 깊은 알고리즘 등에 대해 깊이 이해를 할 필요가 있다. 이러한 알고리즘 등은 요즘 흔히 얘기 하는 빅 데이터 분석에서도 쉽게 사용되어지는 기술이기도 하다. (실은 BI, 인공지능, 머신러닝, 데이터 마이닝 등은 서로 관계가 있으면서도 다른 영역이다.)

헌데, 이런 알고리즘에 대해 이해를 하려면 기존에 하지 않았던 선형 대수학, 통계학 등의 쉽지 않은 지식들을 선행 학습을 반드시 해야 한다. 물론, 예전에 한번쯤은 접해봤던 것들이고, 공부를 하는 거에 대해서 큰 거부감은 없으나, 과거에 내가 해오던 일과의 괴리 때문에 잘 하던 걸 더 발전 시킬 수 없는 건 가 하는 생각도 들고, 이 일을 정말 잘 할 수 있을 까 의문점이 들게 되었다.

이런 와중에 산 호세에서 Strata+Hadoop World 2015에 참여를 하게 되었고, 빅 데이터 관련 최신 트랜드를 확인 하는 과정에 Python이 굉장히 큰 비중을 차지하고 있는 것을 보고 무척 놀랐었다. 빅 데이터 관련 기술들이 대부분 Java로 이루어져 있어,  Java에만 신경을 쓰고 있었던 것은 나의 과오였었고, 웹 개발에는 Front-end, Back-end 포함한 Full-Stack JavaScript 쪽에 관심을 가지고 있었는데, 이쪽 분야를 보니 Python 커뮤니티가 굉장히 크고, Science 쪽에서는 가장 선호 하는 프로그래밍 랭귀지 라는 것을 알게 되었다.

실은 작년 말에 영국 자회사에 방문 했을 때도, 본인들이 필요한 툴들을 Python을 개발하여 업무에 활용하는 것을 보고서는 크게 감흥이 없었었다. 하지만, 지금 생각 해보니, Computer Science/Engineering 쪽에 백그라운드도 없고 경험도 없는 사람들이, 그저 본인들의 업무의 비효율성을 제거하고 생산성을 높이려는 목적으로 반복적으로 수행하던 업무를 본인들이 가장 쉽게 배울 수 있는 언어로 개선했다는 것에 조금 더 주목 했어야 하지 않았나 싶다.

해서, 개발자로서의 나의 경력을 이용하면서 수행하과 있는 과제를 진행하기 위해서는 알고리즘을 구현하는 엔지니어가 아니라, 잘 알려져 있는 알고리즘에 대한 특징, 장/단점을 파악 하고, 잘 알려져 있는 라이브러리들을 활용하여, 빠른 시간내에 구현해서 적용/테스트 하는 것이 지금 내가 할 수 있는 가장 가치 있는 일이라는 생각이 들었다.  또, 새로운 것을 배우고 싶어하는 목마름에 쉽게 다가갈 수 있는 Python은 수년전에 Node.js를 시작하면서 JavaScript 의 단순함과 자유도에 매력을 느꼈던 그때의 기분이 재현되게 해 줄 수 있을 거라는 생각이 들었다.

여기서 나는 Python 기반의 기계학습 구현이 가능한 엔지니어로 성장해보려고 한다. 그러다 보면 bottom-up으로 자연스럽게 알고리즘에 대한 이해와 필요한 기반 지식들을 익힐 수 있으리라 기대한다. 빅 데이터, 인공지능, 머신러닝, 딥러닝 등에 관심이 점점 많아지는 요즘, 나와 같이 전형적인 기업 IT 시스템을 개발 하던 많은 개발자들이 비슷한 고민을 하고 있다면, 훗날 좋은 경험담을 공유하고 싶다. :)

>_