Какие языки программирования наиболее важны для понятий?
По вашему мнению, какие языки программирования наиболее важны для программиста? Я говорю о концепциях, а не о том, насколько практичен язык.
Перечислите языки и причины. Например, Лисп для функционального программирования, JavaScript для ООП на основе прототипов и т. Д.
25 ответов
Должен знать:
1) C (системное программирование, понимание архитектуры машины)
2) Perl или Python или Ruby (практические ежедневные задачи)
3) Java или C# или C++ (ООП, и очень важно, чтобы получить работу в эти дни)
Действительно важно:
1) Haskell или ML (функциональное программирование; меняет способ мышления)
2) Лисп или Схема (сила макросов)
Хорошие дополнения:
1) Forth (очень низкоуровневая, явная операция стека + радость написания собственного интерпретатора)
2) Языки ассемблера (знайте, как работает ваш процессор)
3) Эрланг (параллельная обработка)
4) Пролог (логическое программирование)
5) Smalltalk (настоящий ООП и настоящий интерактивный разработчик)
- На языках ассемблера столько чипов, сколько вы можете выучить для низкого уровня знаний.
- C, чтобы узнать больше практических знаний низкоуровневой работы, так как почти все языки реализованы на C.
- C++ для объектно-ориентированного программирования на вершине низшего уровня совершенства C.
- Паскаль, чтобы научиться работать с сильной типизации.
- Java, чтобы увидеть, как вы можете оградить себя от проблем низкого уровня.
- Perl для изучения регулярных выражений, слабой / динамической типизации и других хороших вещей.
- Python, чтобы увидеть сильную / динамическую / утиную типизацию.
- Рубин, чтобы увидеть, как работает объектно-ориентированная система поверх слабой / динамической типизации Perl-esque.
- Общий Лисп для этого функционального просветления.
- Схема для акцента на рекурсии.
- Emacs Lisp, так что вы можете расширить Emacs.
- Haskell, чтобы увидеть чисто функциональное программирование, выполненное правильно.
- APL, чтобы вы научились не писать код.
- COBOL, чтобы вы могли зарабатывать безумные деньги, поддерживая устаревший код.
- Эрланг, чтобы действительно узнать о параллелизме. (Спасибо Питу Киркхэму за то, что поправили меня.)
- Scala для функционального программирования на JVM.
- Clojure для Lisp-подобного функционального языка в JVM.
- Пролог для понимания логики программирования.
- D, чтобы вы могли понять, почему все фанатики D всегда такие продвинутые.
- C#, так что вы можете программировать для.NET (и Mono).
- F#, чтобы вы могли заниматься функциональным программированием на.NET.
- Форт для стековых языков.
- PHP, чтобы вы могли видеть, как не создавать язык. (Шучу. Изучай PHP, потому что это действительно полезно для веб-разработки.)
- JavaScript, потому что это в основном язык для веб-скриптов на стороне клиента.
- bash для хорошего языка сценариев общего назначения.
- Visual Basic, чтобы вы могли прочитать код, написанный вашим боссом. знак равно
- INTERCAL для "веселья".
- бред, чтобы ты мог мучить своих друзей.
- LOLCODE, чтобы вы могли убедить их оставаться вашими друзьями после того, как подвергаете их мозговому траху.
...И так далее.
C для понимания того, как реализованы большинство других языков (-implementations) и операционных систем
Я думаю, что три языка, которые наилучшим образом сочетают в себе практичность и охват концепций программирования, будут
- С
- питон
- Javascript
На этих языках вы можете изучить низкоуровневое системное программирование, управление указателями и памятью, статическую типизацию, динамическую типизацию, высокоуровневые сценарии, программирование на основе событий, ОО-программирование, функциональное программирование.
Очевидно, что вы не станете таким же чистым введением в функциональное программирование, как, скажем, с Haskell, но вы можете изучить многие концепции Python и (особенно) Javascript.
Это не языки, а парадигмы, которые вы должны знать:
- процедурный (как C, Паскаль)
- объектно-ориентированный (например, Java, C++, Smalltalk)
- функциональный (как Lisp, ML, Scala)
Если вы поняли одну из этих парадигм на одном языке, легко выучить другой язык в той же самой парадигме. И есть еще больше полей, специально поддерживаемых языками, которые важно понимать:
- параллелизм (в Эрланге или Скале)
- декларативные шаблоны (например, в C++ или Prolog)
- динамические языки (например, JavaScript)
Наконец, вы всегда должны знать, что происходит под капотами, так что вам лучше взглянуть на ассемблер.
Я бы сказал:
- С или Ассемблер, чтобы понять, как работает процессор.
- Smalltalk (или C#, Java, Python, Ruby и т. Д.) Для понимания объектно-ориентированного программирования.
- Lisp (любой Lisp, Scheme, Common Lisp, Clojure) для понимания программирования высокого уровня, метапрограммирования (макросов) и т. Д.
- Haskell, чтобы понять вывод типа и другие функциональные концепции.
Если вы знакомы с распределенными системами, я тоже подумаю над изучением Erlang. Это язык, который я рекомендую изучать, пусть даже поверхностный, только ради обучения, даже если вы никогда не используете его для написания реального приложения.
Лучше всего знать разнообразие. Это дает вам лучшую общую картину искусства программирования, плюс вы можете выбрать лучший инструмент для работы.
Мой текущий список будет: -
- C - программирование рядом с машиной.
- Python - программисты нирваны.
- Perl - когда происходит s**t.
- Java - потому что он будет держать вас в работе.
- C# - потому что это будет держать вас в работе.
- шутка, схема или что-то функциональное, чтобы вывести мозг из колеи.
- SQL - для управления большими наборами данных.
- JCL, COBOL, VAX DCL, CShell VB - просто чтобы напомнить вам, как все может быть плохо!
Хороший короткий список:
- C для машинных концепций
- Haskell для функционального программирования
- Smalltalk (или, возможно, Ruby или Simula-67) для объектно-ориентированного программирования
- Пролог для логического программирования
- Значок для возврата и умопомрачительной обработки строк
- Оболочка Bourne для сценариев Unix
Может также включать
- Схема для макросов
- Awk или Perl или... для регулярных выражений
- FORTH для крошечной начальной загрузки чудесного постфикса:-)
Limbo - язык программирования с параллелизмом и каналами, в который C должен эволюционировать. (см. также D, другой преемник C)
Никто другой, кажется, не упоминает какие-либо декларативные языки, поэтому вот несколько:
Пролог - декларативный язык для логического программирования
Modelica - декларативный ОО-язык для систем моделирования.
XSLT - декларативный язык для преобразования XML.
Для параллелизма вы не получаете намного больше, чем шейдерный язык и связанный с ним OpenCL - обычно 512 процессоров параллельно на высокопроизводительном настольном компьютере, а не 4 процессора Erlang параллельно (хотя и со многими запланированными процессами).
Что ж. Я бы сказал, выучить C и JavaScript. Это наиболее широко используемые языки.
Возможно, вы захотите изучить Java / некоторый язык.Net и / или python / ruby: они более удобны, хотя.
Это дает преимущество в том, что все эти языки достаточно хорошо разработаны. Например, не учите PHP или C++, потому что они беспорядок. Они широко используются, вы можете узнать их однажды, но они могут серьезно испортить ваш разум.
Для понятий я бы выбрал ассемблер и Java.
Первый, потому что вы должны знать в мельчайших подробностях, как работают машины.
Второе, потому что вы должны понимать, как оградить себя от интимных подробностей работы машин:-). Под этим я подразумеваю язык с богатым набором структур данных (так что на самом деле Java может быть Python, C++ с Boost и т. Д.).
Это хороший вопрос. Я знаю, что многие люди, в том числе и я, застряли в колее, где мы просто производим код, как если бы кто-то выпускал гамбургеры в Макдональдсе. Кодирование становится слишком механическим - мы понимаем, как добиться цели, но часто мы забываем, почему эти вещи выполняются негласно.
В моем мире C++/C/ObjectiveC научили меня больше всего, хотя я пишу на C# каждый день на работе.
По большей части изучение C++ помогло мне узнать об управлении памятью и о том, как различные объекты хранятся в памяти и т. Д. - о реальной науке программирования. Что действительно открыло мне глаза, так это класс "Programming Paradigms", предлагаемый в Standford, с которого вы можете выйти из iTunes, и я думаю, что YouTube.
Я бы сидел на C/C++, потому что он устанавливает множество основ для множества других языков, используемых по всему миру.
Лично я изучил Java/JavaScript->VB(краткий курс, к счастью)->C#->C++, с щепоткой PHP и Perl поверх всего этого. Лучшая часть этой линии была C#, а затем переместилась за кулисы в C++.
Для веб-программирования: PHP, ANSI-SQL, javascript.
Некоторые люди могут утверждать, что HTML и CSS не являются языками программирования. Но они необходимы для разработки веб-приложений.
Для разработки настольных приложений, C++ с Qt Framework. Qt дает C++ дополнительный "кроссплатформенный" эффект.
Ищите набор различных языков программирования:
- C++ / C# / Java и т. Д.
- C / Ассемблер
- Python, Ruby, Lua, Perl и т. Д.
- sh, awk, sed, регулярные выражения
- Пролог (или аналогичный)
- Haskell / Lisp и т. Д.
Неважно, какие из них вы выбираете, но что вы выбираете один из каждой "категории".
Это может показаться странным, но я впервые научился программировать написание макросов VBScript для Windows. Я использовал шаблон, который доступен здесь http://vbscript-macro-template.blogspot.com/ и я просто добавил к нему, а также попытался понять все, что он сделал. Теперь, спустя несколько лет, я пишу свои собственные приложения для настольных компьютеров и баз данных.
Если вы хотите разбираться в компьютерах и лежащем в их основе оборудовании, C - это самый важный язык, который обычно называют языком общения. Подкаст Stackru имеет тенденцию покрывать это по крайней мере один раз в неделю.
Кажется, ответов на этот вопрос достаточно, поэтому я просто оставлю это на этом.
Пока я читаю ответы, я удивлен, что не заметил упоминаний ActionScript.
Я думаю, что если вы изучите немного C/C++, то немного Java, это подготовит вас к практически всем приличным языкам. Я предпочитаю видеть мой код в действии, и я нахожу Actionscript 3 (не 2 или 1) вместе с Flex (который является MXML) отличным для быстрой демонстрации визуальных концепций.
Таким образом, C & Java помогает изучать синтаксис большинства языков. Actionscript 3 (очень похожий на синтаксис Java) и MXML для возможности быстро и наглядно выразить ваш код.
Вы уже упомянули два, вот еще несколько:
- Java: Java является хорошим примером ООП, потому что вы ДОЛЖНЫ использовать ООП, и с самого начала он был разработан как язык ООП.
- ОСНОВНАЯ ИНФОРМАЦИЯ: Несмотря на то, что она устарела, она является хорошим примером процедурных языков и имеет очень простой синтаксис.
Паскаль или Basic для запуска и освоения основ процедурного программирования.
В школе мы изучали Хаскель для функционального программирования.
И тогда нужно попробовать ассемблер или C для углубления и Java для ООП.
А аргументов для этого нет - это только мой вкус и то, что я пробовал.
Много уже упоминалось, но я бы определенно добавил C++ (уже сделано) по следующей причине:
C++ для изучения, как использовать указатели и получить общее представление о них.
Хотя и обсуждается, что с ++ по-прежнему является "лучшим" языком (все зависит от того, что вы на самом деле хотите сделать), он никогда не повредит пониманию указателей, на тот случай, если они вам понадобятся.
Вы должны знать язык сценариев, чтобы быстрее создавать прототипы своих приложений.
Может быть, python/ruby /perl . Groovy также является альтернативой, если вы парень из Java, которому нравятся его Java-библиотеки.
Псевдокод для чтения / записи документации.:п
Я думаю, что знание C/C++ или любого другого языка низкого уровня поможет вам понять, как работает управляемый язык или язык сценариев. Такие как указатели будут демистифицировать ссылки на переменные.
C - низкоуровневое системное программирование плюс понимание общих понятий о том, как обрабатывается память, стек, кадр стека, куча и так далее. Это полезно для понимания языков более высокого уровня
C++ - в основном библиотека std (разделение общих алгоритмов и контейнеров), шаблоны, пространства имен, но также и концепции ОО. Мета-программирование шаблонов даст вам совершенно другой взгляд на написание программного обеспечения, это выполнение времени компиляции по сравнению с выполнением времени выполнения. Наследование шаблонов (статический и динамический полиморфизм).
Python - система динамических типов, понимание списков - функциональное программирование (?), Нет управления памятью для разработчика, места для отступов
Objective-C - отправка сообщений (может отправлять ноль), система динамических типов (также статическая), поздняя привязка, концепции ОО
Вы должны начать с C и пройти C++, Java и перейти к WinForms, тогда лучше перейти к.NET