Филип Янков е основател на академията за обучаване на софтуерни инженери – x8academy. През последните 10 години е заемал различни роли в технологичните екипи на различни по големина компании – от големи корпорации до малки стартъпи, чрез което натрупва опит в различни сфери. Печелил е награда на НАСА за иновация. Автор е и на патент за оптимизация на запис на транзакционна информация във файлова система. На събитието на 28-ми юни „Java Memory Model – Защо „Model” и защо “Java”?“, той ще ни разкаже какво е Memory Model, какво е общото между Memory Model и Multithreading, какви различни memory semantics има в Java Memory Model-ът и как работят и други. Сега той разказва как се справя със сложните технологични предизвикателства и какво го мотивира в работата му.

Как започна да се занимаваш с Java?

Първият ми досег с Java беше в университета – началните програмистки курсове бяха на езика Java. След края на първи курс реших, че трябва да започна и работа, за да мога да прилагам знанията, които получавам в университета, като това да ми гарантира, че научавам материала от университета добре. В работата надградих и утвърдих знанията си в програмирането с езика Java.

Какво те мотивира в работата ти?

Един от най-силните мотиватори, за мен, е да виждам как това, което правя помага/подобрява ежедневието на хората/бизнесите/света, премахва проблеми, позволява ни да правим нови неща, които не сме можели преди. На втори (но също толкова важен) план са колегите, с които работя, защото ежедневието ми минава с тях, учим се, помагаме си и това оказва голямо влияние върху крайният резултат. Дори и да сме се провалили с даден проект, нещото което остава от него, освен опита, е това как сме работили с колегите си, дали сме научили нещо взаимно, дали сме се забавлявали или сме се карали.



 

Събитие на фокус:

Multithreading with Swift 3.0

 


 

Как се справяш с техническите предизвикателства в работата ти? Кое е най трудното техническо предизвикателство, с което си се справял?

Моят подход към работата и най-вече към сериозните предизвикателства винаги е бил фокусиран върху няколко неща: разбиване на проблемите на по-малки части, задълбаване в детайлите и постоянство. Човешкият мозък е направен така, че дадеш ли му достатъчно конкретен, изолиран проблем и достатъчно време, то решението ще дойде. Затова начинът ми за справяне с големите проблеми е чрез разбиване на по-малки такива, за да си позволя да имам фокуса да разсъждавам върху доста по-конкретен проблем.

При сериозните предизвикателства има много неща, които трябва да бъдат разбрани, за да бъде идентифициран проблемът, както и да се разсъждава за правилно решение. Затова на мен винаги ми помага да се задълбая дълбоко в детайлите, за да получа по-голям контекст и да мога да дам най-адекватното решение.

Единствената уловка е да се внимава в какво точно се задълбава и дали точно това ще помогне в решаването на генералния проблем. Умението да оценя това и да продължавам да дълбая или да се прехвърля на следващото нещо идва единствено с опита. Този опит от предходните пъти, когато съм се задълбавал в различни проблеми и съм научавал много детайли.

Последното нещо, което ми помага, е да не се отказвам. За мен всяко техническо предизвикателство може да бъде преборено с правилния подход и достатъчно инвестирано време. Затова обаче е необходимо постоянство и упоритост, които да ме спрат да се откажа.

Накратко моята формула за успех при разрешаване на сложни технически проблеми е – разбиване на проблема на съставните им части задълбаване в детайлите (до където е необходимо) и постоянство в подхода към разрешаването на проблема.

Спомням си един конкретен проблем, който беше свързан с multithreading. Той се появяваше в unit тестовете ни само през нощта, само на една супер-машина и на никакъв друг хардуер. Каквито и логове да ползвахме, каквато и допълнителна информация да оставяхме, тя не беше достатъчна, за да разберем добре същината на проблема, въпреки че го борихме и с различни и много по-опитни колеги в рамките на месец.

Как го разреши / разрешихте?

Част от подхода за разрешаване на този проблем беше да поискам помощта на по-опитни хора, но това не помогна.

Второто нещо, което направих, беше да събера максимално много информация за контекста на проблема. Дори си спомням, как в една работна събота, успяхме с един колега да съберем ключова информация, която в последствие ни помогна да разрешим проблема.

Последното нещо, което изигра ключова роля, е че си бях принтирал кода на 2 листа, от които предполагах, че идва проблемът. Всеки ден докато пътувах, разсъждавах по проблема и по това как точно работи всичко написано. Знаех, че multithreading проблемите имат много малък шанс да се репродуцират, затова правилен подход е да се разсъждава по това, как точно работи дадена програма. И тъй като проблемът не беше елементарен и нямаше да бъде решен само с повърхностни разсъждения и знания, подходих така, че системно прекарвах време в разсъждения за това как точно работи програмата, защото очевидно нещо ми убягваше, за да се получава този проблем. За щастие, след месец прекарано време в събиране на информация и разсъждения, открих проблемът, както и неговото решение. Това дори резултира в патент на продукта, в който беше този проблем.

Какво би посъветвал всички, които сега започват да се занимават с Java?

Първият ми и основен съвет е да се пише много код, да се решават много и различни проблеми, за да имаме разбиране за това как точно работят програмите ни, какво е точното поведение на виртуалната машина, на хардуера и т.н. Трябва да си задаваме много пъти въпроса – „Защо това, което съм написал, работи така?“.

А конкретно за Java, съветите ми са – първо да се разберат добре ползите от това да се програмира на Java, както и недостатъците, да се разберат много детайли как тя работи в различни ситуации. По-конкретно трябва се разберат Multithreading-а, как и защо работи независимостта на кода на Java от операционната система и хардуера. Това са нещата, които биха ни позволили да бъдем по-добри програмисти, да пишем по-добри програми и по-добри решения на проблемите, които имаме в работата си.

И най-накрая, за Java 9, аз вярвам, че нещото, което трябва да бъде разбрано в дълбочина е пакетирането и модулярността в решенията, които правим. Това би позволило да пишем програми, които ще работят и на малки устройства, с много по-оскъден хардуер, както и да заемат много по-малко ресурси на големите супер компютри. Намалявайки ресурсите, които една програма ползва, намаляваме и ресурсите, които един компютър използва и ги освобождаваме за нещо друго, което да бъде свършено. Заемането на много ресурси от програмите написани на Java не е само проблем на самия език, а най-вече на програмистите, които го използват – Java 9 новостите ще дадат още повече средства на нас програмистите да пишем програми, които използват толкова ресурси, колкото са им необходими, без огромните разхищения, които ги има сега.

Стани част от потребителската група Java. Абонирай се и ще ти изпращаме информация за всичко, което предстои в групата.

Визия: Личен архив

Прочети още:
„Основната работа на всеки един лидер е да стане излишен“ – Веско Колев, Director Software Engineering, Progress
Умен дом с openHAB и Eclipse SmartHome. Интервю с Димитър Иванов

Share This