Чи варто бути комп'ютерним мовою поліглот? [зачинено]


14

Часто можна почути, що програмісти повинні вивчити багато різних мов, щоб удосконалитись. Я досі йду до школи і не маю великого досвіду програмування (трохи більше року). Але те, що було благородним наміром покращити навички програмування, перетворилося на якусь ОКР: я відчуваю, що не заспокоюся, доки не вивчу всі відносно відомі мови програмування.

І ось сам питання: чи допоможе вам поліглот на мовах програмування насправді (і я не маю на увазі звичайний "Програміст повинен знати хоча б усі парадигми", я маю на увазі справді всі мови, про які ви зазвичай чуєте)? Хтось має подібний досвід? Чи допомагає це у роботі / навичках / кар’єрі? Як часто ви можете застосовувати ці навички?


3
Я думаю, коли люди пропонують іншим вивчати нові мови, то менше вивчати мови та більше вивчати нові парадигми. Мої дві основні мови - Python та C ++, вивчення Haskell було для мене чудовим досвідом, оскільки воно змушує мене думати інакше, ніж я б інакше.
Vitor Py

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

4
"Мова, яка не впливає на те, як ви думаєте про програмування, не варто знати". (Алан Перліс). Амінь.

2
@Job, знаючи 10 мов програмування, потрібно лише незначна частка зусиль, необхідних для вивчення основ однієї розмовної мови.
SK-логіка

2
@ SK-логіка залежить. Б'юсь об заклад, я можу навчити дитину 6 років швидше говорити іспанською мовою, тоді я можу навчити його пітона.
Райнос

Відповіді:


10

"Програміст повинен знати принаймні всі парадигми"

Це допомагає

Я маю на увазі дійсно всі мови, про які ви зазвичай чуєте

Це не допомагає. Хоча коли ви знаєте всі парадигми, ви можете вивчити мову на тиждень.

Просто більш оптимальним є витратити тиждень на вивчення цієї мови, коли вам потрібна ця мова.

Хороший програміст - лінивий програміст

Побічна примітка:

Вивчення загальних / популярних мов не так корисне, як вивчення "всіх парадигм". Перший не охоплює останній. Наприклад, вивчення самості є неймовірно корисним для розуміння прототипних ОО. Це не звичайна і не популярна мова, але набагато корисніше, ніж вивчення пітона, коли ви вже знаєте рубін.

Мовний дизайн:

Знання більшості мов корисно, якщо ви пишете / розробляєте нову мову. Так що для цього є надійний приклад використання, але це досить ніша.

Що я рекомендую зробити замість цього:

Прочитайте код, виконавши 2, принаймні 3 рази

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

Техніка програмування та теорія інформатики завжди залишаються однаковими.


Але є багато цікавих незначних особливостей мов, і навіть вивчення нової мови з уже відомої парадигми може підірвати ваш розум (наприклад, для мене це був Smalltalk)
Антон Барковський,

@AntoBarkowski - це помилкове твердження, не порівнюйте SmallTalk з іншими мовами ОО. Java / C ++ / C # / тощо. не справжні мови OO. Звичайно, SmallTalk варто вивчити, але це не та ж парадигма;)
Raynos

6
Люди продовжують говорити "ви можете вивчити мову за тиждень", але це просто не так. Звичайно, ви зможете записати синтаксично правильний код цією мовою, але є ще більше, ніж це. Наприклад, C # і Java дуже синтаксично схожі і є обома мовами OO. Однак написання Java-коду в C # не робить вас програмістом C #.
R0MANARMY

3
@ R0MANARMY "<хороші програмісти> можуть вивчити мову за тиждень". Мова не включає бібліотеки, рамки та API. Моє визначення хороших програмістів може бути дуже високим.
Райнос

1
@ R0MANARMY, кому з цих крихітних, неважливих семантичних бітів, про які ви згадали, може знадобитися більше години?
SK-логіка

4

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

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

Для уточнення я вважаю дурним спробувати вивчити всі мови, про які ви насправді чуєте: таких сотень є, і вони часто є незначними варіантами на інших мовах.


3

ІМХО, це не так. По-перше, тому, що ви не можете вивчити мову менше ніж за рік. Щоб написати код в ньому, потрібно 2 дні, але для написання мови потрібен великий досвід, і добре сформований код для даної мови. Чому GC працює так, як це робиться, куди виділяти пам'ять, які конструкції швидші, як правильно об'єднати рядки, які небезпечні куточки мови тощо.

Я пишу жахливий Java / .NET-код, який є розробником C ++, оскільки багато розробників Java пишуть жахливий код C ++.

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

Але вивчення мови, щоб ви не використовували структури в .NET або не просочували кожен об'єкт в C ++, вимагає багато часу. Я думаю, що краще витратити його на вивчення принципів дизайну, платформ та вашої мови на вибір.

Але це лише моя думка.


2
"тому що ви не зможете вивчити мову менше ніж за рік" Неправда. Не плутайте вивчення мови з вивченням популярних рамок, які вона виставляє. Також додайте "загальні методи програмування" до списку в кінці.
Райнос

@Raynos: Я зрозумів, що саме про це він має на увазі.
Стівен Євріс

1
Моїм улюбленим способом гри з новою мовою є реалізація компілятора для гідного підмножини. Загалом потрібно 2–4 години, щоб зрозуміти мову та мати можливість виявити та вкрасти найкращі функції з неї. Не майже рік, навіть не день.
SK-логіка

1
Добре, якщо ви приєдналися до великого проекту C ++ і прийшли на інтерв'ю словами "Я програмував на Яві 10 років, але останні 6 місяців я провів на C ++, тому знаю мову". Я сумніваюся, що ви отримаєте високооплачувану посаду старшого розробника за цю роботу. Отже, ні, я все ще думаю, що ви не можете вивчити мову через місяць.
Кодер

2
@Coder, якби ти приєднався до великого проекту C ++ і прийшов на співбесіду зі словами типу "Я програмував 20 мовами протягом 10 років, включаючи C ++", ти, мабуть, отримаєш роботу.
SK-логіка

2

Це не практично , щоб знати їх, але це може бути дуже корисно знати про них. Що я маю на увазі під цим, коли виникає нова проблема, ви можете сказати: "Я туманно пам'ятаю [інша мова] була чудовим способом вирішення подібних проблем. Я повинен це шукати".


Я вважаю, що подкасти, такі як SE Radio, хороші для цього. Вони часто мають правильну довжину для прослуховування на маршруті на роботу, і ви можете багато чому навчитися таким чином. Але його форма Чому <X> Цікава.
Захарій К

1

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

Також розумніше навчитися робити більше справ, а не багато способів робити те саме.


1

Я працював у кількох системах, де компоненти писалися на декількох мовах (найгірший правопорушник вимагав, щоб я доставляв код, написаний на Ada 83, C, Fortran 77, SQL та DCL, тоді як для моєї останньої роботи мені потрібно було доставити C ++ та Java-код ). Так, так, бувають випадки реального світу, коли вам потрібно знати кілька мов досить добре, щоб бути в них продуктивним (продуктивний! = Досвідчений; ви не збираєтесь бути глибоким експертом у галузі C ++ та Java та ..., якщо ви не виродник).

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


1

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


0

Це як учити розмовляти багатьма мовами. Вивчити їх усіх до того, щоб бути корисними майже неможливо. Дотримуйтесь тих, які ви, ймовірно, будете використовувати, і вам буде краще. Ви можете навчитися C ++, C # та Java досить добре, але намагатися одночасно витіснити Perl, Python, VB (не VB.NET), Ruby та JavaScript на професійному рівні - це просто глупо. У день не вистачає годин, щоб одразу зберегти свої навички.

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