Які мови програмування варто вчити?

Вчора надибав цікаву статтю на блозі редакторів “Журналу Доктора Добба”. Колись, принаймні десь на початку дев’яностих, цей журнал перекладали навіть і видавали у нас. Дуже цікавий був. У мене досі є вдома два номери, які батько колись купував. Але я не про те, а про оцей блог-запис Крістофера Діґґінса. Суть його в тому, що він не просто погоджується з дописом Ніка Паланте про те, що з прагматичної точки зору варто вчити одну мову в рік, а каже: “Навіщо чекати?” Адже якщо теорія Сапір-Ворфа (до речі, вона навіть сама по собі, тобто в контексті лінгвістики, дуже цікава – трохи про неї під катом) справджується для мов програмування, то варто вчити їх якомога більше і якомога швидше. Але оскільки вивчити все неможливо, то варто обрати певну обмежену кількість мов, які будуть виступати як базисні вектори простору програмування: тобто вони мусять мало, або взагалі не перетинатись в сферах застосування та в парадигмах програмування і при цьому охоплювати якогомога більше. Як виглядатиме цей набір? 😉

Беручи за аксіому те, що читачі вже знайомі з такими популярними мовами як C++ та Java (і хоча автор статті не написав про неї, думаю до цих двох можна сміливо додавати C#), Крістофер Діґґінс дає наступні рекомендації:

  • Ruby – Рубі показує всю потужність, яку можуть зараз дати динамічні мови програмування і запозичує купу вдалих ідей з таких мов як Smalltalk, Perl та Lisp.
  • Scheme – Схема, діалект Lisp’у з деякими гарними низькоріневими вдосконаленнями. Привчіть себе думати категоріями call/cc та пересвідчіться, що ви добре затямили як працює “lambda” і навіщо потрібні “let bindings”.
  • PostScript – найкращий засіб засвоїти потужність стекового програмування. Хоч ця мова видається іграшковою, але вона нею не є – мільйнони принтерів в усьому світі працюють з нею щосекундно.
  • Prolog – Пролог може лускати широкий клас програмістських задач наче горішки. Крім того, його можна реалізувати за допомогою будь-якої з ваших підручних мов.
  • ML – одна з найулюбленіших мов серед науковців. Рекомендується вивчити алгебраїчні типи даних, а потім швиденько переходити до Haskel.
  • Haskell – вчити його має сенс лише після того, як ви ознайомились з Scheme та ML. Пориньте з головою в матчінг шаблонів (pattern matching), але тримайтесь осторнь монад (monads), поки вони вам по-справжньому не знадобляться, бо це пастка! Ви скоро прагнетимете використовувати їх де треба і де ні.
  • Erlang – просто познайомтесь з розподіленим (distributed) програмуванням.

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

Звісно, не у кожного буде час та натхнення, аби вивчити таку кількість мов. Тож якщо ви вирішили поки що обрати лише одну мову, то автор рекомендує Scala. Скала буде зрозуміла програмістам з різним досвідом роботи. Скала забезпечить доступ до виведення типів та потужним технікам притаманним мовам типу Haskel, але при всьому при тому підтримує звичайні ідіоми мов типу Java та динамічне програмування.

Онлайн-книжка “Скала в прикладах” (“The Scala by Example”) (PDF) була створена під впливом відомої книжки по Scheme: “Структура та інтерпретація комп’ютерних прорам” (“Structure and Interpretation of Computer Programs”). Прикол вивчення Скали в тому, що ви будете крок за кроком дізнаватись про нові для вас парадигми програмування і при цьому не втрачати навичок роботи з тими, до яких ви звикли. Чим більше часу ви проведете зі Scala – тим краще ви розумітимете як багато ви зможете з нею зробити і як далеко вона зможе вас занести.

Для більшої мотивації зібрано список посилань на близько сотню мов програмування, якщо ви хочете охопити всю їх панораму.

Мене дуже зацікавило. А вас? 😈

P.S. Ледь не забув… Про теорію Сапір-Ворфа. Так от, її ще називають “теорією відносності у лінгвістиці”. Вона стверджує, що існує чіткий взаємозв’язок між граматичними структурами мови, якою володіє людина, та тим, як ця людина сприймає світ та поводить себе в ньому. Тобто суть така, що мова впливає на людину, яка її вчить: навіть видозмінює її характер та поведінку.