Языки программирования, которые улучшают ваши навыки программирования в целом? [закрыто]
27
Какие языки вы бы предложили программисту изучать не потому, что они будут много использовать язык (но они могут иметь), а потому, что это улучшит навыки программирования в целом и позволит мыслить иначе (и, возможно, лучше) ) путь?
да, согласившись с chrisaycock, C и ассемблинг научат вас, что такое ДЕЙСТВИТЕЛЬНО компьютер, C ++ - это очень маленький шаг вверх, но он все равно заставит вас
решать
миллигенри Пролог великолепен, но я не понимаю, как это может быть интересно для улучшения общих навыков программирования. Я рассматриваю это как альтернативную систему математической / логической записи, конструкции которой вы можете запрашивать, больше, чем языки программирования (описывают стати, а не процедуры). Редактировать: это, безусловно, меняет то, как вы думаете о чем-то, но это не программирование.
cbrandolino
Пролог уверен, это программирование. Декларативное программирование и коренится в логике (и, следовательно, относительно математики), да. Но все еще программирование. Что касается последнего пункта, думаете ли вы, что другой Лисп (то есть Схема) тоже подойдет?
3
Пролог - самый известный язык логической парадигмы. Важно сосредоточиться на всех парадигмах, с которыми вы можете справиться, если вы хотите стать программистом лучше, это поможет вам получить умственную ловкость и даст вам новые инструменты. Я думаю, что любой диалект Lisp подойдет, что я вижу в Common Lisp, так это то, что он выглядит для меня как наиболее производительный Lisp.
Лакримология
1
Я бы проголосовал за Scheme вместо Common Lisp - думаю, это зависит от того, думаете ли вы, что вы когда-нибудь будете использовать Lisp в работе. Если нет, перейдите на схему.
Skilldrick
13
Не забывайте Javascript .
Он имеет функции OO, которые не являются вашими обычными функциями OO. Он хорошо подходит для функций и замыканий высшего порядка, и вы обычно используете их. Это позволяет использовать многие приемы функционального программирования. Это чрезвычайно гибкий.
И это практично, потому что это есть у каждого серьезного браузера.
(Конечно, у него также есть ряд неприятных причуд. Мало практических языков нет)
@Phobia: JS делает OO совершенно по-другому. Нет занятий. Наследование осуществляется через прототипы - по сути, объект может наследоваться от любого другого объекта. Функции являются первоклассными значениями; Вы можете не только передавать их, но и легко назначать новые методы существующим объектам. Способ, которым JS скрывает данные, также сильно отличается от Java: все, что предоставляет объект, является общедоступным, поэтому вы скрываете данные и методы с помощью замыканий. Обратите внимание, что нет «канонического ОО»; JS немного ближе к «оригинальному» ОО, изобретенному Smalltalk, чем, например, C ++, но ОО Java теперь также «канонический».
9000
11
С и сборка для работы компьютера
Haskell и LISP для функционального программирования и метапрограммирования
APL для векторного и краткого программирования
bash или tcsh о том, как программно администрировать компьютер
Вместо APL вы можете использовать J того же автора.
9000
+1 на сборке. Вы никогда не смотрите на языки высокого уровня одинаково после какого-либо значительного развития. Если вы ищете что-то, что заставит вас думать о кодировании по-другому, ASM сделает это.
Куртис
9
Я бы предложил Схему.
Это функциональный язык программирования, основанный (на самом деле, большинство думает, что это диалект) из Lisp. Основное отличие от Common Lisp является его подход очень минималистично - очень так. Например, в обычном дистрибутиве Scheme (любая схема <R5 или Mit / GNU / Scheme) вы не найдете реализацию цикла: вам придется создать свою собственную, используя хвостовую рекурсию.
Это действительно выразительно, и его синтаксис великолепен, чтобы узнать что-то новое о программировании, например: просто взглянув на код, вы получите представление о том, как компилятор / интерпретатор будет работать через него.
Кроме того, он поставляется с Лучшей книгой по программированию, структуре и интерпретации компьютерных программ , которую можно бесплатно загрузить с веб-сайта MIT.
Спасибо. Однако я должен предупредить вас, что уроки легко приводят в восторг программистов до слез.
cbrandolino
@cbrandolino - Да, наш класс функционального программирования выбил многих людей из программы по информатике.
jmort253
1
Схема была минималистичной, но в R5 она вырастила некоторые бородавки, а на R6 она явно огромная. Жаль, так как это было очень красиво. Для действительно минималистичного, но все же практического языка, проверьте Lua
Хавьер
@ Хавьер, ты прав. Я отредактирую ответ, чтобы указать реализации.
cbrandolino
Я делаю схему в университете и ненавижу это. Не потому, что это функциональный язык, я давно хочу в него войти. Тем не менее, синтаксис действительно убивает меня. На клавиатуре есть три разных типа скобок (четыре, если вы считаете угловые скобки), и вы используете только паратезы. Зачем? В чем проблема с использованием других?
Femaref
4
LISP, предпочтительно Scheme в сочетании с «Структурой и интерпретацией компьютерных программ» Abelson & Sussman, научит вас мыслить иначе, чем те, которые навязывает C / C ++.
FORTH, в частности, ориентированный на блок FORTH, а не файловый (например, D85) научит вас обуздывать свою болтливость. Когда вы ни при каких обстоятельствах не можете написать процедуру длиной более 16 строк по 64 символа, вы вынуждены абстрагироваться и учитывать.
Ява является одним из языков, которым больше всего учат в университетах по всему миру, и этому есть причина. Хотя он часто похож на динозавра, он дает всем очень хороший обзор концепций современного программирования. Он НЕ показывает, как работает сам компьютер, как Assembler или даже гораздо более абстрактный язык C. Но пилоты должны уметь летать, а не строить самолет самостоятельно - изучайте JAVA как хорошее основание для любого кода, который вы будете писать на (для резонанса) наиболее распространенных в настоящее время языках: Java, C ++, PHP, C #, Ruby (на рельсах) Python и так далее ...
Это отличное введение в функциональное программирование.
Попробуйте написать программу (или решить Project Euler) и заменить как можно больше циклов вызовами LINQ.
Это помогает освоить концепции функционального программирования и ленивых вычислений.
Руки вниз, я бы сказал, Haskell. И по двум причинам:
Это просто лучший способ научиться функциональному программированию. Практически любой другой язык допускает побочные эффекты по умолчанию, но может делать что-то функционально (и да, это включает ML и Erlang: см. Этот доклад для получения дополнительной информации ). Haskell по умолчанию функционален, но может быть использован для использования побочных эффектов, когда они вам нужны.
Это определенно язык, который побуждает вас думать перед тем, как писать код. Честно говоря, это никогда не было для меня проблемой (во всяком случае, с точностью до наоборот). Тем не менее, кажется, что я меньшинство. Большинство программистов, с которыми я сталкивался, скорее относятся к мышлению типа «сначала код, задавай вопросы позже», а не к «размышлениям о своей проблеме в течение нескольких дней перед тем, как написать решение за 5 минут» (что, как правило, является моим мышлением) , Таким образом, этот язык может дать ценный опыт большинству программистов.
Я бы предложил Scala, если кто-то из мира C / Java.
Это не чисто функциональный язык программирования, но он использует ОО для имитации некоторых функциональных функций программирования (например, использование объекта для имитации функции первого класса и функции высокого порядка).
Поэтому, если вы знакомы с ОО, Scala использует термины, которые вы уже знаете, для объяснения функционального мира.
Я обнаружил, что мне легче понять функциональное программирование в Scala, чем погружаться в более функциональное программирование, такое как Haskell, List ... и т. Д.
Я считаю, что именно функциональные языки помогли мне прийти туда, где я сегодня. Несмотря на то, что я занимаюсь разработкой веб-приложений, концепции, изученные на функциональных языках, помогают мне находить решения проблем, которые в противном случае я бы не увидел. Вот языки, с которыми я работал в моем университете:
C ++ (не функционально, но такие понятия, как указатели и управление памятью неоценимы)
Доктор Схем
ML / Ocaml (Мы написали другой язык, используя ML / Ocaml!)
JavaScript (функциональный язык, который набирает обороты в промышленности, как на стороне клиента, так и на стороне сервера)
Изучение этих языков поможет вам понять мир абстракций и узнать, как создавать блоки кода, которые инкапсулируют другие функции, скрывая детали низкого уровня, чтобы вы могли сосредоточиться на бизнес-целях высокого уровня.
У Ruby одна из самых мощных и интуитивно понятных платформ тестирования, которые я когда-либо использовал. Я не уверен, что действительно понял, как правильно использовать насмешки и заглушки, пока не начал писать тесты в ruby. rSpec и Cucumber - фантастические инструменты.
Существует ряд языков программирования, которые требуют, чтобы вы подумали о проблеме по-новому (по сравнению с тем, к чему вы привыкли.) Наиболее распространенные языки, которые нужно изучать, если им преподают императивный язык, это функциональный и логический язык, например пролог и лисп .
Некоторые языки находятся под сильным влиянием теории категорий, например, ocaml и Haskell, а некоторые являются межпородными языками, такими как Curry (функциональный и логический). Карри, пожалуй, самый умопомрачительный язык из всех, что я знаю, не только потому, что он заполнил весь ум Haskell логическим программированием, но и из-за интеграции с программированием на основе ограничений.
Другой забавный язык - Occam-pi, так как он сильно загружен параллелизмом, но также и из-за недавнего порта arduino .
Вы не будете правильно изучать любой язык программирования без четкой цели. Зная, что вы хотите с ним делать, вы можете решить, какая программа подойдет вам.
Например, скажем о c #.
C # может создавать веб-программы, консольные программы, автономные исполняемые файлы, игровые программы, программы Silverlight и мобильные программы. Хотя синтаксис почти во всех случаях одинаков, но в каждом сценарии он работает по-разному. Например, автономный исполняемый файл хранит информацию до тех пор, пока она не будет выгружена или программа не будет завершена, в то время как веб-программа уничтожает информацию каждый раз, когда вы загружаете страницу, а в Silverlight вы будете проводить большую часть времени, борясь с XML-файл.
Во-вторых, не тратьте свое время на экзотические языки (например, на Haskel), если говорить по-корпоративному, очень мало программ, которые стоит ваших усилий: java (король горы), c # / vb.net, php и sql.
Несколько отличных предложений здесь. Я бы, наверное, пошел с C или C ++ лично. Они заставляют вас разбираться со многими понятиями, которые имеют большое значение для понимания того, как все работает, но имеют тенденцию запутываться в других языках. Просто понимание того, как все работает на самом деле, поможет вам как программисту, даже если язык, который вы используете позже, скрывает некоторые детали.
Сборка - это весело, если вы хотите получить даже немного более низкий уровень, чем этот, но не ожидаете, что с ним многое сделают. :)
Я бы порекомендовал Ruby. Ruby не требует, чтобы вы меняли парадигмы, но побуждает вас работать с несколькими парадигмами. Я думаю, что преимущество этого в том, что вместо того, чтобы расстраиваться из-за того, что вы не можете работать так, как вы привыкли, вы используете другую парадигму из разочарования в связи с ограничениями действий, к которым вы привыкли.
Ответы:
для «нормального» программирования и алгоритмов:
для изменения мысли:
за то, что ты разрушил свой ум и перешёл черту между падаваном и мастером-джедаем:
источник
Не забывайте Javascript .
Он имеет функции OO, которые не являются вашими обычными функциями OO. Он хорошо подходит для функций и замыканий высшего порядка, и вы обычно используете их. Это позволяет использовать многие приемы функционального программирования. Это чрезвычайно гибкий.
И это практично, потому что это есть у каждого серьезного браузера.
(Конечно, у него также есть ряд неприятных причуд. Мало практических языков нет)
источник
С и сборка для работы компьютера
Haskell и LISP для функционального программирования и метапрограммирования
APL для векторного и краткого программирования
bash или tcsh о том, как программно администрировать компьютер
источник
Я бы предложил Схему.
Это функциональный язык программирования, основанный (на самом деле, большинство думает, что это диалект) из Lisp. Основное отличие от Common Lisp является его подход очень минималистично - очень так. Например, в обычном дистрибутиве Scheme (любая схема <R5 или Mit / GNU / Scheme) вы не найдете реализацию цикла: вам придется создать свою собственную, используя хвостовую рекурсию.
Это действительно выразительно, и его синтаксис великолепен, чтобы узнать что-то новое о программировании, например: просто взглянув на код, вы получите представление о том, как компилятор / интерпретатор будет работать через него.
Кроме того, он поставляется с Лучшей книгой по программированию, структуре и интерпретации компьютерных программ , которую можно бесплатно загрузить с веб-сайта MIT.
Вот небольшой видеоурок, который, я надеюсь, сразу же заинтересует вас этим увлекательным языком - авторы SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- лекции /
источник
LISP, предпочтительно Scheme в сочетании с «Структурой и интерпретацией компьютерных программ» Abelson & Sussman, научит вас мыслить иначе, чем те, которые навязывает C / C ++.
FORTH, в частности, ориентированный на блок FORTH, а не файловый (например, D85) научит вас обуздывать свою болтливость. Когда вы ни при каких обстоятельствах не можете написать процедуру длиной более 16 строк по 64 символа, вы вынуждены абстрагироваться и учитывать.
источник
Ява является одним из языков, которым больше всего учат в университетах по всему миру, и этому есть причина. Хотя он часто похож на динозавра, он дает всем очень хороший обзор концепций современного программирования. Он НЕ показывает, как работает сам компьютер, как Assembler или даже гораздо более абстрактный язык C. Но пилоты должны уметь летать, а не строить самолет самостоятельно - изучайте JAVA как хорошее основание для любого кода, который вы будете писать на (для резонанса) наиболее распространенных в настоящее время языках: Java, C ++, PHP, C #, Ruby (на рельсах) Python и так далее ...
Максимум
источник
C # 3 с LINQ.
Это отличное введение в функциональное программирование.
Попробуйте написать программу (или решить Project Euler) и заменить как можно больше циклов вызовами LINQ.
Это помогает освоить концепции функционального программирования и ленивых вычислений.
Оттуда можно перейти к F #
источник
Руки вниз, я бы сказал, Haskell. И по двум причинам:
источник
Я бы предложил Scala, если кто-то из мира C / Java.
Это не чисто функциональный язык программирования, но он использует ОО для имитации некоторых функциональных функций программирования (например, использование объекта для имитации функции первого класса и функции высокого порядка).
Поэтому, если вы знакомы с ОО, Scala использует термины, которые вы уже знаете, для объяснения функционального мира.
Я обнаружил, что мне легче понять функциональное программирование в Scala, чем погружаться в более функциональное программирование, такое как Haskell, List ... и т. Д.
источник
Я считаю, что именно функциональные языки помогли мне прийти туда, где я сегодня. Несмотря на то, что я занимаюсь разработкой веб-приложений, концепции, изученные на функциональных языках, помогают мне находить решения проблем, которые в противном случае я бы не увидел. Вот языки, с которыми я работал в моем университете:
Изучение этих языков поможет вам понять мир абстракций и узнать, как создавать блоки кода, которые инкапсулируют другие функции, скрывая детали низкого уровня, чтобы вы могли сосредоточиться на бизнес-целях высокого уровня.
источник
У Ruby одна из самых мощных и интуитивно понятных платформ тестирования, которые я когда-либо использовал. Я не уверен, что действительно понял, как правильно использовать насмешки и заглушки, пока не начал писать тесты в ruby. rSpec и Cucumber - фантастические инструменты.
источник
Существует ряд языков программирования, которые требуют, чтобы вы подумали о проблеме по-новому (по сравнению с тем, к чему вы привыкли.) Наиболее распространенные языки, которые нужно изучать, если им преподают императивный язык, это функциональный и логический язык, например пролог и лисп .
Некоторые языки находятся под сильным влиянием теории категорий, например, ocaml и Haskell, а некоторые являются межпородными языками, такими как Curry (функциональный и логический). Карри, пожалуй, самый умопомрачительный язык из всех, что я знаю, не только потому, что он заполнил весь ум Haskell логическим программированием, но и из-за интеграции с программированием на основе ограничений.
Другой забавный язык - Occam-pi, так как он сильно загружен параллелизмом, но также и из-за недавнего порта arduino .
источник
У всестороннего программиста в рукаве есть несколько сумок, которые включают в себя:
Все это научит вас немного по-другому думать и подходить к проблемам.
источник
Вы не будете правильно изучать любой язык программирования без четкой цели. Зная, что вы хотите с ним делать, вы можете решить, какая программа подойдет вам.
Например, скажем о c #.
C # может создавать веб-программы, консольные программы, автономные исполняемые файлы, игровые программы, программы Silverlight и мобильные программы. Хотя синтаксис почти во всех случаях одинаков, но в каждом сценарии он работает по-разному. Например, автономный исполняемый файл хранит информацию до тех пор, пока она не будет выгружена или программа не будет завершена, в то время как веб-программа уничтожает информацию каждый раз, когда вы загружаете страницу, а в Silverlight вы будете проводить большую часть времени, борясь с XML-файл.
Во-вторых, не тратьте свое время на экзотические языки (например, на Haskel), если говорить по-корпоративному, очень мало программ, которые стоит ваших усилий: java (король горы), c # / vb.net, php и sql.
источник
Существует очень простая программа для написания Java-апплетов под названием Processing
Этот язык даст вам базовое понимание переменных, циклов и тому подобного, если вы только начинаете.
источник
Несколько отличных предложений здесь. Я бы, наверное, пошел с C или C ++ лично. Они заставляют вас разбираться со многими понятиями, которые имеют большое значение для понимания того, как все работает, но имеют тенденцию запутываться в других языках. Просто понимание того, как все работает на самом деле, поможет вам как программисту, даже если язык, который вы используете позже, скрывает некоторые детали.
Сборка - это весело, если вы хотите получить даже немного более низкий уровень, чем этот, но не ожидаете, что с ним многое сделают. :)
источник
Я бы порекомендовал Ruby. Ruby не требует, чтобы вы меняли парадигмы, но побуждает вас работать с несколькими парадигмами. Я думаю, что преимущество этого в том, что вместо того, чтобы расстраиваться из-за того, что вы не можете работать так, как вы привыкли, вы используете другую парадигму из разочарования в связи с ограничениями действий, к которым вы привыкли.
источник