https://en.wikipedia.org/wiki/Rubber_duck_debugging

 

Rubber duck debugging - Wikipedia

Code debugging method In software engineering, rubber duck debugging is a method of debugging code by articulating a problem in spoken or written natural language. The name is a reference to a story in the book The Pragmatic Programmer in which a programme

en.wikipedia.org

 

이 블로그 제목이 덕코딩인데, 러버덕코딩을 말하는 것 입니다.

 

제 책상위에 조그만 오리가 떡 하니 올려져 있지요.

 

이게 프로그램이랑 무슨 관계인가 하시겠지만 나름 증명된 코딩 기법이긴 합니다.

한마디로 코딩관련하여 혼잣말을 고무 오리에게 하는 겁니다.

 

아 이게 해결안되는데 오리야...이 변수가 말이지 내가 volatile 로 선언을 했거든.

그런데 inline 함수안에 들어가보니깐 말이지.

아차차. 이게 그랬구나..

 

이런 과정으로 해결되는 겁니다.

 

옆에 있는 사람 괴롭하지 말고 오리를 괴롭힙시다!

 

안녕하세요.
 
이제 점점 바닥이 드러나는 거 같네요. 
이 시리즈는 여기까지 입니다. ㅎㅎ
 
21. 컴파일 warning 탐구
  - 병적으로 warning 에 대해서 집착하지 않아도 되나, 이게 무슨 뜻인지는 
    조목조목 알고 있어야 함.     
  - warning 에 집착하는 것도 코딩 시간이 충분하다면 바람직.
 

22. Stackoverflow 정기 탐독

 - 하고 싶지 않아도 다들 자동적으로 하고 계실 껍니다.
 
23. o 과 0 , 1 과 l 이 구분되는 폰트 사용.
 
24. 코드 에디터 북마크 적극 활용
  - VScode 니 메모장이니 아무 관계없음. 자신에게 제일 잘 맞는 걸로.
  - 하지만 계속 좋은 게 나오니 요즘 분위기에 맞게 한번쯤 다른 걸 시도해 보는 것도 좋음
  - 저는 ultraeditor 15년 광신도였으나 요즘엔 eclipse, vscode, notepad++ 아무거나 
    손에 잡히는데로 쓰고 있습니다.
 
25. 음주 및 분쟁 후 코딩 금지.
  - 적절한 신체 활동과 깨끗한 멘탈 확보를 위한 선행과제 수행
  - 프로그램을 잘 짜기 위하여 헬스장에 다니는 사람은 없다고 생각되지만 저는 그 이유로 다닙니다 T.T
    나의 육체적 피곤함으로 인하여 고객의 프로그램에 누를 끼쳐서는 안된다는 말도 안되는 논리 ㅎㅎㅎ
 
26. 시뮬레이터는 남이 짜주는게 아니라 나의 의무이다!
  - 나만의 시뮬레이터 템플릿을 만들자. RS-232 든 랜이든 소스는 널려있음.
  - 간단한 시뮬레이터를 위한 윈도우 프로그래밍은 나의 몫! 남탓하지 말기.
 
27. 다른 사람에게 code review 요청. 선배 없으면 신입한테라도 검증
  - 아기라도 배울게 있음.
 
28. 겸손한 마음
  - 나는 바보다.
  - 내가 짠 코드는 무조건 틀렸다. 테스트 결과를 믿어라.
  - 논리적 관점에서는 컴퓨터가 나보다 더 위대하다.
  - 아니 땐 굴뚝에 연기나랴. 무조건 내 실수다!
 
29. 코딩시 생각이 잘 안날때는 러버덕코딩 기법
   - 농담아님. 매우 효과적임.
 
 
30. 버그 없는 코드는 절대 없다.
  - 정말 절대로! 입력과 출력에 대한 정의를 명확히 해야 한다.
 
정신없는 글 읽느라 수고 많으셨습니다 ^^
이어서 작성합니다.
 
11. switch 내부의 인수는 enum 으로!
switch (열거형변수){case 열거형값: 실행할코드; break;}
 
가독성이 높아집니다.
   case 0: -: 이러면 0 이 뭘 뜻하는지 또 살펴봐야지요.
 
11번을 마스터 하면 초보에서 레벨업하시는 겁니다.
 
12. 전역변수는 되도록 struct 안에
  -무조건 전역은 struct 안에 성질별로 그룹을 지으세요.
   전역변수의 100만개의 저주에서 탈출 가능합니다.
   int g_tmp; -> 이게 뭐하는 변수지? 글로벌변수이긴한데..
   int g_conv; -> 이게 뭐하는 변수지? 글로벌변수이긴한데..
   char g_terminal_increase;  -> 이게 뭐하는 변수지? 글로벌변수이긴한데..
 
   struct g_st_comm{
      int tmp; // 그냥 임시 변수지롱~~~
      int conv;
      char terminal_increase;
    } ;
  struct g_st_comm g_ST_COMM;
  g_ST_COMM.tmp; -> 뭔지는 모르겠지만 통신관련 글로벌 변수인거 같네. g_st_comm 구조체 가볼까?
  
13. 변수가 많으면 struct 안에 또 struct 로 변수 지정
   - 좀더 구조화 됩니다.
   struct st_comm{
      int tmp; // 그냥 임시 변수 메롱~~~
      int conv;
     strcut st_tmp {
      char terminal_increase;
      int tmp;
} tmp;
    } ;
   - 소속이 생기는 거죠. 엄마 아빠 난 누구의 자식이다! 덜 헷갈립니다. 이름 앞에 성이 붙는 것처럼.
 
14.  작은 함수 이름은 동사 다음에 명사 - 어느 방법이던 한쪽 방향으로 일관적으로
   int GetStatus(void);
   int Get_Status(void);
   int get_status(void);
 
15.  큰 그룹  함수 이름은 소속 뒤에 동사 명사
   void CommGetStatus(void);
   void CommInit(void);
   void CommSetVariable(void);
 
16. 쉬어가는 페이지 
   - 내 프로그램은 절대 보안을 위하여 외국인에게 해석될 수 없다! 세종대왕 만세!
   - 내 프로그램은 절대 국내용이다. 글로벌화 될 수 없다!
      어느 외국인이 내 코드를 수정하고자 하는가! 나는 결연히 반대한다.
    void ChoGiHwa(void); // 초기화함수
    int tae_i_ble: // 테이블
    char Imsisayong; // 임시사용
 
17. 뭔가 내용이  길어지면 함수로 
     안되면 { } 라도.
     기능을 주석으로 구분하지 마시고 함수로 만들던가 아니면 
 
  // 무슨 무슨 기능 
  {
    func1():
    func2():
   }
 
    func3():
    func4():
 
 // 5,6함수 호출해서 둘이서 뭔가 불꽃 튀기는 동작을 하거든요. 그래서 친구라서 보기 쉬우라고 한번 
 //  묶어주었어요.  이 둘사이에 절대 뭔가 끼워 넣으시면 큰일나요. 요거는 제발 분리하지 마세요~~~
  // 
   {
     func5():
     func6():
   }
      
18. crtl-s 는 나도 모르게 (이건 무의식의 세계)
 
19. 작명이 살길 영어공부 열심히. 자신만의 일관된 원칙
    do_chunchunhi(); // 천천히 동작 T.T slow 가 생각안나도 제발 이러시면.
    g_u8_comm_init_status: // 흠... 글로벌변수에 8비트 변수고 통신 초기화 상태 변수이군. 하하하
   
20. 레벨이 다른 두사람끼리 짝프로그래밍.
   - 레벨이 같거나 직급이 같으면 서로 멱살잡음. 개성은 소중하니깐요. ㅎㅎ
   - 해결안되는 버그가 있으면 짝 프로그래밍이 효과적입니다.
     후배는  설명하며코딩하고, 선배는 자세히 듣고.. (난 뒤 손가락에 회초리를 찰삭!)
데이터 시트 구글 번역기로 보시는 분
  - 남들보다 30분-1시간 일찍 출근하셔서 수능영단어 관련 책사서 하루에 100개씩 외우기
  - 퇴근 후 집에서 수능 독해집사서 일정 점수 나올때까지 풀어보기
  - 약 1-3년이면 구글번역기 안봐도 됩니다.
 
그런거 하기 싫다는 분
 - 단언컨데 개발자로서 절대 성장 불가합니다. 평생 제자리라고 확신합니다.
 - 미국 유학가서 나는 영어 안 배워란 비슷한 마음가짐입니다.
 
저는 중국어 과외도 잠시 받았습니다.
중국 데이터 시트를 구글 번역기 돌리는 참담함을 저는 참지 못하겠더군요.
구글에서 자료 찾으면 이제 영어보다 중국어가 더 많이 나옵니다. 앞으로 더 그럴겁니다.
 
대선배님들은 일본어 트랜지스터지 구독하면서 일본어 배워가며 기술을 습득했습니다.
배움에는 나의 한계나 끝이 없습니다.
저희 회사 신입사원 책상에 붙여놓은 겁니다.
10년동안 절대 떼지 말라고 했습니다. 노력하면 7년 뒤에 이룰 수도 있지만 어려울거라 이야기했습니다.
 
그때 잠시 끄적여서 준거라 지금보니 많이 부족하네요. 반도 못적은 거 같은데
더 쓰면 미리 좌절할거 같아요.
 
내가 어디쯤에 있는지 궁금할 때 쯤 쳐다보라고 했죠.
요즘은 네비가 남은 시간을 알려주는데 개발자라는 먼길을 가는데 대략이라도 알아야 되지 않겠습니까?
 
포기할 사람은 빨리 포기하고 
멀리 갈 사람은 꾸준히 한번쯤 하늘을 쳐다보며 앞으로 나아가야죠.
 
아무것도 모르는 신입은 절대적인 건 아니지만 도움이 되실겁니다. 
이제 시작하시는 분들은 참고하세요. 
 
안녕하세요.
 
개발자 중에 학원 출신으로 그리고 전문대 출신으로 고민하는 친구들도 제법 있습니다.
제 직원중 한명이 전문대 출신이기도 해서 한번 공부의 중요성에 대해서 넓게 설명한 적이 있었는데
그 이야기는 너무 길고 간단하게 이야기 해보겠습니다.

 

 
결론은 개발하는데 이런게 직접적으로는 아무 관련이 없습니다.
다만 원리를 아는 사람이 좀 오래갈수가 있습니다.
 
 예를 들면
 트랙훈련장에서 운전을 전문으로 배운 사람과 자동차 엔진 만들다가 혼자 운전 배운 사람이 있을때
 트랙을 돌면 당연히 트랙에서 전문적으로 배운 사람이 이기겠지만,
 사하라 횡단을 하는 레이스에 참가하면 운전 겨우하는 사람이지만 고장난 차를 빨리 수리해서
  운전만 배운 사람을 이길 수도 있습니다.
 
  주어진 상황에 따라 다르니 어느 쪽이 좋다고는 할 수 없습니다.
  다만 오래 가려면 엔진을 만져본 사람이 조금 낫다라는 정도입니다.
 
  하지만 현실은 사하라 사막이 많은 편입니다.
 
새싹시리즈 말고 노땅 시리즈 입니다.
나름 오래된 사람들(이렇게 말하는 저도 슬픕니다만)만 참고요~~

 

 
1. 시간이 갈수록 내가 쥐고 있던 라이브러리는 의미가 없어지고 오픈 소스가 더 믿음직스럽다.
2. 마이컴에도 C++ 시대가 왔다. C++ 모르는자 점차 먹고 살기 어려워 진다.
   문법이 아닌 개념이해 필수! 폴리모옵티즘,유서빌러티,인헤리턴스.
3. 코드 제네레이션에 대한 반감은 집어치우고 신봉하자.
   나도 그런식으로 짤 수 있지만 내가 짠거는 허접하고 칩제조사에 만든거는 위대하다.
   공부는 집에서 결과는 회사에서.
4. CPU 하나 선택하면 평생 먹고 살았는데 지금은 CPU 가리면 노땅된다.
   오늘은 ST , 내일은 느네사스, 모레는 PIC, 글피는 NXP .  다 거기서 거기다.
   양산시 모든점 고려해서 10원이라도 싸면 CPU 바꾸자. 요새는 별거 아니다.
5. 슈퍼개발자 소용없다. 아무리 답답해도 후배 키우자. 결국 나한테 도움이 된다.
   너무 잘 가르쳐주어도, 너무 안 가르쳐 주어도 문제지만, 둘중 하나라면 너무 잘 가르치는 걸 선택하자.
6. 크로스 플랫폼은 당연하다. 맥도 가오가 아니라 필요하면 쓴다.
7. 최신 개발방법론도 도입해보자 (기존에 우리들이 하던거에 멋드러진 이론만 입혔을 뿐 거기서 거기다)
8. 자바, 파이썬도 하면 된다. 영어 잘하면 다른 언어 배우기 쉽듯 거기서 거기다.
9. 모든 기술은 나를 편하게 하기 위한 도구일 뿐 내 영역을 침범하는 적이 아니다.
   마치 인공지능 시대를 거부하는 일자리는 잃어버리지 않도록 몸부림치는 사람이 아니길.
10. IT를 모르는 평범하고 다양한 사람들 많이 더 만나 볼 것.
 

 

지금 안적으면 다시 까먹을 것 같기도 해서 한번 적어봅니다.

순전히 개인적인 의견이므로 이런 견해도 있구나 생각하시길..(너무 진지하게 받아들이지는 마세요.)

 

참고로 저는 전자공학 전공에 20년차 펌웨어 개발하고 있습니다.
 
원래 질문자는 컴공 4학년이었습니다. 그 기준에서 한번 적어봅니다.

 

 
1. C 공부 열심히.
2. 리버스 엔지니어링도 좋고 asm 공부도 좋고 컴공이면 크랙파일 한번 만들어봄도 좋음.
3. 컴퓨터 구조론 및 OS 과목 수강 (저는 전자공학과였는데 학부제로 바뀌면서
    4학년때 졸업못할 각오하고 컴공 전공 C++ 수업 이수)
4. 전자공학 과목 중 기초 회로 소자 쪽 청강 혹은 독학
5. MOOC 사이트 가서 임베디드 관련 과목 수강 (요즘 관심있는 중학생도 이정도는 합니다)
6. 아두이노 제외 임베디드 저속 보드 하나 리눅스 기반 보드 하나 사서 유튜브 보고 따라하기
7. CPU 하나는 선정해서 (STM 추천) 해당 보드로 각 주변기기기능 하나씩 구현
   (오늘은 ADC, 내일은 UART 이런식으로)
8. 독신으로 살거나 마음이 매우 넓은 여성과 결혼 (한다면 되도록 빨리)
   이유는 설명하기가 길어서 생략.
9. 어정쩡한 대기업 취업보다 기술있는 중소기업 찾기. (대기업 잘못가면 사람 압박하는 기술을 배웁니다)
10. 운동 열심히 (한국에서는 체력이 약하면 프로그램하다 죽을 수도 있음)
11. 영어공부 열심히. 그래서 한국 탈출. 죽지 않으려면! (약간 과장이니 이해 바람)
12. Github 는 나의 친구
13. Git 는 내 애인

14. 디버깅시 아니 땐 굴뚝에 연기나랴. 모든 일에는 이유가 있다라는 확신.

15. 프로그램하다가 오늘 요일을 잘못안적이 있다면 자질이 조금 있는 겁니다. 무서운 집중력 필요.
   (혹 산만한 성격이면 다른 일을 추천드립니다.) 
16. 소설 많이 읽기. 인간에 대한 인문적인 이해력 함양. 고급 엔지니어로 가기 위한 필수 덕목입니다.
    프로그램을 사용하는 것은 사람이니깐요.
 

 

밤이라서 급하게 적어서 생각나는 건 대략 이정도입니다.

참고가 되었으면 합니다.

+ Recent posts