소프트웨어 개발이란
소프트웨어(음식) 성분
알파벳 모양 커스터드 만드는 방법
1. 손수 파스타를 만든 뒤 커스터드와 한데 섞는 것
2. 파스타 통조림을 사서 소스를 씻어내고 바로 커스터드를 붓는 것
1번은 올바른 방법
2번은 나쁜 방법이지만, 프로토타입에 적절하다.
항상 2번처럼 하려면 문제가 있다. 대규모 제조에는 적합하지 않기 때문이다.
소프트웨어 개발은 예술이다
뛰어난 코드를 작성하고자 하는 프로그래머는 좋은 취향과 미적 감각을 지녀야 한다.
소프트웨어 개발 절차 중 많은 부분이 예술 작품을 창조하는 것과 유사하다. 절차는 아래와 같다.
창조적
상상력 그리고 정확한 설계, 만드는 방법에 대한 계획, 코드에 대한 비전, 독창성 등이 필요하다.
미학적
좋은 코드의 특징은 우아함, 아름다움, 균형에서 찾을 수 있다. 코드의 기능 외에 외관 역시 고려한다.
기계적 수동적
지정된 매개물을 가지고 지정된 도구와 절차, 기법으로 작업하는 것이나 마찬가지다.
팀 기반
수많은 형태의 예술은 한 사람이 아닌 여러 사람의 노고에서 비롯된 결과물이다.
소프트웨어 개발은 과학이다
"지적인 바보는 일을 더 크고 복잡하며 폭력적으로 만들 수 있다. 그 반대 방향으로 진행하기 위해서는 천재의 손길이 필요하다. 더불어 많은 용기도 필요하다" - 아인슈타인
엄격함
좋은 소프트웨어는 정확하고, 입증되고, 측정되고, 실험되며, 검증되어야 한다.
좋은 테스트가 그 해결책이다.
체계화
먼저 계획을 세우고 설계를 하며, 예산 계획을 세우고 체계적으로 구성할 필요가 있다. 이는 지적이고 논리적이며 합리적인 과정이다. 즉 체계를 세우고 문제 공간과 설계 대안들을 이해하는 것이다.
통찰력
소프트웨어 개발에는 지적 노력과 더불어 기민한 분석력이 필요하다.
(버그 추적할 때 더 명백하게 필요)
좋은 소프트웨어 개발은 머릿속에 떠오른 첫 번째 코드를 뱉어내는 카우보이식 코딩이 아니다. 신중하고, 심사숙고하며, 정확한 노력의 산물이다.
소프트웨어 개발은 스포츠다
대부분의 스포츠는 상당한 기술과 노력을 필요로 한다.
팀워크
서로 다른 기술을 보유한 채 한데 어우러지는 많은 사람의 협업이 필요하다.
훈련
각 구성원은 자신의 팀에 전념해야 하고 기꺼이 최선을 다해야한다.
규칙
우리는 일련의 규칙과 특정 팀 문화를 기반으로 개발을 진행한다.
소프트웨어 개발은 아이들 놀이다
학습
아이들은 자신이 아직 배우는 과정이며 모든 것을 알지는 못한다는 점을 인지하고 있다. '겸손'이라는 간단한 특성 덕분이다.
좋은 프로그래머는 겸손한 자세로 일한다. 그들은 자신이 모든 것을 알지는 못한다는 점을 인정한다.
단순함
가장 간결한 코드를 작성하는가? 간결한 작업물이란 가장 단순한 '멍청이' 코드가 아닌, 적절하게 명료한 코드이다.
즐기기
다른 모두가 하지 않는다 해도 자신은 즐기는 것에 별다른 문제는 없다.
소프트웨어 개발은 집안일이다
프로젝트를 완료하기 위해 거쳐야 하는, 집안일처럼 단조롭고 고된 일이다.
효율적인 프로그래머가 되려면 집안일을 두려워해서는 안 된다.
청소하기
문제를 찾아내 해결해야 한다. 잘못된 부분이 어디인지 적절한 수정방법은 무엇인지 찾아내야 한다.
보이지 않는 곳에서 작업하기
청소부는 각광받으며 일하지 않는다. 자신의 영웅적인 노력에 대해 약간의 인정만 받는다.
유지 보수
소프트웨어 청소부는 죽은 코드를 제거하고, 망가진 코드를 수정한다. 적절하지 않은 코드는 리팩토링하고 재구성하며, 코드를 줄이고 깔끔하게 만든다.
은유 과부하
소프트웨어를 개발하는 행위를 빗대기 위한 은유적 표현이 종종 만들어지곤 한다. 하지만 그 어떤 은유도 완벽하지 않다. 소프트웨어 개발은 그 자체로 특별한 작업이며, 소프트웨어를 만드는 행위와 완전히 유사한 분야는 존재하지 않는다. 여전히 탐험하고 개선해야 하는 분야다. 잘못된 은유로부터 시시한 추론을 이끌어내는 것에 주의하라.
'장인으로의 여정' 카테고리의 다른 글
애자일 프렉티스[1] (0) | 2016.04.07 |
---|---|
[Build System] CMake (0) | 2016.03.31 |
[linux] 파일링크 ln (Hard Link, Soft Link) (2) | 2016.03.12 |
댓글