Нашите курсове във ФМИ 2012/2013 и evans

През 2007 с Ники Бачийски подхванахме един избираем курс по Python. Трудно ми е да опиша колко положителни емоции и опит ми донесе. От тогава не сме спирали да го водим и дори сме пробвали няколко други (един по Rails и един по Ruby). Всъщност, Ruby-то бе миналата година и (според мен) бе най-добрия ни курс.

Вече не сме само двама. За тези шест години сме събрали малък екип от хора, които помагат по всевъзможни начини. Също така, разрастваме начинанието – тази година ще направим цели три курса – (1) Ruby през зимния семестър и (2) Python и (3) Clojure през летния. Разбира се, ако учите във ФМИ, горещо ви ги препоръчвам.

Но не пиша за това. Още не съм сигурен каква ще е моята активност в тези курсове, тъй като отново планирам местене в чужбина. Но нещо, в което съм сигурен, е че това лято ще обърна повече внимание на сайта на курса. И мисля, че това може да ви е интересно. Нека да обясня.

Сайтът е изключително централен за курса. Там студентите предават домашни, там могат да задават въпроси, там даваме обратна връзка за решенията им и там се пазят всички точки, изкарали до момента (точките определят оценката). Има ред механики, за които той е централен. Например, за да поощрим участитето в час, подхвърляме по един Snickers на студентите задали добър въпрос или дали добър отговор. Освен че е забавно и изключително калорично, на Snickers-а има залепен код. Ако го въведат на сайта получават точка. Имаме идеи за още няколко подобни механики, които ще имплементираме тази година. И тук може да се включите. Continue reading

Code Retreat №4

За четвърти път ще организирам Code Retreat в София. Датата е 21 юли 2012, часът е 09:00. Мястото отново ще бъде в офиса на Software Society.

Ще протече както е протичал и до сега. Всички са напълно добре дошли. Ако се колебаете или имате някакви въпроси, питайте ме тук и ще ви отговоря с най-голяма радост.

Ако ще идвате, задължително е да се регистрирате на сайта на Software Society.

Презентация: Майсторство в занаята

Вчера бяхме на OpenFest Габрово (снимки от Мариян). Беше супер. Тези малки конференции извън София са страхотни и искам да има повече. Но блогвам по друга причина.

Презентацията ми се казваше „Майсторство в занаята“ и комбинира идеи, над които напоследък често разсъждавам. Хареса ми как се получи, макар че има нужда да я поошлайфам малко. По тази причина, ще я повторя в четвъртък (10ти май). Мястото е ФМИ, залата е 200, а часът е 19:15. Ще бъде част от курса по Python, но за разнообразие, няма да говоря за Python. Входът, разбира се, е свободен.

Презентацията е от две части. В първата говоря за програмирането като кариера и няколко трудни истини свързани с него. Втората съдържа няколко урока, които ми се иска да бях научил преди 10 години. Идеите много ме ентусиазират – искам да ги споделя с повече хора.

Така че – заповядайте. Ако имате проблеми с това да намерите ФМИ или залата – пишете ми и ще ви помогна. След това вероятно ще отидем да изпием по една-две бири. Може да останете за тях.

П.П.: Ще кача слайдовете по-късно тази седмица. Ще се опитам да събера част от нещата в блог пост.

Smalltalk и други екзотични езици в initLab

Занимавайки се с разнообразни езици за програмиране съм научил много. Всеки ме изненадва с нещо. Понякога намирам идеи, които „mainstream“ езиците са усвоили десетки години по-късно. Понякога виждам идеи, които те тепърва усвояват. Не са ужасно практични, но занимавката с тях ме прави по-добър програмист.

Искам да направя серия от малки презентации в initLab за такива езици. Очаквайте Io, Scheme, Haskell, J, Prolog и прочее. Първият ще е Smalltalk. Датата ще бъде 26ти януари. Часът ще бъде 19:00. Continue reading

Code Retreat на 9ти юли

Code retreat е интересен начин да усъвършенствате програмистските си умения. Събирате се група хора (четен брой) и решавате един конкретен проблем (Conway’s Game of Life). Работите по двойки (pair programming) с test-driven development. Пишете на сесии от 45 минути, след които правите кратка ретроспекция, изтривате кода и сменяте партньора. И така цял ден, с различни хора.

Идеята не е да решите проблема. Идеята е да обмените умения и да затвърдите фундаментални познания. Това е адски добър начин да научите test-driven development или някой друг трик с текстовия редактор/шела.

Чух за идеята миналата година на NordicRuby, но чак през април се престраших да я пробвам. Организирах малко събитие в initLab, в което поканих само познати. Събрахме се 6 човека и направихме 5 сесии. Писахме на C#, JavaScript, Ruby, Python и дори Scala. Бяхме много доволни. Всеки си тръгна научил нещо.

Искам да организирам друг и този път смятам да поканя всички, които искат да дойдат. Събитието ще се проведе от 9:00 на 9 юли, събота в initLab. Ако искате да участвате сте добре дошли. Не е нужно да сте опитни в TDD — просто носете компютър и добро настроение.

Ето как ще протече:

Ще направим нещата „по книга“ – времето ще е 45 минути, проблема ще е Game of Life, ще трием кода на края на сесиите и ще ползваме test-driven development.

Всяка двойка ще се уговаря помежду си на какъв език да пише. Със сигурност ще си намерите партньори за C#, Java, JavaScript, PHP, Python и Ruby. Вероятно ще има всякакви екзотики.

След всяка сесия ще събираме всички и ще обсъждаме как е минало. Ретроспекциите отнемат към 15 минути, след което ще продължаваме с друга двойка.

За да компенсирам ранното ставане, ще има закуска и кафе в initLab. Ако имате по-специални изисквания (не ядете месо или сте веган), кажете и ще се погрижа. След третата сесия ще отидем в близко заведение да обядваме. След това се връщаме и продължаваме. Реалистично погледнато, ще направим 6 сесии и ще приключим към 17:00.

Първите 20 минути ще се запознаем и закусим, след което ще разкажа подробно как ще протече събитието. След това започваме първата сесия.

Събитието ще е напълно безплатно (включително закуската).

Не нужно да сте опитни в TDD. Въпреки това, имаме следните изисквания към всеки участник:

  • Носете компютър
  • Научете правилата на Game of Life. Ако имате възможност, пробвайте да няколко шаблона.
  • Изберете си езици, на които ще пишете и научете поне един тестов framework във всеки. Важно е да познавате инструментите и да можете бързо да пускате тестове.
  • Задължително подкарайте празен проект за всяка двойка (език, testing framework), с които смятате да работите на вашия компютър. Не искате да прекарате голяма част от сесията в подкарване на проект.

Ако идвате, моля елате в 9:00 и останете за целия ден. Ако ще идвате, пишете ми на stefan точка kanev маймунка гмейл точка ком. Имам нужда да знам колко човека ще присъстват. Моля пишете само ако сте сигурни. Ако ви изникне нещо в последния момент, ще се радвам да ме предупредите.

Ако имате някакви въпроси, ползвайте формата за коментари, пишете в пощенския списък Software Craftsmanship Bulgaria или ми пратете писмо. Може да погледнете кратките отзиви от предишния code retreat или да намерите повече информация на coderetreat.com.

Ще се радвам да ви видя на 9ти!

Какво харесвам в pair programming?

Pair programming е една от по-скандалните практики в Extreme Programming. В нея двама програмиста работят заедно на един компютър. Клавиатурата е една и се предава от време на време. Подходяща метафора за това е двойката шофьор и навигатор. Диалогът е ключов – раждат се идеи, пречупват се през общия опит и резултират в код. Като практика, pair programming претендира за (1) по-добра ефективност, (2) по-високо качество и (3) по-малко дефекти.

За първи път правех pair programming през 2005. Това е страхотен начин на работа и горещо ви го препоръчвам. Има ред предизвикателства – да убедите мениджмънта, да се сработите с колегите и дори да си промените навиците (например никакъв IM). Ако се справите с това, резултати се виждат бързо.

Не целя да ви продам идеята или дори да ви обясня какво представлява. Искам само да разкажа защо ми харесва да работя така: Continue reading

Dijkstra & Design Patterns

Дейкстра има много известни размисли. В On the cruelty of really teaching computer science той твърди, че студенти по компютърни науки трябва да прекарат първите си няколко години далеч от компютри и да се занимават единствено с формална манипулация на символи.

Доналд Кнут е несъгласен (из Coders at Work): Continue reading

<CTRL-[HWUM]>

Enter и Backspace са ми едни от най-трудните клавиши за натискане. Докато се опитвам да минимизирам употребата на втория, първия е задължителен. Натискам с извиване на китката (без да си местя ръката) за да не изтърва home row-а. Това не е никак здравословно – проблемите ми с ръцете започнаха когато правих това на по-голяма клавиатура.

От известно време нося накитници, които ми държат китките изправени и не ми позволяват това движение. Така се налага да местя цялата ръка. Освен че е досадно, така да изпускам home row-а. За щастие, в повечето среди има решение. Continue reading

Структури vs. обекти

Има нещо некомфортно в тезата „всичко е обект“. Ето едно любопитно разсъждение, на което попаднах наскоро (в Clean Code, която препоръчвам):

Обектите скриват данните си зад абстракции и предлагат функции, които работят с тях. Структурите предлагат директен достъп до данните и нямат смислени функции. На практика са противоположности.

Изтъркан пример в Ruby:

Continue reading

TDD №1: Мързел

Това е първият от цикъл постове за test-driven development и автоматизирано тестване.

Има ред причини да пишем тестове – по-лесна поддръжка, документация, дори по-добър сън. Несъмнено сте чували повечето. Но ето една по-рядка – мързел.

Continue reading