안녕하세요.
 
이제 점점 바닥이 드러나는 거 같네요. 
이 시리즈는 여기까지 입니다. ㅎㅎ
 
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. 레벨이 다른 두사람끼리 짝프로그래밍.
   - 레벨이 같거나 직급이 같으면 서로 멱살잡음. 개성은 소중하니깐요. ㅎㅎ
   - 해결안되는 버그가 있으면 짝 프로그래밍이 효과적입니다.
     후배는  설명하며코딩하고, 선배는 자세히 듣고.. (난 뒤 손가락에 회초리를 찰삭!)

 

 

안녕하세요.

사업으로 인해 2019년 상반기에 많이 바쁘기만 하여서 쓸만한 내용을 공유해야 되는데 그냥 미루고 있었네요.
어떤분이 제글을 기다린다고 쪽지도 주시고 해서 다시 한번 힘을 내보고자 합니다.
 
나름 제가 생각하는 저의 강점은 아래라고 생각하고 있습니다.
 
20년동안 검증된 결과이니 그냥 믿으셔도 될거 같습니다. ㅎㅎ
 
1. 남보다 2-3배 빨리
 
2. 남보다 2-3배 에러 없이
 
3. 코딩 실수로 인한 엄청난 결과(?) 압박감 속에 다운로드 횟수 조차 제약된,
   한방에 모든 기능이 성공해야 되는 상황 속에 긴장 코딩.
  ( 한번의 실수로 모든게 끝나는 인공위성 또는 인사사고 발생 가능성이 있는 장비에 
    비할 바는 아닙니다만 그래도 조금은 열악한 환경)
 
 
마침 이번에 인턴 사원이 들어와서 이야기했던 부분을 공유합니다.
코딩 하는 순서를 한번만 봐도 실력을 검증할 수 있는 하나의 방법이기도 합니다.
 
이유를 설명하려면 너무 길어져서 스스로 이해해 보시려고 하면 좋을거 같습니다.
해당 방법은 스타일과 습관이니 그렇다고 너무 집착 안해셔도 됩니다.
의도만 아시면 되요.
 
1. if 니 for 문 작성시 { 를 열면 자동으로 } 닫고 시작해라.
  요즘 코드 툴이 좋아서 이런거는 자동으로 해주는데 , notepad++ 를 쓰시거나 
  자동 코드 생성툴이 아니신 분들은 버릇을 들이셔야 합니다.
   왜 이게 좋은지는 다들 아실테니 설명하지 않겠습니다. 
 
  좋은 예)
    if(1) {
     }
  쓰고 다음에 안에 내용을 적는다.
    if(1) {
      func();
     }
 
 나쁜 예)
    if(1) {
     func():
  쓰고 다음에 } 를 한다.
    if(1) {
      func();
     }
 
 
2. 1번과 유사한건데 open 하면 바로 아래에서 close 함수를 바로 호출하고 그 중간에 코딩해라.
   fopen();
   쓰고
   바로 아래에
   fopen();
   fclose();
   호출 한뒤
   fopen();
   fread();
   fclose();
   같이 중간에 필요한 코드를 끼워 넣으라 .입니다.
   이 역시 나중에 디버깅 시간을 획기적으로 줄여줍니다.
    new , delete 마찬가지 입니다.
   그냥 습관화.
   
 
 
3. 역시 1번과 유사 (이 순서로 코딩)
   func( 하면 다음에 바로 닫고 시작
   func();
   fucc(a,b,c);
 
4. 곱하기 나누기 보다는 더하기 빼기로 더하기 빼기 보다는 더하기로 변환.
   b = a/2;
  보다는 b = a>>1;
  
  if( a -b > 1) 보다는 if( a > 1+ b )
  - 보통 a 는 b 보다 크다고 가정하고 코딩합니다만 세상일은 내 맘대로 돌아가지가 않지요.
    이런 경우입니다.
    unsigned int a,b;
    a = 2;  b= 3;
    if( a -b > 1) 와 if( a > 1 + b) 결과가 다릅니다. 로직상으로 같아 보이는데 말이죠.
 
 
5. if 문안에서 == 비교시 상수는 왼쪽
   
 if( i == 0  )보다는    if( 0 == i  )
 - 하지만 가독성 측면에서 왼쪽을 선호합니다만 초보는 오른쪽이 컴파일 실수를 줄입니다.
   == 을 = 로 쓰는 실수를 많이하거든요.
 
6. if 문안에서 == 비교시 변수는 항상 타입 캐스팅
 int i =1 ;
 float j = 1;
 if( i == j) 보다는   if( (int)i == (int)j)
  - 일반적으로 문제가 없긴한데 오래된(?) 일부 컴파일러는 이상 동작을 보이기도 합니다.
 
 
7. if 문 반드시 else 첨부 또는 바로위 변수 초기화
   
  if(xxx) {
    a = 0;
  } // else 절대 빼지 말것
  else  {
    a = 1;
  }
 
  또는 
  a = 1;
  if(xxx) {
    a = 0;
  } 
  
 
8. if 보다는 switch
  if(xxx) {
    func1():
  }
  else if(xxx) {
    func2():
  }
  else if(xxx) {
    func3():
  } // else 빼지 말것 설사 아무것도 안해도
  else {
  func4():
 }
 보다는 
  switch(xxx) {
    case 0:
      func1();
       break;
    case 1:
      func2();
       break;
    case 3:
      func2();
       break;
   default: //  default  내에 함수 안써도 무조건 같이 사용. 다음에 쓸일이 생김
      func1();
       break;
  }
 
 
9. switch 내에 코딩이 길어질대는 무조건 함수로 정리하여 한눈에 switch 마지막이 보일 수 있도록 정리
  
    switch(xxx) {
    case 0:
      // 이부분이 길어져서 한페이지 넘어가면 곤란함.
      // 가독성 저하
      // 함수로 변환하여 처리 요
       break;
    case 1:
      func2();
       break;
    case 3:
      func2();
       break;
   default: //  default  내에 함수 안써도 무조건 같이 사용. 다음에 쓸일이 생김
      func1();
       break;
  }
 
   
10. 한 파일을 너무 크게 만들지 말것
    method.c 로 너무 길어지만
    귀찮아도 method2.c 로 파일 자체를 분리
   단, 기능 자체는 성질이 다른 것으로 정확하게 분리 필요.
    같은 기능 함수모음을 2개 파일로 분류할 필요는 없음.
 
11. 소스 파일이 많아지면 디렉토리 관리 필요
    ./group1
    ./group2
    ./lcd
    ./file
    ./data
    main.c
    
단순하게 생각나는 데로만 정리하였습니다.
 
도움이 되셨으면 합니다.

+ Recent posts