Отсутствует часть описания вакансии разработчика программного обеспечения?

Хороший инженер-программист умеет творчески решать проблемы

Во всем мире насчитывается около 18,2 миллиона разработчиков программного обеспечения, и ожидается, что к 2019 году это число вырастет до 26,4 миллиона. Найти хорошего инженера из этого пула непросто, особенно когда у нас нет надлежащих метрики. На собеседованиях мы в конечном итоге задаем вопросы о пуле потоков, алгоритмах, головоломках и дизайне системы, и редко когда два собеседования дают одинаковый результат. Итак, что отсутствует в описании должности инженера-программиста?

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

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

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

Итак, первое неоспоримое качество - это совместное решение проблем клиентов. Это не означает, что вы просто доставляете то, о чем просят. Примером может служить следующий: заказчик может предположить, что программное обеспечение, которое работает для 100 000 пользователей, будет без проблем работать для 10 миллионов человек. Я считаю, что понять даже 50 процентов того, чего хочет заказчик, не так-то просто. Сотрудничество - это скорее ставить под сомнение и устранять предположения и хорошо понимать проблему. В конце концов, это помогает клиентам с творческими решениями.

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

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

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

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

Сложнее всего сохранять простоту, особенно с течением времени.

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

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

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

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

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