Jun 08 2009

Несправедливостите по Програмисткия свят

Category: Нонсенс,СоциалниLucho @ 23:51

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

Don’t waste your time on jealousy. Sometimes you’re ahead, sometimes you’re behind. The race is long, and in the end it’s only with yourself.

С всяка клетка от съществото си (днес е денят на клишираните изрази) вярвам, че това твърдение, този цитат е абсолютно верен. Напълно го осъзнавам, но продължавам вътрешно да завиждам – завист породена, не от това че някой има повече от мен или знае повече от мен, а от това че някой който знае по-малко от мен или с нищо не ме превъзхожда получава повече. Тъй като тази завист май май повече ми вреди от колкото ми е помогнала (освен да ме амбицира от време на време, което не е малко, де), всячески се опитвам да я потисна и всячески не успявам, а и как да успея?! Вярвам в равенството, в справедливостта, но понякога всички тези убеждения биват брутално опровергавани и това ме вбесява.

Деф. 1 (дефиниция на Стефан за добрия програмист)
Всяко съществуване, което се изявява в спане, ядене (казва се “хранене”) и кодене се нарича Програмистка форма на живот.

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

Аз лично съм разширил тази дефиниция по следния начин:

Деф. 2 (дефиниция на Лъчо)
Всяко съществуване, което се изявява в спане, хранене, занимаване с разни други неща от време на време и кодене се нарича Програмистка форма на живот.

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

Деф. 3 (дефиницаия на нисша форма на Програмистки живот)

Всяка форма на живот, която не се покрива от дефиниця 1 или дефиниция 2, но се числи към IT бранша се нарича нисша форма на Програмистки живот.

Например тестъри или некадърни дивелъпъри…

Та представете си следната картинка – двама души, единият сте вие – човек, който води своето битие по дефиниция 1 или 2 и друг, който не го прави – дефиниция 3. Сега си представете, че вторият взима по-висока заплата от вас или пък че получава по-добри отзиви за работата си (противоречиво, но възможно), макар и да я е свършил супер зле, но това няма как да се види от шефовете естествено. Представете си, че втория получава повишение, а вие – не, или даже че ви става шеф. Незнам кой би се примирил с подобна несправедливост или би се направил на скромен и би го преглътнал… аз немога. Лошото, е че немога да преглътна и по-леки несправедливости.

Немога да преглътна, когато съм се готвил една камара време за даден изпит и някой отиде и препише и накрая аз имам 4, а той 6.
Немога да преглътна, когато някой който неможе да напише името си без 3 правописни грешки, получи по-добра оценка от мен.
Немога да преглътна, когато някой представи проект, който очевидно не е писан от него, но е 10-12 пъти по-дълъг от на всички останали и получи потупване по рамото и овации.
Немога да преглътна, когато по-нисшестоящи форми на Програмистки живот, като например тестери или лелки които седят по-цял ден на бюро и нищо неправят (HR) и други получават заплата близка до моята (опазил ме бог да е по-висока).
Немога да преглътна, когато някой “мениджър” или “шеф” (това трябва да са много големи кавички), реши че на всеки програмист, трябва да се падат по 1.8 тестера, 1.3 HR-а, 2.4 аналисти и още една камара баластни нисши форми на Програмистки живот.
Немога да преглътна, когато по-нисшестоящи форми на Програмистки живот, ги пращат в командировка по няколко пъти годишно без видима причина, а аз се боря с бъгове или технически проблеми.

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

Не ме разбирайте погрешно, тестъри (наричани още QA), HR и останалото ИТ излишество са нужни – да, няма спор, но в други количествени пропорции и би трябвало да им се обръща доста по-малко внимание, имайки предвид, че програмистите създаваме нещото, от което фирмата печели. Програмистите и архитектите са тези, които реално правят баницата. Другите я опитват, за да проверят дали сиренето е достатъчно или я продават/договарят с някой клиент. Някой даже и това неправят, бтв.

Нехайството към тези, които правят баницата рано или късно ще бъде наказано, разбира се, може само да се надяваме, че ще е рано. Също и тези, които са се забили на дадено ниво и нямат желание да просперират рано или късно ще ядат калая, защото бранша и технологиите не са статични като тях, просто. Точно за това малките фирми са “good”, а големите “evil”. Малка фирма с 10-20 програмиста означава, че се внимава, кой се наема. Също така в нея не си малко зъбно колелце, без което машината ще продължи да работи – там ти си някой и съществуването ти е важно за абсолютно всеки в нея. В големите компании ти си никой, никой не знае за теб, има една камара административни глупости, с които те занимават. Освен това 80% от хората са некадърни, защото по някое време се е наемало на килограм, повечето са без мотивация или са “скатавки”, което е несправедливо спрямо останалите 20%. Процента на нисша форма на Програмистки живот е по-голям от колкото трябва и още един куп неща, които обричат всички процеси в компанията на неефективност. За съжаление това работи, работи защото се ползва масово и с успех, но както в природата, така и в IT индустрията има еволюционни модели и това означава, че след време всичко неефективно ще е умряло… след доста време за съжаление, така че ни остава само да чакаме и да наблюдаваме.

Ето заради подобни “ниски страсти” се ядосвам и завиждам и ако някой смее да ме осъди, нека го направи. Така само ще покаже овчедушието си или нечовешката си търпеливост към случващите се глупости в тоя свят. Да – ще продължа да не се примирявам и да опитвам да направя света малко по-справедлив. Не – няма да има полза от това, но се надявам, че както има приливи и отливи, така и кармата ще раздаде справедливост и ще “накаже” тези, които заслужават.

До тогава гледайте “Мойто име е Ърл” и не се примирявайте с нищо, което не е справедливо!


May 05 2009

The King of Quines

Category: DevLucho @ 18:44

Quine не е миспелнато Queen, а програма, която извежда сама себе си и се надявам не само мен ме freak out-ва това. Все едно някой андройд да разбере, че не е човек, а машина. Почти толкова тъжно е както когато малкото роботче в AI на Спилбърг отчаяно искаше да намери феята, за да го превърне в истинско момче и майка му да го обича… драма драма.

За типичния Quine е удобно да се ползва printf-оподобни функции, които да имат еднакъв форматиращ низ и аргумент за форматирането. По този начин се получава нещо като вложено построяване на низа за печатане. Друг подход е функционалния, който е представен по-надолу (Javascript частта).

Предполагам, че все още на никой нищо не му е ясно и тъй като не мога да направя по-дълго отрицание от това, ето няколко варианта написани на някои от скриптовите езици, с които съм имал вземане-даване (популярните езици изискващи компилация имат твърде дълги Quine-ита).


Python

_='_=%r;print(_%%_)';print(_%_)

Какво прави кода: записва в променливата _ форматиращия низ, като %r значи да се изведе repr на обекта (това ще изведе текстово представяне на обекта, ако обекта е низ ще изведе и единични кавички), а %% е escape-ване на %. После се извиква print, като се форматира низът от _ сам със себе си (%).

_=’_=%r;print(_%%_)’;print(_%_) -> _=‘_=%r;print(_%%_)’;print(_%_)


Ruby

_="_=%p;puts _%%_";puts _%_

Какво прави кода: прави същото, което и горния код, но тук вместо %r имаме %p, функцията за отпечатване се казва puts и нямаме нужда от скоби за извикването на функция (обичам Ruby).


PHP

<?php $f='<?php $f=%c%s%c; printf($f,39,$f,39); ?>'; printf($f,39,$f,39); ?>

Какво прави кода: да, познахте, кода прави същото, което и предните два, с тази разлика, че php изисква допълнителен незначещ crap, който да се зарови около кода (<?…), печатащата функция е printf, която има синтаксис сходен с printf от C, а за да оградим резултата в единични кавички се изписва ascii символ 39, което както се досещате е единична кавичка.


Javascript

( function (x) { return "(" + x + ")(" + x + ")"; } )( function (x) { return "(" + x + ")(" + x + ")"; } )

Какво прави кода: тук става вече по-интересно, защото кода не прави това, което предните 3 функции правеха. Записа много прилича на Quine на Scheme и да си призная една част от него е загадка за мен (например защо като подадем като параметър на функция друга функция, получения аргумент е записа/кода на подадената функция, а не обект с адрес. Може това да е представянето, незнам). Първо и двете анонимни функции са еднакви, като втората е аргумент на първата и при изпълнение ще се запише два пъти със скоби отляво и отдясно, което е и изходния запис. Скобите са нужни, за да окаже in-place изпълнение на първата анонимна функция и че втората анонимна функция е аргумент на първата. Може да пробвате този код като го напишете в адресната лента на browser-а си (тествано с FireFox):

javascript: ( function (x) { return “(” + x + “)(” + x + “)”; } )( function (x) { return “(” + x + “)(” + x + “)”; } )



Apr 26 2009

Coders Dos and Don’ts

Category: DevLucho @ 20:52

Нерядко се натъквам на много дразнещи писания и идеи и мисля, че е време да си излея мъката. Мразя заклеймяването на някого като “младши програмист” или “нууб”, но просто има граници, които не трябва да се прекрачват и неща, които трябва да се забранят със закон. Ще спомена няколко от тях, за които не се говори толкова много – няма да обеснявам, че трябва да се спазват конвенции или че не бива да имате празен кеч блок и подобни всеизвестни работи.

1. Булеви сравнения

if (bool_var == true) { …

За всеки здравомислещ човек е ясно, че този запис е абсолютно излишен и е достатъчно да се напише “if (bool_var) {…, останалите нездравомислещи хора ще се оправдаят, че така кода е по-четим – дрън дрън! Този запис не само че не е по-четим, ами е грозен, по-дълъг и в някои случай даже объркващ.

Следния код е още по-фрапантен:

if (bool_var == true)  {

return true;

} else {

return false;

}

Пет излишни реда за да се постигне ефекта от “return bool_var“. Ако някой седне да чете кода и види подобни писания вероятно първо ще се зачуди какво сте имали предвид, после ще реши, че сте абсолютни нубове, а и прочитането на 5 реда и разбирането им е по-трудно от колкото прочитането и разбирането на един (изключваме разни функционално ориентирани езици, където един ред може да достигне стотина символа).

2. One Language Warshipers

Един феномен, характерен за повечето започнали работа наскоро е издигането в култ на езика, на който пишат. Особено характерно е за Java и C# (.NET) дивелъпърите. И тея хора като почнат да се прехласват и да разправят колко е велик единствения език, който са виждали и направо ми иде да… напиша някой ред в блога ми за тях 🙂 . Та хора, всеки език има някакви предимства и собствен “чар” пред другите. Неможе да ми обяснявате колко е велик Java за web (за малък до среден клас сайт) понеже ми се е налагало да се боря с него и има много куци неща, които разни други езици и фремуъркове са преудоляли успешно. Това че във фирмата където работите ви карат да пишете на опредлен език, защото системата им вече работи по този начин и няма връщане назад, не значи че пишете на нещо, което си заслужава. И даже и езика и технологията, която ползвате да е много добра в дадена област, това не означава че може да отворите файл и да запишете един низ вътре на един ред например и че няма много по-елегантни и приятни езици.

Човек трябва да е опънмайндед и да иска да научи повече и повече, а не да се забие в първата срещната технология. Светът не се състои само от Java и C#, в него има и други езици C, C++, Objective C (за маковски работи), Python, Perl, Ruby, PHP (недейте моля) und so weiter (има още много наистина), част от които са по-бързи, други по елегантни за писане, трети просто по-лесни. Всеки един от тях изисква специфичен начин на мислене и предлага различни концепций и когато човек реши, че само един единствен му е достатъчен определено се осакатява професионално, при това много жестоко.

3. Разбираемо писане vs. Оптимално писане

Под разбираемо писане имам предвид структуриран код, в който поне автора се оправя и знае кое какво прави… това често не е най-оптималния, най-добрия от към пърформанс код. Добра практика е след написването на разбираемия код да го превърнете в оптимален, ако има нужда де. Лошата (ама много лошата) практика е да напишете така кода, че да е с висок пърформанс, но след две седмици като ви докладват бъг, да се чудите къде и какво да пипате или ако се наложи някой да пипа по кода, да не му отнеме месец докато разбере, че записвате GPS кординати в int като местите побитово за да запишете всеки градус, минута и секунда 😀 . Та за начало, нека всичко е написано разбираемо и по лесния начин и за всеки неразбираем ред най-добре да има коментар, пък после, живот и здраве, с моторната резачка и с разни грозни хакове, може да се докарат нещата до по-оптимален и грозен вариант (може би в 99% от случаите, този параграф изглежда странен, но ако пишете за J2ME или друга платформа с много ограничени ресурси, може да е доста полезен).


Apr 16 2009

To game or not to game :?

Category: СоциалниLucho @ 02:08

Днес гледах един интересен ТедТок. Темата беше дали видео игрите имат положителен ефект върху геймърите. Аз като виден неотдавнашен геймър си имам мое мнение, което не съвпада с повечето други.
Видео игрите са нещо полезно и прекаляването с тях, даже и пристрастяването са от полза. Ползата идва от там, че хората привикват да работят с компютъра, свикват с графични интерфейси и въобще да се оправят с нещата.
90% от хората, които не са играли на игри и не са били геймъри, нямат понятие от елементарни неща, като как да си видят IP адреса например. От друга страна 90% от заклетите геймъри са олигофрени, но това вече е друг въпрос.
Насилието и мейчър кънтента в игрите не е толкова страшно колкото го изкарват. Застрелял съм хиляди терористи и контри на CS и не мисля, че някога ми е хрумвало да взема една пушка и да застрелям десетина души в старото ми училище (не че не е имало поне десет, които са си заслужавали). Рейсинг симулаторите също са от полза, съдейки по себе си. Знам как да карам по-екстремно и за сега не съм умрял, имено защото знам, че в завой с голяма скорост се излиза с много газ и че има една идеална крива по която се взима успешно (иначе може и да не е толкова успешно :D). Естествено, това че си изминал хиляди мили зад монитора не те прави шофьор, но определено ти помага. Най-малкото като се качих за първи път на картинг, имаше доста общо с TrackMania например и определено карах все едно карам от отдавна.
Има и още нещо, което хората може би не забелязват. Игрите покачват адреналина, но и създават ендорфин и то в доста по-големи количества и това ги прави наркотик и имено за това хората се пристрастяват към тях, но това е времено… поне при мен беше. Един ден всичко, на което цъках ми беше омръзнало и сега от време на време, 2-3 пъти в годината, се случва да се заигравам за по седмица макс. Та споко заклети геймъри – това е временно положение, все някога ще се върнете към реалния живот – работа, учене, скука… и тогава ще си спомняте за якото време, което сте изкарвали пред компа, влагайки усилия и нерви в нещо напълно безсмислено, но поне забавно.


Apr 16 2009

Мъка, мъкаааа….

Category: НонсенсLucho @ 00:38

Предупредиха мe колко скапан може да е wordpress-a и май почнах да се убеждавам… Оказа се че не е чак толкова простичко да преведеш темата, която ползваш. След като преведох дифолта и нищо не стана потърсих в гугъл. Ок, разбрах как да си прекръстя файла, който държи превода, НО изненада – трябва да си изтегля някакъв ГНУ туул, с който да компилирам превода до някакъв машинен обект..WTF!?!?!

Още по-изненадващо е че тоя туул има порт за Windows, и като всичко GNU идва под формата на сорс без билд. Инструкцийте за компилиране са 200+ реда. В резултат на това ще се бутна под Убунту и ще си изгубя още сумати време.

Трябва да компилирам туула, който да компилира превода ми за да имам тема на български… гнусен парадокс 😐


Apr 15 2009

Hello World!

Category: НонсенсLucho @ 02:09

Ето че и аз най-накрая имам блог, в който ще пиша неща които никой няма да чете! Важното обаче е да не страня от тренда и да мога да пиша някъде нещата, за които се сещам. Мисля че това ще е един типично geek-blog с правописни грешки и разни криворазбрани концепции, с доста английски термини и глупости 🙂
Защо избрах dailyffs за домейн ли? Ами преди няколко месеца посетих dailywtf (com/net/org или нещо друго) и не че имаше някакви римаркъбъл статии, но домейна е просто покъртително як. Та така откраднах идеята… вероятно няма да е дейли, някой от нещата няма да са ffs, но ще се постарая.


« Previous Page