Развенчание мифов о разработке программного обеспечения.
Каждой отрасли — свои мифы. Как правило, они возникают, когда посторонним людям трудно понять специфику работы специалиста. Некоторые предрассудки забавны, а другие — откровенно опасны. Людям свойственны завышенные ожидания относительно процесса создания программ, поэтому стереотипное представление о программистах весьма распространено.
Предрассудки возникают даже внутри самой индустрии информационных технологий.
Развенчание мифов о разработке программного обеспечения...
Каждой отрасли — свои мифы. Как правило, они возникают, когда посторонним людям трудно понять специфику работы специалиста. Некоторые предрассудки забавны, а другие — откровенно опасны. Людям свойственны завышенные ожидания относительно процесса создания программ, поэтому стереотипное представление о программистах весьма распространено.
Предрассудки возникают даже внутри самой индустрии информационных технологий. Например, некоторые инженеры уверены, что “Scala — более продуктивный язык, чем Java”. На деле же истинность подобного утверждения зависит от проблемы, которую необходимо решить. Scala — одновременно и функциональный, и объектно-ориентированный язык программирования, из-за чего его можно посчитать более продуктивным и гибким языком, чем Java, но в Scala также встречаются слишком сложные функции, которые трудно изучить, а вот Java изучается быстрее. Кроме того, Java располагает богатой экосистемой из фреймворков и библиотек. Так что, на практике не всё так однозначно с продуктивностью разработки.
Рассмотрим шесть популярных мифов, связанных с разработкой программного обеспечения.
1. Это не творческая область!
Данный предрассудок я ненавижу больше всего. Многие люди думают, что программирование — это просто перевод решения проблемы на язык, понятный компьютеру. Но это не так!
Да, программирование — технический и логический процесс, но это еще и форма искусства: не-программисты просто не в состоянии отметить красоту элегантно написанного кода. Несмотря на то, что написать код может каждый, логично, что написание элегантного кода требует элегантности от самого программиста.
Чтобы придумать, как лучше всего структурировать базу данных для моделирования сложного реального сценария, обязательно задействовать творческий подход, а для того, чтобы объединить различные технологии, заставив их эффективно взаимодействовать друг с другом в большой и сложной системе, обязательно нужны инновации.
Второй аспект творчества в программировании связан с оптимизацией. Когда вы только учитесь писать код, ваше основное внимание сосредоточено на том, чтобы просто заставить код выполнить задачу, но уже в процессе накопления опыта и долгой практики вы начинаете находить хитрости и приемы, позволяющие заставить код работать быстрее и потреблять меньше ресурсов.
Например, посмотрите на наивную реализацию последовательности чисел Фибоначчи:
А теперь — посмотрите на произведение искусства:
2. У всех программистов слабые “гибкие навыки”!
Образ типичного разработчика — любящий сидеть в одиночестве перед компьютером отшельник, не отвлекаясь пишущий код. В реальности же работа программистом далеко не такая: разработчики сначала разбираются в проблеме, чтобы иметь возможность написать код и задокументировать его, а для этого просто необходимо сотрудничать с менеджерами проектов, дизайнерами и пользователями. Такой подход требует хороших коммуникативных навыков и навыков письма. Разработчики постоянно принимают крайне разнообразные решения в своем коде, активно адаптируя идеи из окружающего мира.
С появлением большого количества блог-платформ все больше и больше программистов пишут блоги о своем опыте, рассказывают о проблемах, которые они решили с помощью того или иного языка программирования, дают советы по карьере и пишут статьи на многие другие темы. Некоторые разработчики ведут каналы на YouTube, создавая много интересного и хорошего контента.
Пришло время стереть стереотип!
3. Все разработчики мечтают стать менеджерами!
Если человек — хороший программист, то далеко не факт, что он автоматически станет хорошим менеджером. Разработка и управление — два разных типа работы, каждый из которых требует определенных навыков и склада ума. Например, футболисты и футбольные тренеры: если человек — хороший футболист, то это ничего не говорит о его способности обучать других людей игре в футбол.
Менеджмент подразумевает работу с людьми, здесь необходим навык настраивать сотрудников на успех. Менеджер добивается результатов, давая людям возможность выполнять свою работу лучше, а не делая ее за них. С другой стороны, разработка программ — это скорее индивидуальный вклад в успех компании.
Конечно, ситуация быстро меняется, и многие современные компании предлагают различные направления развития как для карьеры разработчика, так и для карьеры менеджера. Если вы хотите оставаться индивидуальным разработчиком и дальше развиваться в том же направлении, вы можете стать техническим руководителем, ведущим инженером и так далее. А в случае выбора карьеры менеджера вы можете стать, например, инженерным менеджером или руководителем отдела инженерии.
4. Увеличение команды ускорит разработку!
Не зря считается, что лучше всего работают команды из 4–8 человек: несколько программистов, менеджер продукта, инженерный менеджер и, возможно, дизайнер. Все больше компаний следуют данной схеме, что приводит к простому выводу:
Далеко не факт, что увеличение числа сотрудников приведет к более быстрой и качественной разработке программного обеспечения.
Вышесказанное может показаться нелогичным, но разработка программного обеспечения не похожа на механический процесс (например, ввод данных). В случае с вводом данных вы можете добавить больше людей и произвести больше продукции, потому что затраты на привлечение нового сотрудника очень низкие, а индивидуальная работа обычно не зависит от других членов команды.
Но когда вы добавляете новых людей в команду разработки, то для начала вам просто необходимо ввести их в курс дела — это время команда потратит не на разработку продукта.
5. После релиза работа окончена!
Программа подобна живому организму. У неё есть свой жизненный цикл, она постоянно растет, быстро адаптируется и обязательно меняется. Кроме того, постоянно меняется и развивается окружающая реальность — от изменений тенденций рынка до появления новых технологий. Пользователи также могут потребовать новых функциональных возможностей и улучшений. Разработка — это постоянная борьба в условиях напряжённой конкуренции и вечно изменяющегося рынка. На примере недавно отметившей 45 лет своего существования компании Apple, мы видим, что можно сохранить интерес пользователей к своему продукту на протяжении десятилетий, постоянно адаптируясь к изменчивым условиям бизнеса и рынка.
Сразу после релиза продукта начинается новое увлекательное путешествие. Продукт все еще нужно поддерживать, и все ошибки, о которых сообщают конечные пользователи, должны быть устранены. Регулярно появляются какие-то новые нужды в оптимизации кода, обновления безопасности, изменения UX, исправления и другие вещи, происходящие в фоновом режиме.
6. Искусственный интеллект и машинное обучение — синонимы
Искусственный интеллект — это надмножество, а вот машинное обучение — его подмножество. Последнее в большей степени используется в областях с огромными массивами данных, охватывающими “Три V” больших данных: Объем, Скорость и Разнообразие (Volume, Velocity, Variety). Искусственный интеллект, с другой стороны, охватывает не только машинное обучение, но и другие отрасли, включая обработку естественного языка, глубокое обучение, компьютерное зрение, распознавание устной речи.
Тем не менее, как и искусственный интеллект, так и машинное обучение следуют одной общей цели: разработать такой интеллект, который превзойдёт человеческий.
Заключение
Если бы все вышеперечисленные мифы были правдой, то индустрия программного обеспечения не была бы такой развитой и зрелой. Надеюсь, статья поможет прояснить ошибочность предрассудков. Спасибо за чтение!.