Що таке "сучасне" програмування?

  1. Тім Менш, розробник програмного забезпечення
  2. Джеремі ДЕТС, 16 років в розробці ПО
  3. Корі Батлер, засновник Author. io

Про те, що таке "сучасне" програмування, поміркували користувачі сайту Quora . Розповідаємо про самих цікавих і корисних відповідях.

сайту Quora

Тім Менш, розробник програмного забезпечення

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

Сучасні і найбільш ефективні методи:

  1. Експерименти з новими мовами - це завжди цікаво, проте в той же час і непередбачувано. Тому перевагу варто віддати перевіреним і визнаним мов:
    • Мова Go почав широко використовуватися близько восьми років тому, проте за його спиною стоїть Google, тому ця мова досить швидко знаходить все більшу популярність і покращує свою продуктивність.
    • Мові Kotlin всього 7 років, і він також користується повною підтримкою компанії Google. Дана мова працює для розвиненої екосистеми JVM. При визначенні змінних, полів і т.д. Kotlin дозволяє вказати, чи може в них зберігатися посилання null, що значно підвищує безпеку і дозволяє уникнути помилок на мільярди доларів. Завдяки цій особливості, а також деяким іншим зручним і корисним функціям, в проектах для JVM при виборі мови остаточне рішення найчастіше приймається саме на користь Kotlin. Варто уточнити, що хоч Scala володіє схожим ряд переваг, однак він незрівнянно складний у порівнянні з Kotlin. В принципі, дотримуючись зазначених в цьому списку рекомендацій, ви також можете використовувати Java.
    • C ++, фактично, до сих пір є основним стандартом для системного програмування. Він часто використовується для написання коду ядра, а також для деяких драйверів, і навряд чи ця мова збирається зникнути найближчим часом.
    • C # - це чудова мова в тому випадку, якщо ви націлені на екосистему Microsoft, або використовуєте Unity або Xamarin. Якщо ви хочете більшого різноманіття функціоналу, тоді зверніть вашу увагу на F #.
    • TypeScript досить молодий, проте він може похвалитися підтримкою найвищого рівня з боку Microsoft. Він усуває настільки величезна кількість загроз при роботі з JavaScript, що його використання стає невід'ємною вимогою для розробки будь-якого сайту або Node.js.
    • Python слід використовувати тільки тоді, коли в ньому є необхідність. Наприклад, проекти для машинного навчання і невеликі скрипти для обробки даних - ось ті сфери, в яких Python проявить себе найкращим чином. Виходячи з відсутності у нього суворої типізації, я б наполегливо не радив його до використання в великих проектах.
  1. Після того, як мова обраний, вчіть його:
    • Кожен з мов, включених в мій список, продовжує розвиватися. Який би ви не вибрали, постарайтеся бути на гребені хвилі і в курсі всіх нових функцій.
    • Якщо ви зустрічаєте таку функцію, як «лямбда», і не розумієте її, тоді постарайтеся дізнатися по цій темі якомога більше, поки ваших знань не стане достатньо. Пошукайте приклади, відео або статті в інтернеті. Якщо ж ви не розберетеся, то в потрібний момент ви не будете володіти цим інструментом - ви навіть не зможете зрозуміти, де і що шукати.
  2. Замість сліпого наслідування чисто функціональним або об'єктно-орієнтованого підходу, краще все ж дотримуватися змішання парадигм:
    • Не всі шаблони проектування в ООП однаково хороші. Дотримуйтеся певної ієрархії.
    • Якщо це можливо, використовуйте функціональні патерни при перетворенні даних.
    • Незмінний інтерфейс може бути зручний у випадку з певними зразками даних. Використовуйте його в тому випадку, якщо він буде корисний. Не слід його використовувати, якщо він ще більше ускладнить вашу проблему.
  3. Використовуйте сучасний редактор / IDE:
    • Якщо ви використовуєте хороший редактор, то він зможе підказати вам, де закралася синтаксична помилка і яким чином можна її виправити. Інтегроване середовище розробки програм (IDE) покаже вам документи для використовуваної вами функції «member», допоможе вам з параметрами і вкаже на ваші помилки. Це безцінна допомога. Так чому б не скористатися нею.
  4. Відповідний інструментарій:
    • Git придбав неймовірну популярність. Просто використовуйте його.
    • Docker - це той інструмент, яким ви обов'язково повинні вміти користуватися.
    • docker-compose або kubernetes також повинні входити в список інструментів, якими ви володієте.
    • CI / CD: ви повинні знати, що означають ці акроніми, а ваші проекти повинні бути побудовані таким чином, щоб їх було легко розробляти і тестувати.

Джеремі ДЕТС, 16 років в розробці ПО

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

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

Наприклад, мови C # вже 17 років, і він піддавався змінам і доповненням вже 7 разів (ось-ось має вийти версія C # 8.0). За минулі роки компанія Microsoft виконала відмінну роботу, впроваджуючи в нього популярні і корисні функції. Наприклад, лямбда-вираз (C # 3.0), динамічне зв'язування (C # 4.0), асинхронні методи (C # 5.0) і т.д.

Крім того, за останні кілька років був повністю впроваджений шаблон проектування DI (впровадження залежності). В останніх прикладах фрейворков можна побачити DI всюди. Якщо розумно поєднувати нові функції мови і DI, то сучасний код на C # буде виглядати зовсім по-іншому, ніж код, який програмісти писали на цій же мові на початку 2000-х. Те ж саме, хоч і в меншому ступені, можна сказати про Java і інших популярних мовах.

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

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

У деяких випадках під цим поняттям мається на увазі цілковита реорганізація існуючої системи, яка і так непогано справляється з вартими перед нею завданнями, а значить, не потребує модернізації

Корі Батлер, засновник Author. io

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

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

Я багато писав про браузерах, які останні пару десятиліть працюють на JavaScript. Однак в минулому сервери не могли самі ініціювати комунікацію з браузером - вони могли тільки відповідати на його запит. І подібна модель диктувала певні правила, відповідно до яких існували і розвивалися інтернет-з'єднання. До створення ES5, в JavaScript не існувало такого концепту, як геттери / сеттери. Але все змінилося з введенням стандарту ECMA, після чого браузери стали підтримувати WebSockets / WebRTC / SSE.

WebSockets / WebRTC / SSE - це функції платформи, а не частина мови програмування. Тому для мене «сучасне» програмування включає в себе чисто написання коду, який буде взаємодіяти з ресурсами, до яких ми зовсім недавно отримали доступ.

Я б не сказав, що це таке вже точне правило, безперечно чинне на практиці. Але, на мій суто особистий погляд, неможливо назвати щось «сучасним», якщо воно має зворотну сумісність з платформою, введеної в експлуатацію 5 років тому. Я вважаю, що називати що-небудь передовим можна тільки в тому випадку, якщо воно було створено за останні 24 місяці.

Має на увазі чи «сучасне програмування», що необхідно буде використовувати нові трендові мови, наприклад, Rust?