[Перевод] Как действительно создавать софт, который действительно работает?

0c4b7705fdd0412abd1e2d2065e577be.jpg

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

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

Научитесь создавать продукт для людей


Создание продукта для людей – это такое же умение, как и многие другие, и ему можно научиться. Я не имею ввиду визуальный дизайн (хотя это тоже является частью процесса). Я говорю скорее о том, чтобы распознать проблему и понять, как обеспечить такое взаимодействие человека с компьютером, которое гарантирует пользователю успешное решение проблем без каких-либо затруднений, вместо того, чтобы просто создавать самое что ни на есть стандартное CRUD-приложение для работы с базами данных, которое включает несколько типичных UI-компонентов.

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

Освойте и используйте несколько языков


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

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

Не ведитесь на рекламу


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

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

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

Дизайн пользовательского интерфейса – это тяжелая работа, и использование MVC на стороне клиента не сотворит для вас магии.

Придерживайтесь одного стиля


Вместе с языками, фреймворками, библиотеками меняется и то, как вы используете язык – подобно сезонам. Один месяц вы вовсю использовали замыкания (closure), а в следующем узнаете, что это уже устарело.

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

Внедряйте минимально жизнеспособное решение


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

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

Избегайте сложностей


Я не использую такие препроцессоры CSS или HTML, как HAML или Sass (если вам удобно с ними работать, то используйте их на здоровье и повышайте свою продуктивность!) – мой стиль написания кода и «полировки» приложений требует много возни и переделок, и для меня намного проще возиться с кодом на низшем уровне (например, просто копируя и вставляя стили и работая со средствами разработки в браузере напрямую в файле CSS).

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

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

Кодирование > Конфигурация


Легко попасть впросак, чрезмерно полагаясь на код, написанный другими людьми. Должно быть (как вы полагаете), если многие используют этот код, то он должен быть качественным. Ведь правда? Между прочим, именно поэтому большинство людей пользуются Windows. Это то, что называется «разумной достаточностью» (satisficing), или стремление к чему-то, что кажется для достаточным для человека.

Ваш мозг всегда старается найти самое легкое решение. Он скажет вам забыть о каком-либо компоненте или библиотеки, и большинство программистов согласятся с этим. Зачем заново изобретать велосипед и страдать от известного синдрома «Придумано не нами» (Not Invented Here)?

Выбор уже готового компонента – это практически всегда не самый оптимальный путь для решения проблемы. Подобные инструменты решат вашу проблему на 80%. А затем внезапно обнаружится, что для этой простой, казалось бы, вещи, которая выглядела такой простой, нет возможности конфигурации. И теперь вам нужно заняться реорганизацией исходного кода и исправлением ошибок в выбранной библиотеке, и в конечном итоге сделать разветвление кода. После этого вам нужно понять, как правильно выполнить тесты, и здесь вдруг выясняется, что возможность проведения тестов просто-напросто отсутствует. А затем… И все в том же духе.

Не забывайте, что вы программист, а не конфигуратор


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

Вы будете удивлены тем, как мало времени вы потратили на само написание кода по сравнению с тем, сколько ушло на выбор и настройку библиотек.

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

Никогда не переставайте учиться


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

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

© Megamozg