WRITTEN BY
WRITTEN BY
일원동 느티나무
일원동 느티나무 안내판
컴퓨터가 책상밑에 있기 때문에 같이 딸려 나오는 20cm 짜리 케이블로는 어림도 없었다. 확장케이블을 따로 구매했는데 10pin x 1m 짜리밖에 없었다. 보드의 커넥터는 6pin 이지만 10pin 용 케이블을 잘 사용하고 있다.
Avrmall ATmega168 Board V2.1 는 Digitypo님이 선택했던 것에 비해 더 저렴하고(\12,000) 빠른 클럭의 보드이지만 serial chip 이 없으므로 RS-232C 를 직접연결할 수 없다. 때문에 RS-232C <-> RS-232.TTL 변환기 또는 USB <-> RS-232.TTL 변환기가 있어야 Arduino 환경에서 작성한 코드를 시리얼로 업로드 할 수 있다. Digitypo님은 DIP232RL V1.0 을 사용하였고 인터넷을 보니 더 저렴한 것도 있었는데 집에 있던 USB <-> RS-232C 를 분해하여 쓸 생각으로 아무 것도 구매하지 않았다.
Avrmall ATmega168 Board V2.1 용 부트로더
이제 Arduino 가 두 개 생겼다. 하나는 Arduino Diecimila 정품, 하나는 Arduino Mini 짝퉁(?). 하지만 더 빠르고(16MHz -> 20MHz) 귀여운 Arduino 이다.
Ken Pugh 가 쓴 명저로 졸트(Zolt)상을 수상한 책이다.
prefactoring 이란, 경험으로 부터 얻은 소프트웨어 개발에 관한 통찰력을 새 프로젝트에 응용하는 것이다.
( THE ART OF PREFACTORING APPLIES TO NEW PROJECTS THE INSIGHTS INTO DEVELOPING SOFTWARE YOU HAVE GLEANED FROM YOUR EXPERIENCE, as well as the experience of others, in developing software to new projects. )
Refactoring 이 이미 만들어진 코드의 내부구조를 개선하는 것이고 prefactoring 은 만들고 있는 코드를 위한 것으로 볼 수 있다.
책의 내용은 가상의 소프트웨어 프로젝트를 진행하면서 design, code, testing 에 관한 guideline 및 design principle 을 제시한다. guideline 및 principle 하나하나가 녹록한 경험에 의한 산물로 보인다. 더러는 너무 쉽고 당연한 것도 있고 이해하기 힘든 추상적인 것도 있다. 하지만 대부분은 간결한 문장으로 정리되었으면서도 깊이있고 공감이 가게되는 주옥같은 표현의 지침들이다.
접근하기 쉬워 보이는 것들만 소개한다.
Guidelines
==========
(Big Picture)
Don't Reinvent the Wheel
Think About the Big Picture
Don't Repeat Yourself (DRY)
Plan Globally, Develop Locally
(Extreme Abstraction)
Splitters Can Be Lumped More Easily than Lumpers Can Be Split
Never Let a Constant Slip into Code
(Extreme Separation)
Adapt a Prefactoring Attitude
Do a Little Job Well and You May Be Called Upon Often
Decouple with Associations
(Extreme Readability)
A Rose by Any Other Name Is Not a Rose
Communicate with Your Code
The Easiest Code to Debug Is That Which Is Not Written
Use the Client's Language
(Interfaces)
Test the Interface, Not the Implementation
(Error Handling)
Report Meaningful User Messages
Never Be Silent
(General Issues)
Don't Speed Until You Know Where You Are Going
Consistency Is Simplicity
Plan for Testing
More Is Sometimes Less
Software Design Principles
==========================
Well-Defined Interfaces
Decomposition and Modularity
Prioritized Requirements
Abstraction
Information Hiding
Extensibility
Hierarchy
Separation of Concerns
Packaging