Какие знания нужны, чтобы стать хорошим программистом? Есть ли какие-то умения, отличающие хорошего программиста от плохого? Делимся ответами на эти вопросы, полезными ссылками и книгами в материале.
Чтобы выяснить, что хороший программист должен знать, надо определить, кто такой «хороший программист». Стереотипы наградили этот образ плохим зрением, постоянным участием в математических олимпиадах, а также победами на них. Конечно, можно сколько угодно задирать планку, но мы попробуем предложить более общие принципы, а не конкурсный отбор. Поэтому давайте отметим вещи, которые присущи неидеализированному хорошему программисту.
Какие знания нужны программисту?
Фундаментальные знания
Сейчас не обязательно оканчивать профильный вуз, чтобы стать программистом. Можно пройти курсы, а при большом желании можно научиться программировать самостоятельно. Но, минуя технические вузы, студенты не получают необходимый фундамент для развития в программировании, поэтому мы рекомендуем пройти обучение в высшем или среднем специальном учебном заведении. Конечно, глубокие знания математики и физики не главные критерии при приеме на работу, но открывают большие перспективы и горизонты для программиста, знайте это.
Под фундаментальными знаниями стоит понимать:
- Дискретную математику. Комбинаторную оптимизацию и методы оптимизации.
- Функции и математическую индукцию.
- Линейную алгебру.
- Теорию вероятностей и математическую статистику.
Олег Карасик
«Профильное образование, несомненно, дает огромное преимущество, поскольку развивает системное мышление, умение анализировать и систематизировать информацию. Системному образу мышления учат, и его необходимо постоянно развивать. Ведь все, что построено человеком, по своей сути, является системами: от самых простых до невероятно сложных. И все эти системы, несмотря на их очевидные различия, имеют невероятно много общего – у каждой системы, есть “начало” и “конец”.
Например, чтобы dependency injection контейнер смог поставить зависимости в конструктор вашего класса, эти зависимости должны быть вначале помещены в этот контейнер, а затем контейнер должен принимать непосредственное участие в создании вашего объекта. И неважно насколько глубоко эти детали скрыты в той или иной платформе – они все равно есть.
Чтобы развивать системное мышление, вам нужно постоянно задаваться одним и тем же вопросом – “Как это работает?».
Основные теоретические и практические знания
Когда говорят о том, какие навыки и знания необходимы программистам, то в голове сразу возникает образ огромного списка технологий, которые обычно указывают в описании вакансий. Тут важно понимать, что любую технологию можно выучить. Конечно, это может занять немалый отрезок времени, но, зачастую, не так много, как может показаться.
Для того чтобы осваивать любые технологии, вам пригодятся навыки:
- Умение находить и использовать информацию.
- Желание «копать». Каждый раз когда разработчик встречает что-то непонятное, первым его порывом должно быть – разобраться, как это работает. Что делает этот метод? Зачем этот класс? Понятно, что разобраться в абсолютно всем невозможно, но важно стремиться к тому, чтобы смотря на код проекта, над которым вы работаете, у вас не было белых пятен.
- Умение пользоваться средствами разработки. Например, если вы планируете стать .NET-разработчиком, вам нужно уметь работать с Visual Studio и Visual Studio Code; знать, что такое стек вызовов, как посмотреть и изменить значения переменных, использование точек останова, навигация в коде, отлов исключений и тому подобное.
Помимо знания основных технологий, с которыми вы планируете работать, вам также нужны:
- Базовые знания об операционных системах: что такое переменные окружения? Что такое процесс? Что такое поток? Что такое рабочая директория?
- Понимание, зачем нужны инструменты контроля версий вроде Git, Subversion, TFS? Что они делают? Что такое Continuous Integration?
- Основные знания о платформе, на которой вы хотите работать. Что такое точка входа в приложение? Где она находится? Что такое сборка мусора? Как получается, что вызывается мой контроллер? Что такое logging? Что такое dependency injection?
- Знание баз данных. Без этого никуда: умение создать таблицу, вставить, получить или удалить данные. Что такое GROUP BY? Какие бывают JOIN? Чем хранимая процедура отличается от функции?
Если вы новичок и еще не знаете, какой язык программирования выбрать для изучения, ознакомьтесь с нашим материалом для начинающих программистов.
Есть один навык, который пригодится любому программисту — знание английского языка на уровне Intermediate и выше. Множество хороших книг и статей по программированию выходят именно на английском языке. Также, многие компании работают с англоговорящими клиентами, с которыми у вас будет регулярное рабочее общение. Еще английский язык понадобится вам для того, чтобы писать код. Поэтому советуем ежедневно тренировать свои навыки, общаться, читать и писать на английском, а также слушать англоязычные подкасты.
Чтобы продуктивно постигать знания и применять их на практике, мы советуем всем начинающим программистам следовать нескольким правилам:
- Выполнять все практические задания, вне зависимости от того, насколько простыми и очевидными они кажутся.
- Не копировать код из примеров и всегда печатать его вручную: каждую команду в консоль, каждую строку кода.
- Вовремя останавливаться. Если во время написания очередной строки вы поймали себя на том, что не совсем понимаете, что именно вы пишете – остановитесь, пришло время открыть книгу или браузер и начать искать ответы на свои вопросы.
- Не ленитесь. В начале пути абсолютно нормально, что программирование будет забирать у вас все вечера, выходные, отпуск и каникулы. Программируя по два часа в день, программистом не стать.
Тренды программирования
В IT-сфере постоянно появляются новые тренды. Какие-то со временем проходят, какие-то становятся золотым стандартом. Приводим примеры актуальных на 2020-2021 год трендов:
- Облачные платформы. С их помощью разрабатывается все больше и больше проектов, поэтому навыки работы с AWS, Azure и прочими становятся все более и более востребованными.
- Контейнеризация. Платформы Kubernetes, Mesos и прочие усовершенствовали процессы безопасной и эффективной сборки и доставки ПО.
- Микросервисная архитектура. ПО, разработанное при помощи микросервисов, проще поддерживать и заниматься его разработкой независимыми командами, что очень актуально для крупных проектов и распределенных систем.
Навыки и качества хорошего программиста
Несомненно, знания – самое важное, что может быть в профессии, но программисту никуда и без личностных качеств и навыков, ведь вам предстоит нелегкая работа, в которой будет задействована вся команда разработки. Делимся с вами, какими навыками и качествами обладает востребованный специалист.
Знает, что такое софт скиллы, и работает над их развитием.
В вакансиях часто фигурируют такие скиллы, как коммуникативность, умение работать в команде, стрессоустойчивость, гибкость и проактивность. Как развивать гибкие навыки с помощью упражнений, курсов, видео и книг, можно почитать в нашем материале.
Аналитически мыслит
Хороший программист чаще всего обладает аналитическим складом ума и типом мышления. Это значит, что он логичен, последователен, понимает и может объяснить каждый свой шаг. Такие люди способны находить самое эффективное и оптимальное решение любой задачи в короткие сроки. К слову, аналитически мыслить может научиться каждый, например, решая логические задачи и играя в специальные игры.
Знает, как писать чистый код
Написанный вами код будут читать ваши коллеги, а также работать с ним придется и другим членам команды. Хороший программист тот, кто умеет “кодить чисто и понятно”. Такой код поможет не просто быстрее работать, но и избежать недопониманий со стороны коллег, а также создавать меньше багов.
Стремится быть лучше, знать больше – саморазвивается
Без постоянного саморазвития не стать хорошим программистом. IT-сфера прогрессирует неустанно: появляются новые языки, фреймворки и другие инструменты. Регулярное обновление своих знаний, сомнения в том, что вы знаете «как правильно» приведут вас к успеху в карьере и сделают настоящим профессионалом.
Любит то, что делает
Каждый день идти на нелюбимую работу, чтобы писать нудный код… Думаем, это страх каждого: делать то, что не нравится. Прислушайтесь к себе, действительно ли к программированию лежит ваша душа. Давайте делать только то, что нам нравится, потому что тогда, это будет получаться лучше.
Полезная литература для развития
Книги, которые советуют прочитать тренера Тренинг-центра ISsoft:
- Стив МакКонел «Совершенный код. Мастер-класс». Книга по разработке ПО, охватывающая ВСЕ аспекты создания программ. Рекомендуем прочитать ее всем, не зависимо от языка и платформы, которую вы выбрали.
- Томас Кормен, Чарльз Лейзерсон и др. «Алгоритмы. Построение и анализ». Для профессионала эта книга — настольный справочник, а для студента — отличный учебник. Фундаментальный труд известных специалистов в области информатики достоин занять место на вашей полке.
- Род Стивенс «Алгоритмы. Теория и практическое применение». Небольшая по объему альтернатива, книга без «пугающей» математики.
- Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес «Приемы объектно-ориентированного проектирования. Паттерны проектирования». Классическая книга по объектно-ориентированной разработке. Авторы излагают принципы использования паттернов проектирования и приводят их каталог.
- Чед Фаулер «Программист-фанатик». Яркое увлекательное руководство, которое поможет быстро сделать карьеру в индустрии разработки ПО. Сборник практических советов и рекомендаций, касающихся ситуаций, с которыми сталкивается любой разработчик.
Надеемся, что вы любите писать код и потратите много времени на то, чтобы стать хорошим программистом. Если вам нужна помощь в обучении, ждем вас в Тренинг-центре ISsoft.