Мови програмування, які в цілому покращують вашу навичку програмування? [зачинено]


27

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


12
Ні одного. Швидше: якомога більше їх, кожна якнайбільше відрізняється від інших.

Відповіді:


27

для "нормального" програмування та алгоритмів:

  • пітон, добре вчиться, простий у використанні, досить читати.
  • C ++, навчає вас, що справді є комп'ютером.

для переживання думки:

  • Хаскелл
  • Пролог

для того, щоб знищити розум і перетнути межу між падаваном та майстром джедаїв:

  • Загальний LISP

3
так, погодившись з chrisaycock, C і збірка навчить вас, що РЕАЛЬНО є комп'ютером, C ++ - це дуже легкий крок вгору, але все одно ви матимете справу з такими проблемами, як покажчики пам’яті та високопродуктивні проблеми
Lacrymology

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

Пролог впевнений, що програмування. Декларативне програмування і кореніться в логіці (і тому відносно математично), так. Але все-таки програмування. Щодо останнього пункту, чи вважаєте ви, що ще один Лісп (тобто Схема) також би зробив?

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

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

13

Не забудьте Javascript .

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

І це практично, адже кожен серйозний браузер має його.

(Звичайно, він також має ряд неприємних примх. Мало хто з практичних мов)


1
Чи має JS функції OO, яких Java не має?
Махмуд Хоссам

3
@Phobia: JS робить OO зовсім іншим чином. Нема занять. Спадкування здійснюється за допомогою прототипів - по суті об'єкт може успадковувати будь-який інший об'єкт. Функції - це першокласні значення; ви не тільки можете передавати їх навколо, ви можете легко призначити нові методи існуючим об'єктам. Те, як JS робить приховування даних, також сильно відрізняється від Java: все, що відкриває об'єкт, є загальнодоступним, тому ви ховаєте дані та методи за допомогою закриття. Зауважте, що "канонічного ОО" немає; JS трохи ближче до "оригінального" OO, який винайшов Smalltalk, ніж, наприклад, C ++, але OO Java тепер також є "канонічним".
9000

11

C і складання для роботи комп’ютера

Haskell і LISP як для функціонального програмування, так і для метапрограмування

APL для векторного та короткого програмування

bash або tcsh щодо того, як програмно керувати комп'ютером


4
Замість APL ви можете використовувати J того ж автора.
9000

+1 при складанні. Ви ніколи не дивитесь на мови високого рівня однаково, роблячи якісь значні розробки. Якщо ви шукаєте щось, що змусить вас подумати про кодування по-справжньому, ASM зробить це.
Куртис

9

Я б запропонував Схему.

Це функціональна мова програмування, що походить (більшість насправді вважає це діалектом) від Lisp. Головна відмінність від Common Lisp полягає в тому, що його підхід дуже мінімалістичний - надзвичайно . Наприклад, у звичайному розподілі схеми (будь-яка схема <R5, або Mit / GNU / Scheme) ви не знайдете реалізацію циклу: вам доведеться зробити власну за допомогою хвостової рекурсії.

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

Крім того, він поставляється з найкращою книгою програмування, колись, структурою та інтерпретацією комп’ютерних програм , що безкоштовно завантажуються на веб-сайті MIT.

Ось декілька відео-уроків, які, сподіваюся, відразу зацікавлять вас цією захоплюючою мовою - спікери є авторами SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- лекції /


Дякую. Я маю попередити вас, що на уроках легко перенести пристрасних програмістів до сліз.
cbrandolino

@cbrandolino - Правда, наш клас функціонального програмування вибив багато людей з програми з інформатики.
jmort253

1
Схема була мінімалістичною, але в R5 вона виросла деякими бородавками, а на R6 вона, безумовно, величезна. Шкода, адже це було дуже красиво. Для справді мінімалістичної, але все-таки практичної мови перевірте Луа
Хав'єр

@Javier, ти маєш рацію. Я відредагую відповідь, щоб вказати реалізацію.
cbrandolino

Я займаюся схемою в університетському атмі, і це ненавиджу. Не тому, що це функціональна мова, я хочу надовго вникати в цю. Однак синтаксис мене справді вбиває. На клавіатурі є три різних типи дужок (чотири, якщо рахувати кутові дужки), і ви використовуєте лише парантези. Чому? У чому проблема використання інших?
Фемареф

4

LISP, переважно схема в поєднанні з "Структура та інтерпретація комп'ютерних програм" Абельсона та Суссмана, навчить вас думати в інших, ніж тих, що накладаються C / C ++.

FORTH, конкретно, орієнтований на блок FORTH, а не орієнтований на файл (наприклад, D85), навчить вас стримувати свою простоту. Коли ви ні за яких обставин не можете написати звичайну програму довжиною більше 16 рядків з 64 символів, ви змушені абстрагуватися та розміщувати фактори.


4

Java - одна з мов, яку викладають найбільше в університетах по всьому світу, і в цьому є причина. Хоча це часто подобається динозаврам, він дає всім дуже хороший огляд концепцій сучасного програмування. Він НЕ показує, як працює сам комп’ютер, як Assembler або навіть вже набагато абстрактніша мова C. Але пілоти повинні вміти літати, а не вміти самостійно будувати літак - піди вчитися JAVA як хороша основа для будь-якого коду, який ви напишете на (для резона) найпоширеніших мовах на сьогоднішній день: Java, c ++, php, c #, ruby ​​(на рейках) python і так далі ...

макс


3

C # 3 з LINQ.

Це чудове вступ до функціонального програмування.

Спробуйте написати програму (або вирішити Project Euler) і замінити якомога більше циклів на LINQ-дзвінки.
Це допомагає засвоїти концепції функціонального програмування та лінивої оцінки.

Звідти можна перейти до F #


3

Руки вниз, я б сказав Haskell. І з двох причин:

  • Це просто найкращий спосіб вивчити функціональне програмування. Практично будь-яка інша мова дозволяє використовувати побічні ефекти за замовчуванням, але це може робити функції функціонально (і так, це включає ML та Erlang: див. Цю розмову для отримання додаткової інформації ). Haskell є функціональним за замовчуванням, але його можна змусити використовувати побічні ефекти, коли вони вам потрібні.
  • Це, безумовно, мова, яка спонукає вас думати, перш ніж кодувати. Якщо чесно, це насправді ніколи не було проблемою для мене (якщо що, то якраз навпаки). Це казало, схоже, я меншість. Більшість програмістів, з якими я стикався, здається, більше "коду, спочатку задайте питання", а не "обдумуйте свою проблему днями перед тим, як кодувати рішення за 5 хвилин", (що, як правило, мій настрій) . Тому цей вид мови може забезпечити цінний досвід більшості програмістів.

3

Я б запропонував Scala, якщо хтось із світу C / Java.

Це не суто функціональна мова програмування, але вона використовує OO для імітації деяких функціональних функцій програмування (наприклад, використання об'єкта для імітації функції першого класу та функції високого порядку).

Отже, якщо ви знайомі з ОО, Scala використовує терміни, які ви вже знаєте, щоб пояснити функціональний світ.

Я знайшов, що мені простіше зрозуміти функціональне програмування в Scala, ніж зануритися в більш функціональне програмування, як Haskell, List ... і т.д.


2

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

  • C ++ (Не функціонально, але такі поняття, як покажчики та управління пам'яттю, є безцінними)
  • Доктор Схема
  • ML / Ocaml (Ми написали іншу мову, використовуючи ML / Ocaml!)
  • JavaScript (функціональна мова, яка набирає силу в галузі, як на стороні клієнта, так і на сервері)

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


1

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


1

Існує ряд мов програмування, які вимагатимуть подумати над проблемою по-новому (стосовно того, до чого ви звикли, звичайно.) Найпоширеніші мови, до яких слід вивчити мову, яка вивчається імперативом, є функціональною та логічна мова, наприклад, prolog та lisp .

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

Ще однією цікавою мовою є Occam-pi, оскільки вона настільки важка для одночасності, а також через недавнього порту arduino .


1

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

  • Збірка, щоб дізнатися, як працює кишка комп’ютера.
  • Процедурна мова, така як C або Pascal.
  • Функціональна мова, така як Схема.
  • Мова OOP, така як Squeak.

Все це вчить вас трохи різних способів думати і підходити до проблем.


0

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

Наприклад, скажімо про c #.

C # може робити веб-програму, консольну програму, автономну програму, ігрову програму, програму Silverlight та мобільну програму. Хоча синтаксис майже в усіх випадках однаковий, але він працює по-різному в кожному сценарії. Наприклад, автономний виконуваний файл зберігає їх інформацію, поки вона не буде завантажена або програма не закінчена, тоді як у веб-програмі інформація знищується щоразу, коли ви завантажуєте сторінку, і при срібному світлі ви витрачаєте більшу частину часу, бореться з XML-файл.

По-друге, не витрачайте час на екзотичні мови (наприклад, Haskel), корпоративне мовлення, дуже мало програми, варті ваших зусиль: java (король пагорба), c # / vb.net, php та sql.


0

Існує дуже проста програма для написання Java-аплетів під назвою Processing

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


0

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

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


0

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

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