Част 2-ра от поредицата ‘Технологичен стартъп‘:

  1. Избор на Технологичен стек – Mean
  2. Web сървър с nodejs и express

Защо nodejs

След като сме валидирали стартъп идеята си и сме сигурни, че е крайно време да започнем да пишем код, може да се захванем с поставянето на основите на проекта. Помислите внимателно преди да започнете, за да сте сигурни, че основите, които ще поставите, всъщност ще ви свършат работа в краткосрочен (MVP) и дългосрочен (продукт) план. За Officernd избрахме nodejs и сме щастливи с избора си поради основно 5 причини:

  • Леснота за разработване;
  • Производителност и скалируемост;
  • Независимост от ОС и среди за разработка;
  • Преизползваемост на готови модули;
  • Лесно и безплатно деплойване.

Помислете също в дългосрочен план – ако се наложи да наемете хора – може ли да си намерите подходящи програмисти? Колко лесно ще ви е? Има ли голяма разлика в търсенето и предлагането на кадри? Какви са тенденциите в България и по света?

Да приемем, че от морето от технологии сте избрали nodejs.

Леснота за разработка и/или Производителност

За мен nodejs предоставя и двете – лесна среда за разработка (основно защото е JavaScript) и супер добра производителност (основно, защото е асинхронен, event-базиран модел на изпълнение) и скалируемост. Не мога да кажа, че nodejs е най-лесната платформа за разработка. Даже кода изглежда доста грозноват понякога (The Christmas tree). Но определено смятам, че е много лесна за разбиране и за създаване на определен тип приложения – API-базирани web/SPA приложения. А това е много важно за един cloud стартъп. Ако от самото начало започнем с добро API, имаме много по-добра основа за развиване на истински SaaS продукт.

nodejs-workshop-javascript-async-21-638

Интересното обаче е, че неотдавна, противопоставянето на тези ‘Леснотата за разработка’ и ‘Производителност’ раздели nodejs общността. Както знаете nodejs е open source платформа, чиято разработка се спонсорира от компанията Joyent, за която производителността е на първо място. Докато голяма част от обществото, което го разработва (и е в основата на създаването на nodejs) предпочита да се фокусира повече върху леснотата и чистотата на разработването на софтуер (Joyent – performance over usability and robustness). Поради тази причина, хората, които са повече ЗА леснота за разработка, направиха нова версия на nodejs (fork), която се казва io.js.

За всеки програмист е ясно, че и двете парадигми са важни. Но коя е по-важна и трябва ли всъщност да избираме между двете, не е ясно. Времето ще покаже. :)

Среда за разработка

Всеки програмист до известна степен е свикнал с една или друга среда и не всеки обича да я сменя. Помислете внимателно за вашия екип – кой на каква операционна система е, има ли любима среда? Има ли език за програмиране, в който е супер опитен? Например в Officernd сме 1 Windows, 2 Mac-a и 1 Linux. Което означава, че на нас задължително ни трябва език и среда, които са не просто независими от ОС, а са лесни за работа навсякъде.

NodeJS няма сериозни проблеми и може да се работи ‘почти’ еднакво добре и на 3-те. Ползваме основно 2 среди:

  • WebStorm – пълно IDE, което предоставя всичко необходимо за разработка, дори и много не-необходими неща, които понякога бавят работата. Поне предоставя няколко милиона опции да си ги спрете и конфигурирате. :)
  • Sublime + Node Inspector – за тези от вас, които предпочитат простотата на редактор, Sublime е добро и бързо решение. Безплатно. Единствено е необходимо да настроите Node, да заработи с Blink Debug tools, за да имате дебъгер.

Да започваме

Има няколко начина да започнете проекта си:

  • Yeoman Generator – това е конзолно приложение, което може да изгенерира огромна част от кода, който ви е нужен за начало. Например за MEAN стек, има един много подходящ генератор  – Angular Full-stack. С Yeoman горе-долу за 2 минути, може да имате up-and-running Node-Express-Angular приложение, което да включва authentication, deployment packaging, minification, task runner и куп други функционалности, които рано или късно ще ви трябват.
  • Mean.io – това е платформа, която би трябвало също да ни в сетъпва проект, но никога не съм я пробвал. Ако някой има мнение и желание, нека сподели опит.
  • От нулата – Officernd го започнахме от нулата (защото преди 3 месеца не знаех за съществуването на Yeoman). Това е малко по-сериозна задача, но си има своите плюсове. Може да изградите основите си постепенно и да добавяте нещата, които ви трябват, когато ви потрябват. При Yeoman, малко получаваш всичко на готово и то е толкова много, че може по-скоро да се откажеш. :)

Това, което мога да ви препоръчам е да започнете от нулата (tutorial), но да гледате много внимателно какво прави Yeoman (или Mean.io) и да взаимствате максимално концепциите от него.

nodejs

Модули и npm

Надявам се вече сте успели да пуснете nodejs приложение. Една от най-големите сили на nodejs е Node Package Manager (npm) и огромното общество около тях. Както се досещате, това е платформа за дистрибуция на модули, готови за преизползване и лесни за интегриране. Ето кои ползваме в Officernd и за какво:

  • Web Server – express и прилежащите му модули;
  • Web Templates – swig;
  • Authentication – passport – за локална, faceboook и google аутентикация;
  • Object Data Modeling – mongoose;
  • Паралелна обработка – async;
  • Функционален стил за обработване на данни – lodash;
  • API – swagger-node-express;
  • Изпращане на мейли – nodemailer;
  • Task Runner – grunt – за задачи свързани с build и deploy;

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

За деплойването ще си говорим в други теми. Само ще спомена, че когато имате ‘нещо’ готово, е въпрос на 1 ред в конзолата (безплатно) да го качите на Heroku, Amazon, Azure или някоя cloud инфраструктура по избор.

Честита Коледа и Щастлива Нова Година изпълнена с по-малко код и повече приятни мигове. :)