deep-econom (deep_econom) wrote,
deep-econom
deep_econom

взгляд на путь России в IT-индустрии

или Как готовить программистов? И каких готовить?

много букв


=========================
Как готовить программистов? И каких готовить?

В личной переписке мне и группе товарищей были заданы вопросы (они цитируются). Я написал ответ. И решил это дело опубликовать еще и сюда. Вдруг кому-то интересно. Далее мое письмо:

День добрый, всем!

> 1) Мне интересно, какие разделы математики нужны сейчас программистам.

> 3) Какие разделы математики могут программистам понадобиться лет через 5-10?

Вот то, чему учили в СССР в 1975 году (то есть не 5–10 лет, а 45–50 лет назад) в МГУ имени М.В.Ломоносова на ВМиК, то мне до сих пор, как программисту, до сих пор в аккурат. Этому и учить. Еще на полвека хватит.

Матан, Функан, Теорвер, Линейсная алгебра, Логика, Дискретная математика и т.п.

А бы усилил (ну, когда преподаю, то уже без частички «бы» — просто делаю) вокруг теоретических основ информатики (пардон, это для меня математика): всякое из книжки «Современная прикладная алгебра»; поглубже давать графы; поглубже теорию множеств; поглубже теорию вычислимости; метавычисления (для меня это математика), грамматики и рядом; теоретические аспекты тестирования и верификации.

> 2) Какие разделы математики нужны программистам с доказательствами, а какие - без? М.б. все без доказательств? Если программист умеет доказывать теоремы, то он, м.б. легче усваивает новые для него математические формулировки, м.б. ему понятнее и легче запоминаются какие-то математические определения и алгоритмы?

Это провокация!

> Сколько нужно программистов, понимающих доказательства, а сколько — могут обойтись?

А это правильное уточнение провокации.

Ответ такой: а Вы на какую страну собираетесь работать? Дальше станет ясно.

======================

Вообще про программирование ;-) Своим студентам я всегда поясняю: программирование это наука, искусство и ремесло.

1. Программирование как наука

Науку надо изучать как науку, классическим образом. И программирование как наука, это математика. И вопрос надо ли «программистов учить математике?» — странный!

Программирование как наука — это математика, это медленно изменяемая платформа всего остального программирования (науки, ремесла и искусства). Поэтому, если этот фундамент заложен правильно 45–50 лет назад, то его хватает и сейчас.

Позже я немного расскажу про «как учить в идеале».

2. Программирование как ремесло.

Ремесло меняется быстро. Это текущие стандарты, языки, протоколы, профессиональные шаблоны, библиотеки, инструменты, идиоматические обороты речи в коде.

В целом, если студент получил нормально п.1, то он сам освоит этот самый п.2. И в течении жизни будет осваивать и дальше, по мере перемен в ремесле. Но при соблюдении некоторых условий (ниже).

Как учат ремеслу? Как учат кузнечному делу? Отдают ребенка в подмастерья кузнецу-виртуозу. Мастер греет подкову и маленьким молоточком указывает, куда бить. Подмастерье со всей молодой дури лупит туда большим молотом. На третий год он понимает, какой цвет металла о какой пластичности сигнализирует, где и как надо вмазать и т.д. Он осваивает ремесло.

Программированию как ремеслу надо учить только на практике. Но есть заковыка. Программирование (IT вообще) быстро развивается. Поэтому я жутко злюсь, когда слышу «мы обучаем передовым современным технологиям». Господа, к моменту выпуска ваш выпускник в совершенстве освоит … уже устаревшие технологии!

Что делать? Учить надо перспективным технологиям. Тем, которых нет, которые появятся как раз к моменту выхода из вуза. Это возможно? Да. В идеале при помощи машины времени — забрасывать студентов на 4–5 лет вперед, изучать перспективные технологии. Но пока машины времени нет, то студентов (всех! даже самых маленьких) надо погружать подмастерьями к мастерам в проекты, в которых ведутся исследования и разработки этих самых перспективных, пока еще не существующих, технологий. К выпуску знания студентов будут актуальными.

Исследования и разработки перспективных технологий. R&D. Обычно R в научном коллективе, а D в бизнесе. Один вуз не справится. Ему нужны партнеры, где ведутся не современные, а ПЕРСПЕКТИВНЫЕ R&D (advanced research, две буквы из DARPA).

Мы так и делаем. Погружаем в перспективные R&D.

3. Программирование как искусство

Как изучают искусство? Студентов водят в музеи, где они созерцают жемчужины (перлы). Oбсуждать и анализировать достаточно глупо: бывает трудно понять, как маэстро дошел до такого произведения... Ну, а дальше нужно снимать копии, ходить на пленеры, делать этюды (ниже это слово всплывет), подражать и опять созерцать...

Есть в программировании такие перлы? Есть произведения искусства? Где наши музеи?... Немного, но есть. Конечно «Искусство программирования» Кнута. Или «Этюды для программистов». И еще полезно читать просто тексты и размышления великих. Любые тексты великих: Дейскстра, Вирт, Кнут и т.д.

В IT-университетах изучать искусство тяжело. Но я своим студентам, как минимум, настоятельно рекомендую для самостоятельного созерцания эти книги.

======================

Письмо Бориса касалось пункта 1, в общем-то.

Программистский спецназ получается только при упертой, глубокой реализации всех трех пунктов 1+2+3.

Вопрос: можно минимизировать 1 (и без доказательств), дебилизировать 2 и выкинуть 3. Ответ: можно. Спецназ не получится, а пехота — получится.

Вопрос: сколько надо спецмаза и сколько пехоты? Ответ: думаю 1:10. В хороших денежных наукоемких конкурентно–превосходящих проектах команда будет содержать примерно такие пропорции. Спецназ выполняет наукоемкий дизайн, архитектуру, ядро, скелет… Пехота на кости наращивает мясо и завязывает бантики.

Вопрос: как учить программистов? Кого готовить? Спецназа или пехоту? Ответ такой: а Вы на какую страну собираетесь работать?

Поясняю: Индия уже готовит пехоту. Много пехоты. И Китай готовит много пехоты (но не только ее). Население Индии и Китая составляет …(впишите)… Эти две страны покроют все необходимые потребности мира в IT-пехоте. Шанс для Российского IT-образования только в одном: готовить спецназ.

Пример: мой аспирант — разгильдяй, не защитился,— но он какой-никакой спецназ. Он создает компанию, набирает туда ребят однокурсников (крепких, какой-никакой спецназ). Берет заказы на программирование. Но не ширпотреб, а наукоемкие ого-го какие проекты. Такие, которые просто толпа пехоты из Индии не тянет. Берет заказ, разрабатывает скелет и затем нанимает пехоту из Индии. Все!

Это и есть путь России в IT-индустрии. И другого нет.

======================

Последнее: как учить спецназ математике? С доказательтсвами или нет?

Ответ: спецназ должен не обладать фактами (компетенциями, навыками), а он должен обладать ровно одним навыком: уметь решать проблемы. Любые проблемы. Поэтому, как минимум, он должен знать как именно Дирихлье, Роль и прочие Нью-Тоны решали проблемы поиска доказательства свих теорем. Он должен знать, как устроены эти доказательства. Понимать механизмы поиска решения проблем этими мужчинами. Он должен уметь повторять поиск доказательств.

Это минимум. А оптимум, это когда ему не рассказывают доказательства. Вообще. Ни одного. Ему даются определение, условия теорем и он обязан сам построить доказательства. Учись находить решения проблем. Сам. Построил правильно доказательство? Молодец! Вот тебе еще пяток определений, и десяток теорем. Доказывай!

Так можно? Да, так можно. Это методика «листочки» Николая Николаевича Константинова (Википедия его знает). Студент не зубрит доказательство. Он их сам находит. И все, это доказательство в мозгу на всю жизнь. Экзамен не нужен.

Этот метод применяли ко мне. Я так прошел весь первый год матана в старших классах школы № 7. А не забуду теорему Роля, потому, что это теорема Абрамова! Не Роль, а я сам ее доказал. И все остальные теоремы матана!

Раздаются листочки с определениями и … вроде как с задачками. Каждая задачка трудная, но решаема. Цепочка задачек дает теорему. И никаких подсказок, пояснений, как найти решения задачек. И никакой помощи. Никаких лекций. Никаких лекторов. Никаких семинаров. К тебе «на уроке» подходит наставник: «Ну, что уже решил?» Ты рассказываешь свои решения. Он про каждое говорит скупо: «принято»; «не принято, ищи ошибки». Самое многословное: «не принято, вот тебе контрпример…».

Я знаю, что в России есть готовые коллекции листочков по многим курсам математики. Это безценный материал. Разработка 197х. Не нужны лекторы и семинаристы. Только наставники. Гениальная и эффективная методика. И эта методика находится в прямом противоречии всем мыслимым требованиям Рособрнадзора: нет лекций, нет семинаров и т.п. Горячо говорил про это безобразие в Госдуме совсем недавно.

======================
Ох. Много букв. Закончу.
Всего доброго,
Сергей Абрамов
https://www.facebook.com/sergei.abramov.96/posts/10215640452860742
================================================================
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 9 comments