Как Получить Максимальную Пользу От Образования В Области Компьютерных Наук

Большинство современных программистов получили образование в университетах.

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

В этом посте Станислав Протасов, директор по связям с университетами Acronis, рассказывает о своем видении особенностей университетской подготовки будущих программистов.

Преподаватели, студенты и те, кто их нанимает, возможно, даже найдут под катом несколько полезных советов.



Как получить максимальную пользу от образования в области компьютерных наук

Последние 10 лет я преподаю математику, алгоритмы, языки программирования и машинное обучение в различных университетах.

Сегодня, помимо должности в Acronis, я еще являюсь заместителем заведующего кафедрой теоретической и прикладной информатики МФТИ.

Из своего опыта работы в хороших российских (и не только) вузах я сделал некоторые наблюдения по поводу подготовки студентов по компьютерным дисциплинам.



Правило 30 секунд больше не работает

Я уверен, что вы встречали правило 30 секунд, которое гласит, что программист должен понять назначение функции после быстрого просмотра ее кода.

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

Я пишу код уже 12 лет, но сравнительно недавно увидел исходный код одного продукта, который на первый взгляд показался мне магическим заклинанием.

Сегодня, если вы не погружены в предметную область, то правило 30 секунд перестает работать.

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

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

При таком подходе к изучению предмета у специалиста развивается «чувство потока».

Как в рэпе, когда ощущение хорошей рифмы и правильного ритма появляется без особого обоснования.

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

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

Но именно на этом уровне образования необходимо приобретать кругозор.

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

Мне кажется, это единственный способ с помощью университета «накачать перекладину» на будущее.

Т-образные специалисты .



Какой язык программирования лучше всего преподавать в университете?



Как получить максимальную пользу от образования в области компьютерных наук

К моей радости, преподаватели вузов уже забросили поиск правильного ответа на вопрос: «На каком языке лучше всего программироватьЭ» Споры о том, что лучше — C# или Java, Delphi или C++ — практически исчезли.

Появление множества новых языков программирования и накопление педагогического опыта привели к устоявшемуся пониманию в академической среде: у каждого языка есть своя ниша.

Проблема обучения использованию того или иного языка программирования перестала быть приоритетной.

Неважно, на каком языке преподается курс.

Главное – достаточная выразительность языка.

Книга " Искусство многопроцессорного программирования является хорошей иллюстрацией этого наблюдения.

В этом теперь уже классическом издании все примеры представлены на Java — языке без указателей, но с сборщиком мусора.

Вряд ли кто-то станет утверждать, что Java — далеко не оптимальный выбор для написания высокопроизводительного параллельного кода.

Но язык подходил для объяснения представленных в книге концепций.

Другой пример - классический курс машинного обучения ?Эндрю Ина, преподавал в Matlab в среде Octave. Сегодня вы можете выбрать другой язык программирования, но какое это имеет значение, если идеи и подходы важны?

Более практично и ближе к реальности

В то же время в последние годы в университетах стало гораздо больше практиков.

Если раньше российские университетские программы активно критиковались за оторванность от реальности, то сегодня этого нельзя сказать об ИТ-образовании.

10 лет назад в университетах почти не было преподавателей с реальным отраслевым опытом.

В настоящее время все чаще занятия на профильном факультете ведут не штатные преподаватели информатики, а практикующие ИТ-специалисты, которые преподают всего 1-2 курса в свободное от основной работы время.

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

Не думаю, что раскрою секрет, сказав, что мы поддерживаем базовую кафедру в МФТИ и выстраиваем отношения с другими вузами, в том числе для того, чтобы подготовить студентов, которые могли бы начать свою карьеру в Acronis.

Математик или программист?



Как получить максимальную пользу от образования в области компьютерных наук

Священные войны, которые раньше вращались вокруг языков программирования, перешли в философское русло.

Сейчас так называемые «программисты» и «математики» спорят друг с другом.

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

Это значит, что и студенту, и компании, в которой он продолжит работать, придется дополнять пазл знаний недостающими кусочками.

Появление в университетах практиков, пишущих промышленный код на разных языках, дает студентам возможность лучше развивать навыки.

Хорошо знакомые с реализациями стандартных библиотек, фреймворков и методик программирования, практикующие программисты прививают студентам желание писать хороший код, делать это быстро и эффективно.

Однако этот полезный навык иногда приводит к появлению любителей изобретать велосипед. Студенты-программисты думают так: «Должен ли я написать еще 200 строк хорошего кода, который решит проблему в лобЭ» Преподаватели, получившие классическое математическое образование (например, на факультете математики или прикладной математики), часто работают в псевдонаучной среде, либо в сфере моделирования и анализа данных.

«Математики» по-другому видят проблемы в области информатики.

Они в первую очередь оперируют не кодом, а алгоритмами, теоремами и формальными моделями.

Важным преимуществом математического подхода является четкое фундаментальное понимание того, что можно и что нельзя решить.

И как это решить.

Соответственно, учителя математики говорят о программировании с уклоном в сторону теории.

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

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

Но реализация может быть хромой.

Дети, которых в школе или в первые годы воспитывали как программистов, приносят с собой «очень красивый велосипед», который, однако, асимптотически обычно работает не очень эффективно.

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

В разных университетах на собеседованиях со студентами я обычно вижу, какая «школа» лежит в основе его образования.

И идеального баланса в базовом образовании я почти никогда не встречал.

В детстве в моем городе можно было подготовиться к олимпиадам по математике, но кружков по программированию не было.

Сейчас в клубах дети учатся программировать на «модных» Go и Python. Поэтому даже на уровне поступления в вузы существуют различия в подходах.

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

Как «накачать перекладину» на будущее Т-образные специалисты?



Как получить максимальную пользу от образования в области компьютерных наук

Понятно, что в таких условиях студент просто выбирает то, что ему больше нравится.

Учитель просто передает ту точку зрения, которая ему ближе.

Но выиграют все, если код будет написан красиво, и с точки зрения алгоритмов все понятно, разумно и эффективно.

  • ИТ-горизонты .

    Выпускник бакалавра компьютерных наук – это готовый специалист с развитым техническим кругозором, наверняка выбравший свой профиль.

    Но в первом классе мы не знаем, что он или она будет делать.

    Он может уйти в науку или аналитику, а может, наоборот, каждый день писать огромное количество кода.

    Поэтому студенту необходимо показать все аспекты работы в сфере ИТ и познакомить со всеми инструментами.

    В идеале преподаватели теоретических курсов покажут связь с практикой (и наоборот).

  • Точка роста .

    В интересах самого ученика не позволять себе впадать в крайности.

    Понять, «математик» вы или «программист», несложно.

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

  • Альтернативные источники знаний .

    Бывает, что программа хорошо сбалансирована, но «Системное программирование» и «Алгоритмы» преподают совершенно разные люди, и одни ученики ближе к первому преподавателю, а другие – ко второму.

    Но даже если профессор вам не нравится, это не повод пренебрегать одними предметами в пользу других.

    Сами бакалавры заинтересованы в том, чтобы найти волю к работе с источниками знаний и ни в коем случае не доверяют радикальным мнениям типа «математика — царица наук, главное знать алгоритмы» или «хороший код компенсирует все остальное».

Углубить свои теоретические знания можно, обратившись к специализированной литературе и онлайн-курсам.

Совершенствовать свои навыки в языках программирования можно на Coursera, Udacity или Stepik, где представлено множество различных курсов.

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

Не все со мной согласятся, но на моей практике хорошо себя зарекомендовало.

специализация C++ от Яндекса , в котором последовательно анализируются все более сложные особенности языка.

В общем, выбирайте курсы с высокими рейтингами от авторитетных компаний или университетов.



Мягкие навыки



Как получить максимальную пользу от образования в области компьютерных наук

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

Дело в том, что сегодня университеты очень часто «нянчятся» со студентами.

Даже пропустив множество занятий, не подготовившись вовремя к контрольным и контрольным, проспав или опоздав на экзамен, каждый может сдать и пересдать его заново – и в итоге все равно получить диплом.

Однако сегодня есть все условия для того, чтобы студенты были готовы к взрослой жизни и самостоятельной профессиональной деятельности.

Им придется не только программировать, но и общаться.

И этому тоже нужно учить.

В университетах существуют различные форматы развития этих навыков, но, увы, им зачастую не уделяется должного внимания.

Однако у нас есть много возможностей приобрести навыки эффективной командной работы.

  • Письменное деловое общение .

    К сожалению, большинство выпускников, покидающих вуз, понятия не имеют о этикете переписки.

    Специфика общения в мессенджерах заключается в круглосуточном обмене сообщениями и использовании разговорного стиля и неформальной лексики.

    Однако тренировать письменную речь можно было бы при общении студента с кафедрой и вузом.

    На практике менеджеры часто сталкиваются с необходимостью декомпозировать большой проект на мелкие задачи.

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

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

  • Письменная презентация результатов вашей работы.

    .

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

    Возможностей для этого много – в некоторых университетах курсовая работа начинается на втором курсе.

    В качестве формы контроля можно также использовать эссе – обычно они по форме ближе к публицистической статье.

    Реализован ли уже такой подход в НИУ ВШ? Если компания практикует гибкий подход к развитию, ей приходится представлять результаты своей работы меньшими порциями, но чаще.

    Для этого важно уметь кратко передать результаты работы одного специалиста или всей команды.

    Также многие компании сегодня проводят «обзоры» — ежегодные или полугодовые.

    Сотрудники обсуждают результаты и перспективы работы.

    Успешная проверка – основной повод для карьерного роста, бонусов, например, в Microsoft, Acronis или Яндекс.

    Да, программировать можно хорошо, но «сидя в углу» даже крутой специалист всегда проиграет тому, кто умеет хорошо преподнести свой успех.

  • Академическое письмо .

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

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

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

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

    Эти навыки можно приобрести, пройдя соответствующий курс, который сейчас включен во многие образовательные программы.

  • Ведущие встречи .

    Большинство студентов не знают, как готовиться к собраниям, вести протоколы и обрабатывать данные.

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

    Это требует контроля над проектной работой студентов, чтобы научить их эффективно проводить встречи.

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

  • Публичное выступление .

    Многие студенты сталкиваются с необходимостью выступить публично только во время защиты диссертации.

    И не все к этому готовы.

    Я видел много студентов, которые:

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

    Это нормально, когда человек выступает впервые.

    Но работать с этим стрессом нужно начинать раньше – с защиты курсовой работы в дружеской атмосфере, среди одноклассников.

    Кроме того, стандартной практикой в корпорациях является предоставление сотруднику возможности предложить идею и получить за нее финансирование, должность или специальный проект. Но, если вдуматься, это та же защита курсовой работы, только на более высоком уровне.

    Почему бы не практиковать такие полезные карьерные навыки во время учебы?



Что я пропустил?

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

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

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

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

В случае с иностранными студентами, наоборот, ожидания русского преподавателя иногда могут быть слишком высокими.

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

Однако им иногда не хватает специальных знаний после окончания бакалавриата.

Хорошие европейские ученики, скорее всего, будут иметь менее сильную математическую подготовку на школьном уровне.

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

Для этого российская система образования предоставляет все возможности – нужно только правильно ими воспользоваться.

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

Теги: #Карьера в ИТ-индустрии #образование #Образовательный процесс в ИТ #обучение программированию #обучение программированию #университеты #карьера программиста #информатика

Вместе с данным постом часто просматривают: