2011-11-08 интервюта

by Vasil Kolev

Уважаеми програмисти.

Около интервютата, които поглеждам тия дни откривам, че или аз имам твърде високи очаквания, или повечето хора, дето си търсят работа в областта би било много важно да не си намерят. По случая имам няколко съвета към вас, които не знам доколко ще са ви глобално полезни, но поне ще намалят моите нерви и шансът някой от вас да падне случайно през някой близък прозорец.
(почти толкова лошо е, колкото изпитването на студенти на септемврийска сесия)

Имайте какво да покажете. Код, нещо работещо някъде, каквото и да е, просто да може да се прецени как пишете. Даже няма чак такова значение точният език, на който ще го покажете.

Имайте идея какво показвате, да не ви се случва да попадна на следната конструкция в кода ви (оригиналът беше на objc, това е приближение):

if (a!=NULL && b) {
	do_something();
	do_another_thing();
	if (b) {
		do_crap();
	}
}

и да не можете да ми обясните защо трябва пак да се проверява b.
(напълно е възможно да има причина. Проблемът е с неспособността да се отговори на такъв прост въпрос)

Ако сте учили в (и даже завършили) някой университет по специалността, имайте базова идея от алгоритми и сложност. Това да ми обясните двоично търсене и да не ми кажете каква му е сложността и до колко е сравнимо с различни други такива търсения не е хубаво.
(също така, оценяването на сложността на алгоритъм, алгоритмите за търсене и сортиране и т.н. хубави неща не може да казвате, че не ги знаете, защото “аз предпочитам програмирането пред математиката”)

Ако работите с някаква технология, познавайте я поне отчасти. Много е лошо да задам въпроса “защо ползваш mysql вместо текстов файл”, и да не може да ми се даде смислен отговор. Също така, не бъдете от хората, които правят “SELECT * FROM table” и после си взимат каквото им харесва от резултата.
(ако все пак сте от последните, моля, купете си литър белина и го изпийте)

Намерете малко увереност в себе си. Казвайте си какво знаете и какво не знаете. “Момент да помисля” също е приемлив отговор на разни въпроси.

Ако смятате, че сте програмист, понеже сте направили нещо тривиално и то сработва – грешите. Пример – ако сте направили мобилно приложение, което показва конституцията на Армения, това не ви прави програмист на мобилни устройства. Придобийте поне бегла представа какво значи “тривиално”.

Не бъдете коне с капаци. “Аз искам да пиша за MobileOS версия 9.жм.жд.жбр и друго не искам” е тъпо изказване, почти като “аз пиша на php4 и не искам да се занимавам с php5”. Ако нямате желание да се учите и развивате, моля послушайте изказванията на текущия ни идиот^Wпремиер и ходете да гледате овце, доколкото разбрах, има недостиг на работна ръка.

Tags: ,

28 Responses to “2011-11-08 интервюта”

  1. ju Says:

    Както във всяка професия, хора всякакви. Иначе теорията около оценката на алгоритми все нещо ме мъчи ;)

  2. пропаднал физик Says:

    А ти можеш ли да обясниш защо трябва пак да се проверява стойността на b? :) Да не би в примера да е било || вместо &&, или вие по принцип си пишете код със странични ефекти и използвате глобални променливи?

  3. lanzz Says:

    ако изобщо все още е възможно в бг да намериш хора, които да могат хем да знаят big-O нотация, хем да могат да напишат елементарна имплементация на fizzbuzz, то е много трудно и все по-бързо става все по-трудно.

  4. Vasil Kolev Says:

    @ju, срам.

    @пропадналия физик, в тоя случай беше грешка, щото ‘b’ беше compile-time константа (въпреки че не си личеше от пръв поглед, но един lookup там го показа). Смешното беше, че аз го схванах, докато човекът, който ми го показваше – не. Дори нямаше опит да се помисли и да се каже – щото по пътя ей-тука май има страничен ефект (а си говорим за 10 реда код).

    @lanzz, как да не се пропие после човек.

  5. Григор Says:

    Срещу каква заплата искаш да назначиш програмистите? Заплати, които абсолютно не покриват умението да се напише код като горния, са често явление в България.

    (Това – от личен опит. До момента съм успявал да подбера хора, които остават да работят с мен, въпреки че получават една трета от заслуженото. Но в процеса на подбирането съм се убедил, че такива хора са изключително редки…)

  6. Vasil Kolev Says:

    @Григор, даваме заплати като на нивото на пазара, за хора, които си разбират от работата – стандартните 4цифрени суми. Повечето от тия, дето изпитвахме, не заслужават и минималната работна заплата.

  7. Серж Says:

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

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

  8. пропаднал физик Says:

    Ахаа, то това било извадка от чужд код. Mea culpa! Извинявай, че се усъмних в теб!

  9. Vasil Kolev Says:

    @Серж, не беше точно арменската, просто гледам да не соча с пръст разните хора.

    @пропадналия физик, да дам на интервю за работа да четат и разбират мой код освен, че е нечестно, вероятно е забранено от Женевската конвенция. Давам пример:

    #define SPRINTFR(QRY, SZ , format…) { SZ = QUERY_INITIAL_LENGTH; QRY=mp_calloc(conn->pool, SZ); while ( (size_t) snprintf(QRY, SZ, ##format ) >= SZ) { SZ*=2; QRY=mp_calloc(conn->pool, SZ); }; }

    … и ми хрумна как мога да го подобря, докато го paste-вах.

  10. пропаднал физик Says:

    Като изключим, че макросът наподобява функционално извикване, което обаче модифицира първите два аргумента, без изрично да са подадени по адрес, кодът си е съвсем четим. Не е като да лепнеш нещо такова в началото на подпрограма:
    integer cx,cy,cz
    integer icell
    icell(cx,cy,cz) = 1 + mod(cx-1+xcells,xcells)
    $ + mod(cy-1+ycells,ycells)*xcells
    $ + mod(cz-1+zcells,zcells)*xycells
    и да се радваш на wtf ефекта, който то предизвиква върху хората, които не знаят за този рядко използван прийом на Fortran (за щастие забранен във версиите след 77) :)

  11. Vasil Kolev Says:

    @пропадналия физик, това… дефинира променлива, и после я вика с параметри? Вярно си е wtf :)

  12. пропаднал физик Says:

    Истината е, че FORTRAN до и вкл. версия 77 си беше езикът на истинските програмисти :) Конструкцията всъщност дефинира inline едноизразна целочислена функцийка с 3 целочислени аргумента. Но авторите на езика се оказаха слаби духом и в новите версии заложиха на безумия като “четлив код”, “структурно програмиране”, “свободен формат” и прочие глупости и съвсем го развалиха (вкл. махнаха едноизразните функцийки).

  13. Петър Пенчев Says:

    @Васил *Надявам* се, че поне второто извикване в макроса е на realloc, а не calloc :) Освен това за какво ти е calloc vs malloc?

    А иначе по темата – мдам, аз още разправям за случай отпреди няколко години, когато човек, когото интервюирах, за да ме замести (на чисто програмистка, тогава съвсем не sysadmin-ска работа), не можа да ми обясни разликата между линеен списък и хеш-таблица. “Ами хеш-таблиците са по-бързи.” (sic) “Е добре де, защо?” “Амиииии… по-бързи са!”

    В почти същия дух, тия дни попаднах на Y2K проблем в код, свързан с финансови изчисления, писан преди три седмици… Няма надежда за тоя свят, братче.

  14. Vasil Kolev Says:

    @Пенчев, calloc си е пак – това е един малко по-странен allocator, който и free() си няма, просто като свърши обработката на тоя conn, всичката памет се освобождава. Иначе, calloc вместо malloc е от параноя.
    По принцип в плановете ми май ще влезе да обърна това да ползва системния allocator и да realloc-ва, ама не е ясно кога ще се случи.

  15. Петър Пенчев Says:

    …и в тоя ред на мисли…

    http://technet.microsoft.com/en-us/security/bulletin/ms11-083

    “This security update resolves a privately reported vulnerability in Microsoft Windows. The vulnerability could allow remote code execution if an attacker sends a continuous flow of specially crafted UDP packets to a closed port on a target system.”

    Според мен писането на програми с такива проблеми си иска особен вид гениалност. Впечатлен съм, наистина!

  16. _c_ Says:

    Колкото и странно да изглежда, също и тъпо има реални приложения в сигурността на кода една и съща проверка за валидност на данните. Има много примери за индиректно замазване на памет с assert() или if може да направиш sanity check допълнителен преди извикването на важен ресурс.

  17. Маркуча Says:

    Би ли споделил кой е алокатор използваш? Дано човекът, когото назначиш, не реши да “изоптимизира” допълнително variadic макросите ти, или пък не смени snprintf с нещо доморасло. Сложи също едно __VA_ARGS__ там — хем да плаши хората, за да не пипат, хем да е по-близо до C99.

  18. Desi Says:

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

  19. Peter Rabbitson Says:

    Брех… Да ходя да копам картофи тогава, като даже не знам как се чете big-O – знам само че има нещо общо с “колко ще го чакам”, хал хабер си нямам нито как нито в какви единици мери. Вярно, википедията ей я къде е, но има по интересни неща за четене като има тук таме време. Доста абсурдно е да слагаш хора със SELECT * в един ред с тези които нямат CS образование но сполучливо карат на интуиция :)

    Cheers

  20. Vasil Kolev Says:

    @Маркуча, писан е от един колега по принцип, не знам на какво се базира. За __VA_ARGS ще погледна, звучи като добра идея.

    @Desi, не смея – отдавна не съм търсил такива, а май и почти няма, то в крайна сметка админ е диагноза повече, отколкото длъжност… Иначе – ние сме малка фирма (като брой хора), предпочитаме да останем такава, аз мога да ги изпитвам и го правя :)

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

  21. пропаднал физик Says:

    Сподели сега, до какво доведе “ИББ рефакторингът” от снощи? :)

  22. Vasil Kolev Says:

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

  23. ju Says:

    An O(1) Sort http://stackoverflow.com/questions/25430/an-o1-sort/25501#25501

  24. ju Says:

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

    И ето още едно интересно нещо което ми попадна днес за прогамирането: http://www.codinghorror.com/blog/2009/08/all-programming-is-web-programming.html

    “Atwood’s Law: any application that can be written in JavaScript, will eventually be written in JavaScript.”

  25. пропаднал физик Says:

    @ju, факт е също така, че повечето от тия, които не могат да напишат сами опашки, хешове и т.н., не знаят дори кога да използват свързан списък и кога – хеш таблица, в резултат на което: “Амиии… бавничко ни работи програмата, да, ама… нали догодина ще излязат по-бързи процесори…”

  26. ss7 Says:

    Че какво му е лошото на select * from …. ?

    Иначе си прав, но и за стандартната заплата – такива хора, другите отдавна избягаха от БГ, точно заради “стандартните” заплати.

    А иначе какви хора пишат код , и то важен (поне би трябвало да е важен) , идея си нямаш. В който null pointer exception е доста често събитие. И много се чудя дали причината за това не е “стандартната” заплата в малко по-на изток :)

    Та идеята ми накратко е, че свестни хора има, но те не (биха) програмирали за 1-2 к EUR , когато могат да получават много повече за същата работа извън БГ или пък да си клатят краката в БГ за стандартната заплата. изключвам идеалистите , които биха писали и без пари от обобщението.

    Иначе в момента в БГ е трудно дори да намериш хора които да могат да пишат правилно на български език, а работодателите искат да могат и да програмират , пък и качествено, пък и за 1-2 к EUR . Е не става …. За 80к USD годишно се намират програмисти , за по-малко ….. ти самия си видял какво се намира.

  27. Stranger Says:

    Пичове случайно попаднах тук, ама направо ме разбихте. За Objective-C спецове ли има заплати над 2к EUR в BG или в някой фриленс сайт.
    Ако е така – споделете къде е това чудо моля!!!

  28. Stranger Says:

    Само да добавя защо питам – аз лично трудно съм срещал заплати по 5к BGN нетни, а още по-трудно над тях. Става като заплати на трудови договори във фирми и това не са оферти след интервюта, а принципни позиции на фирмата докато те канят уж в опита си да те привлекат.

Leave a Reply