거의 저의 경험이긴 한데 많은 도움이 되실겁니다.
아시는 분은 당연하지만 초보자들은 아마 헷갈리거나 모르시는 분들이 많을 거예요.

혹시나 제가 실수할 수도 있으니 잘못된 부분있으면 조언도 같이 부탁드려요~~

1. string 에서 마지막은 NULL 이고 실체가 있는 공간이다.
char buf[16];
sprintf(buf,"%s","hello");
여기에서 strlen(buf) 은 5이겠지요. 하지만 buf 를 차지하고 있는 공간은 6바이트입니다.
스트링에서 마지막에 항상 NULL 이 붙지요.

그래서 이런 실수를 합니다.
char buf[4];
char value = 5;
sprintf(buf,"%s","abcd”);
printf(“%d”, value);

이걸하고 나면 아마도 value 값이 0 이 됩니다. 이걸 처음본 뉴비들은 메모리 고장났다면서 컴퓨터에 대한 신뢰가
확 떨어지게 되지요. 하지만 당연한 일이기도 합니다.

제가 프로그램시 제일 좋아하는 격언이지요.

"아니 땐 굴뚝에 연기나랴"

만약, 아니땐 굴뚝에 연기가 난다면, 새벽에 굴뚝안에 맺혀진 이슬로 인해 낮에 온도가 오르면서 수증기로 변해서
불을 때지 않는데도 굴뚝에 연기가 나는 것으로 오인할 수 있는 것처럼 모든 일에는 원인이 확실히 있습니다.


2. memcpy 와 memmove 차이점 사용법 이해
- 메모리 간 복사를 위해서는 memcpy 사용하는데 단 하나의 제약이 있다면 자신으로 복사를 못한다는 겁니다.
더 정확히 말하면 의도치 않은 결과가 나옵니다. 대신에 memmove 를 사용해야지요.
- 아래는 컴파일시 에러가 없지요. 하지만 결과는 예상과 다르게 나옵니다.
char buf[24];
memcpy(buf+4, buf, 16);
--> memmove(buf+4, buf, 16);


- memcpy 구현 소스를 보신다면 왜 잘 못동작할지 이해가 될껍니다. memmove 소스랑 비교해보세요.
void *memcpy (void *dest, const void *src, size_t len)
{
char *d = dest;
const char *s = src;
while (len--)
*d++ = *s++;
return dest;
}
void *memmove (void *dest, const void *src, size_t len)
{
char *d = dest;
const char *s = src;
if (d < s)
while (len--)
*d++ = *s++;
else
{
char *lasts = s + (len-1);
char *lastd = d + (len-1);
while (len--)
*lastd-- = *lasts--;
}
return dest;
}

- 참고로 단순하게 모든 memcpy 대신에 안전하게 mommove 를 사용해도 됩니다만 그렇게 되면 발생하는 문제가 있지요. 이건 숙제!

- 한개더 memcpy 는 자기 자신을 복사못한다고만 알고있으면 안됩니다. 아래를 보세요. 이거는 잘동작해요.
memcpy(buf, buf+4, 16);


3. struct 를 sizeof 시 길이는 내부의 변수의 합과 다르다.
아래 참조.
https://www.geeksforgeeks.org/is-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member/
생각대로 1바이트 단위로 묶는 방법도 있다. 숙제!

4. C 에도 버전이 있고 문법이 다르다. 하지만 매우 큰차이는 없다.
ansi, c89 , c90 , c99, c11
애플의 swift 2,3,4,5 처럼 예전 코드가 컴파일 안되고 그러는 무지막지한 변화는 아니지만 차이는 알고 있어야 한다.
C 도 하위 호환이 안되는 문법을 사용하면 당연히 컴파일 에러가 발생한다.
그래서 이식성을 극도로 추구한다면 ansi 문법으로 작성해야 한다.

5. CPU 의 메모리 저장방식에는 little endian 과 big endian 이 있으며 , 메모리 복사시에 주의하여야 한다.
이것도 정확히 알고 넘어가야 하는 부분입니다. 이게 있는것 조차 모르시는 분들도 있더라구요.

요기까지 하겠습니다~~

 

원래 제 성격이 완전히 내성적이라 사람한테 말을 놓거나 처음 보는 사람한테 말 걸기를 매우 어려워 하는 사람입니다.

그런데 프로그램을 하다 보니 그 성격이 더욱더 강화되었지요.

 

어느날 몇달간 해결이 안되는 문제가 있었는데

이 솔루션은 다른 회사에서 이미 하고 있었지요.

그 프로젝트에 직접적 관계 있는 회사는 아니지만  같은 분야이니 경쟁사이긴 하지요.

 

분명 같은 칩을 사용하고 있는데 거기는 되고 나는 안되고..

레지스터 값은 0-255까지 정말 다 바꾸어보고 해봐도 안되었지요.

 

그날은 제가 미쳤나 봅니다.

 

홈페이지에서 그 회사 전화번호를 찾아서 무작정 전화했습니다.

그리고 연구소로 연결을 부탁했지요.

 

"여보세요"

"네 저는 00사 연구원 000입니다. 다름이 아니라 해결이 안되는 부분이 있어서 질문을 드려도 될까요?"

 

"왜 전화 하셨지요?"

"개발하다고 보니 이 부분이 너무 안되어서 해결책이 없을까 싶어서 한번 전화드려보았습니다."

 

....3초 정적뒤....

 

"말해보세요"

"그 칩에서 이러이러한 기능을 하려면 방법이 있을까요?"

 

......다시 3초 정적 .....

 

"그 레지스터 2개 값을 이렇게 이렇게 해보세요"

 

몇달간 했던 일이기에 어떤 레지스터를 건드려야 하는지 바로 생각이 났습니다.

 

"네네 감사드립니다"

 

그렇게 해결했습니다.

 

그 분이 왜 답을 해주었을까 어디다 쓰냐고 깊게 물어보지 않았을까? 그런 생각을 아직도 합니다.

제 목소리가 정말 간절했나 봅니다.

 

그때 누구신지 모르겠지만 정말 감사드립니다~~~

 

 

재미있는 사실은 제가 경험이 쌓이다 보니

어떻게 다른분이 제 연락처를 알게되어서 얼굴도 잘 모르는 한분이 전화가 오게 되었고

위 상황과 동일한 상황이 전개가 되었지요. 입장만 바뀐체로요.

각각 2번 정도 있었네요. 저도 당연히 알려드렸고 ( 3초 고민했습니다. ㅎㅎ

진짜 한마디지만 그 사람에게는 천금보다 중요한 정보였겠지요) 아마 해결되었을 겁니다.

 

회사 입장에서는 기술 유출이라고 할 수도 있는 문제지만

소스를 건넨것도 도면을 건넨것도 아니고 말 한마디 뿐이지요.

 

엔지니어 사이의 간절함에는 무언가 모를 끈이 있는 것 같습니다.

 

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 함수안에 들어가보니깐 말이지.

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

 

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

 

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

 

안녕하세요.

많이들 사용하는 NXP RFID (13.56Mhz) 들 칩들만 보기 쉽도록 정리해보았습니다.

단종된 제품(구할 수는 있습니다) 도 있지만 주로 통용되는 칩들이죠.

PN 시리즈와 Micom 포함된 RFID 칩은 제외했습니다.

또한, 타사 제품으로 3s logic 사 것도 있고 st 사 것도 있지만, 그거는 제가 관심만 가지고 실제 사용해보지 않아서

알려드릴 것이 없군요. NXP 사도 Micom 포함된 chip 이 더 싸야 될거 같은데, rfid 칩 따로 cpu 따로 하는 것이 더 저렴합니다.

재밌있는 사실은 특별한 레지지터 지원 유무에 따라 더 세분화된 버전도 있습니다.

정리해보니 plus 모델 빼고 종류별로 20년간 다 사용해보았군요.

NXP 에서 왜 이리 많은 칩들이 있냐면 내부적으로 버전이 올라감에 따라 기능이 개선된게 많습니다.

칩 버그도 개선이 되어서 , 간단한 tag 읽는 정도면 아주 예전 모델도 관계가 없습니다만

교통카드 프로젝트에 사용한다면 최신 칩을 사용하는 것이 안전하지요.

실제로는 66301 / 66302 / 66303 이렇게 세부 버전따라 가격과 기능이 다르긴 한테 큰 변화는 없지요.

참고로 아두이노에서 많이 사용하시는 rc522 보드를 보시면 mfrc522 을 사용하는데 기본적으로 감도가 다른 것이 비해서 낮습니다. 또한 , 말그대로 개발보드이지 rf 튜닝자체가 안되어있는 보드라 "tag 가 읽히네" 여기까지만 의미가 있고

혹시나 싸다고 그런 보드로 양산할 생각을 하시면 큰일납니다. 리더는 하나지만 tag 제조사 및 종류는 수만가지지요.

도움이 되었으면 합니다.

 

안녕하세요.

그동안 만났었던 여러가지 엔지니어들이 생각이 나서 한번 적어봅니다.

저한테 긍정적으로 부정적으로나 매우 지대한 영향을 주신 분들입니다.

심각하게 생각하지는 말아주세요~~~

1. 코드 구루

- 나보다 3살 정도 많다.

- 코드 설계 컨셉을 보면 무조건 레퍼런스로 잡고 싶게끔 예술적으로 코딩한다.

- 아트웍부터 DB까지 못하는 게 없다.

- 새로운 것에 두려움이 없다.

- 한번에 기술적인 파악이 가능하다. 된다 안된다.

- 논리적인 이야기가 가능하며 논리적인 판단과 이해가 빠르다.

- 실수를 매우 빨리 인정한다.

2. 올드맨 1

- 10살 많으신 외부 업체

- 통신 프로토콜 테스트 하러 갔는데 본인은 시뮬레이터로 다 테스트 했다면서 다른일을 하고 있고,

이상한점 있으면 알려달라고 한다. 물론 100% 그 사람은 완벽하고 나는 진땀을 빼며 코딩하고 있었다.

- 근데 소스를 asm 로 작업하셨다. 어느날 갑자기 그 프로그램 바꿔야 된다며 어느새 C 로 코드 전체 변경 완료.

3. Giver

- 항상 웃는 모습에 마르신 분

- 초보때 몇달간 끙끙 고민하고 있으니 다른 옆에 프리랜서 직원(아마 10살 정도 많은 듯)이 안되는 거 있냐고

물어봄. (완전 다른 회사에 다른 소속임)

- xml 라이브러리를 직접 구현해서 마이컴에 포팅하고 있었느데, 자기가 도와주겠다며 (본인은 윈도우 서버 개발자)

C 로 라이브러리 정리해서 전달 받음.

- SI 환경에서 모두들 밤새는데 그 분은 룰루랄라 모든 일을 마치고 다른 사람 도와줄거 없나 뒷짐지고 둘러보는 초인.

4. 올드맨 2

- 마이컴을 평생 AVR 한 종류만 사용

- 32bit ST 사 개발환경을 소개하니 손을 절래절래. 나는 8 bit 야.

- 소스를 넘겨 받으니 이름이 비슷한 전역변수의 대잔치

- 디버깅은 온리 jtag 으로만.

5. 자부심맨

- 윈도우 프로그램과 232 통신 프로토콜문제가 생겨서 , 232 로직 아날라이저로 캡춰해서 증거 작성.

- 윈도우 프로그래머 왈 이런 기계는 처음 보며 나는 믿을 수 없고, 내가 오로지 믿는 것은 윈도우 스텝 디버깅과

메모리창이라고 함.

- 논블럭킹 윈도우의 드라이버 구조에 대해서 설명했지만 계속 본인이 맞다고 주장.

- 나중에는 본인이 S사 출신이라고 강력히 어필함.

어디 감히 중소기업 개발자가 전 S 사 개발자한테 가르치냐는 모양새.

- 나는 로직 아날라이저 자료로 증거를 내밀고 , 상사에게 보고함. 우리쪽 상사는 그 회사 사장한테 이야기해줌.

- 몇 달있다 퇴사.

6. 외국 할아버지 개발자

- 60대 돋보기 안경너머로 슬금슬금 코딩

- 나는 kernel 과 예제 프로그램 정도만 공급하고 외국 개발자가 실제 코드 작성.

- C 언어가 만국 공통어이므로 일하는데 아무 지장 없음. 코드 보여 주고 끄덕하고를 몇 일간 반복.

- 생산 일자가 다가오는데 최종 프로그램을 주지 않고 단순한 아이디 접속 화면 프로그램 보내줌. 이거면 된다고.

- 그 프로그램으로 양산하고 해외 출장해서 보니 최초 프로그램은 단순히 접속 로딩 프로그램으로 설치 후

비번 입력하니 단말기별로 새로운 프로그램 다운로드 시작. 10분 후 원래 정상적인 프로그램이 뜨며 동작.

아~~ 양산일정에 쫓기지 않고 이렇게 프로그램 할 수도 있구나...

- 어느날 그 사람의 로그를 분석해보았는데 xml 구조로 로그가 깔끔하게 정리되어 있었음.

 

7. 어느 QT 개발자

- 개발 외주를 주고 소스를 받음.

- 변수 이름이 one , two ,three, four. 정말로 모든 함수내 그리고 전역 변수이름이 하나 둘 셋 넷

- 굉장히 일관적이라 왜 그렇게 했냐고 하니 자기는 그게 이해하기기 쉽다고 함.

- 아 세상은 넓구나.. T.T

안녕하세요.

인터넷에서 글을 적다보면 여러가지로 오해살 일도 많고 논란이 되기도 합니다.

제가 나름대로 생각해본 바로는 다들 살아온 환경도 다르고 배경지식이 다르기 때문이라고 생각됩니다.

내가 생각하기에는 상식이 다른 나라에서는 상식이 아닌 경우가 많지요.

이것도 실제 경험해보신 분들은 아실꺼예요.

저도 40이 넘고 보니 너무 편협하게 살아온 것 같아서 생각의 폭을 넓히려고 노력하고 있습니다만

자신을 수양하기가 어려운 것 같습니다.

예를 하나 들어보면 누군가가 요청을 합니다.

" 나무젓가락 하나 만들어주세요"

하지만 이 요청은 여러가지 배경지식을 가진 사람들에 의하여 왜곡 되어 전달됩니다.

1. 일반인 - 중국집에서 사용하는 그런 나무젓가락이 필요한가 보네. 인터넷 검색해보자.

2. 일본 젓가락 장인(1세트에 수백만원짜리) - 앗 요청한 사람이 어떤 사람이지? 어떤 음식을 주로 먹을까?

예전에 창고에 온습도 맞추어 놓고 10년간 건조시킨 나무 재료가 떨어져 가는데

이번 생산에 사용할 수 있을까? 창고에 한번 가봐야겠네...

둥근 젓가락이 필요할까? 끝이 오목한 젓가락 이 필요할까?

부부 세트 젓가락인지 혼자만 사용하는 젓가락일까?

요청한 사람의 알레르기는 어떤 종류가 있을까 이 목재는 이번엔 못쓰겠는데....

젓가락 코딩은 어떤 걸 선호할까? 약간 미끄러운거? 살짝 껄끄러운거?

이번에 새로 개발된 코딩 방법을 한번 제안해볼까?

3. 중국 젓가락 생산 공장 사장 - 몇 개 만들지? 저번에 "하나" 요청할 때 1억개 단위로 생산했는데

이번에도 1억개 만들면 되나? 배송은 해운인데 이번엔 급한거 같은데 항공으로

배송하나? 나무 자재 값이 올랐는데 대체품으로 이 목재로 생산하면 허락할런가?

요새 나무 재료값이 올랐는데 대금은 선급으로 좀 받아야 겠는데..

여기 까페도 여러가지 사람들이 모여있으므로 어떤 사람은 한개의 수백만원하는 젓가락을 만드시는 분도 있고

대량으로 생산하시는 공장 사장님도 계시고 그리고 일반인도 있겠지요.

여기계신 고수님들은 아마 생각이 많은 2번 유형이지 싶습니다 ^^

따라서 정확한 답을 얻으려면 아래와 같은게 좋습니다.

"5mm 사각형 형태의 일반 중국집에서 사용하는 젓가락으로 1세트만 필요합니다.

나는 알레르기 없으니 환경 호르몬 무시하시고 가장 저렴한 젓가락으로 1세트만 만들어주세요.

일정은 한달 이내면 좋겠습니다. 그냥 저혼자 사용하려고 일회성으로 주문합니다"

이것이 [요구 사항 명세서] 가 됩니다.

질문자는 자세한 질문을 ,

답변자는 질문자의 의도를 모르니 친절한 요청을 하시는 게 기본이겠지요.

단, 답변자가 선의를 베푸는 갑의 입장이니

되도록 질문자가 상세하고 좋은 질문을 하는게 바람직하겠습니다.

그래야 답변자의 시간도 절약하고 서로 빠른 답변을 들을 수 있겠지요.

좋은 답에는 항상 좋은 질문이 존재합니다.

오늘도 즐거운 하루 되세요~~

 

안녕하세요.
 
이번에는 프로그램관 관련된 용어에 대하여 한번 개념 정리를 해볼까 합니다.
 
작년에 신입사원이 들어오고나서 교육하느라 이리저리 하다보니 나름 노하우가 생긴거 같아서
공유해보면 좋을 거 같네요.
 
가장 기본부터...
프로그램이 뭔지 물어보면 막상 다들 대답을 못합니다.
저의 면접에 빠지지 않는 질문이기도 하고요.
 
1. 프로그램 이란
  - 여기서는  computer programming 을 말합니다. 
     뭐 면접장에서 나올 것 같은 질문인데 아마 회사보다는 공대 면접장에서 교수들이 할 질문 같이 보이는 군요,
    위키에서 보면 아래와 같이 정의하고 있습니다.
 
        컴퓨터 프로그래밍(영어computer programming) 또는 간단히 프로그래밍(programming문화어: 
        프로그램 작성) 혹은 코딩(coding)은 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 
      이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 말한다. 
 
  그럼 이제는 프로그램이 무언지 알기 위하여 "알고리즘" 이 무언지 "프로그래밍 언어" 가 무언지 알아야 겠군요,
 
2. 알고리즘 이란
  - 역시 위키에서 보면
    알고리즘(라틴어독일어: Algorithmus, 영어algorithm 알고리듬[*]IPA[ǽlɡərìðm])은 수학과 컴퓨터 과학
   언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 
    형태로 표현한 것을 말한다.
  - 다시 말하면 "문제 해결을 위한 절차,방법을 공식화한 형태로 표현한 것" 이군요.
 
3. 프로그래밍 언어 란?
  - 위키 위키 위키~~~
   프로그래밍 언어는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어이다. 
   고급 언어일수록 사람이 사용하는 언어에 가깝다.
  - 정리하면 "컴퓨터를 동작시키는 소프트웨어"
 
4. 따라서 프로그램이란
  - 어떤 문제 해결을 위하여 절차,방법을 공식화한 형태를 컴퓨터를 동작시키는 소프트웨어로 구현하는 기술
  - 로 정의할 수 있겠네요.
 - 더 쉬운말로 
    1) 해결하여야 할 문제가 있고
    2) 이를 해결할 공식화된 원칙을 설계하고
    3) 설계된 것을 프로그래밍 언어를 사용하여 구현하여 ,
    4) 문제를 해결하는 방법 또는 기술
 
5. 계속 고찰해보면 
  1) 문제 발생 -> 무언거 해결해야할 문제가 있다는 거지요. 문제가 없다면 해결할 이유도 없음.
  2) 원칙을 설계 
    -> 근데 이게 무언가 규칙성을 찾아서 단순하게 바꾸어야 된다는 겁니다.
    -> 이게 설계인데 이 힘은 공학(물리,화학) 또는 수학을 통하여 길러지는 힘입니다.
    -> 수학이 바로 복잡한 자연현상 등을 숫자를 이용하여 한줄의 수식으로 설명하는 
        놀라운 알고리즘의 변환 과정을 경험하고 배울 수 있습니다.
    -> 수학 못하면 2) 번을 못하고 3)번만 할 줄 알게 됩니다. 주로 코더라고 부르죠.
  3) 프로그램 언어를 사용하여 구현
    -> 수학에서는 숫자를 이용하여 알고리즘을 표현하고
    -> 프로그래밍에서는 프로그램 언어를 사용합니다.
    -> 언어라는 것은 영어를 보면 알듯이 일단 단어암기 및 문장구조 규칙을 배워야 되죠.
    -> 신기한 것은 같은 단어와 문법구조를 가지고 사람을 마음을 감동시키는 대작을 쓰듯이,
        프로그램도 구현하는 사람에 따라 노벨문학상 못지 않은 대작을 구현하시는 분들도 있다는 겁니다.
   -> 저희 같은 범인들은 그냥 대가의 코드를 보면 눈물한번 찔끔하고 열심히 ctrl-c ,v!
 4) 이렇게 해서 문제를 해결해야죠.
 
6. 이게 "프로그래밍"입니다.
 
 이제 여러분들이 어떤 작업을 하고 계시는 지 내가 어디에 위치해 있는지 명확히 깨달으셨으면 합니다.
 
 어느 분야에서건 "용어 정의" 및 "용어 이해" 가 중요합니다.
 다음번엔 CPU,메모리,캐쉬 등으로 차례로 한번 용어에 대하여 적절한 예를 들어가면 설명해보겠습니다.
 
 지루한 내용일 수도 있는데 읽어주셔서 감사드립니다~~

안녕하세요.

임베디드 개발을 하게되면 여러가지 알수없는 현상을 목격하고 이를 해결하기 위한 노력을 하게 됩니다.

운이 좋아서 쉽게 원인을 해결할 때도 아니면 소 뒷발에 쥐잡기로 해결이 되는 경우가 있지요.

오늘 몇가지 사례를 공유해보고자 합니다.

거창한 분석방법을 이용해서 해결한 것이 아니고 자유게시판인 만큼 그냥 지나가는 소리로 읽어주시면 감사하겠습니다.

제가 경험했던 경우와 주변 엔지니어에게 들은 신기한 케이스들입니다. 너무 많지만 몇가지만 공유해보겠습니다.

1. 대학 석사때 아는 형님

- 하드웨어 보드르 만들었는데 한달째 디버깅도 안되고 동작이 안됨.

- 매일 끙끙 앓다가 꿈에서 20번 버스가 사람을 태우고 자기 앞을 지나감.

- PCB 에 20번 BUS 라인을 확인하고 바로 해결 (단선)

- 이해가 되시나요? 그 버스가 그 bus 이더냐?

2. 제가 초보때

- NAND 칩이 바뀌었는데 동작이 안됨.

- 삼성 NAND 스펙만 정말 한달 내내 정독 정독. 코드도 4페이지 이하라 한달내내 그것만 봄.

- OOB 영역 크기가 바뀐 문제였는데 해결이 안됨.

- 한달째 되는 새벽녘 잠자리에서 어슴푸레 꿈과 현실이 구분 안되는 상황에서

누워있는 천장에서 왼쪽엔 코드가 오른쪽에 데이터시트가 나타남.

- 신기한 것은 어슴푸레가 아니라 코드 한자 한자 테이터 시트 한자한자 다 읽어짐.

- 심지어 페이지 넘김 해도 선명하게 모든 글자가 다 읽힘 (아마 자동으로 다 외어 졌던듯)

- 꿈속에서 데이터 시트를 다시보다가 특정 문구 발견

- 해당 코드로 진입하여 머리속으로 수정 및 디버깅. 머리속으로 컴파일 단축키도 눌렀음.

- 꿈속에서 이건 해결한 거다 라고 확신이 듬.

- 출근하여 정말 그 부분(당연히 꿈 속의 코드랑 현실 코드랑 같지요) 한 줄만 수정하여 해결

3. 초보때 선배 엔지니어 술자리에서 제가 졸라서 들은 신기한 경험 (제발 이야기해주세요~~ 이런 분위기)

- 커피 자판기 제작 회사임

- 계속 현장에서 자판기 컵이 걸린다는 신고

- 사무실에서는 재현 불가

- 자주 목격되는 현장 출장 방문

- 며칠을 반복하며 생길때 까지 방문

- 일주일뒤 정말 컵이 많은데 걸려서 나오지 않음.

- 떨리는 마음으로 커피 자판기 도어를 염.

- 너무 놀래서 뒤로 자빠질 뻔 함.

- 컵이 쌓여서 마지막 1-2개정도만 남았는데 그 컵이 컵트레이 속에서 공중에 떠 있음. 게다가 살짝 움직이면서 둥둥.

- 그래서 그 트레이를 손으로 가만히 잡으니 우주선 착륙하는 것 마냥 천천히 착륙함.

- 회사로 돌아가서 트레이 사출 재질을 변경함.

- 다들 이유를 아시겠죠? ㅎㅎㅎ

4. 기구 엔지니어 썰

- 표 판매기 기구에서 500원 동전이 자꾸 걸림.

- 알바 3명을 시켜서 500원 잔뜩 주고 재현될때까지 시킴.

- 일주일 뒤...

- 알바 한 명이 동전이 걸렸다고 달려옴.

- 긴장된 표정으로 엔지니어 총 출동 (야! 절대 손대지 말고 가민하 놔둬 를 외치며 30m 거리를 날라감)

- 도어를 정말 천천히 열어봄. 재현상황이 무너질까봐~~

- 매끈한 동전 회수함 앞단에서 평면판 위에 500원 짜리 동전이 세로로 서 있었음.

-> 500원 짜리 동전을 랜덤하게 던져서 똑바로 설 확율임.

-> 8시간 x 5일 x 3명 당 1번

- 바닥을 평면으로 하지 않고 기울어지게 설계 변경

 

다들 그런거 있쟎아요 나만 아는 신기한 경험들 ㅎㅎ

 

즐거운 하루 되세요~~~

안녕하세요.
 
더 바빠지기 전에 생각나는 부분을 한번 대략 정리해야 될거 같아서 글을 올립니다.
 
보통 프로그램을 잘 짜려면 문법을 알아야 하고
코딩을 잘해야 하고 그러는데 코딩을 잘한다는게 어떤건지 명확히 모를때가 많습니다.
-> 원래는 "공학적으로 사고하는 법" 이 글을 적는다고 하다가 엉뚱한 데로 빠져서 제목을 바꿉니다.
 
그냥 저의 과거를 돌아보면 이랬던 것 같습니다.
 
초보때는 미션이 주어지면 아래 순서로 작업하였습니다.
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. 버그 없는 코드는 절대 없다.
  - 정말 절대로! 입력과 출력에 대한 정의를 명확히 해야 한다.
 
정신없는 글 읽느라 수고 많으셨습니다 ^^

+ Recent posts