August 15, 2020

Коротко о IT части 122 ИПСА ММСА

Меня зовут Богдан Лысов, на данный момент я студент 4го курса ИПСА (122 ММСА), глава СтудСовета ИПСА, бэкенд разработчик на Node.js. Исходя из этого опыта даю личную оценку происходящему на своем факультете касательно IT сферы. Свято верить в мою оценку не советую: почитай интернеты, поспрашивай нужных людей и потом делай выводы.

Кто такой абитуриент Компьютерных наук?

Есть два типа людей:

  1. В лицее/гимназии/школе очень сильно напрягали, учился днями и ночами, спал только в маршрутке по пути из дома в учебное заведение. Возможно, было много программирования (C, C++, C#, Basic, HTML(!)...)
  2. Учился в школе, не напрягался, не знает, что такое программирование в принципе.

Я отношусь к первому типу. Закончил Лицей информационных технологий в Днепре, знал, что такое виндовс формы и C#. Когда в универ приходят такие люди, они очень разочаровываются. И нет, не от универа и учебы. Ты думаешь, что знаешь уже очень много и вот-вот на первом курсе пойдешь работать на фуллтайм. Знаешь такие слова как "искусственный интеллект", "машинное обучение". Читал, что это очень круто и платят хорошо. Установил себе линукс, чтобы писать в консоли, как тру хакер.

Стандартные заблуждения:

  1. Знание чем отличается for от while и очередь от стека делают из меня специалиста. Та и в принципе я быстро учусь.
  2. Хочу заниматься ИИ, звучит круто.
  3. Универ должен научить меня Java, C++, JS, Python...

Нет, нет, нет. Ты не знаешь ничего, чтобы кто-то платил тебе серьезные (и не серьезные) деньги за написание кода. В действительности, в хорошей компании на собеседовании тебя ничего не спросят про синтаксис языка. Например, на позицию бэкенд разработчика спросят про протоколы передачи данных, микросервисную архитектуру, монолит, паттерны проектирования, ООП, базы данных, докер, системные команды и совсем немного о том, как устроен твой язык программирования. На момент поступления я не знал ни один из этих пунктов даже на 1/10.

Да и учеба не даст тебе работать фуллтайм до 3го курса.

Заниматься машинным обучением потому что это звучит круто — отстой. Ты трогал руками ООП джавы? Писал красивые странички на HTML/CSS/JS? Проектировал базы данных? Пробовал тестировать какой-то продукт? Гнаться за хайпом нельзя, ведь это может быть совсем не тем, с чем захочется связать свою жизнь. А потом ты натаскиваешь себя на нужную вакансию, проходишь, работаешь пару месяцев и понимаешь, что не так и весело загонять данные в алгоритм и смотреть, какие кластеры ты получил. Отсюда двойное разочарование. Твое истинное призвание быть тестировщиком. Но как об этом узнать?

Универ не должен учить тебя языкам программирования. Синтаксис учится за неделю. Универ должен научить тебя учиться. А в довесок научить проектировать сложные системы, анализировать, искать лучшее решение, оптимизировать. Язык программирования лишь инструмент. Задача специальности "компьютерные науки" — дать потрогать тебе максимальное количество технологий, и знания как правильно их применять, чтобы можно было определиться с дальнейшим вектором самостоятельного(!) развития.

Промежуточный итог

Тебе 18, а то и меньше. Мизерный процент людей знают свое будущее в таком возрасте, и это будущее наступает. Поэтому благодаря университету твоя задача понять за 4 года, к чему душа лежит и какая работа не заставит выгореть через полгода.

Чему тут учат?

Математике. Крепкий бэкграунд для дата саентистов и аналитиков. Подобно тренажерному залу, в котором ты тренируешь мышцы, математика тренирует твой мозг, чтобы уметь мозговать задачи, быстро и качественно их решать. Это и выделяет выпускника ИПСА на рынке труда на фоне конкурентов. А когда мы немного прокачали (прокачиваем) в себе аналитика — идем программировать.

1 курс

  • Программирование на С. Дают задачи, вы их решаете, потом сдаете. Все задачи безумно примитивны, чтобы первокурсник с любым бэкграундом мог влиться. Здесь вам расскажут о работе с памятью, переменных, циклах, немного порисуете. Будет курсовая работа — программа + документация.
  • Алгоритмы и структуры данных. Расскажут про сортировки, стек, очередь, списки, деревья, хэш-таблицы.

На этом полномочия программирования для первого курса всё.

2 курс

  • ООП — объектно-ориентированное программирование. Будут лабораторные работы на С++, возможно, на Java, C#. Здесь же курсовая. Очень важный концепт, который будешь встречать постоянно.
  • Численные методы. Математический предмет, просто реализация будет программная, потому что руками считать такие формулы не белых людей дело. Тут ты волен писать на любом языке программирования.

3 курс

Здесь начинается самое интересное.

  • Реляционные базы данных. Будут рассказывать про СУБД MySQL (разницы с другими sql СУБД на обывательском уровне особо нет). Узнаешь как работать с БД, про нормализацию, напишешь много запросов. Крайне важный предмет для IT специалиста, ведь данные нужны везде, а их количество с каждым днем растет неприлично быстро.
  • Распределенные системы. Формируется команда группы студентов, где каждому будет дана конкретная задача: дизайн, фронтенд (React.js, Next.js), микросервисы (Java, Elixir), аналитика, проджект менеджмент.
    Проектируется микросервисная архитектура на примере приложения типа Инстаграма. Разбирается, что делают микросервисы, как и где поднимаются (AWS). Как микросервисы взаимодействуют между собой. Происходит работа с базами данных, как реляционными, так и документарными. Узнается про принципы декомпозиции, типы общения, форматы сообщений, транзакции, саги, аномалии. Много информации про БД.
    Архиважно для бэкенд разработчиков.
  • Веб разработка. Фронтенд, где изучается html, css, js. Лекторы приходят из компании EPAM. Сначала рассказывают про верстку, потом про логику сайтов, немного про фреймфорки (React, Angular). В конце — курсовая работа совместно с базами данных, где финальный продут — полноценный (хоть и кривой) сайт. Бэкенд для сайта пишется на любом угодном тебе языке. Можно сдать преподавателю, а можно сдать в офисе EPAMа и пройти в лабораторию компании (внутренние курсы).
  • Программирование на Python. Лабораторные работы на дом, на парах написание кода перед группой с комментариями преподавателя. Очень крутой подход обучения, который целиком и полностью зависит от преподавателя. Будет работа с файловой системой, стандартные задачки, работа с API некоторых сайтов, немного компьютер вижена.
  • Машинное обучение. Изучаются различные алгоритмы, закрепляется понятие регрессии, классификации, которые студент учил в рамках курса теории вероятностей и математической статистики. Много теории, интересные лабораторные. Анализ полученных данных. Обучение было построено с использованием Scikit-learn библиотеки на Python.
  • Тестирование. Изучение тестирования сайтов и приложений на C# с помощью CI (continuous integration) инструментов TeamCity, Jenkins.
  • Текстовая аналитика. Выбор темы и реализация задачи с помощью SAS и Python. Из примеров работ: анализ постов конкретного телеграм канала, анализ новостей о COVID-19, анализ вакансий в линкедине.

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

Запомни: ты не обязательно должен кодить. Можно быть хорошим проджект менеджером или дизайнером, или аналитиком. Главное, чтобы это нравилось.

За три года обучения в университете студент получает достаточно информации и понимания IT рынка, чтобы определиться со своим будущим. Чего и тебе желаю, будущий студент.