(Първо публикувано на Mar 27, 2021)
Спомних си нещо интересно, което ми казаха, докато карах магистратурата си в университета. 😅
Правихме групов софтуерен проект (като упражнение и подготовка за това да разработваме сериозен проект в работна среда) и трябваше всеки да си избере роля по проекта. Аз най-много се бях занимавал с програмиране (и не чак толкова много с например неща свързани с управляването на проекта), а затова естествено казах, че искам основната ми роля да е на developer и да се занимавам основно с писането на код.
Обаче ми отказаха! Тогава се изненадах от отказа, защото все пак ако нямаш програмисти, кой ще ти направи проекта, нали? Попитах защо не може, а отговорът беше интересен и всъщност го разбрах чак като мина известно време след това. Казаха ми “Очаква се, че по време на бакалавъра сте придобили умението да програмирате и да пишете код. За магистратурата се иска да покажете, че вече можете нещо повече от това.”
В началото не зацепих какво имат предвид, но сега мисля, че разбрах. Става дума, че сякаш като цяло у програмиста се цени повече способността му да мисли на “макро ниво”. Тоест най-вероятно няма да ти ръкопляскат за това, че си назубрил предлаганите методи в някоя библиотека или че custom имплементацията ти на някой алгоритъм е супер красива, но ще ТИ ръкопляскат за това, че си проектирал системата по начин, който я прави ефективна, бърза, защитена, лесна за поддръжка, стабилна и т.н. 😅
Защо? Защото първото обикновено е по-лесната част. По-лесно е просто да напишеш кода, когато някой вече ти е описал какви точно стъпки трябва да бъдат изпълнени. Трудното е да измислиш самите стъпки, защото има много фактори, които трябва да се вземат предвид предварително.
Най-просто казано: това, което изисква най-много мислене и има най-голямо положително влияние върху качествето на крайния продукт, се цени най-много.
Та затова в крайна сметка ролята ми в проекта се водеше “design manager”, а не просто “developer”. Реално пак си писах код и се занимавах с проблемите в него, но съществената отговорност, която поемах на хартия, беше това дизайнът на системата да е качествен (в случая се занимавах по-конкретно с дизайна на back-end).
Тоест никой не го интересуваше например как точно съм имплементирал някоя функционалност, а се интересуваха дали като цяло нещата са добре измислени и дали работи крайният продукт както трябва.
Способността да измисляш добри решения на тези “макро проблеми” мисля, че се цени повече, защото се развива по-трудно, а и защото има по-голямо значение за клиента (него не го интересува как точно си написал кода, а дали като цяло продуктът отговаря на нуждите му).
Самото програмиране (писане на класове, методи, избиране на подходящи библиотеки за реализиране на дадена функционалност и т.н.) може да се каже, че е лесната част, но да измислиш как цялата система да е удобна както за крайния потребител, така и за разработчиците, според мен е наистина сложна задача. Освен това ако допуснеш грешка в дизайна, това може да създаде сериозни проблеми по-нататък.
И понеже това умение е трудно за придобиване и същевременно наистина важно, естествено се цени високо (по-високо от това само да напишеш кода).
Не че съм някакъв експерт, но това ми направи впечатление и даже ми се струва, че разграничава посредствените софтуерни инженери от наистина добрите.
Това засега. 😎
Top comments (0)