'Programming'에 해당되는 글 4건

  1. 2011.08.26 하수구 청소와 디버깅. (49)
  2. 2009.05.21 페이퍼 코딩의 유용성. (1)
  3. 2009.05.21 G사와 N사의 코딩 면접.. + 전산책들... (25)
  4. 2007.06.28 어떤 언어가 좋을까? - 스크립트 언어 (44)
0.
집에 하수구가 막혔다.
세달전에 한번 뚫었고, 한달이 지나니까 슬슬 조짐이 이상하더라.

그때 전화를 하니, 설비 아저씨가 "물이 안빠질쯤, 제대로 막히면 그때 작업합시다" 라더라.
결국 딱 세달만에 완전히 막혔다..

그래서 오늘 오후 반차를 쓰고 집에 가서 설비 아저씨를 불렀는데...
뭐랄까, 이게 디버깅을 하는 느낌이 들었다면 이상한걸까.

1.
오늘 대략 쑤신(?) 깊이는 12미터 가량.
이정도면 일반 주택의 하수구로는 거의 끝까지 간 셈이라고 하더라.

뭐 여튼, 내 입장에선 옆에서 개고생을 하고 있는걸 보니, 이 일이 딱히 쉽다고 생각은 안들더라.
이런건 DIY로 하고 싶지 않은 그런것 이랄까.
이런 업종(?)중 하나로는 이삿짐 운반도 포함한다. 여튼간에.

2.
좋은 툴은 쉽게 일을 할수 있게 한다.

일반 가정집에서 하수도를 뚫는데엔
강철로된 스프링을 하수구에 밀어 넣어서 이물질을 끌어낸다.
강철 스프링을 진동+회전을 통해서 밀어 넣게 되면
회전+진동에 의해 이물질은 스프링안쪽에 모이게 되고
머리카락같은건 스프링에 엉겨서 나오게 된다.

그리고 그 화전력과 진동은,
굴곡을 적당히 잘 들어가게 하고, 쉽게 밀어 넣어지게 되고, 쉽게 뺄수 있고, 또 이물질이 잘 걸리게 된다.
간단하게 이야기 하자면, 좋은툴은 디버깅(이떄는 하수구 뚫기?)가 쉬워진다는것.

일반 옥션이나 지마켓에 파는 수준의 툴로는 길이가 된다고 하더라도,
그정도 수준으로 밀어 넣기도 힘들고 쉽게 들어가지 않는다고.
분명히 좋은 디버깅 툴이나 도구는 생산성을 확 올려 주는게 맞다.
사실 그게 정답이다.

3.
지속적으로 테스트를 한다.

왜 굳이 물이 꽉 찬 상태였으면 좋겠다고 했을까?
가끔 일어나는 하이젠베르그 오류의 경우에는 왜 이게 나는지 무슨 이유로 어떻게 나는지 알수가 없다.
이럴때에는 정말 미칠 지경.
일단 물이 꽉 차있는 상태라면, 하이젠베르그 버그는 아닐테니, 확실한 문제(?) 상황을 시도해볼수 있게 되는것.

물론 내부에 배관이 어떨지 알수가 없지만,
어쨌든 뚫기를 try 해보는것이고
일차적으로 문제 해결은 가능하지 않겠나.

그리고
적어도 막혀있다면, 그 막혀 있는 문제는 물을 틀어가면서,
세탁기에 물을 받아서 한번에 내려 보면서(부하를 주는 스트레스 테스트를 하면서) 지속적으로 테스트 하고,
고쳐보고 테스트 하고 고쳐보는 단계를 거치게 된다.

이런 테스트를 통해서 몇번 이상 성공을 했다면,
비로소 문제가 없음을 선언하고 작업을 종료 하게 된다.

4.
구조

두번째 불렀을때 아저씨는 집을 돌아다니면서 배관을 확인하고 있었다.
어떻게 어느 위치로 어떤 경로로 이것이 뻐져나가게 되는지 어떻게 뚫어야 할지 생각했던것이리라.

그리고 스프링을 적당히 굽혀보기도 펴보기도 하면서 스프링을 조절을 하더라는 것. 

결국 매커니즘을 잘 알수록, 그에 대한 접근 경로를 추측해볼 여지가 생긴다는것.

5.
어차피 세상 만사가 그런것이 아닐까.
저작자 표시 비영리 변경 금지
신고
Posted by 죠짱
갑자기 전산 이야기만 우수수 하는게 좀 그런데... 어쨌든.. 이런글도 간만에 떴으니까..
(덤으로 회사에서 대기중이라 시간이 살짝 남는다..)

페이퍼 코딩이 유용한 경우는 다음과 같다.

1. 이 녀석이 제대로 알고나 있는놈인지 아리까리 할때.
 -  기본도 못하는놈 아냐? 라는 생각이 들때..
 - 써놓고 제대로 컴파일 되는 정도까지 뽑아 주는지 최소한의 스크리닝이 필요할때..

2. 자신있는 언어를 얼마나 자신있게 하는지 알아 볼때.
 - 설마 copy & paster 인가 알아볼때...
 - 필요한 정도의 언어 이해도를 알아 볼수 있다.

3. 알고리즘구현을 얼마만큼 쌈빡하게 할수 있는지, 오류가 얼마만큼 나오는지 알아 볼때.
 - 적어도 자신있는 언어로 자신있게 코딩하는것을 보면 알고리즘 구현은 쉽게...
 - 메모리 사용방식이나, 그런걸 쉽게 볼수 있음..
 - 디버깅을 머리로 해야 하므로, 이해도 측정이 가능. 정확히 이해하고 있는 경우에만 알고리즘을 쉽게 오류없고, 필요한 코드 누락없이 페이퍼 코딩이 가능하다.

4. 자신감. 기타 돌아가는게 얼마나 똘똘한지 볼때.


결론:
신입이거나 초짜일 경우, 페이퍼 코딩을 해보라.
정말 도움이 된다.

참고로 G사에 면접볼때는 파이썬을 주로썼다. 어차피 내가 파이썬으로 페이퍼 코딩하고 파이썬을 모르는 면접관이 궁금해하면 문법 설명해주면 그만이었다. 물론 지금은 C++ 코딩. 요즘은 주로 유지보수중.
저작자 표시 비영리 변경 금지
신고
Posted by 죠짱
전세계에서 짱드시고 계신 G사.
한국의 경우에도 회사에 점심에 출장뷔페를 해주는 그 회사에 전에 면접을 본적이 있다.
사실은 그냥 아는 형님이 면접보러오라는 이야길 해서, 나도 넣어보겠어! 라는 단순한 사유였으나.. 운좋게도 제법 올라갔었다.
어차피 시험볼때 쓰는 서약서 덕분에 뭐라고 문제를 밝힐 수준은 못되지만...

면접에서 제법 많이 올라 가봤던 경험으로는.. (물론 경력은 아니고 신입이었다만..)
G사에서 필요한 정도는 ACM레벨이라면 스킬은 충분해 보인다.
ACM이상으로 필요한 부분은 문제를 창의적으로 해결하는 부분인데..
이건 말로 하긴 어렵다.

Programming Challenges(알고리즘 트레이닝 북)  본문보기
스티븐 S. 스키에나 | 서환수 역 | 한빛미디어 | 2004.07.16
평점10건 | 네티즌리뷰 9건 | 최저가 19,500원 구매하기
책본문 : 알고리즘 트레이닝 북 Programming Challenges(p) 이 책의 본문검색결과 더 보기

생각하는 프로그래밍(프로그래밍 본질에 관한 15가지 에세이)  
존 벤틀리 | 윤성준 역 | 인사이트 | 2003.02.04
평점19건 | 네티즌리뷰 17건 | 최저가 11,000원 구매하기
책소개 : Programming Pearls(2/e)의 번역서!! 프로그래밍을 할 때 기계적이거나 수동적인 태도를 가지고 있지는 않은가? 필요한 기능이 동작할 정도의 상태만 되...


대략 추천하는 책은 저정도.
알고리즘 트레이닝 북은 ACM수준 문제집이니까 한번 쯤 보면 도움되리라 생각 한다. 사실 문제도 생각만큼은 어렵진 않다. 생각하다 보면 답이 나올만하다. 어쨌든 try try try. 대충 전산쪽 3-4학년정도면 쉽게 볼만하다. (뭐 G사 면접에서 저런 문제가 나올거라곤 생각하지 말라.. 하지만 저런 스타일이라는건 확실하다. 그러니까 ACM스타일...)

생각하는 프로그래밍은 사실상 손에서 떼기 힘든 책이다. 일종의 바이블이라고 봐도 될정도의 책이며, 생각의 전환에 대한 많은 암시를 던져준다.

대충 문제는 알고리즘을 제시하고,
가장 자신있는 언어로 화이트보드 코딩 또는 페이퍼 코딩을 하는거다.
디버깅까지 해야 하는데, 디버깅은 어차피 같이 해주기도 하니까,
문제 풀어내는 플로우를 집중적으로 본다.
경력이 있고, 긴장하지 않는다면 그다지 어렵진 않다.

반면에..
한국회사들은 떨어뜨리기 위한 문제가 집중적으로 나온다.
물론 그때그때마다 틀리긴 하지만,
여긴 로직이나 이런부분도 아니고,
자질구레한걸 묻는건 어디나 마찬가지인듯.
사실 N사도 그랬다. 면접도 어느정도 그런 면이 있고..

몇 회사를 봤는데..
어디까지나 코더를 뽑는듯한 인상이 있지....
실제로 같이 일하는 사람을 뽑는 느낌은 G사가 유일했던것 같다.
(하지만 회사 입장으로는 엄청난 리소스를 투입하는꼴이 되어서 G사 형식의 면접은 그다지 추천할만한건 못된다...)

한국 같은 경우는 그냥 정보처리 기사 문제를 페이퍼로 옮겨둔 듯한 느낌이다.
왠지 MSDN의 상당수를 옮겨둔듯한 뉘앙스인데...
그건 왠만한 사람들이라도 커버 하긴 어렵다.

사실 욕심이라면
The Art of Computer Programming 3(정렬과 검색)  본문보기
도널드 커누스 | 류광 역 | 한빛미디어 | 2008.01.28
평점0건 | 네티즌리뷰 0건 | 최저가 37,800원 구매하기
책소개 : 이 책은 알고리즘을 좀더 깊게 파고들 필요가 있는독자를 위해 여러 권으로 이루어진 시리즈 도서 중 세번째 책이다. 3권에서는 정렬과 검색이라...

이런책을 추천해보는것도 응당하다고 생각하겠으나...
아무래도 저걸 추천하는건 바보같다는 생각.

실제로 많은 부분은 프로그래밍 챌린지 정도로도 충분하다. 이미 프로그래밍 챌린지를 쉽게 또는 빠르게 풀수 있을 수준이라면 당신은 스킬로만 두고 본다면 이미 수준급이라 생각한다. 참고로 저거 푸는데 로직을 생각하고 페이퍼 코딩을 하는게 쉽지 않다. 나는 도서관에서 집에서 페이퍼 코딩을 했었다. G사에 준비할때 말이지.

============
그외에 진심으로 추천할만한 책이라면....

내가 본 책중에서는 알고리즘을 가장 에센셜하게 풀어 낸 책은
쉽게 배우는 알고리즘(관계 중심의 사고법) (2007)  
문병로 | 한빛미디어 | 2007.02.05
평점1건 | 네티즌리뷰 1건 | 최저가 23,750원 구매하기
책소개 : 자료구조의 이해 + 알고리즘의 설계/분석 + 재귀적/귀납적 사고방식의 훈련= 문제 해결 기법의 훈련【누구를 위한 책인가?】이 책은 프로그래밍...

이 책이 가장 쉽고 편했다. 


회사에서 UNIX코딩을 하면서 본 책중 재미있었던 몇가지 책은...
인사이드 머신  
존 스토크스 | 전동환안익진 역 | 에이콘 | 2007.03.30
평점2건 | 네티즌리뷰 2건 | 최저가 22,100원 구매하기
책소개 : 현대 컴퓨터의 실리콘 심장! 그 내부를 들여다보자최근 아마존 컴퓨터 인터넷 부문 탑 셀러에 랭크된 이 책은 매우 훌륭한 컴퓨터 아키텍처 책...

Great Code(제2권 로우레벨을 고려한 프로그램 최적화)  
랜달 하이드 | 안병규이건호박철현임중근심지웅 역 | 에이콘출판 | 2007.07.26
평점3건 | 네티즌리뷰 3건 | 최저가 23,700원 구매하기
책소개 : 로우레벨로 생각하고 하이레벨로 코딩하자!『GREAT CODE 제2권 로우레벨을 고려한 프로그램 최적화』는 고급언어로 작성된 소스 코드가 컴파일러...

도움이 되었던 책은....
Essential C++  
스탠리 B. 립먼 | 최세영 역 | 정보문화사 | 2006.04.04
평점0건 | 네티즌리뷰 0건 | 최저가 10,500원 구매하기
목차 : ... copy() replace_if(), replace_copy_if() reverse(), reverse_copy() rotate(), rotate_copy()...

뭐 이정도..
나야 이 동네에선 아직도 초짜고 실력도 그닥인 축이라.. (워낙에 날고기는 분들이 가득찬 랩이라...) 이런거 추천하는것도 조심스럽다.

저작자 표시 비영리 변경 금지
신고
Posted by 죠짱
요즘 루비건 파이썬이건 이래저래 이야기가 많다. 루비는 Ruby on Rails 라는 걸출한 프레임웍 덕분에 한창 뜨는 언어이고, 파이썬은 방대한 라이브러리의 지원으로 인기몰이를 하고 있다.

자 웹에서 사용되는 고전적인 스크립트 언어인 PHP를 두고 보자 이녀석을 웹에 붙였을때는 상당히 빠르게 작동하며, 리소스 사용량도 그다지 크지 않다. 캐슁 모듈을 덧붙였을경우에는 상당히 경이적인 속도를 자랑한다. 거기다 APM이라는 사실상 표준적인 구성과 C와 비슷한 스타일의 문법은 프로그래머의 진입장벽도 확 낮춰주기때문에 편하기 까지 하다.

사실상 지금은 스크립트 언어 춘추 전국시대라 할만하다. 그래서 어떤 스크립트 언어가 좋을까, 또는 간단한 소개 정도로 스크립트 언어들을 이야기 해보려고 한다. 물론 내가 그 많은 언어들을 죄다 써보고 이야기 하는 것도 아니며, 이런 이야기 안에서도 개인적인 호불호가 다소 섞일수 있음을 감안하고 보는것이 좋을듯하다. 물론 여기에서도 언급하지 않은 상당히 많은 (리습이라던가 루아라던가, 스몰톡이나 ,TCL같은) 스크립트 언어들이 있지만 적어도 여기에선 가장 많이 쓰이고 가장 유명한 언어를 뽑아 보았다.


1. 펄
펄에 대한 오해는 펄이 복잡하고 느리다는 것이다. 하지만 재미있는 사실중 하나는 펄은 그렇게 느린 언어도 아니고 아주 복잡한 언어도 아니다 라는점. 보통 펄이 문자열 처리에 강력한 면을 보이다 보니 정규식이 떡칠된 극히 짧은 코드를 보고 나서 질려 버리는 경향이 많다. 사실 또 펄 프로그래머들이 그런 코드를 즐겨쓴 경향도 있다.

하지만 펄 그자체로만 두고 본다면 상당히 빠르고 간결한 언어라 할만하다. 거기다 다른 어떤 스크립트 언어가 따라잡지 못하는 백엔드 라이브러리가 존재 한다. CPAN이라 불리는 이 라이브러리는 지금까지 나온 거의 모든 라이브러리를 랩핑해 뒀다고 할만한 정도. 긴 역사 만큼이나 가히 인류의 지적재산의 총아라 할만하다.

펄은 빠르다. 스크립트 언어중에서 펄을 이길만한 언어는 그다지 많지 않다. 그나마 초간단 문법을 자랑하는 임베딩 스크립트 언어인 Lua정도가 펄보다 빠를뿐, 그외의 현존하는 거의 다른 메이저 스크립트 언어와 비슷하거나 좀더 빠르다.(물론 파이썬은 비슷한 수준이며, 파이썬을 컴파일해서 돌리는 경우 펄보다 빠르긴 하다. 하지만 순수 스크립트 실행만 보았을때는 펄이 아주 빠른편이다 라고 할수 있다)

하지만 보통의 경우에 펄이 느리다 라는 편견을 가지게 되는 것은, 웹 프로그래밍에서 펄이 CGI로 실행될때가 아닐까. mod_php같은 경우는 아파치나 다른 웹서버랑 찰떡으로 붙어서 구동되다 보니 빠르게 느껴 질텐데 사실 펄은 그다지 느린편이 아니다.

2. 파이썬
개인적으로 가장 좋아하는 언어이다. 이 언어를 좋아하게된 이유가 가장 의사코드(Pseudo Code)와 닮았다는 이유였으니, 그 느낌의 간략함과 문법적 부분은 대충 짐작 가리라. 일단 이 언어는 교조적이라는 표현이 붙을 정도로 대단히 제약적인 문법을 자랑한다. 하지만 이러한 제약점은 코드가 모호해지지 않고, 누가 코드를 쓰더라도 비슷한 스타일로 쓰고 비슷한 느낌을 주다 보니, 익히기도 쉬워지고, 유지보수에 드는 코스트도 낮아 진다. 물론 개인적인 성향에 따라서 여러 다른 방법으로 코드를짤수 있겠지만, 적어도 파이썬이라면, 어느정도 비슷한 느낌을 주는 코드가 만들어 지게 마련이다.

파이썬의 장점은 펄만큼은 아니지만 강력한 백엔드 라이브러리라 할만하다. 이런 많은 고품질의 백엔드 라이브러리는 개발자가 개발을 쉽게 할수 있는 기반을 마련해주기 때문에 상당히 큰 장점이 된다. 일례로 웹에서 파일을 받아와서 가공하고 다시 업로드 하는 프로그램을 짜더라도 십수줄에 모든것을 만들어 낼수 있다. 이것은 C나 C++ 또는 자바가 수백줄에 걸쳐서 해야하는 일을 지극히 짧은 구문내에서 할수 있다는 것을 의미한다.

이는 일반적인 프로그래머가 어떤 언어를 사용하던, 거의 비슷한 라인의 코드를 생산해낸다는 이야기에 따르면(팀 마르코), 엄청난 생산성의 향상을 가져오게 된다. 거기다 파이썬은 다른 코드들(자바건, C/C++이건...)과 잘 붙는다. 누가 표현하기로 파이썬은 Glue Language라고 하는데, 이런 특성은 파이썬이 속도가 필요할때 C모듈을 불러 쓸수 있다는 것을 의미한다. 이는 곧 전체적인 퍼포먼스도 놓치지 않는다는 이야기.

게다가 파이썬은 온-라인 인터프리터가 내장되어있다. 이말인 즉슨 한 문장을 실행시킬때마다 결과를 즉시 알아볼수 있고 이는 결국 디버깅이나, 설계상의 문제 발견에 아주 큰 도움이 된다. 이는 긍극적으로 설계/유지/보수를 한단계 끌어 올리는 훌륭한 도구라 할수 있다. 정 뭐 하면 계산기로도 쓸수 있으니, 그 아니 좋을소냐.

3. 루비
루비는 위의 파이썬의 장점을 거의 가지고 있다. 하지만 다른 몇가지를 꼽자면, 루비는 파이썬보다 덜 딱딱하다. 한마디로 프로그래머의 재량에 맡기는 스타일을 추구 한다. 거기다 무엇인가 새로운 것이 나오면, 그것을 언어적인 특징에 추가 시키는 형태에 가깝다 보니 파이썬같은 언어보다 한층 펄스럽다.(물론 나쁘다는것은 아니다. 자유스러움이 녹아 들면 그만큼 무엇인가 다이나믹하다는 뜻이고, 할수 있는 범위가 넓어진다는 이야기도 된다) 그러나 장점일수도 단점일수도 있는 이런 부분은 유지보수의 간결성을 떨어뜨리는 효과를 낳게 되지만, 이것도 Rails라는 걸출한 웹 프레임 웍으로 어느정도 커버가 되는듯 싶다.

IT쪽에서 언어를 들여다 보면, 특이하다면 특이한 현상인데, 괜찮은 프레임 웍이 있다면, 어느정도의 코드에 대한 간결함이 보장되게 되어있다. 이것이 안되는 부분은 C같은 것들. 여기는 하나부터 열까지 모두 셋팅을 해줘야 하다 보니 코드가 알아 보기 힘들고 골치아파지기 시작한다. 하지만 루비는 이런 부분이 상대적으로 적다. 그리고 온라인 인터프리터의 기능도 있으니.

그러나 벤치마크에 따르면, 파이썬이나 펄보다 약간 느리다는 점이 있지만, 이것은 그다지 큰 문제는 아닐듯 하다. 대체적으로 라이브러리가 약간은 부족해 보이는것이 사실이지만, 현재로선 라이브러리가 구축된 부분에 대해서는 극강의 짧은 코드를 자랑하다 보니, 루비의 미래는 꽤나 밝아 보인다. 그렇기에 현재의 스크립트 언어는 파이썬과 루비의 신흥(?) 양강 체제로 돌입하지 않을까.

4. PHP
한국내에서 사실 PHP를 빼놓을수 없다. 처음 부분에서 이야기 한대로 PHP는 APM이라는 거의 표준화된 환경으로 웹질의 왠만한건 다 할수 있는 막강한 웹 환경을 만들어 주다 보니. 거기다 사실상 국내 인터넷 초반을 장악했던 제로보드가 APM환경에서 코딩되었다는 사실은 지금도 그리고 한동안 PHP천하가 될수 밖에 없다는 것이기도 하다.

사실 언어적인 측면에서 PHP는 그다지 매력적이지 않다. 단지 C/C++의 문법의 서브셋으로, 그리고 그것들 보다 좀더 편한 스트링 처리와 함께 mod_php로 전세계를 평정해버렸으니. 그러나 원래의 목적이 그랬던지라, 웹을 제외한 부분에서는 그다지 좋은 언어가 아니다. 특히 PHP는 범용언어가 가져야할 부분들을 거의 가지고 있지 못하다. 그러나 이런것들을 모두 제외하고도 PHP가 가지는 장점은, 꽤나 쉽다는 점. 특히 문법이 C/C++의 서브셋이라는 뜻은 국내 6개월 초단기 프로그래머 라는 정책에 아주 잘 부합한다고 할수 있다. 보통 C/C++을 배울때 포인터 같은 개념에서 좌절을 먹는다는 것을 감안한다면, PHP는 이런 부분이 아주 최적화된 라이트한 언어가 아닌가. (사실 그런 의미로 C/C++개념이 없다면 루비나 파이썬의 오브젝트 할당이라는 개념의 로우-레벨한 부분은 이해하기 어려울수 있다)

이런 저런 문제가 있지만, 그렇기에 프로그래머가 할수 있는 여지는 꽤나 많다. 라이트한 언어 답게 지원하는것은 그다지 많지않지만 HTML태그와 PHP코드를 넘나드는 문법은 간결하고 쉽다. 유지보수는 쉽지 않지만, 그렇기에 역설적으로 코드 생산성은 높다 할만하다.

물론 PHP가 나쁜 언어란것은 아니다. 하지만, 대형 프로젝트에서 효율적이지 못하다. 그만큼 문제가 많고, 그만큼 유지보수가 힘들며, 그만큼 소스 보기도 어렵다. 적어도 수백줄이상 수천줄이 넘어가게되면 PHP코드는 가히 꼬여버린 스파게티 코드라 할만하다.

-------------------
분명 스크립트 언어를 하나쯤 배워두는것은 문제 해결에서 꽤나 좋은 접근법이 될수 있다. 따로 컴파일을 하고 셋업을 하는 거창한 작업을 하지 않더라도 바로 바로 값을 알아볼수 있으며, 내용을 트래킹해볼수 있다. 이는 곧 생산성의 향상으로 연결된다.

어려운 문제를 풀때 이러한 도구가 있다면 분명 엄청난 효율을 가져다 줄수 있다. 그렇기에 C/C++또는 자바를 주력으로 쓰고있더라도, 기본적으로 스크립트 언어 하나 정도는 배워 두는것이 좋을듯 하다. 그리고 이는 곧 행복 코딩의 지름길이 될수 있다.
신고
Posted by 죠짱


티스토리 툴바