02.12.2022

Сергій Немчинський: Мова програмування Golang — що на ній пишуть, чим вона хороша, зарплати розробників

Сергій Немчинський
18 хвилин перегляду
<strong>Сергій Немчинський: Мова програмування Golang — що на ній пишуть, чим вона хороша, зарплати розробників</strong>

Мова Go була випущена в 2012 році компанією Google.

 

Щодо мого ставлення до Google. З одного боку, вони великі молодці, вони створили найкращу в історії пошукову систему та багато іншого класного софту. Але Google має одну неприємну особливість — вони люблять закривати свої розробки з незрозумілих нікому причин.

 

Згадайте Google Web Toolkit (GWT). Це була дуже болюча історія для більшості ентерпрайз розробників, адже GWT використовувався у багатьох ентерпрайз проектах. Але Google просто на рівному місці, без будь-яких передумов, просто взяли і закрили його. Без підтримки, без передачі у Open Source. А багато проектів, які тоді створювалися на GWT, так і живуть, бо ж не переписувати весь проект. Тому до всього, що виробляє Google, я відношусь із легким побоюванням. Потрібно завжди пам’ятати, що Google може це закрити. Однак ситуація з мовою Go трохи простіша. Спочатку Go була розроблений гуглом для власних потреб, але незабаром її було передано в Open Source співтовариство.

 

Концепція мови Go

 

У чому суть мови Go і чим вона відрізняється від більшості сучасних мов? Вона сфокусована в тій ніші, де фактично немає конкурентів. Гуглу потрібна була дуже компактна, компільована мова, яка дуже швидко працювала б і була багатопоточною. Фактично на сьогоднішній момент мов із такими самими характеристиками дуже мало. Хіба що C та Rust.

 

При цьому не можна сказати, що С++ маленька мова, у ній море можливостей і вивчення займає дуже багато часу. У мови C є свої незручності: вона дуже стара, у ній немає жодної безпеки. Rust сфокусована на роботі з низьким рівнем. Також обидві ці мови мають одну неприємну властивість з погляду швидкості розробки — вони не мають garbage collection, тобто, збирача сміття. Тому розробники, які пишуть на C або Rust, змушені стежити за всіма об’єктами, які створюють, та прибирати все сміття вручну.

 

Google потребував мови, якою можна швидко розробляти. А ви не можете швидко розробляти мовою без garbage collection. У результаті Go вийшла маленькою, з простим синтаксисом, багатопотоковою і компільованою. Вона ідеально підходить для короткого та швидкого виконання коду.

 

Спочатку Google використовував Go для своїх внутрішніх цілей, але коли компанія виклала мову на загальний розгляд, люди почали замислюватися, для чого її можна застосовувати.

 

Де використовується Go

 

Go використовується як «прискорювач» для повільніших мов: PHP, Python, Ruby. Її використовують у тих місцях, де потрібно зробити дуже швидкий шматок коду, але писати його на С++ довго, дорого та важко. Наприклад, у вас весь проект розроблений на PHP, але вам потрібно прискорити якийсь шматок. Цей шматочок зручно зробити на Go. Це досить поширене рішення для компаній, які пишуть серйозний софт переліченими вище мовами. Тому Go часто використовується саме як латка для критично важливої швидкісної інфраструктури.

 

Але більш популярне використання Go – як основна мова для програмування мікросервісної архітектури. Тому що в концепцію мікросервісів мова Go лягає ідеально. І тут Go є прямим конкурентом Node.js. Node.js також ідеально підходить за рахунок швидкої обробки багатопотокових звернень.

 

Ще один варіант використання мови — для того, щоб зробити щось, що швидко працює. Як кажуть, якщо вам потрібно щось швидко написане, але не важливо, з якою швидкістю це працює — ви вибираєте Python. Якщо вам потрібна висока швидкість роботи коду, при цьому щоб писалося просто — то це Go. Тому на Go часто пишуть телеграм-боти та різні системні утиліти, які мають бути швидкі та багатопотокові.

 

На сьогоднішній момент в Україні попит на розробників Go досить суттєво перевищує пропозиції на ринку. Причому оскільки мова сама по собі досить нова, ви не можете зустріти синьйорного розробника Go з 15 роками стажу, багато хто стає синьйорами Go через 2-3 роки роботи на цій мові.

 

Особливості мови

 

Якщо вам потрібно зробити простий з точки зору технологій прототип, який не має вимог до швидкості, то відмінно підійде Python або PHP. Швидко написали, показали та працюємо далі. Go підходить, якщо до вашого проекту пред’являються нефункціональні вимоги: він повинен працювати швидко, з величезною кількістю потоків тощо. Тому дуже багато стартапів починаються або на Node.js, або на Go. Писати великі системи на ній не зручно, а ось мікросервіс можна. Тому можна швидко почати розробляти time to market на Go, а потім масштабувати систему на мікросервісах досить великих розмірів. На ринку технологічних стартапів, де потрібна висока продуктивність, Go та Node.js впевнено стоять попереду.

 

Якщо ви програміст, наприклад, на Java або C#, і ви втомилися від величезних ентерпрайз систем, вам хочеться стартапів і активнішої розробки — ви можете подивитися у бік Go. Але тут треба розуміти, що стартап — річ досить болісна для work-life balance. З іншого боку, це цікаво. Ви можете взяти участь у якомусь крутому стартапі, який вистрілить і стане дуже популярним, а ви зможете похвалитися, що працювали над ним.

 

Поріг входу

 

Go має досить своєрідний поріг входу. З одного боку, мова досить проста. Як Java була зроблена з С++ методом урізання всіх можливостей, які тільки можна урізати, так само і Go був зроблений із сучасних мов шляхом ще більшого урізання. Фактично, там немає нормального ООП, немає наслідування, немає навантаження функцій, немає перевизначення функцій. Є тільки імплементація інтерфейсів і є ще загадкова штука, так звана качина типізація. Якщо щось літає як качка, крякає як качка і плаває як качка, це качка. Таким чином, можна в неявному вигляді імплементувати інтерфейс і ваш клас буде вважатися імплементацією інтерфейсу навіть якщо ви не оголосили це в явному вигляді. Тобто якщо ви імплементували всі методи, то ви імплементували інтерфейс.

 

У Go на рівні самої мови є так звана Go-рутина — та сама штуковина, яка підтримує багатопоточне виконання. Потоки виконання займають чималий шматок пам’яті. Стандартно потік займає приблизно 1 Мб пам’яті. Відповідно, ви не можете підняти більше потоків, ніж пам’ять на сервері. G-рутини використовують значно менше пам’яті і дуже хитро виконуються. В результаті писати багатопотокові програми на Go набагато простіше ніж на більшості інших мов.

 

Повернемося до входу. Поріг входу досить низький, тому що мова проста, максимально урізані можливості, простий С-подібний синтаксис. Але оскільки багатопоточність вбудована прямо в ядро мови, не розуміючи багато поточності, писати на Go буде дуже складно. А багатопоточність — справді складна тема. Тому, якщо ви переходите з іншої мови, поріг входу практично відсутній, потрібно вивчити тільки синтаксис. Але якщо ви ніколи не програмували, то вивчити Go буде в рази складніше, ніж більшість інших мов типу Python або PHP.

 

Зарплати на Go

 

Оскільки на Go часто пишуться стартапи, а стартапи взагалі не надійна штука, що повністю чхає на ваш особистий час, все це компенсується досить високими зарплатами. Тож у цьому напрямі можна добре заробити.

 

Майбутнє Go

 

Go зайняла досить стійкі позиції в ніші розробки мікросервісних проектів на рівні з Node.js. Зараз дуже багато проектів, які стартують у цій архітектурі, тож для розробників Go завжди є робота.

 

Що вибрати — Node.js або Go? Якщо ви були програмістом на мові строгої типізації, то без питань вибирайте Go, тому що вона також із жорсткою типізацією. Якщо ж ви були front-end розробником або нормально ставитеся до Java Script, то вам, ймовірно, краще підійде Node.js. А за можливостями Node.js та Go досить близькі. При цьому попит на Gо розробників досить високий.

 

Завжди ваш Сергій Немчинський.