Когато сме изправени пред решение да изберем нашата рамка/език за разработка, виждам две основни съображения.

Първото е „скоростта на развитие“. Колко дружелюбен е този език за програмиране към разработчиците? Колко продуктивни можете да бъдете на този език?

Второто съображение е „бързината на изпълнение“. Колко бърз ще бъде този софтуер? Какво ще бъде времето за реакция? Ще се мащабира ли? Ще може ли да поддържа растеж?

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

Рубин - приятна бавност

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

Ruby беше страхотен, производителността беше превъзходна, тъй като този език беше създаден специално с цел да улесни живота на програмиста.

Но с течение на времето и моето приложение ставаше все по-сложно, скоростта се превърна в проблем и аз дори не използвах рамка Ruby on rails, използвах много по-малка (и надявам се много по-бърза) рамка, наречена Sinatra.

Действителен проблем, че Ruby процесът се забива, докато чака операцията да завърши. Например, трябва да изчакате отговор на базата данни, през това време не могат да се обработват други заявки.

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

Решението се нарича Event Machine, което ви позволява да сървърирате други заявки, докато чакате отговор от базата данни.

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

Golang - болезнена скорост

За да ускоря най-бавните части от моето приложение, пренаписах няколко критични заявки в golang. Golang е наистина бърз и никога не блокира, като говорим за това, бих препоръчал страхотно видео от Роб Пайк, човек, който е изобретил golang:

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

Проблемът е, че въпреки че golang е много бърз, писането на golang програми е кошмар и отнема много повече време от ruby. Бях разглезена от рубин, признавам си. Но добавянето на нови функции в golang, правенето на каквото и да е golang е много болезнено за мен. По-близо е до C и системното програмиране, отколкото до ruby.

Javascript — най-доброто от двата свята

И така, как реших нуждата си от бърза и приятна платформа за разработване на софтуер. Все още не съм го решил, но Javascript е изключително бърз и е по-лесен за писане от golang. Може да не е толкова приятно като рубин, но все пак това е мястото, където съм заседнал в момента. Javascript е моят избран език.

От страна на сървъра, javascript приложението се изпълнява под nodejs, а самият javascript се превръща в език с развиваща се спецификация. И разбира се, докато се развива, става по-приятно да се работи с него.

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

И когато вашият код стане дори малко сложен, ще се окажете в „ада за обратно извикване“.

Но както казах, javascript се разви и след това дойдоха Promises, които трябваше да решат проблема с „обратно извикване по дяволите“.

Въпреки това, javascript се разви още повече и след обещанията ключовите думи async/await се приземиха в javascript и стана още по-лесно да се пише неблокиращ код.

Заключение

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