Георги Атанасов има повече от 13 години опит като програмист. През последните 3 години заема позицията Director of Software Engineering в Progress и отговаря за развитието на Open Source проектът NativeScript.

На събитието „NativeScript for building cross-platform native mobile apps with JavaScript“ на 22 март, Георги ще ни разкаже какъв проблем решава NativeScript, как се различава от Hybrid и PhoneGap (Cordova) и какви са ключовите разлики с JavaScript-to-native решенията.

В следващите няколко абзаца той разказва какви „сблъсъци“ е срещнал, когато е започнал да се занимава с JavaScript и какви технологични предизвикателства е преодолял заедно с екипа си.

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

Много интересен за мен въпрос. Започнах опита и кариерата си като .NET WinForms developer, а след това навлязох и в XAML UI Stack-a – Windows Phone & Windows 8 и малко C++ & Direct 2D. Винаги съм смятал .NET + C# за много мощна комбинация, която прави живота на програмиста много по-лесен, като в същото време позволява и много advanced неща да бъдат постигнати с лекота.

Всичко това докато не пробвах JavaScript. Беше много предизвикателен период за мен в личен аспект. Преди около 3 години стартирахме NativeScript, което е технология, която позволява създаването на крос-платформени мобилни приложения с помощта на JavaScript.


 

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

Testing NodeJS Code

 

 


Идвайки от среда като .NET & C#, динамичността на JavaScript, липсата на типизация и възможността да се „застреляш“, буквално в краката, ако не знаеш какво правиш, ме караха да се питам: „Къде, по дяволите, съм тръгнал и защо си причинявам това?“. Но нямах много избор – технологично предизвикателството беше огромно и много мотивиращо, но без солидни познания по JavaScript нямаше как да си върша добре работата. Затова преглътнах нагласата си и съзнанието на C# разработчик и започнах да уча езика, да се запознавам в дълбочина със семантиката и тънките моменти. Дори още си спомням как постоянно се питах „Кой ми е this-a“.

Отделно, част от NativeScript е и вграждането на JavaScript виртуални машини като V8 на Google и WebKit’s JavaScriptCode. Наложи се паралелно да уча JavaScript като потребител и как са имплементирани самите JavaScript виртуални машини. Полека-лека се пречупих и започна да ми харесва. Както се шегуваме с колегите – „покръстих се“. И така до днес.

Вярвам, че JavaScript е един изключително приятен език, който, използван по правилен начин, позволява голяма гъвкавост, елегантност и леснота при постигане на сложни технически задачи.

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

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

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

Другото нещо, което ми носи радост и ме кара да се чувствам горд от продукта, екипа и себе си, са моментите, в които доволни клиенти правят комплименти за качествения продукт.

Кое е най-голямото технологично предизвикателство, с което си се сблъсквал?

Хмм, те едно и две ли са… Едно от най-трудните неща, с което аз и екипът сме се борили, е как да профилираме NativeScript Android приложение, в което има три технологични стека – а именно C++, JavaScript и Android.

Представете си какво се случва на системния стек – фрейм JavaScript, после фрейм C++, оттам викане на Android и обратно. За всеки фрейм си има отделен tool за профилиране. Но няма нещо, което да ги обедини и трите вида под една шапка и да покаже къде точно има потенциално поле за оптимизация. Това, в комбинация с две Garbage Collector имплементации (една за JavaScript и една за Java) прави задачата за профилиране изключително сложна и предизвикателна.

Как разрешихте проблема?

Ами не сме, поне не напълно. Пробвахме много варианти, включително и една сериозна „машинария“ от Intel, за която ни трябваше и специална дистрибуция на Android. В крайна сметка профилираме технологичните стекове поотделно, с ръчно инструментиран код и не малко евристика. Такова нещо, което да разбира и от трите вида фреймове на стека и да ги обединява в една обща картинка просто не съществува. Не е и тривиално да се напише. Може би е добра идея за нов бизнес…

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

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

Ако имаме добри и солидни познания по фундаментални неща като алгоритми, структури от данни, обектно-ориентирано програмиране и как работи една компютърна програма на ниско ниво, то ученето на нов език, е нищо повече от научаване как да работим с нов инструмент.

Бих ги посъветвал да отделят нужното време да разберат какво се случва зад този лек и приятен език на ниско ниво. Да се запознаят семантично с JavaScript, да разберат как „тиктака“ една виртуална JavaScript машина и какви потенциални проблеми биха възникнали при писане на неефективен код. Да си направят примерно приложение, което вгражда V8 и да имплементират нещо с публичните API-и.

Вярно е, че ще отнеме известно време, но след това самото придобиване на експертиза като JavaScript разработчици ще е много по-лесно, приятно и задълбочено. Като цяло този подход според мен е приложим за всеки един нов език, който учим и е в основата на придобиване на трайни и солидни знания, които не се заличават лесно при скачането в нов език или технология.

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

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

Прочети още:
„Основната работа на всеки един лидер е да стане излишен“ – Веско Колев, Director Software Engineering, Progress
Какво означава една система да е „reactive“? Основна концепция на Reactive programming

Share This