Я уже некоторое время изучаю C++ и считаю его очень мощным. Но проблема в том, что уровень абстракции невелик, и я должен сам управлять памятью. Какие языки я могу использовать с более высоким уровнем абстракции.
Ну и что? Это правильный вопрос, и то, что ответ не 42, не означает, что его не стоит обсуждать. Я думал, что идея SO заключалась в том, чтобы ставить вопросы по программированию в начало поиска Google. Это явно укладывается в эти рамки, и я думаю, что многие программисты захотят обсудить этот вопрос.
Вы уже потратили на это 10 лет? Ссылка: norvig.com/21-days.html





Если вы знакомы с синтаксисом и стилем C++, D может показаться вам интересным языком. Или, если вы хотите развиваться, любой из Python, C#, Java, Ruby будет отличным выбором.
Большая причина использовать D - это если вы хотите использовать абстракцию, но не терять доступ к низкому уровню. На самом деле вы можете создавать абстракции поверх ASM, если вы достаточно чокнутые, чтобы попробовать это.
C#, если вы работаете в экосистеме Microsoft.
Python и Ruby, кажется, имеют наибольшую популярность в пространстве Linux / Unix / etc.
ObjectiveC доминирует на Macintosh и iPhone. Самая последняя версия MacOS реализует сборку мусора для подмножества фреймворков, но чтобы использовать остальное, вам придется самостоятельно управлять ресурсами.
Вы можете изучить Java, поскольку она также занимается сборкой мусора, но количество фреймворков, с которыми вам нужно будет ознакомиться, чтобы стать продуктивным Java-разработчиком, обескураживает.
Что ж, если вы ищете очень высокий уровень абстракции и управления памятью, я бы сказал, что lisp будет идеальным кандидатом. Я сейчас учусь, медленно, и это самое интересное, что у меня было с новым языком.
Сказав, что Python или Ruby могут быть лучшим компромиссом между выразительностью и популярностью. Фреймворк Python Django - один из лучших фреймворков RAD, если вы ищете материал для веб-приложений.
то же Лисп, .. или схема
Даже если вы никогда им не пользуетесь, это удобно. Я только В самом деле получил программирование шаблонов после его изучения.
Другой - пролог. это ставит вас в непоследовательное мышление.
Поскольку вы уже знакомы с C++, следующим шагом будет изучение .Net с помощью управляемый C++ или управляемых расширений для C++ .. это даст вам шаг в большой мир .Net framework .. Как только вы поймете структуру, она станет более удобной чтобы изучить другие языки .Net, такие как C#, VB.Net и т. д.
Одной из областей, в которой MC++ выделяется и является уникальной среди языков .NET, является возможность взять существующее неуправляемое (C++) приложение, перекомпилировать его с помощью переключателя / clr, заставить его сгенерировать MSIL, а затем запустить под CLR. Этот выдающийся подвиг удачно назван "Это просто работает (IJW)!" Есть некоторые ограничения, но по большей части приложение просто запускается. Код C++ может состоять из устаревших операторов printf, MFC, ATL или даже шаблонов!
Я не понимаю, как управляемый С ++ достигает более высокого уровня абстракции. Блаб с управляемой памятью по-прежнему остается Блабом.
Это не про C++. Речь идет об изучении .Net, а затем упрощает изучение других языков .Net, таких как C#, VB.Net и т. д.
Устаревший - C++ / CLR - гораздо более чистая замена, но больше не является первоклассным языком программирования .Net, поскольку в нем отсутствует поддержка WPF или LINQ.
Попытка попробовать что-то действительно иностранное, например, Haskell, позволит вам думать по-разному. Это также помогает вам мыслить рекурсивно. В C++ есть рекурсия, но он проникает во многие другие части функциональных языков.
Я должен усилить это - Haskell предоставит вам функциональное программирование, / hard /. И это хорошее упражнение для вашего ума программирования в целом. Функциональное программирование постепенно включается во многие другие языки - все будет совсем несложно, если вы изучили Haskell. Кроме того, f'nal, вероятно, будет позади будущих языков параллельного программирования, и он уже стоит за Hadoop / Map-Reduce, очень большой инфраструктурой распределенного программирования в Google, Yahoo, Facebook и других местах. Вы не можете превзойти это как вложение.
.. о да, и это GC'd и на настолько высоком уровне абстракции, насколько ваш мозг может выдержать. Причина, по которой Haskell отличается от других функционально-ориентированных языков, заключается в том, что Haskell является чистым окончательным, без каких-либо выходов. Но чтобы это не звучало пугающе, посмотрите: Learnyouahaskell.com
Java, C#, Ruby, Python и JavaScript, вероятно, станут перед вами большим выбором.
Ява и C# - не очень разные языки. Это большое отличие от C++ заключается в управлении памятью (т.е. объекты автоматически освобождаются, когда на них больше не ссылаются). Вы бы выбрали их, если вас интересуют приложения в стиле рабочего стола или статическая типизация (и вы, вероятно, выбираете между ними, исходя из того, как вы относитесь к Microsoft и платформе Windows). В обоих случаях вы найдете гораздо более богатые стандартные библиотеки, чем вы привыкли в C++.
Python и Рубин делают шаг в сторону от статической типизации в мир, где вы можете вызывать и использовать методы для любого объекта (и терпят неудачу во время выполнения, если его там нет). Это и благословение (намного меньше шаблонного кода), и проклятие (компилятор больше не может отлавливать эти ошибки за вас). И снова вы обнаружите, что они имеют более богатые стандартные библиотеки и снова более высокий уровень, чем Java / C#. Производительность - это главный недостаток, поскольку Python, насколько я понимаю, несколько быстрее, чем Ruby. Чтобы выбирать между ними, вы, вероятно, выберете Ruby, если вам интересна веб-разработка для сообщества фреймворков Ruby on Rails, или в противном случае выберете Python.
JavaScript еще больше отличается от C++ тем, что он полностью исключает классы. Объекты просто клонируются из других объектов и могут иметь методы и свойства, добавленные к ним во время выполнения. Очень гибкий, но также очень простой в использовании. JavaScript - единственный реальный выбор, если вы заинтересованы в запуске приложений в браузере, который действительно становится самостоятельной платформой. Вы обнаружите, что стандартные библиотеки довольно ограничены, если вы мало что делаете с браузером, но есть довольно много хороших фреймворков, которые заполняют некоторые из пробелов.
Еще несколько интересных, но более нишевых вариантов
Java МНОГОЕ используется для веб-разработки.
на Objective-C: но у него есть схема подсчета ссылок, которая значительно упрощает жизнь, чем управление памятью вручную., пока вы не коснетесь каких-либо потоков или вам не понадобится переносить код с Java.
попробуйте C# много :)
Я бы сказал, что из вашего вопроса вы, вероятно, еще не закончили изучать C++. Если вы все еще занимаетесь управлением памятью, вам еще предстоит пройти долгий путь, мой друг!
Ознакомьтесь с auto_ptr и shared_ptr - ознакомьтесь с библиотеками Boost.
Точно так же с абстракцией - на что вы конкретно жалуетесь? AFAIK, вы не можете сделать с C++ так много, что присутствует в других строго типизированные языки.
Я знаю, что это не ответ на ваш вопрос - вы хотите двигаться вперед, но C++ - одна из тех вещей, в которых вы никогда не перестанете учиться. Если вам станет скучно, сделайте небольшой набег на шаблоны и метапрограммирование шаблонов ...
Точно. Лучшее в C++ - это то, что вы можете писать на любом уровне абстракции, который вам нравится, используя множество различных парадигм. Доступные уровни абстракции настолько высоки, насколько вы хотите!
Собирался ответить тем же :)
Я рекомендую python, поскольку это не только привлекательный язык, но также очень широко используется и легко интегрируется с C++ через Boost.Python.
Но, как сказал Томи, в C++ есть что исследовать, и с помощью библиотек Boost разрабатывать его становится действительно легко.
Пока я вижу много отличных предложений. Однако я думаю, что чего-то не хватает, ассемблер.
Зачем изучать язык ассемблера?
Некоторые ресурсы на ассемблере:
Хотя аспект отладки, безусловно, имеет свои достоинства, фраза «редкие обстоятельства» - это преуменьшение. В наши дни оптимизирующие компиляторы достаточно умны, поэтому крайне редко приходится писать на ассемблере для повышения производительности. Кроме того, он хуже, чем специфичный для ОС, он специфичен для машина.
Проблема в том, что это самореализация. Если у вас нет молотка, ничто не похоже на гвоздь. Многие разработчики работают над сборкой каждый день, и им, вероятно, нравится тот факт, что люди думают, что это очень необычно, потому что это означает, что их навыки редки, и они зарабатывают больше денег.
Конечно, но как это использовать более высокий уровень абстракции?
Я согласен с Мэттом Шеппардом. Единственный способ, чтобы ассемблер считался более высоким уровнем, чем C++, - это для разработчика код в перевернутом виде ... Более серьезно, даже если ваш пост интересен, он не отвечает на вопрос. Или я пропустил какую-то новую технологию, например, сборщик мусора для сборки?
... также очень полезно, когда вам нужно разобрать аварийные дампы из приложений, которые потерпели крах на удаленных сайтах, и все, что у вас есть, это двоичный беспорядок аварийного дампа ...
Вместо того, чтобы предлагать конкретный язык, я бы порекомендовал вам выбрать любой язык или языки, которые предлагают следующие 4 функции:
Идея здесь состоит в том, чтобы расширить вашу перспективу программирования, включив в нее концепции, которые язык C++ не предлагает вам из коробки.
Это зависит от того, чем вы хотите заниматься. Если у вас есть какие-то конкретные задачи, которые вы хотите решить, посмотрите на языки, которые лучше всего подходят для этих типов задач. Лучший способ выучить язык - это использовать его.
Если вы хотите абстрагироваться от управления памятью, мне сразу приходит на ум Java.
Я бы сказал, это зависит от того, какое программирование вы хотите попробовать. Если вы хотите оставаться на стороне ООП, изучите Python или Рубин, оба языка предоставляют простой способ создания привязок для использования вашего кода C++ из сценария (из соображений эффективности).
Если вам нужен другой подход к программированию, изучите «функциональный» язык, такой как Lisp или Haskell.
А если вам нужно включить быстрый и небольшой язык сценариев в ваше приложение C++, попробуйте Lua.
И последнее, но не менее важное: если вы знаете Java и ненавидите ее, вы можете попробовать Scala, язык, на котором вы можете смешивать свои классы Java с кодом Scala, что очень интересно.
Схема.
Маленький интриган и Структура и интерпретация компьютерной программы удивят ваш разум странными и чудесными способами.
DrScheme - хорошая IDE для новичков. Язык программирования схем - хорошая бесплатная ссылка.
Я предлагаю изучить дизайн базы данных и язык запросов, такой как SQL.
Вы можете начать с настольного инструмента, такого как Microsoft Access, или использовать бесплатный SQL Server Express, Postgre или MySQL.
Я бы сказал, начнем с Python. Он имеет более высокий уровень абстракции и учит вас важности отступов и создания «красивого» кода. Не то чтобы "красивый" очень важен, но он сделает будущего сопровождающего ваш код намного счастливее :)
Там много примеров кода, и если вы работаете с Linux, существуют различные дистрибутивы, у которых есть все (или большая часть) инструментов, основанных на этом языке. Если вам нравится разбираться в том, как работает управление операционной системой (что делает большинство программистов), это хорошее начало. Прежде, чем я получу флейм, я сказал, что управление, а не собственно ядро, для которого вам в основном нужен C, и вы должны это покрыть.
С другой стороны, было бы неплохо погрузиться в аспекты C, игнорировать объектно-ориентированные материалы и изучить функциональное программирование. Если вы пойдете по этой дороге, я также предлагаю начать с базового языка ассемблера, как предлагалось в одном из верхних постов. Возможно, HLA (High-Level Assembly by Randall Hyde, он написал отличную книгу под названием Art of Assembly Language Programming) станет хорошим началом. Вы либо научитесь любить управление памятью, либо ненавидите его всю оставшуюся жизнь. Полезно знать, если вы хотите начать карьеру в программировании :)
Однако, если вы хотите заработать себе на жизнь программированием, Java и J2EE - это легкие деньги, если вы знаете, что делаете. ИМХО это очень быстро надоедает.
Что ж, я думаю, что в изучении языков программирования нет заранее определенного маршрута. Вы можете выучить следующий язык, исходя из ваших потребностей в работе, академических исследований, просто для развлечения и т. д. Есть много вариантов.
Если вы чувствуете себя комфортно в C++, вы можете спуститься и изучить некоторую сборку. Это мрачное искусство, но вы будете рады, если столкнетесь с тяжелым сеансом отладки.
С точки зрения большей абстракции, Smalltalk чрезвычайно увлекателен, чист от ООП и на 100% динамичен (отладка - это приятное занятие, чего нет в языках со статической типизацией). Dolphin Smalltalk - хорошая реализация для Windows, даже бесплатная версия сообщества дает достаточно, чтобы с ней можно было поиграть. В многоплатформенных виртуальных машинах Smalltalk выберите Visualworks или Squeak. Visualworks чрезвычайно стабилен и поставляется с большим количеством документации.
Python сегодня используется во многих, многих областях. Я ничего не знаю о Python, кроме базового синтаксиса и семантики, но сегодня он требуется для многих работ.
Ява это, ну ява. Интересно, что Java никогда меня не привлекала. Вы можете заинтересоваться Java, хотя. Спросите здесь о преимуществах его использования по сравнению с C++ или другими языками ООП.
Для веб-разработки используйте Javascript, особенно учитывая волну AJAX. В те дни становится интересно. Мы говорили о Smalltalk, хорошо, Seaside - это потрясающая среда для веб-разработки. Работает (по крайней мере, пробовал) Squeak / Visualworks ... Красиво.
Что ж, есть еще много чего: Scheme, LISP, Ruby, Lua, Bash (!), Perl (тьфу), Haskell ... Попробуйте их все и получайте удовольствие!
Почему бы не изучить Qt? Это отличная среда разработки приложений, доступная на всех платформах и даже на мобильных устройствах!
вот что я тоже хотел сказать. С помощью всего лишь небольшого количества кода вы можете создавать действительно отличные программы с графическим интерфейсом пользователя.
Лично я программировал на Java, Python, C / ++, и мне больше всего нравится Python. Хотя C++ может делать все, что умеет Python, и даже больше, я написал программу Python примерно с 10 строками, что на C++ заняло бы около 50. Итак, мораль истории - используйте python.
Если вы еще этого не сделали, попробуйте язык сценариев. Это должно изменить то, как вы работаете и думаете. Надеюсь, в хорошем смысле :)
Я должен дать отдельный ответ для Perl. В то время как Python примерно эквивалентен по функциональности и считается более чистым и современным, Perl обладает своей собственной элегантностью - элегантностью чистого прагматизма. Он также может похвастаться действительно отличной библиотечной поддержкой. Взгляните на Perl, чтобы расширить свой мозг в направлении, противоположном Haskel :) (хотя поклонники Perl утверждают, что его можно использовать для функционального программирования).
Clojure стоит изучить, поскольку он соответствует обоим вашим критериям:
Я приведу несколько примеров, используя только одну абстракцию: в Clojure вы можете управлять практически любой структурой данных через абстракция последовательности.
;; treat a vector as a sequence and reverse it
(reverse [1 2 3 4 5])
=> (5 4 3 2 1)
;; Take 10 items from a infinite sequence
(take 10 (range))
=> (0 1 2 3 4 5 6 7 8 9)
;; Treat a String as a sequence of characters, calculate the frequencies
(frequencies "abracadabra")
=> {\a 5, \b 2, \r 2, \c 1, \d 1}
;; Define an infinite lazy sequence of fibonacci numbers, take the first 10
(def fibs (concat [0 1] (lazy-seq (map + fibs (rest fibs)))))
(take 10 fibs)
=> (0 1 1 2 3 5 8 13 21 34)
Еще один из тех вопросов, на которые невозможно ответить. Вы увидите повсюду посты, и все это уже обсуждалось ранее.