What Programming Languages Should You Learn Next?
simoniker writes "Over at Dobbs Code Talk, Chris Diggins has been discussing programming languages beyond C++ or Java, suggesting options such as Ruby ('does a great job of showing how powerful a dynamic language can be, and leverages powerful ideas from Smalltalk, Perl, and Lisp') but suggesting Scala as a first choice ('Very accessible to programmers from different backgrounds.') What would your choice be for programmers extending beyond their normal boundaries?"
The question is flawed. Anyone worth their weight as a programmer doesn't care what language they .NET) which are a deveation of Procedural Based Languges (C,
.EQ. 1) THEN
... ...
program in but. But Programing Methodoligy should they work with. Assuming that you use to
Object Orianted Languages (C++, Java,
Pascal, FORTRAN). So after knowing those methodoligies perhaps you should study functional languages
(LISP, SCHEME, HASCAL) or Logic Based Languges (Prolog).
Procedural and Object Orianted languges tend to have the most programmers and is widly used
Functional comes next used in some Sciencetific applications as well handling a lot of AI type stuff.
Logical Lanagues are used less frequently because it is very tight sometimes too tight to expand into
a full application.
But most good programmers with experience in these languge classes are not normally worried about what
to program in. They may have their personal favorates but, can code sucessfully in any language
even if they never coded in it before. Because once you understand the classes the rest is just a
google search from finding the right command and syntax of the languge.
For example some differences between procedural Languges
FORTRAN
IF (X
END IF
VB
If (x = 1) then
end if
C
if (x==1) {
}
Python
if x == 1:
BASIC
IF ($X = 1) THEN
END
Wow there are 5 different languges and they all look simular almost anyone would be able to figure it out
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
I seem to be at odds here with this mentality.
... whatever's under the sun for application container and all the while I'm trying to be an expert at Maven (which seems limitless) and Ant so I can do a decent job building. Not to mention the UI aspects: JSF, Tiles, Javascript, AJAX, DHTML, JSPs, JSeamless, Flex, GWT ... they just go on and on.
Stepping outside your comfort zone is a great thing if you have the time or need to do it. Me, I learned scheme & lisp, prolog, a number of instruction set languages and various scripting languages in my undergrad. Because I needed to see what it was like in realms other than Java & C++.
However, these days, I spend my free time looking at frameworks for the latter two languages. Do I want to know Ruby? Sure. But it's not going to make me better at my job. My employer has me jumping from JBoss to Weblogic to Websphere to Jetty to Glassfish to
I hate to say it but this specialization programming and time spent with other people's frameworks and libraries seems to make me more valuable in my own realm. You're right, it's a good idea for me to pick up Ruby (or whatever I'm supposed to learn next) because Java is not going to be around forever. But honestly, I feel a lot of people around me could stop re-inventing the wheel week after week at work and just take a couple days to tweak someone else's solution to work.
That said, Lisp & Prolog were my most favorite and least practical languages I've learned (I think Lisp stands for Lost In Stupid Parentheses).
I guess my answer to your question just another question: "What is your motive for learning a new language?" If it's to broaden your view of the world, go with something out of left field. If it's to be more valuable or better at what you do in Java, C++, Pearl, etc then I would actually tell you to start learning how everyone uses those languages.
Honestly, a lot of the older coders I know just don't have the time. The company will both pay for and tell them what they need to learn next or they ain't learning anything at all.
My work here is dung.
I'm surprised there was no mention of Python. I think Python is a good language to know. It seems to be used a number of places and forces people to write easily readable (and therefore maintainable) code. And I thought it was pretty easy to learn, especially if you have OOP experience.
Slackware
I learned BASIC back in the days of the C64. I then learned Perl when I decided to try my hand at bioinformatics. I picked up C++ at the same time. But there was one language that was used regularly there that always made me feel like a fool.
SQL.
Everything about it seemed backwards and inside out to me. I had a hard time wrapping my mind around "accountant-speak" and "normal forms" (still not sure WTF that means). Yet i know it will likely be in my future. Too much data resides in tables now, and too much data interpretation comes down to data(base) mining. Even the perl::sql modules couldn't save me completely.
So I would say, if you plan for a career that is data-driven, learn SQL if you haven't already. It certainly doesn't seem to get easier to pick up as you wait longer - or at least it hasn't for me.
Damn_registrars has no butt-hole. Damn_registrars has no use for a butt-hole.
My advice would be to learn formal verification techniques. These can be applied across languages and across platforms. If you deploy them properly you can reduce your defect rate from 50 per 1,000 statements to 2 per 1,000 before the first test case is run.
That will save you far more time than the latest over-hyped platform. While everyone else is fixing bugs in their application, you've already moved on to greener pastures. It will increase your capacity to build really good quality software and not get in to flame wars over nonsense. Nothing quite ends an argument over style more than saying: "Yes, but can you prove that your approach is correct? I can."
Simon
Even if you never use it commercially, the background it gives you in terms of hardware will improve your ability to write efficient code.
Personally, I think this should be the first language that future programmers (as opposed to CS graduates) should learn.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
Python would be my choice. Perl isn't bad, just not my first choice for a beginner. Its way too easy to fall into bad habits. I started out in perl and looking back 5-7 years at some of my stuff, ouch! Its way too easy to find really bad, insecure examples on the internet code by using google. I've seen some really horrid stuff end up in production settings because a programmer found a few tid bits on the internet. Not that you can't find crappy python code. It just doesn't seem to come up as readily in a search.
The fact that you think "mindless syntax" is the only difference between lisp, haskell, and c shows that you should probably learn one of these languages.
The right answer to most such questions is, "It depends."
What sort of tools will be useful in your future career? Or, what sort of knowledge will be interesting to learn?
If you are concerned with serious engineering issues, such as safety and correctness, you might want to learn something about "formal methods". Languages to look at include Z and B. And, of course, there's a little field called "computational logic."
If you are concerned with commercial byte-pushing, you obviously need to be conversant in SQL and an assortment of scripting languages. And, of course, there's a little field called "accounting" that might be useful.
I don't think there is any one right answer. The choice of intellectual tools that you will need really depends on the choice of what kinds of work you want to do.
I've been spending the better part of today refactoring some ugly C++ that was written by a crusty old Fortran engineer. It might as well have been Fortran.
Please please please learn a functional programming language. Even if you don't use it in your daily work, your brain will be improved.
It's great for handling matrices, vectors, plotting and umm... well, that's all it's good for.
One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
This is a great example of mods and commenters (i.e. GP, currently modded informative) who don't know what the hell they're talking about. Parent post is correct -- while you can use Verilog for programming an FPGA (field-programmable gate array), Verilog has many uses in hardware design. It's called Verilog HDL (hardware description language) for a reason. Here is an overview of Verilog for the uninitiated.
But I think a really good language to learn is ECMAScript or to the layman, Javascript.
Javascript is the language of the future. It's such a powerful language and so underrated. It's far beyond the whole switching images thing. It's an interpreted langauge deployed on more computers than any other programming language. (think web browser.) It's light, it's fast, it's dynamic. For a scripting language it offers you an extremely familiar syntax, C like. It's becoming the backbone of other environments, and other compiled / interpreted languages are being extended for scripting support.
"It takes many nails to build a crib, but one screw to fill it."
And what makes those two languages worse than C++ (for example) is that they don't have static objects! Well, for most cases; I know C# has static structs and simple datatypes (integers, floats, etc). So if you don't like references, stick with languages that don't force you to use them.
True, but if you don't like references, you might ask yourself why you're in this business.
I mean, sure, pointer arithmetic can be complex and convoluted, but, conceptually, if you find if HARD, you may not have made the right career choices.
Same thing with other techniques that get lumped in the "hard" category like recursion, closures, etc.
What is a CPU and what is a programming language? From a comp.sci. point of view, the input language of anything that can execute any algorithm, that is, that is turing complete, is a programming language.
Proof that an FPGA is turing complete:
An FPGA can emulate any set of gates and interconnections given a description of these as input.
A normal processor, e.g. a Z80 is a set of gates and interconnections.
Thus, an FPGA can emulate a Z80.
The Z80 assembler is turing complete.
Anything that can emulate something that is turing complete given the right input, is turing complete.
Thus, and FPGA is a turing complete machine and its input a programming language.
--The knowledge that you are an idiot, is what distinguishes you from one.
The job market doesn't change that fast. The top-five languages from five years ago are all still extremely popular. If you learn the top five languages for today, you will most likely be in very good shape in five or ten years in the future. If you wait until you actually need the job, it'll be too late.
The cake is a pie
I would recommend http://www-cs-faculty.stanford.edu/~knuth/mmix.html
A great way to train your brain.
Maybe you should have been +5 Funny, but not +4 Insightful.
An FPGA might very well be able to do very little. See Adrian Thompson's page, especially his 1990s work on evolving FPGA circuits.
'An FPGA' could be a very limited device.
Well, I don't know, I'm half way through, never having used LISP before, and it seems like a nice introduction to me - surely it's best to start with the stuff that makes it worth learning? After all much of the whole point of learning another language is to absorb the culture which comes with it. Haven't read the other book you're recommending though so will take a look.