четвер, 30 липня 2015 р.

Міграція з науки/освіти в ІТ

Отже ти науковець чи просто викладач університету, що пов'язаний з комп'ютерами та програмуванням. Можливо тобі трапляються відчуття, що життя ніби проходить повз тебе. Ти даєш знання і путівку в життя молодим людям - студентам, але твоя власна кар'єра, здається, знаходиться у глибокій стагнації. Ти в кінці робочого дня розумієш, що нічого не зробив, а бігав по кабінетам, підписував папірці, писав нікому непотрібні звіти. Підписував і перепідписував їх кланяючись кожному бюрократу, що заплив салом і створює видимість роботи. Ти пишеш статті, витрачаєш на них купу зусиль, а тоді платиш за кожну опубліковану сторінку твоєї статті. Тоді вона виходить у якому не будь віснику, але ніхто її не читає. Ти шукаєш теми для досліджень, гарячково переглядаючи чужі статті, і не розумієш за що взятися. Що може принести бодай якусь користь тобі і іншим? Наукові дослідження для замовника з фінансуванням та реальними проблемами - недосяжна розкіш. Ти виступаєш на конференціях, де тебе слухає купка студентів і аспірантів, що їх примусово загнали до зали. Міжнародна наука - недосяжна мрія. Ти навчаєш студентів працюючи на півтори ставки. Вони після твоїх занять ідуть працювати на півдня, але заробляють більше від тебе і переважно вважають, що марнують час на твоїх заняттях. Хай йому абищо! Щось тут дуже сильно не так. Що там казати, навіть за кордоном освіта і наука майже повністю відірвана від реальної індустрії програмного забезпечення, а українська, вибачте, взагалі пародія. Є люди, які цього не помічають, або через це не переймаються. Це просто чудово! Хтось же має виписувати корочки і давати бодай якийсь фундамент студентам. Але якщо тобі це не байдуже, можна подумати про міграцію в ІТ. Як людина, що пройшла цей шлях, ось що я гадаю тобі слід знати про нього:

Міграція буде дуже болісною. З двох причин. По-перше, як уже згадував, наука і освіта відірвані від індустрії, тому формально ти без жодного досвіду. Для кадровика, якщо твоя наукова діяльність не збігається з предметкою компанії, ти ніхто. Навіть менше ніж ніхто. Тому що, як недивно, на приймаючій стороні компанії люди ніби "бояться" мігрантів з науки. Адже після власних універів вони добре засвоїли собі, що то люди непрактичні, часто занадто високої про себе думки і забагато знають для тієї роботи, що необхідно виконувати. Тобто по-друге тебе майже скрізь визнаватимуть overqualified. Практично це спричинить ситуацію, коли на майже на всі твої розсилання резюме відповіддю буде гробове мовчання телефону. Тут лише можу порадити почитати на моєму блозі способи/стратегії потрапляння в ІТ (http://alexnechay.blogspot.com/2015/07/blog-post_26.html).

Вдалося потрапити в ІТ? Повернення в назад в науку малоймовірне. Я коли мігрував, подумував попрацювати років три в індустрії, а потім повернутися в академію з новими силами і оновленим світоглядом. Однак світогляд оновлюється так, що ти раптом усвідомлюєш яка прірва між наукою і індустрією і, куди правду діти, наскільки по цей бік прірви комфортніше: достойна заробітна платня, закордонні подорожі, медичні страховки,спілкування з розумними і амбітними людьми. А головне - відчуття, що своїми талантом і здібностями ти приносиш користь людям і за це отримуєш достойну винагороду. Дуже важко після цього повернутися в злидні, постійну непевність і невизначеність. Тож якщо ти хочеш стати колись поважним професором, або дослідження є для тебе сенсом життя - краще пошукай виходи на міжнародну науку і не рипайся в ІТ.

Хоча повернення в науку малоймовірне, педагогіка для тебе не буде втраченою. ІТ галузь - це безперервний потік знань і інформації. Навчати когось і вивчати щось самому потрібно увесь час. Тебе це приваблювало в науці, в ІТ цього навіть більше. Тобі потрібно буде писати код так, щоб його міг зрозуміти інший. Компанії завжди дуже тішаться, коли хтось влаштовує knowledge sharing сесії і готові таку людину всіляко підтримувати. Компанії також дуже раді, якщо ти береш участь у зовнішніх форумах, адже це для неї певний ПР. Я роблю усі ці речі. Крім того щороку проводжу кількатижневі курси з APL - мови програмування, що у нас її використовують.

Ти втратиш свободу і спершу почуватимешся немов у в'язниці. Адже ти звик, що прив'язаний лише до розкладу своїх занять, а решту часу ти сам вирішуєш що і як тобі робити, де знаходитись. Ти звик придумувати навчальні програми, спілкуватися з людьми і загалом вести творче життя. В ІТ ти не вирішуватимеш нічого цього, як мінімум в траншеях, в яких ти почнеш свій шлях. У них тобі вкажуть ось тут сиди і пиши ось це і це, ось так і так. І так триватиме 8 годин щодня. Ти і комп'ютер. Майже ніякої свободи творчості. Виття вовком гарантоване. Але ти відкриєш для себе вечори, вихідні і відпустки. Можна спокійно відпочивати, а не думати про наступну статтю чи готуватися до чергової лекції. Ці дні і години належатимуть тобі і твоїй родині, а належно приправлені доларом вони набудуть абсолютно нових кольорів. З часом, якщо навчишся фокусуватися на поставлених завданнях і програмування загалом тобі подобається - звикнеш. Адже звикають в'язні до в'язниць))).

Робота в ІТ часом буває цікавою, і навіть дуже цікавою. Але це не наукові дослідження. Це переважно рутина, особливо в нашій країні, куди на аутсорс дають не самі цікаві проекти. Я багато разів себе ловив на тому, що я з досадою ляскаю долонею по столу і вигукую: "Блін, та це ж робота рівня хлопчиків що 2 роки в ПТУ провчилися, а я ж к.т.н!". Але who cares? The work needs to be done. Тож будь готовий стиснути зуби і уявляти, що ця рутина - найпривабливіша у світі робота. Якщо цю мантру приправити усвідомленням того, що є реальні люди кому це потрібно і вони готові за це платити, то можна досягти успіху.

Отже міграція з комп'ютерної науки в ІТ потрібна, якщо відчуваєш дискомфорт і хронічну невдоволеність станом речей в науці. Міграція можлива, але і вельми складна і треба застосовувати стратегії потрапляння в ІТ. Потрапивши в ІТ ти спочатку почуватимешся як у в'язниці з купою нудної роботи, але з часом звикнеш і будеш насолоджуватися перевагами ІТ, педагогічною діяльністю в ІТ і не захочеш повертатися назад.

неділю, 26 липня 2015 р.

Як потрапити в ІТ?

Перед тим як потрапляти в ІТ, гарно подумайте чи воно вам справді потрібне. Це важка, інтелектуально виснажлива робота, часто нудна, часто стресова, яка знищує ваше здоров'я. У ній ти постійно ідіот, який нічого не знає, ти мусиш постійно вчитися аби хоч якось триматися на плаву. А програмісти за 40 взагалі зникають, є теорія що їх сплавляють по Дніпру :-)). Але якщо вам подобається писати код і вчитися, Господи, вам сюди, тут класно, затишно і грошовито:-). Я потрапляв в ІТ двічі, тому що робив перерву на викладання і наукову роботу. Зараз, напевно, буду потрапляти втретє, бо ІТ вийшло у мене з-під ніг, я трохи забагато провів часу на десктопі, який раптом став не актуальним. Ось способи потрапляння в ІТ, які я виділив із власного досвіду і досвіду моїх знайомих.

Некро-технології. Це, напевно, найпростіший спосіб потрапити до ІТ і доволі дієвий. Майже нічого не треба робити, але треба мати технічну освіту і якийсь мінімальний досвід, типу щось для диплому писав. Суть способу полягає  у пошуку компаній які застрягли у минулому і мають старезний код і технології, часто доморощені, від яких вперто не хочуть відмовлятися. Наприклад, трапляються такі, що сидять на Lisp, COBOL, APL, Gupta, Delphi, PowerBuilder. Я реально на кожну бачив вакансії.  Це можуть бути також компанії, які чомусь вирішили використовувати щось екзотичне, типу Erlang. Цей спосіб, я знаю точно, працює, тому, що я сам ним скоритався щоб потрапити до міжнародного вендора програмного забезпечення SimCorp, який активно використовує екзотичну мову програмування APL і купу жахливих доморощених технологій. Жоден успішний амбіційний девелопер не погодиться на цьому працювати, тому я просто з універу, погодившись працювати з "некро-технологіями" отримав чудову зарплату, закордонні відрядження, мед страховку і тому подібні няшки. Спосіб вкрай небезпечний - можна обрости мохом, почати пахнути нафталіном і на цьому і закінчити кар'єру. Необхідно постійно навчатися паралельно. Я зараз опанував C# і частину робочого часу отримую релевантний досвід виконуючи .NET проекти.

Блискучі знання з предметної галузі в якій активно використовують ПЗ. Наприклад, фінанси, комп'ютерна лінгвістика, обробка і аналіз величезних масивів даних, електроніка, телекомунікації. Якщо компанія спеціалізується на доволі складній предметній галузі і ім критично найняти програміста із гарними скілами в цій предметній галузі, вміння програмувати буде достатньо щоб отримати роботу. Наприклад я працюю у компанії що має фінансову експертизу. До деяких відділів можна потрапити саме тому що людина має дуже добрі фінансові знання. А фінансова галузь ще не сама складна. Я сам цей шлях не проходив, але я бачив надто багато людей що зовсім не вміють програмувати, але вони стають в моїй компанії навіть сіньйорами і чіфами, тому що для бізнесу їх уміння фінансові набагато цінніші ніж уміння писати код.

Знайомства. Звучить дещо пошло, я знаю, культурно це звучить типу references. Якщо у вас є знайомі, що працюють в ІТ компаніях, а особливо що впливають на прийняття рішень там - бінго! Цей спосіб може бути як дуже дієвий так і зовсім безглуздий. Можна сказати це навіть напівспосіб, тому що якщо у вас немає необхідних навичок вас ніхто не візьме на роботу. Але якщо навички все ж таки є, то серед купи народу з такими ж навичками, візьмуть саме вас. Тому знайомства дуже і дуже важливі. Як на початку кар'єри, так в її середині, а особливо вкінці. Я сам навіть пишу цей блог а потім виступатиму з цим перед аудиторію саме з такою метою: познайомитися і бути знайомим. Маю я і особистий досвід користування цим способом. Перший раз я потрапив до ІТ ще будучи студентом. Мій добрий приятель помітивши як мої очі блищать на заняттях з цифрової техніки і мікропроцесорів (Женя Бабін, привіт!:-)) запропонував зайнятися з ним веб програмування, яким він і багато інших студентів у ті часи (двотисячні ) активно промишляли. Також я маю досвід рекомендування людей. Двох рекомендував і обох не взяли. Не було потрібного скіла, не було потужного прагнення у людей, тому і не спрацювали мої поради їх найняти. До речі, походи на курси у компанії, має цінність саме з точки зору заведення знайомства з компанією, її потребами і працівниками. Ці знайомства можуть спрацювати.

Масове розсилання резюме. Цей спосіб класичний, про нього не потрібно розповідати, його знають і використовують усі. Ефективність цього способу однак, не підсиленого комбінуванням з іншими способами, близька до нуля. Ти шлеш і шлеш резюме, а потім чекаєш і чекаєш і чекаєш... І нічого не відбувається. Починаєш писати в резюме те, чого нема, тоді який не будь відчайдушний HR тебе запрошує на співбесіду, яку провалюєш з лунким тріском. Знайомо? Народ, хоча б резюме подбайте вилизати. Я проводив курси у своїй компанії для зовнішніх і мав насолоду дивитися на резюме що їх присилали щоб на курси потрапити. Господи, що я тільки там не бачив. Інколи живіт тріщав від реготу. Колись цей спосіб з розсиланням резюме був супер швидкий і ефективний. Програмістів було потрібно відчайдушно багато. Брали усе що могло if та for написати і пояснити різницю. Ці часи минули, нажаль. Сьогодні розіславши в купу місць резюме із меседжом "я класний, гарно вчився, і можу робити все на будь якій технології" отримаєте зловісно мовчазний телефон.

Стати відомим. Цікавий спосіб потрапити в ІТ чи не так? Але не такий уже й важкий як це було 10 років тому. Погляньте, скільки можливостей є у наших руках, які майже нічого не коштують: ведення свого блогу, відкриття свого YouTube каналу, написання статей на DOU, запис своїх подкастів, написання і інтернет-публікування своїх книжок. Бери - і роби, лише потрібен час. Звісно, ви для цього маєте бути не безробітнім чоловіком із жінкою та дітьми на голові. Але якщо ви студент або працюєте ще не в ІТ, цей спосіб можна застосувати. Я не можу, однак, сказати що цей спосіб дієвий, я сам його не використовував. Але зараз я дію саме за ним, цей спосіб є моєю кар'єрою стратегією сьогодні. Мені страшенно набридло ходити на співбесіди і відповідати на запитання типу скільки яєць можна кинути з якого поверху, як швидко множаться бактерії, скільки разів треба човном котів перевозити на інший берег, чи якусь іншу дурню. Я хочу щоб мені самі дзвонили і пропонували роботу ті, кому потрібні мої послуги. Для цього потрібно щоб про мене знали і знали як фахівця з чогось, тобто треба спеціалізуватися і колупати цю спеціалізацію роками. Але це уже інша тема.

Власний бізнес. Для таких людей як я ідея створення власного бізнесу негайно напрягає. У мене ж нема підприємницької жилки, я не хочу усіх цих клопотів із податковими, бухгалтерією, пошуком клієнтів. Але чим цікаве ІТ, що можна створити свій бізнес без усіх клопотів. Але по порядку. Суть способу полягає у створенні власного бізнесу, який розроблятиме програмний продукт. І зовсім не обов'язково когось наймати чи отримувати прибуток. Без найму і прибутку немає необхідності офіційно реєструватися, і займатися тяганиною з податковою та бухгалтерією. Обов'язково обрати популярну актуальну технологію і використовуючи її робити продукт, дуже класно якщо хтось ним ще й користувався б безкоштовно. Це могло б зорієнтувати які саме фічі потрібні. Це було б суперово, але не обов'язково. Але що ж це за бізнес такий, який не приносить доходу, або приносить мізер? Який зиск? А зиск у тому що через рік-два можна буде написати в резюме: ASP.NET, C#, Angular, JavaScript - досвід 2 роки, компанія така-то, продукт, що робив ось тут можна подивитися і код, що я пишу і його якість можна зацінити ось у цьому репозиторії GitHub. Та це ж уже звучить солідно, правда? А якщо є бодай один клієнт - то взагалі круть. Множимо це на знайомого, що принесе це резюме в руки керівництва і маємо першого реального клієнта/роботодавця з баблом. І тепер ми по справжньому в ІТ. Гадаю, ні в кого не викликає сумніву той факт, що це дуже дієвий спосіб, але й дуже важкий, вимагає багато праці і самовіддачі. Не підходить безробітній людині без засобів до існування. Мій приятель, Женя Бабін, що я з ним починав свою кар'єру, потрапляв в ІТ саме цим способом. Він типу створив компанію, знаходив в інтернеті клієнтів і спочатку пропонував їм виконати роботу за мізер, можливо були і безкоштовні випадки. Це не важливо. Важливо що на момент випуску з університету у нього було 5 років досвіду і купа виконаних проектів. Навіть досвід управління мною і іншими хто йому допомагав. Якби він захотів, він міг би отримати будь-яку роботу в Києві з веб програмування. Але він не захотів, бо його власний бізнес уже забезпечував усі його потреби.

Висновок. Потрапляти в ІТ краще тоді коли справді це подобається, тому, що ця галузь далеко не проста і виснажлива. Але якщо це подобається, то ІТ може бути дуже вдячним. Потрапити у галузь колись було дуже легко, а сьогодні дуже складно, але є, відповідно важкі, але дієві способи туди потрапити. Важка праця, світлий розум і гарні стосунки з іншими ІТ фахівцями врешті-решт приведуть вас до комфортного робочого місця, достойної зарплати і цікавої роботи. Щасти!

четвер, 23 липня 2015 р.

Чи потрібна вища освіта програмісту?

Ця публікація є реакцією на інтерв'ю із Сашею Шевчуком (http://itvdn.com/ru/channel/video/pps-good) про те, навіщо програмеру вища освіта. Саша за своєю манерою такий категоричний у тому, що вища освіта абсолютно необхідна. Я після універу уже майже 4 роки сиджу у реальних траншеях і... от нутром відчуваю, що насправді зовсім ні, не потрібна. Правда, я хотів би сказати що потрібна, і що усім слід сумлінно навчатися в університетах, отримувати гарні оцінки, тішити своїх професорів, і навіть писати круті дисертації. Але не можу, тому що сам озираючись у своє минуле, ніяк не второпаю нащо я добивався усіх своїх золотих медалей, червоних дипломів і наукових ступенів. У траншеях (ні, я не в АТО, це так називають реальну брудну програмерську роботу) ці знання майже не потрібні, а якихось вмінь наша освіта давати не може. 

ІТ - це передова галузь і у ній дуже помітні нові тенденції. А тенденція сьогодні така, що знання мають мізерну цінність. Майже нікого не цікавить що ти знаєш, тому що будь яку інформацію можна майже миттєво нагуглити. Вона лежить на поверхні. Цінністю сьогодні є уміння. Не те щоб раніше уміння не були потрібні, просто знаючі люди могли просто на своїх знаннях заробляти на життя. Кожен, хто намагався бодай раз програмером влаштуватися підтвердить, що якщо ти не маєш досвіду, тобто скіла, то хоч доктор наук - ти не цікавий, бо ти не можеш принести компанії нічого цінного. А тому тепер студенти першочерговим своїм завданням мають ставити отримання досвіду а не гарної оцінки, чисто з таких прагматичних міркувань.

Ну ок, можна заперечити, що мовляв все одно має бути фундамент спочатку. Так, згоден. Але принаймні наші університети дати його не можуть. Думаю закордонні теж. І не тому що погані чи не надто розумні. Ні. Просто наша галузь надто молода і ніхто толком не знає що є фундаментом у ній. А тому, наприклад вчать, основам програмування на С++. Це фундамент? Правда? А студент вийде і муситиме писати на JavaScript і як прототипним наслідуванням чи замиканнями він не вмітиме. Який же це тоді фундамент. Далі ООП на C#, де казатимуть що private - це інкапсуляція і це має якийсь стосунок до ООП. А на роботі - Ruby, і уся освоєна об'єктна модель - коту під хвіст.

На заняттях з проектування вчитимуть UML до запаморочення в усіх деталях. Хоча до проектування він має стільки ж стосунку скільки будь яка інша мова програмування, просто UML - графічна мова от і все. А на робочому місці - студент не знайде UML. А якщо і знайде - то неправильний і усі його знання - коту під хвіст. А ще вчитимуть патерни, більшість з яких просто хакають систему типів статично типізованих мов, а частина їх уже вбудовані в самі мови програмування і платформи (С# events - observer, lambda expressions - strategy).
Інші предмети і згадувати страшно, знання їх взагалі ніяк не допоможе ні в чому (фізика, 90% дискретки і вишки, соціологія, релігія, філософія, археологія...).

Гаразд, є фундаментальні теми, Саша їх згадує. Кінцеві автомати. граматики, графи, дерева. Але ці усі теми потрібні виключно для розробників мов програмування і операційних систем. Багато з нас цим займаються? Ті хто хотять, або відчувають у цьому потребу на проекті - йдемо на Coursera і проходимо курси з компіляторів, структур даних і алгоритмів. Я проходив. Пререквізити - шкільна освіта. Це абсолютно все що потрібно в найекзотичніших проектах.

На мою думку за відсутності фундаментальних знань в сфері інженерії програм (не комп'ютерні науки! це як електроніка і фізика) в університетах майже нічого навчитися не можна крім комп'ютерних наук, які програмному інженеру тільки інколи трохи релевантні. А тому навчання там - марнування часу. Фундамент можна отримати тільки шляхом узагальнення практичних знань після того як побачив десятки мов програмування, парадигм, платформ і фреймворків. Онлайн курси дадуть необхідну стартову базу.


John Sonmez (http://simpleprogrammer.com/) рекомендує починати кожному свій бізнес, робити продукт і отримувати в процесі досвід. Так, студент скоріш за все того продукту не продасть, і доходу не матиме, але так само студент не матиме доходу від вищої освіти. Але від цього маленького софтверного бізнесу буде досвід і запис в резюме, що так необхідні для отримання першої роботи. 

P.S. Дорогий читачу, якщо ти студент, це не означає що слід негайно покинути університет. У кожного свій шлях. Я, наприклад, коли навчався більшість часу займався веб програмування а на навчання так би мовити "підзабивав". Все ця "корочка"... І все ж таки аналоги універських курсів по спеціальності варто пройти на Coursera. Хоча б тому що це страшенно цікаво. ))