• Как учат программистов в институтах (часть 3)

    Posted on May 20th, 2009 Александр Орлов 15 comments

    Я долго собирался написать третью часть мега-трилогии “Как учить программистов в институтах”, и вот, наконец, собрался. :) (Первые две части можно почитать вот тут: часть 1, часть 2.)

    Если отвечать вкратце, то никак. :) Не надо учить программистов в институтах. Сейчас поясню, почему.

    Давайте посмотрим, когда молодые люди и девушки идут работать в ИТ? Большинство идет работать на 2-3-м курсах.

    Что происходит далее? Далее молодые люди проводят по 30-40 часов на работе и по 10 в институте. Где они учатся больше-лучше-эффективней? Очевидно, на работе, где рядом работают реальные практики, а не далекие от жизни теоретики (коллеги-преподаватели не обижайтесь, я говорю не о вас; я знаю, что бывают исключения в академической среде, я говорю об общей картине). На работе, где ставятся реальные задачи, где используются последние технологии.

    Что это означает? Это означает, что знаний и навыков, полученных в школе + на первых двух курсах института + самообразования вполне достаточно, чтобы стартовать в работе. А дальше большинство навыков и знаний приходят через работу и тоже самообразование.

    Два года – это, извините, ПТУ. А все разговоры про культурологию, философию, этику и пр. – опять же, извините, в пользу бедных. Если человек заинтересуется вопросом – он этими темами овладеет. Особенно, если жизнь заставит. :) Если не заинтересован – бесполезно в него в институте это пихать.

    На самом деле, тенденция, которая наблюдается в последние N лет – молодые люди начинают работать раньше. В наше время еще были люди, которые не искали работу вплоть до 5-го или 6-го курса. Сейчас таких, по-моему, нет. Соответственно, мой прогноз – что быстрая одно-, двух-летняя программа обучения программистов или инженеров с практической направленностью – вот идеальное будущее нашей индустрии. К которому уже приходят в некоторых компаниях, где решения принимаются быстро. И к которому вряд ли в ближайшие годы придет наше система образования, потому что система слишком неподвижная.

     

    15 responses to “Как учат программистов в институтах (часть 3)”

    1. 2 года после школы – это техникумы. Они и сейчас есть. Так в чем же проблема? Вот в чем вопрос.

    2. Lilia Gorbachik

      Все-таки знания, которые приобретают после 2-3 курса тоже нужны.
      Применяя те или иные знания мы не всегда задумываемся: вот она, теория массового обслуживания в действии!!! просто решение не приходит само, нужна база.

    3. Нужен институт. Полноценный институт. Но обучение должно быть построено по другому.
      Посмотри на “Систему физтеха”. Она очень хорошо подходит для подготовки программистов.

    4. Я с Вами полностью согласен.

      Пример из жизни:
      Я закончил 11 классов. Пошел в техникум по специальности программист(это конечно не полное название). работал уже с 3-го курса(обучение после 11 классов выглядит так: 2,3,4 и выпуск). За 3 года очень много узнал, что явилось основополагающим в моей профессии. И все образование строилось именно на “потрогать”, “попробовать”, “новое” и тп…

      После окончания я поступил в университет с 1-го(тк пошел на бесплатное и это один из безболезненных способов “косить” от армии) и вот я сейчас “заканчиваю” 4-й курс, рабочего стажа у меня почти 6 лет.
      В университете именно “НЕ УЧАТ”(не будем отвлекаться на самообразование и другие способы познавания). Нет достойных преподавателей. Они есть. Но почему-то в других сферах, а те у кого действительно хотелось бы поучиться не ведут преподавательскую деятельность в виду оплаты труда, личного времени и других всевозможных отговорок.

      Про систему хотелось бы немного оспорить.
      Если обратить внимание не на совокупность предметов, а на их содержание и временную подачу(именно переместить основополагающие на начало когда есть запал, а “непонятную ересь” на конец образования, когда приходит осмысление этой “ереси”) вот именно тогда и можно получать более менее приличных специалистов. И это в некоторых образовательных учреждениях как раз сделано(именно в таком я получил свою сознательную 3-х летку).
      Смысл поста: Главное чтобы в преподаватели по нашей сфере шли с душой…

      PS: Если интересно самому автору. Сподвигло написание именно то чувство, о котором неоднократно упоминаете: желание принадлежности к индустрии.(Я ваш читатель уже почти пол года и прочитал все ваши статьи)

    5. Alexander Byndyu

      А я не соглашусь =)
      Учеба в институте дала мне очень много. Особенно курсовые и написание диплома. Возможно я бы и узнал о том же самом работая _вместо_, но тогда мои знания были бы не систематизированы. Особенно я благодарен преподавателям по курсам микропроцессорные системы, теория автоматов, высшая математика и базы данных.

    6. Давая такие рекомендации, необходимо задуматься о последствиях. К чему приведёт такой подход?

      Как тогда будут появляться новые языки/библиотеки/технологии/стандарты/методологии/парадигмы (ЯБТСМП) для создания программных продуктов? Почему эта стратегическая отрасль должна быть отдана в руки западных специалистов?!

      Как будут осваиваться предметные области, для которых требуется создавать ПО, на что будут крепиться новые знания?

      Кто на работе обучает принципам/законам/правилам, независящим ни от языка, ни от технологии? Взять хотя бы проблему анализа алгоритмов, построение распределённых систем или программирование параллельных процессов.

      Раньше у нас эта проблема обучения решалась как задача разделения:
      были ПТУ/техникумы, в которых готовили слесарей, автомехаников и т.д.
      И были университеты, в которых готовили инженеров/технологов и учёных, создающих новые технологии, продукты новых типов, новые знания, новые инструменты, пользоваться которыми потом обучали в ПТУ/техникуме.
      Не надо превращать университетское образование ИТ в ПТУ-ое образование ИТ. Это деградация в стратегической области.
      Знание и владение ЯБТСМП это такое же тактическое знание и владение инструментом, как знание и владение станком и технологией обработки материала (включает и разметку, и проектирование задуманного, и тестирование и т.д.). Поэтому к набору профессий, которые давались в ПТУ нужно добавить и кодировщика/настройщика/тестировщика/администратора с элементами проектирования. И вышки здесь действительно не нужно, она тут будет даже вредна. А вот определить пригодность процесса обработки к материалу, изобрести и просчитать технологические этапы – это требует вышки по обширному набору предметов.

      А вот для исследования проблемы предметной области, построения с 0 архитектуры, проектирования, интеграции систем, создания ЯБТСМП без вышки, сложных теоретических аппаратов, позволяющих рассчитать как параметры конструкции, так и последствия её использования никуда, и набором понятных требований тут не отделаться.
      Другое дело, что часто в прикладных задачах намного эффективнее создать специализированный под предметную область язык/технологию/библиотеку для решения её задач, чем использовать только готовые решения. Только почему-то очень многие нового языка боятся как огня. Собственно программирование это и делает: понятия предметной области отображаются на классы/методы/алгоритмы/имена переменных. Иначе задачу не решить. В результате в языке программирования появляются необходимые понятия для решения задачи предметной области. И от качества такого отображения напрямую зависит эффективность решений и адаптивность к новым задачам. Одновременно с этим, тот кто умеет создать ЯБТСМП, тот с лёгкостью осваивает и правильно использует новые ЯБТСМП в зависимости от практической задачи просто потому что на некотором уровне все ЯБТСМП для них одинаковы. Поэтому к таким специалистам не применима оценка профессионального уровня ни по количеству ЯБТСМП, которые он знает, ни, особенно, по времени их использования. Такие специалисты могут решать задачи новыми для них инструментами, порою лучше, чем это делают те, кто уже давно их использует (сталкиваюсь с этим постоянно, в результате долго и тяжело приходится подтягивать отстающих до нужного уровня).

      Резюме. Владение и применение ЯБТСМП для решения практических задач, производства конечного программного продукта – это образование по такой же профессии как слесарь, автомеханик и т.д., которое должно даваться в ПТУ/техникуме за 2-3 года. Создание ЯБТСМП – это образование по профессии, которое должно даваться в университете за 5-9 лет.

    7. aynvudo:
      Исходя из Вашей логике тут не делить, а плюсовать НЕОБХОДИМО
      (2-3)+(5-9)=7-12 лет должно получаться…
      Это тогда и будет отличный специалист…

      Завсегда получается так что если делить на эти 2 уровня, то 2-е не понимают первых, а первые вторых… что и зачем нужно и необходимо. А относя себя все же больше к 1-м(все что Вы написали мне понятно) могу сказать только что те кто получил специализацию инженер, в последующем напридумывает мусора без обдумывания последствий и первым мучаться придется.

      “были ПТУ/техникумы, в которых готовили слесарей, автомехаников и т.д.
      И были университеты, в которых готовили инженеров/технологов и учёных”: мне кажется что ключевое слово здесь “раньше”. На данный момент в большинстве так называемых ВУЗах от уровня преподаваня хочется плакать. И по факту они зачастую проигрывают тем же техникумам, которые не боятся НОВЫХ технологий и языков.

      хм, забавно получается как в анекдоте про сантехников: “ты учись пока я жив, а то так всю жизнь и будешь ключи подавать”.

    8. Spider:
      “Завсегда получается так что если делить на эти 2 уровня, то 2-е не понимают первых, а первые вторых… что и зачем нужно и необходимо.”
      Согласен, что чёткое деление недопустимо. Поэтому “… кодировщика/настройщика/тестировщика/администратора с элементами проектирования”.

      “тут не делить, а плюсовать”
      Тогда не будет соблюдено условие ограниченности необходимыми знаниями для практики. Например, зачем знать лисп, пролог и ещё 12 языков, если на практике используешь 5-6? Ну или зачем знать теорию формальных языков и компиляторов, если не делаешь ни тех, ни других? По себе могу сказать, что хоть и получил эти знания, непосредственно они на практике не используются, но вот принципы, по которым они построены и некоторые их элементы используются на интуитивном уровне на автомате неосознанно. Потому явное использование знаний и незаметно. Очень часто мне помогает решить непонятную проблему или сделать подходящий набор концепций/подходов/правил/классов/методов выработка индивидуального подхода, опирающегося на кучу знаний, которые непосредственно в решении практических задач не используются. Ну и решать потом задачи не на одном уровне, а на нескольких параллельно и согласованно.

      Так что дилемма имеется: если делить, 1 и 2 могут перестать понимать друг друга и быть полезными друг другу, если не делить, кажется, что одни знания лишние, а других недостаёт. Думаю, тут самое главное не путать фактический материал (технологии, стандарты, библиотеки) со знаниями и приёмами (культура программирования, ООП, распределённые системы и т.д.). Факты устаревают, а знания и приёмы остаются. Исходя из этого нужно перестать считать принципиально необходимым владение конкретным языком/библиотекой для решения задач проекта, а вместо этого считать необходимым умение быстро осваивать новые инструменты и правильно их применять. Тогда владение фактическим материалом перестанет иметь такую же важность, как владение знаниями и пропадёт иллюзия, что есть лишние знания и каких-то, наоборот, недостаёт. А вместе с этим пропадёт и сама дилемма.
      А то получается, бизнес хочет получать готовые станки(напр. джависты, сиплюсплюсеры со знаниями конкретных методов, классов, библиотек и т.д., а не которые даже умудряются желать, чтобы кандидат уже знал куски их закрытого кода и внутреннего языка) для производства ПО под каждое направление в предметных областях. Вот пока ни один университет и не удовлетворяет бизнес, и потому создаются направления в образовании типа “экономическая информатика”, “медицинская информатика”, “биоинформатика”, а то и ещё более мелкие деления. В итоге получаем специалистов, умеющих закручивать гайки на 8, а для гаек на 10 нужно другого специалиста нанимать. Как новые задачи/технологии появлвись, мир изменился, шумят про обучение, тренининги, повышение квалификации, самообразование и т.д. Им бы тогда самим делать ПО с функционалом, ограниченным лишь потребностями каждого отдельно взятого клиента, а не ставить по дефолту винду на ноут и втюхивать потом, или камеру и кучу наворотов в телефон.

    9. Как сазали в одном фильме(адаптирую под ситуацию): “Мир не изменился… он стал более пустым”…

      Абсолютно с вами согласен(в данном контексте естесственно)… если уж на совсем приниженный уровень переводить, то ценится знание алгоритмов(любых и программерских и разработки и тп) и умение ими пользоваться, а не далеко количество познанных языков… А людей понимающих принципы становится все меньше…

      Если не ошибаюсь, то мы просто выговорились под впечатлением от третьей части про обучение… ведь так????

    10. Spider:
      “А людей понимающих принципы становится все меньше…”
      Это естественное последствие уменьшения качества математического образования, в том числе и геометрии. Начинается ещё в младшей и средней школе. Также этому пониманию способствует качественное образование физики, как обширной области приложения мат. аппарата (кстати многие сложные, ключевые мат.аппараты рождались у физиков и потом доводились математиками). Таки да, потом большинство знаний из математики и физики непосредственно могут не использоваться, но понимания роли принципов/законов и их самих без этого не возникает. Увы, это образование формирует необходимое мышление, без которого ничего не выйдет.

      “Если не ошибаюсь, то мы просто выговорились”
      Скажу за себя. Давно читаю этот интересный блог. Многое из него почерпнул и благодаря нему понял. Почему-то не обнаружил в первой части этой серии постов выводов и рекомендаций из третьей, поэтому решил подождать, когда же у автора дойдёт до них очередь. Очень надеялся, что не дойдёт… Увы :(
      Понимание про обучение и дисбаланс с хотелками (по-другому не назовёшь) бизнеса у меня было за несколько лет до поста первой части, потому что мне не всё равно, как учить, чему учусь я и люди, с которыми мне приходится работать, что делаю и какое значение это имеет для профессиональных программистов, для пользователей и для бизнеса. Особенно в отрасли ИТ. Эти идеи я излагал на разных встречах, личных беседах. Кто-то понимал и предлагал различные решения, кто-то спорил в попытках самоутверждения, кто-то игнорил.
      Когда более-менее целостно сложился предмет разговора, тогда я и решил ответить на эту серю постов с целью изменить отношение хоть у кого-нибудь к образованию и оценке квалификации программистов. Когда будет достаточно людей, имеющих такое же или аналогичное отношение, и будет достаточно суммарных сил и средств для преодоления сопротивления среды желаемым изменениям, тогда они и произойдут. А пока есть проблема образования и разговоры вокруг неё с разными хотелками, тянущими одеяло в пользу бизнесОв.
      Хочу привести пример из жизни. К зав. кафедры, обучающей программированию и технологиям, приходит представитель от софтверной компании и предлагает сотрудничать. Софтверная компания хочет от кафедры с целью трудоустройства подготовленных определённым образом студентов через лекции, семинары, лабы, курсовые, доп.руководителей и т.д. Завкаф спрашивает, будет ли кто-то из софтверной компании читать специальные лекции, проводить мастер-классы и т.д., предоставят ли необходимое недешёвое оборудование? Представитель скис, потому что компания рассчитывала на разовую поставку персоналок, которые и так есть в достаточном количестве и качестве, за которую к ним будут приходить “за так” обученные студенты и совершенно не была готова к участию их сотрудников в обучении студентов кафедры. Сотрудничество не сложилось.

      Другой пример из жизни. Железософтверная компания предлагает кафедре готовить студентов, знающих её технологии, софт, архитектуры, железо и для этого готова предоставить оборудование, которое подойдёт кафедре и для других целей. Вместе с этим товарища с кафедры просят ответить на ряд вопросов о некотором продукте компании. Товарищ хорошо разбирается в железе и софте, которые производит компания. Честный ответ с указанием на политический недостаток, заключающийся в нестыкуемости прикладного софта на базе библиотек компании с железом других контор из-за нежелания компании поддерживать стандарт и запрос оборудования, сделанного не до 2000 года (потому что аналогичное железо и так есть), видимо, огорчил представителя. Предложение было замято.

      Резюмируя, ответ прост и заключён в одном предыдущих из постов автора: чтобы что-то получить, нужно что-то дать.

    11. На самом деле, перспектива обозначенная Александром, не утопична. Она конечно несколько утрирована, но…

      Все вы знаете, что наша система образования семимильныи шагами интегрируется в западную. Хорошо это или плохо? Ответа нет однозначного. Однако наша интеграция в западное образование пока выгодна только Западу. Но не будем это обсуждать здесь и в данный момент.

      Итак изменение нашего образования на лицо. Это так называемая двухуровневая система: бакалавриат и магистратура.
      Понятие бакалавриат, конечно, скорее академическое научное. Бакалавриат – это 4 года образования: 2 года общенаучное и общепрофессиональное и 2 года специальное. Если студент не работает за это время, то по сути он имеет две практики:
      1. учебная после 3 курса, которая часто просто является факультативом
      2. весенняя после 4 курса перед защитой бакалаврской

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

      Если внимательно проанализировать список дисциплин за 2-4 курсы, легко обнаружить пересекающиеся курсы, потому экономия есть.

      Не зная как на западе, но могу предположить, что там уже реально не 4 года, а 3,5, что по срокам приближается к заявкам Александра

      Магистратура – это уже тот контингент, который должен давать новые языки/библиотеки/технологии/стандарты/методологии/парадигмы (ЯБТСМП) для создания программных продуктов

      Но это в теории. Практика же сложнее.
      Студент после 2 года обучения идет работать (надо сказать не всякая фирма готова брать полставочника второ-третьекурсника). Хорошо если ему повезет попасть в фирму, которая действительно использует передовые технологии и может дать студенту эти знания. Я например сталкиваюсь с ситуацией, где технологии заморожены и студента обучают вчерашнему дню. Прибавить стоит и ту рутину, которая не ориентирует студента изучать новое, передовое.

      Получается – вуз не может дать реальные новые знания, фирма просто не хочет, а зачем – у них и так все налажено (возможно лет через 5-10 такая потребность возникнет, но не сейчас)

      Порочный круг получается однако….

    12. Artem Mygaiev

      Вот это замечание Александра:

      >> Это означает, что знаний и навыков,
      >> полученных в школе + на первых двух курсах
      >> института + самообразования вполне
      >> достаточно, чтобы стартовать в работе. А
      >> дальше большинство навыков и знаний
      >> приходят через работу и тоже
      >> самообразование

      говорит только о том, что программирование всё же больше ремесло, чем искусство, как привыкли считать многие :) А для того, чтобы освоить ремесло – техникума и “производственной практики” более чем достаточно.

      Достаточно интерестно почитать на тему образования у Стива МакКоннелла в “Professional Software development”:

      >> As of today, about 50 percent of the
      >> software engineering body of knowledge is
      >> stable and will still be relevant 30 years
      >> from now

      http://www.stevemcconnell.com/psd/05-bodyofknowledge.htm

      ИМХО, в инженерии (в том числе и программного обеспечения) уровень “техникума” вполне достаточен; со временем талантливые и целеустремлённые люди добьются успеха. Образование – получение того самог body of knowledge в институте – позволит ускорить этот процесс и тратить время не на изучение давно известных истин, а на исследования и разработку новых идей.

    13. “Вообще, человека нужно учить лишь самому необходимому. Все остальное будет ему только мешать!.. В школе нужно давать только общие знания, которые послужат фундаментом для специальных знаний. Я переориентирую образование на обучение главному. События громоздятся одно на другое. Какая же голова должна быть у ребенка, чтобы освоить историю родного края, историю страны в целом, да еще и историю рейха?.. Мозг не в состоянии вобрать все это в себя: Нет никакого смысла учить всех детей в средней школе двум языкам… Зачем мальчику, который хочет заниматься музыкой, геометрия, физика, химия? Что он запомнит из всего этого? Ничего. От любого подробного изложения следует отказаться: Если у кого-то проявляется в какой-либо области ярко выраженный талант, зачем требовать от него еще каких-то знаний? Пусть дальше работает по своей специальности!… Я в основном учил лишь 10 процентов того, что учили другие. Я очень быстро расправлялся с уроками…”

      7 марта 1942 г.
      (C) Застольные разговоры Гитлера.

    14. 2 Lxa. Это известный полемический прием: “Да-да, вот именно так говорил и Гитлер”. Автоматически означает, что собеседник говорит неправильно.

    15. А разве Гитлер говорил неправильно об образовании? ;-)

    Leave a reply

    You must be logged in to post a comment.