Наскоро започна твърде често да ми се налага да обяснявам процеса на разработка на „нетехнически лица“. И тъй като е бая сложно да говориш за рефакторинг, редизайн и итерации на хора, които просто мигат на тези думички, си припомних мъдростта на Стив МакКонъл. В Code Complete имаше цяла глава, посветена на метафори за софтуерното разработване – бе го сравнил с писане на жудожествен текст, градинарство, игра и прочее. Безспорно най-доброто сравнение беше с изграждането на някаква постройка. Наистина, „сградостроенето“ е доста сходно до това което ние правим като програмисти. И на двете места си говорим за „архитектура“ и „инженери“, планирането е адски важно и има огромна разлика между строенето на лятна кухня и небостъргач… Първо, тази аналогия показва колко са важни дизайна и спецификацията. Ако строите къща, а клиентът ви всъщност иска хотел, очевидно ще пропилеете доста пари. В софтуера е същото – ако не знаете какво разбработвате и каква му е целта, ще пропилеете бая време. Второ, трябва да си начертаете планче – не е нужно да навлизате в подробности и да определяте какво ще има във всяка стая, но трябва да знаете колко стаи ще са, как ще ги подредите и как ще се отива от кухнята до спалнята. Да кодите без някакъв дизайн е като да започнете от една стая и да слагате стаи около нея докато получите нещо задоволително (което едва ли ще стане).
После, метафората показва цената на промените. В едноетажна къща без таван не е толкова трудно да се премести една стена два метра навън – просто на майсторите ще им трябва време, а вие ще трябва да платите това време. Когато вече сте написали един код и трябва да го променяте, клиента харчи пари за времето което сте прекарали отгоре. А ако стената е опорна, тогава имате проблем – точно както в някои проекти има код, който ако промените, всичко ще се счупи и ще ви отнеме месец да адаптирате цялата хава към новите си идеи.
И накрая, показва колко важно е планирането – клиентите си искат проектите на време. Доста ще ядосате собственика, ако му кажете „ми чи ни знам де шъ живееш, нас ни тряят още три месеца да дигнем последния етаж“. А ако нямате добър и гъвкав план, в който предвиждате и неприятности, едва ли ще можете да излезете със срок, на който той може да разчита. Това ще ви пречи и на вас, щото се чудите днес какво да правите.
Има още бая паралели, които могат да се направят между строенето на сгради и правенето на проект. Според мен тези метафори са бая добра идея, тъй като ни помагат да обясняваме на „програмно неграмотните“ люде с какво се занимаваме и да им показваме къде точно е проблема. Ако искате повече и по-мъдри разсъждения на тая тема, хвърлете отново един поглед на втора глава от Code Complete. А ако не сте я чели, гасете нета и почвайте, защото в нея има много програмистка мъдрост, която просто не трябва да изпускате (ако сте програмист; ако сте градинар, анастезиолог или нещо друго, може и да я пропуснете).
Disclaimer: Както отбеляза Петьо в един разговор, метафората опира до методологията. Ако става въпрос за waterfall модел или подход, в който първо се прави дизайн и спецификация, а после се итерира по feature-и или use case-ове. Когато си говорим за agile методологии (например XP), аналогията става доста неподходяща, защото идеята на тия методологии е да се справяте успешно с проекта при нулева спецификация и предварителен дизайн. Честно казано, не се сещам за подходящо сравнение. Ако имате идея – пишете.
RAD != XP. RAD е да намяташ контролите от туулбокса, да цъкнеш два пъти и да драснеш два реда код в създадения евент хендлър.
XPто е agile методология, обвързано с TDD, и други подобни. Ей тук пише повече: http://www.extremeprogramming.org/ http://www.agilemanifesto.org/
Дали има аналог в друга индустрия? Не знам.
Всъщност, съвсем прав си. Не знам що съм написал RAD там. Веднага го корегирам.
Каквото и да си говорим, няма по-добър паралел между строенето на сгради и програмирането от класическата историйка Ако програмистите строяха къщи.
Друг път ще ви кажа какво мисля извън кръга на шегата (аз наистина стоя зад твърдението си по-горе).
Като стана дума, до кога ще чакам да ми върнеш книгата 😛
Codito ergo sum » Програмиране и шофиране