Джейкоб был разочарован. Его клиент явно не понимал процесса и продолжал просить противоречивые вещи. Он намеревался создать запрошенный инструмент, качая головой на вопросы, которые ему задавал заказчик: «Если я получу два вместо четырех, это половина работы и половина цены, верно?», «Он должен быть очень легким, но выдерживать много пользы »,« можно мне получить это двойное лезвие? Это не должно стоить больших дополнительных затрат, правда? ». И, конечно же, когда он сказал клиенту, что это будет сделано на следующей неделе, клиент попытался договориться с ним о доставке на следующее утро. Закидывая угли в огонь, Иаков восхищался обсуждением. На нагрев и закалку металла требовалось время. Его нельзя было торопить, по крайней мере, если вы когда-нибудь хотели когда-нибудь использовать топор, который он создавал. Заказчики никогда не задумывались о времени настройки. Все они приходят в восторг от вида летящих искр и думают, что это настоящая работа. Но чтобы даже зайти так далеко, нужно было рассмотреть тысячу деталей: до какой температуры нагреть металл, точные места удара по металлу, чтобы он не деформировался, количество и качество металла, которые теперь выбирал Джейкоб. Ах, этот слиток будет в самый раз! Достаточно прочный, чтобы выдерживать годы использования, но достаточно легкий, чтобы здоровый мужчина мог работать весь день без усталости. Это был хрупкий баланс, но Джейкоб отремонтировал множество головок топора и узнал, насколько тонкими он может сделать лезвия, прежде чем согнет его.

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

В мире, который хочет съесть свой пирог и получить его, полезность программного обеспечения часто сводится к тому, насколько хорошо оно обеспечивает баланс между конкурирующими приоритетами. Функция, которая добавляет новые возможности, также может затруднить использование приложения. Ежедневно разработчик должен принимать решения на основе ограниченной информации, которая может иметь большое влияние на время разработки и конечную полезность продукта. Решение использовать одну структуру вместо другой может сделать один набор функций тривиальным, а другой - болезненным. Чаще всего существует несколько возможных решений, но нет ни одного «правильного» ответа. Каждое решение представляет собой несколько иной набор компромиссов. Сложность должна существовать; будем обрабатывать это в этом объекте или в этом?

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

Спасибо, что читаете блог Radial, найдите минутку, чтобы подписаться на нас здесь и в Twitter!