Понятия

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

Преди година взехме на работа един човек, който беше невероятно умен, но нямаше „теоритичен“ опит с програмирането. Веднъж беше много впечатлен—„Я, виж колко интересно този метод се вика сам себе си“. Наистина, можем доста да си говорим за методи които викат сами себе си, за условия при които терминират и за тяхната ефективност, но това е защото някой е разпознал една обща схема и ѝ е дал име—рекурсия. Само наличието на понятието ни позволява да мислим едно ниво по-нагоре—да си изградим общи правила за нея (трябва да има дъно, да го достига с краен брой стъпки и че не повече от едно рекурсивно обръщение във функцията—иначе става неефективно), както и да я разпознаваме и да се ориентираме в нея. Също така, ако като тръгна да пиша някакъв код ще се замисля над предимствата и недостатъците на итеративно и рекурсивно реализация. На моят колега тази идея едва ли щеше да му хрумне, просто защото той няма такова понятие в главата си—съответно, има един инструмент по-малко от мен.

Това далеч не важи само за рекурсията. Има редица понятия, с които смятам че всеки програмист трябва да е запознат—представяне, инвариант, кохезия, fan-in/fan-out, гранулярност, интерфейс, абстракция и редица други. И това не са някакви развлечени неща взети от книги като Code Complete, а понятия за неща които реално се случват в кода ви и трябва да имате предвид, за да избягате евентуални проблеми. И макар да съм далеч от идеята, че всеки трябва да е терминологичен речник, то определено помага човек да има идея от концепциите, които други са решили че заслужават имена. Ако видите някъде някаква такава концепция, не бягайте от нея—опитайте се да я проумеете и дори да я вкарате в начина си на мислене. Девет от десет случая ще е за добро.

Disclaimer: въпреки, че колегата ми не знаеше какво е рекусия, беше един от най-бързо възприемащите хора които познавам. Теоритичните му пропуски се коменсираха донякъде с бърза и чиста мисъл, както и добро умение да анализира проблемите. И все си мисля, че ако си беше поиграл да създаде добра система от теоритични познания в главата си щеше да е много по-ефективен в работата.

One Comment

  1. Posted August 4, 2007 at 3:36 pm | Permalink

    че не повече от едно рекурсивно обръщение във функцията—иначе става неефективно

    Е тук не си прав :-) Ако трябва да обходиш дърво по колко пъти се обръща функцията към себе си? И има ли по-ефективен начин? Отговорите са съответно: колкото наследника има съответния връх и не.

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

One Trackback

  1. By Codito ergo sum » Думи от занаята on January 25, 2008 at 11:39 am

    [...] съм го и по-рано—думите които използваме са важни. Трябва да внимаваме с употребата им за да можем да се [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*