Якими мовами ви б запропонували вивчити програміста, не тому, що вони будуть користуватися цією мовою (але вони можуть мати), а тому, що це вдосконалить навички програмування в цілому і дозволить подумати по-іншому (і, можливо, краще) ) спосіб?
Якими мовами ви б запропонували вивчити програміста, не тому, що вони будуть користуватися цією мовою (але вони можуть мати), а тому, що це вдосконалить навички програмування в цілому і дозволить подумати по-іншому (і, можливо, краще) ) спосіб?
Відповіді:
для "нормального" програмування та алгоритмів:
для переживання думки:
для того, щоб знищити розум і перетнути межу між падаваном та майстром джедаїв:
Не забудьте Javascript .
Він має функції OO, які не є вашими звичайними функціями OO. Він добре підходить для функцій і закриття вищого порядку, і ви їх регулярно використовуєте. Це дозволяє безліч функціональних прийомів програмування. Він надзвичайно гнучкий.
І це практично, адже кожен серйозний браузер має його.
(Звичайно, він також має ряд неприємних примх. Мало хто з практичних мов)
C і складання для роботи комп’ютера
Haskell і LISP як для функціонального програмування, так і для метапрограмування
APL для векторного та короткого програмування
bash або tcsh щодо того, як програмно керувати комп'ютером
Я б запропонував Схему.
Це функціональна мова програмування, що походить (більшість насправді вважає це діалектом) від Lisp. Головна відмінність від Common Lisp полягає в тому, що його підхід дуже мінімалістичний - надзвичайно . Наприклад, у звичайному розподілі схеми (будь-яка схема <R5, або Mit / GNU / Scheme) ви не знайдете реалізацію циклу: вам доведеться зробити власну за допомогою хвостової рекурсії.
Це дійсно виразно, і його синтаксис чудово дізнатися щось нове про програмування, як це стосується: просто переглядаючи код, ви отримуєте уявлення про те, як компілятор / інтерпретатор буде працювати через нього.
Крім того, він поставляється з найкращою книгою програмування, колись, структурою та інтерпретацією комп’ютерних програм , що безкоштовно завантажуються на веб-сайті MIT.
Ось декілька відео-уроків, які, сподіваюся, відразу зацікавлять вас цією захоплюючою мовою - спікери є авторами SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- лекції /
LISP, переважно схема в поєднанні з "Структура та інтерпретація комп'ютерних програм" Абельсона та Суссмана, навчить вас думати в інших, ніж тих, що накладаються C / C ++.
FORTH, конкретно, орієнтований на блок FORTH, а не орієнтований на файл (наприклад, D85), навчить вас стримувати свою простоту. Коли ви ні за яких обставин не можете написати звичайну програму довжиною більше 16 рядків з 64 символів, ви змушені абстрагуватися та розміщувати фактори.
Java - одна з мов, яку викладають найбільше в університетах по всьому світу, і в цьому є причина. Хоча це часто подобається динозаврам, він дає всім дуже хороший огляд концепцій сучасного програмування. Він НЕ показує, як працює сам комп’ютер, як Assembler або навіть вже набагато абстрактніша мова C. Але пілоти повинні вміти літати, а не вміти самостійно будувати літак - піди вчитися JAVA як хороша основа для будь-якого коду, який ви напишете на (для резона) найпоширеніших мовах на сьогоднішній день: Java, c ++, php, c #, ruby (на рейках) python і так далі ...
макс
Руки вниз, я б сказав Haskell. І з двох причин:
Я б запропонував Scala, якщо хтось із світу C / Java.
Це не суто функціональна мова програмування, але вона використовує OO для імітації деяких функціональних функцій програмування (наприклад, використання об'єкта для імітації функції першого класу та функції високого порядку).
Отже, якщо ви знайомі з ОО, Scala використовує терміни, які ви вже знаєте, щоб пояснити функціональний світ.
Я знайшов, що мені простіше зрозуміти функціональне програмування в Scala, ніж зануритися в більш функціональне програмування, як Haskell, List ... і т.д.
Функціональні мови - це те, що я відчуваю, що допомогло привести мене туди, де я є сьогодні. Незважаючи на те, що я займаюся розробкою веб-додатків, концепції, вивчені на функціональних мовах, допомагають мені бачити рішення проблем, яких я б інакше не бачив. Ось мови, з якими я працював у своєму університеті:
Вивчення цих мов допоможе вам зрозуміти світ абстракцій та як побудувати блоки коду, які інкапсулюють інші функціональні можливості, приховуючи деталі низького рівня, щоб ви могли зосередитись на бізнес-цілях високого рівня.
Існує ряд мов програмування, які вимагатимуть подумати над проблемою по-новому (стосовно того, до чого ви звикли, звичайно.) Найпоширеніші мови, до яких слід вивчити мову, яка вивчається імперативом, є функціональною та логічна мова, наприклад, prolog та lisp .
На деякі мови сильно впливає теорія категорій, наприклад, окамл та хаскелл, а деякі - мови крос-порід, такі як Кері (функціональна та логічна). Каррі - це, мабуть, найвибагливіша мова, яку я знаю, не тільки тому, що вона отримала всю розумну душевність Haskell за допомогою логічного програмування, але також через інтеграцію з програмуванням на основі обмежень.
Ще однією цікавою мовою є Occam-pi, оскільки вона настільки важка для одночасності, а також через недавнього порту arduino .
Добре закруглений програміст має кілька мішків, які підтягують рукав, і до них належать:
Все це вчить вас трохи різних способів думати і підходити до проблем.
ви не навчитеся правильно жодної мови програмування без чіткої цілі. Знаючи, що ви хочете зробити з цим, тоді ви можете вирішити, яка програма підходить вашим потребам.
Наприклад, скажімо про c #.
C # може робити веб-програму, консольну програму, автономну програму, ігрову програму, програму Silverlight та мобільну програму. Хоча синтаксис майже в усіх випадках однаковий, але він працює по-різному в кожному сценарії. Наприклад, автономний виконуваний файл зберігає їх інформацію, поки вона не буде завантажена або програма не закінчена, тоді як у веб-програмі інформація знищується щоразу, коли ви завантажуєте сторінку, і при срібному світлі ви витрачаєте більшу частину часу, бореться з XML-файл.
По-друге, не витрачайте час на екзотичні мови (наприклад, Haskel), корпоративне мовлення, дуже мало програми, варті ваших зусиль: java (король пагорба), c # / vb.net, php та sql.
Існує дуже проста програма для написання Java-аплетів під назвою Processing
Ця мова дасть вам дуже базове розуміння змінних, циклів і подібних речей, якщо ви тільки починаєте.
Деякі чудові пропозиції тут. Я, мабуть, особисто поїхав із C або C ++. Вони змушують вас мати справу з багатьма поняттями, які мають велике значення для розуміння того, як все працює, але вони, як правило, затуманюються іншими мовами. Просто розуміння того, як все справді працює, допоможе вам як програміст, навіть якщо мова, якою ви користуєтесь пізніше, приховує деякі деталі.
Асамблея - це весело, якщо ви хочете копатись навіть на нижчому рівні, ніж це, але не сподівайтеся, що з цим багато зробите. :)
Я б рекомендував Рубі. Рубі не вимагає зміни парадигм, але це спонукає вас працювати в декількох парадигмах. Я думаю, що перевага цього полягає в тому, що замість того, щоб засмучуватися тим, що не можете працювати так, як ви звикли, ви використовуєте іншу парадигму від розчарування з обмеженнями робити речі так, як ви звикли.