Чому в університетах досі викладають 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++, «просто» тому, що вони не «звикли» приймати свої рішення на основі принципів проектування.

Тому я вважаю — оскільки я ніколи не вчився в університеті — що якщо С і С++ і викладають, то лише для того, щоб змусити студента набути «певного рівня компетентності», змусити його виробити звичку ставити «правильні питання» в потрібний час і правильно засвоїти принципи проектування.

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

Але це вже інша дискусія.

Останні статті

Мова програмування Rust оновлена до версії 1.93

Команда Rust оновила мову програмування до версії 1.93. Новий реліз, який має коміти від 406…

23.01.2026

«Дія» отримає функціонал для пошуку роботи

Кабінет міністрів України погодив пілотний проєкт, за яким послуги Центрів зайнятості будуть оцифровані через систему…

23.01.2026

Microsoft представляє новий інструмент WinApp CLI, який спрощує розробку програм для Windows

Microsoft анонсувала публічну попередню версію WinApp CLI, інтерфейсу командного рядка з відкритим вихідним кодом. WinApp…

23.01.2026

JetBrains інтегрувала Codex в свої IDE та показала, як з ним працювати

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

23.01.2026

Міноборони України разом з Palantir починає тестування військових моделей штучного інтелекту

Державна платформа військових технологій BRAVE1 разом з Міністерством оборони України та за підтримки американської компанії…

23.01.2026

«Вони використовували вайб-кодинг»: хакер створив каталог «небезпечних додатків»

Анонімний хакер запустив «магазин небезпечних iOS-додатків» — публічний реєстр програм, швидко створених за допомогою вайб-кодингу.…

22.01.2026