3년 전에 만든 코드를 봤습니다.
2011.04.17 17:56
그때 짜 두었던 모듈에서 버그가 발견되어 디버그를 하려고 소스코드를 열어봤습니다.
...
....
.....
이게 제가 짠 소스라니.
믿을 수 없을 정도로 복잡하고 기괴하더군요. 그냥 괴상합니다.
특히 배열에 접근하는 인덱스를 구하는 방법은 거의 엽기더군요.
객체의 어떤 boolean 값의 역수와 입력된 객체의 특정 순서의 포인터 변수가 null인지 판단하는 boolean연산을 두 개의 operand로 하는 and 연산(&&)의 boolean 결과(0 or 1)를 int로 타입캐스팅하여, for구문의 i에서 뺀 수를 인덱스로 접근하더군요. ㅡㅡ
제가 예전에 기묘한 방식으로 코딩하긴 했는데 boolean을 int로 캐스팅하여 arithmeric 연산을 할 정도로 괴상한 방식을 썼었는지는 몰랐습니다.
그 이후 2년정도 프로그래밍 쉬고 요즘 다시 하고 있는데, 오히려 한참 만들 때 보다 더 깔끔하게 작성되더군요.
예전과는 달리 프로그래밍 관련 이론서적을 많이 보고 설계도 하고 실제 코드 작성을 해서 그런지.. 제가 보기엔 깔끔한 코드가 나오는 것 같습니다.
아무튼 이 괴상한 모듈을 디버그할 수 없어서 다시 만들었습니다.
기존의 미친 코드는 430라인이었는데, 새로 짜니 173라인으로 끝나는군요...
코멘트 16
-
클라우드나인
04.17 18:11
으흐흑 ㅠㅠ 외계어랍니다.. -
클라우드나인
04.17 18:11
본문에 쓰인 미친 코드는 대략 이런 형태입니다. (모바일이라 본문 글 수정이 안되네요.)
For(int i = this->numberOfElements; i > 0; i --) {
For(int j = i; j < target->numberOfElements; j ++) {
This->elements[i - ((!this->isExist) && current)].value = target->elements[j].value;
}
}
그런데 이렇게 만들면 회사에서 짤릴까요 안짤릴까요? -
일단 되기만하면 짤리지는않을듯한데요...
C언어 배워야지하고...아직도 안배우고있어요....ㅠㅠㅠ
방학때 과외라도 찾아야겠어요 ㅠ
-
클라우드나인
04.17 22:18
학원을 다니신다면 비트컴퓨터가 잘 가르친다고 하더군요~
저도 취미삼아 가르치고 있으니, 이번 방학때 같이 공부하시는건 어떠세요?
(당연히 무료예요. 그냥 소모임 형식입니다.)
-
꼬소
04.18 00:13
이렇게 자면 팀장에게 욕 먹습니다.
코드 가독성은 자기 자신에게도 중요하지만, 후임 담당자에게 중요하기 때문에 이해하기 어렵고 복잡한 코드는 가능한한 피하는게 좋습니다.
어쩔 수 없이 복잡한 방식으로 구현하여야 한다면, 리팩토링 하는것이 맞습니다.
-
클라우드나인
04.18 01:10
이렇게 만들면.. 욕 바가지로 얻어먹고 짤리거나.. 딴 부서 가라고 할 것 같습니다.... ㅠㅠ
저땐 어찌 저런 생각을 한건지 저도 참 신기해요..;;;;
-
hakdh
04.17 18:25
오히려 회사에서 도저히 짜를 수 없겠네요!!
뭔지 아는 사람이 없을테니...
-
클라우드나인
04.17 22:19
가끔 수업중에 그런 말을 하는 교수님이 계십니다..
high readability는 쉽게 잘 짤리는 길이라고... ㄷㄷㄷ
-
430라인에서 173라인...
장족의 발전이네요
레벨업 축하드립니다.
-
클라우드나인
04.17 22:20
감사합니다.. ^^
-
카이사르
04.17 20:52
그래도 , 미흡한점을. 느낀다는게 다행이죠 몇년전 자료를 보고 느끼는게. 없다면 문제겠죠 ^^
-
클라우드나인
04.17 22:27
프로그램을 많이 만들어서 늘어나는 실력이 있고, 한편으로는 관련 서적을 읽어서 실력이 늘어나는 부분도 있는 것 같습니다.
2년동안 쉬고 최근에 프로그래밍에 다시 손을 잡은지 얼마 안 됐는데, 오히려 OOP에 대한 이해도는 훨씬 높아진 것 같습니다.
예전에 만들었던 프로그램을 보면 imperative paradigm과 object-oriented paradigm이 난잡하게 섞인 느낌이라 영 보기가 어렵더군요.
군데군데 코드의 기교만 잔뜩 -_-;;
점점 깔끔하고 담백한 코드를 쓰고 싶어지더군요.
그러기 위해서는 Java가 좋은 것 같은데, 내부 구현이나 성능을 따져보면 또 C++가 맘에 들다가도.. C++의 문법적 integrity가 좀 떨어지는거 보면 java가 또 좋아보이기는 현상이 요즘 반복되고 있습니다..
java에 pointer가 있고, garbage collecting에만 의존하지 않고 manually delete할 수 있었으면 좋겠다는 생각이 드네요.
이런걸 만족시키려면 objective-c가 잘 맞을지도 모른다는 생각이 문득 듭니다.
java는 pointer를 없애기 위해 내부적으로 수 많은 포인터를 썼는데.. 그래서 오히려 pointer를 사용하는 것 보다 덜 명시적이 되어버려서 이래저래 신경쓸게 생각보다 많더군요. privacy leaks도 신경써야 하고..
OOP, 이식성, 성능 따지면 역시 C++가 현재로선 가장 만족스럽습니다.
-
후후후 원래 프로그래밍이 그렇죠. 제가 중학교 2학년때 짠 코드보면 정말 왜 그랬을까라는 생각이 들정도로 어이가 없습니다. 물론 여러가지 기교를 써서 해놨지만 결국은 소스코드를 잔뜩 잡아먹어서 용량만 늘어나고 나중에 디버깅 할때 복잡하기만 했습니다. 현재요?? 안합니다. ^^; 할시간 있으면 남한테 부탁하던지 만들어진거 씁니다..
-
왕초보
04.18 06:30
타입캐스팅 ^^ OS업글만 되어도 엉뚱하게 동작할 수도 있겠네요. 일단 제품에만 들어가면 회사에서 절대 못 자르겠는데요.
-
우어 ㅠㅠ.. 프로그래밍 하시는 분을 보면 참 부러워요;;;
무슨이야긴지 모르겠어요.