자문을 구합니다 --:

dgsquare의 이미지

(여기다 올려도 될지 모르겠네여 :?: 마땅히 올릴데가 생각이 안나서...)

안녕하세요. 저는 이번에 전역하고 막 3학년에 복학한 컴퓨터 공학과 학생입니다.
이번에 처음 실습을 하게 되었는데여, 간단한 shell의 기능을 구현하는 것 입니다.
재미있어보이기도 하고, 나름대로 배울 것도 많아보여서 열정을 가지고 시작하게 되었습니다.
관련된 함수들도 참고해보고, 나름대로 노트에 필기하면서 진행하게 되었습니다. 그런데 처음해서 그런지 구조도 명확하지 않은 상태에서 시작했고, 나중으로 가면 갈수록 막히는 부분이 많아지더군요. 그래서 생각보다 시간도 오래걸리게 되었습니다. 포기하고 대충 할까 했지만 지금까지 진행한 것이 아깝기도 하고, 무언가 결과를 보고 싶어서 계속 진행하였고 현재는 어느정도의 완성을 눈앞에 두고 있습니다.
나름대로 뿌듯한 마음을 가지고 있었는데, 오늘 우연히 친구가 작성한 소스를 보게 되었습니다. 간단한 test를 하는 것을 보았는데 제가 한 것 보다 훨씬 잘 동작하더군여. 잘 만들었다고 예기하고 있는데, 친구가 아니라면서 하는 말이 자신은 다른 사람의 소스를 보고 했다는 군요. 그래서 단기간에 완성을 할 수 있었다고 합니다. 친구의 소스를 보았습니다. 제가보기에도 제껏보다 훨씬 구성이 좋더군요. 더 많은 기능이 안정적으로 돌아가는 구조였습니다.
순간 제 프로그램이 굉장히 볼품없게 느껴졌습니다. 그리고 많은 생각이 들었습니다. 에러 디버깅 하나하나 하는 시간에 차라리 좀 더 많은 소스들을 분석하고, 그것들의 좋은 점만 찾아서 했으면 어땠을지... 차라리 친구처럼 했으면 단기간에 더 많은 것을 배우지 않았을까...
집에 오면서 많은 생각을 했습니다. 어차피 취직이 되고 현업으로 가도, 이미 존재하는 기술들은 자신이 설계하기 보다는 남이 짜놓은 소스들을 잘 찾는 것이 더 중요한것은 아닐까? 어차피 그것들을 잘 분석한다면, 자신이 설계하는 것보다 더 유용하게 사용할 수 있는 것은 아닐까? 뭐 이런 생각들이 들었습니다.

여러분이 제 입장이라면 앞으로 어떤식으로 공부를 하시겠습니까? 머리가 조금 혼란스럽네요.

bugiii의 이미지

이미 구현하고자 하는 것에 대한 고민은 충분히 하셨을 것입니다. 그러니 기존의 구현을 참고하실 때 훨씬 도움이 될 것은 자명합니다. 친구분의 구현에 대한 이해도보다는 더 깊고 정확하게 보실 수 있을 것입니다. 자기만의 생각만으로 먼저 구현해보고 프로들의 작품들을 본다면 자기 발전에 더 큰 도움이 될 것 같습니다.

아무런 생각없이 주어진 업무가 그것이고 메시지 바꾸고 동작 좀 바꾸는 것으로 생활해 나간다면 (꼭 나쁘다는 건 아니지만) 최소한 자기 만족은 덜 할 것입니다. 또 실력 향상에도 도움이 되는 방향도 아닐거구요.

물론 결과만을 보자면 당장에 잘 동작하고 멋지게 보이겠지요. 하지만 무슨 문제가 생겼을 때 왜 그런 문제가 나는지, 어떻게 수정해야 하는지는 누가 더 잘 할 수 있겠습니까?

다른 사람의 잘 구현된 작품을 구경하고 거기서 힌트도 얻고, 영감도 얻고, 아 이럴 땐 이렇게 하면 되겠구나 하는 정도라면 적극적으로 찬성입니다만 다른 사람의 구현물을 죄다 베끼는 수준으로 한다면, 도움도 안될 것이고 같은 동료에게 해만 끼치는 행동이 될 수도 있습니다.

그리고, 책읽기는 게을리해서는 안된다고 생각합니다. 요즘 책들이 좀 좋습니까? 초급부터 고급까지 다양하고 잘 정리된 책들이 많습니다. 좋은 책들 잘 골라서 정독하시면 크게 도움이 됩니다. (저는 이해가 잘 안되면 같은 책 100번도 읽습니다. 쿨럭)

현업에서야 일단 급한 불부터 꺼야하고 당장 떨어진 일이 눈앞에 있는데 새로하는 것보다 가급적 유사하거나 기존의 구현물로 적당히 땜질하는 것이 많은 것이 사실입니다만, 개발자에게 그것만이 다는 아니겠죠. 힘내십시요!!!

ctcquatre의 이미지

흠.. 저도 그런적이 많았습니다.
혈기와성하게 열심히 디버깅하고 열정을 쏟아부었지만.
나중에 제가한건

출력하는데 printf를 안쓰고 printf기능을 구현하는 짓을 해버린거 였습니다.
흠..그때의 절망이란...

이래서 정보수집 능력이 그렇게도 중요한가 봅니다.

Chaos to Cosmos,
Chaos to Chaos,
Cosmos to Cosmos,
Cosmos to Chaos.

비행소년의 이미지

ctcquatre wrote:
출력하는데 printf를 안쓰고 printf기능을 구현하는 짓을 해버린거 였습니다.
흠..그때의 절망이란...

printf의 기능을 구현해야 할 경우도 있더군요. 임베디드 시스템을 만질때는요. :wink:

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

dgsquare의 이미지

답변감사합니다.
사전의 정보가 얼마나 중요한지 알게 되었습니다.
제가 하려는 목적에 대해서 정확히 알아두었으면, 좀더 깔끔한 구조로 설계할 수 있지않았을까 합니다. Module화를 정확히 해두었다면 좀더 확장이 용이하지 않았을까 후회도 합니다.

여담으로, 나름대로 ACTUnit을 사용해서 TDD로 접근해 봤는데, fork()부분은 어떻게 해야할지 막막하네여-_-;; 이것만 잘되도 디버깅할일은 없었을 것 같은데.. 나머지는 비교적 잘됬거든여-_-;; 내공이 부족함을 절실히 느낍니다.

Quote:
출력하는데 printf를 안쓰고 printf기능을 구현하는 짓을 해버린거 였습니다.
흠..그때의 절망이란...

정말 그런것 같습니다. :wink: 그래도 일단 구현해 놓으니, 기존의 것을 쓰기가 싫어지네여 ^^;