Чим же займаються програмісти, і як пояснити це іншим

Чим же займаються програмісти, і як пояснити це іншим

код

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

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

Для цього ми відтворимо таку розповідь, а також розвінчаємо кілька міфів про програмування.

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

Міф №1: Програміст працює з комп'ютерами

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

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

цифри

Міф №2: Машина вміє думати

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

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

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

Міф №3: Мова програмування потрібна для складання алгоритмів

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

клавіатура

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

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

Псевдокод
повторюємо цикл:
	
        шукаємо(в книзі, центральну_сторінку);
	
        якщо (центральна_сторінка = шуканій_сторінці)
                виходимо з циклу;
	
        інакше
                якщо (центральна_сторінка < шуканій_сторінці)
                        видаляемо(в книзі, всі сторінки від першої до центральної);
                інакше
                        видаляемо(в книзі, всі сторінки від центральної до останньої);

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

програміст

Міф №4: Програмування - це нудно

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

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

- Жартома можна сказати, що в підсумку виходить якийсь детектив в вигаданому світі, виражений за допомогою мови програмування.
- А вбивця в цьому детективі - дворецький?
- Ага, нульовий покажчик. Буває так, що весь відділ день-другий ловить особливо настирливий баг, і кожен програміст з відділу бере на себе якусь ділянку коду. Виходить ціле розслідування, з покаранням винних і нагородженням причетних...
- Хм, а це і справді цікаво звучить!
- От бачиш.
- А, скажімо, я можу хоч трохи навчитися програмуванню?
- Так звісно! Я знаю один сайт спеціально для цього...

Фото: flickr.com
Обробка: Vinci
назад
далі