Что нужно знать и уметь, чтобы стать разработчиком на С++
Про разработку на C++ ходит много слухов и мнений: одни говорят, что это очень сложно, другие — что это универсальный язык для всего, а третьи — что это самый лучший язык для начинающих. Мы решили разобраться, правда ли это и что нужно для того, чтобы стать разработчиком на C++.
Что такое C++
C++ — это язык программирования высокого уровня. Это значит, что он работает не напрямую с процессором (хотя такие возможности там есть), а с помощью привычных и понятных программисту команд, похожих на слова в английском языке.
Ещё C++ поддерживает ООП — там есть объекты, классы, свойства, методы и всё остальное. Это значит, что на нём можно реализовать любой современный алгоритм, используя всю мощь объектного программирования.
Сила С++ в том, что он позволяет напрямую работать с процессором, памятью и другим железом. Это позволяет писать на нём супербыстрые программы. Например, большинство популярных алгоритмов сортировок во многих языках написано на С++, потому что он напрямую работает с памятью и быстро работает с данными в ней.
Обратная сторона такой мощи — в сложности С++. Сам по себе язык не очень сложный, с простым синтаксисом, но для серьёзных задач нужно знать архитектуру процессора, устройство памяти, системные функции операционной системы и много других тонкостей.
Вот пример кода на С++:
#include #include using namespace std; const int INFINITE_ROOTS = -1; int solve_linear(double a, double b, double &root) < if (a == 0) return b == 0? INFINITE_ROOTS: 0; root = -b / a; return 1; >int main() < cout > a >> b;) < const int roots = solve_linear(a, b, x); if (roots == 0) cout return EXIT_SUCCESS; >
Что сейчас пишут на С++
За 40 лет существования языка в сфере разработки мало что поменялось: на С++ традиционно пишут критически важный софт:
- драйверы;
- операционные системы;
- приложения для встраиваемых систем (например, охранная сигнализация);
- высокопроизводительные серверы и сервисы;
- компьютерные игры и движки для них;
- языки программирования;
- компиляторы и интерпретаторы.
Один из основных профилей С++ — программы, в которых нужна максимальная скорость и производительность. Например, большинство банковских приложений по обработке транзакций написаны на C++, так же как и популярные базы данных — MongoDB и Redis.
Чем отличается C++-разработчик от всех остальных
Главное отличие С++-разработчика — в его кругозоре и глубоком знании внутренней работы процессора, памяти и компьютера в целом. В большинстве остальных языков такое погружение не требуется — программист просто подключает нужные библиотеки, а они делают за него всю работу. Это удобно, но сделать максимально быструю программу так не получится.
Программист на С++ тоже пользуется библиотеками, но большинство из них работает тоже на низком уровне, и ему всё равно нужно вручную предусматривать много ситуаций. Это сложнее, требует высокой квалификации, но по скорости готовых программ им часто нет равных.
Что нужно знать кроме С++
Чтобы хорошо программировать на C++, недостаточно знать только синтаксис и основные конструкции языка. Если разработчик хочет профессионально расти и развиваться, кроме этого нужно знать много разного.
Алгоритмы и структуры данных. Они помогут эффективно решать задачи и оптимизировать свой код. Важно иметь представление о различных типах данных, списках, стеках, очередях, деревьях, хеш-таблицах и других структурах данных, а также о популярных алгоритмах сортировки, поиска и обхода графов. К другим языкам это тоже относится, но для C++ это база.
Операционные системы. Если программист будет понимать, как в ОС управлять процессами, потоками, памятью и файлами, это позволит ему написать более быстрый и эффективный код.
Сетевая архитектура. Пригодится, если программе нужно будет работать с сетью и получать оттуда данные (или отправлять их). Для разных задач — разные сетевые протоколы.
Инструменты разработки. Тоже нужно всем, не только разработчикам С++. Сюда относятся отладчики, системы контроля версий (например, Git), среды разработки и средства автоматической сборки кода (например, CMake или Make).
Стоит ли выбирать С++ как первый язык
С одной стороны — да, это хороший язык для обучения: в нём хороший и понятный синтаксис, много документации, примеров и можно начать с несложных программ.
С другой — кроме самого языка нужно периодически разбираться с устройством памяти, указателями, ссылками, адресацией и прочими сложными терминами. Это требует больше времени, и некоторые понятия могут показаться сложными.
Наше мнение такое: если вам нужен первый язык программирования, после которого все остальные языки будет выучить гораздо проще, — начните с С++. Или если вы хотите сразу погрузиться в системное программирование — С++ будет отличным стартом.
Сколько платят
По данным Хабр Карьеры, средняя зарплата разработчика на C++ составляет 184 тысячи рублей. При этом новички получают в среднем 88 тысяч, а мидлы — в два раза больше, 172 тысячи:
Как стать разработчиком игр с нуля? Где на него учат и какой порог входа в профессию?
Что нужно знать разработчику игр? С чего начать, где пройти обучение и набраться опыта? Как стать востребованным специалистом, какими навыками он должен обладать? Ответы в нашем кратком обзоре.
время на прочтение: 3 мин.

Разработкой игровых приложений занимаются отдельные IT-специалисты – геймдевелоперы. Их основная задача — создавать рабочий продукт, адаптированный под конкретные нужды. Существует несколько направлений разработки:
- компьютер;
- смартфоны, планшеты;
- приставки;
- социальные сети, сайты.
IT-профессии отличаются широким списком требований к специалистам, но, несмотря на это, порог входа в большинство направлений низкий из-за разделения обязанностей на нескольких программистов. Разработчики имеют внутреннюю классификацию согласно выполняемому функционалу:
- создатель геймплея отвечает за общую механику;
- engine-программист создает шаблонные утилиты, обеспечивающие ускорение работы остальной команды;
- разработчик анимации прорабатывает визуальный ряд;
- DevOps-программист связывает воедино сторонние сервисы и игроков;
- бэкенд-программист отвечает за серверную, скрытую от пользователя, часть работы.
Каждый специалист отвечает за отдельный сектор общего процесса, соответственно, требования к ним предъявляются разные. Работа строится на взаимодействии всех участников. Чтобы понять, с чего начинать работать, необходимо разобрать, как стать разработчиком игр.
Обучение
Сфера разработки игровых приложений обширна, существует несколько путей входа в профессию. Иногда геймдевелоперами становятся профессиональные игроки, которые самостоятельно проходят обучающие онлайн-курсы. Обычно ими руководит желание модифицировать конкретное приложение или создать с нуля собственный мини-проект. Более затратный с точки зрения усилий и времени путь – полноценное обучение в техническом колледже или ВУЗе. Полученный диплом позволяет претендовать на место в профессиональной команде крупного проекта. Среди вариантов, где учиться на разработчика игр, многие отдают предпочтение онлайн-курсам от крупных платформ (GeekBrains, SkillBox).
Обучающие сервисы предлагают широкий спектр программ для геймдевелоперов. Сначала нужно выбрать сферу деятельности. Наиболее важным критерием становится платформа, для которой будут разрабатывать игровые приложения: смартфоны, компьютеры, приставки, и движок – основополагающее программное обеспечение. От этого зависит язык программирования. Новички отдают предпочтение игровому движку Unity. В процессе обучения важно уделять внимание не только теории, но и практике. Создание мини-проектов игр или модов помогает наработать портфолио и опытным путем отработать схемы разработки.
Основные требования к разработчику игр
Геймдевелопер должен уметь прописывать концепции геймплея, создавать дизайн, соблюдать логику, сценарий при разработке прототипов. Для этого ему требуется знание особенностей жанра, алгоритмов и структур данных, английского языка, языка программирования движка, программ 3D-моделирования и систем контроля. Дополнительным является понимание физико-математических основ.
В зависимости от того, что делает разработчик игр, существует несколько узких сфер работы, но общий функционал сводится к:
- созданию программ;
- разработке персонажей, сценария;
- созданию визуального, звукового рядов;
- расширению функционала;
- интеграции плагинов для различных нужд (реклама, аналитика, контроль правил и проч.);
- увеличения скорости работы при помощи оптимизации кодов.
А углубленный список обязанностей как раз и определяет, какие есть разработчики игр.
Что должен знать востребованный геймдевелопер?
Работа новичков начинается с движка Unity, от более опытных создателей игр требуется знание HeroEngine, Godot, Frostbite, Source, Id Tech, CryEngine, GameSalad или Creation Engine. Масштаб реализуемого проекта также определяет, что нужно знать разработчику игр. Крупные фирмы, выпускающие серьезные проекты, предпочитают работать по конвейерному принципу, когда разработка разбивается на отдельные части, регулируемые разными специалистами. В маленьких проектах от геймдевелоперов требуются кросспредметные знания.
Для универсального специалиста необходим опыт работы с системой контроля видеоигр, например, популярной Git&GitHubGit. Английский язык должен быть на уровне, достаточном для понимания технической литературы (В2 и выше). Физико-математические знания должны включать линейную алгебру, тригонометрию, математический анализ, дискретную математику, аналитическую геометрию, оптику, механику, кинематику. Специфический жанр проекта может потребовать от программиста знаний, например, в области медицины. Но подобные требования возможно удовлетворить, прочитав пару научно-популярных книг перед началом работы над проектом.
Где набраться опыта?
Разобравшись с тем, что нужно, чтобы стать разработчиком игр, важно наработать портфолио, потому что работодатели отдают предпочтение кандидатам с опытом работы. Но где набраться опыта сразу после окончания обучения? Существует 3 варианта.
- Разработка легких мини-игр во время обучения.
- Разработка модификаций существующих игровых приложений. Многие крупные проекты выпускают специальные средства создания дополнений. Это могут быть дополнения к геймплею, моды персонажей или визуального ряда.
- Неоплачиваемая стажировка.
Разработчик игровых приложений – это многофункциональный специалист, в профессию могут с успехом войти выпускники специальных курсов, технических ВУЗов и программисты, не имеющие опыта работы с движком. Работодатели требуют от геймдевелопера углубленных знаний в работе с языком программирования движка, программами 3D-моделирования, системами контроля, а также портфолио. Если программист хочет сосредоточиться на узкой области программирования, то ему лучше обратить внимание на крупные проекты, предпочитающие разделять весь процесс между программистами. Универсальные геймдевелоперы могут с успехом работать как на крупных работодателей, так и на небольшие стартапы.

Найдем ИТ-специалистов любого уровня и направлений
- Работаем без предоплаты
- Первый кандидат через 3 дня
- Финансовая гарантия в течение 3 месяцев
Что нужно знать о разработке не разработчику
Сегодня рассмотрим интереснейшую тему. Мы уже публиковали технические статьи и по Java , и по структурам данных , и по алгоритмам . А зачем это всё? Сегодня мы постараемся приоткрыть завесу тайны и рассказать о том, что всё-таки нужно знать и уметь, чтобы начать свой путь в IT. Сложно ли это, нужно ли для этого иметь техническое образование и получится ли изучить необходимое? Давайте разбираться!
Для начала определимся с допущениями. Во-первых, я расскажу именно про старт карьеры, то есть статья будет полезна тем, кто только начинает свой профессиональный путь; либо тем, кто подумывает о смене профессии. Во-вторых, я Java-разработчик, поэтому некоторые моменты будут специфическими. Но это не делает статью менее полезной для всех остальных.
Основы: алгоритмы и структуры данных
Один из основных навыков, который проверяется у кандидатов, — это знание алгоритмов и структур данных. Это то, что нужно не просто выучить, а именно понимать. Деятельность разработчика так или иначе связана с алгоритмами. Понимание того, как алгоритмы появляются и работают, важно. Вы всегда должны уметь оценить сложность решений, а знание алгоритмов поможет выбрать лучшее из возможных. Если вы этого не знаете, но вам интересно, то всегда можно разобраться.
Методологии разработки
Большим плюсом будет знание методологий разработки. Их много. Но бóльшее количество крупных компаний работают по гибким методологиям разработки, или Agile. Наиболее популярные — Scrum и Kanban. Учитывая, что ваш путь в IT только начинается, вряд ли вам доводилось работать по таким методологиям, и их знание будет вашим преимуществом.
Английский язык
Также не забываем про английский язык. За редким исключением знание языка на уровне B1 является обязательным. И это не причуда. Просто есть высокая вероятность, что вы будете общаться с англоговорящими коллегами. В целом, если вы понимаете английскую речь и способны ответить, то это хорошо, а если нет — изучайте английский!
Soft Skills
Следующий критерий — это soft skills («гибкие навыки»). Их ещё называют навыками межличностного общения и взаимодействия. Сфера IT подразумевает командную работу, а это значит, что вы будете взаимодействовать с другими людьми. Нужно понимать, что вы будете общаться с коллегами, а им должно быть комфортно общаться с вами. Это залог тёплой, дружеской атмосферы в команде, а это уже половина успеха.
Hard Skills
Из технических знаний пригодится знание систем контроля версий. Они могут быть разные, например: Git, Subversion, Mercurial. Если у вас нет опыта работы хотя бы с одной из них, то это не проблема. Наиболее распространённой системой контроля версий является Git, и полный курс по её изучению длится около 3 часов. Также хорошо иметь опыт использования хотя бы одной профильной среды разработки, например: IntelliJ IDEA, Eclipse, Visual Studio Code, Web Storm, NetBeans.
Пару слов о том, что нужно знать, если вы хотите стать Java-разработчиком.
Что нужно знать начинающему Java-разработчику
Если вы собираетесь связать свою жизнь с Java, в первую очередь вам нужно знать основы объектно-ориентированного программирования. Также хорошо бы разбираться в принципах разработки: SOLID, DRY, YAGNI и KISS. Важно иметь представление о том, что такое базы данных, какие они бывают и зачем вообще нужны. Нелишними будут основы многопоточной и конкурентной обработки данных в Java. Знание GoF-паттернов проектирования, а также базовые знания веб-разработки: HTTP, URL, какие запросы бывают, что такое сессия.
В целом, этих знаний будет достаточно, чтобы пройти отбор на тренинг по основам Java, где вам уже подробнее расскажут о разработке на этом языке. А чтобы попасть на Java-стажировку, нужно обладать более глубоким знанием языка и иметь свои небольшие проекты.
Теперь коротко отвечу на вопросы, поставленные в начале:
- Сложно ли это? Да, непросто. Если хочется «просто», возможно, это сфера не совсем то, что вы ищете.
- Обязательно ли техническое образование? Чтобы стать разработчиком, техническое образование не обязательно. Образование играет роль, но оно в основном влияет на скорость понимания технических особенностей.
- Получится ли? Да, если вы будете стараться. Всему, что я описал выше, можно научиться и на это не потребуется много лет.
Главное — не бояться сложных задач. Помните: нет сложных задач, есть те, что требуют чуть больше времени на их решение.
Не путайте разработку ПО и программирование
Каждый разработчик ПО умеет программировать, но не каждый программист может разрабатывать ПО

Большинство может легко научиться готовить, но когда нужно накормить большое число людей, мы нанимаем повара.
Возможно, кому-то больше нравится говорить не «разработчик», а инженер-программист, ведь инженер — это звучит гордо! Или нет? К счастью, эта статья не о терминах. Если мой термин вам не нравится — подставьте свой: «автор ПО», «мастер ПО»… и даже «творец приложений»!
Говоря «разработчик ПО», я имею в виду человека, для которого написание качественного ПО — профессия. Человека, который использует в своей работе научные подходы и статистику и считает свое занятие чем-то большим, чем просто зарабатывание денег.
Чтобы стать разработчиком, уметь программировать недостаточно.
Научить программировать можно любого — это легко. Писать простые программы, которые работают у конкретных людей на конкретных машинах, может почти кто угодно, но никто не гарантирует, что те же программы будут работать в других условиях.
Мне нравится такая аналогия: каждый может ради собственного развлечения петь в ду́ше, но вы же не ставите треки с записями этого пения на вечеринке — вы обращаетесь к произведениям профессиональных музыкантов.
Хотите еще аналогий? Пожалуйста:
- В школе нас обучили математике и письму, но это не сделало нас математиками и писателями.
- Большинство может легко научиться готовить, но когда нужно накормить большое число людей, мы нанимаем повара.
- Никто не зовет соседа — мастера на все руки построить дом с нуля.
Переведено в Alconost
Программирование в простейшем представлении — это передача компьютеру указаний на совершение некоторых действия с некоторыми входными данными для получения некоторого вывода.
Разработка же программного обеспечения — это проектирование, написание, тестирование и поддержка компьютерных программ с целью решения задач для множества пользователей; это создание надежных защищенных решений, которые выдержат испытание временем и справятся с некоторыми не известными заранее задачами, лежащими в области, близкой к очевидным исходным задачам.
Разработчики ПО досконально изучают решаемые задачи, полностью понимают, как работают предложенные ими решения, как эти решения ограничены и как они характеризуются с точки зрения конфиденциальности работы с данными и безопасности.
А если кто-то не понимает задачу, ему нельзя давать разрабатывать для нее решение.
Ориентированный на решения подход
Разработчики ПО не считают своей работой просто написание программ — они рассуждают с точки зрения удовлетворения потребностей и решения задач. И это важно, потому что не для всякой задачи необходимо писать программу: в некоторых случаях достаточно использовать уже существующую программу или объединить несколько программ. А действуя на упреждение, иногда можно вообще избавиться от необходимости решать данную задачу: разработка хороших программ часто предполагает планирование, которое позволяет предупредить появление некоторых проблем и соответствующих задач в будущем.
«Умные решают проблемы — гении же их предотвращают».
— Альберт Эйнштейн
Для сложных задач приходится писать несколько программ. В некоторых случаях нужны программы, работающие параллельно, в других — запускающиеся последовательно. Иногда для решения задачи достаточно обучить пользователей.
Прежде чем писать код, разработчик задастся следующими вопросами:
- Какие задачи я пытаюсь решить?
- Как можно решить задачу, обойдясь без программирования?
- Что можно сделать, чтобы писать код для решения задачи было проще?
Качество кода
В качественных программах код понятен и читается легко, их можно без труда расширять, они отлично взаимодействуют с другим ПО, а их поддержка не превращается в кошмар. Качество кода не должно становиться жертвой компромиссов; использование быстрых, но неаккуратных решений из-за поджимающего срока, излишнего волнения, взбудораженности, раздраженности и т. д. — неприемлемо.
Один из важнейших аспектов разработки ПО — это проектирование с нуля продукта, готового к расширению. Модификация приложений после их выпуска — факт, с которым нужно смириться. Пользователям будет нужно всё больше функционала, они захотят, чтобы пользоваться приложением было еще проще.
Компонент приложения обычно не очень полезен сам по себе. Пользу ПО начинает приносить, когда несколько компонентов взаимодействуют друг с другом, обмениваются данными и совместно работают на задачей представления данных и интерфейсов пользователям.
И с учетом этого нужно разрабатывать программы. Какие сообщения принимает ПО? Какие события отслеживает? Какие сообщения выдает? Как проходит проверка подлинности и авторизация при передаче данных?
Другой важный аспект написания хороших программ — это понятный код, а совсем не количество тестов или число в отчете о покрытии кода. Здесь всё просто. Подумайте: смогут ли другие прочитать код? Или — что еще лучше — сможете ли вы сами, написав код сегодня, понять его спустя несколько недель?
«В компьютерных технологиях есть только две сложные задачи: недействительность кэша и придумывание названий».
— Фил Карлтон
Читабельность кода имеет гораздо большее значение, чем может казаться. К сожалению, удобных показателей для оценки этой характеристики нет. Полезно будет запомнить зарекомендовавшие себя методики и шаблоны программирования, но часто этого недостаточно. У хорошего разработчика с опытом просто развивается интуиция, которая подсказывает, насколько читабелен код. Вот неплохое сравнение: чтобы писать лаконичный текст, недостаточно иметь большой словарный запас.
«У меня не было времени написать письмо короче».
— Блез Паскаль
С любой программой в какой-то момент что-то обязательно пойдет не так. Главный признак хорошего ПО — возможность легко исправить уже выпущенную в работу программу. Если программа во время работы выдает ошибку, об этом должно быть понятное сообщение, которое будет где-то централизованно записано — чтобы ошибки можно было отслеживать. При сообщении о новой ошибке у ответственного за ее исправление должна быть возможность провести отладку, в любой момент времени подключиться к системе и получить сведения о контексте выполнения, а также проверить ожидаемое поведение какого-либо компонента системы.

Рабочее окружение и тестирование
Когда разработчик пишет программу, он проверяет, чтобы она работала во множестве различных окружений, на машинах с разными ресурсами и в разных часовых поясах. ПО должно работать на экранах различных размеров и ориентации, в условиях ограниченной памяти и малой вычислительной мощности.
Например, если ПО пишется для веб-браузера, оно должно работать на всех основных браузерах. При создании классического ПО оно в большинстве случаев должно работать на платформах Mac и Windows. Если создаваемое приложение зависит от получения данных, оно должно продолжать работать и в том случае, если подключение к данным медленное или даже некоторое время полностью отсутствует.
Чтобы написать компонент ПО, разработчики пытаются продумать все возможные сценарии, которые только можно себе представить, и планируют их проверку. Начинают с того, что называется сценарием по умолчанию (или «счастливой дорогой» — от англ. «happy path»), в котором не происходит ничего неожиданного, а все возможные на этом пути проблемы — что важно — документируются и для каждой планируется тест. Некоторые разработчики начинают с написания «тестовых случаев», которые имитируют такие сценарии. Затем они пишут функциональный код, который проходит эти тестовые случаи.
Разработчики должны понимать предъявляемые к ПО требования, а ведь те часто бывают неоднозначными и неполными. Мастерство разработчика проявляется не в том, как он напишет решение, а скорее в том, какое решение он посчитает необходимым.
Стоимость и эффективность
В большинстве случаев разработчик может решить задачу быстро. Если вам кажется, что нанимать на работу опытных программистов — затратно, задумайтесь: чем больше у программиста опыта, тем быстрее он создаст функциональное, точное, надежное решение, которое несложно будет поддерживать. А это — меньшие затраты в долгосрочной перспективе.
Кроме того, учитывать следует и «стоимость работы» программы: всякое ПО потребляет ресурсы компьютера, а они не бесплатные. Разработчик напишет эффективную программу, которая не будет использовать ресурсы ПК без необходимости. Для этого он может применить, к примеру, кэширование часто используемых данных, — и это всего лишь один из, наверное, тысяч инструментов и способов, которые помогают повысить эффективность и скорость работы программы.
Возможно, программист-новичок и даст дешевое решение, но работа с этим решением может стоить вам и вашим клиентам намного больше, чем если бы вы сразу наняли опытного разработчика, который в первую очередь стремится найти эффективное решение.
Удобство использования
Хорошее ПО разрабатывается с учетом взаимодействия компьютера с пользователем (UX), и это довольно обширная тема, по которой проведено множество исследований и получено немало результатов. Чем больше выводов из этих исследований учтено, тем лучше будет ПО в использовании.
Позвольте я приведу пару примеров, чтобы вы могли прочувствовать, почему это важно:
- Хорошо спроектированное ПО в формах ввода данных пользователей не будет учитывать регистр символов в поле электронной почты и удалит начальные и конечные пробелы. Не нужно усложнять пользователям жизнь из-за того, что у них включен CAPSLOCK: электронный адрес не зависит от регистра. Если программа принимает новые адреса электронной почты, проверяйте их заранее и понятным языком сообщайте пользователю, что он, возможно, ввел неправильный адрес. Здесь имеются в виду и банальные ошибки — например, отсутствие символа @, — и не столь очевидные: например, ошибочное написание популярного домена: «gmail.ocm».
- Если пользователя нужно куда-либо перенаправить, хорошая программа запомнит исходный пункт и после выполнения необходимых действий вернет туда пользователя. Она запомнит и уже известные данные и взаимодействия, которые нужно связать с последующими шагами пользователя. Предположим, к примеру, что вы на сайте Expedia искали авиарейсы как гость, не входя в систему, — а затем решили создать учетную запись. Все предыдущие поисковые запросы в новой учетной записи сохранятся, и вы сможете ими воспользоваться с других машин.
- Хорошее ПО разрабатывается с учетом реальных сценариев работы в ней пользователей. Нельзя просто добавлять какие-то функции — нужно поставить себя на место пользователя. На днях я бронировал рейс авиакомпании United Airlines и забыл добавить свой номер часто летающего пассажира. Получив подтверждение, я отправился на веб-сайт United Airlines, чтобы добавить этот номер в рейс, и это заняло у меня десять минут. Очевидного пути добавить этот номер не было, поэтому пришлось лазать по всем ссылкам, которые, как мне казалось, могли привести к нужному функционалу. Наконец я нашел нужную страницу: оказалось, что в прошлый раз я не заметил нужное поле, потому что оно было глубоко зарыто в большой форме. В итоге мне понадобилось отредактировать данные о пассажире, прокрутить на этой форме штук 20 полей ввода, выбрать нужный тип номера и обязательно ввести номер телефона — иначе форму отправить было нельзя. Это пример программы, которую мог бы разработать человек, не пытавшийся думать с точки зрения пользователя.
Надежность, безопасность и защищенность
Пожалуй, самый важный аспект, который отличает разработчиков-профессионалов от программистов-любителей, заключается в том, что профессионалы знают, что они несут ответственность за создание безопасных защищенных решений.
Компонент ПО должен быть устойчив к «плохим» данным, неправильным состояниям и неверному взаимодействию. Добиться такой устойчивости ОЧЕНЬ сложно — именно поэтому мы постоянно читаем о том, как кто-то умер из-за ошибки ПО.
Пользователи будут вводить в ПО «плохие» и неправильные данные. Кто-то будет делать это намеренно — с целью взломать ПО и добраться до ресурсов, которые представляет данное ПО. Сотрудника, якобы ответственного за брешь в безопасности американского бюро кредитных историй Equifax, которой воспользовались злоумышленники, обвинили в том, что он не выполнил свою работу: он должен был обеспечить устойчивость к «плохим» и вредоносным данным во всём ПО, открыто публикуемом от имени компании.
Задача обеспечения безопасности связана не только с «плохими» и вредоносными данными, но и с обычными. Например, если пользователь забыл пароль, сколько раз он может попробовать его ввести? Блокировать ли его после исчерпания попыток ввода? Что, если кто-то умышленно пытается заблокировать пользователя? Давать ли пользователям возможность отправлять пароль по незашифрованному соединению? Что делать, если кто-то пытается войти в учетную запись из необычного места? Что предпринять, если возникает подозрение, что вход в систему осуществляется автоматически?
Как защитить своих пользователей от межсайтовых сценариев и подделки межсайтовых запросов, атак «злоумышленник посередине» и простого социального фишинга? Как разработать стратегию резервного функционирования в случае DDoS-атаки на сервера? Перечисленные вопросы — лишь малая толика из множества вопросов, которые нужно учитывать при проектировании.
Защищенные программы хранят конфиденциальные сведения не в виде обычного текста, а как односторонне зашифрованные данные со сложно взламываемыми алгоритмами. Это — резервная защита на случай взлома ПО и несанкционированного доступа к данным: хакерам достанутся зашифрованные данные, которые в большинстве случаев будут бесполезны.
Приложение может перейти в состояние ошибки, и его нужно будет исправить: даже в самых лучших программах возникают неожиданные проблемы. Если вы не учитываете это при планировании, вы — не профессиональный разработчик, а просто кодер с небезопасными программами.
Программные дефекты выявить сложно. Наш ум ограничен в своей способности прогнозировать и предотвращать известные дефекты. Поэтому разработчики ПО ценят хорошие инструменты, которые помогают писать правильный код и создавать безопасное ПО.
Используемые инструменты
Очевидно, что нам нужно больше инструментов и нужны инструменты лучше. В разработке ПО инструменты имеют большое значение, но их часто недооценивают.
Представьте на минутку, что для развертывания нам по-прежнему нужно было бы использовать FTP! Представьте отладку сети и выявление проблем производительности без браузерных инструментов разработчика! Представьте себе, как упадет эффективность написания JavaScript-кода, если не использовать ESLint и Prettier!
Если в JavaScript-разработке вы почему-то вынуждены оставить только один плагин для редактора кода, выбирайте ESLint.
Отличным дополнением будет всякий инструмент, который сокращает цикл обратной связи при написании кода. Мысль Брета Виктора об изобретении мгновенных визуальных представлений того, что мы создаем, открыла мне глаза. Использование и совершенствование инструментов — один из способов приблизиться к этому светлому будущему. Если вы еще не видели выступление Брета — обязательно посмотрите его.
Когда я нахожу отличный инструмент, я сожалею лишь о том, что не пользовался им раньше. Чем лучше инструмент, тем лучше с его помощью пишутся программы. Ищите, используйте и цените их, а если можете — и совершенствуйте.
Выбор языка — важен. Безопасность типа — важна. Лучшее, что произошло с языком JavaScript, — это TypeScript (и Flow). Статический анализ кода важнее, чем вам кажется. Если вы его не используете, вы, в сущности, становитесь уязвимы для возможных неизвестных проблем в будущем. Не пишите код без системы статического контроля типов. Если в выбранном языке нет статического контроля типов, нужно либо сменить язык, либо найти для него транскомпилятор: сегодня они уже достаточно умны, чтобы работать по комментариям в коде, и мне кажется, что для языков, не поддерживающих статический контроль типов, транскомпиляторы вскоре станут стандартным инструментом.
Становление разработчика ПО
Невозможно научиться разрабатывать ПО за пару месяцев, полгода и даже за год. На курсах программирования из вас не сделают разработчика. Я начал учиться 20 лет назад — и продолжаю учиться сегодня. С достаточной уверенностью я смог назвать себя опытным программистом только после десяти лет обучения, в течение которых мне пришлось спроектировать, создать и обеспечить поддержку приложений, используемых тысячами пользователей.
Разработка программного обеспечения — занятие не для всех, но каждый должен научиться решать собственные задачи с помощью компьютеров. Если вы можете научиться писать простые программы — сделайте это. Если можете научиться использовать несложные программные сервисы — сделайте это. Если можете научиться использовать ПО с открытым исходным кодом, в ваших руках окажутся мощные инструменты.
Задачи с течением времени меняются, поэтому меняется и разработка ПО. Задача этой профессии в будущем — дать возможность обычным людям использовать компьютеры, не тратя при этом на обучение полдюжины лет. Нужно дать пользователям простые и понятные инструменты, с помощью которых они будут самостоятельно решать простые задачи. А затем разработчики перейдут к созданию лучших инструментов, решению более масштабных известных задач и сделают все возможное, чтобы предотвратить появление неизвестных проблем.
О переводчике
Перевод статьи выполнен в Alconost.
Alconost занимается локализацией игр, приложений и сайтов на 68 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.
Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.
- Alconost
- программирование
- разработка ПО
- разработчик
- инженер
- качество кода
- создание программ
- разработка программного обеспечения