<p>I have been learning C++ for a while now, I find it very powerful. But, the problem is the the level of abstraction is not much and I have to do memory management myself. 
What are the languages that I can use which uses a higher level of abstraction.</p>

[{'answer_id': 61113, 'author': 'Greg Hewgill', 'author_id': 893, 'author_profile': 'https://Stackoverflow.com/users/893', 'pm_score': 2, 'selected': False, 'text': '<p>If you\'re comfortable with C++ syntax and style, you might find <a href="http://www.digitalmars.com/d/" rel="nofollow noreferrer">D</a> to be an interesting language. Or if you want to branch out, any of Python, C#, Java, Ruby would be excellent choices.</p>\n'}, {'answer_id': 61114, 'author': 'DGentry', 'author_id': 4761, 'author_profile': 'https://Stackoverflow.com/users/4761', 'pm_score': 2, 'selected': False, 'text': "<p>C# if you're in the Microsoft ecosystem.</p>\n\n<p>Python and Ruby seem to have the most traction in the Linux/Unix/etc space.</p>\n\n<p>ObjectiveC is dominant on the Macintosh and iPhone. The most recent MacOS implements garbage collection for a subset of the frameworks, but to use the rest you'd have to do resource management yourself.</p>\n\n<p>You could learn Java, as it does garbage collection as well, but the number of frameworks you'd need to become familiar with to be a productive Java developer is daunting.</p>\n"}, {'answer_id': 61117, 'author': 'Tom Martin', 'author_id': 5303, 'author_profile': 'https://Stackoverflow.com/users/5303', 'pm_score': 2, 'selected': False, 'text': '<p>Well if you\'re looking for a very high level of abstraction and memory management then I\'d say lisp would be an ideal candidate.  I\'m <a href="http://gigamonkeys.com/book/" rel="nofollow noreferrer">learning</a> it now, slowly, and it\'s the most fun I\'ve had with a new language.</p>\n\n<p>Having said that Python or Ruby may be a better compromise between expressiveness and popularity.  Python\'s Django framework is one of the better RAD frameworks if you\'re looking for web application stuff.</p>\n'}, {'answer_id': 61127, 'author': 'BCS', 'author_id': 1343, 'author_profile': 'https://Stackoverflow.com/users/1343', 'pm_score': 2, 'selected': False, 'text': "<p>ditto Lisp,.. or scheme</p>\n\n<p>Even if you don't ever use it, it's handy. I only <em>really</em> got template programming after learning it.</p>\n\n<p>Another one is prolog. it puts you in a non sequential mindset.</p>\n"}, {'answer_id': 61128, 'author': 'Gulzar Nazim', 'author_id': 4337, 'author_profile': 'https://Stackoverflow.com/users/4337', 'pm_score': 0, 'selected': False, 'text': '<p>Since you are already into C++, next step would be to learn .Net through <a href="http://www.ondotnet.com/pub/a/dotnet/2003/01/13/intromcpp.html" rel="nofollow noreferrer">managed C++</a> or managed extensions for C++..this will get you a step in the big world of .Net framework..Once you understand the framework, makes it more comfortable to learn other .Net languages like C#, VB.Net etc.</p>\n\n<p><em>One of the areas that MC++ excels in, and is in fact unique in amongst the .NET languages, is the ability to take an existing unmanaged (C++) application, recompile it with the /clr switch, have it generate MSIL and then run under the CLR. This extraordinary feat is aptly termed "It Just Works (IJW)!" There are some limitations, but for the most part, the application will just run. The C++ code can consist of old-fashioned printf statements, MFC, ATL, or even templates!</em></p>\n'}, {'answer_id': 61135, 'author': 'Chris de Vries', 'author_id': 3836, 'author_profile': 'https://Stackoverflow.com/users/3836', 'pm_score': 3, 'selected': False, 'text': '<p>Trying something really foreign like Haskell will allow you to think in different ways. It also helps you to think recursively. C++ has recursion but it infiltrates many more parts of functional languages.</p>\n'}, {'answer_id': 61138, 'author': 'Matt Sheppard', 'author_id': 797, 'author_profile': 'https://Stackoverflow.com/users/797', 'pm_score': 6, 'selected': False, 'text': '<p>Java, C#, Ruby, Python and JavaScript are probably the big choices before you.</p>\n\n<p><a href="http://en.wikipedia.org/wiki/Java_(programming_language)" rel="noreferrer">Java</a> and <a href="http://en.wikipedia.org/wiki/C_Sharp" rel="noreferrer">C#</a> are not hugely different languages. This big difference you\'ll find from C++ is memory management (i.e. objects are automatically freed when they are no longer referenced). You would chose these if you were interested in desktop style applications, or keen on static typing (and you\'d probably choose between them based on how you feel towards Microsoft and the Windows platform). In both cases you\'ll find much richer standard libraries than you\'ll be used to from C++.</p>\n\n<p><a href="http://en.wikipedia.org/wiki/Python_(programming_language)" rel="noreferrer">Python</a> and <a href="http://en.wikipedia.org/wiki/Ruby_(programming_language)" rel="noreferrer">Ruby</a> take a step away from static typing, into a world where you can call and method on any object (and fail at runtime if it\'s not there). That is both a blessing (a lot less boilerplate code) and a curse (the compiler can\'t catch those errors for you anymore). Once again, you\'ll find they have richer standard libraries, and are higer level again than Java / C#. Performance is the main downfall, with Python being somewhat faster than Ruby as I understand it. To choose between them, you\'d probably choose Ruby if you\'re interesting in web development for the Ruby on Rails framework community, and otherwise go with Python.</p>\n\n<p><a href="http://en.wikipedia.org/wiki/JavaScript" rel="noreferrer">JavaScript</a> is even more different from C++ in that it does away with classes entirely. Objects are simply cloned from other objects and can have methods and properties added to them at runtime. Very flexible, but also very easy to make into a total mess. JavaScript is the only real choice if you\'re interested in running applications in a browser, which is really coming into its own as a platform. You\'ll find the standard libraries available rather limited if you\'re not doing a lot with the browser, but there are quite a few good frameworks which fill in some of the gaps.</p>\n\n<p>Some other interesting, though more niche choices are</p>\n\n<ul>\n<li><a href="http://en.wikipedia.org/wiki/Smalltalk" rel="noreferrer">Smalltalk</a> - More or less in the Ruby and Python camp, and significantly faster as I understand it. Be careful though _ I\'ve seen lots of good engineers learn Smalltalk and never come back ;)</li>\n<li><a href="http://en.wikipedia.org/wiki/Objective-C" rel="noreferrer">Objective-C</a> - When C went object oriented, C++ went one way (static typing), and Objective-C went the other (dynamic typing). It\'s quite Smalltalk inspired, and has a good standard library if you\'re in Mac / iPhone land. In terms of memory management, unlike everything else I\'ve listed, it\'s not garbage collected (though that\'s now an option on Mac OS X 10.5), but it does have a reference counting scheme which makes life significantly simpler than managing memory by hand.</li>\n<li><a href="http://en.wikipedia.org/wiki/Lisp_programming_language" rel="noreferrer">Lisp</a> - I\'ve never learnt it myself beyond what I needed for minor Emacs hacking. As I understand it, the libraries were nice in their day, but though the language remains supremely elegant, they\'ve fallen a little behind the times.</li>\n<li><a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)" rel="noreferrer">Haskel</a> - If you wanted a complete break from objects and classes, Haskel and it\'s functional approach is an interesting way to go (or Lisp as above, or <a href="http://en.wikipedia.org/wiki/F_Sharp_programming_language" rel="noreferrer">F#</a> if you are in .Net land). Basically, you\'re giving up loops and variables in favour of doing everything recursively. Takes some time to wrap your mind around, and probably isn\'t practical for most real world applications, but it\'s a good one to learn.</li>\n<li><a href="http://en.wikipedia.org/wiki/Eiffel_(programming_language)" rel="noreferrer">Eiffel</a> - I love it - Very clean syntax, and designed for serious engineering type systems. Statically types like C# and Java, and with a weaker standard library, but it will make you really think about language and class library design.</li>\n<li><a href="http://en.wikipedia.org/wiki/ActionScript" rel="noreferrer">ActionScript</a> and <a href="http://en.wikipedia.org/wiki/Adobe_Flex" rel="noreferrer">Flex</a> - The programming interface to Flash, which is based on what seems to be a statically typed version of JavaScript. I\'ve played with it a bit, and it\'s quite slick if you\'re interested in developing media based applications. You can also push beyond the browser with Flex and into the <a href="http://en.wikipedia.org/wiki/Adobe_Integrated_Runtime" rel="noreferrer">Air</a> platform to build real desktop apps.</li>\n</ul>\n'}, {'answer_id': 61152, 'author': 'Peter', 'author_id': 6326, 'author_profile': 'https://Stackoverflow.com/users/6326', 'pm_score': 1, 'selected': False, 'text': '<p>try c# much :)</p>\n'}, {'answer_id': 61186, 'author': 'Thomi', 'author_id': 1304, 'author_profile': 'https://Stackoverflow.com/users/1304', 'pm_score': 5, 'selected': False, 'text': "<p>I would say that from your question you probably haven't finished learning about C++. If you're still doing your own memory managment then you still have a long way to go my friend!</p>\n\n<p>Check out the auto_ptr and shared_ptr - check out the Boost libraries.</p>\n\n<p>Similarly with abstraction - what are you specifically complaining about? AFAIK there's not much you can't do with C++ that is present in other <strong>strongly-typed languages</strong>.</p>\n\n<p>I know this doesn't answer your question - you want to move forwards, but C++ is one of those things where you never really stop learning. If you get bored, take a brief foray into templates and template meta-programming...</p>\n"}, {'answer_id': 61192, 'author': 'macbirdie', 'author_id': 5049, 'author_profile': 'https://Stackoverflow.com/users/5049', 'pm_score': 0, 'selected': False, 'text': '<p>I recommend python as it\'s not only a sexy language, but also very widely used and easy to integrate with C++ through <a href="http://www.boost.org/doc/libs/1_36_0/libs/python/doc/index.html" rel="nofollow noreferrer">Boost.Python</a>.</p>\n\n<p>But as Thomi said, there\'s lot to explore in C++ and with the help of Boost libraries it\'s becoming really easy to develop in.</p>\n'}, {'answer_id': 61199, 'author': 'Wedge', 'author_id': 332, 'author_profile': 'https://Stackoverflow.com/users/332', 'pm_score': 4, 'selected': False, 'text': '<p>I see a lot of excellent suggestions so far. However, I think there\'s something missing, assembler.</p>\n\n<p><strong>Why learn assembly language?</strong></p>\n\n<ul>\n<li><strong>It\'s not as difficult as you may think</strong>. Assembly language is a lot smaller in scope than many modern languages, there are a few tricks you need to understand for it to make sense, but it\'s not that complicated.</li>\n<li><strong>It broadens your knowledge base.</strong> Knowing the fundamentals is almost always beneficial, even when working at a high level.</li>\n<li><strong>It can be extremely useful when debugging.</strong> Especially debugging native code without the source, the knowledge you gain from learning assembler enhances your ability to debug in these situations by leaps and bounds.</li>\n<li><strong>It gives you more options.</strong> When the rare circumstance comes up where assembly code is needed you won\'t be helpless.</li>\n<li><strong>It\'s good for your resume.</strong> It shows that you learn beyond just the bare minimum needed to keep your current job, it shows a curiosity about fundamentals, and it puts you in a different class of programmers, and that class tends to be more experienced and more capable.</li>\n<li><strong>It\'s just plain cool.</strong></li>\n</ul>\n\n<p>Some assembly language resources:</p>\n\n<ul>\n<li><a href="http://www.sandpile.org/" rel="noreferrer">Sandpile.org</a> (assembly language / processor architecture reference)</li>\n<li><a href="http://burks.brighton.ac.uk/burks/language/asm/asmtut/asm1.htm" rel="noreferrer">Gavin\'s Guide to 80x86 Assembly</a> (a decent online tutorial)</li>\n<li><a href="https://rads.stackoverflow.com/amzn/click/com/0132383101" rel="noreferrer" rel="nofollow noreferrer">Assembly Language for Intel-Based Computers (5e)</a> (a decent textbook for x86 assembly)</li>\n</ul>\n'}, {'answer_id': 61247, 'author': 'grok', 'author_id': 4859, 'author_profile': 'https://Stackoverflow.com/users/4859', 'pm_score': 0, 'selected': False, 'text': '<p>Rather than suggest a specific language, I would recommend you pick any language or languages that offer the following 4 features:</p>\n\n<ol>\n<li>Automatic Memory Management</li>\n<li>Reflection/Introspection</li>\n<li>Declarative/Functional constructs(e.g. lambda functions)</li>\n<li>Duck Typing</li>\n</ol>\n\n<p>The idea here is to expand your programming perspective to include concepts that the C++ language does not offer you out of the box. </p>\n'}, {'answer_id': 61312, 'author': 'bruceatk', 'author_id': 791, 'author_profile': 'https://Stackoverflow.com/users/791', 'pm_score': 0, 'selected': False, 'text': '<p>It depends on what you want to do.  If you have some specific tasks that you are interested in accomplishing then look at languages that are best for those types of tasks. The best way to learn a language is to actually use it.</p>\n'}, {'answer_id': 61857, 'author': 'Soumitra', 'author_id': 10844, 'author_profile': 'https://Stackoverflow.com/users/10844', 'pm_score': 1, 'selected': False, 'text': '<p>if you want to abstract memory management, Java comes to my mind instantly. </p>\n'}, {'answer_id': 70035, 'author': 'Stacker', 'author_id': 6574, 'author_profile': 'https://Stackoverflow.com/users/6574', 'pm_score': 2, 'selected': False, 'text': '<p>I\'d say it depends on the kind of programming you want to try. If you want to stay on the OOP side, learn <a href="http://python.org/" rel="nofollow noreferrer">Python</a> or <a href="http://www.ruby-lang.org/en/" rel="nofollow noreferrer">Ruby</a>, both languages provide an easy way to create bindings to use your C++ code from a script (for efficiency reasons).</p>\n\n<p>If you need another approach to programming, learn a "functional" language like Lisp or Haskell.</p>\n\n<p>And if you need to include a fast and small scripting language inside your C++ application, try <a href="http://lua.org" rel="nofollow noreferrer">Lua</a>.</p>\n\n<p>Last but not least, if you know Java and hate it, you can try <a href="http://www.scala-lang.org/" rel="nofollow noreferrer">Scala</a>, a language where you can mix your Java classes with your Scala code, very interesting.</p>\n'}, {'answer_id': 70061, 'author': 'underspecified', 'author_id': 8146, 'author_profile': 'https://Stackoverflow.com/users/8146', 'pm_score': 2, 'selected': False, 'text': '<p>Scheme.</p>\n\n<p><a href="http://www.ccs.neu.edu/home/matthias/BTLS/" rel="nofollow noreferrer">The Little Schemer</a> and <a href="http://mitpress.mit.edu/sicp/" rel="nofollow noreferrer">Structure and Interpretation of Computer Program</a> will stretch your mind in strange and wonderful ways.</p>\n\n<p><a href="http://www.drscheme.org/" rel="nofollow noreferrer">DrScheme</a> is a good IDE for beginners. <a href="http://www.scheme.com/tspl3/" rel="nofollow noreferrer">The Scheme Programming Language</a> makes a good, free reference.</p>\n'}, {'answer_id': 73986, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 1, 'selected': False, 'text': '<p>I suggest learning database design and a query language such as SQL.</p>\n\n<p>You can start with a desktop tool like Microsoft Access or use the free SQL Server Express or Postgre or MySQL.</p>\n'}, {'answer_id': 74203, 'author': 'Kristian', 'author_id': 12911, 'author_profile': 'https://Stackoverflow.com/users/12911', 'pm_score': 0, 'selected': False, 'text': '<p>I\'d say get started with Python. It has a higher level of abstraction and it teaches you the importance of indenting and making "pretty" code. Not that "pretty" is very important, but it will make the future maintainer of your code a lot happier :)</p>\n\n<p>There\'s a lot of example code out there, and if you are into Linux there are various distributions out there who have all (or most) of their tools based on the language. If you like digging into how managing an operating systems works (something most programmers do) it\'s a good start. Before I get the flames I said managing, not the actual kernel stuff for that you mostly need C and you should have that covered.</p>\n\n<p>On the other hand it might be nice to dive into the C side of things, ignore the OO stuff and learn functional programming. If you head down that road I also suggest to start with basic assembly language like one of the upper posts suggested. Maybe HLA (High-Level Assembly by Randall Hyde, he wrote a great book called  Art of Assembly Language Programming) is a good start. You\'ll either learn to love memory management or hate it for the rest of your live. Good to know in case you want to start a career in programming :)</p>\n\n<p>However if you\'re looking to make a job out of programming, Java and J2EE is an easy money maker if you know what you\'re doing. IMHO it gets boring really quick though.</p>\n'}, {'answer_id': 388049, 'author': 'Hernán', 'author_id': 48026, 'author_profile': 'https://Stackoverflow.com/users/48026', 'pm_score': 1, 'selected': False, 'text': "<p>Well I think there is no predefined route in learning programming languages. You may learn your next lang based on your job needs, academic research, just for fun, etc. There are many options. </p>\n\n<p>In you feel comfortable in C++, you can go down and learn some assembly. It's a dark art but you'll be glad when you encounter some hard debugging session. </p>\n\n<p>In terms of more abstraction, Smalltalk is extremely fun, OOP-pure and 100% dynamic (debugging is a pleasant thing to do, which is not in static-typed languages). Dolphin Smalltalk is a good implementation for Windows, even the free community edition gives enough to play with. In multiplatform Smalltalk VMs, go for Visualworks or Squeak. Visualworks is extremely stable and comes with a lot of documentation.</p>\n\n<p>Python is used today in many, many fields. I don't know anything about Python excepting the basic syntax and semantics, but it's required today for many jobs.</p>\n\n<p>Java it's, well Java. It's interesting that Java never catch on me. You may get interested on Java, altough. Ask here for advantages of using it over C++ or other OOP languages.</p>\n\n<p>For Web development go for Javascript, specially considering the AJAX wave. It's getting interesting those days. We've talked about Smalltalk, all right, Seaside is an amazing  framework for web development. It works (at least I tried on) Squeak /Visualworks... it's beatiful.</p>\n\n<p>Well, there are a lot of more to get your hands on: Scheme, LISP,  Ruby, Lua, Bash (!), Perl (ugh), Haskell... Try them all and have fun!</p>\n"}, {'answer_id': 577513, 'author': 'Özgür', 'author_id': 12652, 'author_profile': 'https://Stackoverflow.com/users/12652', 'pm_score': 1, 'selected': False, 'text': '<p><a href="http://en.wikipedia.org/wiki/Qt_toolkit" rel="nofollow noreferrer">Qt</a></p>\n'}, {'answer_id': 577530, 'author': 'Xolve', 'author_id': 69746, 'author_profile': 'https://Stackoverflow.com/users/69746', 'pm_score': 1, 'selected': False, 'text': '<p>Why not learn <strong>Qt</strong>? Its a great application development framework available on all platforms and even mobile devices!</p>\n'}, {'answer_id': 1351912, 'author': 'Mylo', 'author_id': 164623, 'author_profile': 'https://Stackoverflow.com/users/164623', 'pm_score': 0, 'selected': False, 'text': '<p>Personally, I have been programming in Java, Python, C/++ and my favorite has to be python. Although C++ can do everything Python can do and more, I wrote a Python program with about 10 lines that would take about 50 in C++. So, moral of the story, use python.</p>\n'}, {'answer_id': 2959192, 'author': 'Geo', 'author_id': 31610, 'author_profile': 'https://Stackoverflow.com/users/31610', 'pm_score': 0, 'selected': False, 'text': "<p>If you haven't already, try out a scripting language. It should change the way you work &amp; think. Hopefully, in a good way :)</p>\n"}, {'answer_id': 2959295, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 0, 'selected': False, 'text': "<p>I've got to put up a separate answer for Perl. While Python is roughly equivalent in functionality and considered more clean and modern, Perl has an elegance all of its own - the elegance of pure pragmatism. It also boasts a truly great library support. Take a look at Perl to expand your brain in the direction opposite to Haskel :) (although Perl aficionados claim that it can be used for functional programming). </p>\n"}, {'answer_id': 12147944, 'author': 'mikera', 'author_id': 214010, 'author_profile': 'https://Stackoverflow.com/users/214010', 'pm_score': 1, 'selected': False, 'text': '<p>Clojure is well worth exploring as it meets both of your criteria:</p>\n\n<ul>\n<li>It has a strong emphasis on programming with higher level abstractions. see e.g. this video: <a href="http://www.infoq.com/presentations/Clojure-The-Art-of-Abstraction" rel="nofollow">Clojure: The Art of Abstraction</a></li>\n<li>It has automatic memory management / garbage collection (via the JVM, which has some of the world\'s best GC implementations)</li>\n</ul>\n\n<p>I\'ll give some examples using just one abstraction: in Clojure you can manipulate pretty much any data structure via the <a href="http://clojure.org/sequences" rel="nofollow">sequence abstraction</a>.</p>\n\n<pre><code>;; treat a vector as a sequence and reverse it\n(reverse [1 2 3 4 5])\n=&gt; (5 4 3 2 1)\n\n;; Take 10 items from a infinite sequence\n(take 10 (range))\n=&gt; (0 1 2 3 4 5 6 7 8 9)\n\n;; Treat a String as a sequence of characters, calculate the frequencies\n(frequencies "abracadabra")\n=&gt; {\\a 5, \\b 2, \\r 2, \\c 1, \\d 1}\n\n;; Define an infinite lazy sequence of fibonacci numbers, take the first 10\n(def fibs (concat [0 1] (lazy-seq (map + fibs (rest fibs)))))\n(take 10 fibs)\n=&gt; (0 1 1 2 3 5 8 13 21 34)\n</code></pre>\n'}, {'answer_id': 68335259, 'author': 'Pranav', 'author_id': 8694610, 'author_profile': 'https://Stackoverflow.com/users/8694610', 'pm_score': 0, 'selected': False, 'text': '<p><a href="https://www.rust-lang.org/" rel="nofollow noreferrer">Rust</a></p>\n<ul>\n<li>Syntactically similar to C++</li>\n<li>Designed for performance and safety, especially safe concurrency</li>\n</ul>\n'}]
['https://Stackoverflow.com/questions/61109', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/6323/']