Pull to refresh

Почему Go превосходит посредственность

Reading time 3 min
Views 29K
Original author: Didip Kerabat
В апреле 2001 Пол Грэм написал статью «Превосходя посредственность» («Beating the averages» — ориг).

Этот пост о том, почему Go, следуя статье, и есть то самое секретное оружие, которое должно быть у каждого стартапа.

Секретное оружие


Программное обеспечение — очень конкурентный бизнес, с хорошей почвой для появления монополий. Компания, которая пишет свой софт быстрее и лучше, при прочих равных, оставляет своих конкурентов вне бизнеса. В стартапе, если вы поставите на неверную технологию, ваши конкуренты сотрут вас с лица земли.

Процитированный параграф описывает то, насколько важна большая скорость разработки для стартапа. И это логично, ведь стартапы всегда ограничены во времени и деньгах.
И достижение высокой продуктивности это именно то, где Go блистает.

Go это не язык, полный фич. В нём нет Генериков (хотя вы можете использовать кодогенерацию для создания кастомных структур данных), его подход к наследованию сильно разнится с тем, к чему привыкло большинство, в нем есть лишь частичная оптимизация хвостовой рекурсии и т.д. Но это именно то, что делает Go великолепным! Компактная спецификация языка и отличный инструментарий, позволяют вам решать задачи с очень большой скоростью, и код, который получается в итоге обычно:

1. Прост в написании


  • Стандартная библиотека Go очень богата, легко читается, очень хорошего качества и скорости. Вы удивитесь, как много вы можете сделать, не используя сторонние библиотеки. Вы, к примеру, знали, что database/sql даёт вам пулинг соединений из коробки?
  • go get не идеален, но он позволяет вам подключать сторонние библиотеки без какой-либо настройки и это невероятно важно во время фазы разработки.
  • Система типов — это, как по мне, то что нужно. Она убирает целый класс проблем, минимально церемонясь.


2. Прост в понимании


Благодаря go fmt, большая часть Go-кода выглядит одинаково. Это очень важный аспект, по мере того, как ваш отдел разработчиков растёт, новички могут подхватить проект очень быстро.

Но что, если новички не знают Go? Не проблема. Благодаря минимальной спецификации языка, хороший программист может выучить Go в течении 1-3 выходных, при этом освоив все его его особенности.

3. Прост для деплоя


В наши дни, большинство стартапов используют Rails или Django для быстрой разработки прототипа. Выглядит разумно, но как только вам нужно деплоить код в продакшен, что начинается? Вот что обычно люди делают:
  • Поднимают от 5 до 10 medium-инстасов на EC2
  • Пишут сложный pipeline для деплоя в cap или fab.
  • Устанавливают Nginx/HAProxy перед приложением, потому что Unicorn или Gunicorn не готов принимать прямой траффик из интернета.
  • Как насчет вебсокетов? О, это будет отдельное приложение на Node, с таким же сложным pipeline для деплоя.
  • Как насчет фоновых задач? Та же проблема, отдельные приложения со своим deploy pipeline.

Что, если ваш стартап может избавиться от всего этого, и увеличить скорость еще сильнее:
  • Высокая производительность и эффективное использование памяти приложения оборачивается экономией денег, что в свою очередь означает большую маневренность на старте.
  • Благодаря тому, что код компилируется в один бинарник, вам вряд ли придеется думать об отличиях между средой разработки и продакшена.
  • Один бинарник делает процедуру деплоя в разы проще. В самом простом случае вам нужно три команды — rsync, symlink и run. Если вы версионируете бинарники, то откат к предыдущей версии сводится банально к подмене симлинков.
  • Один бинарник также делает настройку вашей Vagrant-среды гораздо проще и это позволяет делать вам больше кросс-OS тестирования.
  • Вам больше не нужно устанавливать Nginx/HAProxy. Встроенный net/http сервер работает с большими нагрузками просто на ура.
  • Вебсокеты? Благодаря дизайну Go, вы можете спокойно использовать http-хендлеры и websocket-хендлеры в одном приложении. Просто подключите github.com/gorilla/websocket.
  • Фоновые задачи? Для большинства задач — просто запустите горутину, и работайте с очередью внутри программы с помощью каналов.


4. Готов к продакшену


В большинстве случаев, производительность Go аналогична Java, и он потребляет в разы меньше памяти.

The blub paradox (отсылка к ориг. статье)


Вся эта часть, про Lisp vs Blubs, натолкнула меня на мысли о Go-сообществе.

На нехватку вот тех гипотетических Blub программистов, смотрящих свысока на Go, потому что там нет X фич, жаловаться не приходится.

Должно ли Go-сообщество волноваться из-за них? Не думаю.

Go очень быстро завоёвывает сообщество стартапов. Вот далеко не полный, и постоянно растущий список компаний, использующих Go: Bit.ly, Baidu, CloudFlare, CoreOS, DigitalOcean, Disqus, Docker, Dropbox, GitHub, Heroku, New York Times, Parse, Square, Twitch, Tumblr, Twitter, и т.д.

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

Возвращаясь к оригинальной мысли


Учитывая все аргументы выше, основатели стартапов, вы все должны рассмотреть Go очень серьезно.

Тут слишком много плюсов и ноль минусов. Зачем ждать? Звоните 1-800-SWITCH-GO и получите все достоинства уже сейчас.
Tags:
Hubs:
+24
Comments 183
Comments Comments 183

Articles