В отличие от многих профессиональных областей, где уровень должности не всегда демонстрирует истинные знания и опыт сотрудника (например, ведущий специалист может обладать сопоставимым опытом и навыками с главным специалистом), в программировании существует четкая иерархия, отражающая уровень образования и ценность работника для компании.
Как стать программистом с нуля?
Погружение в мир IT — задача, требующая значительных усилий, особенно если вы решаете сменить профессию и столкнулись с совершенно незнакомой сферой. В самом начале на пути к новой карьере возникают трудности в виде непонятных терминов и концепций, в то время как требования, выставляемые работодателями, могут казаться недосягаемыми. Однако получение новых знаний зачастую сопряжено с трудностями, поэтому ключевым моментом является настойчивость и желание продолжать учёбу. Вместе с Сашей Ильиным мы обсудили важные проблемы, с которыми сталкиваются новички в IT, и поделились опытом, помогающим будущим специалистам.
На старте важно задать себе важный вопрос, чтобы избежать ложных надежд и неоправданных ожиданий от этой сферы. Это касается специфики IT, которая, как и любая другая профессия, имеет свои особенности и подходит не каждому. Рассмотрим положительные стороны:
- Удаленная работа. В большинстве айти-профессий существует возможность работать из любой точки мира, забыв о необходимости посещать офис.
- Лёгкость в смене направлений. Например, если вы специализируетесь на программировании для iOS, переход на Android потребует гораздо меньше усилий, чем вам может показаться.
- Участие в технологической революции. Новый софт, устройства и технологии кардинально меняют мир и делают его лучше с каждым годом. Даже начинающий разработчик или тестировщик становится важным участником этого глобального процесса и вносит свой вклад в развитие технологий.
- Психоэмоциональная нагрузка. Для большинства людей работа в IT решает финансовые вопросы, однако она открывает новые проблемы. Симптомы выгорания, синдром самозванца и повышенная тревожность — это частые спутники айтишников, с которыми необходимо эффективно работать.
- Частая смена мест работы и постоянное обучение. Эта сфера не подойдёт тем, кто склонен к рутинной работе и ожидает неизменного заработка годами. Если ваш девиз напоминает известный анекдот — лучше подумайте о карьере в другой области. В мире программирования вполне нормально менять работу каждый год, так как новые технологии и инструменты требуют постоянного изучения, чтобы сохранить свою конкурентоспособность.
Эти особенности формируют общую культуру программистского сообщества, где важное место занимает самообразование, здоровые отношения среди сотрудников и культура open source, поддерживаемая сообществом разработчиков, создающих и развивающих множество полезных инструментов.
Работа в IT особенно привлекательна для тех, кто чувствует stagnation (стагнация) в своей текущей профессии. Когда вы осознаёте, что текущая работа напоминает трясину, зарплата не растёт, а интересные задачи не появляются, принять решение попробовать себя в новой области — это хорошая возможность.
Как не бросить учебу на полпути?
Чтобы избежать неудачи во время получения образования, важно установить четкие цели. Оцените, чего вы хотите добиться через 3-5 лет: кем планируете работать, какую зарплату хотели бы получать и что еще хотели бы иметь. Кроме того, подумайте, что вы потеряете, если не достигнете поставленных целей за это время.
Попробуйте воспользоваться тактическими хитростями: занимайтесь по чуть-чуть, но каждый день — это поможет сформировать привычку, которую сложно будет потерять в один день. Не забывайте о дисциплине: когда садитесь учиться, сразу открывайте курс, IDE или любой другой инструмент, которым собираетесь пользоваться. Проверьте себя, чтобы не отвлекаться на Twitter или короткие видео на YouTube перед началом практики.
Полезная информация о том, как стать программистом
Программирование охватывает множество направлений | Вы можете создавать веб-сайты, мобильные приложения, компьютерные программы или даже операционные системы. |
Обучиться программированию можно самостоятельно, без поступления в университет | Для этого отлично подойдут видеолекции, книги, а также платные и бесплатные онлайн-курсы. |
Для успешной карьеры недостаточно знать синтаксис одного языка программирования | Важны системное мышление, умение анализировать информацию и строить алгоритмы. |
Программист — это специалист, использующий языки программирования для создания компьютерных и мобильных приложений, игр, сайтов или операционных систем.
Как и в любой профессии, в программировании присутствуют свои специализации. Так, например, стоматолог не сможет вылечить сердце, так и веб-программист без дополнительных знаний не сможет создать операционную систему или систему для обучения искусственного интеллекта.
«Сыночек, ты же программист! Переустанови мне компьютер, а то на Одноклассниках что-то не так работает. И кстати, на этом фото надо убрать морщины и фон поменять на что-то более веселое!» — с энтузиазмом восклицает мама Пети, который только что закончил курс по разработке игр для Android. Хотя это может показаться анекдотом, программисты часто сталкиваются с подобными просьбами. Для человека, далеким от специфики работы, трудно понять, что разработчик приложений на мобильные устройства может не знать, как использовать фоторедактор.
Уровни навыков программиста
В карьере программиста можно выделить три основные профессиональные категории. Важно отметить, что данное разделение достаточно условно, и трудно точно определить момент, когда разработчик, например, переходит из уровня мидла в сеньора. Даже в разных компаниях могут отличаться критерии оценки.
Junior
Джуниоры — это начинающие программисты, те, кто только ставит свои первые шаги в этой профессии. С английского название категории переводится как «молодые». Они уже определились с направлением, в котором хотят развиваться, и знакомы с базовыми функциями одного из языков программирования, однако для решения сложных задач зачастую нуждаются в помощи более опытных коллег. Junior обычно придерживаются основного программирующего принципа: «Работает — не трогай!», чтобы избежать случайного сбоя системы.
Middle
Middle (в переводе с английского — «середина») — это разработчики, находящиеся между неопытными джуниорами и опытными сеньорами. Это те, кто способен самостоятельно находить решения для сложных задач, знает большое количество алгоритмов и конструкций выбранного языка программирования. Они также могут разобраться в чужом коде и предложить оптимизации и улучшения.
Middle разработчики способны нарушать основные правила программирования, так как могут оптимизировать код, который работает не идеально.
Senior
Сеньоры — это высший уровень, достичь которого не так просто. Сеньор не только умеет писать оптимизированный код и знает, что именно он делает, но и понимает, что происходит в системе во время исполнение программы, и как усовершенствовать её работу, чтобы достичь более высокой скорости и снизить потребление ресурсов.
Сеньор всегда имеет в виду главный принцип работы с кодом, так как уже исправляет то, что было сделано мидлом, и знает, что туда перебирается обращаться не следует.
С чего начать изучение программирования
Лучше всего начать с практики. На сегодняшний день такая стратегия становится все более популярной. Если вы хотите начать кодить, то нет необходимости углубляться в изучение структуры компьютера или принципов работы операционных систем. Конечно, эти темы понадобятся вам позже, но для начала достаточно создать свои первые программы. Вам в этом может помочь учитель, учебник или электронный ресурс с теоретическими материалами и заданиями с автопроверкой.
Нужен ли английский программисту
Да, знание английского языка значительно облегчает понимание команд и структур, так как ключевые слова, используемые в программировании, обычно представляют собой обычные английские слова.
Чем глубже вы будете изучать программирование, тем более важным будет знание английского. Во-первых, вы сможете читать документацию по различным языкам и библиотекам, которая не всегда переводится на русский. Во-вторых, вы сможете находить более точные и информативные ответы на ваши запросы в интернете, так как IT-сообщество в основном интернационально и общается на английском. В-третьих, для получения доступа к новым образовательным возможностям, таким как книги по программированию, онлайн-встречи и курсы повышения квалификации, зачастую требуется знание английского.
Нужно ли программисту знать математику
Ответ на этот вопрос зависит от множества факторов. На начальном уровне, когда программист устраивается на руководство стажера или джунов, собеседование можно пройти лишь с базовыми знаниями математики. Тем не менее, если вы планируете развиваться и претендовать на более высокую зарплату, вам следует углублённо изучить не только школьный, но и университетский курс.
Требуемый уровень математики варьируется в зависимости от выбранного направления. Например, для работы с данными и создания нейронных сетей потребуется знание математики и статистики. Если же вы хотите заниматься разработкой визуальных интерфейсов, базового уровня математики будет достаточно. Создание алгоритмов и проектирования архитектуры требует понимания, как оптимизировать работу программы, что также связано с математикой.
Виды программистов: какое направление выбрать
Давайте подробно рассмотрим различные направления и то, для кого они подойдут.
1. Embedded-разработчик
Это специалист, который программирует устройства, такие как роутеры, заводские станки, умные лампочки, дроны и другие электронные приборы, не относящиеся к компьютерам или мобильным телефонам. Путь к этой специальности довольно сложен, так как необходимо не только знание программирования, но и понимание физики и инженерии. Выбирайте эту сферу, если хотите чувствовать себя олдскульным программистом и готовы не только работать за компьютером, но и иногда брать в руки паяльник.
2. Разработчик мобильных приложений
Специалист, который создает интерфейсы приложений — располагает кнопки и выбирает шрифты, а затем заставляет приложение выполнять определённые функции, например, записывать ваши дела или считать пройденные шаги. Выбирайте это направление, если готовы учить не самые популярные языки программирования и погружаться в детали работы операционных систем мобильных устройств.
3. Data Scientist / Аналитик данных
Человек, который применяет код для создания нейросетей и систем предсказания. Например, модель, которая на основе вашего музыкального плейлиста предлагает новые песни по вашему вкусу, или система, встроенная в приложение банка, которая оценивает возможность выдачи кредита. Это направление интересно тем, кто увлечён математикой и статистикой, но не желает углубляться в детали работы компьютеров и операционных систем.
4. Тестировщик и специалист по безопасности
Это люди, которые следят за тем, чтобы код работал без сбоев и не подвергался атакам вредоносных систем. Они программируют меньше, чем другие специалисты, но им нужно отлично разбираться в устройстве компьютера и в потенциальных сценариях сбоев или хакерских атак. Это направление подойдет тем, кто любит анализировать детали, внимателен к нюансам и готов долго размышлять над решением проблем.
5. Разработчик игр
Это специалист, создающий игры для компьютеров, приставок, телефонов и планшетов. Если вам нравится писать много кода, вы сильны в физике и математике и готовы учиться графике и звуковому дизайну, это направление вам подойдёт.
6. Фронтенд-разработчик
Специалист, занимающийся созданием сайтов. Его задача заключается в том, чтобы превращать дизайнерские макеты в работающие веб-сайты — обеспечивать функционирование анимаций и загрузку изображений. Это направление нужно рассматривать, если вам не нравится математика, но вы готовы внимательно переносить дизайнерские детали на сайт и постоянно осваивать новшества, так как результирующий продукт будет сразу видеть пользователь.
7. Бэкенд-разработчик
Слой, аналогично фронтендеру, создаёт сайты, но его специализация заключается в внутренней части сайта. Он отвечает за то, чтобы данные из форм сохранялись в базе данных и извлекались быстро. Бэкенд-зависимый разработчик обеспечивает такие функции, как транслирование видео на сайте и отображение рабочих календарей. Это направление наиболее популярно и востребовано на данный момент. Если вы хотите стать программистом, но всё ещё не определились, в каком направлении работать, или если хотите писать много кода, особенно на Python, разрабатывать новые функциональные возможности для веб-сайтов и сервисов, выберите бэкенд-разработку.
Плюсы и минусы работы программистом
Если вы обладаете необходимыми качествами и готовы изучать озвученные ранее направления, прежде чем переходить к обучению, стоит рассмотреть плюсы и минусы данной профессии.
Плюсы
Возможность творческой самореализации — в разработке программного обеспечения имеется широкий спектр возможностей для реализации своих идей и креативности.
Высокий уровень заработной платы — профессия программиста относится к наиболее высоко оплачиваемым в современном мире, что обеспечивает достойный уровень жизни.
Постоянное развитие — разнообразие технологий требует от программиста постоянного изучения новых аспектов, что помогает расширять свою компетенцию.
Возможность работать с любимыми устройствами — программистам удаётся создавать программы для устройств, которые они используют с удовольствием каждый день.
Минусы
Монотонность работы — выполнение большого объёма рутинных задач может быстро надоесть.
Высокий уровень ответственности — каждая ошибка может привести к сбоям в работе программного обеспечения, что требует высокой концентрации.
Необходимость постоянной концентрации — для успешного программирования важно сосредоточиться на одной задаче длительное время, что бывает сложно сделать.
Работа за компьютером в течение длительного времени — это может повредить зрению и осанке, способствуя возникновению других проблем со здоровьем.
Каждая профессия имеет свои достоинства и недостатки. Если положение дел вас устраивает, а минусы не отпугивают, настало время определить, с чего начинать своё обучение программированию, а также где это можно осуществить.
Где учиться на программиста
Рассмотрим основные опции для получения обучения.
Несмотря на сложности, самостоятельно изучить программирование вполне реально, если у вас достаточно мотивации и свободного времени. Обращайтесь к профильной литературе, видеокурсам в интернете и обучающим онлайн-сервисам — например, RSDN, Code Basics, Webformyself и другим.
Начинать стоит с изучения основ программирования и направления в IT — понимание своего интереса поможет вам задуматься над выбором языка программирования. Затем перейдите к углубленному изучению теории и языковых основ. После этих этапов следует изучить темы модульного тестирования и безопасности.
Это хороший вариант для тех, кто испытывает трудности при самообучении, но не желает тратить годы на формальное образование. Ищите курсы, которые охватывают не только базовые знания, но и продвинутые темы. Даже лучше, если школа предлагает помощь в составлении резюме и трудоустройстве.
Существует мнение, что диплом для айтишников не так важен. Тем не менее, для стремящегося к высокому доходу и карьерному росту окончание профильного вуза может стать важной вехой.
Этот вариант обучения подходит тем, кто собирается изучать IT с нуля, а также тем, кто обучается в вузе и нуждается в индивидуальном подходе.
Офлайн- или онлайн-репетитор поможет объяснить материал и проанализировать практические ошибки, которые вы будете испытывать на первых порах.
Чтобы не тратить сразу много денег на качественную литературу по программированию и оплату обучения, используйте беспроцентную рассрочку по карте Халва. Среди наших партнеров вы найдете онлайн-школы и книжные магазины для выгодных покупок.
Халва поможет вам процветать в любую погоду: покупать товары в беспроцентную рассрочку в более чем 250 000 магазинах-партнерах на сумму до 500 000 рублей, получать кэшбэк и накапливать сбережения в удобной онлайн-копилке. Оформите карту, чтобы открыть двери к финансовому благополучию!
Что спрашивают у джунов на собеседовании
Конкретные вопросы зависят от сферы: фронтенд-разработчики и системные аналитики проходят разные этапы. Однако общие принципы и структура собеседований обычно идентичны.
Тестовое задание. Тестовое задание не всегда присутствует: иногда на начальном этапе отбора работодатель предлагает кандидатам выполнить тестовое задание, чтобы отсекать неподходящих. Например, верстальщику могут поручить сверстать страницу согласно предоставленному макету, фронтендеру — настроить анимацию на странице, а бэкендеру — установить связь с сервером. Обычно выполнение таких заданий не занимает больше часа. Во время работы важно пользоваться лучшими практиками, создавая чистый и понятный код. Работодатели иногда просят указать время выполнения задания, чтобы понять скорость кандидата. Указывайте честные сроки, так как в случае несоответствия, это поможет избежать несоответствия в дальнейшем.
Техническое интервью. Это своего рода экзамен, на котором интервьюер задает вопросы и может предложить задачи, которые помогут ему понять уровень знаний кандидата. Вот примеры вопросов:
- Теория: как устроены определённые структуры данных, что значит данное понятие, в чем разница между типами и так далее;
- Языковые особенности: какие значения имеют переменные разных типов по умолчанию, как реализован конкретный принцип в языке, как поправить задачу с учётом спецификации языка;
- Особенности фреймворка: какие у него есть возможности, что обозначает это или иное понятие, как пользоваться определённым инструментом и так далее;
- Алгоритмы и принципы: что значит то или иное понятие из ООП, как устроена данная парадигма, какие алгоритмы для решения задач вы знаете и как можно решить задачи эффективнее;
- Практика: решение несложной задачи, например, написание SQL-запроса по определённым условиям, реализация алгоритма или нахождение решения математической задачи.
Популярные вопросы могут меняться из года в год с изменением технологических стеков. Поэтому перед началом поиска работы стоит освежить знания, посмотрев актуальные списки популярных вопросов для вашей специальности и технологий — это помощь в подготовке к собеседованию.
Обсуждение общего характера. Оно может проходить до или после технического интервью. Это стандартное собеседование, заочное в любой области: рекрутер задает вопросы об ожиданиях, целях, увлечениях, причинах выбора именно этой вакансии. На этом этапе также могут рассказать о компании, её миссии и требованиях, а также об основных задачах работы. На этом этапе рекрутер подбирает кандидата, и кандидат тоже выбирает, подходит ли ему работодатель. Рекомендуем внимательно относиться к собеседованию, чтобы понять, сможете ли вы работать с этой компанией. Лучше отказаться от неподходящей вакансии, чем устроиться не туда, выгореть и потратить своё время.
Можно ли научиться программированию без курсов?
На данный момент существует множество онлайн-ресурсов, учебников, видеоуроков и сообществ, где можно самостоятельно начать изучать программирование.
Вот несколько рекомендаций, которые могут помочь вам освоить программу без предоплаченного курса:
- Изучение онлайн-ресурсов: платформа типо Codecademy, Coursera, Udemy, freeCodeCamp и другие предлагают как бесплатные, так и платные курсы по различным языкам программирования и технологиям.
- Чтение книг: на данный момент доступно множество изданий по программированию, которые подают основополагающие концепции и понимание языков программирования и методов разработки.
- Практика путем решения задач: практическое применение — важнейшая часть обучения программированию. Участвуйте в соревнованиях, создавайте свои проекты, решайте практические задачи.
- Общение с другими: примкните к сообществам программистов в социальных сетях или специализированных платформах. Общение с коллегами позволит задавать вопросы, делиться опытом и получать своевременные отзывы.
- Изучение документации: разберитесь, как работать с официальной документацией по языкам программирования и фреймворкам. Это поможет быстрее разбираться в новых технологиях.
Что почитать
- Google Developers — надежный источник, где можно находить текущие новости о продуктах и достижениях фирмы.
- I Programmer — сайт для программистов, с новостями о всех направлениях от UX до робототехники и прочих языков программирования.
- Smashing Magazine — дает статьи о веб-дизайне, где представлены примеры кода, новые кейсы, советы по трудоустройству и общению с клиентами.
- Хабр — универсальный ресурс на русском, где можно найти гайды, обсуждения, код-ревью и кейсы от разработчиков крупных и малых компаний.
- Вастрик — авторский инди-блог по IT и жизни в технологическом мире, с текстами о машинном обучении, блокчейне, VR, вычислительной фотографии и машинном переводе.
- Reddit — популярный международный форум, где встречаются опытные разработчики, делятся своими кейсами и комментируют публикации. Вам понадобятся теги вроде programming.
- Stack Overflow — платформа для программистов, где можно запросить code review, комментировать и оценивать публикации.
- CyberForum — форум для программистов и системных администраторов, где помогают в решении задач по программированию.
- Game Dev — форум, где обсуждают создание игр и всё, что с этим связано.
- Crash Course on Python, разработанный в сотрудничестве с Google;
- Java Programming and Software Engineering Fundamentals от Duke University;
- HTML, CSS и Javascript для веб-разработчиков от Johns Hopkins University;
- iOS-разработка: Swift, UI и многопоточность от МФТИ;
- Основы Python для Data Science;
- Программирование для веба на JavaScript;
- Введение в C++.
- Чистый код Роберта Мартина;
- Совершенный код Стива Макконнелла;
- Искусство программирования Дональда Кнута;
- Паттерны проектирования Эрика и Элизабет Фримен;
- Алгоритмы: построение и анализ Томаса Кормена и Чарльза Лейзерсона.
Чтобы самостоятельно стать программистом с нуля, нужно иметь базовое понимание компьютерных наук и языков программирования. Важно выбрать конкретный язык программирования для изучения и начать изучать его. Также нужно практиковаться, создавая свои собственные проекты и участвуя в сообществах программистов.