Розробник Джозеф Круз замислився над тим, чому в університетах досі вивчають мови 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++, «просто» тому, що вони не «звикли» приймати свої рішення на основі принципів проектування.
Тому я вважаю — оскільки я ніколи не вчився в університеті — що якщо С і С++ і викладають, то лише для того, щоб змусити студента набути «певного рівня компетентності», змусити його виробити звичку ставити «правильні питання» в потрібний час і правильно засвоїти принципи проектування.
Можливо, таке навчання «не влучає в ціль», бо так важко досягти «певного рівня компетентності» за кілька тижнів, або навіть тому, що це навчання відбуватиметься після інших, простіших мов, і «погані звички» вже будуть сформовані.
Але це вже інша дискусія.
Sigma Software, що є підрозділом Sigma Software Group, заявила про зміну генерального директора. Компанію очолить…
Microsoft готує додати у Windows 11 новий «легкий» текстовий редактор Edit. Він важить всього 230…
Компанія OpenAI у найближчі тижні планує випустити оновлення для тарифного плану ChatGPT Pro, доступ до…
Керівники компаній часто вводять в оману, розповідаючи, що штучний інтелект лише підвищить продуктивність і не…
Уряд США пропонує до $10 мільйонів за інформацію про місцезнаходження розробника шкідливого програмного забезпечення RedLine…
Google оголосила про оновлення своєї LLM-моделі Gemini 2.5 Pro, яка, за твердженням компанії, стала краще…