게으른 프로그래머

semmal의 이미지

흔히 사람들은 IT개발자라고 하면 성실하다라고 생각하겠지. 그렇게 보면 난 엄청나게 게으른 사람임에 분명하다. 하지만 내 생각은 분명하다. 게으른 프로그래머만이 더 좋은 코드를 만들고 더 좋은 제품을 만들 수 있다.

성 실하게 시키면 시키는데로 주말없이 밤새워가며 프로그램짠다고 그 프로그램이 정말 좋은 프로그램이 될까? 난 그럴리가 없다고 본다. 세상에 나오는 수많은 편리한 도구들은 사람들이 머리를 쥐어뜯으며 짜매다가 나온 사색의 결과이지, 막노동식으로 무작정 만들어서 나온 것이 아니다. 어쨌거나 좋은 코드든, 편리한 도구이든, 히트하는 제품이든, 만들려면 최소한 머리를 쥐어뜯거나 짜매거나 사색을 즐길 시간이 필요하다는 말이다.

난 많은 시간을 소모해가며 아무생각없이 짠 프로그램보다, 적은 시간이라도 핵심을 짚어서 짠 프로그램이 더 가치가 있다고 믿는다. 그 나머지 시간은 어떻게 하면 내가 짠 코드, 내가 짠 프로그램이 더 잘돌아갈까? 더 편리할까? 를 고민하는게 더 좋다. 그런 생각이 안나면 놀 수도 있는거 아니겠나? 아이디어는 억지로 생각한다고 떠오르는 것이 아니라, 다른 일을 하다보면 언듯 떠오르는 경우가 최소한 내 경험에서는 꽤 많다.

회사의 회의시간에 들어가서 사장이 직원에게 좋은 아이디어를 요구해봐야 직원들이 대답할 수 있을리 없다. 매일 주말도 없이 밤늦게까지 별 생각없이 코딩하게 만드는 사장이 직원들에게 "생각"을 요구한다는 게 웃긴 일일지도 모른다.

내 가 생각하는 IT개발자의 미덕은 절대 성실이 아니다. 내 미덕은 게으름이다. 그저 일을 하지않고 땡땡이 치는 게으름이 아니라, 어떻게 하면 이 일을 간단하게 할 수 있을까? 어떻게 하면 이 일을 쉽게 할 수 있을까? 어떻게 하면 나중에도 이번에 한 일의 성과를 써먹을 수 있을까? 이런 생각을 하고 실천할 수 있는 게으름이다. 모르는게 있으면 공부하고, 아는 것이라도 해도 바뀐게 없는지 공부하고, 조금이라도 더 좋은 설계나 알고리즘을 고민하는 게으름이다.

아마 이 모든 것을 사장이 지켜본다면, 맨날 코드는 안짜고 멍하니 먼산을 바라보는 바보라고 생각하거나, 할 일 안하고 인터넷이나 뒤지고 있는 밥벌레라고 생각할지도 모르겠지만 말이다.

댓글

익명 사용자의 이미지

많은 시간을 들였는데 아무 생각이 없을 수도 있나요?
코딩 자체가 추상적으로 생각한 것을 구체화하는 과정인데
다른 생각을 하거나 일을 하다가 얻은 결과가 항상 옳다라고 할 수 없듯이 시간을 들여 짠 코드가 무조건 날림이라고 할 수 있을지요?

전 좋은 코드를 짜는 방법으로 깊은 사색 후의 단번에 나오는 결과 보다는 많은 시간을 들여 검증을 통해 계속 보완시키는 쪽이 더 바람직하다고 생각합니다.
그리고 휴식을 취하지 말라는것은 절대 아닙니다만, 먼산을 보고 '세월아~' 하고 있는 것보다 다른 사람과 토론을 하거나 관련된 책을 보는게 더 낫지 않을까요? 머리에서 현존하는 모든 알고리즘이나 패턴들이 암기되어서 줄줄줄 나오는게 아니면 말이죠.

김일영의 이미지

최고로 동감하는 글이네요.
+1 원츄

goeasylife의 이미지

맞는 말씀입니다.
단순 반복 작업은 프로그램을 만들어 컴퓨터에 시키고
그시간에 좋은 생각을 하는게 효율적인 방법 같아요..^^

semmal의 이미지

Quote:
전 좋은 코드를 짜는 방법으로 깊은 사색 후의 단번에 나오는 결과 보다는 많은 시간을 들여 검증을 통해 계속 보완시키는 쪽이 더 바람직하다고 생각합니다.
그리고 휴식을 취하지 말라는것은 절대 아닙니다만, 먼산을 보고 '세월아~' 하고 있는 것보다 다른 사람과 토론을 하거나 관련된 책을 보는게 더 낫지 않을까요? 머리에서 현존하는 모든 알고리즘이나 패턴들이 암기되어서 줄줄줄 나오는게 아니면 말이죠.

맞습니다. 그래도 결국 다른 사고방식에 익숙한 관리자 분들은 그것조차 노는 것으로 인식하길래 말이죠.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

익명 사용자의 이미지

다른 직장 알아봐야 될걸요. :)

hogi2271의 이미지

제 생각에는 밤세 코딩하는것과 밤세 생각하는것과 별차이가 없다고 생각합니다...

전 잠안오는 코딩쪽에 한표를...

코딩하면서도 충분히 생각하고 좋은 코드가 나올수 있다고 생각합니다...

성실.. 게으름 보다는 자신이 얼마나 열정적인가에 초점을 맞춰야 되지 않을까라고 생각합니다..

^^/

hongminhee의 이미지

같은 패턴의 작업이 열번 스무번 반복된다면요?

semmal의 이미지

Quote:
제 생각에는 밤세 코딩하는것과 밤세 생각하는것과 별차이가 없다고 생각합니다.

물론 업무 성격에 따라 틀릴겁니다. 제가 적은 글이 모든 경우에 해당된다고 말할 수는 없습니다. 또한 제대로된 설계와 세부설계가 이루어졌을때도 별달리 고민할 일도 아마 없을 겁니다. 하지만 그런 것이 제대로 이루어져있지 않고, 이론적인 배경이 필요한 프로그램을 짜거나, 목적 자체가 기존의 것 보다 "더 좋은" 기능이나 UI로 개선한다고 했을 때에는 이런저런 고민없이 좋은 프로그램이 나올 수는 없을겝니다. 문제는 제가 겪은 대부분의 관리자는 이런 부분을 관과하거나 무시했었고, 어떤 사람은 설득할 수 있었지만 그렇지 않은 경우도 있었습니다.
Quote:
다른 직장 알아봐야 될걸요. :)

설득이 안될 때는 이 분 말씀이 정답일지도 모르지요.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

wookjina의 이미지

코딩하다보면 참 느끼는거...
1%의 feel이 오면 99%는 노력이다...
아무런 생각없이 노력만 해봤자...
공든탑이 무너짐...
단, 받은 영감은 잊지말고 고이 간직해서...
구현하는데 힘써야 한다...
그것이 일이 됐든, 놀이가 됐든...

;man proposes, God disposes

;man proposes, God disposes

kalstein의 이미지

try and fix.

이걸 없애자는거지요...^^ 제가 봤을때도 저 경우가 초보개발자에는 많지요...


------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/

익명 사용자의 이미지

Quote:

게으른 프로그래머만이 더 좋은 코드를 만들고 더 좋은 제품을 만들 수 있다.

이거 펄을 만든 Larry Wall의 말과 비슷하네요. 게으름과 자만이 프로그래머의 미덕이라고..

select99의 이미지

상당부분 공감합니다.

업무할때 더효율적이고 좋은방법이 없을까 인터넷을 뒤지면... => 인터넷한다고 뭐라하거나..
더효율적인방법을위해서 아주 세밀한것을 질문하거나..테스트해보고 있으면 .. => 슬데없는짓한다 하거나..
획기적으로 개선해봐야..=> 너무획기적인나머지 기존표준화에 맞지 않는다고 하죠...
성능으로 비교해보고 표준 요건이 무엇인지 따져들면.. => 결국 어쨋든 기존다른사람이 짠것처럼 군소리말고 시키는데로 하라식이죠.
한마디로 조선시대 걸어서 한양갔다오던 시절에 갑짜기 자동차로 몇시간만에 서울가는시스템을 도입하면..
조선시대양반들은 거의 대부분 마음에 들지 않는모양이더군요..
자신들이 기존에해오던것거 너무 다른거지요..또한 자신들의 과거노력이 한낮물거품이 되기 싫은모양입니다.
여기서바로 신규시스템을 반대한다면..조선시대양반들은 여전히 자신들의 위치를 지킬수 있게되더군요..
결국 표준도 준수하며 성능개선도하고 더편리한방법으로 개발해봐야.. =>결국 자기가보아왔던 방식이 아니라는데서 받아들이지 않더군요. 최대한 기존에 한것을 그대로 따라하라는지침이랄까..
즉, 말인즉슨 프로그래머의 머리는 집에두고오라.. 오직너의 노가다만 필요하다 는결론이죠..

많은 관리자들이 프로그래머를 관리하는게 아니라. 자신이 프로그램을 짜고 싶어하는것 같더군요..
실제로 자기는 프로그래머가 아니니까. 직접짜지는 않고.. 시켜서 자기가짠듯이 하고 싶은모양입니다.

그러고보면 자신의 직업이나 역할의 개념을 명확하게 인식하지 못하는것같습니다.
관리자면 관리에 충실하고 설계자는 설계 프로그램은 프로그래머에 맏겨야하는데...
왜. 프로그램을 두고 프로그래머도 아닌사람들의 주관이 더들어가야하는걸까요..

자동차를 보면 엔전설계자나 기술자도 아닌사람이 엔진설계에 자기고집을 넣는다거나..(아이디어차원의권유가아니고 강제적고집)
엔진 제작과정에 자신이 나사깍는방법을 지도하는것이 나다름없는데..
나사깍는법에 크나큰 문제나 어떤 특별한 경우가 아니면 대부분은 기술자가 알아서 판단해야합니다.
관리자는 자동차의 결과를 보고 판단해야죠..

제가볼때 프로그램소스는 결과물이 중간산물입니다.
최종 바이너리코드를 만들기위한.

12345555556의 이미지

저도 대부분 공감합니다.
코딩을 할때 암만 머리를 쥐여짜도 안나오는 문제는 그냥 컴앞에 계속 앉아 있지 않고 방향을 바꾸어 휴식을 하다보니 좋은 영감이 안겨오는 경우가 종종 있습니다.
물론 사람의 생각이 놀면서도 거기로 지향되기 때문이지요.
웬만한 사람이 생각안하면서 그저 놀수는 없는거죠..
그리고 10번 생각하고 1번 실현하는게 현명한 방법이라고 봅니다.
소프트웨어공학적인 면에서 볼때도 그렇구 코딩품질상으로도 많이 향상이 되지요..
면밀한 계획밑에 한번 손을 대는것이 바람직 할것 같구만요.

cinsk의 이미지

semmal님의 의견에 전적으로 동의합니다. :) 하지만 이런 경우도 있습니다. 아래는 expect을 쓰는 사람이, expect의 저자에게 보낸 메일입니다. expect(1)를 써서 자신의 일을 모두 자동화시켰더니, 게으른 직원으로 찍혀서 회사에서 해고되었다는 내용입니다. :)

From: Charlton Henry Harrison
To: libes@NIST.GOV
Date: Fri, 27 Jan 1995 23:30:56 -0600

>>>Dear Don:
>>>
>>> I've been a fan of Expect ever since I first learned of UNIX back
>>>in late '93. I'm young and don't have my CS degree just yet, but I worked
>>>a while back at Texas Instruments in their Telecom Customer Support dept.
>>>I started in late '93 (and hence, that's where I first started exploring
>>>the UNIX environment) and immediately forsaw the need of automating a lot
>>>of my redundant and mindless duties, but I didn't know how since we were
>>>working over a heterogeneous LAN with multiple OSs.
>>> Then I found out about Expect. I automated everything! My boss didn't
>>>like hearing that I was working on something else in order to get out of
>>>work, and I got tired of explaining it to him.
>>> Although I accomplished all the aspects of my duties, I was infamous
>>>for being the laziest person at work, and it showed (I made my job SO easy).
>>>I got a new boss after a while, and he hated me from the start and fired
>>>me soon after. Oh well, I guess my mentality didn't click with theirs.
>>> There are a lot of people like that: they believe life is putting
>>>in a hard day's work to get by. I hate that.
>>> So the point is, thank you for the wonderful 'Expect'. I bought
>>>your book and now I have the most recent version of it on my Linux system
>>>at home. Needless to say I'm looking for another job, though.
>>>
>>> Charlton
>>>
>> Thanks very much for your nice letter. Sorry to hear about your
>> automating yourself out of a job. Actually, I think most computer
>> scientists have to face this dilemma. In some ways, it's a
>> self-defeating occupation.
>>
>> Don
>
>Yeah, I'd be interested in hearing if you have a personal philosophy on
>how to handle this kind of thing. I plan on pursuing a career in Artificial
>Intelligence for similar reason of making life easier for everyone (me
>in particular!) What the future holds in this category is a great
>mystery.

I'm glad you asked. My personal philosophy on this kind of thing is: Find someone really rich and marry them.

Don

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

saxboy의 이미지

Quote:
I'm glad you asked. My personal philosophy on this kind of thing is: Find someone really rich and marry them.

누구나 공감할만한 말이 마지막에 적혀 있군요. 원체 과학이라는 것이 먹고 사는데 지장없어 할 일 없는 인간들때문에 발전해오긴 했지요.

semmal의 이미지

안타깝군요.
하지만 저도 칼튼처럼 고된 일을 하는 직원이기보다는 설령 잘리더라도 게으른 직원이 되고 싶네요.
칼튼은 어디에 간들, 무슨 일을 한들 이제는 쉽게 쉽게 처리할 수 있을테니까요.
오히려 부러운걸요?
저는 입은 자동화 되있어도, 손은 자동화가 서툴러서 말이죠.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

sugarlessgirl의 이미지

원래 컴퓨터라는 것이 사람의 일을 대신하라고 있는 거 같습니다만,
어째 컴퓨터를 통해 사람의 일을 대신해주는 프로그램을 만드는 것이 직업인 저는
컴퓨터가 할 일을 사람이 대신하고 있는지 모르겠습니다아하하하하~

lesejong의 이미지


1%의 천재는 사회로부터 전폭적인 존경을 받지만,
10%의 인재는 나머지 90%의 일반인으로부터 질투와 경계의 대상이 되는것은
아닌가 싶네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.