"Must-Learn" Languages

Started by
31 comments, last by Hodgman 11 years, 8 months ago
Hello everyone!

I've been programming with Java for a while now and become quite comfortable at it. I just recently I started to pick up C++ to expand my knowledge a bit. One of the main reasons I chose C++(and I realize C would've qualified too) was because it dealt with pointers, and coming from Java it was a topic I felt I should learn considering the fact that I have hardly any control over memory in Java. Then I got to thinking, "Hey, there are some languages that benefit programmers not only with the possibilities of new libraries, capabilities, etc, but also with new programming insights"

So here I wanted to ask you guys for your opinions on this:


*Which languages offer these programming insights to those that learn them?*

*What are the insights that those languages offer?*

*What is the "must-learn" set of languages any programmer should learn if you had to limit them to around five or seven?*


I'm really interested to see which languages people choose and with which arguments they back them up(hopefully without an ensuing language war).

Thank you for your feedback! I'll snag some of the suggestions and pick up books on those languages to learn after I finish reading up on C++ :)
Advertisement
If you're learning Java then learn Clojure. You should always learn a imperative and a functional language. It's late and honestly, I'm too tired to go into detail. But I certainly will tomorrow.

Beginner in Game Development?  Read here. And read here.

 

Instead of 7 specific languages, I'd give you 7 categories:

A systems language, like C, C++.
A managed language, like Java, C#.
A weakly typed language, like Python, Lua.
A web-server centric language, like PHP, Ruby.
An automation language, like Bash, Batch.
A functional language, like Erlang, Haskell.
A domain-specific language, like SQL, Mathematica.

[edit]This is a good 8th category:
In my opinion add an Assembler Language and the list is complete
And if you want a 9th, try a logic language, like Prolog.
I deal almost exlusively with C/C++ code, and I have done Java. I will say that learning C or C++ will expose you to core programming fundamentals (such as memory management, allocations on stack vs heap, object-oriented design, etc). I love Java for what it is, but I think if you are really looking to learning programming techniques which extend over all platforms, C or C++ would be a good choice for your projects. EVERYONE needs to know about pointers, and IMHO everyone needs to know about dynamic memory allocation and stack vs heap allocation. With C and C++, it is impossible to do any amount of coding for too long without running into memory leaks, stack/buffer overflows, segfaults, etc. These bugs are the bain of programming existance because they are very difficult to debug. Sometimes days can be wasted before tracking down a hard-to-find memory leak. That being said, the experience of having and fixing these bugs is something you will need if you want to be a serious programmer.

Learning at least one scripting language is good as well. Scripting languages are built to make programmers' and users' lives MUCH easier by allowing you to write scripts to perform menial tasks, or tasks in which programming Java or C++ would be overkill. Tasks that rely on using native system commands are good candidates. I would recommend Perl or Python since these two are highly documented. highly used languages. Also, knowing a scripting language is good if your looking for jobs in industry, or if your looking to make your life easier. From a learning perspective, these will show you how easy high-level interpreted languages can make your life. Learning C/C++ will make you appreciate these languages even more.

Instead of 7 specific languages, I'd give you 7 categories:
[rollup='Language categories']A systems language, like C, C++.
A managed language, like Java, C#.
A weakly typed language, like Python, Lua.
A web-server centric language, like PHP, Ruby.
An automation language, like Bash, Batch.
A functional language, like Erlang, Haskell.
A domain-specific language, like SQL, Mathematica.[/rollup]

I was going to make a recommendation very similar to this one, so rather than repeating it I'll just quote for emphasis. You're spot-on with the idea that other than possibly being directly applicable there can be value in learning new languages in order to expose you to different ways of thinking about how to solve any given problem; you'll get the most bang-for-your-buck in this area by learning different types of languages rather than necessarily any specific languages. From there it's a relatively trivial exercise to learn the syntax and familiarise yourself with the standard library and idioms of any language you plan to actually use for production.

I would add that it is also a very valuable learning experience to implement an interpreter or compiler. Bonus points if you at some point design your own language -- even if it's just a "toy" language -- rather than simply implementing an existing one.

- Jason Astle-Adams

Regarding your question

*What are the insights that those languages offer?*


Applying this to Hodgman's list, here is my opinions about the key insights and as well as some parings which languages go closely together, because you will only get some insights when you see how it is done differently in another language

A systems language, like C, C++ : How your code behaves on a low level and stuff like memory-management
as opposed to
A managed language, like Java, C#: which will let you concentrate on object oriented programming, using frameworks and applying patterns without needing to worry about all those C/C++ pitfalls

A weakly typed language, like Python, Lua: seeing how to bring Ideas quickly into code, how to create "quick'n'dirty" but still maintainable code.
in conjunction with:
An automation language, like Bash, Batch. to easily automate tasks (and recognizing which task are easily automated) without needing to use a full-blown language


A web-server centric language, like PHP, Ruby: The peculiarities of web-development, thinking in multi-tier.software-architecture and asynchronous user-interaction
together with SQL to get a feel of
A domain-specific language, like SQL, Mathematica: The insights will be very domain-specific rather than general, so I would pick a language that is in a domain that interests you. Knowing stuff like that never hurts.

And last but not least
A functional language, like Erlang, Haskell: to see how to code "the other way", meaning non OOP
I'm aiming for a pretty hardcore career (game development SpecOps cool.png), but here's nonetheless my own learning plan over a 10-year-period:


Assembly etc:
- Binary and assembly (Win & Mac) basics.
- Researching C-- and similar.

High-end programming:
- HTML/XML, CSS, PHP & MySQL stuff. (For my website which will hold all my projects.)
- Javascript OR Actionscript basics
- Java
- C, C++ and C#
(Plus whatever other languages that may pop up as relevant.)

Design:
- Paintshop Pro (images; for both game and photography stuff)
- CuBase (sound)
- 3DMax (modeling)
- LATEX (writing)


Just the hard core of development tools, really. smile.png

- Awl you're base are belong me! -

- I don't know, I'm just a noob -


And last but not least
A functional language, like Erlang, Haskell: to see how to code "the other way", meaning non OOP


Functional programming isn't just non OOP, the big difference is that Functional programming is declarative rather than imperative. (There are plenty of non OO imperative languages, C, Pascal and BASIC for example (and they are fairly similar to their OO relatives (C#, Delphi, VB, etc).
[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!

I would add that it is also a very valuable learning experience to implement an interpreter or compiler. Bonus points if you at some point design your own language -- even if it's just a "toy" language -- rather than simply implementing an existing one.

Is it considered cheating if you use a Lisp-like language to do so? :D

Beginner in Game Development?  Read here. And read here.

 

To complement the paradigms cited above:

Functional: R, Haskell
Logic: Prolog
Programming is an art. Game programming is a masterpiece!

This topic is closed to new replies.

Advertisement