TJ Holowaychuk: Прощай Node.js

       
Примітка від перекладача:
 
Я вирішив перевести цю статтю в основному через особистості автора. TJ вклав дуже багато зусиль у розвиток Node.js та його інфраструктури, він автор таких проектів як express , jade , mocha , stylus , автор 550 репозиторіїв на npm . Існують також теорії, що за цим ім'ям ховається група людей .
 
Як би то не було,
JavaScript
і
Go
спільноти в найближчі час очікують зміни.
 
 Залишаючи, країну Node.js
Я бився з
Node.js
досить довго, що б перестати отримувати від цього задоволення, так що, принаймні поки, це моє офіційне прощання! І, що ще важливіше, я шукаю людей, які зможуть підтримувати мої проекти!
 
 
Node
відмінно справляється з деякими речами, але, на жаль, це не самий підходящий інструмент для того, що мені зараз цікаво. Я все ще планую використовувати його для сайтів, але якщо ви хотіли б зайнятися підтримкою одного з моїх проектів, дайте мені знати. Просто залиште коментар з вашим ім'ям на Github, посиланням на npm і назва проекту. Як зазвичай я прошу не привносити великих змін в існуючі API: створити новий проект буде простіше.
 
Я також продовжу підтримувати Koa .
 
 
 Святий Грааль
Мені завжди подобався С, але кожен, хто працював з C знає, що хоч це і може бути приємним, велика можливість помилок. Зараз досить складно обгрунтувати вибір цієї мови в якості інструменту на кожен день, потім що швидко працювати з ним не
вийде. Я завжди захоплювався простотою, але в даному випадку складно виїхати далеко без величезної кількості шаблонного коду.
 
Чим більше часу я присвячую роботі з розподіленими системами, тим більше мене засмучує напрямок, у якому рухається
Node
, що віддає перевагу продуктивність зручності використання і надійності. Минулого тижня я переписав досить велику розподілену систему на
Go
. Вона надійніше і швидше, її легше підтримувати і покриття тестів у неї більше, тому що простіше і приємніше працювати з синхронним кодом.
 
Я не кажу, що
Go
— «Святий Грааль», він не ідеальний, але для мене, серед існуючих зараз мов,
Go
— відмінний вибір. З часом, коли мови наступного покоління, такі як Rust і Julia знайдуть своє застосування і подорослішають, я впевнений, що кількість відмінних рішень збільшиться.
 
Особисто мене
Go
найбільше вразив швидкістю розвитку мови. Дуже вражає побачити, як розробники прагнуть до 2.0 і, як я чув, не бояться поламати зворотну сумісність, що відмінно.
 
ПОПРАВКА: Я мабуть неправильно прочитав розсилку, жодних критичних змін найближчим часом не планується.
 
Було б круто, якби це було так, я вірю, що відмова від зворотної сумісності допомагає мові розвиватися, хоча я і не софтверна корпорація підтримуюча гігантські системи
 
 Чому Go?
 
Node
все ще відмінний інструмент і якщо вам все подобається, то нету приводу переживати. Але якщо у вас є хоч якісь сумніви, не полінуйтеся озирнутися і подивитися, що ще є навколо — я підсів на
Go
в перші ж кілька годин використання його у виробництві.
 
Ще раз, я не стверджую, що
Go
— найкращий мова в світі, і вам обов'язково потрібно розпочати його використовувати, але він дуже зрілий і надійний для свого віку (йому приблизно стільки ж, скільки і
Node.js
), рефакторінг з типами простий і приємний, інструменти, які
Go
надає для профілювання і відладки працюють відмінно, а в співтоваристві є усталені уявлення про документації, форматуванні, вимірюванні швидкості і дизайні API
 
У момент першого знайомства з
Go
, стандартна бібліотека здалася мені просто жахливою, в основному через те, що я звик до ультра-модульності в
Node
, і бачив, як гниє стандартна бібліотека в Ruby. Коли я почав більше працювати з мовою, я зрозумів, що велика частина stdlib
Go
відіграє важливу роль в розробці програмного забезпечення: компресія, JSON, буферізірованний введення / висновок, операції над рядками та інше. Велика частина цих API добре продумані і потужні. Можна писати цілі програми, в основному використовуючи лише стандартну бібліотеку.
 
 Сторонні бібліотеки Go
Багато
Go
бібліотеки виглядають і відчуваються однаково, велика частина стороннього коду, з яким я до цього моменту працював досить хорошої якості, що не часто зустрічається у разі
Node
, тому що
JavaScript
приваблює людей з рівнями знань і умінь.
 
Не існує єдиного репозиторія для бібліотек
Go
, тому часто можна зустріти 5 або 6 різних пакетів з одним і тим же ім'ям, що може іноді викликати плутанину, але у цього є і корисна сторона: потрібно уважно перевіряти кожен, щоб вибрати найкраще рішення. У
Node
є загальноприйняті модулі, на кшталт "redis", "mongodb-native", або "zeromq", так що можна припустити, що це найкращий варіант і зупинити пошуки.
 
 Go або Node?
Якщо ви багато працюєте над розподіленими проектами, то примітиви для параллелизации в
Go
здадуться вам виразними і корисними. Ми могли б зробити схожі речі в
Node
за допомогою генераторів, але, по моєму, генератори дозволять нам пройти лише половину шляху. Якщо у нас не буде окремою обробки та звітів для помилок стеків, ми отримаєш вельми середні результати. Я також не хочу чекати три роки, поки співтовариство щось народить, коли існують готові рішення, які відмінно працюють
 
Обробка помилок, на мій погляд, реалізована в
Go
набагато краще.
Node
дозволяє нам прийняти рішення для кожної окремої взятої помилки, але є декілька речей, де у
Node
все погано:
 
     
  • У вас можуть бути дубльовані callback'і
  •  
  • Виклик callback'а може загубитися по дорозі
  •  
  • У вас можуть бути помилки поза діапазону
  •  
  • У обробник emitter можуть прийти кілька подій типу «error»
  •  
  • Якщо ми не зловити помилку, то все полетить до біса
  •  
  • Часто незрозуміло, як саме обробляються помилки
  •  
  • Оброблювачі помилок занадто багатослівні
  •  
  • Callback'і — отстой
  •  
У
Go
якщо мій код виконаний, він виконаний, не можна ще раз виконати оператор. У
Node
це не так. Вам може здатися, що код закінчив виконання, рівно до того моменту, поки бібліотека бува не запустить callback кілька разів, або неправильно очистить обробники, що викличе повторивши виконання коду. З цим непросто розібратися, особливо коли код вже в продакшені, та й навіщо? Інші мови не змусять вас так страждати
 
 Node в майбутньому
Я ще сподіваюся, що у
Node
все буде в порядку, безліч людей вклали в нього свою працю і у нього є потенціал. Я вважаю, що Joyent і команда повинні з фокусуватися на зручності використання: продуктивність нічого не означає, якщо ваш додаток складно налагоджувати, рефактору і розробляти.
 
Наявність помилок на кшталт "Error: getaddrinfo EADDRINFO", після 4-5 років, показує розстановку пріоритетів. Зрозуміло, що можна пропустити такі дрібниці, якщо ви концентруєте свої зусилля на розробки ядра системи, але користувачі раз за разом нагадують про це а результатів все ще не видно. Ми зазвичай отримуємо відповіді від людей з «еліти», що заявляють, і зараз все ідеально, але, насправді, все інакше.
 
Потоки (Streams) зламані, працювати з callback'амі незручно, повідомлення про помилки розпливчасті і незрозумілі, інструменти не викликають захоплення, угоди спільноти начебто є, але їм ще далеко до того, що є в Go. Враховуючи все вищеперелічене, існує набір завдань, для яких я продовжу використовувати
Node
: сайти, може який-небудь прототип або API. Якщо
Node
зможе полагодити свої основні проблеми, тоді у нього є непогані шанси залишатися корисним, однак аргумент, про перевагу продуктивності зручності використання, працює не дуже добре, враховуючи, що існують рішення, які швидше і зручніше.
 
Я не намагаюся зачепити когось особисто, безліч дійсно талановитих людей працюють з і над
Node
, але більше це інтересу для мене не представляє. Я провів відмінний час в цьому співтоваристві і зустрів досить багато кльових людей.
 
Мораль цієї історії така: чи не живіть в міхурі, озирніться і подивіться, що ще є навколо, можливо ви знову полюбите програмування. Навколо є безліч відмінних рішень і моєю помилкою було те, що я занадто довго чекав, щоб піти і спробувати їх.
 
 
Примітка від перекладача:
 
Зовсім незадовго до появи перекладеної статті, була опублікована замітка від Will Yager з протилежною думкою: Чому Go поганий (eng.) , було б здорово, якби хтось знайомий з Go, взявся б за переклад, щоб доповнити картину.
 
  
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.