Чому в університетах досі викладають C та C++
Розробник Джозеф Круз замислився над тим, чому в університетах досі вивчають мови 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++, «просто» тому, що вони не «звикли» приймати свої рішення на основі принципів проектування.
Тому я вважаю — оскільки я ніколи не вчився в університеті — що якщо С і С++ і викладають, то лише для того, щоб змусити студента набути «певного рівня компетентності», змусити його виробити звичку ставити «правильні питання» в потрібний час і правильно засвоїти принципи проектування.
Можливо, таке навчання «не влучає в ціль», бо так важко досягти «певного рівня компетентності» за кілька тижнів, або навіть тому, що це навчання відбуватиметься після інших, простіших мов, і «погані звички» вже будуть сформовані.
Але це вже інша дискусія.
Favbet Tech – це ІТ-компанія зі 100% украінською ДНК, що створює досконалі сервіси для iGaming і Betting з використанням передових технологіи та надає доступ до них. Favbet Tech розробляє інноваційне програмне забезпечення через складну багатокомпонентну платформу, яка здатна витримувати величезні навантаження та створювати унікальний досвід для гравців.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: