Вступ до технологій, або IT для початківців

Якщо ви студент технічної спеціальності, бачите свій професійний шлях в IT і не знаєте, з чого почати — ця стаття для вас. У ній ви знайдете детальний опис найпоширеніших позицій в IT-компаніях та перелік того, що потрібно вміти і знати початківцю, щоб потрапити на них.

Розповім трішки про себе. З 2004 року я почав працювати у сфері освіти в IT, ще будучи студентом Львівської політехніки. Я почав із викладання апаратного забезпечення та адміністрування операційних систем, тому що зрозумів, що викладання закріплює знання швидше, ніж навчання у виші. Зараз я Senior Test Engineer, консультант GlobalLogic, директор Tech School у LITS, і загалом я маю понад 12 років досвіду у комерційних проектах.

То з чого все ж таки почати?

У сфері інформаційних технологій можна виділити три основні ролі: програмісти, інженери з якості (тестувальники) та менеджери. Як правило, молоді спеціалісти розпочинають з позицій програмістів чи тестувальників, а менеджерами стають згодом.

Обираєте роль програміста?

Якщо ви поставили собі за мету вивчити якусь одну мову програмування і стати програмістом, відразу хочу вас попередити — цього буде недостатньо. IT — дуже динамічна галузь, і щоб залишатися конкурентоспроможним на ринку, потрібно вміти писати код різними мовами. Крім того, треба постійно слідкувати за змінами, трендами, новинками.

Вибір мов програмування загалом залежить від ваших уподобань. Якщо ви навчаєтеся на спеціальності «Комп’ютерна інженерія», або на чомусь схожому, скоріш за все ви вивчаєте C чи C++. Це хороший початок, хоч вам може здаватися, що ці мови складніші для вивчення, ніж інші. Однак, якщо ви будете знати на хорошому рівні хоча би одну із них, вам буде значно легше опанувати й інші. Та й можливості ваші будуть доволі широкими: C++, для прикладу, застосовується в написанні коду як для Linux, так і для Windows. Лабораторних у виші буде недостатньо, щоб опанувати цю мову на хорошому для практичного застосування рівні. Спробуйте порозв’язувати усі завдання з того джерела літератури, яке ви використовуєте, знайдіть додаткову літературу, безкоштовні онлайн-курси тощо.

Давайте коротко розглянемо ще декілька мов, які наразі не менш популярні (у контексті великої кількості вакансій), наприклад .NET і Java. Вивчаючи ці мови, потрібно детально ознайомитися з їхніми бібліотеками та використанням цих бібліотек. Java-програміст повинен добре володіти загальними принципами роботи родини операційних систем Linux. Також йому необхідні навички використання таких наборів готового функціоналу (фреймворків), як Spring та Hibernate. Для опанування ж .NET слід ґрунтовно ознайомитись із технологіями Microsoft та особливостями роботи родини операційних систем Windows. Зовсім не зайвим стане паралельне вивчення C#, ASP тощо.

Якщо хочете рухатися у популярному зараз напрямку веб-розробки (створення веб-сайтів), тут є декілька варіантів. Найчастіше зустрічаються такі типи веб-розробки, як front-end, back-end і full stack. Front-end (фронтенд) — це розробка візуальної частини сайту; це те, що ми бачимо, зайшовши на будь-який сайт. Цю частину іще часто називають клієнтською. Back-end (бекенд) розробка залишається «за лаштунками» візуальної частини. Код бекенду розміщений на сервері і відповідає за відправлення правильних даних у браузер для відображення на сайті. А full stack (фулстек) розробка об’єднує два описані вище типи, тобто фулстек-програміст має вміти писати код як фронтенду, так і бекенду.

Як ви вже могли здогадатися, мови програмування на фронтенді та бекенді — різні. Розробка фронтенду здійснюється на мовах, які живуть у браузері — HTML, CSS і JavaScript. Перші дві дуже прості, і про них можна знайти вдосталь інформації в інтернеті. А почати вивчати JavaScript, наприклад, можна з книги Девіда Фленегана (David Flanagan «JavaScript: The Definitive Guide»), розв’язуючи усі зазначені там практичні завдання. Також для того, щоб стати фронтендщиком, потрібно мати розуміння фреймворків (Bootstrap, Foundation, Backbone.js, AngularJS, EmberJS) та JS-бібліотек (jQuery and LESS).

Для бекенду потрібно знати якусь із серверних мов (а то і декілька): PHP, Ruby, Python, Java або .Net, а також вміти використовувати такі системи, як MySQL, Oracle та SQL Server для знаходження, зберігання, зміни даних, які потім відправляються у фронтенд. Ви також повинні на глибокому рівні розуміти, як працює браузер та як відлагодити (debug) код у консолі розробника. Загалом, дуже важливо постійно навчатись, цікавитися різними технологіями, новинками і пробувати їх застосовувати на практиці. Веб не стоїть на місці і існуючі фреймворки оновлюються раз на декілька місяців. Не менш часто можна зіткнутися і з появою нових фреймворків, які не слід боятися застосовувати. Знання нових методик може показати вас із вигідного боку.

А для загального розвитку кожному розробнику я рекомендую почитати книгу Стіва Макконнела (Steve McConnell «Code Complete»).

Віддаєте перевагу тестуванню?

Тестування програмного та апаратного забезпечення є другим за популярністю напрямом ІТ-сфери. Поріг входу на ринок у тестувальника (іншими словами, «інженера з якості» або «QA-спеціаліста») зазвичай нижчий, ніж у програміста, тому ця позиція така популярна серед усіх, хто вирішив перекваліфікуватись із іншої галузі.

Можна стати інженером, що проводить тестування вручну (Manual QA Engineer, скорочено: QA Engineer чи просто QA) або інженером, що автоматизує тестувальний процес — тестувальником-автоматизатором (QA Automation Engineer, Automation QA). Це означає, що він пише скрипт-код для тестів, які автоматично будуть перевіряти програму швидше, ніж людина.

Що саме потрібно знати та вміти, щоб стати Manual QA Engineer? Насамперед, потрібно мати ґрунтовну теоретичну базу технічних знань. До технічних знань відносять розуміння циклу розробки програмного забезпечення, видів та рівнів тестування, знання основних інструментів тестування. Тим, хто починає вчитися на інженера з якості, раджу почитати книгу С. Мюллера «Модернізація і ремонт ПК» (Scott Mueller «Upgrading and Repairing PCs») та Н. Оліфер і В. Оліфера «Комп’ютерні мережі» (Natalia Olifer, Victor Olifer «Computer Networks: Principles, Technologies and Protocols for Network Design»).

QA Automation Engineer — це вже наступна стадія професійного зростання. Крім навичок ручного тестування, QA Automation Engineer повинен володіти базовими навичками програмування на одній або декількох мовах (Python, JavaScript тощо). Зараз сфера автоматизованого тестування стрімко розвивається, тому це перспективний напрямок для QA-спеціаліста.

Який би шлях ви не обрали — програміста чи інженера з якості — однаково важливим є знання англійської мови на рівні Upper-Intermediate та вище. Проте не варто розчаровуватися, якщо у вас тільки Pre-Intermediate — цього може бути достатньо для початку.

Що потрібно, щоб спеціалізуватися у певному напрямку?

Комерційні проекти, на яких задіяні програмісти та інженери з якості, бувають декількох напрямків у залежності від того, що на них розробляється. Вище ми згадували один з них — веб-розробка. Для роботи у кожному конкретному напрямку зазвичай потрібне володіння спеціальними навичками і знаннями. Давайте коротко розглянемо найпопулярніші з них:

Програмування вбудованих пристроїв (embedded) — до прикладу, медичних апаратів, спортивного спорядження тощо;
Для початку тут підійде знання C/C++, загальне знання апаратного забезпечення та операційних систем.

Розробка програмного забезпечення для носимих пристроїв (wearables) — розумних годинників, фітнес-браслетів тощо;
Тут потрібні ті ж знання, що і для embedded-розробки, але додатково слід розібратися і в апаратному забезпеченні для носимих пристроїв.

Розробка мобільних веб-додатків (applications) для таких операційних систем, як iOS, Android, Windows etc.
Для того, щоб почати розробляти iOS-додатки, потрібно вміти писати код на мові Objective-C або ще краще — на Swift. Для розробки Android-додатків потрібно володіти Java, рідше — C/C++. Для Windows — C#, .NET.

Розробка програм для настільних персональних комп’ютерів — у цій сфері знадобляться знання C/C++, Python, Java (залежно від операційної системи), загальне розуміння структури операційних систем, основи знань про мережі.

Проекти зі сфери «Інтернету речей» (IoT = Internet of Things) — такі проекти передбачають тісну взаємодію між пристроями. Концепція «розумного будинку» є яскравим прикладом «Інтернету речей». Тут крім володіння мовами програмування потрібні ще базові знання мереж та їхнього апаратного забезпечення, розуміння мережевих моделей і мережевих протоколів.

А які перспективи спеціаліста у компанії?

Програміст чи тестувальник-початківець без практичного досвіду розпочинає свій шлях у компанії з позиції початкового рівня — це може бути роль Trainee (так вона називається у GlobalLogic, наприклад) або Intern. На цій позиції початківець перебуває від трьох місяців до року. За цей час майбутній спеціаліст із допомогою ментора та HR-консультанта адаптується до компанії, своєї ролі у ній, багато вчиться і здобуває досвід та необхідні навички для переходу на вищий рівень. Далі рух кар’єрними сходинками виглядає приблизно так:

Junior — Middle — Senior — Lead

Рівень Middle може мати назву Intermediate або Medior, а Lead — Leader.

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

У спеціаліста на позиції Lead з’являється можливість рухатися у бік технічної експертизи — бути Technical Lead (і стати Area Expert або Architect) або у бік менеджменту — бути Team Lead (і згодом обійняти посади Project Manager чи Delivery Manager).

Також варто згадати, що інженер з якості може перекваліфікуватися на розробника програмного забезпечення, тобто стати програмістом. Буває і навпаки: деякі позиції високого технічного рівня передбачають у розробника наявність навичок тестування і здатність перевіряти код.

Що ще я маю знати?

Робота на проекті передбачає не тільки написання коду і його тестування, але й взаємодію з іншими людьми — колегами у команді і замовником, — тому важливості набувають навички спілкування (як ділового, так і неформального), здатність легко знаходити спільну мову. Ці навички мають свою назву — soft skills, і на співбесіді рекрутери звертають увагу на те, наскільки кандидат ними володіє. Також цінується творчий підхід до роботи, хороші навички тайм-менеджменту (керування своїм часом), вміння правильно встановлювати собі цілі для особистісного зростання. Раджу пошукати статті на ці теми в Інтернеті, зараз їх є вдосталь.

Цього мало би бути достатньо для початку. Якщо ви добре мотивовані і у процесі навчання отримуєте задоволення — не зупиняйтеся, і ви неодмінно станете тим, ким хочете, і досягнете успіху!

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn



36 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.
Java-програміст повинен добре володіти загальними принципами роботи родини операційних систем Linux. Також йому необхідні навички використання таких наборів готового функціоналу (фреймворків), як Spring та Hibernate.

Програмування на Java не зводиться до веб-програмування і взаємодією з реляційними БД. Java — це також BigData, розробка для Android, Artificial intelligence (особливо якщо великі нагрузки й обсяги даних), де не потрібні Spring та Hibernate. Та і для веб-програмування на Java можуть хотіти, наприклад, Java EE, а не Spring.

У спеціаліста на позиції Lead з’являється можливість рухатися у бік технічної експертизи — бути Technical Lead (і стати Area Expert або Architect) або у бік менеджменту — бути Team Lead (і згодом обійняти посади Project Manager чи Delivery Manager).

Переважно під Lead мають на увазі або Technical Lead, або Team Lead, або перше + друге. Єдиний раз у моєму досвіді, коли це було не так — коли працював в Edvantis, у команді були одночасно Lead Engineer (у Бостоні) і Team Lead (у Львові, він займався плануванням спринтів, роздачею завдань команді, вибором технічних рішень).

1. Скільки проектів, стільки і варіацій. Я більше обирав грунтуючись на уже існуючих проектах у компанії де я працюю. Звісно, що хотілось би написати детальніше і більше, але формат статті задумувався як перші кроки, вектори тощо. Але я звісно згоден, що це не єдиноправильний вектор руху.
2. Ну тут більше все залежить від компанії і замовника, навіть самі назви позицій можуть відрізнятись. Хотілось відрізнити ліда як технічного спеціаліста і ліда як менеджера. У моєму досвіді частіше все-таки ці позиції намагались розділяти.

Странненькая статья. Столько текста, но вопросы так и остались не раскрытыми.
О чем статья вообще? Какой вывод? Тренировать hard и soft скиллы? Ок.

Цикл статей «Карьера в ИТ» намного более полезен для новичка, чем эта статья.

Давайте коротко розглянемо ще декілька мов, які наразі не менш популярні (у контексті великої кількості вакансій), наприклад .NET і Java.

.NET — не є мовою програмування.

Згоден. Слід виправити... задумка була підвести читача до C# і ASP.NET.

Далі рух кар’єрними сходинками виглядає приблизно так:
Junior — Middle — Senior — Lead

Не зовсім коректно. Не кожен Senior може бути Lead-ом, і не кожен Lead є Senior.

Так я розумію. Мова йшла про те, що логічним буде ріст кваліфікованого senior’a до керівника командою. Звісно це все не обов’язково. Далеко не кожен має задатки менеджера чи елементарного бажання. І звісно на моїй практиці були і хороші middle ліди. Згоден, я не вдавався в деталі і нюанси, я подумаю над перефразуванням. Дякую

Для опанування ж .NET слід ґрунтовно ознайомитись із технологіями Microsoft та особливостями роботи родини операційних систем Windows. Зовсім не зайвим стане паралельне вивчення C#, ASP тощо.

Я б це місце взагалі переписав. Не так уже й ґрунтовно треба знати Windows, тим більше, що .NET Core уже до нього не так прив’язаний.
ASP це стара технологія, давно замінена ASP.NET.
C# це взагалі ядро цілої платформи, її базова мова. Це в Джаві платформа і базова мова називаються однаково, а в нас ні. Але ми кажемо .NET і розуміємо C# (хоча є і інші мови, від VB.NET до F#), і кажемо C# , а розуміємо .NET.

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

Але дякую за коментар, я дійсно врахую, що матеріал читають і ті хто більш глибоко розуміють суть запитання.

Не, вы должны учитывать что вашу статью читают люди которые ничего не знают о технологиях. И любая ваша бредня ... то есть неправильный вектор, может превратить человека в «ИТ-инвалида».
Простой пример:

Також для того, щоб стати фронтендщиком, потрібно мати розуміння фреймворків (Bootstrap, Foundation, Backbone.js, AngularJS, EmberJS) та JS-бібліотек (jQuery and LESS).

Backbone.js, AngularJS, EmberJS — уже пару лет как React, Angular (2), Vue.js. LESS — это CSS-фреймворк, а не js-библиотека.

Ваша статья как-то очень похоже на пародию на университетский курс «вступ до спеціальності» — человек который вообще не в теме дает советы по методичке 20-летней давности. Если эта статья стеб, то добавьте дисклеймер.

Ви якось агресивно підходите до матеріалу. Моя стаття дійсно схожа на «вступ до спеціальності», але Ви надто швидко причислили мене до людей не в темі. Будучи спеціалістом в своїй сфері Ви трактуєте матеріал по своєму. Я почитав ваші аргументи, але все-таки не зі всім погоджусь... angular не react, а LESS — CSS фреймворк і втім JS-бібілотека. Зараз я би перефразував цей момент, але коли писалась стаття я намагався викласти матеріал для людей не в темі, щоб їм простіше було вхопитись за якісь ключові слова.
Дякую за конструктив. Намагатамусь не «плодити ІТ-інвалідів»

angular не react,

Я и не говорил что ангулар — это реакт. Я сказал что вы указали 3 устаревшие технологии.
Кстати, я ни разу не слышал про «Foundation», можете дать ссылку на этот фреймворк.

а LESS — CSS фреймворк і втім JS-бібілотека

Ну, да формально вы правы. А по сути, что будет если человек выучит лесс как библиотеку (АПИ, особенности работы)? Как это ему поможет?
Лесс интересен своим синтаксисом, он интересен как ЦСС препроцессор, а не как библиотека (особенно новичку)

Даю посилання: foundation.zurb.com
Я думаю наша дискусія зводиться до трактування. Ясно що вчити саму бібліотеку немає особливого сенсу. В моєму трактуванні я пропоную LESS до вивчення, не саму бібліотеку як таку. Я врахую нюанси сприйняття і додам коментар щодо LESS як препроцесора насамперед.

Less це вже олдскул, подавляюча більшість розробників використовує sass(scss) частина stulys.
Також набирають обертів постпроцесори (postcss).
Щодо бібліотеки, я б посперечався. Всі ці технології доступні у вигляді npm модулів і мають сенс виключно як npm модулі в зв’язці з системою збірки типу grunt / gulp / webpack. Двіжком процесу виступає нода, яка перевернула web розробку з ніг на голову і про яку тут ні слова :(. Відповідно тема js на клієнті / js на сервері , яка на мій суб’єктивний погляд, є найпрогресивнішою і перспективнішою не розкрита і навіть не привідкрита.
Також, я би акцентував увагу тих кому душа лежить до вебу починати одразу з js і не пхатися в всілякі там пайтони джави чи плюси. В протилежному випадку поріг входження в js виростає в кілька разів.
Дякую за матеріал!

Дякую, візьму до уваги. Ринок і тренди в ІТ міняються доволі стрімко. Сьогодні ти вчиш одне, а завтра ти вже застарів. Про постпроцесори теж башато чую останнім часом. Пора пройтись по веб орієнтованим проектам). Дякую за коментар.

Постпроцесори дають можливість використати, як вже існуючий синтаксис (sass, less,...) так і придумати свій з своїми правилами. Навіть вже є кілька планінів розроблених для кирилиці. Плюс всілякі автопрефіксори і можливість писати на css4 вже сьогодні. Тому всі задатки для звання технологія 2017 року присутні.

Також добре практикуватися на leetcode.com/problemset/all

До технічних знань відносять розуміння циклу розробки програмного забезпечення, видів та рівнів тестування, знання основних інструментів тестування. Тим, хто починає вчитися на інженера з якості, раджу почитати книгу С. Мюллера «Модернізація і ремонт ПК» (Scott Mueller «Upgrading and Repairing PCs») та Н. Оліфер і В. Оліфера «Комп’ютерні мережі» (Natalia Olifer, Victor Olifer «Computer Networks: Principles, Technologies and Protocols for Network Design»).

Да, дейтвительно железо и сети важны, но очень странный выбор как для первых книг по QA направлению, когда есть Савин, Куликов, Каннер и другие, которые дадут большую пользу и выхлоп для НАЧИНАЮЩИХ. хм... Возможно у автора проекты плотно связаные з железом?

я підтримую тут автора. книги по тестуванню це одне, але перед тим як почати вивчати тестування потрібно знати як мінімум , як працює ПК. Я зустрічав тестувальників які не знали як встановити драйвер принтера чи що таке хост файл.

на основе вашей логики тогда эти книги надо писать и разработчикам...

для тестувальника воно більш важливе, так як тестувальник це людина яка може налаштовувати систему\середовище, пробувати різні конфігурації. Розробник ,в основному, займається частинкою функціоналу. Але ці знання для розробника також пригодяться.

Також, напевно, це додано через те, що багато не технічних людей йдуть на позиції тестувальника.

Книжки непогані, та якщо мета статті зорієнтувати в якому напрямку рухатись, для прикладу можна дати літературу яка пояснить що таке тестування ПЗ і з чим його їдять. Далі можна переходити на технічні аспекти — що саме має знати тестувальник.
Ну а те що хтось не знав як встановити драйвер для принтера то печаль...) Хоча в будь-якій ситуації гугл прийде на допомогу)

Ех, на жаль серед тестувальників все більше тих хто не вміє встановити драйвер... а бувають і гірші випадки. Я просто адепт теорії, що мода на технічно освічених спеціалістів повернеться.

Розумію, може звучати доволі заскладно як для починаючого ІТшника. Але вимоги до інтернів і джунів ростуть, а відсоток початківців які більш-менш розбираються в приницпах роботи ПК меншає. Я дійсно вважаю, що «мода» на «технарів» повернеться, бо одними знаннями створення тест кейсів ринок не розвинеться. В прикладі подав еталонні книги, в яких є дійсно що почитати, звісно можна знайти книги більш доступні.

не дуже зрозумів запитання. в процесі вивчення мов програмування, алгоритміка засвоюється паралельно. вчити алгоритми лише заради алгоритмів це не практичний підхід. зараз ринок хоче практиків, теоретикам важко примінити десь знання, хіба у навчанні)

Не вчити алгоритми заради алгоритмів. Але знання банальних алгоритмів сортування та пошуку, особливо на початку, дасть можливість :
— швидше зрозуміти як працює вся ця магія з циклами і масивами
— писати ефективніший код

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

я мав на увазі паралельне вивчення. Тоді зрозуміло

лабиринт с картинки прошел :)

видно только один, предполагать что в непоказанном краюшке проход нельзя

видно только один, предполагать что в непоказанном краюшке проход нельзя

А по моему — можно, тут стены константной толщины, а чтобы загородить «непоказаный» проход нужна тонкая стена.

Я тепер зрозумів на що слід «натискати» коли постиш статтю)))

на тоже надо надавливать на докладе, презентации, выставке и всех остальных такого рода активностях

Підписатись на коментарі