Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Преподаете или преподавали ли вы языки программирования и какие? В чем их плюсы и минусы для учеников?

Расскажите о своем опыте.

ОбразованиеПрограммирование+3
  · 4,5 K
кандидат физико-математических наук, математик, исследователь, data scientist, предпринима...  · 29 июн 2021  · novikovlabs.ru

Как таковые языки программирования не преподавал, только в составе более объемных предметов преподавал R и ds-stack для Python (pandas, numpy, scipy, sklearn, pytorch, keras, gensim, nltk).

По впечатлениям, могу сказать, что Python очень плох для объяснения Объектно ориентированного программирования (как минимум потому что в python нет никакой настоящей инкапсуляции, а полиморфизм в значительной степени уже заложен в динамическую типизацию). Он хорош для быстрой реализации кода в функциональном стиле, прототипирования и т.д. Иногда даже заставяляет рассуждать про ссылки, про копирование и глубокое копирование. Но там это просто нужно знать "как это работает", где нужно клонировать, а где и так сойдет. Python сделан не для программной инженерии, а для реализации конкретных прикладных задач, где баланс смещен в пользу "доказать что это в принципе возможно за приемлемое время", а не "сделать быстрый оптимизированный код".

Таким образом на Python хорошо учиться на уровне изучения алгоритмов и структур данных, пока, скажем, не наступит раздел, где привлекаются понятия из аллокации памяти.

Инструменты аллокации памяти вообще хорошо бы изучать на чистом С даже, а не на С++.

Скажем, для изучения ООП я не вижу разницы между изучение ООП на Java или на C++. Может быть, кто-то видит.

2 эксперта согласны
Да преподавал и активно продолжаю - я верю что программирование доступно для всех! "Какой выбрать язык?" - один из... Читать дальше

По моему нескромному мнению ООП надо обучать на ассемблере. Тогда меметичные конструкции не будут рождаться, не будет мистического зубрения видимости переменных(локальные - в окне стека после CALL , в небытии после RET ), не будет мегасофта, требующего гектаров памяти для тривиальных задач, будет четкое понимания разницы между нативной переменной, ссылкой и указателем.

И в принципе будет значительно упрощено вхождение в любой язык.

На начальном этапе за аллокацию памяти на С/С++ и думать не нужно-сотни килобайт, на современном ПК где гигабайты это можно игнорировать. На современных пк даже бесконечные циклы не так подвешивают как раньше.
@Евгений Никулов, вопрос на чем программировать. Для микроконтроллеров, например, вопрос до сих пор имеет место.
Я не фанат Python, но чтобы для справедливости:
  • в Python есть возможность создавать private (__foo), protected (_foo) и public (foo) методы, так что аргумент об инкапсуляции ваш более чем сомнительный
  • для того, чтобы демонстрировать полиморфизм, достаточно использовать хорошую IDE, способную понимать type hints и аннотировать код с type hints. В этом случае код мало чем будет отличаться от статически-типизированных языков и type checker вам будет подсвечивать все ошибки в design time
  • множественное наследование вкупе со всем вышеперечисленным делают Python довольно мощным ООП-языком, как мне кажется
@Dmitry Ovchinnikov,
1. только вот это вообще не то же самое, что под этим подрвзумевается в C++ или Java. Методы остаются доступными извне.
2. опять же, это не свойство самого Python - это свойство надстроек типа IDE. Так что называть это свойством языка - лукавство.
3. Вопрос про обучение. Можно ли научиться ООП на Java или C++ и перейти на Python, сохраняя идеалогию? В принципе можно. Можно ли упражняясь только в ООП на Python легко и безболезненно перейти на ООП на Java или С++? Что-то я сомневаюсь, что не придется серьезно доучиваться.
Меня зовут Тимур, я работаю в области образования более 4-х лет, специализируюсь на...  · 30 июн 2021
Да преподавал и активно продолжаю - я верю что программирование доступно для всех! "Какой выбрать язык?" - один из главных вопросов от детей и родителей... Большинство скажет Pyton и будут правы, НО упущение в начале типизации и работу с памятью родит много каши в более серьёзном программирование, которую потом предаться разжёвывать. Потому рекомендую любой Си подобный... Читать далее
В программировании с 1977 года. Последние года больше всего работаю в качестве системного...  · 28 окт 2021
LOGO, Basic, Pascal (на MacOS, с графикой), C++.
Описание плюсов/минусов для всех займет не одну страницу.
Но для младших/средних школьников, для всех, а не только для будущих программистов лучше всего LOGO и его аналоги.
работа на коммерцию и на фри-софтваре. прошлое: pascal, java, php, js, python, golang. на...  · 26 июн 2021
был забавный случай в моей жизни: за полгода до окончания школы, было 2-3 урока, когда я учил паскалю своих одноклассников, заместо учителя. трудность выбора языка на сегодняшний день заключается в том, что не хочется забить чужую голову бесполезными знаниями. если выбирать один язык с наиболее полным спектром парадигм - сегодня я бы выбрал D. - но его установка на... Читать далее
Интересно, почему D, а не, например, модный Rust?