Какие языки вы бы предложили программисту изучать не потому, что они будут много использовать язык (но они могут иметь), а потому, что это улучшит навыки программирования в целом и позволит мыслить иначе (и, возможно, лучше) ) путь?
Какие языки вы бы предложили программисту изучать не потому, что они будут много использовать язык (но они могут иметь), а потому, что это улучшит навыки программирования в целом и позволит мыслить иначе (и, возможно, лучше) ) путь?
Ответы:
для «нормального» программирования и алгоритмов:
для изменения мысли:
за то, что ты разрушил свой ум и перешёл черту между падаваном и мастером-джедаем:
Не забывайте 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 ... и т. Д.
Я считаю, что именно функциональные языки помогли мне прийти туда, где я сегодня. Несмотря на то, что я занимаюсь разработкой веб-приложений, концепции, изученные на функциональных языках, помогают мне находить решения проблем, которые в противном случае я бы не увидел. Вот языки, с которыми я работал в моем университете:
Изучение этих языков поможет вам понять мир абстракций и узнать, как создавать блоки кода, которые инкапсулируют другие функции, скрывая детали низкого уровня, чтобы вы могли сосредоточиться на бизнес-целях высокого уровня.
Существует ряд языков программирования, которые требуют, чтобы вы подумали о проблеме по-новому (по сравнению с тем, к чему вы привыкли.) Наиболее распространенные языки, которые нужно изучать, если им преподают императивный язык, это функциональный и логический язык, например пролог и лисп .
Некоторые языки находятся под сильным влиянием теории категорий, например, 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 не требует, чтобы вы меняли парадигмы, но побуждает вас работать с несколькими парадигмами. Я думаю, что преимущество этого в том, что вместо того, чтобы расстраиваться из-за того, что вы не можете работать так, как вы привыкли, вы используете другую парадигму из разочарования в связи с ограничениями действий, к которым вы привыкли.