5 тем, в которых должен разбираться каждый программист


Содержание

10 статей для программистов

В этой статье вы узнаете, что каждый программист должен знать из таких тем, как память, Юникод, арифметика с плавающей точкой, сеть, объектно-ориентированный дизайн, время, кодирование URL, строка и многое другое. Этот список очень важен, особенно для начинающих новичков, так как именно им не хватает практических знаний. Полученные знания об основах в начале карьеры помогает избежать ошибок, которые сделали другие программисты и разработчики программного обеспечения на их курсе обучения.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРАММИСТ О ПАМЯТИ

Знание памяти в современной системе становится еще более важным, если вы находитесь в пространстве написания высокопроизводительного приложения. Разработчики оборудования придумали все более сложные методы обработки памяти и ускорения, такие как кэш ЦП, но они не могут работать оптимально без некоторой помощи программиста. Вы много можете узнать о О RAM, различных типах памяти, прямом доступе к памяти, конструкции контроллера памяти и памяти в целом. Одним словом, обязательно прочтите для программистов любого уровня опыта.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ КОМПЬЮТЕРЩИК ОБ АРИФМЕТИКЕ С ПЛАВАЮЩЕЙ ТОЧКОЙ

Арифметика с плавающей точкой — сложная тема, и ее нелегко освоить. Даже многие программисты Java не знают, что может пойти не так при сравнении значения float / double с оператором==. Эта статья является еще одной жемчужиной этой серии и обязательна для чтения для всех разработчиков программного обеспечения и программистов. По мере того, как ваш опыт растет, вы, как ожидается, знаете тонкие детали общих вещей, и арифметика с плавающей точкой является одним из них. Как старший Разработчик Java, вы должны знать, как выполнить денежный расчет, когда использовать float, double или Big Decimal классы, как округлить числа с плавающей запятой и т.д. Даже если вы знаете основы арифметики с плавающей точкой, вы узнаете что-то новое о вычислении с плавающей точкой, прочитав статью.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ РАЗРАБОТЧИК О UNICODE

Кодировка символов — это еще одна область, где многие программисты борются за абсолютный минимум, абсолютно каждый разработчик программного обеспечения положительно должен знать о Unicode и наборах символов. Он был написан Джоэлом Спольским, одним из основателей statckoverflow.com. Джоэл написал этот пост в своем блоге почти 10 лет назад, но он по-прежнему актуален в современном мире. Эта статья научит Вас, что такое Unicode, что такое Кодировка символов, как символы представлены с помощью байтов и многое другое. Одна из лучших вещей в этой статье — это язык и поток, даже если вы ничего не знаете о Unicode, вы можете легко понять.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРАММИСТ О ВРЕМЕНИ

Помимо кодирования символов, время и дата — это еще одна область, где многие программисты борются. Даже старшие разработчики потерялись между GMT, UTC, переходом на летнее время и между високосными секундами. Есть так много вещей, которые могут пойти не так, и есть равное количество неправильных представлений. Такие вещи, как, содержит ли дата часовой пояс или нет, могут смутить вас, а преобразование времени UNIX в другой часовой пояс может вас напугать, заставит забыть о синхронизации часов и задержек. Я надеюсь, что многие из вашего заблуждения о времени уйдет, и вы будете строить фундаментальный отсчёт времени, читая эту классическую статью.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ВЕБ-РАЗРАБОТЧИК О КОДИРОВКЕ URL

В этой статье описываются распространенные заблуждения о кодировке Uniform Resource Locator (URL), а затем предпринимаются попытки прояснить кодировку URL для HTTP, прежде чем представлять частые проблемы и их решения. Хотя эта статья не является специфическим для любого языка программирования, он иллюстрирует проблемы в Java) и заканчивается объяснением, как исправить проблемы кодирования URL в Java, и в веб-приложении на нескольких уровнях. Вы узнаете основы грамматики URL, общий синтаксис URL в HTTP и другой протокол. Эта статья также исследует общие подводные камни URL-адресов, например, Кодировки символов и проблемы с кодировкой/декодированием URL. Если Вы программист Java, то Вы также узнаете о том, как правильно обрабатывать URL-адреса в приложении Java. Создание URL-адреса и использование клиентской библиотеки Apache Commons HTTP. Одним словом, обязательно прочитайте статью для любого веб-разработчика и программиста.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРАММИСТ О ВЕБ-РАЗРАБОТКЕ?

Это интересная статья от программистов stack exchange, о том, что должен каждый программист, реализующий технические детали веб-приложения, рассмотреть прежде, чем сделать сайт общедоступным. Это включает в себя вещи, начиная от дизайна интерфейса и пользовательского опыта, безопасности, веб-стандартов, производительности, оптимизации поисковых систем(SEO), технологий и нескольких важных ресурсов. Поскольку сегодняшний мир очень зависит от интернета и программиста, имеющего свой личный сайт, блог довольно распространен. Опыт, накопленный в этой статье, даже поможет не только в вашей профессиональной деятельности, но и в вашей личной работе. Вы узнаете обо всех ключевых технологиях, таких как HTTP, HTML, XML, CSS, JavaScript, Совместимость браузеров, советы по сокращению времени загрузки вашего сайта, XML sitemap, спецификации W3C и некоторые другие ключевые детали.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРАММИСТ О SEO

Это еще одна статья, которая очень важна для веб-разработчиков, программистов и блогеров. SEO слишком велик, чтобы быть проигнорированным, так как многие программисты, а также блогеры, это важно, чтобы узнать несколько основ поисковой оптимизации, чтобы помочь Google найти их содержание и представить другим коллегам-программистам. Поскольку ни одна компания не может выжить без веб-присутствия в современном взаимосвязанном мире, SEO становится еще более важным. Если у вас есть стартап, продажа любого продукта, то SEO-это то, о чем нужно заботиться. Все программисты, особенно веб-разработчики могут в значительной степени извлечь выгоду из этой статьи. Помните, что поисковая оптимизация является обширной и очень динамичной темой, а также варьируется между различными поисковыми системами, например, Google, Yahoo и другими. Таким образом, для того, чтобы освоить эту тему, Вы всегда должны обновить свои знания.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРАММИСТ C О НЕОПРЕДЕЛЕННОМ ПОВЕДЕНИИ #1/3

Язык программирования C имеет понятие «неопределенное поведение». Неопределенное поведение — это широкая тема с множеством нюансов. Многие, казалось бы, разумные вещи в C на самом деле имеют неопределенное поведение, и это общий источник ошибок в программах. Кроме того, любое неопределенное поведение в C дает лицензию на реализацию (компилятор и среда выполнения) для создания кода, который форматирует жесткий диск, делает совершенно неожиданные вещи или еще хуже. Прочитайте эту отличную статью, чтобы глубоко погрузиться в море неопределенного поведения.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРАММИСТ О СЕТИ

Вы программист. Вы когда-нибудь задумывались, как работают многопользовательские игры? Со стороны это кажется волшебным: два или более игроков, разделяющих последовательный опыт по сети, как будто они на самом деле существуют вместе в одном виртуальном мире. Но как программисты, мы знаем, что правда того, что на самом деле происходит, сильно отличается от того, что вы видите. Оказывается, все это иллюзия. Это очень интересная статья о сети, написанная для игровых программистов, но я думаю, что каждый программист и разработчик может извлечь из этого пользу.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ РАЗРАБОТЧИК JAVA О STRING

Каждый программист Java должен знать об этом. Строка очень важна в повседневном программировании на Java, поэтому хорошие знания необходимы для любого Java-разработчика. В этой статье затрагиваются многие важные области String, включая строковый пул, строковый литерал, сравнение String using = = vs equals (), преобразование байтов в String, почему String является неизменяемым, правильно объединяя строки и многое другое. Продвинутый программист может уже знать все эти вещи, но даже тогда это хорошо, чтобы пересмотреть их.

ЧТО ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРАММИСТ О БЕЗОПАСНОСТИ?

Этот вопрос задал один студент по программированию в StackOverflow. Так же, как мы много узнаем об общих концепциях программирования, таких как Операционная система, алгоритм, структура данных, компьютерная архитектура и другие вещи, также важно знать о безопасности. Хотя безопасность является обширной темой, начиная от шифрования / дешифрования, SSL, веб-безопасности, запутывания, аутентификации, авторизации и т.д., базовые минимальные знания должны быть у каждого программиста.

КАЖДЫЙ ПРОГРАММИСТ ДОЛЖЕН ЗНАТЬ НОМЕРА ЛАТЕНТНОСТИ

Это бонусная статья, но она должна быть прочитана. Для того, чтобы написать высокопроизводительное приложение на любом языке программирования, например, Java или c++, вы должны знать основные числа латентности, например, сколько времени требуется для чтения переменной из памяти, из кэша L1, из кэша L2, из случайного чтения в SSD и с диска. Сколько времени требуется, чтобы заблокировать разблокировку мьютекса, чтобы отправить пакет данных из одного города в другой или выполнить это туда и обратно, в том же центре обработки данных. Эти числа задержки не зависят от любого языка программирования. Разработчик должен написать высокочастотные приложения с низкой задержкой. Хорошая вещь об этой ссылке заключается в том, что она также предоставляет Вам сравнительный анализ того, как эти числа латентности эволюционировали за эти годы. Вы можете увидеть, что эти цифры задержки были в 2006 году и что они представляют сейчас.

Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.

Что должен знать и уметь хороший программист?

Какие знания нужны, чтобы стать хорошим программистом? Есть ли какие-то умения, отличающие хорошего программиста от плохого? Если вы готовитесь к выбору профессии и хотите в этом разобраться, наша статья – для вас.

Чтобы выяснить, что хороший программист должен знать, надо определить, кто такой «хороший программист». Стереотипы наградили образ хорошего программиста плохим зрением, постоянным участием в программистских и математических олимпиадах, а также победами на них. Конечно, можно сколько угодно задирать планку, но мы попробуем предложить более общие принципы, а не конкурсный отбор. Поэтому давайте отметим вещи, которые присущи неидеализированному хорошему программисту.

Сейчас не обязательно оканчивать профильный вуз, чтобы стать программистом. Достаточно пройти курсы, а при большом желании можно научиться программировать самостоятельно. Минуя технические вузы, студенты не получают необходимый фундамент для развития в программировании. Конечно, глубокие знания математики и физики не главные критерии при приеме на работу, но открывают большие перспективы и горизонты для программиста, знайте это. Фундаментальные знания, например, алгоритмы, необходимы всем, кто хочет стать хорошим программистом.

Хороший программист чаще всего обладает аналитическим складом ума и типом мышления. Это значит, что он логичен, последователен, понимает и может объяснить каждый свой шаг. Такие люди способны находить самое эффективное и оптимальное решение любой задачи в короткие сроки. К слову, аналитически мыслить может научиться каждый, например, решая логические задачи и играя в специальные игры.

  • Стремление быть лучше, знать больше – саморазвитие.

Без постоянного саморазвития не стать хорошим программистом. IT-сфера развивается неустанно: появляются новые языки, фреймворки и другие инструменты. Регулярное обновление своих знаний, сомнения в том, что вы знаете «как правильно» приведут вас к успеху в карьере и сделают настоящим профессионалом.

  • Любовь к программированию

Каждый день идти на нелюбимую работу, чтобы писать нудный код… Думаем, это страх каждого: делать то, что не нравится. Прислушайтесь к себе, действительно ли к программированию лежит ваша душа. Давайте делать только то, что нам нравится, потому что тогда, это будет получаться лучше.

Так, в общих чертах мы понимаем, кто такой «хороший программист». Давайте теперь разберемся, что нужно знать программисту.

Какие знания нужны программисту?

Английский язык понадобится вам для того, чтобы писать код. Также, многие компании работают с англоговорящими клиентами, с которыми у вас будет регулярное рабочее общение. Кроме того, множество хороших книг по программированию именно на английском языке. Поэтому советуем вам ежедневно тренировать свои навыки, общаться, читать и писать на английском, а также слушать англоязычные подкасты.

Конечно, программист обязан знать языки программирования. Вначале карьеры вам нужно определиться с тем, чтобы вы хотели делать, какая у вас цель обучения и посмотрели, какой язык программирования сейчас наиболее востребован. Не существует программистов, которые изучили лишь один язык, и им его достаточно для работы на десять лет вперед. Тут вы можете подробнее почитать, какой язык программирования выбрать.

  • Алгоритмы и структуры данных.

В программировании все основывается на алгоритмах и структурах данных. Если вы можете разложить большую задачу по полочкам, то вы легко найдете решение любой проблемы в устройстве этих полочек. На самом деле программист каждый день использует знания алгоритмов, даже не замечая этого. Какие бы задачи ни решал разработчик, он всегда использует структуры данных. И чтобы иметь хотя бы поверхностное представление о том, что такое структуры данных и как они работают нужно также понимать, что такое алгоритмы. Если вы не знаете ни того, ни другого – как вы можете быть уверены в том, что принимаете правильное решение в использовании определенного алгоритма?

Мы рассказали об основных вещах, которые должен знать программист. Надеемся, что вы любите писать код и потратите много времени на то, чтобы стать хорошим программистом. Если вам нужна помощь в обучении, ждем вас в Тренинг-центре ISsoft.

5 тем, в которых должен разбираться каждый программист

Большинство из нас при становлении на путь программиста просто следовали детской любви к головоломкам и играм. Очевидно, что при получении первых знаний в этой сфере большинство коллег стараются придумать игру или какое-то развлекательное приложение. Здесь представлено 5 игр, они дадут толчок для профессионального развития и помогут преодолеть длинный путь становления от новичка до ведущего разработчика.

Быки и коровы

Суть игры: соперник пользователя, искусственный интеллект или друг, загадывает любое число из 4 цифр, единственное условие – цифры не должны повторяться.

Задача: игрок должен за минимальное количество ходов определить загаданное число. Подсказками являются «коровы» (угадывая цифру, позиция остаётся неизвестной) и «быки» (совпадение отмечается как у позиции, так и цифры).

На примере: была загадано число «8743», а ответ дали «1340». Программа должна обработать результат и выдать 1 корова (цифра «3») и 1 бык (цифра «4»).

Чем полезно: для создания игры нет необходимости в специфических знаниях. Подобную задачу можно написать практически на любом языке . Для обработки данных придётся использовать подавляющее большинство циклов и операторов базового уровня знаний. В результате получится достаточно неплохая игра, в которой можно скоротать час времени.

Как усложнить: программист может внедрить систему сохранения результатов, создать статистику, соревнование в компании друзей по кругу, турнирный режим, сетевая игра.

Текстовый квест

Суть игры: принципы можно регулировать самостоятельно, строгих требований не существует. Выбирается линейный или интерактивный сюжет, который изменяется в зависимости от действий пользователя. Более сложная и трудоёмкая работа – создание десятков исходов. Примером может послужить известное шоу « Миллионер », а также аналог « Dungeons & Dragons ».

Чем полезно: программист, не пытавшийся создать искусственный интеллект или его подобие – ничего не добьётся в профессии. Текстовый квест помогает стать на путь создания ИИ . От программиста требуется дотошность, вычисление многочисленных вероятностей и реакции на изменения. Постоянное оперирование данными и необходимость прогнозировать следующий шаг – это полезные навыки в любой сфере работы. Игру удаётся создать и более просто, но всегда необходимо углублённое изучение классов, модулей и объектов.

Как усложнить: самое сложное в создании искусственного интеллекта – научить робота импровизации.

Крестики-нолики

Суть игры: пользователю предоставляется поле, разделённое на 9 клеток, по 3 в высоту и ширину. Каждому пользователю, всего 2 участника, присваивается своя фигура: круг и крестик. Поочерёдно они заполняют поле. Начинает ход пользователь с крестиком. Победа присуждается тому, кто первый соберёт ряд из 3 собственных фигур, можно делать линию по вертикали, горизонтали и диагонали.

Чем полезно: при переходе к графическому типу игры придётся научиться базовым концепциям. Даже такая примитивная игра потребует много времени и строк кода. Ситуации однотипные, но исходов существует много. Программист точно успеет набить руку. Функциональный код – это более сложный вариант создания игры, но требует меньше времени.

Как усложнить: предусмотреть возможность увеличения поля и регулировки сложности.

Пятнашки (Змейка)

Суть игры: пятнашки иначе называют «Игры в 15» — это классическая головоломка. Задача пользователя заключается в необходимости за минимальное количество ходов расставить кости с точками (количество от 1 до 15) в квадрате 4 х 4. Одна ячейка пустая, в неё можно перемещать кубик с прилегающей стороны.

Змейка – это стандартная игра, знакомая многим из монохромных телефонов. В ней змейка движется по полю по осям X и Y. На поле случайным образом появляется точка, которую пользователю следует подобрать. После касания змейка увеличивается в размерах. Задача пользователя сводится к необходимости не врезаться в препятствия и границы поля, а также избегать попадания на собственный хвост.

Чем полезно: здесь потребуется более высокий уровень навыков в графической разработке. Алгоритм действий относительно прост, а анализ выполняется минимальным количеством кода.

Как усложнить: изменять форму поля, размещение стен, ускорять движение змейки.

Арканоид (Бильярд)

Суть игры: в основе игры лежит взаимодействие с множеством объектов, которые имеют уникальные инерционные и физические параметры.

Чем полезно: потребуется не только сложная обработка графического объекта, но учёт физических характеристик: массы, скорости, траектории, формы. Основной проблемой разработчика станет сложность расчёта, так как цельные значения встречаются редко. В ходе работы потребуется работа с погрешностями, созданием моделей поведения на основании ряда факторов.

Как усложнить: достаточно выполнить арканоид, в котором подразумевается установка классического бонуса и изменение скорости движения объекта в зависимости от скорости. Сделайте русский бильярд и учтите силу трения с сукном стола.

5 навыков, которыми должен обладать каждый программист

Эта статья для тех, кто только начинает или планирует начать карьеру программиста. Вещи, описанные ниже, покажутся кому-то очевидными, тем не менее, новичкам эта информация будет полезна.

Цукерберг рекомендует:  Говнокодер - Помощь с js

Технический английский на базовом уровне

Почти вся техническая документация пишется на английском языке. Исходный код, в большинстве отраслей, пишут на английском. Самые актуальные события в сфере IT освещаются, в первую очередь, на англоязычных ресурсах. Если вы хотите стать хорошим специалистом, востребованном на рынке труда, то английский язык нужно знать хотя бы на уровне «прочитать документацию» и «написать баг-репорт».

Системы контроля версий

Каждый программист обязан понимать принцип и уметь работать хотя бы с одной системой контроля версий. Неплохой вводный материал — первые три главы книги Pro Git.

Слепой метод набора текста

Когда сидишь 8 часов на рабочем месте, мотать головой от клавиатуры к монитору — довольно утомительное занятие. Умение набирать вслепую помогает лучше сосредоточиться на решаемой задаче. Руки пишут код «на автомате» и мозг не тратит лишнего времени на переключение контекста между набором текста и обдумыванием алгоритма. Существуют хорошие клавиатурные тренажеры, которые помогут вам научиться печатать вслепую. Например, соло на клавиатуре или vse10.ru.

Математика

Этот пункт не обязателен для многих отраслей. Но в некоторых направлениях без математики не обойтись. Например, разработка игровых движков требует хорошего знание геометрии (работа с векторами, пересечение фигур), математического анализа (поиск интегралов и производных), физики. При построении систем оптимизации, расчёта оптимальных маршрутов, без знаний дискретной математики далеко не уедешь. В машинном обучении и финансовом секторе это также необходимое требование для того, чтобы стать полноценным специалистом в области.

Умение отделять главное от второстепенного

Представьте, что вы создаете сайт для продажи авиабилетов. В процессе разработки продукта, возникает желание добавить какие-то новые функции. Будь то 10 дополнительных систем оплаты, навороченный личный кабинет или уведомления о новых билетах. Чем дальше продвигаешься в создании чего-либо, тем больше возникает подобных желаний по улучшению функционала. Изначально вы запланировали потратить на разработку 4 месяца, после чего выкатить сайт в боевой режим. Из-за возникновения новых требований сроки легко могут сдвинуться в два или три раза, и вы просто погрязнете в стопке незавершенных и задач и полу рабочего кода.

В то же время, другой разработчик соберет минимально рабочую систему за 2 месяца, где реализует лишь функционал заказа билета и онлайн оплаты через Webmoney. Возможно, через месяц, у его сервиса появятся два-три постоянных клиента, которые начнут выводить проект на самоокупаемость. Уже в процессе работы с живыми людьми, разработчик поймет, какие фичи на сайте людям действительно нужны, и будет постепенно добавлять полезные функции в свой сервис.

А вы в это время будете программировать функционал, который, возможно, не будет так востребован, как вы ожидали.

Часто разработчик начинает слишком увлекаться мелочами и забывает о главном. Например, может может доводить до идеала форму комментариев на сайте, когда разработка некоторых важных разделов ещё даже не начиналась.

Профессия программист

Как стать программистом

Правда ли, что программирование — ну самая востребованная специальность в мире? Кто такие системные и прикладные программисты? Сколько лет нужно учиться на программиста? В какой вуз и колледж поступить, чтобы стать программистом?

Говорят, что в мире есть 10 видов людей. Те, кто понимает двоичный код… и те, кто не понимает.
Юмор программистов

Программирование зародилось в XIX веке, и до середины XX века, когда случился бурный рост информационных технологий, создание программ для машины было сродни искусству. Программирование было уделом избранных. Сегодня же профессия программиста распространена и очень востребована. В 2020 году в мире насчитывалось 18.2 млн разработчиков программного обеспечения, из них 1.3 млн — в России.
Давайте посмотрим, какое будущее у профессии программиста. И что ему угрожает.

Программист – это специалист, создающий исходный код для программы. Такой программой может быть операционная система компьютера, видеоигра, web или мобильное приложение и даже алгоритм работы микроволновки. Программный код пишется на специальном языке программирования. Он состоит из обычных слов и некоторых специальных символов. Сегодня насчитывается несколько сотен языков программирования, но самые распространенные из них – Java, Python, PHP, C#, JavaScript, C, С++, Objective-C, Swift. Какой язык программирования выбрать, программист решает сам в зависимости от конкретной задачи (сделать игру, приложение для web или программу для сервера) и собственных знаний. Квалифицированный программист уверенно использует 2-4 языка.

Если вы думаете, что программист = компьютерщик, то это далеко не так. Самое удивительное, что программист не обязательно работает на компьютере. Он может писать код программы хоть на салфетке, а компьютер ему нужен, чтобы применить этот код и протестировать.
Не стоит также приравнивать программиста к «айтишнику». Под общим названием «IT-специалист» скрывается более 50 разных профессий и должностей. Например, UIX-дизайнер (разработчик интерфейсов), account-менеджер (специалист техподдержки), системный администратор, devops («инженер по автоматизации IT-процессов»), менеджер IT-проекта – это «айтишники», но не программисты. Однако стоит помнить, что в любую из IT-профессий можно попасть через образование программиста.

По специализации программисты делятся на системных, прикладных и веб-программистов. Прикладные программисты занимаются написанием различных программ и приложений: игры (например, популярная игра Angry birds), офисные приложения (например, Microsoft Office Word) и многое другое. Системные программисты занимаются созданием операционных систем (например, Android или iOS). Веб-программисты разрабатывают интернет-сайты и программы, которые поддерживают работу этих сайтов.
На сайтах вакансий вы найдете разделение программистов по тем языкам, с которыми они работают: программист C++, программист Delphi, PHP-программист. А также по типам задач, которые они выполняют: программист баз данных, фронтенд / бекенд разработчик, мобильный / десктоп разработчик, программист 1С, программист Битрикс, геймдев, архитектор ПО, системный инженер и т.д.

Плюсы и минусы профессии программиста

Профессия программиста очень притягательна для современных абитуриентов. В 2020 году в технических вузах самый большой конкурс пришелся на специальности «Прикладная математика», «Информатика и вычислительная техника», «Электроника и наноэлектроника». В 2020 году проходные баллы по ЕГЭ на эти специальности обещают только вырасти. Что так привлекает молодых в программировании?

Плюсы профессии программист:

Высокая зарплата. Средняя зарплата высококвалифицированного программиста 70-100 тыс. рублей.
Востребованность. Рынок труда для программистов растет за счет цифровизации всех сфер общественной жизни. Онлайн-образование, телемедицина, интернет вещей (IoT), даже сельское хозяйство не обходится теперь без IT-специалистов.
Интересные задачи и простор для творчества. Что делает программист на работе? Пишет код, тестирует, проверяет на уязвимости, переписывает код. Тем не менее, конечный результат кодирования – это рабочая программа с разными целями. Одни программисты создают игры. Другие программируют роботов. Третьи делают полезное приложение под Android. Четвертые создают агрегатор, который соберет все билеты мировых авиакомпаний в один сервис для бронирования авиабилетов. Разнообразно, не правда ли? А когда продукт начинает исправно работать, программист испытывает радость, как персонаж папа Карло, который из деревянного полена выстругал живого мальчика.
Возможность удаленной работы и свободный график. Программисты – это каста людей, к которым не применяют строгих офисных правил. Для поддержания креативности и работоспособности им разрешают работать из дома, приходить позже на работу. И, если вы еще не знаете, лучшие офисы принадлежат именно IT-компаниям. Загляните в Google, Microsoft, Яндекс и Mail.Ru.
Карьерный рост в России и за рубежом. Для программирования нет географических границ. Во-первых, многие российский специалисты работают удаленно в иностранных проектах. Во-вторых, переехать в «Силиконовую» долину (более точно ее называть «Кремниевой») для IT-профессионала с отличным знанием английского гораздо проще, чем, например, бухгалтеру, юристу или инженеру-строителю, которым придется изучать специфику профессии в конкретной стране.

Сидячий образ жизни. Без физических нагрузок в нерабочее время программист рискует большую часть зарплаты тратить на врачей. Особенно страдают зрение и опорно-двигательный аппарат.
Быстрое устаревание знаний. Программисту необходимо постоянно учиться. Программирование развивается стремительно, поэтому программист обязательно должен читать профильные журналы и интернет-ресурсы, получать новые знания и сертификаты на курсах. Иначе его ценность как специалиста на рынке труда упадет.

Чтобы стать программистом, можно пойти тремя путями:
1. После 11 класса в вуз по направлению 09.00.00 «Информатика и вычислительная техника» или 10.00.00 «Информационная безопасность».
2. После 9 класса в колледж на эти же направления, а потом пойти или не пойти в вуз.
3. Учиться на курсах программирования и самому.

IT-сфера отличается молодостью и современным подходом к образованию. При трудоустройстве ценится не столько диплом, сколько те навыки (hard skills), которые у будущего сотрудника в багаже. Работодатель даст тестовое задание по программированию и по его результатам примет или не примет соискателя на работу. Именно поэтому приобретать знания и опыт в информационных технологиях можно и дома с помощью книг, online-курсов и создания небольших программ. Какой вариант образования лучше, решает каждый сам. Главный вопрос, который должен задать себе программист – «Достаточно ли я усидчивый и целеустремленный человек, чтобы выучиться и потом конкурировать с теми, кто пришел из вуза?».

В каких вузах и колледжах учиться на программиста
Для поступления в вуз необходимо успешно сдать ЕГЭ по математике, русскому языку, информатике и ИКТ, физике, английскому языку (4 из 5 экзаменов в зависимости от специализации). В Москве получить образование программиста можно во многих учебных организациях.
Полный список вузов, колледжей и техникумов смотрите здесь >>

• Компании-разработчики (сервисы Booking.com, Mail.ru, Yandex, Unisender)
• IT-отделы и отделы digital-маркетинга организаций (Сбербанк России, Газпром, Тинькофф банк)
• Системные интеграторы (Крок, Softline, Техносерв, Ланит, Ай-Теко)

Из-за бурного роста сферы IT и дефицита разработчиков ПО, работать программистом можно начать еще в институте. Со 2-3 курса можно устроиться junior-разработчиком и начинать движение по карьерной лестнице. И при этом получать достойную для студента зарплату в 30-50 тысяч рублей.

Сами программисты оценивают длительность каждой ступени следующим образом:
• Первые полгода-полтора года реального опыта вы junior
• При активном обучении следующие 1-3 года работы вы middle
• А программист с опытом работы 4-6 лет – это senior

Но, конечно, стоит помнить, что границы условны, и более активный и любознательный разработчик сможет освоить все навыки senior-developer за 3 года.

Кроме глубокой специализации в программировании, программисту доступно движение в смежные области внутри IT-компании – дизайн, маркетинг, аналитику, менеджмент. Программист может стать архитектором программного обеспечения, девопс-инженером, менеджером IT-проектов, если ему это интересно и у него есть нужные компетенции. Например, чтобы работать менеджером, ему потребуется коммуникабельность, инициативность, умение формировать команду и контролировать бизнес-процессы.

Оплата труда (диапазон зарплат)

Зарплата программиста напрямую зависит от специализации и квалификации. Наименее оплачиваемые должности – это junior-разработчики, которые только учатся. А наиболее оплачиваемые на рынке труда – архитекторы ПО и системные инженеры, на которых лежит ответственность за продукт или проект в целом. Поэтому диапазон зарплат программистов может быть очень широким:

    30 000 – 260 000 рублей

Перспективы профессии (востребованность)

Сейчас отрасль IT в целом и программирование в частности находятся на пике востребованности. Компании конкурируют за квалифицированных специалистов. В перспективе ближайших 5 лет программистов ждет благополучная жизнь и высокие зарплаты, потому что молодых кадров станет немного меньше. Придет период демографической ямы из-за низкой рождаемости в начале 90-х гг.
Но рынок IT ждет несколько опасностей. Во-первых, обучение программированию сейчас начинается уже практически с детского сада. Самые известные обучающие языки — это Scratch от MIT и Blockly от Google. Вероятно, навык программирования будет настолько же распространен, как знание английского языка, то есть будет входить в «джентльменский набор» при приеме на работу. А если им владеет почти каждый, то и ценность работы снижается.
Во-вторых, IT-образование сейчас дает почти каждый колледж и вуз. После дефицита рынок может «насытиться» профессиональными программистами, и их зарплаты упадут.
В-третьих, есть страны, в частности Индия, где IT-образование развивается еще быстрее. И в определенный момент услуги программирования насытят мировой рынок, как сейчас произошло с товарами, произведенными в Китае. С индийскими программистами трудно будет конкурировать в цене.

Будущему программисту стоит помнить об этих рисках. Но, как и в любой профессии, настоящий специалист, который любит свое дело и профессионально развивается, в любые времена будет востребован.

Какие компетенции и личные качества необходимы программисту


Наверняка, вы сходу назовете 3 качества, которые отличают программиста:
✎ логическое мышление
✎ математические способности
✎ усидчивость

Есть несколько компетенций, которые делают из хорошего программиста лучшего:
✎ гибкость мышления
✎ хорошая память
✎ многозадачность
✎ развитое воображение
✎ умение ясно выражать свои мысли
✎ коммуникабельность
✎ работа в команде

Человек, который умеет придумывать новые идеи и хорошо взаимодействовать в коллективе таких же разработчиков, сможет попасть в самые интересные и передовые IT-проекты или открыть свой.

Что делать уже сейчас

Вы думаете о программировании или хотите в будущем работать в IT? Начать развиваться можно уже в сейчас:

    ✔ Углубленно изучать математику, информатику, русский и английский язык в школе.
    ✔ Программировать и создавать веб-сайты, небольшие редакторы и полезные утилиты.
    ✔ Читать новости из сферы IT: на порталах cnews.ru, habrahabr.ru, computerworld.ru, hightech.fm и github.com.
    ✔ Заниматься в кружках по программированию и школах юного программиста.
    ✔ Посетить iСмену лагеря «Профессионалы будущего», чтобы пообщаться с настоящими IT-специалистами и узнать больше о современных технологиях.

Если вы хотите разобраться, подойдет ли вам специальность программиста, то пройдите наш бесплатный тест: информационно-технологический профиль

Автор: Ольга Биккулова, ЦТР «Гуманитарные технологии»

Если вы хотите получать свежие статьи о профессиях, подпишитесь на нашу рассылку.

20 самых рекомендуемых книг для программистов на русском языке

Авторы проекта Dev-Books проанализировали миллионы вопросов и ответов в крупнейшем сообществе программистов Stack Overflow. Всё для того, чтобы найти книги, на которые чаще всего ссылаются разработчики.

В общий список вошло 5 720 книг. Ниже вы найдёте 20 самых упоминаемых из них, которые когда-либо выходили на русском.

По просьбе Лайфхакера своими мнениями насчёт некоторых изданий поделились отечественные эксперты.

1. «Эффективная работа с унаследованным кодом», Майкл К. Физерс

Автор объясняет, как быстро разбираться в унаследованном коде, как тестировать его, как правильно вносить изменения. Книга содержит множество эффективных приёмов, предназначенных специально для этих задач.

2. «Приёмы объектно-ориентированного проектирования. Паттерны проектирования», Эрих Гамма и другие

Классика для программиста. Первая книга, посвящённая именно шаблонам.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Издание уже 20 лет переиздаётся в изначальном виде. В этом, конечно, главный недостаток книги: некоторые шаблоны уже неактуальны. Думаю, её полезно читать уже после других, более современных, книг по паттернам проектирования. Тем более что она написана сухим академическим языком. Для понимания паттернов эта книга не must read, но её прочтение добавляет крутости в глазах коллег-программистов. :) Начинать я советую с «Паттернов проектирования» (Head First Design Patterns).

3. «Чистый код. Создание, анализ и рефакторинг», Роберт К. Мартин

Интересная, но во многом спорная книга о том, как писать понятный и поддерживаемый код.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Почему спорная? Книг про написание кода уже огромное количество, и часть приёмов являются общепризнанными. Но каждый автор добавляет что-то своё. Лично для меня мнение Боба Мартина кажется иногда странным и противоречащим другим источникам. Не must read, но прочитать всё же стоит. Качество кода после прочтения становится лучше.

4. «Предметно-ориентированное проектирование», Эрик Эванс

Очень сильная книга, которая мотивирует к саморазвитию. После прочтения кажется, что без ПОП качественный код не написать.

Леонид Выговский, системный архитектор IT-компании LiveTex

— Из этой книги выросли концепции СQRS, BDD, onion-architecture и много других интересных идей. Единственный недостаток: книга насквозь теоретическая. Практическую пользу она приобрела только с выходом книги Вона Вернона «Реализация методов предметно-ориентированного проектирования» (Implementing Domain Driven Design). Поэтому читать их надо последовательно, сразу друг за другом.

5. «JavaScript: сильные стороны», Дуглас Крокфорд

Обязательная книга для веб-разработчиков. В ней Дуглас Крокфорд рассказывает о преимуществах языка JavaScript и учит грамотно их применять для создания эффективного кода.

6. «Шаблоны корпоративных приложений», Мартин Фаулер и другие

Книга описывает базовые принципы проектирования ПО для корпоративных платформ.

7. «Совершенный код. Мастер-класс», Стив Макконнелл

Классическая книга о том, как писать код лучше.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Принципы, о которых рассказывается в книге, актуальны в любые времена, несмотря на то, что первое издание было выпущено аж в 1993 году. Волшебство этой книги заключается в том, что можно перечитывать её каждый год и каждый раз узнавать что-то новое.

8. «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие

Из серии книг по написанию понятного и качественного кода, «Рефакторинг» — лучшая.

Леонид Выговский, системный архитектор IT-компании LiveTex

Выговский: «Она не только показывает хороший код, но и на примере плохого объясняет, чем именно он плох. Эта книга — must read для всех. Причём чем раньше вы её прочтёте, тем лучше. Качество кода после прочтения сильно вырастет».

Если книгу Фаулера вы уже прочли, обратите внимание на «Рефакторинг с использованием шаблонов» (Refactoring to Patterns) Джошуа Кериевски, которую рекомендует Михаил Осотов.

«Рефакторинг с использованием шаблонов» Кериевски — отличная книга для тех, кто каждый день сталкивается с проблемой легаси-кода и технического долга в своих проектах.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Эта книга поможет сохранить свои нервы, подружиться с рефакторингом и сделать код лучше.

9. «Паттерны проектирования», Эрик Фримен, Элизабет Фримен и другие

Серия Head First, на мой взгляд, идеально подходит для новичков в области разработки ПО.

Михаил Осотов, директор по производству «Центра высоких технологий»

— Все книги написаны разными авторами, но в каждой виден общий подход, который выражается в простой подаче материала, интересных и простых примерах.

10. «Язык программирования C», Брайан У. Керниган, Деннис М. Ритчи

Классическое учебное пособие по языку C, написанное его же создателями. Однако начинающим эта книга может показаться сложной, поскольку требует от читателя знания основ программирования.

11. «Эффективное использование С++. 55 верных способов улучшить структуру и код ваших программ», Скотт Майерс

Книга содержит советы по проектированию программ, работе с шаблонами и управлению ресурсами, а также другие рекомендации по созданию качественного ПО на языке С++.

12. «Экстремальное программирование: разработка через тестирование», Кент Бек

Автор на примерах описывает методику разработки ПО, которая предполагает тестирование программ ещё до написания их кода.

13. «Алгоритмы. Построение и анализ», Томас Х. Кормен и другие

Эту книгу называют библией алгоритмов. Она зарекомендовала себя как отличное научное пособие для студентов технических вузов и всех, кто интересуется информатикой. Книга доступным языком знакомит с алгоритмами разных типов и описывает их особенности.

14. «Регулярные выражения», Джеффри Фридл

Издание об эффективной работе с текстом в Perl, PHP, Java, Python, Ruby и других языках программирования.

15. «CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#», Джеффри Рихтер

Классический учебник по разработке приложений для платформы Microsoft, в том числе с помощью Silverlight, Windows Presentation Foundation, ASP.NET и прочих технологий компании.

16. «Современное проектирование на C++», Андрей Александреску

Книга для опытных программистов на C++. Автор предлагает новый подход к разработке, сочетающий метапрограммирование шаблонов, обобщённое программирование и объектно-ориентированное программирование на этом языке.

17. «Microsoft ASP.NET 2.0. Базовый курс», Дино Эспозито

Детальное руководство для опытных специалистов по ASP.NET 2.0. Книга учит создавать мощные, надёжные и масштабируемые сайты на этой платформе.

18. «Шаблоны тестирования xUnit. Рефакторинг кода тестов», Джерард Месарош

Автор книги показывает, как применять шаблоны проектирования, исключение повторений, инкапсуляцию и другие принципы разработки ПО к написанию кода тестов.

Цукерберг рекомендует:  Android - Как продвигать мобильное приложение после релиза

19. «Компиляторы. Принципы, технологии и инструментарий», Альфред В. Ахо и другие

Книга описывает базовые принципы разработки компиляторов и делает особый акцент на оптимизации кода. В помощь читателю — большое количество примеров из практики.

20. «Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET», Кржиштоф Цвалина, Брэд Абрамс

Издание содержит лучшие приёмы разработки библиотек для платформы Microsoft .NET Framework. Книга должна упростить работу любого .NET-специалиста, который пишет код для других разработчиков.

Полный рейтинг англоязычных книг доступен на сайте Dev-Books. Там же можно просмотреть списки самых популярных книг на определённые темы, будь то Java, Database Design или CSS.

Способности, склонности и странности программистов

13 сентября, на 256 день года, в России празднуется День программиста – профессиональный праздник тех, кто зарабатывает на жизнь написанием программ для компьютеров. Официально этот праздник был утвержден в России только в 2009 году. Однако во всем мире День программиста отмечают уже давно. Празднуется он 13 сентября, а если год високосный – то 12 сентября. 256 (два в восьмой степени) день был выбран потому, что это количество целых чисел, которое можно выразить с помощью восьмиразрядного байта.

Несмотря на то, что этот праздник появился относительно недавно, профессия программиста, как ни странно, гораздо старше. А убежденные в том, что программист – это исключительно мужская профессия, вынуждены столкнуться с еще одним противоречием. Дело в том, что именно женщина считается первым в истории человеком с такой профессией. Ее имя Ада Августа Байрон Кинг, графиня Лавлейс. В первой половине XIX века дочка великого английского поэта Джорджа Байрона написала первую в мире программу для аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости. Правда, ни одна из написанных Адой Лавлейс программ так и не была никогда запущена. Но среди программистов имя ее увековечено – универсальный язык программирования называется «Ада».

Сегодня профессия программиста связана не только с ЭВМ. Практически каждое электронное устройство – от пульта дистанционного управления до мощных промышленных станков – побывало в руках специалистов по программированию. Умение и навыки программистов используются практически во всех сферах нашей жизни.

Учитывая личные качества, каждого программиста можно отнести к одной из четырех групп: выполняют работу быстро и хорошо; быстро и плохо; медленно и хорошо; медленно и плохо. Программисты из первой группы быстро достигают высот и становятся руководителями, а программисты из последней – чаще всего не вырастают выше стажера. Самая распространенная группа программистов – вторая. Но качественнее всего делают свою работу программисты третьей группы.

Некоторые исследователи считают, что для того, чтобы стать хорошим программистом, у человека должны быть определенные способности. Так, например, данная профессия требует высокого интеллекта, способности абстрагироваться и переучиваться, гибкости мышления и склонности к анализу, планированию. Компьютером на уровне обычного пользователя сейчас не умеет пользоваться разве что ленивый, а вот научиться разбираться в тонкостях и сложностях искусственного разума может не каждый.

По мнению самих программистов, – это не профессия, а призвание. Даже чтобы заинтересоваться программированием, нужно быть, в некоторым смысле, «повернутым» человеком. Необходимы также большое терпение и дотошность, чтобы изучить основы, алгоритмы, которых великое множество.

Основам программирования могут научить в вузе или на курсах. Но изучить полностью и досконально все нюансы этого дела можно только на собственном опыте, методом проб и ошибок. Главное – разобраться во всем самому.

Увлеченность программированием оказывает сильное влияние на образ жизни программистов. У них появляется свой, мало понятный для посторонних, язык, они живут больше не реальной, а виртуальной жизнью, и отношение ко многим бытовым вещам у них особое.

Для того чтобы хоть немного понять, как мыслит человек, разбирающийся в нюансах компьютерного дела, можно прочитать несколько известных афоризмов программистов: «О том, над чем мы работаем сегодня, другие подумают только завтра»; «Помните: 60 кг нераспечатанных листиков сберегают одно дерево»; «Мозг человека обычно загружен лишь на 10% своей мощности; остальное – резерв для операционной системы»; «Пользователь не узнает, чего он хочет, пока не увидит то, что он получил»; «Не говори «OK», пока не перепишешь»; «Старый глюк лучше новых двух»; «Софт пишут – диски летят».

Благодаря своему необычному мышлению и поведению программисты уже давно стали объектами множества шуток и анекдотов. Шутить любят над их чутким отношением к «железу», оторванностью от жизни, неудачами в отношениях с противоположным полом и т.д. Вот несколько примеров:

Жена сисадмина спрашивает мужа:
– Почему ты никогда не рассказываешь, как у тебя дела на работе?
– Да чего тебе рассказывать? Вот, вчера блок питания сгорел.
– Бедненький! Ну ты хоть с собой бутерброды бери.

Объявление: «Серьезная организация возьмет на высокооплачиваемую должность опытного хакера. Резюме просим размещать на главной странице сайта www.microsoft.com».

Едут два программиста на троллейбусе, доезжают до конечной. Водитель открывает переднюю дверь и начинает проверять билеты. Первый программист:
– Первый раз слышу, что драйвер может работать контроллером!

Материал подготовлен на основе информации открытых источников

Эти книги должен прочитать каждый, кто считает себя программистом!

Содержание статьи

Польза не во многих, но в хороших книгах.

Сенека

Все мы прекрасно понимаем: чтобы стать профессиональным программистом, необходимо читать специализированную техническую литературу. Но на сегодняшний день доступно огромное количество различных изданий по программированию. Целой жизни не хватит, чтобы одолеть и половину из них. Какие же книги нужно читать в первую очередь? Без каких книг нельзя обойтись? В этой статье мы расскажем о тех трудах великих авторов, с которыми должен быть знаком каждый профессиональный разработчик.

С. Макконнелл «Совершенный код»

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.

Сложно найти гуру программирования, который не читал «Совершенный код» Стива Макконнелла. Действительно, одна книга, хоть и немаленькая (чуть менее 900 страниц), покрывает практически все аспекты разработки ПО: от рецептов написания высококачественного кода, механизмов тестирования и отладки до стратегий оптимизации кода и психологических факторов, влияющих на разработку. Представь себе: библиография книги занимает 20 страниц и содержит более 500 источников! Книга «Совершенный код» — одно из самых полезных и, как следствие, популярных изданий по разработке ПО. Она неоднократно доказала это, возглавляя рейтинги книг по программированию (goo.gl/3q0kx). Благодаря простой манере изложения, особому стилю и чувству юмора Стива книга читается очень легко.

Говоря о проектировании и конструировании программных систем, Макконнелл выделает Главный Технический Императив Разработки ПО — управление сложностью. Простота и ясность исходного кода и архитектуры системы определяют ее качество. Большая часть книги посвящена написанию высококачественного кода. Макконнелл, как никто другой осознавая значимость мелочей, детально описывает все правила, которыми необходимо руководствоваться при написании хорошего кода. Необходимый уровень абстракции, разработка качественных интерфейсов классов и пакетов, написание высококачественных методов, выбор удачных имен переменных, упрощение управляющих структур, комментирование кода — ничто не ускользает от внимания автора. Например, общим принципам использования переменных отведен целый раздел книги более чем на 100 страниц. Только вопросу выбора имен переменных посвящена целая глава на 30 страниц. При этом все правила и советы даются исключительно с практической точки зрения.

В части, в которой говорится о качестве ПО в целом, Макконнелл формулирует Главный Закон Качества ПО: повышение качества системы снижает расходы на ее разработку. Причина ясна — большую часть времени программисты занимаются чтением и отладкой написанного кода, тогда как на собственно написание уходит около 10% рабочего времени. Поэтому поддержание качества кода системы на высоком уровне экономит много времени и тем самым повышает КПД программиста.

Автор не обходит вниманием и различные методики разработки. Подробно описывается парное программирование, ревизии кода, формальные и неформальные инспекции, разработка на основе тестирования. «Рефакторинг» — единственная глава книги, которую можно назвать «слабоватой». При рассмотрении методов рефакторинга приводится лишь длинный список его видов из книги М. Фаулера «Рефакторинг». При этом нет ни одного конкретного примера кода. Раздел носит скорее ознакомительный характер.

Говоря о повышении производительности ПО, автор приводит убедительные доводы против преждевременной оптимизации, когда программист в процессе разработки интуитивно распознает «узкие» места в программе и незамедлительно принимает меры по оптимизации в ущерб качеству кода. Приводимая статистика показывает, что в 9 из 10 своих предположений программист ошибается.

Подвести итоги можно словами Джона Роббинса: «Это просто самая лучшая книга по конструированию ПО из всех, что когда-либо попадались мне в руки. Каждый разработчик должен иметь ее и перечитывать от корки до корки каждый год. Я ежегодно перечитываю ее на протяжении вот уже девяти лет и все еще узнаю много нового!»

М. Фаулер «Рефакторинг»

Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям.

М. Фаулер

Практически любое издание о рефакторинге ссылается на книгу Мартина Фаулера «Рефакторинг». Действительно, в этой книге Фаулер сделал невозможное — в предельно понятной форме донес до читателей почти полностью исчерпывающее описание понятия «рефакторинг», его назначение, особенности и методы реализации.

При немалом объеме (400 страниц) книга читается буквально за пару вечеров, от нее просто невозможно оторваться. Главная причина головокружительного успеха книги — ее практическая направленность. Все мы знаем, что самая сложная задача при подаче материала — привести хороший показательный пример. В этом Фаулеру нет равных. Книга начинается с примера улучшения программы, который сразу с головой затягивает читателя в мир рефакторинга. Всего 40 страниц примера дают нам вполне конкретное представление о рефакторинге, его целях, принципах и основных методах реализации. Мартин определяет рефакторинг как «изменение во внутренней структуре ПО, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения». Но когда необходимо проводить данное изменение? Какой код должен подвергаться переработке? Автор дает исчерпывающие ответы на эти вопросы. Он вводит правило «трех ударов»: «После трех ударов начинайте рефакторинг». То есть когда вы делаете что-то аналогичное в третий раз, это сигнал для начала рефакторинга. Раздел «Код с душком» дает нам четкое представление о том, какой же код требует улучшения. К признакам такого кода относятся: длинный метод, большой класс, длинный список параметров метода, дублирование кода, операторы типа switch, временные поля, отказ от наследства, неуместная близость классов и многое другое.

Фаулер, как сторонник TDD (Test-driven development), посвящает главу книги созданию автоматических тестов и описанию среды JUnit. Если обнаружена ошибка, сначала необходимо написать автоматический тест, выявляющий ее, и лишь затем проводить исправление. Это позволит в будущем не наступать на одни и те же грабли. Аналогично перед проведением рефакторинга следует написать тест для улучшаемого кода, чтобы обеспечить неизменность его поведения.

Бо́льшую часть книги занимает каталог методов рефакторинга. Он содержит разделы, посвященные составлению методов, перемещению функций между объектами, организации данных, упрощению условных выражений и вызовов методов, решению задач обобщения и крупным архитектурным рефакторингам. Многие из методов рефакторинга автоматизированы в популярных IDE. Например, Visual Studio предоставляет возможности по автоматическому выделению метода (ExtractMethod), удалению параметра (RemoveParameter), выделению интерфейса (ExtractInterface) и пр. В качестве крупных рефакторингов уровня системы Фаулер приводит следующие: разделение иерархии наследования, выполняющей более одной задачи, преобразование процедурного подхода к проектированию в объектно-ориентированный подход, отделение предметной области от уровня представления, а также выделение иерархии, подразумевающее разбиение большого класса на целую иерархию значительно меньших по размеру и более специализированных подклассов.

Прочитав эту книгу, большинство программистов изменяет свой подход к написанию кода. Они становятся более грамотными, аккуратными и внимательными к своему творению. Книга обязательна к прочтению для всех программистов, стремящихся к совершенству в своем ремесле.

Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес «Паттерны проектирования»

Проектирование объектно-ориентированных программ — нелегкое дело, а если их нужно использовать повторно, то все становится еще сложнее.

Э. Гамма

Спросите у опытного разработчика, какую книгу по объектно-ориентированному программированию вам обязательно стоит прочитать. В абсолютном большинстве случаев он посоветует именно эту. В отношении данной книги слово «бестселлер» звучит недостаточно выразительно, ведь с момента ее выпуска было продано уже более полумиллиона экземпляров на английском и тринадцати других языках!

Очень часто начинающий разработчик самостоятельно берется за решение уже более тысячи раз решенной до него задачи проектирования и изобретает очередную разновидность пятиколесного велосипеда, истинно гордясь своим «новшеством». Владение языком паттернов позволяет решить множество задач проектирования наиболее оптимальным способом, затрачивая при этом минимум усилий. Всего двадцать описанных в книге паттернов предоставляют инструментарий для решения огромного спектра задач проектирования ПО. Материал книги довольно сложен и требует от читателя определенных знаний в области объектно-ориентированного проектировании. Для освоения паттернов недостаточно просто прочитать книгу, необходимо основательно над ней «попотеть». Впрочем, твои усилия не пройдут даром. Книга содержит 350 страниц и состоит из двух частей. В первой части дается общее понятие паттернов проектирования, описывается их практическое применение на примере создания визуального редактора документов Lexi. Вторая часть книги содержит каталог паттернов с подробным описанием назначения, структуры, особенностей реализации и примерами применения каждого паттерна.

Коллектив авторов известен как Gang of Four («Банда четырех»), поэтому представленные в книге паттерны называют GoF. Авторы разбивают все множество представленных паттернов на три группы: порождающие паттерны, структурные паттерны и паттерны поведения. Порождающие паттерны решают задачу инстанцирования (создание экземпляров) классов. К самым популярным паттернам в данной группе можно отнести AbstractFactory (абстрактная фабрика), FactoryMethod (фабричный метод) и Singleton (одиночка).

Структурные паттерны предназначены для решения вопросов компоновки системы на основе классов и объектов. К ним относятся такие важнейшие паттерны, как Adapter (адаптер), Bridge (мост), Composite (компоновщик), Proxy (заместитель) и Façade (фасад). Паттерны поведения связаны с алгоритмами и вопросами распределения обязанностей между классами. Здесь необходимо упомянуть Strategy (стратегия), TemplateMethod (шаблонный метод), Observer (наблюдатель), Command (команда) и Iterator (итератор).

Единственное, что может смутить читателя, — некоторые примеры в книге написаны на малоизвестном на сегодняшний день языке программирования Smalltalk, а для изображения диаграмм классов вместо привычного UML используется OMT (Object Modeling Technique).


Гуру ООАиП Мартин Фаулер пишет: «Паттерны GoF — это лучшая из когда-либо изданных книг по объектно-ориентированному проектированию. Эта книга чрезвычайно влиятельна в индустрии программного обеспечения — только посмотрите на библиотеки Java и .NET, которые буквально кишат паттернами GoF». Не существует специалиста в области объектно-ориентированного проектирования, незнакомого с паттернами GoF, а если такой и есть, то в этом случае его, скорее всего, нельзя назвать специалистом.

Р. Мартин «Чистый код»

Умение писать код — тяжелая работа. Она не ограничивается знанием паттернов и принципов. Над кодом необходимо попотеть.

Р. Мартин

«Чистый код» — одна из наиболее удачных книг, посвященных написанию высококачественного кода. Размер книги — 360 страниц, не считая приложений. При этом она настолько увлекательна и доступна, что за два-три вечера запросто прочитаешь ее от корки до корки. В дружеской манере «дядюшка» Боб рассказывает нам, какими же принципами нужно руководствоваться, чтобы писать хороший код. Книга изобилует примерами из реальных приложений, с которыми автор сталкивался в своей практике. Среди них такие известные продукты, как JUnit, FitNesse, JDepend, Ant и TomCat.

Книга разделена на три части. Первая часть — теория написания «чистого» кода: приемы, паттерны и принципы, которым необходимо следовать разработчику. Вторая часть носит практический характер и подробно описывает сам процесс «чистки» кода существующих приложений. Третья часть подводит итоги всей книги и содержит перечень «запахов кода» и методов их устранения.

В теоретической части подробно описываются принципы именования переменных, методов и классов, правила создания функций, написания комментариев, форматирования кода, принципы обработки ошибок и написания модульных тестов. Целый раздел посвящен особенностям создания многопоточных приложений. Роберт дает понять, что хорошо написать код недостаточно.

Необходимо поддерживать его чистоту с течением времени, чтобы предотвратить «загнивание». Поэтому он вводит «правило бойскаута»: «Оставь место стоянки чище, чем оно было до твоего прихода». То есть с каким бы участком кода мы ни работали, нужно пытаться в итоге сделать его качественнее, чем он был. В таком случае, код не будет загнивать и останется чистым.

При создании функций во главу угла ставятся компактность, правило одной операции и одного уровня абстракции — очевидные на первый взгляд принципы, которые так часто нарушаются программистами. Будучи ярым адептом TDD, Мартин указывает на важность «чистоты» не только кода конечного продукта, но и кода модульных тестов. Он иронически замечает: «Какими отличительными признаками характеризуется чистый тест? Тремя: удобочитаемостью, удобочитаемостью и удобочитаемостью».

Пожалуй, единственный недостаток книги — это ее Java-ориентированность. Все представленные примеры написаны исключительно на языке Java. При этом большое количество советов и «запахов кода» характерны в основном для Java-кода.

В начале книги Роберт приводит ответы мэтров программирования на вопрос, что же такое «чистый код». Грэди Буч отвечает: «Чистый код прост и прямолинеен. Чистый код читается, как хорошо написанная проза. Чистый код никогда не затемняет намерения проектировщика; он полон четких абстракций и простых линий передачи управления». Программисты, которые стремятся писать «чистый код», просто обязаны прочитать эту книгу.

Д. Кнут «Искусство программирования»

Лучший способ в чем-то разобраться до конца — это попробовать научить этому компьютер.

Д. Кнут

Программист, у которого нет книги «Искусство программирования», как священнослужитель, у которого нет Библии. Монографию Дональда Кнута часто называют «Библией программиста». Она содержит подробное описание и анализ важнейших фундаментальных алгоритмов, используемых в информатике, а также множество практических задач для усвоения и закрепления представленного материала. Журнал American Scientist включил работу Кнута в список двенадцати лучших физико-математических монографий XX века наряду с работой Эйнштейна по теории относительности. Успех книги определило качество изложения и глубина анализа общих вопросов программирования.

Кнут начал работу над «Искусством программирования» еще в 1962 году. По замыслу автора монография должна состоять из семи томов. Пока было издано три первых тома, а также первая половина четвертого. Все изданные на сегодняшний день материалы составляют почти 3000 страниц. Читать книгу совсем не просто (как, впрочем, и Библию), главным образом потому, что все примеры рассматриваются на низкоуровневом языке программирования — ассемблере для гипотетического выдуманного автором компьютера MIX. Поэтому у программиста вряд ли получится использовать книгу в качестве набора готовых рецептов для решения конкретных задач. Эта книга дает программисту не рыбу, а скорее хорошую удочку, с помощью которой он сможет не без определенных усилий самостоятельно наловить рыбы.

Первый том посвящен основным алгоритмам и состоит из двух глав. Первая глава подготавливает читателя к работе над книгой. Здесь рассматриваются основные математические понятия и теоремы, на которых базируется весь материал. Читатель знакомится с «полиненасыщенным компьютером» MIX, его архитектурой и его языком ассемблера. Вторая глава посвящена информационным структурам и алгоритмам работы с ними. Здесь рассматриваются деревья, многосвязные структуры, линейные списки, в том числе стеки, очереди, деки, циклические и дважды связанные списки и прочее.

Второй том включает в себя третью и четвертую главы. Третья глава посвящена работе со случайными числами и последовательностями. В четвертой главе описываются вопросы арифметики, а именно различные виды систем счисления, арифметика чисел с плавающей точкой и рациональных чисел, полиномиальная арифметика и другое. Третий том посвящен алгоритмам сортировки и поиска (соответственно, главы 5 и 6). Из четвертого тома опубликованы материалы седьмой главы, описывающей вопросы комбинаторного поиска.

Исходя из планов автора, в четвертый том также войдет восьмая глава, в которой рассматриваются рекурсивные алгоритмы. Пятый том будет содержать материалы по синтаксическим алгоритмам, в том числе по лексикографическому и синтаксическому поиску. Ожидающие издания шестой и седьмой тома будут посвящены теории языков и компиляторам.

Цукерберг рекомендует:  Как вернуть доступ к вебинарам

В своем отзыве о работе Кнута Билл Гейтс сказал: «Если вы считаете себя действительно хорошим программистом… прочитайте „Искусство программирования“ (Кнута)… Если вы сможете прочесть весь этот труд, то вам определенно следует отправить мне резюме». Цитата лишний раз подчеркивает, что, несмотря на сложность материала, настоящий профессионал обязательно должен осилить труд Дональда Эрвина Кнута «Искусство программирования».

Э. Хант, Д. Томас «Программист-прагматик»

Программисты-прагматики не уклоняются от ответственности. Вместо этого они испытывают радость, принимая вызовы и распространяя свой опыт.

Эндрю Хант

Книга «Программист-прагматик» полностью оправдывает свое название. Викисловарь говорит, что прагматик — это тот, «кто ставит практическую полезность, выгоду выше всего». Программисты-прагматики ориентируются в первую очередь на практическую успешность реализуемых проектов. Авторы на основании своего богатейшего опыта программирования создали структурированный набор практических советов для программистов. Небольшой размер книги (270 страниц) говорит о высокой концентрации важной для программиста информации.

Практически все излагаемые в книге темы поясняются выразительными аналогиями, которые порой поражают своей точностью. В книге проводятся параллели между некачественным кодом и теорией разбитого окна, столярным делом и работой программиста, вождением автомобиля и написанием кода, стрельбой трассирующими пулями и созданием прототипов ПО, хождением по минному полю и программированием в расчете на стечение обстоятельств. В конце каждого раздела приводятся вопросы для обсуждения и упражнения, что лишний раз подчеркивает практическую направленность книги.

Одним из самых замечательных принципов программирования, которым мы обязаны авторам, является принцип DRY (Don’t Repeat Yourself), что в переводе на русский означает: «Не повторяй самого себя». Это значит, что каждый фрагмент знания должен иметь единственное и однозначное представление в системе. Следование данному принципу позволяет повысить надежность, доступность и простоту сопровождения программного продукта.

В главе, посвященной общей философии прагматичного программирования, мы узнаем, каким авторы видят программиста-прагматика: он всегда принимает ответственность за свой код, следит за состоянием своего продукта, постоянно совершенствуется, общается и находит компромисс с пользователями. Глава «Прагматический подход» говорит об общих методиках разработки и оценки трудоемкости проектов. Важнейшая глава «Гибкость против хрупкости» рассказывает, каким же образом необходимо создавать действительно гибкие и устойчивые к изменению системы. Из главы «Перед тем, как начать проект» можно узнать о процедуре формирования и утверждения требований к системе. «Прагматические проекты» знакомят нас с критическими аспектами создания реальных проектов, такими как работа в команде, тестирование и формирование документации.

Единственное, что может подпортить впечатление о книге, так это недостаточно качественный перевод на русский язык и наличие множества опечаток. Книгу лучше всего читать в оригинале на английском языке. Нельзя не согласиться с отзывом Кента Бека: «Главное в этой книге то, что она поддерживает процесс создания программ в хорошей форме. [Книга] способствует вашему постоянному росту и явно написана людьми, знающими толк в программировании». Если вы стремитесь к постоянному росту как программист, эта книга обязательна к прочтению.

Заключение

Значение хороших книг по программированию сложно переоценить. Каждая из описанных книг позволяет совершить огромный скачок в развитии. «Искусство программирования» закладывает прочный фундамент, обучая нас фундаментальным алгоритмам и приемам программирования. «Совершенный код» позволяет выйти на новый качественный уровень конструирования ПО. «Чистый код» и «Рефакторинг» учат нас внимательнее относиться к качеству кода и поддерживать его в идеальном состоянии. «Программист-прагматик» подсказывает, как же реально добиться практического успеха при разработке ПО. «Паттерны проектирования» вооружают тяжелой артиллерией паттернов для решения множества задач проектирования.

5 языков программирования, которые должен освоить каждый разработчик

Перевод статьи «5 Programming Languages Every Master Developer Should Learn».

“silver MacBook turned on” by Fabian Grohs on Unsplash

Я где-то прочел, что программист должен каждый год изучать один новый язык программирования. Но если вы так не можете, я советую изучить по крайней мере следующие пять языков: это поможет вам в вашей карьере.

Все компании любят всесторонне развитых программистов-полиглотов, которые способны и набросать скрипт на скорую руку, и написать сложную программу на Java. Фактически, считается, что разработчик уровня сеньора обязательно должен знать больше одного языка.

Интервьюеры уделяют больше внимания инженерам, имеющим хороший опыт работы с различными языками, например, C++ и Java или Python и Java.

Лично мне нравятся инженеры с хорошим опытом в C++ или Java, которые также могут писать скрипты на Groovy, Perl или Python.

Маленький скрипт часто бывает быстрым и достаточно хорошим решением для конкретных задач. Поэтому мне бы не хотелось, чтобы мой программист убил целый день, чтобы написать на Java программу для чтения CSV-файлов или сбора сообщений с TCP/UDP порта.

Почему я выбрал именно эти пять языков программирования? Мои резоны просты и практичны. Я выбирал языки, основываясь на их используемости, парадигме и популярности.

Например, если вы хотите заниматься разработкой приложений, вы не можете игнорировать Java. А JavaScript вообще применяется повсюду в интернете.

Я совершенно уверен, что разработчики должны изучать язык С в самом начале своей карьеры, потому что это поможет им приблизиться к системе и понять ключевые идеи программирования, которые часто скрываются за JVM (виртуальной машиной Java) или CLR (общеязыковой исполняющей средой).

В качестве скриптового языка я выбрал Python, хотя вы можете заменить его на Perl или Groovy. Хотя, если говорить об онлайн-поддержке, Python также великолепен. Есть множество доступных Python-модулей, которые могут справиться с вашей задачей за пару минут.

Сходным образом изучение одного объектно-ориентированного и одного функционального языка программирования, такого как Haskell или Scala, расширит ваш кругозор и разовьет программистское чутье. Далее я изложу больше доводов в пользу изучения выбранных мной 5 языков программирования. Среди них будут представлены объектно-ориентированные, функциональные и скриптовые языки, предлагающие низкоуровневый контроль, и язык, широко используемый в бэкенд-разработке.

1. Java

В последние два десятка лет Java является одним из самых популярных языков программирования. Она буквально правит в мире разработки серверных приложений. Этот язык занимает существенное место на рынке разработки мобильных игр и приложений для Android, а также в мире корпоративной веб-разработки.

Java началась с простой идеи WORA («write once run anywhere», «пиши один раз и запускай где угодно»), но со временем Java, собственно, начала запускаться везде.

Этот язык стоит изучать, чтобы создавать устойчивые, масштабируемые серверные приложения. На Java можно строить проекты любой сложности: в ней есть и нужные инструменты, и технологии, и готовое прийти на помощь сообщество.

Зачем нужно изучать Java? С ней вы сможете фокусироваться только на дизайне приложения и структуре кода. Вам не придется беспокоиться о деталях, специфических для системы, и об управлении памятью. Этим займется JVM.

Если вы решили изучить Java, могу посоветовать начать с хорошего курса на Udemy – The Complete Java Master Class. В нем достаточно детально рассматриваются все необходимые концепции языка.

Кстати, если вам хочется больше вариантов и вы не возражаете против бесплатных курсов, можете просмотреть этот список бесплатных курсов Java для начинающих.

Java используют крупнейшие организации, например, банки и страховые компании, а также на этом языке пишутся приложения для Android.

2. Python

Python чаще других изучают в школах и колледжах по всему миру. В США Python является предпочтительным языком для того, чтобы начать изучение программирования. В этом плане он потеснил Java во многих вузовских курсах. Что вам даст изучение Python? Многое.

Python это язык, который может выступать как в роли скриптового, так и в роли объектно-ориентированного языка, подходящего для крупного проекта.

Многие популярные сайты, включая Reddit, построены на фреймворках Python, таких как Django. В последнее время многие крупные организации также переходят на фреймворки на основе Python.

Этот язык все массовее используется для технологий нового поколения, таких как машинное обучение, искусственный интеллект и наука о данных. Несомненно, это связано с наличием прекрасных библиотек для машинного обучения, таких как TensorFlow, Scikit-Learn и др.

Лично я использую Python для написания скриптов: он очень полезен, когда надо сделать что-нибудь быстро. Например, на Python вы можете за пять минут написать прослушиватель сообщений UDP, а на Java на это уйдет уже 20 минут, не считая компиляции и упаковки.

Если вы заинтересованы в изучении Python, тогда The Complete Python BootCamp будет отличным начальным курсом.

Кстати, если вам хочется больше вариантов и вы не возражаете против бесплатных ресурсов, можете просмотреть этот список бесплатных курсов Python для начинающих.

Также, если вы колеблетесь и не знаете, начать ли вам с Java или Python, взгляните на эту сравнительную инфографику.

3. JavaScript

В этом списке вы можете заменить Java на C++, а Python на Ruby, но на сегодняшний день вам ничем не удастся заменить JavaScript. Последние пять лет JavaScript доминирует в мире.

Это больше не просто скриптовый язык фронтенда. Благодаря фреймворкам и библиотекам, таким как Node JS, Angular и React, вы можете использовать JavaScript и для бэкенда, и для разработки пользовательского интерфейса.

В некоторой степени своим ошеломляющим успехом JavaScript обязан jQuery – библиотеке, которая полностью изменила способ использования JavaScript во фронтенде.

Поскольку я являюсь Java-программистом, работающим над приложением на базе JSP и Servlet, у меня было огромное количество возможностей использовать как jQuery, так и JavaScript.

Знание этого языка помогло нам решить, какая функция должна быть реализована на стороне сервера, а какая может обрабатываться на стороне клиента. Например, многие проверки, которые мы делали на стороне сервера, были перенесены на клиентскую сторону.

Если вы хотите изучить JavaScript с нуля и до самых глубин, тогда лучший онлайн-курс для вас это The Complete JavaScript на Udemy.

А если вы хотите иметь больше выбора и не возражаете против бесплатных ресурсов, тогда вам также стоит обратить внимание на этот список бесплатных курсов по JavaScript для веб-разработчиков.

4. Язык С

Нельзя быть настоящим программистом и не знать С или С++. Громко сказано, но я утверждаю это на основе своего многолетнего опыта.

Инженеры и разработчики, знающие С/С++, попросту лучше программистов, которые этих языков не знают, и это не может быть простым совпадением.

Это один из тех языков, которые вы обязательно должны знать. Я изучал С во время учебы в вузе и познакомился при этом со многими ключевыми понятиями программирования, например, структурой, массивом, указателями, управлением памятью и т. п.

С по-прежнему является предпочитаемым языком в системном программировании, а в последние два года он также является серьезным конкурентом Java.

Если вы хотите изучить этот прекрасный язык, тогда удачным началом станет C Programming for Beginners.

Язык С также является одним из старейших языков, пережившим уже больше 4 десятилетий.

Кстати, если вы захотите выучить С++ вместо С, это также неплохо, поскольку они довольно похожи и позволяют писать низкоуровневый код для систем и драйверов.

В связи с высокой производительностью это также один из важнейших языков для разработчиков игр.

Если вы хотите создавать игры и изучить С++, тогда одним из лучших курсов для вас будет The Unreal Engine Developer Course — Learn C++ & Make Games. Он просто великолепен, а разрабатывая игры, вы изучите больше, чем при любом другом способе обучения.

Также, если вы хотите изучить С++, вы можете воспользоваться моим списком бесплатных курсов по С++ для начинающих.

5. Scala

Scala это язык, созданный на основе лучших подходов последних 20 лет. Это также функциональный язык программирования, а это значит, что предлагаемая им парадигма отличается от объектно-ориентированного программирования. Это может улучшить ваш образ мышления и чувство кода.

Хотя есть много функциональных языков программирования, например Haskell, я выбрал Scala, потому что, будучи Java-разработчиком, считаю его более простым в изучении, чем Haskell.

Кто-то может воспринять это как вызов и изучить также и Haskell, но с практической точки зрения изучение Scala больше подходит для Java-разработчиков.

А для С++ программистов, как мне кажется, больше подходит Haskell. Честно говоря, вы можете выбрать любой функциональный язык программирования, но остановите свой выбор на таком, который пользуется коммерческим спросом.

Поскольку я профессиональный разработчик, я предпочитаю посвящать свое время чему-нибудь, что может пригодиться в моей карьере. Если вы хотите изучить Scala, то хорошим стартом будет курс Beginning Scala Programming.

Но независимо от того, сколько языков программирования вы знаете, как профессиональный программист вы должны следовать принципам, изложенным в книге «Чистый код». Этот навык больше всего поможет вам в вашей карьере.

Вот и все насчет пяти языков, которые должен изучить каждый разработчик. Некоторые могут заметить, что это пять языков, которые должен изучить каждый Java-разработчик, и будут правы.

Я считаю, что изучение языков, предлагающих разные парадигмы, это лучший способ усовершенствовать свои навыки программирования и начать более эффективно справляться с ежедневными задачами.

В идеале «джентльменский набор» программиста должен включать:

  • один язык, близкий к системным, например, С или С++,
  • один объектно-ориентированный, вроде Java, Python или C++,
  • один функциональный, например, Scala или Haskell,
  • один мощный скриптовый, такой как Perl, Python или Ruby,
  • и плюс ко всем ним – JavaScript. Да, для него замены нет.

5 ошибок, которые могут помешать вам стать программистом

Привет! Собрал некоторые очевидные и не очень ошибки начинающих программистов. Это модели поведения и ложные представления, которые могут или вообще закрыть вам дорогу в программирование, или, по крайней мере, растянуть этот путь на много лет. Статья предназначена в первую очередь для новичков.

Розовые очки

У многих людей, которые только услышали об IT и загорелись желанием туда войти, сформировано неверное представление об этой сфере и специфике работы. Во многом в этом виноваты продающие страницы курсов по программированию, основная цель которых зачастую — убедить вас, что нужно только отправить деньги за обучение, все остальное за вас сделают умные наставники, и вот уже скоро вы начнете работать мега-программистом и Яндекс с Гуглом будут за вас сражаться. Конечно же это вранье.

Первым делом нужно осознать, что за вас никто ничего делать не будет. И что получить эту профессию очень и очень непросто. И чем больше вам лет, чем дальше ваша текущая профессия, образование и интересы от IT сферы, тем сложнее (и дольше) вам будет переучиваться. Поэтому будьте готовы к упорному труду. За месяц изучить программирование не выйдет. Придется учиться практически ежедневно на протяжении всей дальнейшей жизни. Обходных путей и каких-то тайных знаний тут не существует.

Нереальные/неконтролируемые цели

Цель “Стать программистом” — очень большая и серьезная. Типичный “слон”. А значит, есть его надо по кусочкам. Эту цель не взять с наскока. Будут дни, когда вы будете впадать в депрессию из-за того, что результатов нет, вы весь день промучились с какой-нибудь задачкой, которую так и не получилось решить. рассылаете свое резюме джуниор-программиста, а в ответ тишина. В такие моменты очень легко потерять мотивацию, разочароваться, сменить направление деятельности.

Чтобы поддерживать себя в мотивированном состоянии и плодотворно учиться, стоит ставить себе контролируемые цели. Например, учиться программировать каждый день минимум по 2 часа (этого мало, если вы хотите получить быстрый результат, но это гораздо лучше чем три дня по 8 часов, а потом забросить на 2 недели). Можно разбить эти 2 часа на 4 “помидорки” по полчаса в течение дня. (гуглите “техника Помодоро”) Еще лучше — если вы распишете, что конкретно будете делать, например заниматься на Хекслете, или по какой-то конкретной книге. В этом случае, если вам удастся придерживаться этого графика, вы 100% будете двигаться вперед.

И каких-то самокопаний, неуверенности в себе будет в разы меньше, чем если поставить себе цель через месяц устроиться на работу программистом и с треском ее провалить. Это еще такая психологическая хитрость, если у вас небольшая четкая цель и вы день за днем ее выполняете, то уверенность в себе (и в нашем случае, умение программировать) будет только расти.

Зубрежка функций

Иногда люди думают, что главная (и единственная) их задача — это изучить сам язык программирования. Из этого заблуждения, кстати, вытекает еще одна ошибка. Тратить бесконечно много времени на попытки “с дивана” выяснить какой язык лучше.

Типа: Ой, Руби классный. Ой нет, Руби умирает, вот Питон супер, его рекомендовали в какой-то статье которую я краем глаза читал. А пхп так вообще ужас, да и к тому же полумертв. О, так джависты оказывается получают в 5 раз больше других программистов, мне срочно нужна Java! И так далее. Эти попытки разобраться какой язык лучше занимают уйму времени и плодят сотни новых вопросов на тостерах.

Какое занятие может быть еще бесполезнее? Это не выучив даже синтаксиса языка, до посинения читать форумы и пытаться разобраться, что же блин лучше React или Ангуляр.

На что лучше потратить это время? На изучение фундаментальных вещей, которые обязательно вам пригодятся, и которые должен знать любой профессиональный программист. Принципы работы операционных систем, структуры данных, алгоритмы, математика и т.п. Причем, не надо ждать собеседований, эти вещи стоит начать подтягивать уже с самых первых дней. Поверьте, все это вам очень пригодится и сыграет на руку при трудоустройстве и сильно ускорит ваш рост.

Дети Ютуба

Где брать эти знания? Кроме очевидного -Youtube, Coursera, Stepic, Openedu, курсы Хекслета, стоит начать активно читать книги (бумажные или электронные — разницы нет). Видеокурсы все больше движутся в направлении развлечений, народ хочет зрелищ. (и хлеба в виде больших зарплат). А скучать никто не хочет. Под видео часто можно видеть отзывы типа “Скучно! Монотонно!”. Людей приучают развлекаться, и они постепенно привыкают. А ведь обучение по книге гораздо более эффективно, потому что информация в книге сконцентрирована, а в видео наоборот, размазана, чтобы было подольше да повеселее.

Однако не зря говорят: “У бедных людей большие телевизоры, а у богатых большие библиотеки”. Поэтому, читайте больше, друзья. Даже 3 хороших книги уже вас прокачают. И если вы решили изучать программирование, то очень советуем вам вдобавок к любым курсам и менторам с первых дней начинать читать книги.

Что именно читать? Смотрите здесь, в книжной подборке Хекслета.

Перфекционизм

Некоторые хотят выучить все идеально, даже и не приступая к реальным проектам. Чтобы не дай бог где-то не ошибиться, не показать себя глупым. Грубо говоря, хотят стать senior программистом, еще перед трудоустройством. Им всегда кажется, что они знают мало, нужно еще, еще, еще. Еще чуть-чуть подготовиться, тогда можно и сходить на собеседование. Наверняка, это явление исследовано вдоль и поперек всякими мощными психологами. Мне кажется, здесь основной страх один — показаться плохим(неумелым) перед какими-то людьми, мнение которых для тебя важно.

Реальность же такова, что практически невозможно к чему-то подготовиться “с дивана”. Нельзя научиться драться по книгам, невозможно на 100% подготовиться к собеседованиям, не посетив ни одного. Стоит принять для себя, что неудачи это просто опыт. Конечно, сложно сломать устоявшиеся привычки за один раз, но пробуйте разрешать себе ошибаться, хотя бы в мелочах. Не бойтесь показаться глупыми. Не бойтесь ошибок, не бойтесь отказов, не бойтесь неудач — это путь к лучшей жизни.

Ладно это все общая болтовня, а вот конкретный совет. Если вы уже хотя бы несколько месяцев занимаетесь программированием, начинайте составлять резюме, читайте статью про алгоритм поиска работы и вперед!:)

Спасибо за то, что дочитали до конца и удачи во всех начинаниях!

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих