Чим займаються програмісти

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

Чим займаються програмісти

Як розповісти їм про це, не лякаючи страшними термінами і фрагментами коду?
Давайте прочитаємо невелику розповідь, а також розвінчаємо кілька міфів про програмування.

  • Міф # 1: програміст працює з комп'ютерами
  • Міф # 2: машина вміє думати
  • Міф # 3: мова програмування потрібен для складання алгоритмів
  • Міф # 4: програмування - це нудно

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

Чомусь чимале число людей реально вважає, ніби комп'ютер володіє якимось інтелектом. Насправді - це просто набір залозок, які думати не вміють. Вони вміють лише зберігати числові дані. Розмагнічений якусь ділянку такої залізяки - значить, це нуль. Намагнічений - одиниця. Плюс, ще вони можуть додавати і віднімати ці одиниці, утворюючи більш складні числа (про двійковій системі числення краще не варто згадувати). Більше комп'ютер сам нічого робити не вміє, тільки зберігати числа і оперувати ними. Це бездумний дурень, який лише виконує команди програміста.

- Загалом, код будь-якої програми представляє собою набір команд, а комп'ютер їх тупо виконує.
- Тобто, він не розуміє суті самих команд? Але як він сприймає текст, який я ввожу на екрані?
- Коли ти крутиш педалі на велосипеді - чи розуміє він, що йому зараз потрібно поїхати вперед?
- Ні, але ж їде. Оскільки його ланцюг перетворює обертання педалей в обертання колеса.
- Саме так! Також і комп'ютер перетворює введений тобою текст в набір чисел.
- Яким чином?
- У кожного символу тексту є свій числовий код, який знає комп'ютер. Це називається кодуванням. Наприклад, англійська «a» кодується числом 97, а знак рівності - числом 61.
- Тому машина і може розуміти текст, який ми їй повідомляємо?
- Ні, вона «розуміє» не сенс. А лише те, яким чином цей текст зберігати, і як до нього звертатися.
- Виходить, спочатку ми вводимо текст, потім комп'ютер розбиває його на символи, а кожен символ вже представляє у вигляді числа?
- Вірно. Складні структури представляються у вигляді більш простих. які і «розуміє» машина.

- Скажіть мені, з чого складається житловий будинок?
- Ну ... З поверхів.
- А з чого складаються поверхи? І так далі.
- Поверхи - зі стін. А стіни - з цегли. А цеглу ...
- Ось числа для комп'ютера - це те ж, що і цегла для будинку. Символи - це стіни. Окремі пропозиції - поверхи. А книги - цілі будинки! Але у програмістів є перевага перед будівельниками.
- У зарплати?
- Не тільки. Будівельник не може будувати цілими поверхами, він змушений завжди класти цеглу. Навіть якщо якийсь надпотужний підйомний кран дозволить йому будувати готові поверхи, він не зможе будувати їм цілі будинки або житлові квартали. А програміст зможе! Раз він вже «навчив» машину розуміти кінцевий текст - то, по суті, він «навчив» підйомний кран будувати готовий будинок за одну дію.
- Тобто, програміст може використовувати все більш і більш складні структури даних?
- Так. Тому перша зі складових його роботи - представити зрозумілі людині дані (текст, зображення, звук) у вигляді об'єднання простіших даних, вже зрозумілих комп'ютера. Розробник практично «з нуля» становить структуру, яка повинна повністю описувати зрозумілу людині річ - причому таким чином, щоб ця структура була легко розширюється і змінною (адже в програму часто доводиться вносити якісь нові можливості).
- Хех! Виходить, що він будує гумові будинку з знімних панелей!
- Приблизно так. Однак, ще йому доведеться не лише описати, що ж йому потрібно побудувати - але і як все це побудувати. Тобто, придумати алгоритм. Це друга зі складових його роботи.
- Програміст придумує алгоритм на кожну дію?
- Саме так. Тому алгоритмів виходить дуже багато. Але його роботу полегшує те, що одні дії можуть містити в собі інші, вже описані ним раніше.
- І тут йому на допомогу приходить мову програмування?
- Не зовсім…

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

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

- Правда, багато хто з нинішніх мов програмування вже містять «в собі» набір заздалегідь складених алгоритмів, які розробник може використовувати в якості готових. Тому мова все ж трохи полегшує процес складання алгоритмів.
- Тобто, якщо один програміст склав якийсь алгоритм, то його тут же можуть використовувати інші?
- Так, і це відбувається постійно. Це одна з причин, чому галузь IT так швидко розвивається. Однак нові алгоритми доводиться складати самому.
- А склади який-небудь прямо зараз!
- Легко. Класичний приклад: у вас є книга, в ній 1000 сторінок. Вам потрібно відкрити в ній, наприклад, 875-ю сторінку. Як би ви стали це робити?
- Ну, просто пробіг від першої до 875-ї, тільки і всього.
- Угу, і доведеться тобі дивитися на номер кожної сторінки. А уяви, якщо всі їхні куточки злиплися - скільки часу тоді пройде? А ось мені досить перебрати лише 3 сторінки!
- Як?
- Спочатку я виберу сторінку, яка знаходиться посередині книги, тобто 500-ю. Потім подивлюся: в яку з утворених половин повинна потрапити шукана сторінка?
- У другу. А далі що?
- Теж саме. Інтервал з 500-ї по 1000-ю я знову поділю надвоє, відкривши центральну сторінку. Вийде інтервал від 750-ї сторінки до 1000-й, в ньому я знову виберу центральну. Якою буде номер?
- 750 плюс 125 ... Так це ж і є 875!
- Ось бачиш. Всього 3 дії! Навіть якщо я буду не зовсім точний при виборі центральної сторінки, я все одно знайду потрібну набагато швидше тебе. Цей алгоритм носить назву «дихотомія». Хоча в реальності програмісти використовують куди більш складні алгоритми.
- І ти можеш записати його на папері?
- Звичайно. Де там моя ручка?

- Ну як, алгоритм зрозумілий?
- Хм ... Так, і справді ясний.
- Зараз він записаний у вигляді, вже злегка схожому на реальний програмний код.
- А в чому відмінності?
- У реальному коді все слова будуть написані англійською, а також буде заздалегідь описана структура «книга» (пам'ятаєте, що я раніше розповідав про структури даних?). Плюс, для дій «шукаємо» і «видаляємо» теж будуть складені свої алгоритми. Але в цілому - все те ж саме.
- І ти займаєшся цим із дня в день?
- Здебільшого.
- І тобі не нудно?
- Анітрохи!

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

Шкільні правила 1872 року

45 несерйозних правил української мови