Пояснення програмування за допомогою жартів для програмістів: повний переклад сайту Eat the World


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

Ми зробили для Вас переклад сайту Eat the World, який з’явився в Мережі першого квітня. Його призначення – пояснити людям, далеким від IT, що таке програмування, через розбір жартів для програмістів. Ресурс не лише проводить лікбез для “гуманітаріїв” – розробникам-початківцям  він допоможе глибше зрозуміти суть професії, а досвідченим нагадає про всі її переваги. У будь-якому разі, ким би Ви не були, швидше за все знайдете, над чим посміятися.

 

Усі жарти розташовуються на окремих сторінках і розділені на три основні теми.

Частина I. “Ху із ху” у світі IT

Будь-яке знання варто сприймати як подібність семантичного дерева: переконаєтеся в тому, що розумієте фундаментальні принципи, тобто стовбур і великі гілки, до того як лізти в дрібне листя-деталі. Інакше останнім не буде на чому триматися.

– Ілон Маск

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

– Скільки програмістів потрібно, щоб поміняти лампочку?

– Жодного, це проблеми апаратного забезпечення.

Програмісти займаються розробкою програмного забезпечення. Обслуговування і підтримка правильної роботи устаткування – задача системного адміністратора.

Якщо Ви ґрунтовно ознайомлені з труднощами життя IT-фахівця, то прочитайте нашу шпаргалку зі спілкування з керівництвом.


Муза полюбляє спізнюватися

Керівник проекту – людина, яка думає, що дев’ять жінок можуть народити дитину за один місяць.

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


Думати шкідливо

Користувацький інтерфейс, як жарт: якщо тобі доводиться давати пояснення, то він не такий вже й гарний.

Користувацький інтерфейс (UI) – це поле взаємодії користувача з ПЗ (наприклад, форма реєстрації на сайті). Добре спроектований UI має бути максимально інтуїтивним і зрозумілим. Відомий фахівець Стів Круг стверджує, що основний принцип при створенні інтерфейсів звучить як “не примушуй мене думати”.

У нас є статті з порадами щодо поліпшення інтерфейсу: частина 1 і частина 2.


Завжди онлайн

Ubuntu – давнє африканське слово, яке означає “я не можу налаштувати Debian”.

Ubuntu і Debian – дистрибутиви Linux, що розробляються співтовариством Open Source. Ubuntu простіше в налаштуванні та використанні, тому корисніший для новачків. Слово “ubuntu” справді африканське і перекладається як “людяність”.

Linux- подібними системами часто користуються системні адміністратори при роботі з серверами.


Організована колекція даних

SQL-запит заходить у бар, підходить до двох столиків і запитує: “можна приєднатися?

Мова запитів SQL (Structured Query Language) використовується для створення і модифікації баз даних (БД), а також для розміщення даних усередині баз і подальшого  звернення до них. БД структуровані у вигляді таблиць, що містять релевантні дані, які можна, наприклад, об’єднати за допомогою SQL-запиту.

Пропонуємо розібратися в основних моделях баз даних і порівняти популярні системи управління: SQLite, MySQL і PostgreSQL.


Якщо Ви не захочете тестувати продукт, робити це не захочуть і Ваші користувачі

– Скільки тестувальників треба, щоб поміняти лампочку?

– Жодного, вони лише вказали, що в кімнаті темно. Тестувальники не виправляють проблеми, вони їх знаходять.

Роль фахівців з тестування в процесі розробки полягає в тому, щоб запустити програму в різних середовищах (браузерах, операційних системах), виявити і локалізувати помилки і баги підвищити якість продукту.

Ми почали перекладати серію статей про ознайомлення з фронтенд-тестуванням, у першій частині можна більше прочитати про те, що таке тестування і навіщо воно потрібне.


Навчіться вибирати слова

SEO- фахівець заходить у бар, бари, шинок, вечірка, відпочинок, нічний клуб, міні-бар, барний стілець, таверна, паб, пиво.

Жарт про SEO-фахівця, який займається оптимізацією сайту з метою підняти його якомога вище в результатах пошуку. Одне з його основних завдань – належним чином описати сайт відповідно до контенту і визначити ключові слова.

Грамотна пошукова оптимізація визначає частину успіху веб-проекту, але не варто забувати, що ключ до підвищення його ефективності – системний підхід. Ми писали про це раніше.


І це мине

Я знатиму, чого  конкретно хочу, після того, як це побачу.

Ви можете робити ПЗ для себе, друзів, компанії, на яку працюєте, або для своїх клієнтів як фрілансер. Головне, пам’ятаєте про те, що навіть якщо за час розробки була створена специфікація, близька до ідеальної, єдине, у чому можна бути впевненим, – це зміни.

Частина 2. Про будні програміста

Програмне забезпечення пожирає світ.

Марк Андрессен

Перші слова

Програміст-початківець заходить у бар, озирається і говорить: “Hello, World!

У книгах і керівництві з програмування поширена практика – використати виведення фрази “Hello, World!” для демонстрації базових концепцій мови.

На сайті Hello World Quiz розміщена вікторина – спробуйте вгадати, на якій мові програмування написаний скрипт, що виводить привіт світу.


Вибір мови програмування

– Тук-тук.

– Хто там?

Дуже довга пауза.

– Java.

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

Є такий популярний вислів: “Люди не хочуть купувати дриль, їм потрібна дірка в стіні”. Дриль потрібний для того, щоб виконати завдання, але головне – яке завдання. Те саме стосується багатьох мов програмування.

Популярні МП залежно від цілей розробки :

  • веб: Python, PHP, Ruby, JavaScript;
  • мобільні додатки під iOS (iPhone, iPad): Objective-C, Swift;
  • мобільні додатки під Android: Java;
  • операційні системи: C, C++;
  • ігри: C++.

Код читають не комп’ютери, а люди

Коли я це писав, тільки я і Бог знали, що я роблю. Зараз тільки Бог.

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

Microsoft ділиться прикладом: на Windows XP ще можна було знайти гру “Пінбол 3D”, але в пізніші версії вона не ввійшла саме тому, що код не відрізнявся якістю і не супроводжувався необхідною документацією. Програмісти самі не могли зрозуміти, чому реалізовану гру, в результаті  виявилося простіше відняти у користувачів, ніж портувати.

Корисні статті про написання якісного коду: 16 кращих практик, 15 правил оформлення коду на C і на C++, як писати якісний код без великої кількості коментарів.


Від сортування чисел до штучного інтелекту

Програміст використовує слово “алгоритм”, коли не хоче пояснювати, що саме він зробив.

Алгоритм – це чітка інструкція з певним порядком дій. Результат грамотно реалізованого алгоритму завжди буде тим самим.

Знання засадничих положень цієї теми корисне у будь-якій сфері діяльності. Передусім має сенс ознайомитися з алгоритмами пошуку і сортування даних – рекомендуємо для цього прочитати нашу популярну серію статей для початківців.


Використайте логіку

Чоловік відправив дружину-програміста до магазину і сказав: “Візьми батон хліба. Якщо там будуть яйця, то візьми десяток”. Дружина повертається з десятьма батонами і повідомляє: “Там були яйця”.

Ключове слово в цьому жарті – “якщо”. Воно натякає на оператора if, умовну інструкцію, яка є у більшості мов програмування.

Ось приклад алгоритму із заварювання чаю з використанням цієї інструкції (природною мовою):

  1. Якщо чайник не містить води, налийте воду в чайник.
  2. Підключіть чайник до живлення і включіть.
  3. Якщо чайник для заварки не порожній, спустошіть чайник для заварки.
  4. Помістіть чайне листя в чайник для заварки.
  5. Якщо вода в чайнику не кипить, перейдіть до кроку 2.
  6. Вимкніть чайник.
  7. Налийте воду з чайника в чайник для заварки.

Менше велосипедів

У Чака Норріса є улюблений шаблон проектування – це “Удар Чака Норріса ногою з розвороту”.

Шаблони проектування, чи патерни – перевірені способи розв’язання проблем, що часто зустрічаються. Це не фрагменти коду, які можна скопипастити у свій проект, а детальне пояснення методів.

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


Навіщо тобі два квитки в кіно, якщо ти йдеш туди один

Оптиміст скаже, що склянка наполовину повна, песиміст – що вона наполовину порожня. Інженер скаже, що розмір склянки вдвічі більший, ніж треба.

При створенні ПЗ треба розуміти, на яких девайсах воно використовуватиметься, і враховуватиме обмеження складових (у першу чергу CPU – центрального процесора і RAM – оперативної пам’яті).

Зараз запам’ятовуючі пристрої, коштують відносно дешево, а центральні процесори вирізняються більш високою продуктивністю порівняно з тими, які створювалися ще кілька років тому. Було пораховано, що складання iPhone у 1991 році коштувало близько $ 3,5 млн при вартості RAM близько $1,44 млн.


Умій працювати в команді

Чув жарт про Git від кількох людей, і у кожного була своя версія.

Git – популярна система контролю версій (VCS). Одна з можливостей, які вона надає, – зберігання локальної копії і створення своєї версії репозиторія.

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


Середовище розробки

Прим. перекл. Оригінал з поясненнями

Why programmers like UNIX? unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep.

UNIX – операційна система, розроблена в Bell Labs 1969 року. Слова, наведені вище, – це частина команд, з якими можна звертатися до ОС. Наприклад, unzip використовується для розпаковування файлів. Жарт побудований на не дуже пристойній неперекладній грі слів.

Ефективність ОС залежить від технологій, які використовуються в конкретному проекті, наприклад, для створення iOS-додатків доцільніше macOS. При роботі над спільним проектом також великого значення набуває вибір інтегрованого середовища розробки (IDE), системи контролю версій та інструментів для менеджменту (наприклад, Jira).


Як розв’язувати проблеми?

;

Чемпіон гри в хованки.

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

Середовище розробки варто вибирати виходячи з використовуваної технології, наприклад, для створення iOS- додатків органічним вибором буде XCode. Крім того, в Мережі є багато корисних ресурсів, які допоможуть розв’язати проблеми, що постають. Одна з найпопулярніших – Stack Overflow.


Що поставлено на кін?

Свиня йде по дорозі. Курка дивиться на неї і говорить: “А давай відкриємо ресторан”! Свиня дивиться на курку і відповідає: “Блискуча ідея, і як ти хочеш його назвати?“. Курка думає і говорить: “Чом би не назвати “Яєчня з беконом?”. “Так не піде, – відповідає свиня, – адже тоді мені доведеться повністю присвятити себе проекту, а ти будеш залучена тільки частково”.

Як пояснює Вікіпедія, за методикою Scrum у виробничому процесі є певні ролі, розбиті на 2 групи “свиней” і “курей”. Свині від початку до кінця створюють продукт, тоді як кури в ньому зацікавлені, але їм в цілому все одно, буде проект вдалим або ні – на них це мало відіб’ється. Вимоги, побажання, ідеї і вплив курей беруться до уваги, але їм не дозволяють безпосередньо включатися в хід скрам-проекта.

До “свиней” відносяться власник продукту (Product Owner), скрам-мастер (Scrum Master) і команда розробки (Development Team). Додаткові ролі “курей” займають користувачі (Users), клієнти і продавці (Stakeholders), керівники (Managers) і експерти-консультанти (Consulting Experts).


Мудрість натовпу

Блондинка, алкоголік та інопланетянин заходять у бар, але це бар Microsoft, тому він зачинений.

У 90-х і на початку 2000-х Microsoft була закритою компанією і, як багато великих корпорацій, суворо охороняла секрети розробки. На противагу такому підходу з’явився рух Open Source, адепти якого створюють проекти з відкритим вихідним кодом.

Зараз ситуація міняється і Microsoft створює деякі проекти під прапором відкритої розробки. Інші великі компанії також підтримують рух – одним з найактивніших учасників є Google, яка нещодавно зібрала всі свої open source проекти під одним http-дахом.

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

У нас є серія підбірок з кращими проектами, у яких варто взяти участь, щоб долучитися до руху Open Source: на JavaScript, Java і C#, C і C++, Python.


Головне – не втрачати голову

Люди поділяються на два типи: “я роблю бекапи” і “я зроблю бекапи”.

Бекап – це резервне копіювання даних, яке в аварійному випадку може допомогти відновити ПЗ. Робити бекапи – дуже корисна практика.

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

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

Частина 3. Про ці Ваші компуктери

Комп’ютери некорисні. Вони можуть тільки давати відповіді.

– Пабло Пікассо

Як ми спілкуємося з комп’ютерами?

На світі є 10 типів людей: ті, хто розуміє двійкову систему числення, і ті, хто не розуміє.

Класичний бородатий жарт. У двійкової системи є всього дві цифри: 0 і 1. Число 10 – це двійкове представлення десяткового числа 2, тому в жарті, наведеному вище, згадані два типи людей.

Використання бінарного коду – основа комп’ютерних обчислень, до того ж дуже ефективна. Стан 0 і 1 може бути виражений через знижену і підвищену напругу.


Представлення інформації

Прим. перекл. Оригінал з поясненнями

A guy walks into a bar and asks for 1.4 root beers. The bartender says “I’ ll have to charge you extra, that’s a root beer float“.

The guy says “In that case, better make it a double“.

Комп’ютери використовують бінарний код для зберігання в пам’яті потоку нулів і одиниць. Завдання програміста – пояснити машині, як цей потік інтерпретувати. Наприклад, код 1000001 може зберігати букву А або ціле число 65.

Спробуємо розібратися в жарті. І float, і double – форми представлення даних “з плаваючою точкою”, вони використовуються в комп’ютері для зберігання дробових чисел. Юнак заходить до бару і просить налити 1,4 кореневого пива (root beer). Бармен йому говорить, що візьме з нього більше грошей, оскільки він просить шипучку (root beer float). “Тоді краще налийте подвійну порцію (double), ” – відповідає юнак.

Тип double часто є кращим вибором порівняно з float, оскільки він забезпечує велику точність (але і займає більше пам’яті). Щоб більше дізнатися про типи даних, прочитайте нашу статтю про статичну і динамічну типізацію.


Ти для мене завжди будеш на першому місці

У комп’ютерних науках є дві складнощі: інвалідація кеша, найменування і помилка на одиницю.

Помилка на одиницю, чи помилка неврахованої одиниці (off-by-one error) часто зустрічається, коли програміст помиляється, відлічуючи початок послідовності з одиниці, як це зазвичай роблять люди. Проблема в тому, що індексація масивів у багатьох мовах програмування розпочинається з нуля, як в жарті вище: 0, 1, 2.

Тут обіграна відома цитата Філа Карлтона: “У комп’ютерних науках є дві складнощі: інвалідація кеша і найменування” (“There are only two hard things in Computer Science: cache invalidation and naming things”).


Знай концепції, які використовуєш

– Чи є об’єктно орієнтований спосіб стати багатим?

– Так, спадкоємність.

У 1994 році Стів Джобс давав інтерв’ю журналу The Rolling Stone.

Джеф Гуделл: Поясніть, будь ласка, що таке об’єктно орієнтований підхід, використовуючи прості терміни.

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

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

Ви не маєте уявлення, у який спосіб і які саме кроки я виконав. Ви не знаєте про те, що є пральня. Можливо, Ви розмовляєте французькою і не можете взяти таксі, бо Вам нічим за нього заплатити, доларів у Вас немає. Проте я знав, як усе це зробити. Однак Вам ні до чого знати про це. Вся комплексність була прихована в мені, і ми змогли взаємодіяти на високому рівні абстракції. У цьому суть об’єктів – вони сполучають у собі інкапсуляцію структурної складності і високорівневий інтерфейс.

Детальніше про принципи ТОП можна прочитати в нашій вступній статті.


Рекурсія

Можливо, Ви мали на увазі: рекурсія.

Якщо ввести в пошук Google запит “рекурсія”, він натомість запропонує Вам вивести результати за тим самим запитом. Це не помилка, а жарт, що обіграє поняття: рекурсія визначає функцію, яка здатна викликати сама себе.


У пошуках відповідностей

Питання: що один регулярний вираз говорить іншому?

Відповідь: .+

Регулярні вирази (Regular Expressions, RegExp) – це формальна мова, яка використовується для роботи з підрядками: за допомогою його можна здійснювати, наприклад, пошук і перевірку на відповідність шаблону.

Шаблон .+ означає “що завгодно”, а точніше “будь-який символ (.) один або більше разів (+) “.

Новачкам пропонуємо прочитати вступну статтю про регулярні вирази.


Хто стоїть на захисті даних?

Заходить хеш-сума у бар і говорить: “Будьте ласкаві, сіль”.

Одне з базових правил безпеки – не зберігати паролі в незашифрованому вигляді.

Хеш-сума (хеш, хеш-код) – це рядок фіксованої довжини (найчастіше в шістнадцятиричному представленні), в яку перетворюється текстовий пароль. Наприклад, 7dd987f846400079f4b03c058365a4869047b4a0. Хеші зберігаються у базі даних. Маючи в розпорядженні тільки хеш, зловмисник практично ніколи не може відтворити пароль, установлений користувачем. Хеші використовуються для ідентифікації, пошуку даних і перевірки їх на цілісність.

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


Долаючи мовний бар’єр

Прим. перекл. Оригінал з поясненнями

Q: According to Sigmund Freud, what comes between fear and sex?

A: Fünf.

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

У наш час за створення ПЗ у переважній більшості випадків треба орієнтуватися на клієнтів по всьому світу, отже, робити його доступним на декількох мовах. Кодування зазвичай створюються під конкретну мову або групу мов. Наприклад, Windows – 1250 використовується для представлення текстів, написаних на мовах Центральної Європи. Необхідною практикою є використання кодувань, що покривають більшу кількість символів, алфавітів та іконок, – наприклад, UTF – 8.


Пропонуємо пройти тест, щоб дізнатися, яка мова програмування Вам підходить, і розпочати її вивчення.

Джерело: Eat the World

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *