Розробник Джозеф Круз замислився над тим, чому в університетах досі вивчають мови C та C++. Пропонуємо вам переклад його його авторського блогу від нашої редакції. Далі — слово автору.
Такі мови, як Java, C#, Python та інші, насправді настільки «продезінфікували» розробку, встановивши обмеження (які найчастіше є безсоромною брехнею) та інструменти для «полегшення життя» розробника, що «будь-хто» може здаватися «суперкомпетентним» у цих мовах, ігноруючи навіть базові принципи, які вони використовують, і будучи абсолютно нездатним встановити зв’язок між дизайном (отриманим на основі аналізу потреб) та кодом.
Поговоріть з користувачем Java або C# про LSP, наприклад, або будь-який принцип SOLID, і він, ймовірно, подивиться на вас широко розплющеними очима.
Спробуйте пояснити йому, що ви не можете — згідно з LSP — зробити клас Square успадкованим від класу Rectangle, незважаючи на те, що всі вивчили в початковій школі, що «квадрат — це прямокутник», і він подумає, що ви збожеволіли.
Спробуйте пояснити йому, що дрібнозернисте управління пам’яттю все ще особливо важливе, а він відповість, що «на щастя, за мене це робить збирач сміття».
C і C++ — одні з небагатьох мов, які мають зовсім іншу філософію в цьому питанні.
Для них, якщо якась техніка вважається (ймовірно, справедливо) небезпечною, але, незважаючи ні на що, вона представляє «великий інтерес», навіть якщо тільки в «певних дуже специфічних обставинах», її варто запропонувати.
Звичайно, це означає, що розробник повинен знати, що він робить, коли вирішує використовувати цю техніку; що розробник повинен приймати рішення про використання цієї техніки «з повним знанням фактів», тому що це виявляється «найменш поганим можливим рішенням» (якщо не «найкращим»).
Справа в тому, що для того, щоб бути по-справжньому компетентним в C або C++, розробник повинен знати — краще, опанувати — принципи, які дозволять йому перейти від проектування до коду, що він повинен вміти приймати рішення «з повним знанням фактів», і що всі свої рішення він повинен вміти обґрунтовувати через повагу до принципів проектування.
Ще краще, компетентний розробник C або C++ буде знати, що принципами проектування будуть «GO / NO GO», які існують не для того, щоб виправдати рішення «постфактум», а для того, щоб дозволити нам прийняти правильне рішення: якщо принцип дотримується, ми «робимо крок далі» до позитивного рішення, якщо він не дотримується, ми остаточно відмовляємося від рішення, тому що ніщо в мові не дозволить нам перетворити погане рішення в хороше «як за помахом чарівної палички».
Зрештою, розробники, які набули «певного рівня компетентності» в цих мовах, зможуть без проблем перейти на інші, більш вільні мови, і після цього будуть ще більш компетентними.
Хоча протилежне є абсолютно невірним: навіть найкомпетентніші розробники на Java, Python або C# регулярно виявляються «кричущо некомпетентними» в C або C++, «просто» тому, що вони не «звикли» приймати свої рішення на основі принципів проектування.
Тому я вважаю — оскільки я ніколи не вчився в університеті — що якщо С і С++ і викладають, то лише для того, щоб змусити студента набути «певного рівня компетентності», змусити його виробити звичку ставити «правильні питання» в потрібний час і правильно засвоїти принципи проектування.
Можливо, таке навчання «не влучає в ціль», бо так важко досягти «певного рівня компетентності» за кілька тижнів, або навіть тому, що це навчання відбуватиметься після інших, простіших мов, і «погані звички» вже будуть сформовані.
Але це вже інша дискусія.
Черговий російський обстріл Харкова, який стався 22 жовтня, призвів до пошкодження будівлі Європейського інноваційного хабу,…
Після того, як кілька тижнів тому Microsoft оголосила про значне підвищення цін на свої консолі…
Після початку повномасштабного вторгнення українські ІТ-компанії стали природними партнерами армії. Для цього у них є…
Соцмережа X розширює закрите бета-тестування плану оплати за доступ до API для більшої кількості розробників.…
Хмарна платформа розробки, тестування та розгортання Google AI Studio отримала оновлення інтерфейсу та функцій, які…
OpenAI офіційно представила новий браузер під назвою ChatGPT Atlas. Він вже доступний для платформи macOS,…