"Има ли смисъл да мислим за rails?"

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

Отговорът ми беше “За сега – не”. От седмица и нещо го превъртам през главата, и си мисля, че мога да допълня с “И вероятно – няма и да му дойде времето”. Макар че до момента за нашия venture да съм избирал rails, когато е възможно.

Причините ми за това мнение далеч не са технически. Ruby е чудесен, модерен език, с който пишеш по-малко и правиш повече. Rails е хубав framework, обществото около него е добро. По-скоро могат да бъдат “обобщени” с този слайд на DHH. Релсите не гонят mass appeal. Ако трябва да бъда честен, дори имам чувството, че части от от framework-а са нарочно мъгляво обяснени, та да прогонят по-малко упоритите.

Което означава ограничена аудитория от хора, които биха се занимавали с платформата. И още по-ограничена от хора с опит. А ако утре двамата ти релсаджии ги блъсне влак? Дори и да приемем, че един добър RoR разработчик работи за 10 PHP такива, факт е, че вероятно по-лесно ще намериш 10 PHP “маймуни”, отколкото rock-star RoR правяч. Нещо, което не би се понравило на класически shop, където точно тия хора би трябвало да са заменяем ресурс.

Всъщност, май не трябва да ме учудва факта, че продукт стартирал във фирма като 37signals е подходящ именно за… фирми като тях. Или поне такива, които се опитват да работят по подобен модел.

— Петьо Иванов · 20 ноември 2007, 17:52

Коментирай

  1. Fipo · 21 ноември 2007, 04:44 · #

    Привет Петьо

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

    ;)

  2. Стефан Кънев · 21 ноември 2007, 12:15 · #

    Е браво. Нека да избираме технологиите не по това колко са удобни и колко работа вършиш с тях, а по това колко “маймуни” ще намериш. Чудя се как въобще мръднахме от C++, начи :)

  3. Петьо · 21 ноември 2007, 13:18 · #

    Принципно – да си заменим или трудно заменим не е приятно и не е удобно на много хора. Освен ако не са сигурни, че твоите лични интереси съвпадат с тези на организацията.

    Стефане, че мръднали ли сме? java, c# – езици, специално правени да наследят C++ са в масова употреба. Доклкото знам, и самия C++ все още се бичи поголовно.

  4. Стефан Кънев · 21 ноември 2007, 20:52 · #

    Много добре знам проблема със заменимостта. Обаче той е проблем и с посредственост. Това което е незаменимо, са добрите програмисти, а не технологиите. Например, Java може да е най-използвания език на света, но ако имам теб като програмист, кое мислиш, че ще предпочета? Java или Python? Супер масов език, в който 90% от програмистите са идидоти или много по-малък, в който 10% от програмистите са идиоти. И с кое, според теб, ще ти е по-лесно да се справиш, без да ги знаеш?

    И от друга страна, PHP има навика да генерира незаменими хора, не Rails. Приложенията на rails обикновено са чисти и ясни. Може програмистите да са малко, но правят нещата по един и същи начин и всичко е сравнително очевидно. От друга страна, всички големи PHP-та които съм виждал са такива каши, че ще ми отнеме пет пъти повече време да навляза в тях, отколкото ако бяха на Rails (или Catalyst, Django, Turbogears).

  5. Петьо · 23 ноември 2007, 18:43 · #

    Добра мисъл относно това, че приложенията са чисти и ясни – просто има много и конкретни конвенции.

    Погледни от тази точка: Не за всяко нещо се изисква top notch хора, решения, технологии. Дори обратното. Има адски много ситуации, където има сумати тривиална работа да се свърши. Там не ти трябват добри програмисти, там ти трябват много програмисти. В такива моменти е просто безмислено да имаш rock star, щото просто той няма може да ползва потенциала си.

  6. Нубизус · 24 ноември 2007, 13:46 · #

    Абсолютно съм съгласен с Петьо.
    Да, не съм програмист, но ми се налага да работя с такива, и за човек който е посредника (.който винаги е..) за мен най-важно е как да запазя нещата работещи, което автоматично изключва релсите като опция. (Поради цитираните от П. причини).

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

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

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

    Руби и Релсите в моя поглед са за хора на друго ниво и не по-малко важно
    пазарна икономика на друго ниво и с други потребители.

  7. Стефан Кънев · 24 ноември 2007, 15:01 · #

    Добре, хора, правите ужасно много грешки наведнъж.

    Първо, да – програмиста не трябва да рекетира организацията. Не трябва може да плаши с напускане и прочее. Съгласен съм. Обаче…

    …това не зависи от технологията. Има два варианта, в които можеш да си безценен рекетьор – (1) кодът да е така написан, че никой да не може да направи нищо или (2) процесите в приложението ти да са ужасно сложни и само ти да си ги разбираш. И двата случая имат общ знаменател – ти знаеш нещо повече от другите и ще им е безумно скъпо да го научат. Ще им отнеме месеци да ти влязат в особенно странния код или да проумеят процесите, които ти си измислил и си им дал странни имена като “храносмилане”, “мелене”, “ядка” и “кестен”.

    Забелязахте ли какво казах? Рекетьор си, защото “знаеш нещо повече и другите не могат да го научат”. Преставаш да бъдеш ректьор, когато знаеш повече, но всеки може да научи това което знаеш. Обяснете ми, моля ви, в която категория падат релсите (или която и да е технология)? Рекетрьо ли си, понеже си написал нещата на rails, те са чисти, и на човек ще му отнеме два дена да научи Ruby + Rails (на мен ми отне една нощ, впрочем)? Или си ректьор, когато напишеш ужасен php сайт, на който на опитен PHP програмист ще му отнеме седмица + weekend да добие най-обща представа кое къде е?

    Виждам как един “мениджър” може да се излъже от колко примамливо е PHP-то. Не виждам защо програмисти могат.

    Второ, положението “има работа за много хора”, т.е. “трябват ти много програмисти”. Ще успеете ли да ми дадете пример, в който нуждата от много програмисти не е следствие от дървената технология? Java EE например? Там ви трябват много програмисти, защото технологията е ужасно сложна, с повторение и глупости. Мисля, че .NET е сходно. Сериозно, дайте им един пример, където ви трябват много програмисти и това да не е следствие от лошо подбрана технология. Което пък да е следствие, от решението на някой мениджър, че така “никой няма да рекетира проекта”, без тоя мениджър да се е замислил въобще.

    И трето, много добре разбирам, че има процеси в които има много grunt work. Например, доскоро работех покрай една система за следене на новини в реално време. Там имаш 10 000 сайта и всеки имаше собствен скрипт на специален език, който събираше нещата конкретно от него. Това е една задача, за която ти трябват много хора. Обаче, сериозно ли смятате, че задачата която rails решава е такава, за която ти трябват много хора? Понеже начина на разсъждение е [причина] “процес който иска много хора” => [следствие] “технология, която го позволява”. А това което виждам аз е, че първо избираме “технология, за която трябват много хора” (PHP) и след това заключаваме “нека да ползваме много хора”. Без въобще да ни интересува дали наистина имаме нужда от обем, най-нахално обръщаме причинността. Сериозно, замисляли ли сте се над това? Колко пъти ви се е налагало наистина да работите с много хора и колко пъти просто сте избирали такава технология без да има очевидна нужда и после сте я влачели?

    И още нещо:

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

    Точно така, добрия програмист не се мотивира само със заплата. Той се мотивира с качествена работа. Качественеа работа не значи непременно забавни проекти, lisp или rails. Качествена работа значи “добро ниво на професионализъм и без глупости”. Няма да мотивирате добър програмист, като му кажете че ще пише на PHP. Няма да мотивирате добър програмист, като му кажете, че ще работи с 10 “PHP маймуни”, които не просто не знаят кво значи “рекурсия”, ами като се опиташ да им го обясниш ще ти кажат “А, това е някаква глупост която си прочел в някакъв ‘як блог’”. Няма да се мотивират и когато мениджърите вместо да се опитват да изградят лоялност и тях се стараят да направят всичко възможно “да не бъдат рекетирани”. Ама никак.

  8. Петьо · 24 ноември 2007, 15:40 · #

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

    Не защитавам PHP и не казвам “не” на rails. Дори обратното.

    Технология сама по себе си не може да бъде лоша или добра. Може да бъде използвана по грешен или правилен начин, или некадърно. yahoo и facebook ползват PHP. myspace ползва asp.net.

    Да намериш добър програмист е трудно. Да го привлечеш – дважди. Да го задържиш и да го поддържаш мотивиран – още повече. Много мениджъри предпочитат да не го правят, именно защото е сложно. И разработват модел на работа, който не разчита на това. Можем ли да ги виним? Надали.

    Макар че се вдига шум около рейлс, колко програмисти на възраст над 20 нещо, които гледат семейство, биха заложили кариерата си на него, при положение, че няколкото фирми, където могат да работят, не могат да им предложат това, което могат да имат с java/.net ?

    В случая технологията не е на първо място. Никой не почва бизнес с идеята да прави “неща на php”, или “неща на .net”. Почва се от проблема, и се търсят начини за неговото решаване. Понякога единствения начин е brute force, голям екип. Друг е въпроса дали това е най-оптималното. И не, не винаги е следствие от дървена технология.

  9. Стефан Кънев · 24 ноември 2007, 16:19 · #

    Добре, според мен правиш една много голяма грешка. Смяташ, че некадърни хора могат да пишат софтуер. Нека да разясня.

    Първо, хора които не са добри програмисти просто не успяват да направят никакъв софтуер по сложен от 2000 реда код. Всичко комплексно, което мине през тяхните ръце, излиза като една голяма, лошо работеща каша, за която четем във Worse Than Failure. Квото и да си говорим, ако вземеш един “лош” или дори “посредствен” програмист, той не може да ти свърши работа сам. Убеден съм, че всички смятаме така.

    Обаче си говорим за големи екипи от такива хора. Идеята ни е, “една маймуна няма да ни свърши работа, дай ще съберем много на едно място”. Евентуално ще напишат Шекспир, нали? Едва ли. Просто няма никаква логика това да събереш голямо количество некъдърници и те да направят нещо качествено. Програмистките екипи не са холистична структура. Когато сложиш 10 добри пограмиста в една стая, получаваш цяло, което е по-малко от сбора на частите му. Ако събереш 10 лоши програмисти, става същото. Няма логика това да работи, нали? Щом дори умни хора имат проблем да работят заедно, какво остава за лоши програмисти?

    Обаче някак си големите екипи успяват да издърпат цялата работа. Има редица големи екипи, в които има много маймуни и все пак та успяват да произведат нещо. Как става това?

    Простичко. С умните хора ,които в тази голяма йерархия наричате team leader-и, lead developer-и, че и понякога архитекти. Те са единственото, което кара голям екип от лоши програмисти да работи. Ако нямаш такива хора в тоя голям екип, просто той няма да произведе нищо.

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

    И виж какво излиза от тази гадна ситуация – (1) ситуация в която тези хора заедно с целия си екип произвеждат далеч по-малко отколкото са способни и (2) използват изкуствено сложни (Java EE) или изкуствено прости (PHP) технологии, които допълнително спъват работата им. Въобще, готини и умни хора, които си вършат работата добре го духат, докато посредствените “програмисти” прибират по хиляда лева в джоба си.

    И в името на какво? Че това е по-изгодно за мениджърите? По-изгодно им е ако са идиоти и не могат да мислят. Просто направи сметката. От една срана незаменими хора дори в големия екип – тръгнат ли си те става проблем. Не са една или две големите компании които яко са потъвали, от това че тримата най-добри програмисти са си тръгнали. Убеден съм че имаш повече примери от мен.

    И от друга, ще си говорим за пари – мениджъра дава много повече пари за много по-малко работа в този модел. Освен, че трябва да плаща за десете човека на всеки добър програмист, той трябва и да приема че добрия програмист ще работи далеч под нивото си. В името на какво? Сигурност? Пестене на пари? Не мисля, че става нито едон от двете.

    И защо си мислиш, че хората над 20 и нещо дето гледат семейство, не могат да правят такива маневри? Може би трябва да ти напомня, че има не един добри програмисти , които са над 20 и нещо и имат семейство и ако им кажеш, че не е време за rails, python или други “модерни” неща яко ще ти се изсмеят в лицето.

    В случая технологията не е на първо място. Никой не почва бизнес с идеята да прави “неща на php”, или “неща на .net”. Почва се от проблема, и се търсят начини за неговото решаване.

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

  10. Петьо · 26 ноември 2007, 14:14 · #

    Стефане, ей тая статия може би ще хвърли малко светлина:
    http://www.codinghorror.com/blog/archives/001002.html

    помисли за 80%те процента.

  11. Радослав · 29 ноември 2007, 10:30 · #

    Здраво 3atWork,

    Като страничен наблюдател из тез дебри мога да споделя, че в крайна сметка всичко се определя от целите на даден проект. Успоредното развитие и доверие, а казано с една проста дума – Вяра…е универсален ключ към изграждането на каквото и да било. Аз разбирам от програмиране, почти колкото индианец от пишеща машина, но когато нещата опират до перспективи, пишещата машина я заменям с лулата. Сецвам няколко пъти и продължавам да правя онуй дето ме радва.

  12. Стефан Кънев · 1 декември 2007, 04:57 · #

    Или пък друга статия?
    http://weblog.raganwald.com/2007/11/i-think-it-funny-that-aspects-were.html

Помощ за Textile