2019의 게시물 표시

python 언어의 간결함

이미지
python을 사용하는 건 대부분 딥러닝을 포함한 분석 때문이긴 하지만 언어의 간결성 때문에 프로토타입 소프트웨어를 만들 때에도 매우 편리하다. flask 웹 서버가 매우 확장성이 좋은데 template 지원 기능이 기존의 JSP, ASP와는 전혀 다른 방식으로 간편하다. 게다가 matplotlib으로 만든 차트를 웹에서 d3 기반으로 embed하는 것( mpld3 )도 가능하다. 데이터 -> python -> 웹까지 쉽게 연결되는 셈이다. 최근  빅데이터 처리를 위해 JVM 기반인 Spark 위에서 python 프로세스를 fork/exec 시키는 PySpark를 왜 쓰나 분석해보기도 했는데 (데이터 전달과 serialize 오버헤드에도 불구하고) 역시 python이 갖고 있는 Java나 Scala가 주지 못하는 데이터 처리 능력 때문인 것 같다. 시스템적인 측면에서 보면 python을 웹 서버나 분산 미들웨어로 쓰는 건 매우 어리석은 일이라고 볼 수 있어서 (multithread 기반의 concurrency가 global interpreter lock 때문에 몹쓸 놈이 되기 때문) python 기반의 openstack을 toy 시스템 외에 production으로 쓰려는 건 바보같은 짓이라고 생각하는데 Google이 십여년 전에 Google AppEngine이라는 PaaS 서비스를 오픈하면서 python 언어로 먼저 제공하고 그 다음에 Java 언어를 지원했던 이유를 알 것 같다. (클라우드 서비스에서 스케일링은 미들웨어가 아닌 컨테이너와 같은 OS 가상화를 통해 지원하면 되니... process pooling을 사용하거나 중요한 백그라운드 잡을 c/c++로 개발했을 수도...) JVM으로 python을 fork하는 PySpark도 어쨌든 시스템 미들웨어로서 python을 쓰는 것은 무리이지만 데이터 분석은 python으로 하고 싶은 요구사항에서 나온 거라고 생각된다. 데이터 오버헤드 관점에서는 정말 말이 안되는 것 같은데

소프트웨어 엔지니어가 critical thinking을 학습하려면

젋은 친구들이 소프트웨어를 업으로 하고 기업에 입사하거나 창업에 도전하는 모습이 이제는 사회적으로도 상당히 기대를 받는 장면이 되었다. 그런데 지식 산업인 소프트웨어를 연구 개발하는 역할을 하기 위해 어떤 성장이 필요할까? 개인적으로 최근 몇년간 딥러닝 쪽 공부를 하면서 미국 대학 강의를 들을 기회가 많은데 대학 시절에 공부를 제대로 하지 않아서인지 상당히 인상적인 부분이 있었다. 아마 명강의란 그런 것이 아닌가 싶은데 지식의 전달 방식의 차이였다. 대부분의 책에서 찾아보기 힘든 교수님의 지식에 대한 직관(intuition) 혹은 관점에 대한 전달이었다. 수학적 증명을 하고 난 다음에 이것을 수식이 아니라 직관적으로는 어떻게 이해를 할 수 있느냐 하는 부분이 매우 중요한데 지식을 이해한다는 것이 어떤 솔루션이나 아이디어의 기반이 되는 지식으로 발전하기 위해서는 직관이 가능한 멘탈 이미지로 머리 속에 재정립시킬 필요가 있다. 지식이 머리 속에서 살아 있는 직관 가능한 모델이 되어서 여러 가지 개념들과 느낌들이 무수히 연결되어야 한다. 즉, 평소에도 친숙하게 느낄 정도로 쉬운 개념이거나 숙련으로 쉽게 연상할 수 있는 개념이 되어야 한다. 예를 들어 친숙한 ‘코끼리’라는 개념은 여러 가지 코와 귀, 몸무게, 여러 가지 코끼리의 특성에 대한 것들을 연결시켜준다. 쉽게 직관할 수 있는 모델로서 이해하는 과정이 intuition 관점의 추가 이해라고 볼 수 있다. 이 멘탈 이미지 혹은 개념적 요소로 인지하면 비로소 지식은 유연성을 얻어 이를 기반으로 다양한 유추가 가능해진다.  소프트웨어를 기업 환경에서 다루는 사람이라면 소프트웨어에 맞는 생각하는 방법을 배워야 더 큰 소프트웨어를 다룰 수 있고, 또 깊이를 가질 수 있다. 창의적 사고의 중요한 요소라고 하는 critical thinking(임계적 사고)이나 system thinking(체계의 사고)은 특정 지식 혹은 영역에서 임계적 요소를 식별하고 이를 좀더 깊이있게 사고할 수 있는

아이디어는 가장자리에서 발생한다

이미지
그림의 중심과 에지 사이의 거리는 복잡성의 정도를 표현한 것이다. 아이디어는 항상 복잡한 영역에서 발생하지 않지만, 현재 지식 수준의 경계에서 발생한다. 따라서, 거듭된 사고를 끝까지 한다면 누구나 새로운 아이디어를 만들 수 있다.

기술 조직의 매니저는 얼마나 많이 필요할까

기술 조직에서 매니저는 얼마나 많이 필요할까. 관리 편의를 위해 일찍 매니저가 된 친구들은 스스로 기술 개발을 하지 못하고 관리와 다른 팀원들의 연구 결과를 간접적으로 이해하고 판단하는 업무를 할수밖에 없는데 지식 체계의 기반이 부족해지고 스스로 연구할 수 있는 능력을 잃게 마련이다. 물론 관리도 재능이 필요한 영역이긴 하지만 상대적으로 단기간에 학습할 수 있는 영역이다. 연구 전문성에 대한 코칭이나 리딩은 금새 학습할 수 있는 게 아니어서 결국 다른 상위 관리자의 의사결정에 기대게 되기도 한다.  너무 이른 매니저 역할은 전문가로 성장할 기회를 잃기 쉽다는 뜻이다. 기술직을 시작한지 1,2년만에 팀장이 되면 준비없이 관리와 기술 의사결정에 관여하게 된다. 결국 형식적인 패턴에만 익숙해질 가능성이 높다. 이십년 가까이 IT 업종에서 일을 하고 매니저 역할만 했던 이가 얘기를 해보면 전혀 생각의 깊이가 없는 경우를 볼 때가 가끔 있다. 외부에서 보기엔 훌륭하고 성실한 매니저로 비춰지기도 하지만 실제로는 전혀 무언가를 스스로 이해하고 판단하는 환경에 있지 못했던 것이다. 그냥 패턴적으로 조건반사하듯 의사결정을 반복하고 기술적 피드백을 이해하지도 못하는 모습은 웃프다.  한국은 위계적 문화 때문에 위계 상의 윗 사람이 진정으로 뭘 학습하기가 쉽지 않다. 개인적 성실성으로 한다고 해도 비평해줄 사람이 거의 없다. 깊이있는 의사결정을 할수 있는 오픈된 토론 회의 문화도 큰 역할을 하겠지만 너무 일찍 매니저들을 만들기보다는 관리를 자율 책임에 많은 영역을 넘기고 매니저를 줄이는 방식이 유의미하다고 생각한다. 이런 경우 의사결정자의 윗쪽으로 갈수록 조금 더 큰 인내심을 필요로 할수 있다. Bottom-up이 활성화되면 top-down은 이해시키는 비용을 포함해야 한다. 위계의 계층을 줄일 수 있는 자율 단위 규모가 최대 100명 남짓이라면 그 정도 안에서 대부분의 크리티컬한 의사결정이 이루어질 필요가 있는 셈이다. (젊은 친구들이 어쩔수없이

왜 ‘최고’ 인재들이 창의력 없는 결과를 내놓을까

이미지
원 글 :  Why hiring the ‘best’ people produces the least creative results 관련 도서 :  The Diversity Bonus How Great Teams Pay Off in the Knowledge Economy 창의적인 팀웍을 만들려면 어떻게 해야 할까 나름 재미있는 관점을 제공해주는 글이 있어 소개한다. 한글로 번역한 글을 읽었는데 원 글에 나오는 통계학적 기법이나 마르코프 프로세스를 이해못해서 핵심을 잘못 전달했기에 원 글을 읽어보길 추천한다. 글은 수학 전공한 교수님이 논리학 수업 시간에 교통 체증을 컴퓨터로 모델링하는 방법에 대해 설명하는 것으로 시작한다. 교통 체증 상태의 차량의 흐름을 추적하는 건 엄청난 메모리와 연산량을 필요로 하게 된다. 교수님은 이런 경우엔 빈 도로를 추적하면 된다고 아이디어를 제시한다. 교통 체증 상황에서 빈 도로의 흐름을 추적하도록 모델을 만드는 아이디어이다. 이러한 아이디어 이야기들은 몇 가지 공통점이 있다. 1.  복잡한 문제이다. 차원이 높은 문맥을 다루기 때문에 설명하기도, 엔지니어링하기도, 개선하거나 예측하기도 까다롭다. 2.  획기적인 아이디어는 마법처럼 떠오르거나 완전히 새롭게 만들어지지 않는다. 기존의 아이디어, 직관, 기교나 룰에서 출발하며 이것들을 참신하게 적용을 한 것이거나 결합한 것이다. 앞의 교통 체증 사례는 정보 이론의 최소 서술 길이minimum description length 즉, 같은 정보를 가장 짧게 기술하는 기법 개념을 참신하게 적용한 사례라고 볼수 있다. 이러한 아이디어들은 조금의 이득을 가져온다. 하지만 이런 아이디어들이 모이게 되면 커다란 반향을 가져올 수가 있다. 진보는 거대한 도약 만큼이나 작은 걸음들의 누적을 통해서도 크게 이루어진다. 3. 이런 아이디어들은 그룹 환경에서 태어난다. 한 사람이 어떤 문제에 대해 자신의 관점을 얘기하고 해결에 대한 접근법을 설명하거나 해결에 집중하고 있는

창의성을 발현시키려면

아이디어의 시대이다. 모든 기술은 학습과 아이디어를 통해 유지되고 발전한다. 하지만 특별한 우연이 창의를 만드는 건 아니다. 나는 창의성은 ‘끝까지 생각’하는 여정에서 ‘단속적으로 생각을 많이’ 하는 데서 나온다고 생각한다. 수없이 거듭되는 문제 재인지, 심화 속 어느 순간에 Aha의 찰나가 숨어있다. 적절한 문제 정의는 솔루션을 유추하게 해주는데 ‘끝까지’는 수많은 단계iteration를 의연하게 거쳐갈 수 있어야 하며 ‘단속적’이라는 뜻은 생각의 속도 조절이 도움이 된다는 뜻이다. 물론 이 속도 조절에는 생각의 방향을 역방향으로 틀어 다시 문제의 재정의로 회귀하는 걸 포함한다. 방향 전환은 속도를 떨어뜨리지만 목표 지점을 다시 찾게 하고 더 나은 길을 찾을 수 있게 해준다. 많은 생각을 끊임없이 완급과 방향을 조절하며 엄밀한 문제 해결의 지점으로 찾아가는 과정은 무작위적인 과정이 아니다. 무작위적인 과정은 평범한 관행적 사고에 머물게 한다. 끝까지 검증하고 경계를 밀어붙이는 엄밀성이 창의를 만든다. 마치 aha 현상이 무작위적 사고인 것처럼 보이지만 뇌의 다양한 사고 패턴들이 무의식적으로 동작하는 것일뿐 그 패턴 관점에서는 개인별 특성을 가질 수 있다. 그 특성은 물론 유전과 학습을 통해 갖춰지며 변화해간다. 즉, 개인별 타고난 특성과 엄밀한 아이디어 경험들이 창의적 사람을 만든다고 봐야 한다. Nothing mystic.