@hongminhee

Hong Minhee

Ask @hongminhee

Sort by:

LatestTop

루비에 대해선 어떻게 생각하세요? 파이썬보다 환영받지 못하는 이유는 뭘까요?

Python에 비교하자면, 언어 자체의 기능은 더 좋은 게 많습니다. 가령 Ruby는 컨티뉴에이션도 제공해요. 그런데 Ruby 커뮤니티에서 이 기능을 가지고 좋은 걸 만들어서 쓰는 걸 보기 힘들거든요. 이게 Ruby의 문제라고 생각합니다. C#과 비슷한 형국인데, 커뮤니티가 언어의 탁월함에 미치지 못한다고 할까요.
아무래도 Ruby 자체가 탄생에 비해 흥행한게 굉장히 나중이라, 다들 아시다시피 2000년대 초반에 Andrew Hunt, David Thomas가 “실용주의 프로그래머”에서 Perl 대신 Ruby를 쓰고 있다는 언급을 하고, 2000년대 중반에 PHP하다 빡친 DHH가 Rails라는 프레임워크를 Ruby로 작성하면서 널리 쓰이게 됐잖습니까? 언어가 아무리 95년에 만들어졌다지만 커뮤니티는 사실상 10년 뒤인 2000년대 중반부터 시작된 셈입니다.
또 다른 원인으로는 Ruby가 웹 개발 중심으로만 문화가 집중된 면도 있다고 봅니다. 가령 Python 문화적 태생은 대체로 두 갈래로 볼 수 있는데, 한쪽은 연구자 집단, 즉 scientific programming 쪽입니다. 이쪽은 NumPy나 SciPy, matplotlib, IPython 같은 도구들을 남겼고요. 다른 한 집단은 원래 C와 Perl로 시스템 프로그래밍하던 사람들입니다. 사실 하나 더 있습니다. Common Lisp이나 Smalltalk 하던 엔터프라이즈 쪽 사람들이 Common Lisp이나 Smalltalk가 망하면서 대안으로 ‘그나마 덜 나쁜’ 언어였던 Python으로 넘어와서 Zope 같은 물건들을 만들었죠. 사실 Python 철학의 많은 부분들이 이러한 ‘오래된 집단’의 지혜로부터 온 면이 많습니다. 쉽게 말해, Python 해커들은 보통 Python이 첫번째 언어가 아닙니다. 원래 다른 언어로 프로그래밍을 능숙하게 하던 사람들이 이런 저런 이유로 ‘말년에’ 선택한 언어가 Python이예요. 일종의 이민자의 땅인 셈이죠. 그래서 커뮤니티 내에서 퍼진 미덕이나 철학이 Ruby에 비해 상식적입니다. 가령 Python 커뮤니티는 sys.modules가 나쁜 것이라고 하는 반면 Ruby 커뮤니티는 open class가 좋은 것이라고 합니다.
위에서 말했던 부분에서 마지막 차이점이 발생하는데요. 그 당시 Python 해커들은 대체로 원래 자기가 능숙하게 쓰던 언어들이 있었습니다. 더욱이 그 언어가 C 같은 것들이 아니라 Common Lisp 같은 것이었다면 PHP나 Java 쓰던 사람이 Ruby 쓰면서 느끼는 놀라움 같은 것은 없었을 거라고 봅니다(…). 그러다보니 Python 언어는 커뮤니티의 입김을 많이 받는 쪽으로 성정한 것 같아요. 또한 Perl의 영향력이 대단했던 시기였기 때문에 그 당시 Python을 쓰던 사람들도 커뮤니티의 중요성을 잘 이해했습니다. 그리하여 Python 커뮤니티의 큰 특징이 하나 생기는데 “언어 사용자가 언어를 디자인해야 한다”는 인식입니다. 그래서 또 PEP이라는 언어를 개선하는 표준적인 절차가 마련됐고요. 언어 사용자가 언어에 기여해야 한다는 이런 생각은 나중에 PyPy 같은 것까지 나오게 만듭니다. 언어에 기여하려는데 Python VM은 정작 C로 되어 있으니 많은 사람이 개선을 못하죠. 그러니까 Python으로 Python 언어를 구현해야 한다는 발상도 나온 거구요.
반면 Ruby는… ruby-dev 메일링리스트는 몇년 전까지만 해도 일본어로 운영됐어요. 지금은 어떤지 정확히 모르겠지만, 여전히 영어하고는 거리가 먼 일본인들이 언어 개발의 주축입니다. 이러면 커뮤니티 접근성이 떨어지죠.
저는 Ruby가 10년 정도 뒤에는 커뮤니티 수준이 많이 좋아져 있을 거라고 생각합니다. 하지만 10년 뒤에도 Ruby가 다른 언어에 비해 상대적으로 “현대적인” 언어로 취급될지는 모를 일이지요.
당연히 여기서 쓴 내용은 제가 원인이라고 짐작하는 것이고, 아마 실제 원인은 더 다양하지 않을까 합니다.

View more

프로그래머가 되고싶고, 정보 보안을 부전공으로 택하고 싶다는 고등학생 친구에게 가장 먼저 어떤 언어를 추천해주면 좋을까요?? C??Python??

정보 보안이 어떤 분야인지 잘 모르겠습니다. 그래서 그 부분에 대한 고려 없이 말씀드리겠습니다.
일단 연령대에 따라 다른 선택이 가능할 것 같습니다. 그리고 평소 관심사도 중요하고요. 이를테면 보통 게임 좋아하는 청소년이 프로그래밍 시작하려고 하면 당장 몇일 안으로 눈에 보이는 게임 같은 것을 완성하고 싶어합니다. 그런 친구한테 C나 Python 같은 걸로 시작하려고 하면 실패하는 경우가 많습니다. 자기가 기대하던 것과 다르다는 생각이 퍼뜩 들어서 다른 길 찾는 경우를 많이 봤습니다. 그럴바엔 차라리 RPG 쯔꾸루 같은 걸로 시작하는 게 좋다고 생각합니다.
그러보니 이 답변과도 연결되는 이야기인데요. http://ask.fm/hongminhee/answer/20285901727
대부분의 경우에 아직 프로그래밍을 모르는 사람이 “프로그래머가 되고 싶다”고 하는 경우 그게 구체적으로 정확히 프로그래머를 뜻하는 경우는 별로 없다고 봅니다. 그렇기 때문에 C든 Scheme이든 Python이든 컴퓨터 과학적인 기초를 가르쳐주는 게 원하는 것과 많이 다를 가능성이 높아요. 보통 “프로그래머가 되고 싶다”고 하는 경우, 특히 그게 어린 친구일 경우, “‘게임’ 프로그래머가 되고 싶다”, (제 어렸을 때 같은 경우에는) “‘제로보드 같은 웹 애플리케이션’ 프로그래머가 되고 싶다” 같이 매우 구체적인 이미지가 있습니다. 요즘 애들의 경우에는 웹 개발보다는 스마트폰 앱을 만들고 싶어하더군요. 하여간 그걸 잘 캐치해서 당장의 목표를 빠르게 충족시킬 수 있는 최단 경로를 제시하는게 좋다고 생각합니다. 설사 그 경로가 프로그래밍 일반적인 관점으로 봤을때 우습고 ‘미천한’ 기술이라고 하더라도 말입니다. 왜냐면 그렇게 해야 지루하기 쉬운 프로그래밍의 과정을 수단적으로라도 습득하게 되고, 그 과정에서 재능을 발견할 경우 일반적인 컴퓨터 과학 자체에 대한 관심으로 돌릴 수 있기 때문입니다. 혹시라도 그렇게 되지 않더라도 애초에 자신이 원하던 바(게임 프로그래밍 하기, 제로보드 같은 게시판 만들기)를 이룰 수 있으니 그것 나름대로도 좋습니다.
프로그래밍을 가르쳐달라고 하면 ‘프로그래밍’의 본질이 ‘목적과 동떨어진 일반적인 수단’이기 때문에 처음부터 수학 일반에 대한 재능이 있고 흥미를 느끼는 경우가 아니면 흥미를 유도하며 가르쳐주기 힘듭니다. 이는 아이들에게 수학을 흥미를 유도하며 가르쳐주기 힘든 이유와 근본적으로 같다고 생각합니다. 둘 모두 학문 자체가 눈에 보이는 목적성을 가지고 있지 않기 때문에 학습의 보상을 제공하기 힘듭니다. 다행히 수학과 달리 프로그래밍은 (과학 실험처럼) 학습 과정에 tangible한 것들을 주입하기 쉽습니다. 그러니까 그런 부분을 잘 활용해야 성공할 수 있지 않을까 생각합니다. 제가 예로 든 경우에는 그게 게임이나 게시판이 되는 거고요.

View more

비행기를 타고 샌프란시스코에 컨퍼런스를 가는 도중 테러리스트에게 하이잭킹을 당해 비행기 밖으로 던져졌습니다. 정신에 차려보니 무인도에 떠밀려와 있었습니다. 앉아보니 옆사람이 꼭 쥐고 있던 가방이 옆에 같이 떠밀려와 있네요. 그 가방 안에는 무엇이 들어있나요?

귀사에는 입사 지원하고 싶지 않군요.

Related users

Armin Ronacher (@mitsuhiko)는 파이썬 세계에서 유명한가요? 오픈 소스 무림에서 어느 정도의 위치에 있는 사람일까요?

Python 웹 개발 쪽에서는 아마 Ian Bicking과 더불어 가장 영향력 있는 사람 중 하나가 아닐까 싶네요. 저랑 동갑인데 대단하다고 느끼고 있습니다.
Pocoo라는 팀이 있는데요. http://pocoo.org/ 원래는 Python으로 만들어진 phpBB 같은 종류의 오픈소스 포럼 소프트웨어를 만드는 팀이었고요. 이 팀에서 나온 오픈소스 히트작이 꽤 많습니다. 가령 Python 공식 문서를 비롯해 대부분의 패키지에서 문서화하는데 쓰고 있는 Sphinx는 이 팀의 일원이자 Python 재단의 Georg Brandl이 만든 거고요 (물론 Pocoo 팀의 다른 사람들도 일조를 했습니다). http://sphinx-doc.org/ GitHub 등에서도 구문 강조 엔진으로 쓰고 있는 Pygments도 Pocoo에서 만들었습니다 (이것 역시 Georg Brandl 작품). http://pygments.org/
그런데 사실상 이 팀에서 나온 히트작 중 반 이상은 Armin Ronacher의 작품입니다.
- Flask http://flask.pocoo.org/
- Werkzeug http://werkzeug.pocoo.org/
- Jinja http://jinja.pocoo.org/
- Babel (원래는 Trac으로 유명한 Edgewall에서 만든 거지만 관리가 안되서 Armin Ronacher가 메인테이너쉽을 인수인계 받음) http://babel.pocoo.org/
- MarkupSafe https://pypi.python.org/pypi/MarkupSafe
Ian Bicking이 컨셉 만드는 데 뛰어난 창의력 대장이라면, Armin Ronacher는 좀더 노련한 구현자에 가까운 느낌입니다. 참고로 Pocoo 팀을 만든 것도 Armin Ronacher입니다.
Armin Ronacher가 블로그에 직접 Python 커뮤니티의 일원이 된 과정을 쓴 글이 있으니 그것도 참고해보세요. http://lucumr.pocoo.org/2014/2/13/programming-communities/

View more

그럼 엔터프라이즈 급 웹 개발에 다른 파이썬 웹 프레임워크를 사용한다면 쓸만 할까요? 아니면 아예 큰 규모의 개발에서는 파이썬이 적합하지 않은가요? 적합한 것이 있다면 추천 이유도 함께 알려주시면 감사하겠습니다.

규모라는 표현이 애매하다고 생각합니다만 노동집약적이면 거의 항상 Java가 정답이죠. Python 프로그래머 100명이고 200명이고 뽑을 수 있다면 좀 달라질 수 있고요.
언어 자체가 실수를 적게 해주는 면도 있고 좀더 강력한 것을 제공할 수도 있는데 보통 저 둘은 배타적이지만 잘 설계된 언어 중에서는 양쪽에서 성과를 얻기도 합니다. 가령 Java는 실수를 적게 해주는 면이 많고 Python은 좀더 강력한 걸 제공하죠. 하지만 Java는 복잡한 일을 가능은 하지만 쉽게 해주지 않고 Python은 프로그래머를 낙관적으로 여기기 때문에 실수를 알아차리기 힘들게 하기도 합니다. Haskell이나 Clojure 같은 언어들은 위에서 비교한 양쪽 관점의 현대적 버전이라고 볼 수 있습니다. Haskell은 강력한 타임 시스템으로 사람의 실수를 좀더 빠르게 알아차리고 Clojure는 Common Lisp과 같이 강력한 매크로나 다양한 동시성 모델을 모두 제공하죠. 하지만 현대적이기 때문에 Haskell은 Python만큼은 강력하고 Clojure도 Java만큼은 실수로부터 안전합니다. 네 가지 언어 중에서 골라야 한다면 사실 Java와 Python은 고를 이유가 없는 거죠.
하지만 언어 선택은 사회적인 행동이기 때문에 (아직) Java와 Python이 Haskell과 Clojure보다 더 선호되는 것입니다. 노동집약적이면 Haskell과 Clojure보다는 Python과 Java가 낫고, Python보다는 Java가 낫다고 생각합니다. 하지만 그 이유가 Java라는 언어가 대부분의 언어보다 큰 규모의 소프트웨어에 적합하기 때문은 아닙니다. 큰 규모의 소프트웨어는 때때로 덜 노동집약적인 대신 더 기술집약적인 방식으로 소수의 인원으로 만들어지기도 하기 때문입니다. 엔터프라이즈에서 Java가 유리한 이유는 대부분의 엔터프라이즈가 규모가 크기 때문이 아니라 기술 대신 노동력을 투입하는 형태로 복잡도를 해결하는 경우가 많기 때문입니다.
일단 제 생각은 그렇습니다. 그렇기 때문에 Java를 추천합니다.

View more

블로그 포스팅하실때 그 길이와 내용의 깊이에 깜짝 놀라게 되는데 보통 포스팅하실때 생각나는 아이디어를 영감받을때 한번에 휘리릭쓰시나요?아니면 글감등을 저장해놓았다가 여러번 퇴고하시면서 발행하시나요? 그리고 그런 내용들의 양분인 책이나 생각등을 평상시에는 어떻게 정리하시고 기억또는 기록하시는지 궁금합니다. 책은 많이사시나요??

저도 초고를 써놓고 나중에 올리려고 쌓아둔 글이 좀 있습니다만, 몇년 블로깅 경험상 그런 글이 방출된 경우는 한번도 없었습니다. 앞으로도 그런 글이 나올 일은 별로 없을 것 같습니다.
영감이랄까요… 사실 영감이 떠올라서 쓰는 경우는 거의 없고 그냥 평소에 하던 생각을 어떤 계기로 글로 정리해야겠다는 생각이 들어 30분 정도 투자해서 올리는 경우가 많습니다. 그것보다 오래 걸리는 경우에는 제가 지쳐서 올리질 못합니다. 의욕이나 동기도 금방 죽어버려서요. (위에서 언급했듯 초고를 쓴 글이 영영 완성되지 않는 이유.) 가장 오래 붙잡았던 글이 시험으로부터 “분리된 이론은 과학이 될 수 없는가” http://blog.dahlia.kr/post/47304464713 와 “과학은 엘리트주의인가” http://blog.dahlia.kr/post/47304560922 이 두 글인데, 합쳐서 꼬박 하루 종일 썼던 것 같습니다.
글을 쓰는 주요 동기는 (다른 사람은 어떨지 모르겠지만) 사람들을 설득하고 싶어서입니다. 주로 다른 사람들이랑 대화하다가 떠올라서 쓰는 경우가 많고요, 혹은 자기 전에 떠올라서 도로 컴퓨터 켜고 쓰는 경우도 종종 있습니다.
책은 제가 많이 사는 편인지 어떤지 모르겠습니다. 주변에서 정말 책 많이 읽는 분들과 비교했을 때 별로 안 사는 것 같습니다.

너무 식상하고 구태의연한 질문이지만. 프로그래밍을 처음 배워보려는 생초짜는 어떤 언어를, 어느 책으로 봐야할까요;;?

이 부분에 대해서는 개개인마다 각자의 답을 찾아야 합니다. 따라서 정확히 원하시는 대답을 해드리기는 힘들 것 같습니다. 그 대신, 그런 자신만의 답을 이끌어낼 수 있는 내용을 얘기해볼까 합니다.
모든 분야가 다 그렇지만, 프로그래밍 역시 입문자가 어떤 ‘자원’을 보유하고 있느냐에 따라 선택 가능한 답의 폭이 상당히 달라집니다. 당장 생각나는 것만 나열하자면,
- 영어에 친숙한가: 당연하지만 영어로 된 자료가 한국어 자료보다 훨씬 많습니다. 영어에 친숙하면 더 괜찮은 (이해하기 쉽고, 더 정확한 내용을 전달하는) 입문서를 구할 수 있습니다. 게다가 어떤 책이 좋은지에 대한 서평조차 영어로 된 것이 더 많으니… 한국인으로 태어난 게 슬플 뿐입니다. 영어에 친숙하지 않다면 어쨌든 한국어로 된 입문서가 있는 프로그래밍 언어와 플랫폼 안에서 선택해야 합니다.
- 수학에 친숙한가: 수학에 친하지 않으면 같은 개념도 돌려서 설명해야 하는 경우가 많죠. 이미 아는 개념은 수학에서 그걸 가리키는 용어로 설명하면 그만이고요.
- 여유 시간이 얼마나 많은가: 고등학생보다는 중학생이, 직장인보다는 대학생이 프로그래밍 공부하기 좋습니다. 뭘 공부하든 마찬가지겠죠. 어쨌든 시간이 많다면 명확한 방향이 다소 없어도 이것저것 찔러보고 다닐 수가 있습니다. 그렇지 않다면 한 가지에 집중하는 전략을 써야겠죠.
- 프로그래밍을 활용해야 하는 상황과 얼마나 맞닥드리는가: 프로그래밍도 자주 해야 늡니다. 당연히 그래야 하는 상황이 자주 있다면 그쪽이 성취가 더 빠를 수밖에 없겠죠. 가령 평소에도 주로 컴퓨터로 일을 했고, 엑셀로 통계적 처리를 자주 했다거나 하면 그런 쪽으로 프로그래밍을 활용할 계기가 자주 생기겠죠. 반면 뭐 소설을 쓴다던가 하는 직업이라면 따로 시간을 내서 취미로 프로그래밍을 하게 되니 아무래도 우선 순위도 낮고 지치고 짜증나는 날에는 거르기도 할테니 성취가 빠르진 않을 겁니다.
- 구체적으로 만들고 싶은 것이 존재하는가: 위와 관계된 얘기입니다. 가령 저는 처음 프로그래밍을 배우게 된 계기가 초등학교 때 운영하던 포켓몬스터 홈페이지에 게시판을 달고 싶어서였습니다. 그러니까 저한테는 다른 홈페이지에도 있는 게시판의 구체적인 모양(글 목록이 보이고 제목을 누르면 글 내용이 보이고, 그 밑에 댓글을 달 수 있고…)이 머릿속에 있는 상태에서 프로그래밍을 배우기 시작했습니다. 배우는 내내 게시판 만드는 데에는 별로 도움이 될 것 같아 보이지 않는 (하지만 나중에는 그게 정말 중요한 프로그래밍 지식이었던) 부분은 읽다 어려우면 쉽게 포기하고 넘어가고, 정말 게시판 만드는데 필요한 부분은 어려워도 계속 붙잡고 늘어지는 식으로 ‘선택과 집중’을 할 수 있었어요. 근데 이게 입문자에게는 매우 중요합니다.
- 만들고 싶은 것의 분야: 만약 만들고 싶은 게 초등학생 때의 저처럼 게시판이라면, 웹 개발을 하기 위해 PHP를 배울 수 있겠지요. 반면 간단한 테트리스 게임을 만든다고 하면 플래시 같은 것을 배우는 게 좋은 출발이 되겠고요.
- 정보 검색을 잘하는가: 살면서 네이버로 간단히 맛집 찾는 정도의 검색만 해온 사람과, 구글에서 여러가지 학술 자료들을 뒤져서 원하는 정확한 문헌을 찾아내던 사람 사이의 정보 검색 능력은 차이가 있겠지요. 프로그래밍 학습에도 똑같이 적용되기 때문에 검색을 잘 하면 프로그래밍 성취에 *매우 큰* 차이가 납니다. 정보 검색 능력이 떨어지면 보통 C/C++를 첫 언어로 선택하게 됩니다… 네이버에서 프로그래밍으로 검색하면 저런 것들이 제일 많이 나오기 때문이죠.
- 도와줄 멘토가 있는가: 참고로 여기서 멘토라는 건 지역적인 것과 아무 상관이 없습니다. 가령 저는 고등학교 때 고급 프로그래밍을 IRC에 있는 여러 멘토들을 통해 찾을 수 있었습니다. 오히려, 같은 학교 선배, 옆집 프로그래머 아저씨 등은 프로그래밍을 아주 높은 수준으로 잘하는 사람이 아닐 가능성이 더 높습니다. (지역성은 전문성을 찾는데 어떤 도움도 주지 못하는 매개변수입니다.) 음… 저처럼 무작정 똑똑한 프로그래머 많이 있다고 소문난 해외 IRC 채널이나 커뮤니티 눈팅하고 말도 걸어보고 병신 같은 질문도 날려보세요.
- 컴퓨터와 친숙한가: 독학을 한다면 이 부분이 의외로 영향을 주는 것 같습니다. 여기서 친숙하냐는 것은, 프로그래밍을 똑같이 전혀 모르는 사람이라도 프로그램 설치하고 언인스톨하고, 디스크에 있는 파일 정리를 적절히 할 줄 알고, 운영체제 재설치를 할 줄 알고 하는 것들이 다를 수 있으니까 하는 얘기입니다. 프로그래밍 가르쳐주려는데 컴파일러 설치를 못해서 헤매다가 의욕 상실하고 안 배우겠다고 하는 사람을 본 적이 있습니다. 컴퓨터와 친하지 않다면 다른 것보다 개발 환경 설치가 간편한 언어를 고르는 게 중요할 겁니다.
- 끈기가 있는가: 의외로 프로그래밍 학습에서 흔히 간과되는 부분이라 굳이 넣어봅니다. 한 실험에서 (출처를 못 찾겠어요… 감안해서 신뢰하시길) 설문을 통해 성격의 어떤 요소들이 특정 과목에 대한 성적과 어떤 식의 상관 관계를 보이는지를 찾았다고 합니다. 가령 집 안에서 노는 것보다 밖에 나가서 노는 것을 좋아한다고 답한 사람들은 그렇지 않은 사람들에 비해 국어 성적이 몇퍼센트 높은 경향이 있었다더라 하는 식이죠. 그런데 수학에 대해서는 설문지에 있는 어떤 질문보다 높은 상관관계를 보이는 팩터가 있었다고 합니다. 바로, (설문지가 지루하고 매우 길었는데) 모든 질문에 끝까지 답했느냐가 수학 성적에 큰 상관 관계가 있었다는 거죠. 즉, 엉덩이 무겁고 끈기 있는 사람들이냐가, 다른 어떤 질문보다 그 사람의 수학 성적을 잘 예측할 수 있었다는 얘기죠. 저는 아무 근거 없지만 프로그래밍도 비슷하다는 의심을 하고 있습니다. ㅎㅎㅎ
아마 예전에 프로그래밍 배웠던 사람들은 저런 것 외에도 집에 개인용 컴퓨터가 있냐 같은 더 중요한 매개변수가 있었을 거라고 생각합니다. 다행히 지금은 누구나 집에 컴퓨터 한 대씩은 있지요.
써놓고 보니 두서가 없고 이게 도움이 될 것 같지도 않네여 ㅈㅅ

View more

트위터 헤더사진에 "php는 똥이라고"라는 글귀를 보았습니다. 다른언어와 비교하여 어떤 점이 똥인지 5가지정도 나열해줄 수 있나요?

언어 자체에 대해서는 이 글을 보시면 다섯가지가 너무 부족하다는 것을 아실 수 있을 겁니다. http://ko.blog.influx.kr/2012/04/php.html 그리고 저는 그와 더불어 PHP 커뮤니티도 상당히 문제가 있다고 봅니다. 제가 썼던 다음 글도 참고해주세요. http://blog.dahlia.kr/post/21044381028

죄송합니다; 파이썬에서 사용하는 TDD 프레임워크로는 어떤게 좋나요?

저는 py.test (http://pytest.org/) 추천합니다. 이 라이브러리는 PyPy 팀이 meta-tracing JIT 컴파일러라는 매우 복잡한 소프트웨어를 테스트하기 위해 (기존 테스팅 프레임워크들이 제대로 만족을 못했기 때문에) 직접 만들어온 프레임워크입니다. 제가 추천하는 이유는 여러가지가 있습니다.
1. 기능이 많습니다.
2. 확장 플러그인이 많습니다.
3. 기능이 많습니다.
4. 개발이 매우 활성화되어 있습니다. 업데이트가 꾸준합니다.
5. 기능이 많습니다. PyPy를 테스트해야 했기 때문에 매우 기능이 많습니다.
유일한 단점은 Python 라이브러리답지 않게 마법이 많다는 것입니다. 어쩔 수 없는 점도 있고, 피할 수 있었을 부분도 있는데 하위호환성 때문에 지금까지 못 바꾸는 것 같습니다. 다음은 제가 좋아하는 기능 목록입니다.
- 모듈화된 픽스쳐: 픽스쳐를 사용하기 위해 특정 테스트 케이스가 하나 이상의 픽스쳐에 의존하고 있다는 식으로 기술합니다. 이때, 픽스쳐 역시 다른 픽스쳐에 의존할 수 있습니다. 예를 들어 test_a가 fx_a, fx_b 에 의존하고 fx_b는 fx_a에 의존하는 경우, fx_a, fx_b 픽스쳐가 불려집니다. Topological sorting을 하므로 fx_a는 두 번 불리지 않고 맨 처음에 한번만 불립니다. 픽스쳐를 이렇게 모듈화하면 테스트 수행 시간 개선에 매우 큰 효과가 있습니다. 쓰지도 않는 픽스쳐를 매번 만들지 않아도 되기 때문입니다.
- assert rewriting: 다들 아시다시피 Python에는 assert 문이 있습니다. 근데 표준 라이브러리에 포함된 unittest 등은 그걸 쓰지 않고 assertEquals() 같은 메서드를 사용하게 합니다. 그 이유는 assert a + b == c 같은 식으로 써서 실패했을 때 (a + b)의 결과와 c 값을 표시할 수 없기 때문입니다. 그런데, py.test를 쓰면 그런 메서드를 쓰는 대신 Python에서 원래 assert 문을 쓰듯이 assert f(a + b) == c + d 같은 식으로 테스트할 수 있습니다. 만약 실패할 경우 py.test는 해당 비교 표현식의 모든 부분표현식을 출력합니다. 앞서 예로 든 식의 경우, f(a + b), (c + d), (a + b), a, b, c, d의 값을 모두 보여줍니다. 이건 Python에 import hook이나 AST 같은 컴파일러 서비스 및 매크로(등으로 쓰일 수 있는 훅)를 이용한 마법인데, 구현 방식에 대해서는 다음 포스팅을 참고하세요. http://pybites.blogspot.kr/2011/07/behind-scenes-of-pytests-new-assertion.html 가능한 모든 부분 표현식의 결과를 출력하기 때문에 양변의 값만 얕게 출력하는 assertEquals() 등의 메서드를 쓰는 것보다 훨씬 유용합니다. 더 중요한 것은, assertDoes() 메서드는 비교 방식이 추가될 때마다 별도의 확장이 필요해지는 반면 assert rewriting은 일반적으로 아무 비교 방식을 쓸 수 있다는 점입니다.
- 테스트 케이스 매개변수화: 같은 테스트 케이스에 다른 매개변수를 집어넣어 여러가지 케이스를 작성할 수 있습니다. 테스트 케이스 안에서 nested for 문을 쓰는 것과 다른 점은, test discovery할 때 각각의 매개변수화된 테스트 케이스 인스턴스가 별개의 테스트 케이스로 취급된다는 점입니다. 가령, 특정 매개변수에 대해서 실패했어도, 성공한 매개변수에 대해서는 성공으로 취급합니다. 테스트 케이스를 별도로 보기 때문에 xdist 등으로 분산화할 경우에도 잘 쪼개어진다는 장점이 있습니다.
- xdist: xdist를 이용하면 CPU의 멀티코어를 이용해서 테스트 케이스를 병렬로 실행할 수 있습니다. 테스트 수트가 방대해져서 오래걸리게 되면 매우 효과가 좋습니다. 참고로 아예 물리적으로 다른 머신으로도 분산이 가능하다고 합니다. 근데 저는 거기까지는 안 해봐서 잘은 모르겠습니다.

View more

Wand를 지금 만들면 ctypes 대신에 cffi 를 쓰실 것 같다고 하셨는데, 명백한 장점이 있어서 그런건가요? 궁금합니다.

PyPy에서는 ctypes가 cpyext보다 빠르고 CPython에서는 C 확장이 ctypes보다 빨라요. 그래서 ctypes를 선택하면 PyPy에서 JIT 가속이 되는 대신 CPython에서는 최선의 결과가 나오지 않고, C 확장으로 만들면 CPython에서는 최선의 결과가 나오지만 PyPy에서는 제 성능이 나오지 읺게 됩니다. cffi는 PyPy 팀에서 만드는 새로운 C FFI인데 Ctypes처럼 이미 헤더 파일로 존재하는 정보를 redundant하게 다시 적을 필요가 없다는 점에서도 편하지만 무엇보다 양쪽 VM에서 최선의 결과로 나온다는 점이 큰 장점입니다. 게다가 cffi는 아예 RPython 수준에서 인터페이스를 만들어주니까 PyPy에서는 ctypes보다도 결과가 좋습니다.

현재 초중등학교에서 제공하는 컴퓨터 수업은 워드프로세싱과 하드웨어 지식(다시 말해 종이 시험에 최적화된 콘텐츠 위주)에 치우쳐져 있다는 생각이 듭니다. 정규 교육으로 제공해야 하는 컴퓨터 수업은 무엇을 중점적으로 가르쳐야 할까요?

예전에 제가 해당 주제에 관해 썼던 글이 하나 있습니다. 부끄럽지만 그걸 읽어주세요. http://blog.dahlia.pe.kr/articles/2009/01/09/%EC%B4%88%EC%A4%91%EA%B3%A0-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%90%EC%9C%A1

코딩을 아이콘으로 하는 것에 대한 답변을 보고 질문드립니다. 요새 건축 쪽에서는 그래스하퍼라는 툴이 유행인데요. http://www.grasshopper3d.com/ 기존에 다 있던 스크립팅을 시각적으로 표현한 건데 불이 붙고 있습니다. 시각적 프로그래밍 같은 것도 특정한 전문분야에서 전문가(하지만 프로그래밍은 비전문가)들이 사용하기에는 가치가 있지 않을까요?

많은 생각이 들게 하는 질문을 주셔서 감사합니다.
시각적 프로그래밍이 특정 전문 분야에서 전업 프로그래머가 아닌 도메인 전문가들이 사용하는 게 가치가 있을 거라는 생각에 동의합니다. 하지만 그건 시각적 프로그래밍이 아닙니다. 정확히는 프로그래밍이 아닙니다. 유용성을 부정하는 게 아니라, 프로그래밍 도구는 아니라는 뜻입니다.
RPG 쯔꾸루라는 소프트웨어가 있습니다. 롤플레잉 게임을 만드는 데에 최적화된 게임 저작 도구입니다. Ruby 같은 언어를 이용해서 스크립팅도 가능하지만, 대부분은 비 언어적 조작으로도 괜찮은 게임을 만들 수 있게 되어 있습니다. 저는 이 도구가 꽤나 유용하다고 생각하지만 이게 프로그래밍 도구라고 생각하지는 않습니다.
프로그래밍이나 수학이 다른 분야와 크게 차이를 갖는 지점이 바로 그 자체로는 일반적이고 목적성이 없다는 데서 비롯되기 때문입니다. 무슨 얘기냐 하면, 소프트웨어라 함은 게임 소프트웨어를 만들거나 전화기 앱을 만들거나 음악 재생기 앱을 만들 수 있는 일반성을 포함하는 개념이지, 브루마블이나 거실의 무선전화기나 전축을 소프트웨어라고 부르는 건 아니기 때문입니다.
거듭해서 말하지만 저는 그러한 도구가 유용할 수 있다고 생각합니다. 하지만 그걸로 프로그래밍을 할 수 있는 건 아닙니다.

코딩을 텍스트 문서로 하지 않고, 아이콘이나 도형등으로 하는 몇가지 플젝들이 시도 되었다가 망했는데... 그 원인을 분석하시자면...?

저는 프로그래밍의 어려움이 코드의 표현형에서 나오는 게 아니라 문제 자체의 난해함에서 온다고 봅니다. 비슷한 이유에서 저는 Lisp의 괄호가 문제라고 생각하지 않고, Perl의 sigil이 프로그래밍을 어렵게 만든다고 보지도 않습니다. 저는 구문적인 부분보다 시멘틱이 문제의 복잡도를 낮추는데 더 많이 기여한다고 봅니다. 그렇다고 한다면 코딩을 아이콘이나 도형으로 한다고 뭐가 바뀌는 건 아니죠.
그리고 이 부분에 대해서 좀더 할 말이 있습니다. 사람들이 보통 그런 걸 “시각화”한다고 하지 않습니까. 그런데 이 말에는 텍스트는 시각적이지 않다는 뜻이 함축되어 있는데… 근데 텍스트는 눈으로 안 읽나요. 사람들이 시각화라는 말을 쓸 때는 보통 그걸 눈에 보이게 만든다는 말이 아니라 기호의 임의성을 제거해서 비기호화된 형태로 만들겠다는 욕망이 들어있습니다. 말은 horse라는 단어가 아니라 정말 눈 앞에 만질 수 있는 실제 말에 가까운 것으로 표현되어야 한다는 것이죠. 여기까지 하죠. 프로그래밍과 수학에서 기호를 빼면 뭐가 남는다는 건지…
Liked by: Eunchong Yu khris

저는 모 스타트업에서 일하는 개발자입니다. 부끄럽지만 저희 회사에는 OSS에 관심을 두는 직원분들이 없어요. 개발팀장님이 그나마 관심이 많아서 깃허브에서 이런저런 활동을 하고 라이브러리 하나 정도 공개하긴 했습니다. 이런 회사 내부에서 공유의 문화를 갖도록 변화를 일으킬만한 뭔가 계략이 있을까요? 민희님이 거치신 spoqa나 styleshare는 이런 문화가 잘 정착된 분위기같아서 조언을 구합니다!

실은 저도 그 질문에 대한 뾰족한 답은 찾지 못했습니다. 언급하신 두 곳 중에 스타일셰어의 경우에는 제가 첫 프로그래머였고 제가 있을 동안 개발팀의 크기가 크지도 않았습니다. 데려온 사람들도 원래 알던 사람들이나 한 다리 건넌 경우가 많았기 때문에, 어차피 관심 분야가 겹치는 사람들이다보니 그런 분위기가 자연스러웠던 것 같습니다.
스포카의 경우 거친 것은 아니고 여전히 다니고 있습니다. 이 곳은 개발팀이 원래 있었는데, 이미 개발팀 내에서 그런 활동에 열의가 있는 분위기였고 저도 그 분위기에 묻어간 편입니다.
그러니까 저 역시 제가 어떤 노력을 해서 그런 분위기가 전혀 없던 팀을 변화시켜볼 기회는 없었습니다. 오히려 그렇지 못한 전 직장 중에 실패한 경험이 더 많고요. 시도해 본 적은 없지만 저도 아직까지는 모두 실패했다, 정도로 정리할 수 있겠네요. 다만, 제가 스포카에 들어왔을 시점과 지금이 팀의 크기나 인력 구성이 많이 달라졌는데도 갈수록 그런 분위기는 강해진 걸 생각하면, 초기 인력(꼭 초기일 필요는 없지만 보통 먼저 있던 사람들이 팀에 영향력이 강해서)의 열의와 채용 전략이 분위기 만들기에 중요한 역할을 하는 것 같습니다.
Liked by: John Doe

aws 에 데이터베이스를 세팅하려 합니다. 데이터베이스는 postgresql 로 정했구요. 그런데 amazon RDS 를 사용하는 것이 좋을지 ec2 위에 직접 데이터베이스를 설정하는게 좋을지 고민됩니다. 몇일째 관련 내용을 서칭하는데 또렷한 답이 있는 편은 아니네요. 어떤게 괜찮을까요?

어느 쪽이 좋은지 모르겠으면 쉬운 쪽으로 가세요. 저라면 그런 상황(정보가 별로 없는 상황)에서 설정이 간편한 RDS로 갈 것 같습니다.
Liked by: Moon Soo Kim

사용하시는 소프트웨어는 모두 정품을 사용하고 계신가요?

어릴 때는 불법 복제 소프트웨어를 쓴 적이 있었지만, 이제는 다 정품을 씁니다. 앱 스토어 등에서 정품 소프트웨어 구입하기가 너무 편해지기도 했고요, 애초에 오픈 소스 대안이 있으면 그걸 최대한 시도해보는 편입니다.
Liked by: John Doe

개발자가 맥북을 사용하는 이유는 뭘까요? 편해서라면 맥북보다 리눅스가 각광받지못하는이유는 뭘까요?

개발자라고 컴퓨터로 개발만 하는 건 아니니까, 가 답 중 하나가 될 수 있지 않을까요? 주말에 아니메나 좀 볼까 했는데, 전날 apt-get upgrade 했던 여파로 부팅이 안돼서 삽질하느라 몇 시간 날리면 좀 짜증이 나긴 하죠.
Liked by: John Doe

CD 리핑 할 때 FLAC으로 뽑고 보관하시나요?

한때 무손실에 집착했었는데(FLAC 말고 ALAC 썼음), 어차피 CD로도 있는 거 replica에 정보가 좀 손실되면 어떻냐는 깨달음을 얻고 약 2년 전부터 AAC 320kbps VBR로 인코딩하고 있습니다. 그 전부터 어차피 제 귀로는 차이를 못 느낀다는 것쯤 알고 있었고요. 집착했던 이유는 음악 감상자로서가 아니라 아마추어 컴퓨터 과학자로서의 태도였죠.
Liked by: Mabin

처음 직장을 구하려고 하는데..앞으로 backend개발자가 되고싶습니다. 그런데 신입backend개발자는 구하는 곳이 별로 없더군요. 그래서 frontend쪽도 보는데 이게 앞으로 개발자 커리어쌓는데 방향이 맞는걸까요? 민희님은 첫직장에서 어떤일을 하셨나요? 그리고 퍼블리싱쪽도 하셨나요?

첫 직장에서 Rails로 웹 개발했습니다. 그 당시에는 웹 개발에서 프론트엔드와 백엔드 분업이 이제 막 되기 시작했을 때라 둘 다 했습니다. 퍼블리싱 일을 해본 적은 없고요.
저도 커리어가 엉망이라 제가 해드릴 수 있는 조언이 별로 없군요…
Liked by: Sungyong Kang

소수(또는 하나)의 개발 언어를 깊이 있게 아는 것이 좋을까요? 아니면 그보다는 깊게는 못하더라도 여러가지 언어를 다룰줄 아는 것이 좋을까요? 추가적으로 위 질문에서 "개발 언어"대신에 "플랫폼" 또는 "도메인 지식"이 들어간 경우의 질문에 대한 견해도 궁금합니다.

ㅋㅎㅎ 제 코가 석자라… 뭐 진부한 답이지만 뭘 하려고 하느냐에 따라 달라지지 않을까요. 가령 OS를 만든다고 하면 언어를 다양하게 배우는 것보다는 더 중요한 게 많이 있겠죠. 저 같이 언어를 만들고 싶은 사람 기준으로는 언어는 다양하게 읽힐수록 좋은 것 같고요. 근데 둘 다 일반적인 케이스가 아닌 것 같네요.
그리고 언어든 플랫폼이든 다양하게 해보기 전에 그래도 가장 익숙하고 잘 안다고 여길만한 것은 하나 정도 있어야 하지 않나 싶고요.
근데 가끔 새로운 언어나 플랫폼을 배울 때 매번 자기가 가장 잘 아는 것에서 대응되는 개념으로 ‘번역’해서 이해하려고 시도하는 분들도 있는데 어느 정도는 그게 도움이 되지만 모든 것에 그렇게 대응하다보면 다른 언어의 장점을 못 보고 단점만 찾다가 끝나기 십상이라 안 좋은 것 같아요. 가령 (요즘에는 다행히 이런 분들 보기 힘들어졌습니다만) Java나 C++만 하던 분이 JavaScript 처음 접하고 나서 클래스 없으니 OOP는 못하네 하고 (함수 객체나 렉시컬 스코프 같은 좋은 것들은 보지도 않고) 금방 던지시는 분들이라거나, Haskell 보고 (타입 시스템이나 모나드, normal-order evaluation 같은 희귀한 장점들은 발견 못하고) 타입클래스 보더니 이건 클래스가 아냐 하고 던지시는 분들이라거나… 이런 분들 없을 것 같아도 사실 상당히 많고 옆에서 저런 소리 보면 좀 후덜덜합니다.
뒤쪽 질문은 제가 전혀 모르는 쪽 얘기라 대답을 대충으로도 못할 것 같네요.
Liked by: Hayden Kim

언어를 변경해야 하는 이슈가 있을 때, 무엇보다 제일 걸리는 건 엔지니어링인데요. SE쪽 역시 기존 환경(가령 CentOS, Apache, Tomcat, mod_php)에서 변화를 주는 걸 꺼리기도 하고요. 일단 Ruby(on Rails) 쪽은 주변에 엔지니어링에 대한 실패담이 많아서 굉장히 조심스러운데요. Python으로 웹개발을 할 때, 엔지니어링 측면에서 신뢰도는 어떻게 느끼셨나요? 안정화된 구성이 일반화 되어 있는지, 아니면 좀 더 모험적으로(혹은 적극적으로) 엔지니어링 해 나갈 각오를 해야할 지... 조언 부탁드립니다.

사실 모범적인 구성 사례는 찾아보면 굉장히 많습니다. 근데 문제는… (제 편견일 수는 있어도) 국내 SE 분들은 영어로 된 문서 정말 싫어하시더군요. 영어로 된 자료를 다 제외하면 사실 남는 자료 별로 없죠. 그렇게 보면 모범적인 구성이 ‘없다’고 봐도 과언이 아니긴 합니다.
그래서 국내에서 Python 도입하는 경우 보면 보통 SE가 없는 조직이 많아요. 그 왜 (별로 좋아하는 말은 아니지만) DevOps라고 하잖아요.
Liked by: Eunchong Yu

markdown이나 rest같은 문서화 방법 중 소프트웨어 문서화로는 어떤 방식을 추천하시나요?

어떤 도구가 있느냐에 따라 많이 결정되는 것 같습니다. 저는 Sphinx가 있기 때문에 ReST를 씁니다. 아직 Sphinx와 비슷한 수준의 문서화 도구는 본 적이 없군요.
Liked by: Eunchong Yu

Next

Language: English