"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
"손코딩뇌컴파일눈디버깅" 모임을 소개합니다.
백문이 불여일런, 트라이얼앤에러(Trial and Error) 식의 몹쓸 교육을 받아 온 개발자들이 코딩하기 전에 신중하고 꼼꼼하게 생각해보기란 쉽지 않습니다.
개발 시간 중 디버깅 시간이 절반 이상을 차지하고 있는 실정에 버그를 줄이기 위해 TDD니 유닛테스트니 많은 방법들이 개발되고 있지만 가장 일차적으로 중요한 것은 개발자들이 꼼꼼히 따져보는 것이 아니겠는지요?
미국의 선진 SW회사들은 이미 화이트보드에 PS문제를 푸는 것을 인터뷰 방식으로 채택하고 있습니다. 이는 이와 같은 풀이 방식이 개발자들의 기본 역량을 측정하기에 알맞은 지표라는 것이고, 개발자들이 기본적으로 갖춰야 할 역량이기도 하다는 것 입니다.
또한 자신의 생각을 명확하게 정리하고 다른 사람이 이해할 수 있도록 전달하는 Communication Skill 도 개발자가 갖춰야 할 역량 중 하나 입니다. 알고리즘을 어떻게 구현할 것인가를 팀원들과 소통하면서 자연스럽게 생각을 정리하고 전달하는 연습도 할 수 있습니다.
컴퓨터에 앉아 코딩하기 전 펜과 종이를 들고 눈과 머리와 손을 굴려 보시는 것은 어떠신지요??
The foremost advocate for all sectors of the space industry and an expert in all aspects of space, the Space Foundation is a global, nonprofit leader in space awareness activities, educational programs that bring space into the classroom and major industry events, including the Space Symposium, all in support of our mission "to advance space-related endeavors to inspire, enable and propel humanity."
This document summarizes a newsletter from the PSPD program at Pratt Institute. It discusses several waterfront planning projects led by PSPD faculty and students that focused on creating inclusive, diverse public spaces:
1) A project in Honolulu aimed to make the waterfront accessible to all ages, incomes, and ethnicities through features like a cultural gathering space, educational facilities on cultural history, and a market featuring local farmers.
2) In Cleveland, the goal was to unite the city's neighborhoods through a shared waterfront vision with flexible spaces for different cultures to share food, music and performances.
3) In Yonkers, engaging the diverse community to propose 10 destinations for the waterfront helped
The document describes various water feature installations for commercial and residential clients. It lists over 30 clients, providing their name, location, type of water feature installed (e.g. 3-form panels, tempered glass, acrylic), and key features (e.g. lighting, size, customization). The water features ranged from indoor wall installations to outdoor landscape features, and included waterfalls, fountains, and sculptures. The document promotes the company's expertise in modern waterfall design.
The document describes various water feature installations for commercial and residential clients. It lists over 30 clients, providing their name, location, type of water feature installed (e.g. 3-form panels, tempered glass, acrylic), and key features (e.g. lighting, size, customization). The water features ranged from indoor wall installations to outdoor landscape features, and included waterfalls, fountains, and sculptures. The document promotes the company's expertise in modern waterfall design.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise causes chemical changes in the brain that may help boost feelings of calmness and well-being.
Pumping Corn Into Wisconsin: Consideration for Ethanol LegislationJustin Dohms
This document discusses the debate around a proposed bill in Wisconsin that would mandate a 10% ethanol blend for all gasoline sold in the state. Proponents argue that ethanol would reduce dependence on foreign oil and stimulate the rural economy. However, critics argue that the environmental and energy impacts of increased corn ethanol production are unclear based on conflicting studies. There are also concerns that higher ethanol blends could increase emissions of pollutants like VOCs and NOx in southeastern Wisconsin nonattainment areas. The document examines the various perspectives on the energy balance, environmental impacts, and economic effects of expanding corn ethanol use in Wisconsin.
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
『이펙티브 디버깅』 디버깅 지옥에서 탈출하는 66가지 전략과 기법
디오미디스 스피넬리스 지음 | 남기혁 옮김 | 한빛미디어 | 24,000원
★ 소프트웨어의 완성은 디버깅!
이 책은 경험이 풍부한 개발자를 대상으로 소프트웨어를 완성하는 마지막 기술을 가르친다. 저자는 35년 경험에서 깨우친 일반 원칙, 높은 수준의 전략, 구체적인 기술에 관한 조언, 효율 높은 도구, 창의적인 기법, 효과적인 디버깅과 관련된 행동 특성을 제시한다. 저자가 제안하는 66개의 전문 기법을 통해 디버깅 역량을 확장하고, 각 문제 상황에 맞는 최상의 접근법을 선택할 수 있을 것이다.
★ 주요 내용
다양한 소프트웨어 장애를 해결하는 높은 수준의 전략과 방법
프로그래밍, 컴파일, 실행 시 적용할 구체적인 기법
디버거를 최대한 활용하는 방법
믿고 투자해도 좋은 범용 기술과 도구
막다른 길과 복잡한 미궁에서 탈출하는 첨단 아이디어와 기법
디버깅하기 쉬운 프로그램을 만들기 위한 조언
멀티스레딩, 비동기, 임베디드 코드 디버깅에 특화된 접근법
향상된 소프트웨어 설계, 구축, 관리를 통한 버그 회피법
This document discusses why companies should adopt open source software. It notes that open source allows companies to multiply their investments, benefit from recent advances, spread software knowledge, increase developer bases, upgrade skills, and build reputation. It also discusses how open source allows for faster startups, projects, and addressing customer needs through collaboration with the community. The document advocates that companies should openly contribute their work to avoid duplicating efforts and accruing technical debt when adopting open source.
2. 오늘의 목표와 일정
• 오늘 워크샵의 목표:
– 좋은 소스가 무엇인지를 알고,
멋진 소스를 만들 지속적 의지를 불사른다.
– 소스 리뷰의 중요성을 이해하고,
품질을 높이는 한가지 방법을 익힌다.
• Source Reading에 관한 Quick 복습 (20분)
• 예제 Source Reading 결과 설명 (15분)
• 조편성
• 실제 Source Reading (40분)
• 조별 발표 (25분)
• 기념 촬영
• 해산
3. 우리의 개발 방법론 ?
• FDD (Faith-Driven Development) ?
– By Twitter ID: @codinghorror
C Java PHP
4. 무엇이 문제인가 ?
• Source Code : 관리하기가 힘들다 !
• 아무도 있던 코드를 가지고 일하기를 원하지 않는다.
• 겨우 도는데, 자주 수정하다 보니 거의 걸레 수준이다.
• 이 코드를 작성한 엔지니어는 이제 다른 회사에 있다.
• 프로그래머마다 개성이 강하다.
5. 소스를 보면 (1)
• 어떤 함수는 1500 line 이상인 것도 있다.
• 한 소스 화일에서도 뭔가 일관성이 발견되지 않는다.
• 다음과 같은 global 변수 이름이 자주 발견된다.
– db, rp, ap, mt, …
– xx, ii, jj, i, j, …
– the (search가 안 된다. 워낙 “the”가 많기 때문에)
– ll (숫자 ‘1’과 문자 ‘l’은 소스에서 구분이 잘 안됨)
• 설명이 없는 magic 상수가 많이 발견된다.
– for (i = 0; i < 17; i++) …
• 표준 함수가 있는데, 같은 일을 하는 함수가 만들어져 있다.
– 특히 string 관련 함수, sort, search, …
• … 정말 그렇다 !
6. 소스를 보면 (2)
• 함수들이 간격 없이 선언되어 앞,뒤 구분이 어렵다.
• 함수 및 변수 이름에 일관성이 없다.
– 어떤 건 소문자, 어떤 건 대문자, 어떤 건 mix
– 부적절한 약어, 상징어 사용
• 편집에 일관성이 없다.
– Indentation, {, } 의 위치
• 변수, 함수, 코드를 설명하는 코멘트가 거의 없다.
• 가끔은 이런 코멘트도 발견된다.
– /* ooops !, what can I do ? */
• 모든 함수는 에러가 안 난다는 굳은 믿음이 있다.
• 설명 없이 comment-out된 코드가 있다.
• malloc-free, open-close, lock-unlock 짝이 안 맞는다.
• … 진짜 문제다 !
7. 코딩의 자세 .
• 최적화는 뒤로 미루자.
– 일단 예쁜 코드로 돌게 하는 것이 중요
– 설계 단계에서 구조적인 최적화를 고민하고
– 시험 후, 성능을 평가한 뒤 단계별로 최적화
• Profiling 후 가장 키가 큰 ‘한 놈’만 패자
• 읽기 어려운 코드는 Reuse도 하지 말자.
– 읽기 어려우면 신뢰도 안가고
– 디버깅도 어렵다.
• 있는 디버거를 꼭 사용하자.
– printf()는 기본적으로 모니터링 수단
• 모든 다른 가능성이 없을 때, 디버깅 용도로 사용
– Trial and Error로는 문제의 본질에 접근할 수 없다.
8. 코딩의 자세 ..
• Warning은 미래의 버그
– Compiler의 warning level을 최고로 !
– 모든 warning을 제거하자.
• 코딩의 생산성을 생각하자.
– 모드 디렉토리 구조, 파일, 변수 이름은 예측 가능하게
– Editor의 Search 기능 이용을 용이하게
• 함수, 변수, 키워드 이름 뒤에는 공백
– Build/Install/Run 과정의 생산성도 생각하자
• 5초를 줄일 수 있다면, 1시간 투자도 아깝지 않다.
• Hot-Key, 툴바, Batch, …
• 문법 상 되는 것도 오해의 소지가 있다면 쓰지 말자.
• 공짜로 제공되는 걸 쓰자.. Eclipse의 <Control-Shift-F>
9. 코딩의 자세 …
• 컴파일러는 똘똘하다는 확신을 가지자.
– 컴파일러는 “천재”들이 만든다.
– 예쁘게 짜면, 나머지(최적화)는 컴파일러가 한다.
– 컴파일러는 진짜로 거의 버그가 없다.
• 컴파일러 매뉴얼을 읽자.
– 같은 코드에 대한 컴파일 결과가 다를 수 있다.
• 그런 코드는 만들지 말자.
– 컴파일러 옵션 확인
• command line option
• #pragma
– 표준 (+ 특정 컴파일러) 라이브러리 매뉴얼 (man page)
– 사용하는 Framework, Platform에 따른 API 매뉴얼
11. 회사들은 ?
• Style Guide (coding convention)
– 어떤 회사는 대외비 ???
– https://code.google.com/p/google-styleguide/
• 각종 언어의 style guide, cpplint
– Linux: ./Documentation/CodingStyle
– http://en.wikipedia.org/wiki/Coding_conventions
– 표준 : MISRA C (자동차 업계), …
• Review tool
– Gerrit : git 과 함께 동작, review & comment
– http://en.wikipedia.org/wiki/List_of_tools_for_code_review
• Static Code Analysis Tools
– 모든 정적 분석 도구 – 역시 위키피디아..
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
– 주요 무료 정적 분석 도구를 정리해놓은 사이트
http://cafe.daum.net/communhwa/C0Sv/19?docid=1NApSC0Sv192011
0302105229
12. 정리하면…
• 매뉴얼을 읽자.
– Compiler Manual (Compiler, Linker option)
– Reference Manual (API Manual)
– Coding Convention
• Source Reading !!!
– 소스와 문서를 종이에 출력하여 찬찬히 읽는다.
• Compiler
– Warning Message Level을 최고로 높인다.
– 모든 Warning Message를 없앤다.
• Tools 과 문서
– 설계를 도와주는 모델링 도구 그리고 설계 문서
– 소스를 잘 보여주는 도구
– Code Review를 지원하는 도구
– 소스의 세부적인 문제, 프로젝트 전체 소스를 정적 분석 (Static Analysis) 하는 도구
14. (함수 이름)
( perror() 사용 )
(변수 이름)
(! ==NULL, 띄어쓰기, 줄 바꿈)
(인자 이름, 함수 이름 )
(함수이름)
(이걸 함수로 만들 이유가 있을까 ?)
(comment 필요성?)
( return NULL; 사용 – caller에게 에러를 알림)
(띄어쓰기 ‘if(‘ ‘if (‘ )
(1st, 2nd, 3rd, nth line %d) (file 번호를 두 번?)
(MAX_BUF의 크기?)
(void ? 에러 나면 ?)
(띄어쓰기)
(줄 띄움)
띄어쓰기, 줄 바꿈, 줄 띄움은
<Ctrl-Shift-F>가 해결
15. 소스 리딩 진행
• 3인(4인) 1조로 합니다.
• 한 명이 진행을 합니다.
– 한 줄씩 차례로..
– 라인 번호를 call 하고 문제를 말하라고 합니다.
• 모든 조원이 해당 줄과 연관된 문제를 말합니다.
– 사소한 것부터 혹시 가능하면 중대한 것 까지
• 프로그램 스타일 (convention)도 보고
• 가능하면 로직도 보고, 프로그램 전체에 대한 것도 보고
– 다른 라인과 연계한 결과까지 말을 합니다.
• Comment도 봅니다. (코멘트의 문법, 철자 틀린 것 까지)
– 모든 내용을 Inspection sheet에 기록합니다.
• 편하게 적습니다. (줄 번호, 문제, 심각성)
• 한 명이 결과 발표를 합니다.
– 라인 번호와 문제점(, 어떻게 고쳐야 할 지)를 이야기합니다.
16. 문제의 위치
(사소한 것까지)
결함의 내용 심각성(H,M,L)
• 컴파일해서, 딱 한번 돌려보고 Reading
• 생산성 안오르는 월 오후, 금요일 늦게 피자 먹으면서 팀 리뷰
• 컴퓨터는 오직 리뷰 결과 기록용으로만 사용
(코드 리뷰하면서 수정하기 시작하면 망함)
• 반드시 전체 문제 개수를 적어서 기록
(얼마나 개선되고 있는지 Monitoring)
1 함수 이름 ‘opfl()’ 후짐 open_file() M