본문 바로가기
IT 놀이터/General

[소프트웨어 공학] 소프트웨어 개발은 기술이 아니라 예술이다.

by 돼지왕 왕돼지 2012. 4. 12.
반응형



안녕하세요 돼지왕 왕돼지입니다.

오늘은 "소프트웨어 개발은 기술이 아니라 예술이다." 라는 주제로 이야기하고자 합니다.

이 글은 "글로벌 소프트웨어를 꿈꾸다." 내용을 요약 정리한 것입니다.


37. 건축가와 벽돌공, 누가 가치가 있는가?

- 전체 소프트웨어에 미치는 영향을 생각하면 코딩하는 방법을 달리 한다. 안목을 크게 가지면 기획부터 개발, 품질, 유지보수, 고객지원 등까지 모든 면을 생각하게 된다. 그런 생각이 있어야 가치 있는 제품이 나온다. 





38. 소프트웨어는 기법이 아니라 예술이며 정신세계이다.

- 소프트웨어의 바깥 모습도 중요하지만 소스코드가 얼마나 아름다운가도 중요하다. 소스코드는 쓰레기처럼 만들어 놓고 겉에 보이는 제품이 아름답다고 하는 것은 어불성설이다. 소프트웨어 업계에도 감동할 만한 제품, 문서, 설계, 코드가 있어야 한다.





39. 고기를 준다면 성황이지만, 고기 잡는 방법을 가르쳐 주면 싫어한다.

- SRS 뿐만 아니라 모든 일을 시작할 때 Best Practice 를 보고 따라 하겠다는 것이 얼마나 위험한지 알아야 한다. 소프트웨어와 같이 창의성이 필요한 종목에서는 Best Practice를 보는 순간 창의력이 날아가 버리는 부작용이 크다. 

- 세상의 모든 고기를 봤다고 해서 고기 잡는 법을 알 수 있는 것이 아니고, 이 세상의 모든 그림을 다 봤다고 해서 그림 그리는 방법을 알 수 있는 것이 아닌 것처럼 샘플도 마찬가지이다. 샘플을 보면 마치 그렇게 쓸 수 있을 것이라는 착각이 들지만, 책보고 수영을 배울 수 없다. 그래서 문서 작성이 소프트웨어 개발에서 가장 어렵다는 말이 나온 것이다.

- 고기 잡는 법을 알려주는 회사, 고기 잡는 법을 배우려는 직원이 있는 회사에 미래가 있다. 





40. 배우려면 잔을 비워라.

- 무언가를 배우려면 자기 생각을 비우고 남의 생각을 받아들이려는 자세가 필요하다. 자신이 시도하기 전에 모든 것을 이해해야 한다고 하는 태도 역시 폐쇄적인 태도이다. 





41. 백발이 성성한 프로그래머는 없다.

- Programmer( 프로그래머 )와 Software engineer ( 개발자 ) 라는 단어는 구분되어야 한다. 

- 많은 개발자가 무의식적으로 코딩이 개발의 핵심이라는 착각을 한다. 코더 또는 프로그래머는 아르바이트생을 고용해서도 할 수 있다. 하지만 개발자가 하는 일은 그렇지 않다.  





42. 비싼 도구가 기술역량을 올려주지 않는다.

- 대부분의 비싼 도구는 특수한 목적에 맞게 극히 예외적인 소수 고객에게만 효용이 있는 것이니 비싼 도구의 유혹에 빠져서 돈은 돈 대로 쓰고 피해는 피해대로 보지 않으려면 확실한 소신을 가져야 한다. 오랜 시간을 들여서 조사할 수 없다면 가장 인기 있는 오픈소스 제품을 쓰기를 권장한다.





43. 표현법이 진보를 가져오지는 않는다.

- 뛰어난 설계자는 다 머리로 생각하여 설계한다. 설계를 돕기 위한 많은 도구와 표현법이 개발되었지만, 표현법이 설계 자체를 돕지는 않는다. 표현법은 다른 사람에게 전해주기 위해 마지막 단계에서 사용하는 도구일 뿐이다.

- 설계의 핵심은 컴포넌트와 인터페이스를 간단하고 깨끗하게 정의하는 것이다. 이는 머리로 하는 것이지 도구로 하는 것이 아니다. 표현법에 노력을 기울이기보다는 생각하는 방법에 더 많은 노력을 기울여야 훌륭한 소프트웨어를 만들 수 있다. 표현법에는 획기적인 변화가 있을 수 가 없으며, 시대에 맞게 조금씩 변화하면서 생겼다가 사라지고 할 뿐이다.

- 머리 속으로 분석하고, 머리 속으로 설계하고, 머리 속으로 코딩하는 법을 익히는 것이 진정으로 소프트웨어 개발에서 전문가가 되는 길이다. 행동하기 전에 머리로 모든 것을 해보는 습관을 길러야 한다.  





44. 지식과 기법은 달콤한 사탕과 같다.

- 소프트웨어 회사에는 세 가지 유형의 개발자가 있다. 첫째 원론적인 것에 치우친 사이언티스트( Scientist ) 형. 현실과는 거리가 먼 혁신적인 알고리즘 같은 것에 신경을 쓴다. 즉 지식 위주다. 둘째 테크니션( Technician ) 형은 기법적인 것에 신경을 쓴다. 마지막으로 개발자 ( Engineer ) 는 현실에서 고객이 무엇을 원하고 어떻게 하면 좋은 품질의 제품을 빨리 개발할 수 있을까 하는 것에 초점을 둔다. 즉 표현은 못하지만 실행할 줄 아는 암묵적 지식( Tacit Information )  의 소유자이다. 세 유형 모두 소프트웨어 회사에 어느 정도 필요한 존재다.

- 개발자가 유혹에 빠지기 쉬운 것이 지식과 기법이다. 지식과 기법은 달콤한 사탕과 같이 매력적이다. 모두 남 앞에서 과시용으로 사용하는 데 적격이다. 그러다 보면 자신이 세뇌되어 마치 본질을 아는 것 같은 착각을 일으키기도 한다. 그리고 지식과 기법에 집착한다. 지식과 기법에 오랫동안 젖어 있다 보면 탁상공론의 대가가 된다.

- 암묵적 지식은 남들 앞에 내세울 것도 없는 듯 보이나 가장 중요한 핵심인 일이 수행되게 한다. 그것이 바로 개발자이다.

- 현실적인 제품을 만들어 내는 것이 Software Engineer 인데, 사실 Technician 이나 Scientist 에 비해 남들에게 보여지는 것이 매력적이지는 않다. 그러므로 개발자도 자연적으로 과시적인 쪽에 시간을 소비한다. 이런 일이 발생하는 이유가 바로 개발자 가치를 판단하지 못하는 경영자 때문이다. 제대로 가치를 판단해 준다면 비생산적인 과시용 노력에 시간을 덜 소비할 것이다. 





45. 비행기, 산악자전거, 그리고 소프트웨어

- 소프트웨어에서의 잘못된 판단은 출시 연기, 품질 저하, 고객의 불만, 회사의 실패와 연결된다. 이 모든 것이 결국은 판단을 제대로 못한 경영자, 관리자, 개발자 자신의 불행으로 돌아온다. 소프트웨어는 그 잘못된 판단의 결과가 즉시 나타나지 않는다. 그리고 잘못된 결과의 원인이 명확하게 규명되지도 않는다. 천천히 침몰해간다.

- 소프트웨어 업계에서 관리자나 개발자가 이런 원인제거를 적절히 하지 못하는 이유는 전문성 부족 때문이다. 소프트웨어에서 자기의 수준을 정확히 알고 개발에 임한다면 문제는 훨씬 적어질 것이다.

- 자기의 역량을 정확히 알아야 어떤 문제가 발생할 수 있고, 뭘 배워야 하고, 무엇을 향상시키고, 어떻게 해야 좋은 소프트웨어를 개발할 수 있는가를 알 수 있다. 





46. 스마트폰, 소프트웨어 공학을 경험할 좋은 기회

- 스마트폰 개발처럼 소프트웨어 공학의 여러 측면을 다양하게 경험할 수 있는 기회도 드물다. 큰 규모가 아니면서도 여러 플랫폼, 수많은 버전관리, 수 많은 언어 지원과 같이 세계화를 목적으로 만든 애플리케이션이라면 꼭 다루어야 할 주제를 다 포함하고 있다. 그래서 스마트폰 앱은 체계적이고 효율적인 개발방법이 필수적인 애플리케이션이다.





47. 컨퍼런스에 보람 있게 참가하는 방법.

- 소프트웨어 업계에 있는 경영자나 개발자가 자기 제품이나 기술과 관련된 컨퍼런스에 참여하는 것은 매우 중요한 일이다. 비용이 들지만 그런 비용을 투자하지 않는 회사라면 희망이 없다. 인터넷을 서핑해서 얻는 지식에는 한계가 있다. 최신 기술이나 미래 비즈니스 동향을 가장 빨리 아는 방법은 사람을 통하는 것이다.

- 인터넷에 있는 정보는 세상의 모든 사람에게 다 알려진 정보다. 그런 정보를 가지고 경쟁력에서 우위를 차지한다는 것은 어불성설이다. 검색기술의 우위를 가지고 다른 사람보다 더 많이 아는 척하는 것은 지식의 유희에 불과하다. 진짜 중요한 정보는 사람이 가지고 있다. 그렇기 때문에 컨퍼런스에 자주 참가하는 것을 강력이 권장한다.

- CEO, CTO, 마케팅, 영업, 기술 임원은 컨퍼런스에 오기 전부터 미팅 스케줄을 꽉 잡아놓고 온다. 컨퍼런스 장소에는 대개 예약할 수 있는 조그만 방이 있는데 그들은 거기서 만나고 있다. 전시부스에서는 이런 사람들을 만날 수가 없다. 특별히 신경써야 할 것 중에 프레스 컨퍼런스라는 행사가 있다. 어떤 회사가 새로운 전략이나 제품을 만들면 기자만을 모아서 발표하는 것이 있는데 이것을 프레스 컨퍼런스라고 한다. 여기에 참가하면 보통 사람이 얻기 어려운 자료도 많이 얻을 수 있고, 기자의 질문과 답 가운데 알려지지 않은 정보를 얻을 수 있다. 이곳에 참가하려면 언론과 관련된 명찰이 있어야 하므로 참석하려면 요령껏 미리 준비해야 한다.

- 개발자에게 중요한 세션은 이전에 Birds-of-Feather(BOF) 세션이라고 불리던 Peer-to-Peer 세션이다. 주로 기술적이고 매우 구체적인 주제에 관해 의견을 내는 비공식 세션으로, 간단한 프레젠테이션이 있을 수도 있고, 그냥 어떤 주제에 대해 의견을 주고받거나 사회자가 질문을 하고 참가자가 답을 하기도 한다. 이곳에서는 경쟁사의 귀중한 정보도 얻을 수 있다.

-  마지막으로 저녁식사를 챙겨라. 되도록이면 회사동료하고 같이 앉아 먹는 편안함보다는 교류와 정보를 얻을 수 있는 중요한 기회로 이용해야 한다.


도움이 되셨다면 손가락 꾸욱~




 
반응형

댓글