Рабочий инструмент

в 17:25, , рубрики: Программирование, размышления вслух, философия, метки: , ,

Знаете в чем разница между программистом и инженером? Первый пишет код, а второй решает проблемы. У меня в должности написано Software Engineer, и я долгое время думал что это просто уловка, рекламный трюк. На самом деле, я думал, это просто должность кодера, обезьяны умеющей стучать по клавишам.

Да я читал книги типа «Как освоить Java за 21 день», я рисовал кнопочки в дизайнере VB6, я писал разнообразные пхпшные скрипты на заре своей профессиональной карьеры. Я трассировал бесчисленные команды ассемблера в самом классном дебаггере SoftIce, и даже написал статью на тему защиты от взлома полную жуткой чуши. Я взрослел.

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

И тут на меня снизошло озарение.

Я стал употреблять термины типа SOA, вебфермы, платформы, API. Я стал задумываться над качеством своей продукции и внедрил BDD в свою команду. Я стал мыслить стратегически, я перешел от вопроса как написать метод/класс, к вопросу как наладить управление между несколькими продуктами и группами людей. Я начал продавливать тему про переписывание части продукта в сервисы, я стал говорить фразу «eat your own dogfood».

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

Наконец-то до меня дошло — Software Engineer ака программный инженер. Инженер, от лат. ingenium — способность, изобретательность. Дело в способности и изобретательности, а не в инструменте. Рабочий инструмент будь то C, C#, VB6, Ruby, etc. это всего лишь инструмент. Хороший инструмент не заменит отсутствие способностей. И наоборот, отличный инженер справится и с плохим инструментом.

Как отличить хороший инструмент с моей точки?

1. Инструмент должен помогать решать проблемы, а не создавать их. Чем больше проблем он снимет с моих плеч, тем больше действительно важного я смогу сделать. Управляемый код, сборщик мусора — отлично! Мне не надо иметь возможность управлять каждым байтом в памяти. Зато мне нужны гарантии, что буфера не порушатся, что указатели не будут указывать на луну.

2. Инструмент должен быть простым, и в тоже время мощным. Он должен позволить мне оперировать на любом уровне абстракции. Сегодня мне надо разобраться в коде одного класса, а завтра придется отлаживать работу целого сервиса.

3. У инструмента должна быть поддержка. Мне надо иметь возможность посмотреть отличную справку по техническим вопросам с примерами. Но более того, мне надо иметь способ покопаться в бинарнике, если справка не помогает, или наблюдаемое поведение отличается от ожидаемого. IL, byte code — это прекрасно!

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

Конечно, идеала сочетающего все вышеупомянутые, взаимоисключающие параграфы не существует.

Но я вполне доволен тем, что использую сейчас.

Автор: rroyter

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js