1. Избор на Технологичен стек – част 1 от поредицата ‘Технологичен стартъп‘.

JavaScript базиран CAD софтуер

Вече няколко пъти съм писал за предимствата на JavaScript. Даже бяхме влезли във виртуален спор с колега дали JavaScript е език само за “клиента/фронт-енд-а” – да си свършиш малко работа от рода на ‘падащо меню’. Или може да бъде реален език за създаване на сериозен софтуер?

Надявам се да ви убедя, че JavaScript навсякъде е добър избор за технологичен стек за:

  • създаване на сериозен SaaS софтуер;
  • стартиращи компании, които искат бързо да създадат Minimum Vaible Product (MVP).

Под много сериозен, визирам сериозен софтуер, с много възможности.  Officernd е такъв софтуер. Все още далеч не сме имплементирали всичко, което искаме, но ако се замислите се опитваме да създадем опростен CAD (Computer Aided Design) софтуер в браузъра + още повече функционалност на сървъра.

Officernd Designer

От любов към JavaScript избрахме да ползваме MEAN (MongoDB, ExpressJS, AngularJS, NodeJS )- JavaScript навсякъде.

Базата – MongoDB

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

  • Скалира хоризонтално, което води до много по-добра производителност – по-лесно  и по-евтино;
  • Работиш с обекти (документи), което улеснява разработката – а тези обекти са, разбира се, JavaScript Object Notation обекти – JSON;
  • Динамична структура – пазиш документи, които мога да имат, а могат и да нямат структура;
  • Лесно конфигуриране, инсталиране или директно използване на Cloud базирана база данни.

Скоро ще имаме специален пост по темата, но ако ви е любопитно – тук има добро сравнение с релационните бази данни.

Ние в Officernd използваме Cloud базирано Mongo-as-a-Service решение, което е безплатно за стартиращи компании. Няма нужда да инсталираш каквото и да било и се сетъпва за минути. Стартираш безплатно, а когато потрябват повече данни или производителност, има подходящи планове за всеки.

Сървърът – NodeJS

За да стигнат данните от клиента до базата и обратно, най-често ти трябва междинен слой – Сървър. Той взима данни от базата, обработва ги евентуално, пакетира ги и да ги праща на клиента. В нашия случай имаме доста интересни логики на сървъра, които правят анализ на пространство и правила за по-добро офис планиране. Указва се, че само с JavaScript може много лесно да се постигне това с NodeJS. За разлика от PHP, Java, .NET и други сървърни технологии, NodeJS има много сериозни предимства:

  • Асинхронен модел на обработка, базиран на събития (event-driven), подобно на Ruby и Python, което това води до:
    • Невероятна производителност;
    • Възможност за лесно скалиране, при по-сериозно натоварване;
  • Пишеш JavaScript – дори и да не ти харесва езикът, самият факт, че използваш същия език на сървъра и на клиента е голям плюс. Голяма част от логиката, която има на сървъра, може да бъде преизползвана на клиента с помощта на общи модули;
  • Лесен и интуитивен програмен модел. Голяма част от ‘старите’ сървърни платформи са доста натоварени от абстракции над абстракциите, което много често освен, че натоварва производителността, натоварва и програмистите. В един момент не можеш да разбереш какво става, а нещата не са толкова сложни. :)
  • Възползваш се от хиляди вече написани модули (npm), които е въпрос на един ред да бъдат интегрирани и използвани – например цялата authentication система с Facebook, Google и други OAuth провайдъри я взимаш на готово. Всички те са с отворен код, което ти дава голяма свобода и спокойствие.
  • Един от тези модули е Epxress доста лесен и приятен http сървър, който ти дава много комуникационни решения на готово – лесно рутиране, създаване на APIs и т.н.

Ще си говорим повече за NodeJS в специална тема.

Функционалност на клиента – AngularJS

Дори и много да харесваш JavaScript, истината е, че езикът си има много проблеми и в много отношения е ужасен. Особено, когато са намесени различни браузъри. Нямаш много опит. Или просто си свикнал със статични, компилиращи се езици. Поради тази причина трудно мога да си представя да създаваш JavaScript базиран софтуер, без подходяща основа – платформа, който да скрие някои от неприятните моменти на браузърите и езика. Един такъв пример е jQuery, разбира се. Но jQuery не ти дава платформа за създаване на приложения. Не ти дава структура и добри практики, както и някои важни абстракции за по-добър application код.

Тук идва AngularJS – това е Application Framework, който цели да улесни създаването на Богати Интернет Приложения, а не просто да ти помогне да си селектираш един елемент и да му смениш цвета. Ето някой от плюсовете на Angular:

  • Абстракции за добро структуриране на кода – вариант на MVC шаблона;
  • Преизползваемост на компоненти – JavaScript услуги и HTML – темплейти;
  • Лесно разширяване (extensibility) на функционалност;
  • Модуларност – базирана на Dependency injection;
  • Тестваемост;
  • И куп други предимства.

Външен вид на клиента – Bootstrap

Едва ли в 21 век има някой, който започва front-end-а на уеб проект от нулата, но ако има, моля ви, недейте. :) Ако искате да стартирате бързо и да постигнете приличен резултат, когато става дума за външен вид – изберете си Front-end framework, като например Bootstrap. Предимствата са много, отново:

  • Леснота на работа – дори програмист може да се оправи със сложната работа на Front-end-а; В Officernd аз съм Front-end (то си личи де :) ).
  • Безброй много готова функционалност, която почти всеки сайт има нужда;
  • Справя се с всички браузъри;
  • Справя се страхотно на мобилни устройства – responsive;
  • В интернет има много примери и готови шаблони и темплейти, решения и т.н.

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

Respnsivness
Officernd Responsiveness, thanks to Bootstrap

Най-важно е времето!

Не забравяйте, че в стартъп света времето е най-важното нещо – колкото по-бързо успеем да създадем MVP (Minimum Viable Product) на идеята си, толкова по-добре (След като първо сме я валидирали!). Изборът на технологии е ключов, когато стартираме. MEAN -JavaScript навсякъде – е много добър вариант за стартиращи компании. Но имайте предвид също, че понякога, най-добрият избор е просто да стартираме с технологиите, които познаваме най-добре. :)

Това е част първа от поредицата ‘Технологичен стартъп‘.