Історія одного програміста

Історія одного програміста

Я програміст, 24 роки. Зріст 170. Параметри 90-60-90. Хочу поділитися досвідом з інститутських часів. На що потрібно звертати увагу в процесі навчання (виходячи з моїх спостережень), що може стати в нагоді в майбутньому. Розповім, в які моменти і який прогрес спостерігався. Як не опускати руки, якщо нудно вчитися, і в чому шукати мотивацію.

У мене в школі інформатика була тільки в 10 і 11-му класах. Вивчали ми мову QBasic. Писали програми не більше, ніж на 30 рядків. На тлі інших однокласників начебто виходило непогано справлятися із завданнями, та й оточуючі говорили, що «програмісти зараз потрібні». Коли я йшла вчитися на програміста, не уявляла взагалі, що це таке.

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

Провчившись в інституті, усвідомлюєш важливість наступних речей

Coding style

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

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

Зроби своє життя простіше - використовуй системи контролю версій

Я вперше познайомилася з системами контролю версій на п'ятому курсі. І дуже вдячна викладу, який змушував нас вести розробку лабораторних робіт в git. Пізнавши всі переваги і гнучкість розподілених систем, маючи досвід роботи з SVN і git, я віддаю перевагу git. І навіть не бентежить робота в git bash, хоча існують і графічні додатки для роботи Git-ом.

Потрібно вивчати матчастину

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

Формальні вирази

У нас був цілий предмет, на якому можна було відточувати навички зі складання регекспів - теорія компіляторів. Спочатку ми писали простенькі лексичні аналізатори, пізніше стали писати програмки і для синтаксичного розбору. Після знайомства з регекспами можна побачити, що вони потрібні і для парсингу файлів, і для перевірки коректності даних (ту ж IP-адресу перевірити). І так, люблять давати на співбесідах завдання, пов'язані з регулярними виразами.

Архітектура ЕВМ

Як же працює процесор, як виконуються обчислення, як працює пам'ять, обробляються переривання і багато іншого. Знання про представлення чисел в машині, про процес виконання операцій з числами в додатковому/зворотному коді однозначно стане в нагоді будь-якому програмісту, який працює з комп'ютером або ПЛІС, мікроконтролером тощо.

Знання про роботу ОС

Робота з потоками, використання механізмів синхронізації, адміністрування та ін. На одній із співбесід запитували, що з себе представляє м'ютекс. Хтось через нерозуміння суті питання почне розповідати про lock () і unlock () функції для роботи з м'ютексом. Але насправді потрібно донести, що цей механізм синхронізації представляє з себе пасивне очікування. Залежно від того, за яким напрямом ви збираєтеся працювати, визначається життєва необхідність цього знання. Але і взагалі знати і пам'ятати про подібні речі не зашкодить.

При вивченні роботи ОС і драйверів, вперше збирали ядро Linux, хоча раніше для мене це було чимось загадковим.

Апаратні мови програмування

Корисно для загального розвитку. Але поки в роботі не особливо стало в нагоді. Хоча ні: коли на лекції нам почали розповідати про упаковані і неупаковані структури, я задумалася, а чи є таке в мові С. Так, я не знала, що є таке поняття, як бітові поля.

Теорія автоматів

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

Інформаційна безпека

Мені знадобилися знання про розрахунок CRC-кодів для контролю цілісності переданої інформації при обміні. У нас була навіть ціла лекція про те, що це таке і як зробити правильний вибір полінома.

Мережі

Знайомство з різними протоколами, з роботою і видами конфігурацій мережі виявилося корисним.

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

Відсутність мотивації може відбити бажання вчитися

Неодноразово зараз чую від молодших співробітників: «Довчився вже до вротого (n-го) курсу, а нудні лекції, заняття, преподи тільки бажання вбивають». Мені в цьому плані, напевно, пощастило трохи більше. Було у нас кілька викладачів (вони ще працюють в інших компаніях), дивлячись на яких ти думаєш: «Хочу бути таким же». Їхні настанови, історії з життя надихали. Завдяки таким людям у студентів з'являється вогонь в очах.

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

(Вінстон Черчілль)

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

Що б сказати наостанок

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

Image