안녕하세요.
 
더 바빠지기 전에 생각나는 부분을 한번 대략 정리해야 될거 같아서 글을 올립니다.
 
보통 프로그램을 잘 짜려면 문법을 알아야 하고
코딩을 잘해야 하고 그러는데 코딩을 잘한다는게 어떤건지 명확히 모를때가 많습니다.
-> 원래는 "공학적으로 사고하는 법" 이 글을 적는다고 하다가 엉뚱한 데로 빠져서 제목을 바꿉니다.
 
그냥 저의 과거를 돌아보면 이랬던 것 같습니다.
 
초보때는 미션이 주어지면 아래 순서로 작업하였습니다.
0. 뭘 해보라고 듣고 온다.
1. 에디터 창을 연다.
2. 무언가 생각나는 데로 코드를 써본다.
3. 뭔가 계속 꼬이고 생각이 안난다.
4. 문법을 몰라 인터넷 뒤져 본다.
5. 어디서 소스 주워서 복붙했는데 컴파일 오류가 나거나 잘 안된다.
6. 투덜거리며 다시 다른 소스 주워온다.
7. 몇번 하다가 안되면 다 지우고 내가 짜고 말지 하며 다시 혼자 짜기 시작한다.
8. 컴파일 오류로 한참 헤멘다.
9. 어찌 컴파일은 되었는데 출력은 원하는 결과가 아니다.
10. 중간마다 디버그 걸어서 어디서 문제인지 확인한다. (뒤부터 앞으로)
11. 당연히 맞다고 생각되었던 부분이 이상하게 오류였다. 스스로 꿀밤한번때리고
12. 이게 돌아깔까 하는 불안감과 누더기 소스를 물어볼데도 없이 혼자 릴리즈한다.
13. 신기하게도 현장에 돌아가는데 며칠 또는 몇달 뒤 큰 사고와 함께 1,번 부터 반복한다.
 
20년이 지나고는 이렇게 바뀌었습니다.
1. 한국말로 미션이 주어진다.
2. 짧은 한국말을 조건이 달린 긴 한국말로 바꾸어 되물어본다.
   - 이러이러해서 이런 조건에 이런 출력이 나오는 기능 말인가요?
3. 처음 미션이 바뀐다. 요청자도 자신의 요구사항을 정확히 모르는 상황이 발생함.
4. 1-2 과정을 반복해서 간단한 요구사항 문서를 만든다.
  - 컨펌하러 보내놓고 설계시작
5. 알고리즘을 말로 풀어서 종이에 써본다.
  - 조건 별로 나누어 본다.
6. UML 미스무리하게 나름데로 다이어그램 그려서 설계해본다.
7. 코딩 시작
9. 종이보고 코딩 , 종이보고 코딩, 한번 쓴 코드는 왠만해서는 다시 지울 필요가 없다.
11. 그동안 짜놓은 라이브러리가 많아서 그냥 복붙이다.
   - CTRL-c,v 만 반복하고 있는 내가 한심해지기 시작한다.
10. 필요함 함수가 생겨서 github 뒤져본다.
11. 제일 많이 사용되는 라이브러리 갖와서 복붙
  - 라이브러리 복사 전 별도 샘플 검증 테스트 (테스트 로직 작성)
12. 완성된 함수를 이용한 테스트 로직 작성하여 검증.
  - 입출력 데이터가 많다면 엑셀이든 db 든 데이터로 정리.
13. 검증된 함수 부분을 메인 함수에 복붙
14. 머신에 다운후 최종 테스트
15. 현장 릴리즈 후 아무 이상 없음에 약간 불안해 하며 무소식이 희소식이라고 생각하고 다음 미션을 한다.
16. 정말 전화 한통없다. 그래도 불안하다.
 
그냥 한번 생각나는데로 적어보았습니다.
ㅎㅎ
 
즐거운 주말 되세요~~
저는 다음주에 빠듯한 해외 출장으로 몸과 정신을 혹사하러 잠시 다녀오겠습니다. T.T
안녕하세요.
 
이제 점점 바닥이 드러나는 거 같네요. 
이 시리즈는 여기까지 입니다. ㅎㅎ
 
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. 레벨이 다른 두사람끼리 짝프로그래밍.
   - 레벨이 같거나 직급이 같으면 서로 멱살잡음. 개성은 소중하니깐요. ㅎㅎ
   - 해결안되는 버그가 있으면 짝 프로그래밍이 효과적입니다.
     후배는  설명하며코딩하고, 선배는 자세히 듣고.. (난 뒤 손가락에 회초리를 찰삭!)

+ Recent posts