понедельник, 6 января 2014 г.

ООП

Нет, объектно-ориентированное программирование - это зло. Особенно для тех, кто только начинает программировать.

Ведь ООП очень похоже на конструктор. Возьмем например, Лего. Очень красивые кубики, параллелепипиды и прочие несложные фигурки, ярких, привлекательных цветов, которые так нравятся детям. Они легко соединятся и разъединяются (ну, разъединяются, может, и не столь легко), из них можно собрать много всяких разных игрушек, моделирующих предметы реального мира. Я и сам помню, как в детском саду меня привлекали подобные конструкторы. Конечно, в советские временя Лего купить было невозможно, но были подобные поделки из соц. лагеря, хуже по качеству конечно, но и их было не достать. Как же мне хотелось тогда иметь такой конструктор :).

Но детство рано или поздно кончается. А вместе с ним и интерес к Лего. Нет, конечно не у всех. Кто-то и до старости с радостью самозабвенно играет в эти цветастые кубики. Но большиство теряет к ним интерес.
Почему? Мне кажется потому, что построенные игрушки статичны. У них нет поведения, поэтому, собрав тысячи разных форм, становится просто скучно.

В отличие от Лего, ООП гораздо богаче. У объектов есть поведение! Но, к сожалению, начинающие программисты не умеют его описывать. То ли потому, что их завлекает легкость конструирования программ из готовых деталей классов, то ли потому, что они еще так и не выросли из детсадовских штанишек.

Мне кажется, что использование только готовых классов, без описания нового поведение, существенно обедняет возможности программистов. Фактически, от объектно-ориентированной парадигмы остается только объектная. Программист, научившийся писать программы, пользуясь только готовыми классами и компонентами, максимум готовый описать поведение в рамках нескольких операторов присваивания, подобен низкоквалифицированному рабочему.

Поэтому учить программированию надо начинать именно с основ, с того, как создается более-менее сложное поведение, т.е. со структурного программирования. И только твердо освоив эту часть, можно переходить на более высокий уровень, стать не просто рабочим или техником программирования, а мастером своего дела.

Откуда уши растут?

А растут они из практики по курсу "Управление данными". В рамках курса изучается процедурный язык Interbse. Это очень простенький и компактный язык программирования, я бы сказал, даже минималистский. Ну и было задание там такое задание.


Написать процедуру, которая возвращает человека и список его контактов в виде одной строки из следующей таблицы: контакты(человек, контакт, тип контакта). У одного человека может быть много контактов, каждый храниться отдельной записью. Единственная хитрость - в строке контакты должны быть сгруппированы по типам: сначала контакты одного типа, затем другого и так далее. В рамках группы контакты отделяются друг от друга запятыми, группы контактов отделяются точкой запятой. 

В общем, на мой вкус, задание простейшее, так, что бы немного освоится с процедурным языком.

И вот подходит ко мне студент и говорит, что не может он справиться с этим заданием. Говорит, что в процедурном языке нет классов, вот были бы классы, он бы легко с ним справился. А без классов ну никак не получается. Это несколько меня озадачило, ведь задача реально простая... И классы тут вообще не пришей рукав к  звезде...


Ну, значит, я предлагаю ему вариант решения: отсортировать таблицу по типу контакта, обходя полученный набор записей, запоминать во временной переменной прошлый тип контакта; если текущий отличается от прошлого то писать в строку точку с запятой, иначе - запятую.

Тут студент удивил меня второй раз. Говорит: "Я так пробовал, у меня какая-то ошибка возникла". А вот это говорит о некоторой инфантильности нынешних студентов. Вместо того, что бы разобраться, что это за ошибка и как от нее избавиться, они просто отказываются сразу от метода решения.

Нет, господа студенты, знания не даются просто так. Они, сволочи, сопротивляются и требуют усилий для их освоения. Так что не сдавайтесь, а учитесь и дерзайте.

Комментариев нет:

Отправить комментарий