Викладання IT в 90-х, програмування в нічну зміну на фабриці, офер від Microsoft у 2007. Історія розробника з 20-річним досвідом
Олександр Головатий в ІТ більше як 20 років. Програмувати вчився сам у
У першій частині інтерв’ю для DOU Олександр розповів про те, як опановував програмування, викладав інформатику в інституті наприкінці
2013 рік. Приїхав у Жовті Води, читаю лекцію у своєму інституті
Вивчення IT в 90-х: «Книжок з програмування у нас не було, читали абсолютно все, що могли знайти»
Після школи я не планував бути програмістом, та й узагалі не дуже розумів, ким хочу бути, чого прагну. Тому йшов вчитися абикуди. Вступив на факультет економічної кібернетики в інститут підприємництва «Стратегія» (це єдиний інститут, який був у нашому містечку Жовті Води). То був 1992 рік.
По суті, програмування мене ніколи ніхто не вчив. В інституті нам розповіли основи мови Basic, щось трохи про С (був один викладач, який вчив колись С, але нічого цією мовою не писав) — і все. Та у нас було багато вільного часу і доступ до комп’ютерів в інституті. Це були ще машини ЄС ЕОМ, аналоги найперших IBM PC, з
Ближче до закінчення інституту мені потрапила до рук книга з асемблера, в ній були машинні інструкції та багато нової інформації. Тоді я дізнався про такі інструменти, як дизасемблери, почав користуватися дебагером. Міг запустити елементарну програму, як-от Norton Commander, і покроково подивитися, як виконується певна операція. Далі її можна було перевести в асемблер, щось змінити, скомпілювати назад, і виходила власна версія того ж Norton Commander або чогось іншого. Це суттєво розширило можливості, щоб опанувати програмування.
У той час, коли я закінчував інститут, програмісти не спеціалізувалися на певних напрямах чи технологіях. Якщо у тебе був персональний комп’ютер, ти міг знати про нього абсолютно все: як працює кожна частина хардверу, операційна система, будь-яка програма, алгоритми тощо, тому що у комп’ютера пам’яті мало, слабкий процесор, можливості були дуже обмежені. Тож кожен програміст міг робити усе.
У
Я закінчив навчання, та усе ще не знав, що хочу далі робити. В інституті мені запропонували залишитися на кафедрі, викладати дисципліни, пов’язані з комп’ютерами. Тоді це були «Основи інформатики» та «Основи програмування». Я взяв типову програму, подивився, що треба викладати. Моїх знань вистачало. Тому погодився і з 1997 року почав працювати в інституті.
Робота у вищій освіті: «Нам показували програми, та вони не відповідали тому, що викладали насправді»
З часом в інституті з’явилася ідея створити нову кафедру — програмного забезпечення автоматизованих систем. Кілька років ми готували документи для цієї спеціальності. Я брав участь у проєкті та мав змогу подивитися, як працює українська освіта. Принаймні у той час.
Ми їздили в Дніпро і Київ у виші, в яких вже була спеціальність «Програмне забезпечення автоматизованих систем». Просили показати нам типові програми, за якими вони працюють. Тоді з’ясувалося, що майже у половині випадків програм взагалі немає. Тобто вони десь були чи мали бути, але продемонструвати їх не могли. Іноді нам показували програми, та вони не відповідали тому, що викладали насправді. Ми питали: «Тут у вас є пункт „логічне програмування“. Скажіть, будь ласка, що саме ви вивчаєте?». Адже логічне програмування — це, наприклад, мова Prolog, а я ніколи не чув, щоб в Україні десь її викладали. Нам на це казали: «Та ми не знаємо... Даємо лабораторні з паскаля, та й усе».
Ми написали листа в Міністерство освіти, пояснили, що не можемо знайти типових програм для нової спеціальності. Нам порадили написати приблизні програми й надіслати їм, а вони вже переглянуть і відреагують на це.
Поки ми готували документи, мені довелося розібратися з тим, що таке алгоритми, структури даних, системне програмування, функціональне, логічне... Ми написали програми з усіх дисциплін і надіслали їх у Міністерство освіти. За певний час отримали відповідь. Вона була приблизно такою: «Ні-ні, не так. Надсилаємо програми, які вам потрібні. Переробіть відповідно свої». Ми переглянули та зрозуміли, що насправді це наші програми. Їх переформатували іншими шрифтами, змінили кілька слів і надіслали нам як вказівку.
Ми набрали першу спеціальність, я став куратором групи. Раптом з’ясувалося, що коли нормально викладати програмування, то моїх знань, які я здобув уже за багато років, вистачає на якихось півтора року. Щоб навчати студентів, доводилося шукати й читати багато літератури (її вже було більше, навіть з’явився інтернет, хоча в Жовтих Водах це ще була «дика», незрозуміла річ). Я постійно відчував, що попереду від студентів на один-два кроки, але не набагато більше. Якщо пропущу якийсь етап самопідготовки, за кілька тижнів не матиму що викладати. Це дуже стимулювало навчатися, я відчував, що зростаю як спеціаліст.
Перший доступ до інтернету в нашому інституті був Dial-up. Після перших місяців Dial-up нам виділили лінію. На той час керівництво не дуже добре розуміло, що таке інтернет, чим він відрізняється від телефонного зв’язку. Хоча інститут платив провайдеру за необмежений доступ до нього (unlimited), нам його міряли. Понад те, щоб зайти в інтернет, кожен мав вводити логін і пароль. Я намагався знаходити інформацію, читати щось, і вийшло так, що за місяць використав найбільше інтернету серед усіх в інституті. Після цього пояснював керівництву, що він у нас все одно unlimited, що насправді я використовую його найефективніше, бо найбільше інформації отримую. Та все одно мене за це покарали та від’єднали від інтернету взагалі.
Перший і основний сайт, яким я користувався тоді й пізніше, був MSDN — Microsoft Developers Network, на ньому вивчав документацію з усіх технологій Microsoft. Linux у той час вже існував, але застосовували його набагато менше, ніж сьогодні. Щоб читати документацію, треба було знати англійську. Але словник технічної англійської доволі обмежений, тож якщо регулярно щось читати, за кілька тижнів можна вийти на такий рівень, коли розумієш 90% інформації, навіть не знаючи, як це вимовляється. Що погано знаю англійську, я збагнув лише тоді, коли вперше спробував заговорити нею і послухати себе.
У кінці
Інститут підприємництва «Стратегія». Джерело: euroosvita.net
На фабриці штучного хутра: «Щоб не купувати „зайвих“ комп’ютерів, тут налагодили роботу у дві зміни. Я працював у нічну»
У Жовтих Водах була (і досі є) фабрика штучного хутра. Жовтоводці нею пишаються, бо на тій фабриці робили популярного свого часу олімпійського ведмедя. Після розвалу СРСР фабрика поступово занепадала і на її основі виникло багато дрібних контор. Деякі з них обслуговували цю фабрику, інші робили щось своє.
Одна зі схожих організацій намагалася робити усе: від бухгалтерського обліку до ремонту техніки. Певний час я працював у ній. Варто згадати, що директором тої контори був дуже цікавий і винахідливий чоловік. «Я — советский инженер», — любив він казати про себе, наче це особливий привід для гордості. Директор вирізнявся тим, що вигадував різні (зазвичай нездійсненні) проєкти й був дуже ощадливим.
Якось він придумав новий проєкт: створити програму, яка б показувала «рецепти» фарб різних кольорів і відтінків, і продати її фабриці штучного хутра. Щоб зробити штучне хутро певного кольору, треба додавати різні барвники у певних пропорціях. Ідея полягала в тому, щоб користувач міг потягати різні повзунки, обрати потрібний колір, і програма сказала б, у яких пропорціях які барвники додавати. Іноді, щоб досягти потрібного кольору, на фабриці робили тестову «порцію» хутра, перевіряли, що вийшло, коригували тощо. Наш проєкт мав автоматизувати й полегшити таку роботу.
Звісно, ця задача не мала до реальності жодного стосунку. Якщо навіть екран монітора і принтер використовують абсолютно різні механізми для того, щоб створити певний колір, то що вже казати про екран монітора і фізичні пластикові волокна, з яких виготовляють штучне хутро. До того ж монітори у той час були далекі від сучасних — некалібровані, з електронно-променевою трубкою. Та директор вважав, що добре знає, навіщо це робить, платив за програму, і я погодився розробити її.
Щоб не купувати «зайвих» комп’ютерів, тут налагодили роботу у дві зміни. Я працював у нічну, приходив на роботу о
На перший погляд, розробка такої програми не надто складна. Та головна проблема була в тому, що під час зміни одного показника треба правильно змінювати всі інші. Це був мій перший досвід, коли я самостійно розробив весь алгоритм: сидів і малював схеми, діаграми зі стрілочками. Придумав зручний динамічний інтерфейс. Хоч були там свої заморочки, але я впорався і програму написав.
За певний час директор побачив, що програма не продається. Пробував домовитися, щоб я віддав зарплату, яку отримував, поки готував її. На той час я вже розумів, що дискутувати та щось аргументувати не варто, тому просто сказав, що гроші вже витратив і не маю чого повертати. У директора були й інші «ідеї на мільйон», та я вирішив далі не працювати у тій компанії.
Попри все був у тій роботі корисний досвід: я зрозумів, що можна одночасно працювати та підвищувати рівень своїх знань, мав відносно новий комп’ютер, вивчив деякі нові технології. І саме тоді, мабуть, збагнув, що хотів би працювати програмістом.
Про програми для радіометричних систем: «Ніхто не прийде і не скаже, що і як робити. Ти програміст, ти сам вирішуєш і сам робиш»
Жовті Води — специфічне місто. За часів СРСР тут були уранові шахти й кілька заводів, на яких випускали електроніку та іншу «начинку» для радянських міжконтинентальних ракет. У місто привозили висококваліфікованих фахівців, зокрема фізиків, з усього Союзу. Давали їм квартири та роботу на цих підприємствах. Після розвалу Союзу цей інтелектуальний потенціал на певний час зберігся. Тому в Жовтих Водах виникло кілька маленьких компаній, які розробляли радіометричну та дозиметричну продукцію: від персональних систем — дозиметрів, радіометрів — до великих систем контролю. Від аварії на Чорнобильській АЕС минуло ще не надто багато часу, тому питання, як контролювати, міряти радіаційне забруднення, залишалося актуальним.
З великих систем контролю створили, наприклад, спеціальні ворота, через які мали проходити люди після роботи. Система міряла, показувала, де забруднена зона, де ні. Працівник міг повернутися і знову піти в душ, помитися, якщо треба. Були системи контролю точок по периметру з постійним моніторингом. У цій системі був центральний пульт, надходили сповіщення, програма вела журнали тощо. Такого типу системи досі використовують, іноді їх можна побачити на відео чи у фільмах.
Були програмісти, які писали софт для крихітних вбудованих процесорів, і я писав софт для центральних пультів або комп’ютера, до якого усе це під’єднане. У цю роботу входило багато: придумати та реалізувати протокол обміну даними, інтерфейс, запланувати, який це матиме вигляд, самому усе тестувати.
Коли ти єдиний програміст у маленькій компанії (або один з небагатьох), ти повністю контролюєш усі технології. Ніхто не прийде і не скаже, що і як робити. Ти програміст, ти сам вирішуєш і сам робиш.
Ми працювали за схемами, розробленими ще в радянські часи: замовлення, презентація, підтвердження. Готову програму я мав показати, відтак розказати всі деталі клієнту. Зазвичай у клієнтів був список питань. Наприклад: «Як визначити відхилення на стільки-то відсотків від фонової дози?». Я сидів з ними, відповідав на усі питання, показував послідовність дій, вони усе записували.
Юзер-інтерфейс і його зручність взагалі не обговорювали. Якщо він нелогічний, непослідовний, це нікого не турбувало. Мало значення лише те, щоб програма працювала. В кінцевих користувачів був мануал — книжечка, в якій чітко написано, як виконувати ті чи інші операції, що робити у певних випадках. Вони це вивчали та просто виконували послідовність кроків.
Програмами для радіометричних систем я займався кілька років — з
Тим часом в інституті ми пройшли кілька акредитацій, випустили першу групу програмістів. Мої випускники підтвердили свої дипломи, тепер працюють у різних компаніях, зокрема у FAANG. Я ще на трохи залишився в інституті, а тоді вирішив, що мені цікаво подивитися, як розробляють серйозний професійний софт. У виші я викладав 9 років.
Робота в ISD: «Там була стара система, якій понад 30 років, з дуже великим обсягом коду»
Завдяки викладанню база теоретичних знань у мене була хорошою. Я знав напам’ять усі визначення, міг цитувати підручники. У цьому плані проходити співбесіди було легко. Оскільки я мав певний практичний досвід програмування, мене, як правило, розглядали на позиції вищі, ніж Junior. Відповідно й задачі на співбесідах давали складніші. З кінця 2005 року я почав працювати у компанії ISD у Дніпрі.
ISD — велика IT-компанія, там були люди різного професійного рівня, було на кого орієнтуватися, у кого вчитися. В Дніпрі я вже побачив інший підхід до розробки: коли є бізнес-аналітики, спеціалісти, які розбираються у вимогах, тому, що потрібно користувачу. Для мене це було відкриттям.
Компанія ISD розробляла софт для американської медицини. Там було багато нових продуктів і була стара система, якій понад 30 років, з дуже великим обсягом коду. Я потрапив у команду, що працювала з тією найбільшою системою. Ми трохи писали й дуже багато правили цей код.
Проблема була в тому, що з одного коду готували рішення для різних операційних систем: це були не лише Windows, а й старі Unix-системи. Одна база коду була і для Windows-програми з нормальним інтерфейсом, і для програми на якомусь мейнфреймі, де тільки текстовий екран. Ми оновлювали й одночасно підтримували багато різних версій. Частина клієнтів не хотіла оновлювати свій програмний продукт, їх влаштовувало, як усе працює, лише просили додати чи змінити якусь функцію. Тому треба було точно знати, у якій версії що редагувати, як тестувати тощо. В компанії були люди, які багато років займалися цим кодом і дуже добре в ньому орієнтувалися, в кількох тисячах файлів відразу знаходили те, що треба. Мені пояснювали, що для цього потрібно попрацювати з кодом
Ще одна особливість ISD — те, що робота у цій компанії була дуже бюрократизованою (в хорошому сенсі). Були конкретні задачі, до кожної — опис, як що робити, як тестувати. Завдяки цьому людина, яка тільки почала працювати в компанії, могла розібратися в усьому. Цікаво, що навіть у тих випадках, коли треба виправити помилки, розробник не міг просто взяти, виправити їх і сказати, що вже зробив це. Спочатку треба було дослідити помилку, написати, як її можна усунути й де, описати, як перевірити, що помилка справді виправлена.
Далі цей опис потрапляв до іншого фахівця, який усе перевіряв. Він міг не погодитися, сказати, що описано щось не те, тоді треба було знову щось придумувати. Ідея була в тому, що дослідження того, як виправити, і саме виправлення — це дві різні операції, зроблені двома різними спеціалістами. Це гарантувало надійність, наявність меншої кількості простих помилок, але й дуже сповільнювало розробку. Такого бюрократизованого процесу я не бачив більше ніде. Звісно, усе, що стосується медицини, роблять дуже обережно, з купою додаткових перевірок, гарантій. Мабуть, це має сенс, бо помилка тут може обійтися дуже дорого.
У Дніпрі я працював лише рік. Але думаю, що з тією роботою мені поталанило: я побачив, як займаються таким великим кодом, який підхід і процес розробки у такому випадку.
Робота в стартапі 2006-го: «Ми розробляли пошукову систему»
Я давно хотів жити та працювати в Києві. Тож коли мені запропонували позицію у стартапі в столиці, радо погодився.
Це був 2006 рік. Гугл почав завойовувати світ і за короткий проміжок часу витіснив з ринку всі інші пошукові системи. Коли ти писав запит у гуглі, на сайті показували, що за стільки-то мілісекунд знайшли стільки мільйонів результатів. Усі захоплювалися, як це круто, вважали пошуковик Google «найкосмічнішими» технологіями. Загалом на той час так і було. Інтернет-пошук — то була крута цікава тема, я був у захваті, коли дізнався, що у проєкті, де я мав працювати, також пишуть інтернет-пошуковик, але зі своїми особливостями.
Стартапом займалася невелика команда «під дахом» Luxoft, але ізольована від усіх інших проєктів компанії. Його придумали кілька американців, які працювали в IT-індустрії давно, вийшли на пенсію і мали таке хобі — створювати стартапи. Деякі стартапи з часом відбивали свої гроші, інші провалювалися. Люди, що займалися стартапом, були «динозаврами ІТ»: брали участь у комітетах ASCII, директорували у відомих компаніях, дружили з впливовими в індустрії фахівцями, ще й писали книжки.
Ми розробляли систему, спрямовану на пошук даних про людей. Програма мала швидко обробляти великі обсяги даних в інтернеті та знаходити, як певні користувачі між собою пов’язані: через роботу, спільного знайомого, хобі чи ще якось. Наприклад, можна було написати в пошуковику чиєсь ім’я, і програма мала показати, що людина пов’язана з такими ось організаціями, місцями, має такі хобі. Натискаєш на ім’я іншої людини, і тепер програма розуміє, що спільного мають ці двоє. Або клацаєш на певне місце, і пошук звужується до цього користувача й цього місця.
Тут я вперше стикнувся з методологією Agile, яка дуже добре працювала у цьому проєкті. Я відчував, що справді ефективний, швидко видаю результат. Ми були стартапом, тож треба було робити те, що може вразити інвесторів: щось цікаве, з вау-ефектом. Був і певний азарт, і вивчення чогось нового. У нас був test-driven development. Щотижня ми спілкувалися із засновниками, робили демо, кожен з команди показував одну чи дві нові фічі, які створив. Продукт зростав на очах.
У цьому проєкті був такий підхід, що майже все ми писали самі. Наприклад, потрібна система управління базами даних. У нас були специфічні умови для роботи баз даних: спробували щось одне, інше, усе працювало дуже повільно. Замість того, щоб змиритися з цим, використовувати певну бібліотеку для мережевих обмінів даними, у якій є недоліки, ми вирішували розробити свою систему.
Таке я бачив уперше в житті. Начебто для чого робити те, що вже зроблено? Та з цього ми витискали додаткову швидкість, економили пам’ять. У нас були дуже довгі процеси — наприклад, обробити усі дані з інтернету (дамп HTTP-трафіку за день). Запускаєш програму, і вона біжить три дні. Якщо вдається щось зекономити, навіть на кілька відсотків, — це вже години часу. Крім того, у нашому випадку робота програміста коштувала дешевше, ніж робота програми, яку ми написали, тому був сенс самим усе писати.
2007 рік, в офісі Luxoft
Загалом це був непоганий стартап. Тепер я спілкуюся з людьми зі стартап-компаній і бачу, що хороші стартапи приблизно так і роблять: швидко-швидко рухаються вперед, поки не зможуть продемонструвати, що задумане реально працює. Після цього вже можна розраховувати на велику суму грошей, щоб далі усе зробити нормально. «Нормально» — тобто створити програму, яка буде працювати стабільно, для великої кількості користувачів, що усе буде масштабоване тощо.
Та коли «чорновий проєкт» був майже готовий, потенційні інвестори відмовилися від ідеї з пошуковиком і вирішили писати щось інше. У той час у Штатах ставав модним Facebook, усі почали говорити про соцмережі. Мабуть, схожий пошуковик був би вже неактуальний. Ще був задум написати систему, щоб можна було відписуватися від реклами. В Україні це ще не було настільки актуальним, а в Штатах імейли та реальні поштові скриньки вже були завалені спамом від різних магазинів. Виникла ідея написати таку систему, коли можна вибрати категорію реклами, яка тебе цікавить, і відписатися від решти спаму. Скажімо, я міг би підписатися на рекламу взуття і більше не отримувати інформацію про собачий корм. Як я тепер розумію, це була спроба робити таргетовану рекламу.
Та я вже не заглиблювався у всі нюанси нового проєкту, бо восени 2007 року отримав офер від Microsoft і готувався до переїзду в США.
Переїзд у США 2007 року: «На той час Microsoft була найкрутішою ІТ-компанією, нічого схожого і близько не було»
У Microsoft я потрапив прозаїчно: знайшов адресу, на яку можна було надсилати резюме, і написав. Я не сподівався, що у мене щось вийде, але й не бачив причин, чому не спробувати. Надсилав резюме кілька разів і врешті-решт отримав відповідь.
Мені написали, запропонували поспілкуватися. Звісно, я дуже зрадів. Спілкувалися телефоном (скайп у той час вже був, але тільки починав набирати популярності, люди поступово переходили з ICQ в скайп). Після розмови мені написали, запросили на інтерв’ю. У той час Microsoft проводила інтерв’ю для людей з країн СНД у Москві. На початку розмови у мене спитали, на чому я хочу писати код, якою мовою. Це мене здивувало. До того я думав, що програмістів завжди наймають на конкретну мову програмування, а не просто в компанію.
Я пройшов співбесіду та отримав офер. Був у захваті: невже я справді працюватиму в Microsoft? На той час Microsoft була найкрутішою ІТ-компанією, нічого схожого і близько не було: Google зростав, але то була ще маленька компанія, Apple тільки-тільки вибиралася з фінансової ями, Netflix ще не існувало, Facebook тільки почався. Крім того, я дуже хотів відвідати Штати. Загалом я планував поїхати туди на кілька років — пожити, подивитися на усе, заробити грошей і повернутися в Україну. З тих обговорень, які читав у інтернеті, думав, що в Штатах мені не сподобається.
Я не знав, на яку зарплату можу очікувати — не було DOU (принаймні я не знав про нього), фейсбуком в Україні майже ніхто не користувався. Не знав вартості життя в Штатах і не міг його оцінити, бо в США зовсім інша структура витрат. Пригадую, я подивився на суму, яку мені написали в офері, і подумав: «Ого!» (зарплата була значно більшою, ніж та, яку я отримував в Україні). Насправді то була невелика зарплата, але для мене це все одно не мало значення — я радів, що працюватиму в Microsoft.
Чекайте на продовження статті незабаром. Про роботу Олександра в Microsoft та інших американських компаніях, про оцінювання співробітників, американську професійну культуру та український менталітет читайте у другій частині інтерв’ю.