Интерфейси и абстрактни класове (в Java)

Често ми се случва да се чудя дали да ползвам абстрактен клас или интерфейс докато пиша на Java. И двете идват от леко остарелия ООП апарат на C++, в който наследяването се ползва предимно за две неща – предотвратяване на повторение на код и абстракция. Та, хрумна ми една проста схемичка как да определя кога какво да ползвам.

Continue reading

Uniform Access Principle

Днес прочетох за нещо, наречено Meyer’s Uniform Access Principle. Това е един много интересен прицип касаещ ООП езиците. Гласи горе-долу следното:

Атрибутите на един обект трябва да се достъпват чрез нотация, която не позволява да се различи дали те са имплементирани чрез запис или чрез изчисление.

Иначе казано, line.length не трябва да издава дали става въпрос за поле или метод, изчисляващ разстоянието между двата края. Това е много хубава идея, понеже промотира любимите ми думички – абстракция и енкапсулация. Та, замислих се доколко това важи в езиците, които ползвам.

Continue reading

Куинче на Python

Наскоро си ходих по улицата и си спомних за едно предизвикателство от детството ми – да напиша програма, която принтира кода си. Не знам дали на вас ви се случва да ви хрумват такива неща, докато си ходите по улиците. Или да си спомняте такива предизвикателства от детството си. Аз обаче съм от този тип хора. Та, ето какво съчиних… Continue reading

Необмислена генерализация

Щастлив ден. Открих че поредният мой дразнител в менталния модел на повечето програмисти си има име – premature generalization. Случвало ли ви се е колегите / приятелите / семейството да ви вкарват в неописуемо дълбока абстракция, която после ви излиза през носа със своята сложност. Да загубите 30 часа за да имплементирате въпросната генерализация и още 30 да я използвате по предназначение, когато е могло да стане много по-лесно за 25?. Наричат го още Turing Tar-Pit.

Поуката? Не генерализирайте излишно. Целта ни е да ограничаваме колкото можем, а не обратното. You Ain’t Gonna Need It.

Реджиналд Брейтуейт

Напоследък се зачитам в един много, много интересен блог, който Петьо ми препоръча. Това е един човек, който се занимава от доста време със занаята и посвещава част от свободното си време да си споделя програмистката мъдрост с нас, младите и зелените. На сайта му ще намерите много есета на програмистска тематика, покриващи най-различни насоки като красив код, добри практити, мениджмент и прочее. Материалите които е изписал от 2004 досега определено си заслужават да бъдат пакетирани в книжка. Четете и се учете.

Practices of an Agile Developer

Наскоро ми препоръчаха тази книжка. Прочетох я и съм много доволен от акъла в нея. Покрива теми от идеите на гъвкавите методологии (итерации, unit тестове, продължителна интеграция), както и сравнително общи принципи (писане на качествен код, кохезия, защитно програмиране). От първото ще разберете както и основната идея на гъвкавата методология и защо може да ви е полезна, както и някои от тънкостите в прилагането ѝ. От второто ще намерите най-добрите неща от Code Complete, описани по-накратко (и по-достъпно, поне по мнението на двама колеги, които не харесват Code Complete, но харесаха тази книга). Особено ми хареса една секция, която говореше за добри практики за работа в екип – stand-up meetings, brown-bag lunches и разни други забавни и интересни неща. Определено научих доста от нея. Препоръчвам ви я и на вас.

Понятия

Наскоро ми разказаха за едно островно племе, което няма в езика си думи за числа. Когато им показвали снимки с по пет и с по седем камъка, те не правели разлика – за тях купчините представлявали едно и също. Във френския език има две различни думи за стол и стол с облегалки за ръце. Ако един французин ви дойде на гости, има много по-големи шансове да запомни какви са били столовете в къщата ви. Все симптоми на един интересен факт – думитете с които боравим моделират начина ни на мислене и на възприемане на света. А когато става въпрос за софтуерно разработване, моделират и начина ни на работа… Continue reading

Java, MIT 6.170

Наскоро си припомних материала, който Мило водеше на курса „Разработване на приложения с Java“. Това е доста лошо име за този курс, тъй като обекта му е съвсем различен. В оригинала си е нещо от рода на „лаборатория по разработване на софтуер“. От него може да научите доста интересни хавици. Като цяло фокуса му е ООП, но се говори за по-концептуални неща като абстракция, предствяне, „договор“ (contract), интерфейси и редица „теоритични“ неща, които на мен поне ми бяха от ползва в практиката. Базирано е на една хавица от MIT, в която университетските мозъци са наляли много мъдрост. Всичко е много добре написано и се разбира идеално. Горещо ви препоръчвам да му хвърлите един стабилен поглед, дори да се чувствате най-опитните в тази вода. Най-готината селекция от лекции е от есента на 2004-та – от нея научих доста за „концептуалните“ неща и смятам че си струва да им отделите времето. И понеже линк трудно се намира, ето ви го.

питон-маратон

Днес приключихме летния семестър на Питона. След четири дена гърч, най-накрая мога да седна да си почина малко. Предвид, че още от уебтеха, Manowar-а, джулая и другия концерт тичам по задачи най-накрая ми се отдаде възможност да си разпусна. И да излея малко размисли за курса по Python… Continue reading

xkcd

Преди известно време Бачийски ми даде един линк към едно доста забавно комиксче – xkcd. Не блести с някакъв стил на рисуване (тъй де, stick figures), нито човека ъпдейтва твърде редовно, но някои броеве са просто гениални. Както ще видите, това е „един комикс за роматника, сарказъм, математика и език“. Много броеве са с леко програмистска тематика или пък доста „сладки“. А може би най-представителния е този. Много се кефя, че има уеб комикс с математическа/програмистска тематика, особено такъв с толкова добри попадения.