CMU удаляет объектно-ориентированное программирование из своих курсов для новичков, потому что оно антимодульное и антипараллельное. Чем его заменить?
Это еще один из тех штормов в чашке чая, но он довольно интересен и дает полезную оценку того, где мы находимся в теории программирования.
В своем блоге профессор Роберт Харпер сообщает, что факультет компьютерных наук Университета Карнеги-Меллона (CMU) удаляет обязательное изучение O-O из учебной программы первокурсников. Причина, по которой он приводит, интересна:
«Объектно-ориентированное программирование полностью исключено из вводной учебной программы, поскольку оно является одновременно антимодульным и антипараллельным по самой своей природе и, следовательно, не подходит для современной учебной программы CS. Предлагаемый новый курс по методологии объектно-ориентированного проектирования будет предлагается на втором курсе для тех студентов, которые хотят изучать эту тему ».
Вы можете быть удивлены использованием «антимодульного» и «антипараллельного» в связи с ООП, который был разработан как модульный и на самом деле не помогает и не мешает параллельному программированию. Хотя верно то, что многие используемые ООП-языки могут работать лучше и с тем, и с другим, продвижение критики на один уровень дальше основной философии кажется шагом слишком далеко. Кроме того, существует довольно много объектно-ориентированных расширений, которые отлично справляются с параллельным программированием.
Два курса заменяют контент ООП. Один из них — «Принципы императивных вычислений». Угадайте, какой язык он использует? Это C и его подмножество. Если вы посмотрите заметки курса, то вы получите хорошее введение в алгоритмы, красиво выраженные в виде процедурного кода, дополненного утверждениями и инвариантами в комментариях. Это очень хорошо, но примечания курс мог бы прийти с 1970-х годов, и на самом деле не представляют собой шаг вперед или что-нибудь спорный. В самом деле, это действительно хорошая идея — обучить процедурному кодированию, прежде чем переходить на OPP — слишком многие программисты хороши в построении иерархий объектов, но не могут написать элегантный метод.
Второй касается функционального программирования, и вы не можете не прийти к выводу, что именно эта парадигма действительно вытесняет ООП из учебной программы. Курс преподается с использованием стандартного машинного обучения, который в настоящее время вряд ли является популярным или важным языком, но это не повод для отказа от его использования в качестве языка обучения. В примечаниях к классу одобряется функциональное программирование, потому что оно допускает проверку, параллелизм и абстракцию — все это правильно, но есть мало веских доказательств того, что функциональное программирование — это путь в будущее для мейнстрима программирования.
Что интересно, так это то, как это решение поляризовало взгляды. Есть некоторые (которые, очевидно, никогда не понимали идей в OPP), которые просто говорят: «Отлично — давайте все сметем». Кроме того, есть энтузиасты функционального программирования, которые думают, что это, очевидно, то, как все должно быть сделано. И, наконец, есть программисты, которые так долго используют ООП, что не могут вспомнить или представить себе, что когда-либо существовал другой способ, которым отказ казался ужасным, загадочным и каким-то образом неблагодарным.
Несомненно, сложно использовать объектно-ориентированный язык и подход для обучения начинающих создавать алгоритмы — слишком много накладных расходов, не имеющих ничего общего с алгоритмическими вычислениями. По этой причине использование C или другого процедурного языка имеет смысл как способ запустить мозг новичков. Тогда переход к объектам кажется естественным шагом, учитывая текущее состояние реального программирования. Добавьте функционал как дополнительный, чтобы дать студентам представление о том, что есть другие способы делать что-то, но не представляйте это как способ отказа от ООП.