<?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</title>
	<atom:link href="http://skanev.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://skanev.com</link>
	<description>Блогът на Стефан Кънев</description>
	<lastBuildDate>Wed, 24 Jun 2009 10:25:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1-rare</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Малка Rails конференция</title>
		<link>http://skanev.com/2009/06/24/a-small-rails-conference/</link>
		<comments>http://skanev.com/2009/06/24/a-small-rails-conference/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 09:46:53 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Програмиране]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=271</guid>
		<description><![CDATA[С помощта на хората от linux.bg конференциите ще направим скромна конференция на тема Ruby on Rails в София. Официалната новина за събитието е тук. Ето и моя съкратен преразказ:

Някъде прочетох, че ключът към провала е да опитваш да удовлетвориш всички. Но Bill Cosby е предпоследният, от който ще приема бромид (след Homer Simpsons) &#8212; и [...]]]></description>
			<content:encoded><![CDATA[<p>С помощта на хората от <a href="http://conf.linux-bg.org/">linux.bg конференциите</a> ще направим скромна конференция на тема Ruby on Rails в София. Официалната новина за събитието е <a href="http://techcamp.eu/2009/06/21/rails-конференция-27-06-2009/">тук</a>. Ето и моя съкратен преразказ:</p>

<p><a href="http://twitter.com/ildalina/status/2221064610">Някъде</a> прочетох, че ключът към провала е да опитваш да удовлетвориш всички. Но Bill Cosby е предпоследният, от който ще приема бромид (след Homer Simpsons) &#8212; и точно това ще се опитаме да направим. Под всички имам предвид диапазона между опитните &#8222;Релсисти&#8220; и хората без никаква идея от Ruby on Rails.</p>

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

<p><strong>Втората част</strong> част таргетира хората работещи с Rails. Въпреки това, темите са много и интересни и дори да сте разбрали за Rails в същия ден, ще бъдат добра инвестиция на време. Има силен акцент върху автоматизирано тестване &#8212; и двете теми ще ви бъдат от полза, независимо дали сте опитен <acronym title="Test-Driven Developer">TDDer</acronym> или искате да научите за това тепърва.</p>

<p><strong>Започваме в 10:00 часа сутрина (а не в 13:00 следобяд).</strong> Можете да видите цялата програма <a href="http://techcamp.eu/2009/06/21/rails-конференция-27-06-2009/">тук</a>.</p>

<p>Дотук се простират уменията ми да пиша промотиращи текстове. Отвъд това, ще се радвам да се видим там.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/06/24/a-small-rails-conference/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Субективно</title>
		<link>http://skanev.com/2009/06/17/sub-subjective/</link>
		<comments>http://skanev.com/2009/06/17/sub-subjective/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 03:10:20 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Разни]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=267</guid>
		<description><![CDATA[
  Имаше народна приказка за Синдил-Пиндил и Джаста-Праста. И двете трябвало
  да си ушият рокли, за да се хванат на хорото. Когато дошло времето за хорото, 
  Джаста-Праста отишла, роклята и висяла на разни страни и изглеждала жалко
  и нелепо. През това време Синдил-Пиндил още шиела роклята си и плачела.


Гледам това [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
  <p>Имаше народна приказка за Синдил-Пиндил и Джаста-Праста. И двете трябвало
  да си ушият рокли, за да се хванат на хорото. Когато дошло времето за хорото, 
  Джаста-Праста отишла, роклята и висяла на разни страни и изглеждала жалко
  и нелепо. През това време Синдил-Пиндил още шиела роклята си и плачела.</p>
</blockquote>

<p>Гледам това от три седмици. Убеден съм, е в тая история трябва да има поука. Нямам никаква идея каква, обаче. И е толкова по-интересно, когато авторът ми я е спестил&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/06/17/sub-subjective/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Софтуерно и строително инженерство</title>
		<link>http://skanev.com/2009/05/24/software-and-civic-engineering/</link>
		<comments>http://skanev.com/2009/05/24/software-and-civic-engineering/#comments</comments>
		<pubDate>Sun, 24 May 2009 14:02:33 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Разни]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=255</guid>
		<description><![CDATA[Обичам софтуерните метафори. Правят процеса на разработване по-разбираем. Любимата ми: разработването на софтуер сравнено със строенето на сгради. Много общи неща. А и архитектурата е ужасно близка (философски) до програмирането. Но започвам да си мисля, че сравнението е лошо.

Строителното инженерство работи със стомана и бетон. Веднъж като положите основите, не може да преместите сградата 20 [...]]]></description>
			<content:encoded><![CDATA[<p>Обичам <a href="http://skanev.com/2007/03/09/software-metaphors/">софтуерните метафори</a>. Правят процеса на разработване по-разбираем. Любимата ми: разработването на софтуер сравнено със строенето на сгради. Много общи неща. А и архитектурата е ужасно близка (философски) до програмирането. Но започвам да си мисля, че сравнението е лошо.
<span id="more-255"></span>
Строителното инженерство работи със стомана и бетон. Веднъж като положите основите, не може да преместите сградата 20 метра вляво. Когато вдигнете &#8222;скелета&#8220;, нова подредбата на стаите би отнела много време и пари. Ако ми построите къща, която не ме устройва, няма да е тривиално да я преправите. В софтуера и строителстовто има обща черта &#8212; промените са скъпи. Затова и метафората е популярна.</p>

<p>Но има съществена разлика &#8212; в софтуерното разработване имаме начин да се справим с това &#8212; гъвкавите методологии. Целта им е да направят промените евтини &#8212; дори част от процеса. Постигат се с номера като unit тестове, продължителна интеграция и итериране по feature-и (а не по модули). Дори може да направите бърз прототип, за да видите дали крайното решение ви устройва. Не може да кажете на архитект да ви размени първия и третия етаж по средата на строежа. Или да ви постори примерна къща, за да &#8222;видите&#8220; дали е това, което си представяте. Но може да го кажете на програмист.</p>

<p>И тъй &#8212; мисля си, че не трябва да прекаляваме с тази метафора. Софтуера е като строене на сгради, но само донякъде. Имаме редица инструменти, с които един строителен инженер не разполага по дефиниция. Не бива да се лишаваме от тях психологически.</p>

<p>Уви, нямам по-добра метафора. Чувал съм за градинарство, писане и шофиране, но всички улавят само малък аспект, влачейки премного грешни импликации. Толкова уникално ли е това, което правим?</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/05/24/software-and-civic-engineering/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Поглед назад II: Перфектното, враг на доброто</title>
		<link>http://skanev.com/2009/05/21/perfect-against-good-enough/</link>
		<comments>http://skanev.com/2009/05/21/perfect-against-good-enough/#comments</comments>
		<pubDate>Thu, 21 May 2009 11:18:25 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Поглед назад]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=248</guid>
		<description><![CDATA[Това е част от серия постове, в които описвам сблъсъка си със света последните две години. Как въобще ми хрумна е документирано тук.

&#8211; Ти си твърде голям перфекционист. Винаги искаш да правиш нещата по академично коректния начин. Искаш да е перфектно. Не разбираш, че в бизнеса това не важи. Човек не трябва да се стреми [...]]]></description>
			<content:encoded><![CDATA[<p><em>Това е част от <a href="http://skanev.com/category/thoughts/looking-back/">серия постове</a>, в които описвам сблъсъка си със света последните две години. Как въобще ми хрумна е документирано <a href="http://skanev.com/2009/05/17/looking-back/">тук</a>.</em></p>

<blockquote>&#8211; Ти си твърде голям перфекционист. Винаги искаш да правиш нещата по академично коректния начин. Искаш да е перфектно. Не разбираш, че в бизнеса това не важи. Човек не трябва да се стреми към най-якия код въобще. Перфектното е враг на доброто. Няма нужда да е написано правилно &#8212; важното е да работи.</blockquote>

<p><span id="more-248"></span></p>

<p>Не мога да преброя колко пъти съм чувал горното. Събеседниците ми рядко са били прави. Лошото е, че това е напълно валиден аргумент. Но аз съм много далеч от академично коректен. Въпреки това, вярвам че нещата трябва да станат по правилния начин. Или по един от правилните начини. Иначе няма да станат. Все пак, това е дефиницията на &#8222;правилен&#8220;.</p>

<p>Но ако съм оставил у вас впечатлението, че съм фанатик на тема чист код/добри практики, нека се опитам да си изчистя името.</p>

<h3>Уроци от agile</h3>

<p>На помня коя беше книжката. Жалко, понеже имаше още добри съвети. Този гласеше:</p>

<p>В един проект може да разглеждаме четири компонента:</p>

<ul>
    <li><strong>Maintability</strong> &#8212; възможността да правим промени и да откриваме грешки в проекта за по-малко време. Инцидентно ни дава възможност нови програмисти да стават ефективни за по-малко време. Свързано е с добри практики при писането на кода, добър дизайн, повече автоматизирани тестове и документация, където е нужно.</li>
    <li><strong>Scope</strong> &#8212; колко цялостно решава проблема на клиента. Ако приемем, че feature-ите са фиксирани, да намаляваш scope-а значи да ги опростяваш, така че да продължава да ги има, но да покриват по-малко нужди. Да разширяваш scope-а значи да ги обогатяваш, така че да покриват повече нужди. Може да се мисли за това и като брой feature-и.</li>
    <li><strong>Време</strong> &#8212; колко календарно време ще отнеме проекта. Дали ще е готов утре или следващия месец.</li>
    <li><strong>Бюджет</strong> &#8212; колко струва.</li>
</ul>

<p>Урокът беше следния: ако не покривате целта си в един от компонентите, може да го направите като инвестирате в някой от останалите три. Например:</p>

<ul>
    <li>Може да намалите feature-и (scope) за да спестите пари (бюджет)</li>
    <li>Може да наемете още програмисти (бюджет) за да покриете сроковете (време)</li>
    <li>Лошия код се пише по-бързо, но по-трудно се поддържа. Жертвате maintability за време</li>
    <li>Може да ограничите изискванията (scope) с цел дизайна на приложението да остане прост (maintability)</li>
    <li>Ако фиксирате времето (release след месец) и програмистите ви казват &#8222;няма да стане&#8220;, знате че трябва или да жертвате поддръжката, или да намалите feature-ите или да наемете още хора</li>
</ul>

<p>Един сходен подход твърдеше, че можеш да фиксираш едното и трябва да приемеш другите за плаващи.</p>

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

<p>Очевидно има повече от една конфигурация. Има по-правилни и по-грешни подходи. Има близки подходи. Има тотално неподходящи подходи.</p>

<p>Но разбирането ми за &#8222;правилно&#8220; не е свързано с добрите практики, а с прилагането им прагматично. &#8222;Академичното&#8220; няма нищо общо.</p>

<h3>Загубени в превода</h3>

<p>Човекът, който ме нарича &#8222;твърде голям перфекционист&#8220; &#8212; антагонистът в тази история &#8212; е програмист. Той е интелигентен. Разбира. Уверен е. Правил е работещ софтуер. Шефовете имат високо мнение за него. Открил е, че най-важното е софтуера да работи както клиента иска, а не колко добре е написан.</p>

<p>И отнякъде е чул, че &#8222;перфектното е враг на доброто&#8220;. Прочел е цяла библиотека за предприемачество, мениджмент или създаване на бизнес, но нито една за най-важното &#8212; ръководенето на софтуерен проект. Знае кой е Гай Кавазаки, но не знае кой е <a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959">Фредерик Брукс</a>.</p>

<p>Героят ми не е конкретен индивид. Той е сборен образ. Клас от хора. И когато някоя инстанция на този клас ми каже, че съм &#8222;твърде голям перфекционист&#8220; се ядосвам.</p>

<h3>Перфектното е враг на доброто</h3>

<p>Това е напълно валиден аргумент.</p>

<p>Също така, това е последният урок във всяка методология. Разбираш как да се изправиш срещу хаоса на софтуерното разработване и да внесеш ред. Става с принципи и дисциплина. Разбираш защо тестовете пестят пари и време. Защо чистият дизайн прави проекта много по-евтин за поддръжка. Защо не трябва да оставяш <a href="http://skanev.com/2007/10/30/broken-windows/">счупени прозорци</a>. Защо практиките трябва да се прилагат &#8222;по книга&#8220;.</p>

<p>Чак когато разбереш всичко това, научаваш че перфектното е враг на доброто. Че добрите практики трябва да се прилагат прагматично, не канонично. Че тестовете, рефакторингът и БД дизайнът се ползват докато нещата станат достатъчно добри. Но не отвъд това. Че не ти трябва шеста нормална форма, 100% покритие на тестове или пети рефакторинг на този компонент. Посланието е &#8222;ползвай всички тези принципи, но не изпадай в крайности&#8220;.</p>

<p>Моят герой не го разбира така.</p>

<h3>Something for nothing</h3>

<p>Моят герой не е извървял пътя &#8212; някой му е преразказал заключението. Не разбира контекста на поговорката. Не би направил разлика между добро, перфектно и <a href="http://www.joelonsoftware.com/articles/fog0000000018.html">архитектурна астронавтика</a> &#8212; просто няма нужните познания. Но е разбрал малка част &#8212; &#8222;ОК е да се движим срещу добрите практики&#8220;. Не знае кога е ОК, не знае защо е ОК. Знае само че е.</p>

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

<p>Има подходяща дума за такива хора: аматьори.</p>

<h3>Изводи</h3>

<p>До такава степен съм се наплашил от тях, че се опитвам да избягвам думата &#8222;правилно&#8220; във всякакви разговори. Когато <a href="http://dzver.com/blog/">Веселин</a> каже &#8222;да програмираш правилно&#8220; ми идва отвътре да започна да обяснявам, че не е важно това &#8212; важно е да работи. Понякога дори го казвам. После се усещам, че говоря глупости, в които дори не вярвам. Докъде водят опитите за толерантност.</p>

<p>Така че първият ми извод е: аматьорщината може да бъде заразна.</p>

<p>Вторият е: трябва да се науча да се справям с такива хора. Да им обясня какъв е смисълът на добрите практики, да ги убедя да прочетат <a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0201616416">някоя</a> <a href="http://www.pragprog.com/titles/pad/practices-of-an-agile-developer">друга</a> <a href="http://www.amazon.com/Head-First-Software-Development-Pilone/dp/0596527357">книжка</a>. Да им покажа, че смисълът на поговорката им е друг.</p>

<p>А в крайна сметка, ако са твърде упорити, да не се занимавам с тях. Живота е твърде къс да си губиш времето с глупости. Пък и не ми е цел да отварям очите на хората &#8212; предпочитам да се възприемам като ученик, не като учител.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/05/21/perfect-against-good-enough/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Поглед назад I: 07-09 от птичи поглед</title>
		<link>http://skanev.com/2009/05/19/07-09-from-bird-view/</link>
		<comments>http://skanev.com/2009/05/19/07-09-from-bird-view/#comments</comments>
		<pubDate>Tue, 19 May 2009 10:32:11 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Поглед назад]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=243</guid>
		<description><![CDATA[Това е част от серия постове. Ако се чудите откъде е дошло, може да разберете тук.

Завръзката започна преди около две години. Работех работата, на която съм се чувствал най-добре. И работата, в която изкарвах най-малко пари. Повечето ми колеги не ги биваше и отношенията ми с шефа бяха&#8230; особени. Въпреки че имаше и добри, аз [...]]]></description>
			<content:encoded><![CDATA[<p><em>Това е част от <a href="http://skanev.com/category/thoughts/looking-back/">серия постове</a>. Ако се чудите откъде е дошло, може да разберете <a href="http://skanev.com/2009/05/17/looking-back/">тук</a>.</em></p>

<p>Завръзката започна преди около две години.<strong> </strong>Работех работата, на която съм се чувствал най-добре. И работата, в която изкарвах най-малко пари. Повечето ми колеги не ги биваше и отношенията ми с шефа бяха&#8230; особени. Въпреки че имаше и добри, аз се държах като пълен гъз. Имах най-добрите възможни намерения и най-лошото възможно изпълнение. Имам един характерен начин, по който всички опити да направя някому добро пропадат с гръм и трясък.
<span id="more-243"></span>
Годините преди това бяха <em>the time of my life</em>. Научих страшно много, работех с огромен кеф и мотивация. Бях доста продуктивен. Прекарвах уикендите в офиса &#8212; не защото някой ме караше, а защото беше твърде интересно и не можех да се сдържа. Ръководех екип. Общувах с клиенти. Правех архитектура. Ползвахме extreme programming. Кодът ни беше железен. Бях на върха си &#8212; знаех по-малко от сега, но струвах повече.</p>

<p>Но имаше нужда от промяна. Две неприятни събития в личния ми живот дойдоха твърде много. Вкараха ме в депресия, демотивираха ме. Промениха ме. А във фирмата се бяха насъбрали твърде много неща. Имаше нужда от промяна.</p>

<p>Решението за тази промяна дойде на <strong>УебТеха през 2007</strong>. Беше приключил и пътувах към Каварна, когато взех решение &#8212; ще намеря друга работа. Не знаех нито къде, нито какво. Щях да ползвам месеца предизвестие да разбера.</p>

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

<p>Не познавах българи. Не знаех шведски. Нямах спестявания. Имаше един човек, с когото имах приятелски отношения. Той работеше в друга фирма. Беше най-голямото предизвикателство в живота ми. Както и това, с което се справих най-блестящо.</p>

<p>Там разбрах как светът работи. Разбрах какво движи хората. Живота в друга страна е труден за описване. Човек научава много. Израства. Жалко, че <strong>повечето уроци ми изчезнаха от главата няколко месеца, след като се върнах в България</strong>.</p>

<p>Фирмата беше съвсем различна. Бяхме 4 програмиста и 40 sales човека. Последните бяха едни от най-добрите в Стокхолм.  Докарваха много пари. Бяха от класа. Ежедневно виждах как манипулират хора, по начин който смятах за невъзможен. Научих бая.</p>

<p>Програмистите бяха интересни. Единият се занимаваше повече с ръгби и дизайн, отколкото с програмиране. Беше добър професионалист, макар и неуверен. Вторият бе абсолютен идиот &#8212; част от решението ми да се върна в България. Малко, жалко човече. Благодарен съм му за урока. Последният няма значение за този разказ.</p>

<p>Бяхме част от голяма корпорация с флегматична и консервативна култура. Средата, в която можех да свършвам седмичната работа за ден. Но бях професионален и не се скатавах. Все пак имах достатъчно време да усъвършенствам уменията си и да науча нови неща. Работата не беше предизвикателна. Въпреки това, тогава имах най-добрите идеи.</p>

<p>Животът беше много добър. За първи път бях заобиколен предимно от хора, с които се разбирах. Имах страхотен приятелски кръг. Живях интровертно, но добре.</p>

<p>После реших да се върна. Имаше две причини. Идиотът се беше наплаши, че никой не го харесва и реши да напусне. Мениджърът реши проблема класно &#8212; направи го lead. Класика. А в София се отвори възможност &#8212; двама приятели с фирма търсеха трети. Офертата им беше скромна, но това беше без значение &#8212; предпочитах да работя с добри програмисти и да заработвам собствения залък, пред многото пари.</p>

<p>До ден днешен се чудя дали това бе правилното решение. Денят, в който се върнах София бе денят, в който онзи колега обяви че напуска. Сега фирмата има много добър екип. Имах добри приятели и живеех добре. Пък и Стокхолм е много по-хубаво място от София.</p>

<p>България беше шок. Имах нужда от месец да се адаптирам. След което &#8212; да се депресирам. Не ми се обяснява защо, но първите месеци не бях на себе си. Дори да не го показвах, се чуствах ужасно. Но после свикнах &#8212; човек се адаптира към всичко.</p>

<p>Имаше и още една причина да се върна &#8212; курсовете във ФМИ. И до ден днешен не знам защо ги започнах. Но имам много ясна идея защо продължавам. И въпреки, че напоследък ми донасят само негативни емоции, ще продължавам да се занимавам докато мога. Стига ми да видя, че сме вдъхновили поне един човек да бъде по-добър. Но за това ще разказвам по-натам.</p>

<p>Работата с двамата приятели не вървеше. На ден първи забелязах, че всичко ще се сгромоляса, но не исках да си го призная. Отношенията им бяха натегнати. Работеха в различни стаи. Единият не искаше да сподели нищо и да работи с нас. Другият всячески се опитваше да оправи ситуацията, удряйки на камък. Това и шока от завръщатено &#8212; дойде ми отгоре. Не знаех как да реагирам. Бях пасивен. Не разбирах какво се случва и ме беше страх да опитам да разбера. Вършех лоша работа. Не схващах изискванията на клиентите. Почти не говорих с тях. Не знаех какво точно правя. Мотахме се из офиса с празни погледи и без цел.</p>

<p>Личеше си накъде върви &#8212; скарахме се и прекратихме работа. Не се получи. Стресът идваше отгоре. Единият взе голямо житейско решение, което май бе правилно. Другият постъпи&#8230; лошо. Не ми се навлиза в детайли, защото нито са приятни, нито има смисъл. Ако бях действал другояче, вероятно щеше да стане по-добре. Вместо това се скарах с хора, с които исках да работя. Човек се учи от грешките си.</p>

<p>Така реших да си дам няколко месеца почивка. Бях изкарал достатъчно пари &#8212; можех да си позволя. Консултирах от време на време, но преследвах предимно други интереси. Позанимавах се повечко с музика. Опитах се да се науча на саксофон. Нямах голямо развитие, но беше забавно. Прочетох няколко книги. Попътувах. Прекарах десетина дни в Стокхолм, консултирайки.</p>

<p>След това реших да намеря друга работа. Така и направих. Щях да се занимавам с Rails. Един от хората с които щях да работя бе супер добър. Проекта изглеждаше супер интересен. Мислех, че ще е забавно и продуктивно. Не знаех колко греша.</p>

<p>Може би това е работата, от която трябва да си взема най-много изводи. Кодът беше ужасен. Не просто имаше счупени прозорци &#8212; липсваха стени. Културата беше каубойска. Нямаше итерации, планове или дори ясно формулирани цели. Най-организираното нещо беше ticket-oriented development-а. Изпитвах физическа болка от повечето работа &#8212; правех кръпка върху кръпка и губех повечето време в глупости. Кодът ми не правеше нещата по-добри &#8212; влошаваше ги. На никой не му правеше впечатление &#8212; по-важно беше да ship-нем.</p>

<p>Ако имах малко повече смелост, трябваше да си тръгна след първата седмица. Но реших да го давам на инат. След първия месец бях ужасно депресиран. Занаята, който толкова много обичам вече не ми донасяше удоволствие. Правех всичко с нежелание и без мотивация. Все още се изненадвам колко упорит съм бил.</p>

<p>Не можех да си обясня как тези хора можеха едновременно да ползват Rails и да правят такива ужасии. Ума ми не го побираше. Това далеч не беше най-лошият код, с който съм се борил. Но хората, които го бяха произвели въобще не бяха идиоти. Имаха опит и бяха добри с други технологии. Бяха професионални. Но не знаеха Rails. И не искаха и да го научат. Нямаха идея какво е technical debt. Не ме притеснява гледката как глупак прави глупости &#8212; това е съвсем естествено &#8212; няма защо да ме ядосва. Но когато интелигентни хора произвеждат код с такова качество&#8230; умът ми не го побира. Беше сюреалистично.</p>

<p>Бях депресиран. Постоянно. Казвах си, че кодът не е толкова важен. Че трябва да се държа професионално. Че малко по малко нещата ще се оправят. Че като завършим тази версия, ще пооправим бозите. Че при всяка възможност ще подобрявам качеството на продукта. Бях единствения, на който това дори му хрумваше. Но само си хвърлях прах в очите. Вървях срещу един от принципите си и срещу един от уроците, които научих още преди да намеря първата си работа.</p>

<p>Тогава и започнаха да се появяват проблемите ми с ръцете. Просто една вечер и китките ми започнаха да ме болят. Дори докато пиша това, едната продължава. Винаги съм си пазил ръцете. Това ме хвана неподготвен. Първоначално си мислех, че ще отшуми. Но продължи дни. После седмици. После месеци.</p>

<p>Винаги съм знаел, че каквото и да става, ще мога да изкарвам прехраната си с програмиране. Достатъчно добър за да не се притеснявам за намиране на работа. Но мисълта, че ръцете ми няма да ми позволят, ме плашеше. По два различни, ужасяващи начина. Не знаех дали ще мога да си изкарвам прехраната и покрива. И още по-лошо, не знаех дали ще мога да правя това, което най-много обичам да правя.</p>

<p>Лекарите с нищо не помогнаха. Видях пет-шест такива. Всеки имаше различни идеи за заболяването, сериозноста и начина на лечение. Една дама дори ми каза &#8222;Не знам какво ти е, но може да ти направим операция&#8220;. Хирурзи. Пробвах много неща и почти нищо не помогна. Не мога да опиша колко е ужасно да чакаш и да си чудиш &#8212; дали живота ще се развие така, като си го запланувал или ще търсиш нова професия? За щастие, сега съм по-добре. За нещастие, не съм сигурен дали се подобрявам или стоя на едно място.</p>

<p>Депресията от работата плюс депресията от ръцете не бяха фън заедно. Няколко тежки месеца. Накрая приключих с тази работа и се отдадох почивка. Този път по здравни причини.</p>

<p>В почивката имаше конструктивни неща. Една много хубава конференция във Велико Търново. sofia.rb. Запознах се с няколко готини човека. Ръцете ми започнаха да се пооправят, макар че още не се чувствам комфортно работейки. Опитвам се да freelance-вам, но да не хващам работа на пълен работен ден. Освен ако не съм уверен, че ще ми хареса. Но да не изпреварвам събитията.</p>

<p>Това бяха последните две години от много високо. В следващите няколко поста ще навляза в детайли. Ще разкажа за курсовете, за работата, за хората, направили впечатление. За грешките, които допуснах. И надявам се, изводите до които достигнах.</p>

<h3>Изводи</h3>

<p>Много пъти бях пасивен. Чаках събитията да се развият, вместо да поема инициативата. &#8222;Хвърлих се на съдбата&#8220;, вместо да си я кова сам.</p>

<p>Минаха много събития, от които не извадих извод. Трябва да се анализират поотделно.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/05/19/07-09-from-bird-view/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Поглед назад</title>
		<link>http://skanev.com/2009/05/17/looking-back/</link>
		<comments>http://skanev.com/2009/05/17/looking-back/#comments</comments>
		<pubDate>Sun, 17 May 2009 19:21:49 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Поглед назад]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=234</guid>
		<description><![CDATA[Последните две години бяха особено време за мен. Едновременно много се развих и направих много крачки назад &#8212; както лично, така и професионално. Макар да научих много нови неща и станах чувствително по-добър програмист, направих много грешки. Загубих време. Подминах събития, от които трябваше да си извадя изводи рано. Започнах да се държа нахално с [...]]]></description>
			<content:encoded><![CDATA[<p>Последните две години бяха особено време за мен. Едновременно много се развих и направих много крачки назад &#8212; както лично, така и професионално. Макар да научих много нови неща и станах чувствително по-добър програмист, направих много грешки. Загубих време. Подминах събития, от които трябваше да си извадя изводи рано. Започнах да се държа нахално с хора, които не го заслужават. Започнах да се имам за много велик. Имам нужда от шамар и чаша студена вода в лицето. И ще се опитам да си ги дам сам, преди живота или някой друг да ме е изпреварил.</p>

<p><span id="more-234"></span></p>

<p>Станаха твърде много неща, от които не си взех бележка. Направих твърде много грешки. Ще направя подробен разбор на събитията от последните две години. Реших да го направя в блога си &#8212; публично, почти ексхибиционистично. Имам нужда от урок по скромност. А и няма смисъл да пазя изводите за себе си.</p>

<p>Няма да ви занимавам с лични неща &#8212; не мисля, че живота ми ви е особено интересен. Ще ви разкажа за професионалната част на нещата. За програмистите, с които се запознах. За начините на мислене, с които се сблъсках. За това как моите представи за професията се сблъскаха с чуждите. За цялата глупост, срещу която се изправих. За всичките грешки, които допуснах от страх, мързел или некомпетентност.</p>

<p>За много от тези неща варирам от недоволен до отвратен. Имам бая истории за провал и човешки недостатъци. Още от сега искам да кажа, че смятам себе си за виновника във всичко. Не подходих правилно, не прецених ситуацията правилно и не следвах принципите си.</p>

<p>Но ще разказвам за хора и фирми. Последното което искам, е някой да мисли, че те са лоши, защото аз така съм казал на блога си. Въпреки че на четири очи ще защитавам думите си ожесточено, намирам за проява на лош вкус да го правя публично. Пък и е крайно неетично. Съответно, няма да назовавем истински имена. Дори леко ще променя детайлите, така че да ви е трудно се сетите за кого става въпрос. Дори и това да сте вие.</p>

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

<p>Но честно казано, не вярвам някой от героите на историите ми да ги прочете. От това извинение едва ли ще има смисъл.</p>

<h3>Нещо като цикъл от разкази</h3>

<p>Следващите няколко седмици ще блогвам предимно за това. Ще опитам пиша често. Анализирането на две години от живота ми е времеемка за мен задача &#8212; имам нужда да мина на такава вълна. Мислете за това като отчасти споделяне на опит, отчасти изповед. Създал съм и <a href="http://skanev.com/category/thoughts/looking-back/">категория</a>, ако има значение.</p>

<p>Историите, които ще разказвам няма да имат някакъв смислен ред. Няма да се подредени нито хронологично, нито тематично. Единствената последователност, на която ще отговарят, е реда в който съм се сетил за тях. Убеден съм, че ще има доста изводи. Убеден съм, че много от изводите накрая е си противоречат с такива в началото. Все пак се надявам от това да има полза &#8212; както за мен, така и за вас.</p>

<p>И наистина, ако смятате, че ще кажа нещо лошо за вас, най-добре махнете блога от четеца си. Макар, че едва ли на някой от нас двамата му пука за отношенията ни, няма смисъл да се дразните излишно.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/05/17/looking-back/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>sofia.rb</title>
		<link>http://skanev.com/2009/05/13/sofiarb/</link>
		<comments>http://skanev.com/2009/05/13/sofiarb/#comments</comments>
		<pubDate>Wed, 13 May 2009 10:39:17 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Програмиране]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=227</guid>
		<description><![CDATA[Преди време бях в Сиатъл. Там присъствах на seattle.rb hack night и това беше едно от най-яките преживявания годината. Това породи идеята за sofia.rb. Накратко:


Събираме се всеки вторник от 20:00 в Арт Клуба. За да присъствате, трябва да отговаряте на две условия — (1) да носите компютър и (2) да програмирате на Ruby (там, на [...]]]></description>
			<content:encoded><![CDATA[<p>Преди време бях в Сиатъл. Там присъствах на seattle.rb hack night и това беше едно от най-яките преживявания годината. Това породи идеята за sofia.rb. Накратко:
<span id="more-227"></span></p>

<p>Събираме се всеки вторник от 20:00 в Арт Клуба. За да присъствате, трябва да отговаряте на две условия — (1) да носите компютър и (2) да програмирате на Ruby (там, на място). Събитието изглежда като пет-шест кодещи човека с лаптопи, които от време на време обменят по някоя приказка.</p>

<p>А над какво работите, докато сте там? На каквото си поискате. Нямаме единен проект или цел. Може да вършите нещо за работата, да разработвате страничен проект, да разучавате библиотека или дори да учите Ruby. Например, проследния път <a href="http://sovanesyan.com/">Серж</a> си правеше един проект за клиенти, <a href="http://initlab.startup-bg.org/">Владимир</a> учеше Ruby, аз правих desktop клиент за edno23, <a href="http://svejo.net/reception/about/#us">Явор</a> разработваше един от тайните си проекти. Предния път <a href="http://nikolay.bg/">Николай</a> пък работеше над <a href="http://fmi.py-bg.net/">сайта на курса</a>. Въобще, всичко е ОК, стига да е Ruby.</p>

<p>Идеята е хора, които не работим заедно, да програмираме на едно място — без значение дали коденето е колективно или индивидуално. Има два големи WIN-а в тая работа — (1) хубав начин да научите нещо ново и (2) да се запознаете с други добри програмисти. Постоянно летят въпроси от рода на:</p>

<ul>
    <li>Как да направя това?</li>
    <li>Този код ОК ли е?</li>
    <li>Тук има някакъв странен проблем. Ще погледнеш ли?</li>
    <li>Какво мислиш за тази библиотека?</li>
</ul>

<p>Отвъд другото, е приятен начин да прекараш вечерта — сред интелигентни хора, от които можеш да научиш за занаята.</p>

<p>Претенциите са скромни — не целим да правим потребителска група, български open source на Ruby, голям проект или каквото и да е в този дух. Предлагаме единствено компания за програмиране на Ruby. Доброто настроение си идва само.</p>

<p>Ако искате да дойдете, ще се радваме да ви видим. Хубаво е да се обадите предварително, ако ще идвате. Но ще се радваме и да ни изненадате. Всеки вторник, 20:00 в Арт Клуба.</p>

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;t=h&amp;msa=0&amp;msid=102353012999522920226.000469c8c0c338291515f&amp;ll=42.690495,23.338308&amp;spn=0.00552,0.00912&amp;z=16&amp;output=embed"></iframe>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/05/13/sofiarb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>P2P Конференция 2009</title>
		<link>http://skanev.com/2009/05/02/p2p-conference-2009/</link>
		<comments>http://skanev.com/2009/05/02/p2p-conference-2009/#comments</comments>
		<pubDate>Sat, 02 May 2009 20:30:29 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Разни]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=219</guid>
		<description><![CDATA[И аз ще споделя някои впечатления от таз-годишната P2P конференция.

На първо място, старите вражди са забравени и томахавката е заровена. Има дори снимков материал.

Към по-сериозното: беше страхотно. Според мен, потокът WebTech беше невероятно готин; според повечето хора &#8212; най-добрия до момента. Нямаше слаба &#8222;лекция&#8222;. Хареса ми, че някой говори за Design Pattern-и. Хареса ми, че [...]]]></description>
			<content:encoded><![CDATA[<p>И аз ще споделя някои впечатления от таз-годишната <a href="http://wtconferences.com/">P2P конференция</a>.
<span id="more-219"></span>
На първо място, <a href="http://zbrox.org/freudisms/">старите вражди</a> са забравени и томахавката е заровена. Има дори <a href="http://farm4.static.flickr.com/3650/3482792174_7d5a1d232f_b.jpg">снимков материал</a>.</p>

<p>Към по-сериозното: беше страхотно. Според мен, потокът WebTech беше невероятно готин; според повечето хора &#8212; най-добрия до момента. <acronym title="Всъщност, имаше една, но лектора беше толкова объркан, че не заслужава коментар">Нямаше</acronym> слаба &#8222;<acronym title="или лош talk. презентация също е гадна дума">лекция</acronym>&#8222;. Хареса ми, че някой говори за Design Pattern-и. Хареса ми, че някой говори за ExtJS. Дори ми беше интересно и да гледам как PHP управлява DBUS &#8212; мисъл, от която иначе бих потръпнал.</p>

<p>За другото ми е трудно да коментирам, тъй като хванах единствено една презентация от BlogCamp-а и две от Web 2.0/3.0. И трите бяха готини. Тълпата ми беше малко странна, но на мен българските блогъри са ми малко странни така или иначе. Иначе, скачам на Web 7.0, вдъхновен от <a href="http://www.alistapart.com/articles/web3point0">мъдрите хора преди мен</a>.</p>

<p>Запознах се със супер готини хора. Беше удоволствие да съм сред тях и да си говорим за програмиране. Научих доста, споделих няколко мисли и като цяло доста се забавлявах. Нямам търпение да попадна в такава тълпа отново.</p>

<p>Градът също е невероятно готин. Не съм за първи път във Велико Търново, но за първи път бях с очила и имах възможност да го огледам подробно. Страхотно място. Отдавна си мисля как някой ден ще се преместя да живея там. Може би този ден няма да е чак толкова далеч, колкото си мисля. Освен невероятната гледка, има качество, което привлича хора с любов към математиката (като мен) &#8212; основан е на не-Евклидова геометрия. Наистина посоките са &#8222;нагоре&#8220;, &#8222;надолу&#8220; и &#8222;по стълбите&#8220; и наистина &#8222;по стълбите&#8220; е различна от другите две.</p>

<p>Имаше само един недостатък &#8212; безжичния интернет. Навсякъде беше пълно с рутъри/раутъри, към всички човек можеше спокойно да се закачи и нито един не даваше нет. Не просто в конферентните зали, а във всяко едно кафе и кръчма, в която бях. Не мога да си го обясня. Направи <a href="http://search.twitter.com/search?q=%23p2pvt">замислената употреба на Twitter</a> почти невъзможна.</p>

<p>Имаше и две презентации, на които приказвах. За едната <a href="http://skanev.com/2009/04/25/why-ruby-on-rails-links/">вече съм писал</a>, докато другата може да намерите <a href="http://nikolay.bg/2009/webtech-p2p/#happy">при Николай</a>. На хората май им хареса.</p>

<p>И като цяло, въобще не мога да изразя благодарността си към организатора. Евала, браво, мерси и всичко останало, за което мога да се сетя. Даде много добро изживяване на всички присъстващи. Дори обмислям да организирам Hug a Боги Day, където всички ще отидем във Велико Търново, за да изразим любовта си.</p>

<p>Но сериозно, благодаря за страхотната конференция. И на всички присъстващи.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/05/02/p2p-conference-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Legacy</title>
		<link>http://skanev.com/2009/04/27/legacy/</link>
		<comments>http://skanev.com/2009/04/27/legacy/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 21:59:30 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Програмиране]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=216</guid>
		<description><![CDATA[Най-много прекарано време: поддържка на гаден код. Зъл, противен, гнусен и ужасен код, в който има hardcode-нати IP адреси, директории на конкретни машини, потребителски имена и всякакви други гадости. Код, който е написан по толкова тъп начин, че дори умишлено не мога да съчиня такава глупост. Код, който може да накара всеки кадърен програмист да [...]]]></description>
			<content:encoded><![CDATA[<p>Най-много прекарано време: поддържка на гаден код. Зъл, противен, гнусен и ужасен код, в който има hardcode-нати IP адреси, директории на конкретни машини, потребителски имена и всякакви други гадости. Код, който е написан по толкова тъп начин, че дори умишлено не мога да съчиня такава глупост. Код, който може да накара всеки кадърен програмист да се застреля.</p>

<p>А най-интересното е, че обожавам да ми дават такъв код. Едно от нещата, които обичам най-много, е да взимам такива бози и да ги подобрявам драстично. Стига да ми дадат&#8230;<span id="more-216"></span></p>

<p>Защо? Защото е невероятно голямо предизвикателство. Трябва да подходиш много внимателно и стратегически. Рядко можеш да си позволиш чист rewrite. Трябва да refactor-ваш малко по малко. Преди това трябва да се подсигуриш с unit test-ове. Трябва постоянно да се стремиш да правиш кода по-добър, но същевременно не бива да забравяш, че имаш конкретни цели. Трябва да подобриш системата малко по малко, компонент по компонент, избирайки най-подходящия ред, в който да го направиш. Трябва да се заровиш дълбоко в кода на някой болен мозък и да разбереш какво всъщност е имал предвид.</p>

<p>Обожавам да започна с тъпо написана система и да завърша със сносен софтуер. Чувството от успеха е несравнимо.</p>

<p>Единственото, което може да развали една толкова предизвикателна задача е лош мениджър&#8230; Когато двете се комбиринат, животът е ад.</p>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/04/27/legacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Линкове от &#8222;Защо Ruby on Rails?&#8220;</title>
		<link>http://skanev.com/2009/04/25/why-ruby-on-rails-links/</link>
		<comments>http://skanev.com/2009/04/25/why-ruby-on-rails-links/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 12:53:00 +0000</pubDate>
		<dc:creator>Стефан Кънев</dc:creator>
				<category><![CDATA[Разни]]></category>

		<guid isPermaLink="false">http://skanev.com/?p=209</guid>
		<description><![CDATA[Тук има няколко линка от презентацията ми. Дано са ви от полза:



Очевидните


    The Ruby Language
    Ruby on Rails


Как Ruby on Rails?


    Programming Ruby, книга
    Agile Web Development with Ruby on Rails, книга
    Rails casts, screencasts
    Creating a [...]]]></description>
			<content:encoded><![CDATA[<p>Тук има няколко линка от презентацията ми. Дано са ви от полза:</p>

<p><span id="more-209"></span></p>

<h3>Очевидните</h3>

<ul>
    <li><a href="http://ruby-lang.org/">The Ruby Language</a></li>
    <li><a href="http://rubyonrails.org/">Ruby on Rails</a></li>
</ul>

<h3>Как Ruby on Rails?</h3>

<ul>
    <li><a href="http://www.pragprog.com/titles/ruby/programming-ruby">Programming Ruby</a>, книга</li>
    <li><a href="http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition">Agile Web Development with Ruby on Rails</a>, книга</li>
    <li><a href="http://railscasts.com/">Rails casts</a>, screencasts</li>
    <li><a href="http://media.rubyonrails.org/video/rails_blog_2.mov">Creating a weblog in 15 minutes with Rails 2</a>, демо</li>
    <li><a href="http://guides.rubyonrails.org/">Ruby on Rails Guides</a>, въведения</li>
    <li><a href="http://poignantguide.net/">Poignant Guide to Ruby</a>, въведение в Ruby, много странно</li>
    <li><a href="http://api.rubyonrails.org/">Документация</a></li>
</ul>

<h3>Мета</h3>

<ul>
    <li><a href="http://skanev.com/wp-content/uploads/2009/04/why-ror.pdf">Слайдове</a>, 210 такива, без ефектите (едва ли ще са ви полезни)</li>
    <li><a href="http://www.slideshare.net/skanev/ruby-on-rails-1372333" target="_blank">Същото в SlideShare</a>, също няма да ви е полезно</li>
    <li><a href="http://rubyonrails.org/applications">Приложения на Ruby on Rails</a></li>
</ul>

<h3>Разни други</h3>

<ul>
    <li><a href="http://oreilly.com/catalog/9780596510046/">Beautiful Code</a></li>
    <li><a href="http://rspec.info/">RSpec</a></li>
    <li><a href="http://www.paulgraham.com/progbot.html">Programming Bottom-Up</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://skanev.com/2009/04/25/why-ruby-on-rails-links/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://media.rubyonrails.org/video/rails_blog_2.mov" length="49405864" type="video/quicktime" />
		</item>
	</channel>
</rss>
