Якщо кожен рік потрібно вивчати нову мову програмування, яким повинен бути цей список? [зачинено]


19

У першій главі «Прагматичного програміста» перша мета навчання:

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

Щоб досягти цього протягом кар’єри, список мов, ймовірно, буде досить довгим (особливо, якщо ви не хочете "прогресувати" в управлінні). Зрозуміло, що освоєння програміста (або будь-якої іншої форми) змусить вас розпочати роботу з ядром комерційно корисних мов (звичайний список з публікації роботи: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Крім того, формальна чи неофіційна програма навчання, ймовірно, має охоплені функціональні підходи (через щось на зразок Haskell, LISP або мови, похідної від ML)

Але як тільки буде вивчено розумний підмножина цього списку - що далі, і чому ?


3
У цій відповіді я перелічу деякі мовні парадигми, які можна вивчити, щоб розширити ваші здібності. Я б спершу спробував вивчити всі ці парадигми (а не зосереджуватись на мовах), тому позначте всі ті, які використовує ваша поточна мова, а потім виберіть мову, яка має стільки ж різних, ніж те, до чого ви звикли. Немає сенсу починати з C # потім Java, спробуйте диверсифікувати більше спочатку. Після того, як ви охопили всі основні типи, ви можете вибрати інші загальні мови.
Саймон П Стівенс

@Simon: Чому б не зробити цю відповідь тут?
Річард

1
Ви багато чого навчитесь, переходячи з Java на C #, але не так вже йти навпаки
Casebash

@Richard. Я не вважав, що це виправдовує повну відповідь, я просто посилався на те, що я написав в іншому місці.
Simon P Stevens

1
Більшість людей, які вивчають мову щорічно, будуть "джеком всіх професій, але не майстрам", поки не зосередиться на кількох протягом декількох років. Я вважаю, виходячи з великого досвіду, що поняття "full-stack" програміста помилкове, за винятком 1% - 5% розробників. Більшість завзятих людей, які я знаю, не володіють чудовими навичками, і навпаки.
нар.

Відповіді:


19

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


7
Чи можу я отримати ваш автограф? :-)
Крістіан Давен

1
+1 Блискуча відповідь, навіть якщо це, мабуть, малося на увазі гумористично.
Джо D

1
@Joe D Не мається на увазі зовсім гумористично. Якщо ви можете це зробити, ви освоїли всі ніші.
альтернатива

-1 за те, що це не означає цілком жартівливо. (як, наприклад, у нас недостатньо напівзакинутих мов / реалізацій)
ZJR

2
@ZJR Так 99% жартівливий, 1% Не жартівливий - це погано? Cmon. Крім того, чому ви скасовуєте відповідь на основі коментаря?
альтернатива

13

Ви повинні максимізувати "граничну актуальність", тобто завжди вступати в нові сфери, в яких ви ще не сильні. Різноманітні як мови програмування, так і поняття . Якщо ви не знаєте жодної об'єктно-орієнтованої мови, спробуйте Java та деякі рамки з високою абстракцією, такі як Hibernate. Потім запишіть деякі матеріали системного адміністрування мовою скриптів, такі як Python або Perl. Потім підберіть декілька навичок низького рівня в C або C ++, записавши високоефективний багатопотоковий код сервера. Якщо ви не знаєте функціонального програмування, спробуйте Haskell з деякими проблемами теорії графіків, такими як вирішення Peg Solitaire і т. Д. Це дуже можливо зробити так, щоб все, що ви дізнаєтесь, мало негайну ринкову цінність, поки ви не потрапили на ерудит або подібні спеціальні речі як безпека об'єктних можливостей ,Пролог або VHDL .

Гарна вправа до речі! Це навчить вас мислити бічно і передбачати проблеми в мовно-агностичних умовах, замість того, щоб покладатися на занадто мало методик, орієнтованих на платформу. Наприклад, щойно ви освоїте схожість та відмінності у відправці віртуального методу між C ++ та Python, ви майже враз «отримаєте» його для будь-якої іншої мови.


9

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

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

Що це за парадигми? Удосконалена книга Поняття, методи та моделі комп’ютерного програмування забезпечує відмінний огляд із графічною картою .

Таким чином, якщо ви знаєте лише імперативні мови, схожі на С, тоді вивчення схеми / Lisp є надзвичайно корисним. Якщо ви вже знаєте імперативні та функціональні мови, то вивчення Prolog буде корисним тощо.

Недавня книга, яка намагається викладати кілька мов та парадигм, - « Сім мов за сім тижнів» . Звичайно, ви не будете вільно володіти кожною мовою після тижня навчання, але це, здається, забезпечує доступну перспективу багатопарадигми, орієнтованої на практиків.

Коли ви робите іншу парадигму, це справді дзен-момент; Перехід від імперативного до функціонального програмування змусив мене побачити світ обчислень у абсолютно новому світлі. Щасливого навчання!


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

9

C - як істотна, "лежить в основі всього", система програмування мови

Lisp (схема) - дивна, але неймовірно потужна ур-мова, яку, на думку великих хакерів, визначає класно

Малий розмова - адже саме так мав бути ОО

Ерланг (або інша мова актора) для розуміння акторів

Haskell - щоб зрозуміти Монади

Javascript - тому що його скрізь і важливо для сценарію браузера

Один з Python / Ruby / Perl (але це не важливо, який) - так що ви знаєте, як виглядає популярна, сучасна сценарійна мова високого рівня з хорошою підтримкою бібліотеки

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

Пролог - тому що вам все-таки потрібно дути розум


2
Причина, чому я дізнався Haskell, полягає в тому, що я хотів вивчити функціональну мову (на відміну від усіх процедурних, які я знав раніше), і Haskell здався мені схожим на дитину-плаката для функціональних мов. Причина, що мені зараз подобається Haskell, полягає в тому, що мова на високому рівні, має гарну бібліотечну підтримку, і вона швидка (приблизно 50% швидше, ніж C, але це залежить від того, що ви робите). Також мені подобається писати купу коду, і все це працює перший або другий раз (після отримання його для компіляції).
Джої Адамс

Це, безумовно, важливо, вивчаєте ви Perl, Python чи Ruby. Як приклад, Python має список розумінь, яких у Ruby не існує, а Ruby - модулі, яких немає в Python. Ви можете дублювати результати обох речей на будь-якій мові, але вивчення будь-якого з них впливатиме на ваше мислення дуже різними способами.
philosodad

1
Пролог - тому що вам все-таки потрібно думати - Найкращий коментар коли-небудь +1
Zachary K

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

4
  • Перейти (нова мова програмування на системному рівні з хорошою підтримкою паралельності та не так традиційних концепцій)
  • Lua (мова сценаріїв проста, виразна, надзвичайно гнучка та збалансована парадигми, імператив, функціональне та мета програмування, що дозволяє OOP)
  • D (C / C ++ зроблено правильно)
  • Groovy (Виразність та мета програмування у світі Java)
  • Ейфель (дизайн за контрактом та інший підхід до ООП)
  • Prolog (мова логічного програмування)

1
Чому хтось повинен це навчитися? ( Чому тут цікавий біт, є кілька справді унікальних мов програмування: кожна парадигма реалізована не раз.)
Річард,

Цікаво побачити, що ви думаєте, що D - це C зроблено правильно. Особисто, коли я використовую C, я здебільшого використовую його для матеріалів низького рівня, де я взагалі не хочу абстракцій OOP.
Йонас

@ Jonas: Нам все ще потрібна проста мова, зроблена правильно, в той час як ця мова не приходить D, можна красиво використовувати лише в обов'язковому порядку. Для вас, D2 є більш функціональним, коли його завершення, можливо, буде найкращою реалізацією парадигми до мови, в першу чергу, необхідного.
Маньєро

правильно зроблено суб'єктивно. Для мене Ерланг - це дуже мала і проста мова, зроблена правильно. Відсутня частина - це чудова рамка графічного інтерфейсу, і якщо ви робите складні системи, можливо, ви хочете більше хотіти статичної мови.
Йонас

@Jonas: Ерланг - це гарна мова, але це не C / C ++ зроблено правильно, це зовсім інша річ.
Маньєро

2

1) Пролог: Це абсолютно різне для всіх імперативних мов, якими ви користувалися до цього часу, і це змінить ваш погляд на проблеми

2) Lisp: без цього ви можете також використовувати Vi

3) Ерланг: Знову ж таки, це зовсім інше, теж здається досить модним.

4) Щось із Тюрінга Тарпіта (наприклад, Brainfuck), і, ймовірно, написати компілятор чи перекладач для цього: я не можу придумати причину для цього, але це здається гарною ідеєю.


1
"без цього ви можете також використовувати Vi". Я здивований, що ніхто не підхопив це :)
Готьє

Я використовую vi! (Ну гвім)
Захарій К


1

Хоча я погоджуюся, що добре вивчати нові мови (і навіть обов'язково через довгу кар’єру), я вважаю, що один рік на рік перевищує перші п’ять-десять років. Я хотів би бачити, що хтось із таким рівнем досвіду вивчає нові речі про мови, які вони вже знають. У якийсь момент вам потрібна глибина, а також широта знань. Таким чином, ви можете написати конструкцію If на 12 мовах, big whoop. Я б краще побачив когось, хто справді копається і стане експертом хоча б в одному. А потім наступні кілька років стати експертом у чомусь іншому. За 30-річну кар’єру я хочу, щоб хтось мав глибину знань, а не лише основи багатьох справ.

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