Доброго времени суток всем! Небольшая предыстория: в свое время закончил вуз по технической специальности (релейная защита и автоматизация электроэнергетических систем). Еще в универе понял, что это не мое, но т.к. ветра в голове у меня тогда было много да и не шибко я думал о будущем, то так и закончил этот универ. Уже несколько лет работаю по специальности, и от работы уже начинает тошнить). На последних курсах универа я пробовал себя в простенькой верстке веб-страниц, освоил HTML и CSS на базовом уровне. Но мне все это дело не шибко зашло, и я забросил эти упражнения. Пробовал начать изучать язык C, но ничего толкового из этого также не получилось, оттолкнул высокий порог вхождения.
Уже работая, я решил попробовать изучить Python. И о чудо. Я понял, что вот то, чем я хотел бы заниматься. В силу того, что из-за основной работы времени у меня остается совсем немного, да и других бытовых дел помимо работы хватает, процесс обучения шел не то чтобы сильно быстро. За год изучения языка я освоил весь базовый синтаксис, разобрался с ООП, декораторами и прочими плюшками, доступными в Python, прошел несколько онлайн-курсов, прочитал пару книг по теме, написал пару ботов для Telegram, десктопное приложение-менеджер паролей с шифрованием базы данных и графическим интерфейсом на tkinter (есть планы перенести его на PyQt, но пока руки не доходят) и целое множество скриптов для автоматизации рутинных задач на работе. В целом все это дело меня очень увлекло, но есть одна проблема - отсутсвие системы в полученных знаниях и фундаментальных знаний, например, по тем же алгоритмам, оптимизации кода и т.д. Также нет понимания, в каком именно направлении двигаться в процессе дальнейшего изучения языка. Какие-то базовые знания вроде получил, но куда податься дальше: веб-разработка, машинное обучение или может быть data science...
Поэтому возникла идея получить второе высшее (по крайней мере есть надежда, что оно хотя бы разложит все по полочкам в голове). В силу жизненных обстоятельств очная форма не подходит, т.к. нужно работать, содержать семью, платить за учебу и т.д. К тому же хотелось бы, чтобы в учебной программе были дисциплины, при изучении которых работают на Python'е. Глаз пал на МТИ и МГУ. Но я понятия не имею, используют ли там Python. Если есть кто-нибудь, кто учился там, расскажите, как построен учебный процесс. Может быть посоветуете еще какие-нибудь варианты (желательно в Москве). Или может отговорите от идеи получить второе высшее в пользу каких-нибудь хороших курсов после которых реально найти работу в IT сфере. Заранее благодарен за советы.
sim3x, вопрос скорее не в кодинге как таковом, а в фундаментальных основах computer science, алгоритмах, архитектуре ПО и т.д. Плюс есть надежда, что это поможет понять, в каком именно узком направлении мне будет интересно дальше двигаться.
Ivan Zhuravlev,
Нет, знание алгоритмов никак не поможет выбрать направление
А фундаментальные знания без применения выветриваются сразу после сдачи екзамена
Поищите вакансии на джуниора. Почитайте требования. Прочитав 10-20 вакансий, усредните и у вас будет понимание что нужно учить, чтобы попробовать устроиться.
Либо возможно вы сразу пробуйте попасть на интервью.
Спасибо за совет. А по паттернам и алгоритмам какую-нибудь конкретную книжку посоветуете?
По поводу опыта выполнения своих работ, есть-то он есть, но я совсем не уверен, что код в этих работах близок к тому, что из себя представляет код профессионалов. Работать-то он работает, но я боюсь, что он больше похож на то, что обычно называют говнокодом)
На работе значительную часть времени занимает сбор исходных данных для проектов, их обработка и составление математических моделей электрических сетей в специальном софте, который использует геоподложку. Вкратце, сеть моделируется и накладывается на google maps и ты видишь как и где проложены ЛЭП, где расположены подстанции, потребители, задаешь свойства каждого объекта и т.д. Потом на основе этой модели делаются разного рода расчеты. В софтину можно импортировать kml-файл, но если у точек не задать определенных свойств, то они все импортируются как просто точки, а что это именно - опора ЛЭП, подстанция или ТП уже приходится вручную задавать. Чтобы получить валидную модель сети нужно обработать кучу исходных данных, которые каждая организация составляет по-своему. Где-то это kml-файлы (без нужных свойств, естественно), где-то JSON, где-то Excel-таблица с координатами, где-то вордовский документ и т.д. Вручную заносить в модель координаты каждой опоры ЛЭП, каждой ТП или подстанции замучаешься. Поэтому я и писал скрипты, которые автоматизируют этот процесс, создают kml-файл (если это надо) и задают точкам определенные свойства чтобы наша софтина понимала, что есть что. Также писал парсеры для сайтов электросетевых компаний, когда нужно было определенную информацию с них собирать.
по паттернам я читал "Learning Python Design Patterns" by Chetan Giridhar
(не скажу, что прям все супер-пупер, но очень лаконичная книга для начинающего и без слишком большого количества воды, как любят некоторые в CS)
касательно алгоритмов, конкретной книги посоветовать не могу, я учил по лекциям Тимофея Хирьянова из МФТИ на youtube'e. Там можно начинать с самых первых его лекций по информатике, но сейчас даже целенаправленный курс по алгоритмам есть и упражнения тоже. Потом просто уже гуглил по самым используемым, если что то непонятно было.
ИМХО, если Вы у вас есть работающие нормально свои программы на таком уровне, и еще стабильно, то джуниором Вас без проблем возьмут. За качество кода в таком случае, я бы сильно не беспокоился на данном этапе, т.к. во-первых,у каждой компании свои стиль и требования, вo-вторых, за пределами академических заведений и всяких мега-ИТ монстров, требования самые основные, чтоб работало, в первую очередь, а не красота кода.
Ivan Zhuravlev, по паттернам советую книжку "Head First Design Patterns"
Вообще это хорошая серия книг Head First, можно и по питону почитать и по джаве. Для начинающих хорошо подходят эти книги, там все наглядно.
Насчет Cracking the coding interview - там примеры заданий из собеседований в гугл. Слишком сложные задачи. Можно для развлечения ее тоже читать и практиковаться с заданиями этими. Но в большинстве компаний такого не спрашивают, потому что в реальной жизни таких задач нет.
Это специфика гугла и других it гигантов на собеседованиях давать зубодробительные задачи по алгоритмам и структурам данных.
Определенно точно высшее образование только потратит 4-5 лет твоей жизни, за которое все тренды и тенденции в IT изменяться раза два минимум :)
Веб-разработка самый быстрый вход в программирование и достаточно востребованный, но если тебе не зашло, то смотри в сторону технологий, к которым лежит сердце конечно. Достаточно начать заниматься самому по статьям и видео, а когда появятся вопросы найти наставника, курс или репетитора.