Проблеми (такі як підтримка) в розвитку з непопулярною мовою


31

Я розробляю якусь програму з clojure (lisp) наодинці в своїй команді. Він починається як невеликий додаток. Без проблем. Але оскільки він має функції та розширює область, це стає важливою програмою.

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

Отже, чи не неправильно робити програмування непопулярними мовами? (для власної забави?) Чи варто використовувати більш популярні мови? (принаймні такі, як пітон)

Я впевнений, якщо я покину команду, - не кажу, що я залишаю. :) - ніхто б не підтримував це. Ця програма буде знищена, а деякі розвиватимуться іншою мовою.

Мені дуже подобається розвиватися з клоджуром, але я зіткнувся з тим, що це може бути не для моєї команди.

Що ти думаєш про це? Я думаю, що багато програмістів, які люблять непопулярні мови, стосуються подібної проблеми.


2
У вас немає місцевих стандартів програмування щодо використання мов для розробки на місцях?
темптар

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

12
"Непопулярні" - це не велика проблема. "Непідтримуваний" набагато гірший. Напр. Лісп б'є VB 6,0 руками вниз.
MSalters

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

Відповіді:


22

Я відчуваю ваш біль, я хотів би зробити більше кодування у функціональному програмуванні (Haskell виглядає так весело!). Я відчуваю, що я тільки що подряпав поверхню, оскільки мені ще доводиться використовувати її в діловому контексті.

Я б настійно пропонував не робити цього . Якщо ви програмуєте лише мовою, яку ви знаєте, то лише ви зможете її підтримати. Якщо ви не хочете вирішувати будь-яке питання підтримки (навіть якщо у вас є інші строки / пріоритети), тоді кодуйте мовою, яку ваша команда знає та може підтримати. Що відбувається, коли щось перерветься, поки ти на відпочинку? Що станеться, якщо ви хочете отримати підвищення?

Я б рекомендував вам принаймні ще одного члена команди на борту. Покажіть їм кілька цікавих мовних особливостей. З двома людьми на борту це стає працездатним, і ви не будете завантажені всією підтримкою.


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

@quanticle OP говорить: "Отже, чи не помиляється програмування на непопулярних мовах? (для моєї власної забави?)." Якщо є вагомий випадок для використання іншої мови, такої як паралельність, тоді я погоджуюся, що варто було б мати проблеми з підтримкою.
Tom Squires

1
@quanticle: Це навпаки: Занадто багато мов (тобто більше однієї) призводять до надмірності, дублювання зусиль та непотрібного винахідлення колеса.
ThomasX

Правильно, підтримка, безумовно, важлива. Я люблю вашу пропозицію отримати іншого члена команди. Я глибоко подумаю над таким подібним.
Гібрид

17

Я впевнений, якщо я покину команду, - не кажу, що я залишаю. :) - ніхто б не підтримував це.

Можливо, помилковим.

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

Відбувається весь час.

Ця програма буде знищена, а деякі розвиватимуться іншою мовою.

Завжди правда. То навіщо турбуватися про це?

Зрештою всі програми повинні бути замінені.


Оскільки Clojure працює на будь-якому з JVM, CLR або javascript, навіть якщо жоден із співробітників Hybrid не хоче використовувати clojure, отримуючи (ймовірно, некрасивий) переклад джерела мовою основної мови. У перших випадках шляхом відображення на байт-коді / msil, в другому шляхом фіксації js, що випромінюється безпосередньо.
Ден Нілі

2
@DanNeely - Ви думаєте, що правильний шлях технічного обслуговування збирає Clojure до IL через (дуже класний) проект домашньої програми, а потім декомпілює цей код на C #? Я не зовсім переконаний, що простіше, ніж просити когось вивчити мову.

@TheMouthofaCow Я підозрюю, особливо для більшого застосування, навчання Clojure було б простіше; але підхід з великим молотом дозволив би впертим одномовним програмістам вносити зміни, не вимагаючи повного перезапису. Врешті рефакторинг для видалення відбиваючого шару, ймовірно, призведе до переписання фактично; але розподіліть вартість на декілька модифікацій, а не вимагайте, щоб усе було зроблено перед додаванням першої нової функції.
Дан Нілі

Дякую. Це дуже підтримує мою думку. Коли я якось переживаю цю ситуацію, я міг би мати на увазі і такі оптимістичні думки.
Гібрид

1
" Зрештою всі програми повинні бути замінені ". О, чи це було би правдою. Існує багато запущеного коду COBOL, який був записаний ще коли дискове зберігання було надзвичайно дорогим, і це було виправлено, щоб вижити Y2K (пам'ятаєте Y2K?), І це все ще працює. Насправді більшість програм або помирають молодими від невикористання, або живуть по суті назавжди. Тож вибір технології насправді дуже важливий. Тому що ваше потомство може підтримувати ці програми.
Росс Паттерсон

10

Я знаходжуся саме там, де ви передбачаєте перебування свого наступника. Мені було доручено додати функції до застарілої програми, яка використовувала Clojure та Erlang для асинхронного пошуку та перетворення його на програму, яка розподіляє асинхронний пошук. Коли я взявся за цю роботу, я знав лише Python та Java.

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


5

Прийняття нових мов або « окремої » мови якоюсь задачею є високим ризиком у проекті.

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

У деяких випадках ця проблема може бути використана для вдосконалення та урізноманітнення навичок команди майбутнім завданням.


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

4

Наразі Clojure може мати невелику встановлену базу (вона з'явилася в 2007 році), але навряд чи це непопулярна - адже це, можливо, "найгарячіша" нова мова навколо. Я був би здивований, якби ви не змогли знайти інших людей, зацікавлених у вивченні цього.

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

Переваги прийняття Clojure:

  • Більш продуктивні, ніж інші використовувані мови - про що свідчить кількість корисної функціональності, яку ви доставили за невеликий проміжок часу та з меншою кількістю рядків коду
  • У нас вже є одне важливе додаток (ваше), написане Clojure, тому для формування його варто будувати навички Clojure (а не робити дороге переписування)
  • Використання Clojure буде розглядатися як інноваційне і може стати хорошим способом мотивації талановитих розробників приєднатися / залишитися в компанії.

Недоліки прийняття Clojure

  • Ще одна мова для підтримки
  • Розробникам може знадобитися більше навчання та часу, щоб досягти швидкості

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


3

Не хвилюйтесь, будьте щасливі.

Зрозуміло, що програма має значення, інакше ви її не поширюєте. Вітаємо з успішним проектом. Імовірно, ви вибрали Clojure, оскільки таким чином заощадили час і, отже, заощадили гроші роботодавця. Якби ви написали це на Java, програму було б ще складніше підтримувати. Навіть якби ваші колеги могли легше зрозуміти програму по черзі, чи могли б вони її підтримувати та розширювати?


2

Я б сказав більше влади для вас! Лісп - це Діда комп’ютерних мов і є актуальним і сьогодні; той факт, що він не настільки популярний, я думаю, пов'язаний з тим, що у нього немає теплих пухнастих ідентифікаторів C # та Java, а основна реалізація компілятора в Windows працює лише під Cygwin (yuk!). Здається, розробка відбувається в Emacs, і я думаю, що вона краще грає з Linux або Mac.

Цей конкурс з кодування був виграний програмою Lisp у 2010 році: http://planetwars.aichallenge.org/

Зворотній шлях за день, коли вони могли налагодити його жити приблизно від 100 млн. Миль: http://www.flownet.com/gat/jpl-lisp.html

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


Tcl - це гарна мова, я б не назвав це нудною. Просто подивіться на Tkinter (на Python), щоб побачити, що це гарний інструмент, щоб знати.
Франческо

@Francesco - Я повинен зазначити, що я сказав Tcl не Tcl / Tk. Графічний набір інструментів може бути чудовим. Я сказав, що Tcl нудний, тому що я кілька років тому пішов на співбесіду в місце, де використовується лише Tcl (вони беруть участь у молодших програмістах, а потім навчають їх дуже нерозбірливій мові, щоб важко піти) і відхилили роботу, оскільки Tcl виглядав нудним. Я не кажу, що це не функціонально (це може бути). Я просто думав, що в кінцевому підсумку пережовуватиму руки, якщо мені доведеться писати Tcl більше ніж пару днів. Я стою при цьому.

2

Є багато хороших відповідей, але я хотів би додати бал.

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

Я пропоную вам поговорити зі своїм менеджером за адекватною допомогою, щоб уникнути будь-яких проблем у майбутньому.

Удачі!


2

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

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

Як я окреслив, обидва підходи мають певні переваги та недоліки. Як це часто буває, немає правильного чи неправильного підходу. Ви просто торгуєте одним набором переваг та недоліків для іншого. Компанія також не повинна повністю йти в той чи інший бік. Цілком розумно робити більшу роботу в C ++ або Java, але час від часу занурювати пальці в Lisp чи Python, щоб спробувати їх і побачити, що працює. Це здається, що це може зробити ваша компанія.

Тож продовжуйте (але не далі), вчіться стільки, скільки зможете, і станьте експертом Clojure, на який ваш менеджер може розраховувати на розуміння, яке можуть не мати ваші колеги. І не відчувайте себе погано ... турбуватися про організаційні речі - це робота вашого менеджера.


1

Я рекомендую почати переписувати програму іншою (більш зручною) мовою, коли ви починаєте відчувати, що обслуговування має високі шанси стати домінуючим питанням.

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


Я роблю це зовсім небагато. Я напишу те, що, схоже, утиліта на один знімок у Perl чи Erlang, тоді воно використовується досить часто, щоб перетворитись на утиліту, тому я перепишу його, використовуючи будь-яку основну мову проекту (Java або C #).
TMN

1

Звичайно, не неправильно робити програмування "непопулярними" мовами. Чому ти насправді байдуже, популярні вони чи ні? Я повністю згоден з @quanticle з цього питання. Якщо Clojure або інша не основна мова є найкращим інструментом для вирішення проблеми, вам слід вибрати її.

Я не бачу, чому технічне обслуговування буде проблемою. Якщо ви застосуєте модуль, інтеграцію тощо. Тестуючи та документуючи свій код, будь-який програміст, зацікавлений у функціональному програмуванні, зможе підтримувати вашу програму. ІМХО, той факт, що ваші колеги не дбають про Clojure, не є добрим аргументом для його використання, за винятком випадків, коли це потрібно дотримуватися політики компанії.


0

Незалежно від того, продовження програми після вашого від'їзду чи ні, на мою думку, це не стосується вас. Ви можете використовувати мову програмування, щоб зробити щось, що подобається вашому начальнику, для мене це дуже добре звучить. Турбуватися про продовження - це те, що повинен зробити ваш начальник.


3
Робота вашого шефа - турбуватися про продовження. Але ваша робота - переконатися, що начальник знає про проблеми, які повинні їх хвилювати. Ви повинні поговорити про це з начальником.
MarkJ

Я погоджуюсь, хоча ОП не повинен про це хвилюватися, якщо начальник не вирішить нічого робити.
Пол Хіемстра

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.