На първо място, най-важната характеристика за един леймър е, че той не подозира, че е такъв. По-нататък, едно от най-разпространените определения за леймър, е програмист, който пише програми в колонка и който, като чуе за рекурсия, получава леко разстройство. Леймър е програмист, който знае няколко езика за програмиране, но няма никакво понятие от алгоритми. Леймър е програмист, който ако изобщо слага коментари в програмите си, те са главно от следния вид:
i++; /* увеличаваме i с единица */
Леймър е програмист, който не знае, че зад простичката игра Minesweeper за Windows се крие една от най-сериозните задачи в информатиката, за разрешаването на която университетът Станфорд е определил награда от 1 милион долара [Prize-2000]. Леймър е програмист, който може да напише бързо сортиране единствено, ако го научи наизуст. Нещо повече, истинските програмисти рядко могат да го запомнят и напишат бързо, но за сметка на това за 10 минути могат сами да си го “измислят”. Нашата цел е читателят да достигне това ниво, при което решаването на сложни задачи се свежда до просто упражнение на интуицията му. Леймър е програмист, който не знае, че “събирачът на боклук” (от англ. garbage collector) не е измислен, специално за да събира “труповете” на “починалите” обекти на Java, а зад него стои мощна и красива теория, представена още в средата на XX век. Леймър е програмист, който не знае, че най-ефективната търсеща машина в Интернет Google дава толкова релевантни резултати, защото се основава на новаторски методи от теорията на графите. Леймър е програмист, който не знае, че формулата за ефективната реализация на произволен компютърен проект е малко спецификации + много и ефективни алгоритми. Леймър е програмист, който не може да проумее защо една програма, за която “някой бил казал, че има сложност Q(n2)”, е по-бърза от друга със сложност Q(n3), след като n3>n2. Леймър е програмист, който може да програмира на Си и който може да намери най-малко общо кратно на две числа на лист, но не може да си напише програма за това. Леймър е програмист, който не може да обясни защо като се компресира един файл, и после се компресира още веднъж, той не намалява още повече.Леймър е програмист, който за 10 минути може да направи дадена програма 10 пъти по-бавна, без да се притесни, че някой преди него е загубил 10 часа в оптимизиране, за да я направи с 10% по-бърза. Леймър е програмист, който brute-force-ва ftp(от англ. File Transfer Protocol – протокол за пренос на файлове в компютърна мрежа) пароли, без да съобрази, че при сегашната скорост на Интернет трудно би могъл да hack-не парола, по-дълга от 5 символа (а за това е необходимо едно съвсем просто комбинаторно изчисление), освен ако не извади луд късмет. Леймър е програмист, който трудно може да проумее асоциация на хубава вечеря с хубава програма (а тяхното качество зависи от рецептата/алгоритъма, който се използва). Леймър е програмист, който не знае, че най-краткото разстояние между две точки не винаги е правата линия (понякога, то се намира по алгоритъма на Дейкстра). Леймър е програмист, за когото двоично търсене означава търсене в двоични файлове. Леймър е програмист, който се възхищава на програмни фрагменти като този: (0x000000FF & (i >> 24); често, просто защото си няма понятие какво точно означават и панически преминава на следващата страница, когато види “йероглиф” от вида: ?~~~ ===
Леймър е програмист, който не е чувал за динамично оптимиране. Всъщност, един от наистина добрите начини да разбиете в спор някой леймър, е да му заявите: “Хей, ами тази задача е добре известна и се решава лесно, елегантно и ефективно с динамично оптимиране”. |