Несколько советов для студентов ИТ специальностей
Решил написать небольшой обзор материалов и курсов, а самое главное навыков, которые нужны для индустрии по окончанию университета.
Что делать, если вы студент по специальности вычислительная техника и программное обеспечение, информационные системы, Computer Engineering, Computer Science, и вы хотите стать инженером-разработчиком(software engineer) по окончанию университета?
Есть 3 правила:
- Хорошо учиться на важных предметах (степень важности предмета определим в посте);
- Учиться и практиковаться вне университета;
- Брать стажировки по профилю. Не xerox, coffee, or tea guy;
Я думаю, что по каждому из этих правил можно написать отдельный пост, в будущем это и сделаю, и поставлю ссылки. Итак, начнем:
Вот вы и студент. Если у вас есть право выбора предметов, то берите наиболее "математичные" и инженерные предметы, если нет, то выживаем. Хороший GPA - признак усидчивости, упорства, но никак не признак хорошего инженера. Поэтому разделите ваши предметы в семестре на важные и все остальное.
Скажем у вас есть такие предметы:
- Линейная алгебра;
- Intro to programming;
- Data structures and algorithms;
- Русский язык;
- История Казахстана;
- Философия.
Все, что выделено жирным - очень важно, конечно язык, философия и т.д. поможет вам развиваться разносторонне, но лучше больше времени уделять именно жирным предметам.
После того, как определили какие уроки мы будем проходить, посмотрите syllabus, он всегда будет неполным и недостаточным по следующим причинам:
1) Все курсы всегда устаревают быстрее до того, как курс появится в университете;
2) Курсы читают для среднего студента, поэтому нужно всегда брать больше.
Что делаем?
Заходим на сайты вроде coursera.org, https://www.edx.org/ и берем эти курсы онлайн, просмотрите топовые университеты, их курсы почти всегда доступны для общего круга. Скажем, MIT - ocw.mit.edu, UC Berkeley - http://webcast.berkeley.edu/ и т.д. Найдите ваш курс, к примеру Linear Algebra и изучайте его по ходу вашего обучения в университете, так ваши теоретические знания будут примерно наравне с топ-студентами.
Больше практики.
- Решайте задачи по программированию. Поставьте перед собой цель решать одну задачу из Codeforces, TopCoder. Если не знаете, как решить задачу, смотрите на разбор задачи;
- Попробуйте самостоятельно реализовать алгоритм по псевдокоду, который вы прочитали в книге. Попробуйте оценить плюсы и минусы определенного подхода;
- Вы уже наверное научились такому выражению как ООП, разделяйте задачу на под-задачи, используйте абстракцию. Попробуйте создать простое приложение для вашей библиотеки или банкомат;
- Научитесь ставить Linux, грохните Винду и забудьте про нее, научитесь настраивать веб-сервер, устанавливать базу данных, не используйте XAMPP;
- Каждый раз придумывайте небольшую задачу для себя и пытайтесь ее решить лучше;
- Попробуйте найти open source проект на Github и делать contribution в него, это даст огромный плюс к вашему резюме.
Берите стажировки летом, хоть и неоплачиваемые, набирайтесь опыта, делитесь мыслями с опытными инженерами.
P.S. Имхо важные курсы для разработчика:
- Алгоритмы;
- Программирование;
- Software engineering;
- Базы данных.
И удачи в учебе, если есть вопросы, пишите в комментах, буду рад ответить.