что нужно знать на 1 курсе программист
Советы студентам-программистам
Привет, Хабр! Представляю вашему вниманию перевод статьи «Advice for programming students».
Есть много вещей, которые я хотел бы знать, когда я начал свое путешествие в качестве студента-программиста. С тех пор прошло почти 10 лет, и, к сожалению, я не могу поделиться своим опытом и знаниями с моим прошлым «я», только с моими младшими коллегами. Этот пост состоит из некоторых полезных советов, которые я хотел бы услышать, когда мне было 18 лет.
Решите, что вам нужно
Вам, конечно, не нужно быть знакомым с формальной логикой или категориями, если вы хотите просто узнать как создать что-то практическое (скажем, интерфейс) и делать только это. Существует два основных пути, которые отличаются усилиями, продолжительностью и исходом.
Математика
Изучайте математику, потому что математика полезна. Я не могу это не подчеркнуть. Когда вы начнете, вы можете подумать, что вам не нужна линейная алгебра, потому что вы не знаете о приложениях. Однако для любого нетривиального машинного обучения вам это понадобится. Вам нужна статистика и вероятность. Вам понадобится логика, комбинаторика, теория множеств, все виды дискретной математики, теория графов, теория вычислимости, формальные грамматики, лямбда-исчисление, формальная семантика, топология, теории типов, теория чисел, группы, кольца, поля, категории.
Новые технологии постоянно появляются. Многие из них основаны на существующих математических моделях. Если вы хорошо знаете базовую математику, вы получаете очень приятные преимущества:
Изучите математику, чтобы научиться математическому мышлению. Написание доказательств делает вас строгим к своим действиям. Вы будете всегда думать обо всех возможных путях исполнения, которые может выполнять ваша программа, чтобы не привнести ошибки и проблемы безопасности. Ясность мышления, полученная от построения доказательств, драгоценна. Это также поможет вам написать короткий, сжатый код.
Учитесь на лучшем, используйте лучшие инструменты
Выберите свой первый язык. Он должен быть хорошо спроектированным, то есть иметь:
Не начинайте с Питона, очень прошу вас! Он плохо спроектирован, непоследователен и не научит вас строгому мышлению. Не нужно привыкать к «хорошо, как правило, работающему» менталитету. Питон имеет свои применения, но не как первый язык.
Если вы привыкнете к некачественным языкам и некачественным инструментам, и некачественному программному обеспечению, и к некачественным решениям, вы неизбежно повторите их в своей собственной работе. Будьте критичны, задавайте вопросы, критикуйте все, ищите несоответствия и недостатки.
Например, представьте, что вы изучаете новый язык Go. Погуглите «Go language sucks» и почитайте почему люди критикуют его. Некоторые комментарии будут незначительными, но другие из них действительно будут иметь смысл. Вероятно, вы получите новые знания от чтения критических замечаний, оценивая их, чтобы потом определить имеют ли они значение, или это просто пустые слова.
Думайте сами
Я преподаю программирование (C и ассемблер) с 2009 студентам университета ИТМО в Санкт-Петербурге. У многих людей есть проблемы с программированием и никогда им не удается научиться этому из-за того, что они не создают код. Когда они получают задание, они пытаются имитировать существующее решение, возможно, взяв некоторые фрагменты из Stack Overflow, настроив их по своему вкусу. Хорошо, получили решение, что еще нужно?
Вы должны научиться писать код с нуля. Типы навыков, необходимых для этого, настолько отличаются от навыков, полученных вмешательством в существующий код!
Программировать значит делать сознательный выбор. Вы находитесь в состоянии А (у вас есть доступ к ряду языковых функций / библиотек, и вы знаете как их комбинировать); вы хотите получить состояние В (языковые конструкции объединены для решения задачи). Как вы построите маршрут от А до В? Теперь это реальное программирование, решение проблем.
Когда вы начинаете писать программы с нуля становится немного тяжело, но абсолютно необходимо научиться строить вещи с нуля. Чтобы улучшить навыки решения задач, важно изучить алгоритмы и структуры данных. Возьмите хорошую книгу и решайте олимпиадные задачи онлайн. Я рекомендую «Алгоритмы» Дасгупты для начала, затем классическую книгу Кормена. Все это откроет целый новый мир для вас, я обещаю.
Дополнительной частью процесса создания программного обеспечения является разработка архитектуры программного обеспечения; невозможно научиться правильно структурировать свои программы, не создавая их от 0 до 100.
Расширяйте свой кругозор
Программируйте каждый день, делайте сторонние проекты все время. Это очень простой (и в основном точный) способ для меня как учителя понять, что мой ученик с большой вероятностью добьется успеха. Один вопрос: что вы программируете в свободное время?
У ваших учителей просто не хватит времени, чтобы они смогли рассказать обо всем. В конце концов, после того, как вы выходите из университета, вы должны продолжать учиться самостоятельно, пока не уйдете на пенсию. Если вы увлечены тем, что вы делаете, вы будете изучать различные типы программного обеспечения для удовольствия, и это даст вам гораздо больше опыта и навыков, чем ваши менее мотивированные сверстники.
Общеизвестно, что рекрутинг хорошего программиста чрезвычайно сложен. У многих программистов, претендующих на работу, есть проблемы с написанием тривиальных вещей, таких как FizzBuzz. Если у вас есть существующие проекты, размещенные на GitHub, работодатель будет более уверен, что вы ему подходите.
Испытывайте себя разными инструментами и языками. Если кто-то говорит вам, что все языки похожи, это либо упрощение, либо отсутствие опыта. Позвольте мне объяснить немного.
Модель вычислений это множество, состоящее из базовых операций и способов склеить их вместе в порядок, необходимый для создания комплексных алгоритмов. Некоторые языки имеют очень похожие модели вычислений, а некоторые сильно различаются.
Программирование намного больше, чем общеизвестные C / Python / Java / C++ / C# / Go / Javascript, построенные на одинаковых принципах: императивный, структурный, немного с ООП и синтаксическим сахаром для имитации других стилей программирования. Мир программирования ОГРОМЕН. Как насчет:
Будьте общительными
Мне очень повезло познакомиться с некоторыми удивительными людьми. Мои помощники помогли мне совершенствовать свои навыки, учиться чему-то новому, видеть мир с другой точки зрения. Изоляция себя не принесет вам пользы в долгосрочной перспективе: вам нужно, чтобы другие люди обсуждали, чтобы понять, что они делают, что они думают.
Если ваш друг прочитал интересную статью и рассказал вам об этом, вы просто сэкономили много своего времени, потому что он дал вам обработанные, кристаллизованные знания.
Придерживайтесь страстных, умных людей и старайтесь учиться у них. Вы будете удивлены, сколько вы сможете узнать во время обеда со своими товарищами, которые хотят поделиться деталями своей работы или исследований. Такое разнообразие идей является одной из основных причин, по которым корпорации, такие как Google, дают вам бесплатное питание.
Спросите людей, которые лучше разбираются в code review и читают свой код. Изучая чью-то работу, можно многому научиться. Code reviews помогут вам узнать о том, как написать код еще лучше. Это, возможно, один из самых эффективных способов стать лучшим программистом очень, очень быстро.
Пишите тесты
Это так важно, что для этого понадобиться отдельная статья. Тестирование является неотъемлемой частью создания программного обеспечения, и даже такие парни, как я, которые работают над формально проверенным программным обеспечением (что означает, что оно должно быть математически строго формализуемо), пишут тесты, хотя можно подумать, что гарантии, данные доказательствами, гораздо сильнее.
Я надеюсь, что это может помочь кому-то получить более полную картину, быстрее научиться и стать лучшим программистом; если у вас возникнут вопросы, я буду рад помочь. Удачи!
С чего самостоятельно начать обучение программированию: этапы освоения профессии и советы новичкам
История о том, как стать программистом с нуля
Здравствуйте, уважаемые читатели!
Решили сменить сферу деятельности, и выбор пал на программирование? Прекрасно! В этой области много востребованных, прибыльных, творческих и вдохновляющих профессий.
Но прежде чем начать обучение, подумайте и ответьте на пару вопросов: нравится ли вам программирование, готовы ли вы ежедневно посвящать этому делу время, искренне ли интересуетесь информационными технологиями, нужно ли вам вообще программирование? Если ответ на все вопросы “да”, прошу читать дальше. В противном случае, построить карьеру в IT-сфере будет весьма трудно.
Читайте статью, если хотите узнать с чего начать обучение программированию с нуля, как освоить IT-сферу самостоятельно и с помощью онлайн-курсов, кто такой программист, что надо знать, чтобы им стать.
Кто такой программист
Программист – это человек, который разрабатывает программы и алгоритмы для решения определенных задач. В своей работе он использует математическое моделирование, на основе которого пишет код. Продуктами работы программистов могут быть компьютерные игры и операционные системы, сайты и приложения.
Стать программистом может любой человек, независимо от пола и возраста. Но он должен искренне интересоваться компьютерами и веб-технологиями, ведь они непрерывно развиваются и меняются, поэтому специалисту надо мониторить изменения и постоянно обновлять знания.
Программисты обладают такими качествами, как:
Также у большинства есть высшее, чаще всего техническое, образование. Если же это гений-самоучка, то ему не помешает наработать стаж, чтобы получить должность в известной компании.
Что нужно знать и уметь
Работу программиста не назовешь простой и понятной. Для освоения этой профессии понадобится немаленький багаж знаний и умений. Сотрудник должен иметь способности к многозадачности, уметь находить контакт с коллегами, знать иностранный язык и язык программирования.
В остальном же краткий перечень требований выглядит следующим образом:
И это лишь часть того, что должен уметь делать программист.
Как стать программистом с нуля
Прежде всего надо изучать теорию алгоритмов и структур данных. Они не зависят от конкретного языка, наоборот, языки программирования устроены в соответствии с алгоритмами и структурами.
Язык – это просто инструмент для решения бизнес-задач. Поэтому новичку надо определиться с тем, как решать задачу, разбить это решение на этапы, оптимизировать процесс, чтобы не тратить время и ресурсы впустую.
После освоения алгоритмов и структур данных нужно выбрать направление программирования. Лишь потом можно приступить к изучению веб-технологий и инструментов. Это серверные языки и языки разметки, стили CSS и JavaScript, веб-фреймворки, подходящие к выбранному языку программирования.
И напоследок научиться работать с базой данных.
Подбор направления
Перед изучением языка надо определиться с направлением. У программирования широкий спектр возможностей и вариантов работы. Можно создавать сайты и мобильные приложения, игры, социальные сети, интернет-магазины, разрабатывать операционные системы и программное обеспечение.
По основной классификации программистов делят на прикладных, системных и веб-разработчиков.
Прикладные создают программы и приложения, которые решают конкретную задачу. Примерами прикладных программ могут быть онлайн-переводчики, аудио- и видеоплееры, игры, редакторы‚ мессенджеры и т. п.
Системные занимаются разработкой операционных систем и драйверов, а также условий и инструментов для их слаженной работы. Благодаря программистам сервис может работать как единый механизм. Специалисты предотвращают или устраняют перебои и ошибки в работе целого ряда программ на предприятии.
Веб-программист работает над созданием веб-сервисов и пишет для них программную составляющую. Соцсети, интернет-магазины, информационные сайты, форумы и прочее – все это труды специалистов по работе в сети.
Выбрать направление деятельности можно среди доступных профессий:
И это только часть должностей, которые может занимать программист.
Для каждой работы нужен свой инструмент, который может не подходить для создания чего-то другого. Поэтому направление – решающий фактор при выборе языка программирования для изучения.
Выбор языка программирования
Когда начинающий специалист встает перед выбором языка, ему надо учитывать количество имеющихся на рынке труда вакансий и выбранное направление.
Можно найти предложения о работе, в которых сразу написано, с каким языком надо будет работать, например, PHP-программист или программист Python.
Если же отталкиваться от направления, то надо знать, что веб-разработчик пользуется C++, Python, Java. Системный программист – Assembler, C, C++, Python. Администратор базы данных – SQL.
Ниже приведены самые распространенные и популярные представители языков программирования:
Чтобы изучить язык, сначала надо разобраться с его синтаксисом, т. е. ключевыми словами, операторами, правилами написания кода. А дальше можно перейти к более сложным конструкциям.
Если к этому времени специалист еще не приступал к изучению фреймворков, структур и баз данных, то сейчас эти знания просто необходимы. Не надо бросаться на все сразу, лучше выбрать что-то из основного: Git, SQL, HTML, CSS, XML, JSP, Maven, Spring, ORM, REST, MySQL, PostgreSQL.
Самообразование
Книги хороши тем, что их можно читать и учиться бесплатно, и тем, что они быстро погружают в тему. Рекомендую следующие пособия:
Можно использовать бесплатные обучающие платформы, сайты и приложения, форумы, где делятся своим опытом профессиональные программисты. А можно положиться только на самостоятельное обучение, но такой путь сложен для новичка. Лучше совмещать его с другими методами, например, с онлайн-курсами.
Онлайн-курсы
Новичку предлагаются курсы от онлайн-платформ GeekBrains, Нетологии, Skillbox, Coursera, beONmax. Постигать азы сферы информационных технологий можно в своем темпе и в домашних условиях. Так цена будет ниже, чем обучение в вузе.
Обучение предполагает как теоретическую, так и практическую часть. Нередко выпускники курсов имеют портфолио, диплом или сертификат, подтверждающий их навыки и знания.
Предлагаю ознакомиться со следующими обучающими программами:
Составление резюме и портфолио
Можно начать работать на бирже, чтобы было что написать про свой опыт в резюме и добавить работы в портфолио. Для первого реального опыта подойдут и небольшие проекты. Главное – начать.
Лучше выбирать иностранные биржи, особенно если есть знания английского языка. Там и заказов больше, и доход выше. Подойдут, например, Upwork и YouTeam. Если говорить о русскоязычных биржах, то популярны Kwork, FL.ru и Freelance.ru.
Заполнить портфолио могут помочь и собственные проекты, если есть идеи, возможность и желание.
А дальше можно уже перейти на специализированные сайты с вакансиями только для программистов, например, We Work Remotely и Хабр Карьера. А можно поискать работу на таких ресурсах, как hh.ru или SuperJob.ru.
У специалиста должно быть резюме, когда он откликается на вакансию. В нем надо указать правдивые факты о проектах, в которых он участвовал, и свои достижения на этой работе. Не помешает рассказать и о собственных проектах, если они есть. Это показывает профессиональный уровень и любовь к IT-сфере.
Надо указать свои знания и навыки, но не на несколько страниц, а коротко, четко и лаконично. Нужно писать саму суть, без воды.
В портфолио лучше указывать несколько самых лучших проектов, которыми специалист если не гордится, то хотя бы доволен ими.
Советы новичкам
Создайте план обучения, разбив его на этапы, рядом с которым пропишите, что именно надо выучить и с помощью каких средств. Переход от одного этапа к другому должен быть по мере увеличения сложности.
Не растягивайте обучение на полдесятка лет. Информационные технологии имеют способность быстро развиваться. И пока вы тщательно изучаете какой-то инструмент программирования, он уже может быть заменен на что-то более современное.
При обучении используйте все материалы, сервисы и знания других людей, которые будут доступны. Не пренебрегайте ничем.
При возможности общайтесь с практикующим программистом, у которого есть опыт работы. Если он согласится курировать над новичком, направлять его, указывать на ошибки и давать задания для развития – это будет отличным дополнением ко всему обучению. Особенно если начинающий специалист обучается самостоятельно.
Узнайте больше об архитектуре компьютера.
Учите английский. Большинство обучающих программ представлены на этом языке. Есть и русскоязычные, но их значительно меньше. Без иностранного языка сложно что-то найти в англоязычном интернете. А уже непосредственно при работе программисты сталкиваются с английским во время чтения и написания кодов.
Заключение
Подведем итоги. Чтобы начать обучение программированию, надо следовать поэтапно. Сделайте следующее:
И в качестве общих советов:
Как стать программистом?
За большинством технических удобств вроде онлайн-банка или информационного табло в аэропорте стоят специалисты одной и самых востребованных профессий современности – программисты. Без них не работали бы ни гаджеты, ни соцсети. Даже заказать новые кроссовки в интернет-магазине было бы проблематично. До сих пор it-сфера только ускоряет темп развития, требуя все новых работников. Кампании готовы нанимать даже новичков. Средняя зарплата программиста начинается от 35 тысяч рублей, а уж профессионалы со стажем могут зарабатывать заоблачные деньги.
В этой статье мы расскажем, как попасть в престижную профессию, кто такие Senior-программисты, и почему без английского вам здесь придется трудно.
Кто такие программисты и чем они занимаются
Запросы it-сферы на профессионалов постоянно увеличиваются. Следовательно нужны люди, которые будут в этом разбираться: создавать, чинить, поддерживать. Кодеры бывают разные, и каждая работа имеет свою специфику. Расскажем про основные специализации айтишников:
Самый очевидный вариант. Но он не так прост, как вы можете подумать. Кодеры выполняют разные задачи в зависимости от их профильного языка программирования и проекта.
Например, разработчик мобильных приложений создаёт программы под системы android, ios и другие. Смартфон и планшет есть у каждого первого, так что тут работа закончится ещё не скоро.
Ещё одно перспективное направление – java-программирование. Большинство банковских систем спроектированы на этом языке. Банки готовы хорошо платить за качественный продукт и штатным работникам, и сторонним фирмам. Но и требования тут высоки: придется нести ответственность за корректную работу приложения с чужими деньгами. Конечно, программировать на java можно не только в банке, а хорошие it-специалисты со стажем получают около 200 тысяч рублей в месяц.
Тестировщик – специалист, без которого ни один проект не увидит релиза. Этот айтишник знает все о тонкостях кода и о местах, где программа может дать сбой. Его обязанность – проверить устойчивость продукта к ошибкам и багам и вернуть его разработчикам на исправление. На первых порах проверка делается вручную, но, когда все слабые места найдены, тестировщик пишет специальную программу, чтобы автоматизировать поиск неисправностей.
Ещё одна похожая профессия – qa engeneer, специалист по качеству продукта. Основное его отличие в том, что он не ищет ошибки в коде, а старается их не допускать. Подробно выяснить требования заказчика, спланировать разработку, наладить связь между группами программистов – все это обязанности qa engeneer. Часто тут даже язык программирования знать не надо, важнее представлять этапы разработки и особенности управления проектами.
Профессия привлекательна зарплатой: даже новичку тут могут заплатить 50 тысяч в месяц.
Согласно исследованию StackOverFlow, это самая востребованная it-профессия 2017 года. Web-программисты делятся на две категории: front end и back end (они же часто шифруются как UX/UI дизайн). Первые следят за всем, что связано с пользовательской частью: удобство приложения и сайта, интуитивно понятное использование и просто красивая картинка. Вторые прорабатывают техническую составляющую: логика сайта, его функции, взаимодействие с базой данных. Чтобы страничка в интернете выглядела современно, разработчики проходят курсы html и php, владеют css, java-script, программированием на python.
Ваша зарплата будет зависеть от количества инструментов, которыми вы владеете. Самое маленькое вознаграждение у html-верстальщиков, они получают от 25 тысяч в месяц.
Особенность 1С-программирования – тесная связь с экономической отраслью. Например, чтобы правильно начислить зарплату 3000 людей на заводе, надо где-то хранить данные об их рабочем времени, ставке, больничных и т.п. Эту задачу берет на себя программы 1С-предприятие. 1С-программист настраивает программы бухучета и документооборота так, чтобы легко выгружались документы, автоматически формировались отчеты.
Возможную рутинность работы с лихвой компенсирует порядок зарплат. Если говорить о фиксированной ставке, то начинающий Программист 1C сразу найдет вакансию с зарплатой в 45 тысяч в месяц, а ведущий специалист получает от 120. А вот в случае фриланса заработок будет зависеть от ваших навыков и от количества рабочих часов в неделю. Профессионалы зарабатывают и 200, и 500К в месяц.
Этот айтишник не совсем программист. Его особенность в том, что он отлично разбирается в «железе». Подключить принтер, ноутбук, проектор, настроить его работу, раздать интернет и спроектировать хитрую локальную сеть – это все к нему. Гуру проводов и работающих принтеров платят от 25 тысяч рублей, а зарплата программиста-сисадмина с хорошим опытом может доходить до 150 тысяч в месяц.
Он же product manager, он же product owner. Менеджер продукта выступает как переводчик между заказчиком, которые не разбирается в информационных технологиях и исполнителей-программистом. Кажется, что это работа из ничего – что заказчик с программистов сами разобраться не смогут?! Хорошо не смогут. Именно product manager может объяснить заказчику возможности функционала и потом уже сформулировать точное задачу для айтишников. На product owner лежит ответственность, чтобы готовое приложение, сайт или игра приносили пользователю максимум радости и пользы.
Любой успешный айтишник может достичь высшей позиции в it-сфере – chief procurement officer (коротко CPO). Этот человек глубоко знает продукт, понимает систему кодинга, знает лучшие стратегии для создания программного обеспечения. В подчинении ИТ-директора средней компании может находиться 30-50 человек. Средний доход… далеко выше среднего.
Как стать программистом?
Обучение программированию в вузе
Самый очевидный способ стать программистом – поступить на соответствующий профиль в вуз. Жизнь большинства специалистов уже невозможна без it-технологий. Обращаться с кодом в какой-то мере учат и математиков, и химиков, и биологов. Но чтобы не мучиться на неинтересных для вас предметах и изучать только профильные дисциплины, выберите одно из следующих направлений:
Обучение на программиста в колледже
Необязательно ждать выпускного, чтобы посвятить себя любимому занятию. Обучение на программиста можно начать после 9 класса, надо только правильно выбрать колледж. Подходящих специальностей тут не так много:
Всего в стране 71 учреждение среднего профессионального образования с нужными нам направлениями подготовки. Эти профили вы найдете в Санкт-Петербургском колледже информационных технологий, Петровском колледже, Новосибирском колледже электроники и вычислительной техники, в Уральском технологическом колледже “МИФИ” и в многих других.
Курсы дополнительного образования
Изучать приглянувшийся язык программирования можно самостоятельно в удобном темпе на одном из обучающих ресурсов. Например, на INTUIT легко подобрать курс по java-программированию. После успешного прохождения итогового тестирования система выдаст бесплатный сертификат.
Для желающих видеть преподавателя не через экран монитора, а вживую, есть очные курсы. Например, MAXIMUM ведет занятия по изучению it-сферы для школьников Digital Skills. Программирование там тоже есть, а на ознакомительное занятие можно прийти бесплатно.
Как поступить на специальность Программирование и что сдавать?
От будущих it-специалистов вузы чаще всего требуют результаты ЕГЭ по русскому языку, профильной математике и информатике. Некоторые могут попросить сдать еще и английский.
Название олимпиады | Уровень сложности |
Всесибирская олимпиада школьников | 1 |
Московская олимпиада школьников | 1 |
Олимпиада школьников «Ломоносов» | 1 |
Открытая олимпиада Университета Иннополис | 1 |
Открытая олимпиада школьников | 1 |
Открытая олимпиада по программированию | 1 |
Олимпиада «Высшая проба» | 2 |
Олимпиада СПбГУ | 2 |
Открытая олимпиада по программированию «Когнитивные технологии» | 2 |
Олимпиада по дискретной математике и теоретической информатике | 3 |
Олимпиада школьников «Надежда энергетики» | 3 |
Чем заняться сейчас, чтобы повысить свои шансы на успешную карьеру программиста
Надо понимать, что it-сфера развивается с огромной скоростью. Вузы физически никогда не успеют адаптировать программы, чтобы давать студентам самую последнюю информацию. Университет заложит основу в виде базовых возможностей языка и стандартных алгоритмов. Именно поэтому работа программиста невозможна без непрерывного самообразования. Языки программирования модернизируются, разработчики создают новые удобные инструменты, чтобы облегчить работу себе и коллегам, придумывают новые алгоритмы решения задач. Дальше мы расскажем, где и чему поучиться ещё, чтобы преуспеть в it-сфере:
Дочитали до конца? Вот вам ещё пара интересных фактов, которые помогут лучше представить профессию программиста.