<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codito ergo sum &#187; метафора</title>
	<atom:link href="http://skanev.com/tag/%d0%bc%d0%b5%d1%82%d0%b0%d1%84%d0%be%d1%80%d0%b0/feed/" rel="self" type="application/rss+xml" />
	<link>http://skanev.com</link>
	<description>Блогът на Стефан Кънев</description>
	<lastBuildDate>Fri, 20 Jan 2012 17:52:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Програмиране и шофиране</title>
		<link>http://skanev.com/2007/09/05/software-and-driving/</link>
		<comments>http://skanev.com/2007/09/05/software-and-driving/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 12:15:39 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Програмиране]]></category>
		<category><![CDATA[метафора]]></category>

		<guid isPermaLink="false">http://skanev.com/2007/09/05/software-and-driving/</guid>
		<description><![CDATA[В книжката си за екстремно програмиране, Кент Бек прави интересна аналогия между разработката на софтуер и шофирането. Тя касае спецификациите. Големият мит на софтуерното разработване гласи, че първо клиента пише спецификация, след това програмистите правят дизайн и накрая го кодят. Поставя се една посока и след това се върви по нея. Кент Бек твърди, че [...]]]></description>
			<content:encoded><![CDATA[<p>В <a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0201616416">книжката</a> си за <a href="http://www.extremeprogramming.org/">екстремно програмиране</a>, <a href="http://en.wikipedia.org/wiki/Kent_Beck">Кент Бек</a> прави интересна аналогия между разработката на софтуер и шофирането. Тя касае спецификациите. <a href="http://en.wikipedia.org/wiki/Waterfall_model">Големият мит на софтуерното разработване</a> гласи, че първо клиента пише спецификация, след това програмистите правят дизайн и накрая го кодят. Поставя се една посока и след това се върви по нея. Кент Бек твърди, че по-скоро прилича на шофирането &#8211; дори на най-правото шосе, ако насочите колата право напред и пуснете волана, след най-много минута-две ще сте извън пътя. След като изберат посоката, <a href="http://en.wikipedia.org/wiki/Male">шофьорите</a> постоянно налагат малки корекции за да не напуснат платното. Така <abbr title="трябва да правят">правят</abbr> и софтуерните разработчици &#8211; в процеса на разработка постоянно да правят малки корекции по изискванията, кода и дизайна. Хрумна ми как тази <a href="http://skanev.com/2007/03/09/software-metaphors/">метафора</a> може да бъде доразвита.
<span id="more-59"></span>
Често ми се налага да обяснявам как сме завършили едноседмична работа за два дена и защо не работим така постоянно. Разстоянието между Ботегврад са взема за един час. Но ако се понаберете здраво на светофарите преди да излезете от София, профучите покрай КАТ, карате със 160км/ч на магистрала и около Зелин вземете един кратък треторазряден разбит път преди една бензиностанция, можете да намалите времето до 30 минути. Недостатъците обаче, са:</p>

<ul>
    <li>Може да катастрофирате</li>
    <li>Може да ви спре КАТ</li>
    <li>Може да почупите амортисьори по гадни пътища</li>
    <li>Ще изхабите повече бензин</li>
    <li>Пътят ще ви изтощи &#8211; после ще ви трябва почивка</li>
</ul>

<p>Така и ние смогваме да вкараме седмица работа в два дена &#8211; рискуваме качество, feature-и, нерви, здраве и дори шанса тотално да омажем проекта и после седмица да ни е недостатъчна да го оправим. И по тази причина караме спокойно, когато няма нужда да бързаме.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2007/09/05/software-and-driving/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Софтуерни метафори</title>
		<link>http://skanev.com/2007/03/09/software-metaphors/</link>
		<comments>http://skanev.com/2007/03/09/software-metaphors/#comments</comments>
		<pubDate>Fri, 09 Mar 2007 16:47:04 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Програмиране]]></category>
		<category><![CDATA[софтуерно разработване]]></category>
		<category><![CDATA[дизайн]]></category>
		<category><![CDATA[конструкция]]></category>
		<category><![CDATA[метафора]]></category>
		<category><![CDATA[методология]]></category>

		<guid isPermaLink="false">http://skanev.com/2007/03/09/%d1%81%d0%be%d1%84%d1%82%d1%83%d0%b5%d1%80%d0%bd%d0%b8-%d0%bc%d0%b5%d1%82%d0%b0%d1%84%d0%be%d1%80%d0%b8/</guid>
		<description><![CDATA[Наскоро започна твърде често да ми се налага да обяснявам процеса на разработка на &#8222;нетехнически лица&#8220;. И тъй като е бая сложно да говориш за рефакторинг, редизайн и итерации на хора, които просто мигат на тези думички, си припомних мъдростта на Стив МакКонъл. В Code Complete имаше цяла глава, посветена на метафори за софтуерното разработване [...]]]></description>
			<content:encoded><![CDATA[<p>Наскоро започна твърде често да ми се налага да обяснявам процеса на разработка на &#8222;нетехнически лица&#8220;. И тъй като е бая сложно да говориш за рефакторинг, редизайн и итерации на хора, които просто мигат на тези думички, си припомних мъдростта на Стив МакКонъл. В <a href="http://cc2e.com/">Code Complete</a> имаше цяла глава, посветена на метафори за софтуерното разработване &#8211; бе го сравнил с писане на жудожествен текст, градинарство, игра и прочее. Безспорно най-доброто сравнение беше с изграждането на някаква постройка. Наистина, &#8222;сградостроенето&#8220; е доста сходно до това което ние правим като програмисти. И на двете места си говорим за &#8222;архитектура&#8220; и &#8222;инженери&#8220;, планирането е адски важно и има огромна разлика между строенето на лятна кухня и небостъргач&#8230;
<span id="more-20"></span>
Първо, тази аналогия показва колко са важни дизайна и спецификацията. Ако строите къща, а клиентът ви всъщност иска хотел, очевидно ще пропилеете доста пари. В софтуера е същото &#8211; ако не знаете какво разбработвате и каква му е целта, ще пропилеете бая време. Второ, трябва да си начертаете планче &#8211; не е нужно да навлизате в подробности и да определяте какво ще има във всяка стая, но трябва да знаете колко стаи ще са, как ще ги подредите и как ще се отива от кухнята до спалнята. Да кодите без някакъв дизайн е като да започнете от една стая и да слагате стаи около нея докато получите нещо задоволително (което едва ли ще стане).</p>

<p>После, метафората показва цената на промените. В едноетажна къща без таван не е толкова трудно да се премести една стена два метра навън &#8211; просто на майсторите ще им трябва време, а вие ще трябва да платите това време. Когато вече сте написали един код и трябва да го променяте, клиента харчи пари за времето което сте прекарали отгоре. А ако стената е опорна, тогава имате проблем &#8211; точно както в някои проекти има код, който ако промените, всичко ще се счупи и ще ви отнеме месец да адаптирате цялата хава към новите си идеи.</p>

<p>И накрая, показва колко важно е планирането &#8211; клиентите си искат проектите на време. Доста ще ядосате собственика, ако му кажете &#8222;ми чи ни знам де шъ живееш, нас ни тряят още три месеца да дигнем последния етаж&#8220;. А ако нямате добър и гъвкав план, в който предвиждате и неприятности, едва ли ще можете да излезете със срок, на който той може да разчита. Това ще ви пречи и на вас, щото се чудите днес какво да правите.</p>

<p>Има още бая паралели, които могат да се направят между строенето на сгради и правенето на проект. Според мен тези метафори са бая добра идея, тъй като ни помагат да обясняваме на &#8222;програмно неграмотните&#8220; люде с какво се занимаваме и да им показваме къде точно е проблема. Ако искате повече и по-мъдри разсъждения на тая тема, хвърлете отново един поглед на втора глава от Code Complete. А ако не сте я чели, гасете нета и почвайте, защото в нея има много програмистка мъдрост, която просто не трябва да изпускате (ако сте програмист; ако сте градинар, анастезиолог или нещо друго, може и да я пропуснете).</p>

<p><strong>Disclaimer:</strong> Както отбеляза <a href="http://underlog.org/">Петьо</a> в един разговор, метафората опира до методологията. Ако става въпрос за <a href="http://en.wikipedia.org/wiki/Waterfall_model">waterfall модел</a> или подход, в който първо се прави дизайн и спецификация, а после се итерира по feature-и или use case-ове. Когато си говорим за <a href="http://en.wikipedia.org/wiki/Agile_software_development">agile</a> методологии (например <a href="http://en.wikipedia.org/wiki/Extreme_Programming">XP</a>), аналогията става доста неподходяща, защото идеята на тия методологии е да се справяте успешно с проекта при нулева спецификация и предварителен дизайн. Честно казано, не се сещам за подходящо сравнение. Ако имате идея &#8211; пишете.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2007/03/09/software-metaphors/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

