Кілька мов програмування в межах одного проєкту — це ок чи ні?

Спільното, у зв’язку з нашим новим рейтингом мов програмування хочемо поцікавитися, а чи працювали ви на проєктах, де використовується декілька мов одночасно?

Наприклад, хтось пише на R, бо ця мова може мати пакет, якого не отримати в Python. А хтось пише винятково на SAS, бо добре його знає і взагалі так фахівцю зручніше. Звучить трохи заплутано, еге ж?

Чи мали схожий досвід? І чи комфортно вам було б у такій команді? Діліться у коментарях!

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
бо ця мова може мати
пакет

Отут проблема у автора.
Віра в чудодійні готові пакети і фреймворки

На одному з проектів у нас були мікросервіси на Java/Groovy, хоча всі інші були на Node.js. Ці Java-мікросервіси ми самі іноді правили, було не важко, я трошки шарю Java.

На іншому проекті були частини на C++, їми займалися окремі люди (сішники, звісно).

На третьому проекті де все було на node.js почали вводити сервіси на clojure, пару чуваків його добре знали, хто не знав — пройшли невеличкий курс, щоб хоч розуміти, що там написано. Чим це закінчилось — не знаю.

Мені комфортно, я двома руками за те, щоб щось нове попробувати. Але ж треба не зоопарк з 12 технологій розводити, а вибрати 1-2-3 які доречні.

Залежить від розміру. Кількох може і не вистачити ;)

Дивне питання. Якщо мікросервісний додаток — це найчастіше кілька мов (Java, Node, .NET, Go).
Але навіть монолітний додаток зараз може використовувати кілька мов, якщо ви працюєте на GraalVM.

Странный вопрос.
Норм расклад: фронт — JS, бек — Java. Много лет в подобных проектах

Ось у нас проект, одною із частин якого є своя операційна система (docs.foundries.io/...​e-manual/linux/linux.html) на базі Linux. Через це фактично в проекті використовуться десятки мов (бо зачасту треба фіксити пакети, які входять в ОС, а вони можуть бути будь-якою мовою :).

І нічого, якось виживаємо ;-)

Підозрюю, вважався тільки той код що написаний самими в рамках проекту, і більше ніж просто фікс...

Ну, фікс — це образно. Це тільки стосується звичайних регулярних пакетів базової ОС.

А якщо сторонні розробки — частина головного функціоналу ОС, то буває, що треба додати функціоналу приблизно стільки, скільки там вже є. А то й більше. Або переписати всее заново, або ще щось. Чудовий приклад — aktualizr-lite (github.com/...​oundriesio/aktualizr-lite), хоч і базується на іншій розробці, але розвивається і підтримується в рамках LmP, бо це — частина головного функціоналу.
Або u-boot, або OP-TEE — там теж вклад компанії в проекти доволі значний. Та десятки сторонніх проектів мають значні доповнення функціоналу та правки від нашої компанії, просто тому, що ось тут нам треба ось це :) А філософія компанії — якомога ширше перезастосування вже існуючих open-source проектів.
Ця стратегія себе неодноразово вже виправдала. І принесла очікуваний результат. Тільки я не можу про нього казати поки що :)

Це просто даність.

Типовий девайс типу смартфону, розумної колонки чи автомобільного інфотейнмент кластеру — це як мінімум бутлоадери, ядра ОС, системні бібліотеки на С, шматки початкої ініціалізації заліза на ассемблерах (так, у множинній формі), складні сервіси на С++11+, скрипти автозапуску на шеллі. Якщо є вебморда — може ще додатись php/python/go/java для бекенду і js для фронту, Android ще має велику долю системних сервісів на Java.
На етапі самої збірки буває автоматизація самої збірки прошивок, різноманітна кодогенерація, юніт-тести, тести з реальним залізом, профілювання, здобрення прошивок шифруванням і цифровими підписами, і тут буває практично вся можлива скриптуха у різних комбінаціях (cmd, bash, Python, Perl, Lua, Tcl, Groovy, Go — це тільки з чим доводилось стикатись особисто. І так, Go прямий конкурент Python для наприклад нутрощів білд-системи Android, тому іде у цьому списку).

Зазвичай, високорівневий ембеддед — це про код на С, але з готовністю читати і робити дрібні фікси у щось із переліченого зоопарку по ходу справи.

Цілком ок. Мова, як сказали нижче — лише інструмент. Інженеру байдуже яким інструментом користуватися. Вчора писав на Python, сьогодні на Java, а завтра буду писати на якій новій мовій, яка буде гарно вирішувати проблему. Не треба ідеалізувати мови програмування чи привʼязуватись до них, холіварити яка краща, бо це лише інструмент. Десь від підходить краще, а десь гірше і це цілком ОК ;)

Python, сьогодні на Java

це не так, насправді мова то така назва технічного стеку і відповідно досвід в бізнес домені, те що мої викладачі в універі називали «предметна галузь завдання автоматизації». Для чого використовується Java — застосунки для підтримки ведення бізнесу, банковский софт, складський облік, логістика, електронна комерція тощо те що зветься Enterprice англійською з купою спеціалізацій. Скажімо просто так взяти людину з банківського софту і перекинути на складський облік не вийде, хоча формально інструментарій і технічний стек один і той самий, і тому пере-кваліфікація чи швидше додакткова кваліфікація, напевно буде дуже швидка. Так само електронна комерція вона хоч на Node хоч на Java хоч на С# хоч на PHP одне і те саме, торгівля не міняється за суттю при конкуруючому тех стеку (хоча ніхто з керівників ризикувати контрактом і перевіряти не стане, а завжди хотітимуть експерта в конкретному технічному стеку навіть на посаду початківця щоб не мати проблем із технічними керівниками на стороні замовника в першу чергу, які відвідають за якість — а там вже давно два о одному і бізнес і тех стек одна людина зазвичай інакше проф не придатний, тому здебільшого то індус чи індуска).
Так само Python — мат статистика, маркетингові досліди, відповідно штучний інтелект тощо. Ще варіант — інфраструктура і системне програмування хмарної інфраструктури.
Так більшість бізнес доменів то там то сям перетинаються, але назва мови програмування і технічного стеку це насправді назва бізнес домену. Через те на те щоби отримати експертизу в певному домені йдуть роки.

За 15 років не пам’ятаю жодного проекту де було би меньше двох мов програмування, не враховуючи скажімо SQL і т.п.

За останній рік писав код в нашій компанії на Java, PHP, Python, Typescript, Groovy, HCL, Ruby, Go, Rego. Ну і YAML з Bash)) Ломка була лише після проєктів з чистою Java, потім звикаєш, лише іноді ностальгуєш, шо нема чогось такого зручного як в Java (більше про екосистему, ніж про саму мову))

Мова програмування — інструмент. Під кожну задачу (сервіс, компонент) беремо той інструмент (з пула інструментів, якими володіємо у команді) який найкраще підходить під задачу.

Наразі в мене основні мови програмування — Go, Python, Scala, Java, C++, Kotlin. На проекті крім них ще використовуються Js, Ruby.

А потім оте молоде обдарування, яке писало на С++, стрибає геть на +500 і решта команди шкребуть пики і думають що з цією спадщиною тепер робити.

Так це ж про будь-яку мову можна сказати. Шукаємо нового спеца з С++... Бо треба щоб технологія була знайома хоча-б кільком людям з проєкту.

Бо треба щоб технологія була знайома хоча-б кільком людям з проєкту.

Суттєвий фактор, особливо коли скажімо підряд треба виконати за 3 місяці, а люди 2 тижні будуть пізнавати дзен R сетапити проект, відволікати значно більше часу існуючих розробників на яких виситять свої задача і строки горять. Те що зветься законом Брукса.
З іншого боку знання самого тех стеку нічого і не гарантує, в деяких випадках то усього лише процентів 20% від необхідного ноледж трасферу. В ПЗ буває величезна кількість потаємних знань які я зву фольклором — тобто треба десь якийсь файл підкласти який чатом передається від один одного, там десь треба system variable зробити десь накатити дам бази даних від Василя бо те що там десь в документаці то і від початку не те, а для іншої команди і вже три роки тому безнадійно застаріло і т.д.
Так добрий спеціаліст із досвідом в тех стеці швидше з’ясує чого у нього не спрацьовує та піде шукати допомоги. Доволі часто це і стронг джуни такі. Шкоди в коді роблять не мірянно — але швидко десь там щось знаходять і показують менеджеру. Менеджери часто таких шустрих обожнюють, доки не впав прод :)

А куди дивися лід чи лінейний менеджер проекту як там воно в компанії називається ? Так чи інакше — раз ЗП нема і джун став мідлом в іншій конторі, брати книгу із С++ — а таких купа і дебагер в руки і щось робити.
Гірше не коли на незнайомій мові програмування чи тех стеку, гірше коли не розумієш бізнес реквайментів та архітектури системи — тобто не документовано які є частини системи і як вони взаємодіють оди з одним для вирішення певного бізнес процесу.
Якщо це є — інтеренет в руки і легко можна полагодити чи доробити будь що будь де при будь якій технології, якою би екзотичною вона не була (не те що С++ одна із най розповсюджених мов світу, з купою усього і міжнародним стандартом).
Сам по собі код без розуміння що та як робить ПЗ коштує не багато.

якщо хто з решти команди стрибає, то що це міняє?

Насправді вважання — що програмісти на одному і тому самому стеку, легко проміж собою замінні як той болт M12 це великий міф невідомо звідки взятий. Якщо у вас добре зроблений і документований проект на R, це все одно значно краще чім не документований гімнокод на Python за самописними LRU кешами велосипедами і т.д. Замінити програміста на великому або не типовому проекті насправді складно. Чомусь індустрія систематично ігнорує закон Брукса, моє розуміння це велика проблема неякісної бізнес освіти в ІТ менеджменті. Коли С1 англіська та знання — що таке : біт, пропоус та естімейт чи сертифікат з аджайл за 700 баксів (який безумовно + для тих хто володіє азами і розуміє для чого це та як використовувати на практиці), переважають над базовими знаннями з організації робот ІТ команд.
Не ІТ люди в ІТ особливо на стороні замовника дуже часто цим грішать, думаючи — що програмісти то землекопи. Тому напевно за останні років п’ять я бачів не багато вже таких на стороні замовника. У нас же звісно усе просто — вакансія треба кимось закрити, або вломити піздюля як клієнту щось не подобається, створити мітинг і т.д. Такий бізнес.

Swift, Objective-C, C++, JS (WebView)

Якщо HTML, CSS та JS то ok)

Нещодавно програмували мікроконтроллер на html, js та css і трішки perl

HTML та CSS — як потрапили до мов програмування ? Так їх опанувати напевно вартує по затратам саму не меньше ніж якусь мову програмування, а також JavaScript має бути — це вже мова.

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

Зазвичай такої логіки ніколи нема. Є інша — є бізнес потреба яка вирішина тим чи іншим фреймверком, який в свою чергу написаний на тій чи іншій мові програмування яка популярна в тому чи іншому бізнес домені. Часто зараз мішають Node з чим завгодно без жодної логіки — чому? Просто тому — що є вільні програмісти на Node стеці за сумісництвом Frontend React чи Angular, отака логіка — просто так або скоріше або дешевше або одночасно і перше і друге.
Проблеми з тим — що воно після цього стає не підтримуванним перекладають на потім, зазвичай бо гроші треба теж зараз — а не потім. На потім починаються різні Sever Side Redering, кешуванння, реплікації по 30 нод які всеодно не надають перформансу позаяк усе стейтфул і т.д. і т.п. Проектуванням софту частіше за усе не заморачуються, бо чомусь вважається що це дорого. Краще аджайл ітерації і т.п. Інколи це так і є коли архітектура +/- типова.

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

Если вообще без микросервисов то еще легче. Минус лишний геморрой в поддержке и тестировании

не ок, пишу все на асемблері від бекенду до фронтенду

уважуха.
не понимаю этого зоопарка.

сам пишу на пхп, и нормально с базами данных работает язык, и десктопные приложения писать можно если надо.

я збрехав, яке питання така і відповідь, редакція в черговий раз створює беззмістовні топіки

Та, але байтить на коменти норм

для Arm V8 чи x86_64 ?

для гугл хрома, звісно ж

Ну було таке на одному проекті. SQL, PLSQL, Python, Bash, Scala. Здається що трохи зоопарк, можливо що так воно і було. Також були різноманітні тулзи, деякі з них пробували і надалі більше не використовували, інші схвалювали після спроби і купували ліцензію. Таке буває коли проект пов’язаних із дата сцаєнс і коли ресурси компанії дозволяють експериментувати аби знайти найбільш оптимальні рішення.

вообще не ок. зачем использовать js, когда 90% кода на php?
такое ощущение, что рептилоиды что-то нашептали программистам.

а вот еще случай был пару раз — написали нормальный код на html, а потом, зачем-то дополнили на css.
ладно б ради оптимизации, но когда css больше чем html...

Так, bash і Python, чом би й ні?

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

AOSP-розробники з подивом дивляться на пост.

Мова програмування це інструмент. В проєкті зараз використовується php, ts, rust. Використовується щоб найкраще виконати поставлену задачу, також важливо щоб у компанії були спеціалісти, які здатні підтримувати код на тому ж Расті, наприклад. Це все ок.
Не ок писати на Java тільки тому що вона подобається одному розробнику та він продавив менеджерів або сам вирішив писати як захоче.

А чим Rust у вашій темі відрізняється від Java ? Взагалі воно так стається що як і на чому робити зазвичай рішення технічного керівника. В моїй практиці в 90% випадків це людина із закордону. А як вона приймає рішення — це її вже справа, може хтось «продавать» або скаже «хлопці — мені фіолетово на чому, мені треба щоб воно було зроблено до середи бо я дав комітмент стекхолдерам вже інакше бюджету не буде».
BTW — в чисто комерційному плані Java має суттєві переваги над Rust. Спробуйте надати принаймі 3 книги які є індустрій ними безцелерами із Rust і Java і зрозумієте чому. Так само з фреймверками і усім іншим.

а що казав Дейсктра про ООП, забули?

Підписатись на коментарі