Beta
×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

What Programming Languages Should You Learn Next?

Zonk posted more than 6 years ago | from the anything-but-haskell dept.

759

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?"

cancel ×

759 comments

Sorry! There are no comments related to the filter you selected.

Verilog (1, Funny)

poindextrose (640377) | more than 6 years ago | (#22785062)

If you know C, learn Verilog. Then you can do anything. Anything.

Re:Verilog (5, Informative)

exley (221867) | more than 6 years ago | (#22785360)

Verilog is a hardware description language, not a programming language. It may look like a high-level language -- wire assignments look like variable assignments, module instantiations look like function calls -- but conceptually it's completely different. Furthermore I don't know how applicable it's going to be for anyone who works in software design, which is the audience this question seems geared towards.

Re:Verilog (2, Informative)

redhog (15207) | more than 6 years ago | (#22785524)

It's not. It's a programming language for programming a type of CPU called an FPGA. It is a programming language (that is, it is turing complete), but the programming paradigm is rather different from that of an ALGOL language like C, even if the syntax is similar. But the difference in paradigm is not greater than the difference between C and e.g. Prolog.

If you are to learn new languages, I would suggest the following ones to learn the biggest number of different paradigms and features a language can have:

Assembly language (Low level, manual everything)
C (Low level, ALGOL-family structured programming, manual memmory management, pointers)
Scheme (Declarative/functional, has continuations, lazy-evaluation extentions, lambdas, code is data, real macros)
Smalltalk (Not just object oriented, but object centric)
Prolog (Declarative/Logic programming, code is data)
Verilog (No time-flow/full concurrency, emulates/describes hardware)

You could probably replace Scheme and Smalltalk with Erlang, but I don't know Erlang enough to be sure...

Re:Verilog (1)

poindextrose (640377) | more than 6 years ago | (#22785558)

I'm aware that it's an HDL. I learned a crapton of programming models and languages, and I found that there's nothing out there that's that great or really extended my ability to process data. Learning Verilog was easy and actually gave me access to new functionality that no programming language could. I know it's not a programming language, but it's my answer to people looking for a new programming language for a challenge or to enhance their skills. A programming language will not foot that bill, IMO. Maybe if you've never used an OO or Functional language, then you should learn one. Past that, they're just faster/better/easier/more ways to do the same thing.

Wrong Question (5, Insightful)

jellomizer (103300) | more than 6 years ago | (#22785064)

The question is flawed. Anyone worth their weight as a programmer doesn't care what language they
program in but. But Programing Methodoligy should they work with. Assuming that you use to
Object Orianted Languages (C++, Java, .NET) which are a deveation of Procedural Based Languges (C,
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 .EQ. 1) THEN
                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

Re:Wrong Question (2, Informative)

Anonymous Cowpat (788193) | more than 6 years ago | (#22785136)

ouch, still using f77.

Fortran90\95:

if (x == 1) then
*stuff*
end if

Re:Wrong Question (5, Funny)

jellomizer (103300) | more than 6 years ago | (#22785294)

PRINT *, 'What is wrong with using FORTRAN 77? It is a perfectly fine lan'//
    1 'guage that offers the flexiblity for all generations.'
    PRINT *, 'Where else can I write code that will run on todays system and '//
    1 'still be able to back it up on punch cards for safe keeping that wil'//
    2 'l last for decades'

Re:Wrong Question (1, Funny)

Anonymous Coward | more than 6 years ago | (#22785378)

        if (x-1) 10, 20, 50
10      goto 50
20      ...stuff....
        goto 50
50      ...

I don't need any of that fancy OO Fortran

Re:Wrong Question (0)

Anonymous Coward | more than 6 years ago | (#22785508)

I still have to say

IF (X-1) 20,10,20
10 *stuff*
20 *more stuff*
you insensitive clod!

Going from C to others is a matter of right books (4, Informative)

CRCulver (715279) | more than 6 years ago | (#22785144)

You're right that if you know one C-style language you know them all, and in order to expand your development skills you should learn other styles of languages. However, a major problem is that there aren't so many references for non-C-style languages as there are for C(++), Java, Python, and Ruby. Though Lisp is something all developers should encounter, most Lisp books on the market are antiquated. (However, thank goodness for the relatively modern Practical Common Lisp [amazon.com] by Seibel.) I wish there were more tutorials out there for the exotic languages that might really teach you new tricks.

Re:Going from C to others is a matter of right boo (1, Informative)

nuzak (959558) | more than 6 years ago | (#22785326)

> Thank goodness for the relatively modern Practical Common Lisp by Seibel

PCL is also free at http://gigamonkeys.com/book [gigamonkeys.com] -- I hate to deprive the authors of their royalties, but hey, it's their choice, and helps in making lisp more popular.

Unfortunately, I really can't stand CL's OBNOXIOUSLY-LONG-IDENTIFIERS that other languages often do with syntax. The purported lack of syntax is not a feature when you end up looking like COBOL with more parenthesis (yes that's hyperbole). There are CLOS workalikes available for most Scheme implementations that have all the features you'll ever use from the real deal (and it's not like most CL's have a 100% perfect CLOS). About the only really unique thing that CL brings to the table these days is conditions and restarts.

Re:Wrong Question (1)

Actually, I do RTFA (1058596) | more than 6 years ago | (#22785176)

Excellent comment. I'm currently looking at expanding into functional languages. I fail to understand the difference between functional languages and logic languages. Would you help enable my laziness by expounding a bit more on that?

Also, if you have a sciency-type application, could someone recommend a functional language to represent laws of physics (for example) in?

Re:Wrong Question (4, Informative)

krog (25663) | more than 6 years ago | (#22785572)

Functional languages seek to express all operations as a chain of functions which operate on data and return other data. "Function" is used in its mathematical sense here. Purely functional languages discourage state, and don't allow mutable variables. The lack of state and mutability give rise to some power; effortless parallelizability, for instance.

Logic languages are something different altogether. They provide a framework for defining the rules of a system, then searching for answers which fit the given rules. Logic programming is not useful for general-purpose tasks, but can hugely reduce programming time in tasks which are difficult to solve any other way.

Re:Wrong Question (5, Insightful)

ucblockhead (63650) | more than 6 years ago | (#22785180)

Well...programmers usually care what languages they know when it comes to writing their resume. So while in one sense, you are current, in the career advancement sense, I'd go by what they want on Monster.com: (Java, Javascript, C, C++, Python, Perl, PHP.) True, any good programmer could pick any of those up in a few months (except maybe C++) but HR drones don't know that.

When I went to school, we were taught all these methodologies. (Though in my case I'm so old that OO programming was too new to be well taught.) I'd hope your average programmer would know them all before getting that first job. Sadly, I get the feeling I am mistaken.

But in general, I'd say, for instance, to use Javascript rather than Lisp as a functional language...not because it is better...not hardly...but because it is very marketable. (And sadly, most people with Javascript on their resumes have no clue it is anything but a Java clone.)

Re:Wrong Question (5, Interesting)

MrEkted (764569) | more than 6 years ago | (#22785210)

If you've never checked out Erlang [wikipedia.org] , I recommend it. I've programmed seriously in at least a dozen languages, but this one really made me think. It has sophistication in concurrent programming [wikipedia.org] that I've not seen before. Plus, there's a great movie [google.com] !

Re:Wrong Question (4, Interesting)

abigor (540274) | more than 6 years ago | (#22785308)

Yup, I'll second this. Parallel programming is going to be a HUGE deal in coming years, and current languages don't handle it well - threading is complicated and prone to errors, leading to product delays. Erlang handles parallelism very elegantly and in a low-fault manner, as it must as it's used in critical telecoms applications. Unfortunately, the language also has a high barrier to entry as it is not Algol-based (like C, C++, Java, etc. are).

Scala is a functional language (1)

MCRocker (461060) | more than 6 years ago | (#22785258)

Scala is a functional language,which is part of why it was recommended.

Re:Wrong Question (1)

morgan_greywolf (835522) | more than 6 years ago | (#22785268)

And then there's Korn/Bourne/bash scripting, which is procedural (duh), but seems to be in a category all by itself, because, like Perl, TIMTOWTDI:


if [ $x -eq 1 ]; then
fi


or:


if [ $x = 1 ]; then
fi


or even, the more obtuse:


[ $x -eq 1 ] && ....


Or, for some bash/kshisms:


if (( $x == 1 )); then
fi


I've seen more than one method used in the same script, too.

Re:Wrong Question (0)

Anonymous Coward | more than 6 years ago | (#22785316)

After reading through jellomizer's post, I really wish he'd take the time to get a better grasp on the English language.

Re:Wrong Question (1)

Nimey (114278) | more than 6 years ago | (#22785366)

AOL. I especially liked "sciencetific".

Re:Wrong Question (1)

tmarthal (998456) | more than 6 years ago | (#22785330)

XMLRPC
SOAP
WS-*

Interface standards are becoming more than language specifications. People are more concerned now with API specifications (and language hooks into them) than the actual language (and OS!) that are used to call them. I think we (as a community of networked computers) are moving towards heterogeneous environments widely distributed.

If your C/C++/Perl/Fortran(yeah right)/VB have a well defined xmlrpc interface, it doesn't matter what the implementation of my code is.

So youre right that the question is flawed, everyone can program in whatever language they want, as long as the tools exist to export your logic to the outside world.

Re:Wrong Question (1)

MagicBox (576175) | more than 6 years ago | (#22785342)

Bang on. I did nit agree with the article's narrow vision of "what most programer's background" is in. Today's programmer is not defined by the programming language he uses anymore, they are defined by how well they understand what they are building and coding for. I think a programmer should chose whatever they like to code in, s long as they:

1) Understand the problem, and their choice of coding language (or environment) is the right fit that will produce the best possible solution
2) Are able to adhere to the coding standards, write clean/readeable code, comment (or document it), and strive for efficiency any chance they get.

Personal pride in these matters is stupid.

In my career, having the ability to adapt has been a winnig strategy both professionally and from the employer's point of view.

One thing I can honestly say though: I despised the Java developers that would not touch one fucking line of code other than Java. They were the most unproductive programmers I have ever seen. I am not generalizing. I am speaking about those I had to deal with.

Re:Wrong Question (1)

tknd (979052) | more than 6 years ago | (#22785348)

True, but now let's say you agreed that you are going to program in the OO methodology. Which language do you choose?

There are different reasons for choosing one language over another once you get past the classification of a language (procedural, functional, oo, logical). You will also often find that the industry will gravitate toward what has the cheapest cost for their task.

Re:Wrong Question (0)

Anonymous Coward | more than 6 years ago | (#22785350)

The question should be "Why should there be a next language?"

As you point out, 5 languages, same outcome, different syntax. Why do we need yet another syntax to write the same thing?

Re:Wrong Question (1)

xZgf6xHx2uhoAj9D (1160707) | more than 6 years ago | (#22785576)

That's because the 5 languages he chose are all exactly the same language. Specifically, they're all imperative languages, i.e., languages with statements and variables. Try writing the same thing in languages without statements or variables and I think you'd find that they differ in more than just their syntax.

Re:Wrong Question (2, Interesting)

Jeremiah Cornelius (137) | more than 6 years ago | (#22785354)

Learn LISP!

It has a funny name, and carries the mystique and credibility you seek. Nothing says "way old school" and "MIT Wizard" like piles of LISP with your tag on them. Of course, you'll have to leave vim behind - there is only one, true tool [gnu.org] for the LISPer, now that dedicated machines like Symbolics are all in the museums.

The opportunities here are boundless - there are whole categories of libraries for HTTP and HTML that simple don't exist yet! If that seems to trivial a challenge, why not look into one of the projects to write and OS [common-lisp.net] in LISP?

Re:Wrong Question (2, Insightful)

whtmarker (1060730) | more than 6 years ago | (#22785384)

First,
learn to spell (or install firefox2 which underlines textarea typos in red)
methodoligy => methodology
orianted=> oriented
deveation => deviation
languges => languages
widly => widely
sciencetific => scientific
favorates => favorites
sucessfully => successfully
simular => similar

Second,
Never misspell when you code (not comments). Those of us who do know how to spell have to remember which constants, database field names, class names, file names, functions are spelled incorrectly and exactly how it was incorrect to avoid bugs. Another way to introduce more bugs is to go back fix misspelled words.

In summary, bad spelling = bugs

Third,
People these days don't read books enough. They can be on any topic, but if you want to be an expert in your field, read books in your field. As you read you will encounter technical terms. If you weren't familiar with the word write it down. This is how to learn to spell. It is when you focus your reading on professionally edited content instead of user generated content (blogs) you can improve.

[Some people have severe learning disabilities and I sympathize with them, this post is obviously not directed to them]

Re:Wrong Question (1)

Critical Facilities (850111) | more than 6 years ago | (#22785434)

I think if we're nitpicking, the BASIC example above is incorrect as well. This page [thinkquest.org] shows an example of a properly coded IF statement (basically, there shouldn't be parentheses nor should there be a $ in FRONT of the variable name).

Re:Wrong Question (4, Funny)

idontgno (624372) | more than 6 years ago | (#22785518)

Agreed. It's a sad day on /. when I look at purported code examples and say to myself "Hmph. BASIC poser."

"BASIC poser" may be the saddest phrase in the geek sublanguage of the English language.

Re:Wrong Question (5, Insightful)

EWIPlayer (881908) | more than 6 years ago | (#22785454)

I'm sorry, but the parent comment is a bit "out there". If you had said something like, "Programmers don't care what language they program in, so long as they only want to be coding in one language just like they're coding in any other language", then maybe. But come on... It's talk like that which makes completely mediocre programmers. Do you know how long it takes to become truly proficient in C++ and OOP? Do you honestly want to tell me that you can come from Java (which doesn't destructors, for example) and simply apply your OO Java programming to C++ and be "good"?

Different languages exist because language A does not do what language B does. And, yes, they can contain a ton of the same kind of idea, which is exactly the reason you need to become highly proficient in them to get anything real out of them. You need to explore the differences not the similarities. I have worked with enough mediocre programmers and enough non-designers in my life, thanks very much. I want people to get deeper, very very deep into alternate languages so that they can broaden their thinking, not just their basic language skill set.

Learning a new language has little to do with that language and more to do with learning new ways of thinking. When I interview people that say that have any OO language, I grill them on OO more than I do on the intricacies of Java interfaces or C++ memory management. How you think is much more important to me than how many times it takes you to successfully compile a file.

Re:Wrong Question (1)

Kjella (173770) | more than 6 years ago | (#22785458)

While what you say is true, I think it would take me a long, long time to be as effective in Java or C# as I am in C++/Qt. Don't get me wrong, I grok the basic syntax but I've found that being well versed in the standard library (ok so Qt isn't a standard library, but it almost replaces it) is something you only get with time. It's incredibly time-consuming if you're constantly looking up the manual to figure out what function to call, arguments to use and so on.

Yes, I can code in everything from javascript to VB, and I write good code in every language, but I wouldn't say I am good at coding in those languages. I don't think anyone can hold five different massively overlapping standard libs for five different languages in their mind at once without going crazy. One thing learning many different design patterns to learn how to write better code, but I definately subscribe to the idea of mastering one language rather than trying to be jack of all, master of none.

Re:Wrong Question (1)

John Betonschaar (178617) | more than 6 years ago | (#22785526)

There's a lot more to programming in a specific programming language than just the syntax, you know. It will take even a very, very experienced C++ programmer a lot of time to master the most common Java or C# libraries, or to learn all the weird deviations of the traditional OO model that e.g. Delphi implements. C++ is relatively basic in the sense that it does not have a library of standard functions as large as Java, and still it takes years and years to get proficient in it, mostly because you have so many ways to do the same. What seems like a good idea in language X might be a very bad idea in language Y, although they might be very similar syntactically...

What Languages? (1)

TheRaven64 (641858) | more than 6 years ago | (#22785066)

I'm sure I've already answered that question [informit.com] . I'd probably add FORTH and Self to that list now (Self is particularly important if you want to ever fully understand JavaScript).

Re:What Languages? (4, Funny)

Chris Mattern (191822) | more than 6 years ago | (#22785152)

FORTH learn to want I would why?

Re:What Languages? (4, Funny)

kat_skan (5219) | more than 6 years ago | (#22785402)

Because what Yoda would use is it.

Re:What Languages? (1)

penapoco (690908) | more than 6 years ago | (#22785450)

Master Yoda, is that you?

Re:What Languages? (1)

ucblockhead (63650) | more than 6 years ago | (#22785514)

FORTH 4K fits

Re:What Languages? (1)

CRCulver (715279) | more than 6 years ago | (#22785206)

Self is particularly important if you want to ever fully understand JavaScript

I'd like to completely annihilate JavaScript from the face of the Earth. Do you know a way to do that?

Re:What Languages? (0)

Anonymous Coward | more than 6 years ago | (#22785394)

You really should learn JavaScript. It's a very nice language once you understand it.

Unless you do understand it, and want to eradicate the dumbass decisions that the language is now crippled with when it comes to the standard library and various other braindeadness, like the fact that it's completely impossible to determine if an object is an array or not. (And, no, "instanceof Array" doesn't always work.)

And you can wonder why on earth JavaScript has the only object-oriented system I know of where child classes can REMOVE properties and methods they inherited from parent classes.

(In other words, just because Bar is-a Foo and Foo has a property Baz does not mean that Bar has a property Baz.)

But other than the brain-dead object system (which, to be fair, a lot of scripting languages fail at), and the completely brain-dead standard libraries, and the complete lack of the concept of namespaces, JavaScript is actually a fairly nice scripting language.

Or could have been.

Re:What Languages? (1)

Jeremiah Cornelius (137) | more than 6 years ago | (#22785398)

XSS

Re:What Languages? (0)

Anonymous Coward | more than 6 years ago | (#22785552)

JavaScript.delete(); doesn't work???

Specialization Versus Breadth (5, Insightful)

eldavojohn (898314) | more than 6 years ago | (#22785068)

I seem to be at odds here with this mentality.

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 ... 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.

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.

Re:Specialization Versus Breadth (2, Insightful)

mckinnsb (984522) | more than 6 years ago | (#22785240)

The interesting part about specializing in libraries or frameworks for a language you already know is that it often shows you how to use the language in ways you never thought of, or thought impossible.

Lately I've been doing a lot of stuff with JavaScript, and mooTools has been a framework I've invested a lot of time into. The first time I remember reading the tutorials, I asked myself "The hell? This is javascript?". After a while, I realized that with mooTools and a little creativity, I could create many flash-like effects, without flash. The same thing happened when I started to use CodeIgniter, a PHP framework. I had simply never seen PHP coded in that fashion before. Especially with PHP 5, CI becomes extremely OOP-like, with MCV and everything.When I went to school, the words "Object Oriented" and "Model View Controller" were *never* talked about in my PHP class (even during the advanced segments).

That being said, if you want something that will truly test your resolve as a programmer, I'd try to learn ML. It's not very useful, at all, (although some of its variants are used widely in scientific fields) but it will teach you a lot about type-checking, and how very *nice* a C or Java compiler is to you. Ruby is also a good thing to pick up, especially once you realize how awesome the migrations are in Ruby.

Re:Specialization Versus Breadth (1)

mardin (976086) | more than 6 years ago | (#22785516)

I would advice a framework as well, for one of the available languages you know. My current favorite is Spring. It's not new anymore, but I'm learning a lot about Java and building advanced web apps with much more ease then I thought possible before.

Re:Specialization Versus Breadth (0)

Anonymous Coward | more than 6 years ago | (#22785554)

I am a pretty decent developer; I write content delivery applications that are built mostly on .NET. I've got dozens of successful projects under my belt using most of the 'enterprise-level' buzzwords that have been around the past decade or so.

I picked up the Agile Web Development Book wondering what I would learn, and how it could possibly be useful. It was mind-blowing. I know one or two other 'top-drawer' developers (the 10x better guys from mythical man month) and I encouraged them read it too, which they did, and they also had life-changing experiences.

Ruby allows you, as a programmer, to be extremely expressive in the right places and extremely succinct in the others. It teaches that grunt work is not something you should make part of your daily routine. If you are doing something over and over again then you are doing it wrong (like getters and setters, for example). The Ruby language is certainly more flexible than .NET or Java, but don't underestimate how much of a difference the new paradigms have had on my .NET work.

It pays to make time.

10100001010 (2, Funny)

midianus (727997) | more than 6 years ago | (#22785074)

01000101012

Re:10100001010 (1)

jellomizer (103300) | more than 6 years ago | (#22785140)

Coding in Trinary doesn't help unless you know the system architecture.

Re:10100001010 (1)

oatworm (969674) | more than 6 years ago | (#22785502)

Don't worry. There's no such thing as a two.

Love the 'iPhone' tag (3, Funny)

Naughty Bob (1004174) | more than 6 years ago | (#22785078)

We really have some obscurity-loving masochists among our ranks.

Re:Love the 'iPhone' tag (0)

Anonymous Coward | more than 6 years ago | (#22785138)

Nah, they would mark it perl/awk/sed then.

no Ps (2, Interesting)

whtmarker (1060730) | more than 6 years ago | (#22785092)

php, perl, and python are not even included in the list.

Re:no Ps (1)

andy19 (1250844) | more than 6 years ago | (#22785220)

Everyone already knows those inside and out...I think learning something a little more obscure or more up-and-coming than the P's is what the article is trying to get at- expanding your horizons in programming.

Re:no Ps (1)

Millennium (2451) | more than 6 years ago | (#22785560)

Agreed. Anyone in doubt as to what language to learn next probably either already knows these languages or has already decided against them for whatever reason.

Re:no Ps (0)

Anonymous Coward | more than 6 years ago | (#22785254)

PHP and Perl for good reason.

COBOL (0)

Anonymous Coward | more than 6 years ago | (#22785098)

COBOL. Legendary.

Why are monads cheating? (1)

morgan_greywolf (835522) | more than 6 years ago | (#22785100)

Why are monads cheating? My understanding is that one of the biggest reasons people like Haskell is for its support of monads. Isn't that a bit like saying using regular expressions in Perl is cheating?

Scala? (0)

Anonymous Coward | more than 6 years ago | (#22785106)

Yes I always recommend that people learn languages that nobody uses in real life.

English (1)

WillAffleckUW (858324) | more than 6 years ago | (#22785118)

Because I can't read the comments in your code that are like this: // GRPL nvm lol grep nsfw sew oui ussse perrl

Python? (4, Insightful)

freshman_a (136603) | more than 6 years ago | (#22785122)

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 [wikipedia.org] 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.

SQL is next for me (5, Insightful)

damn_registrars (1103043) | more than 6 years ago | (#22785124)

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.

Re:SQL is next for me (1)

andy19 (1250844) | more than 6 years ago | (#22785312)

I agree. SQL is definitely something more people should know. It's very different from other programming languages, and when used properly it's extremely powerful. With the amount of software that uses databases, SQL is a must-know language in my opinion.

Re:SQL is next for me (1)

jellomizer (103300) | more than 6 years ago | (#22785500)

I actually have a lot of fun with SQL. It is actually a good language to get your mind around. Knowledge working with LISP does help there are some strong similarities.

Because except for Procedural Languages such as Basic and C. You don't normally look at the Data one unit at a time. But you do your calculations on the entire set.

You can using a cursor make it so you can do a normal loop and for with variables. But for most cases it is easier to do a one line SQL call.

SELECT (X/(SELECT SUM(X) FROM A as B))*100 as PCT from A

It has a LISP like quality to it.

Re:SQL is next for me (2, Informative)

DJ Jones (997846) | more than 6 years ago | (#22785574)

I must point out that SQL isn't a programming language, it's a query language.

But yes, it is useful to know.

I understand that COBOL is pretty hot... (4, Funny)

PC and Sony Fanboy (1248258) | more than 6 years ago | (#22785134)

I hear that COBOL is a pretty good language to learn. It isn't new, but it is old enough to make a comeback (like disco, aviator glasses and big hair)...

Haskell (1)

Neotrantor (597070) | more than 6 years ago | (#22785164)

Haskell would be easier coming from Java as it's strict typing, if you like C/C++ better than Java I think people will find the flexibility of lisp more familiar.

Prolog is good, but after functional languages such as Haskell/ML/Clean because you'll already have an introduction to pattern matching

None of the above... (5, Insightful)

Ckwop (707653) | more than 6 years ago | (#22785166)

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

Re:None of the above... (0)

Anonymous Coward | more than 6 years ago | (#22785432)

"Yes, but can you prove that your approach is correct? I can." You must be a joy to have as a co-worker.

Ruby... it's evolving (1)

dublinclontarf (777338) | more than 6 years ago | (#22785172)

I would put my money on Ruby, as a language it's pretty nice & powerfull, on top of that it's got some interesting implementations in the works (Rubinius).

For those who haven't RTA (1)

derrida (918536) | more than 6 years ago | (#22785178)

The options are:
  1. Ruby
  2. Scheme
  3. PostScript (?)
  4. Prolog
  5. ML
  6. Haskell
  7. Haskell
  8. Scala
Qustionmark mine.

Re:For those who haven't RTA (1)

dctoastman (995251) | more than 6 years ago | (#22785382)

Postscript is a Turing complete language.

Factor (0)

Anonymous Coward | more than 6 years ago | (#22785182)

I can't imagine how Factor didn't make this list. It's a concatenative stack based language much like Forth. You may have heard the saying "Forth is Lisp written backwards", which is fairly true, except that Forth is a fairly low-level language. Factor on the other hand is a high level language, and it's not at all a stretch to call it "Common Lisp written backwards". Its advantages over Common Lisp* are that as a stack-based language, passing multiple parameters between functions is easy (no need to package them up in a structure or mess with multiple-value-bind), code is written naturally in a point-free style (making it significantly more compact), and that its standard library is significantly more complete than that of any free Common Lisp. All this, and it's not even at version 1.0 yet. Factor is still undergoing explosive development, and I have high hopes for its future.

* Its chief disadvantage is that combinators can be tricky to write.

assembly (5, Insightful)

petes_PoV (912422) | more than 6 years ago | (#22785184)

if you have only ever programmed in a high-level language, you should really learn a low level one. This will give you an appreciation of what actually goes on inside a processor.

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.

Re:assembly (0)

Anonymous Coward | more than 6 years ago | (#22785400)

Learn what really goes on down on the metal and why all of those cute paradigms and patterns make 3GHz processors perform no better than their 256MHz ancestors.

Re:assembly (1)

TheSpengo (1148351) | more than 6 years ago | (#22785474)

I agree, if you know C, assembly shouldn't be particularly hard to pick up. It looks daunting at first glance, but it really isn't as bad as people make it out to be. After you learn it, all your code will look a hell of a lot better since you understand what the CPU is actually doing better.

Re:assembly (1)

ohxten (1248800) | more than 6 years ago | (#22785530)

You beat me to it.

The way assembly language is organized is more difficult. You only have a few registers, and then the stack, and then memory. There is no "if" or "else". It's a very different way of thinking.

Example:

if (x == 0) {
/* ... */
} else {
/* ... */
}
is:

test eax, eax
    jz x_is_zero
x_is_not_zero:
    ; ...
    jmp after
x_is_zero:
    ; ...
after:

Re:assembly (1)

angrytuna (599871) | more than 6 years ago | (#22785568)

I'd have to disagree on the 'first language' part. Learning to write code for the first time can be extremely frustrating for some (most?) folks; I was one of them. My first language was Java, and one of the best things about learning in that was the quick turnaround to positive feedback; specifically, positive feedback that looked useful in something other than a non-academic setting. It whetted my appetite, and gave me a bit more of a foundational base to actually understand what was going on when I first wrote in assembly, and how it fit into the grander scheme of things.

I would agree that they should look at it eventually, though, for reasons you've already specified.

Pet language == failure (0)

Anonymous Coward | more than 6 years ago | (#22785190)

Learn a broad tool set and select what's appropriate for the task at hand. The language doesn't matter, the results do.

What language should you learn next? The one best suited to your next project!

None (2, Interesting)

the computer guy nex (916959) | more than 6 years ago | (#22785196)

A good programmer would study design patterns in their downtime rather than a new language. Learning the right way to solve common programming problems is far more useful than learning mindless syntax.

It's not all syntax (5, Insightful)

shyberfoptik (1177855) | more than 6 years ago | (#22785352)

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.

Noob's question. (0)

Ethanol-fueled (1125189) | more than 6 years ago | (#22785200)

I'm a programming noob,(C/Cpp/java/more to come) so who wants to earn a few mod points explaining things?

Ruby is an extention of java, so should I treat it as a fundamental programming language? For that matter, why dosen't the article list SQL?

Postscript? That seems to be a bit proprietary.

lisp/prolog/haskell - these seem to have a reputation for being developed in academia, for academics. Will they make me the bucks once I leave academia?

erlang - as many slashdotters have pointed out, erlang's gimmick - being parallel, isn't all that efficient.

Finally, what about D [wikipedia.org] ? ;)

Re:Noob's question. (1)

liquidpele (663430) | more than 6 years ago | (#22785536)

There are two ways programming languages make you money:

1) Writing new code
This includes some C, but mostly C++, Java, .NET, and maybe some PHP or Actionscript if you do web development (n00b).

2) Supporting Old Code Written X number of years ago (often over 10).
This includes C, COBOL, FORTRAN, C++, VBScript, Perl, etc.

Not very many places pay for Ruby, Python, Lisp, etc. If they do, that's great and all, I'm just saying you won't be finding pages and pages of job openings for them.

Go Lower (1)

Jupiter Jones (584946) | more than 6 years ago | (#22785230)

If the only programming languages you know are along the lines of C++ and Java, then I'd suggest moving down to lower-level languages rather than up.

I know a lot of people who have mostly just been exposed to the Javas and VBs of the world, on systems with virutally no constraints on speed or memory resources. Consequently, they don't really know anything about how computers actually work. Nor do they have much experience in programming "tightly" where needed.

Maybe it's just me having a "get off my lawn!" moment, but a few weeks spent writing Assembler for a simple, 8-bit chip would probably do them a world of good. At the very least, some good old-fashioned bit-twiddling and pointer-fiddling using non-OOP, 100% portable C would fit the bill.

JJ

Anything But Perl (1, Insightful)

Perl-Pusher (555592) | more than 6 years ago | (#22785236)

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.

Re:Anything But Perl (4, Insightful)

notque (636838) | more than 6 years ago | (#22785318)

So don't use code snippets without understanding them. Just because you can find fewer doesn't mean perl is bad language to learn first.

I have only learned perl, and am quite content with it as it does the jobs I need it to. I haven't been using it for 5-7 years, but I look back on code from 3 years ago and it's no less secure than anything I write now. I decided to understand any code snippet I used.

I think Perl is a fine first language as long as you start simply, and expand giving yourself time to take in the concepts. Enjoy the exploration.

I can't speak in comparison to any other languages obviously, but it worked for me.

Assembly (0)

Anonymous Coward | more than 6 years ago | (#22785250)

will help you write tightly managed code instead of the usual bloatware.

Prolog (0)

Anonymous Coward | more than 6 years ago | (#22785264)

Prolog is mentioned in the article, and it is my pick. It is an interpreted deductive rule based language. Prolog isn't very useful or efficient for most applications, but it is great for doing things like AI for games. Algorithms that require hundreds of lines in most languages can sometimes be done in a single line of prolog (although this doesn't mean that it will execute any faster). There are free prolog interperters available for most languages, so you can do your application in your favourite language, and use the prolog interpreter only when needed.

Whitespace (5, Funny)

ookabooka (731013) | more than 6 years ago | (#22785270)

I think Whitespace [wikipedia.org] is worth learning, if only to be a smartass on exams where the prof specifies you may use "any" programming language. Just leave it blank, then after the exam spend a few hours figuring out how the hell you would solve the problem in whitespace, and bring a proof of concept on a USB flashdrive to fight the inevitable incorrect grade you receive for the problem.

I have yet to find the courage to actually attempt this. . .

"Beyond C++ and Java?!?!?" (2, Interesting)

JamesP (688957) | more than 6 years ago | (#22785278)

Wow, that's like, coming from a very narrow range...

But my suggestions are:

Python - go learn why strong-typing doesn't mean a lot in practice (except for headaches).

Lisp / Haskell / whatever - go learn ' a different way' of programming things. Trust me, it rocks.

Ruby / ECMAScript - it's the future baby.

Visual Basic (0)

Anonymous Coward | more than 6 years ago | (#22785300)

I don't know about you, but I learned Visual Basic 2003, and then Visual Basic 2005, now I'm going to learn Visual Basic 2008.

Malbologe (2, Interesting)

Urger (817972) | more than 6 years ago | (#22785322)

Malbologe [esolangs.org] , a language so painful it took two years just to write a "Hello World" for it:

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

extending beyond their normal boundaries (1)

witte (681163) | more than 6 years ago | (#22785358)

I'm big-boned, you insensitive clod !

You FAIl 1t (-1, Flamebait)

Anonymous Coward | more than 6 years ago | (#22785374)

Assembly, FORTH (1)

Average (648) | more than 6 years ago | (#22785414)

If you aren't trying to get a specific job, I recommend getting deep into an assembly for a few months. Preferably, something simple. Something 8-bit (I started with MOS 6502... but the 68HC11/12 with flash/EEPROM and BUFFALO debugger is even easier). Something on a board you've wire-wrapped yourself. Make it blink an LED. Hook it to a DAC. Hook it to a motor, moving something. Learn every opcode on the little chip.

From there, you'll understand what a C compiler (portable assembly) is doing, at least on a basic level.

Instead of Postscript, I'd suggest the language that Postscript is born of... FORTH. Heck, when you get bored with the assembly on your microcontroller board, burn a simple, fixed-point FORTH onto it, and get a whole new appreciation of what can be done with a few 1000 bytes.

Wrong question (0)

Anonymous Coward | more than 6 years ago | (#22785420)

The real one would be "how do you choose the best language for the task you have to do?" The answer involves some knowledge on how machines work (digital electronics, machine/assembly language) how operating systems work (C, compilers and tools, memory allocation, threading, etc.), how applications work (C, C++, other high level languages, libraries, optimization), how users work (proper GUI design, psychology, idiot proofing dangerous operations), how business work (Java, Windows, $BUZZWORDOFTHEYEAR).

In other words you need to learn a bit of every language (read: a bit of the environment the language was written for) to be a generally good programmer. Knowing squat about low level memory allocation doesn't help the casual Java developer, but knowing what that hex code error means and being able to discover what asm, C or C++ subsystem generated it, and for what reason, still makes a lot of difference, thankfully.

Get the Little Schemer (5, Interesting)

burris (122191) | more than 6 years ago | (#22785492)

Like a lot of people have commented on this thread, it's past time for you to learn a functional language. I'm not sure if it is true, but new CS students at MIT used to have to learn Scheme as their first language. Learning a functional language will transform your programming ability.

I recommend the book The Little Schemer [neu.edu] This book is like no other programming book you have ever used. It is a socratic dialog between you and the interpreter. Questions on the left, answers on the right. It is meant to be used with an interpreter.

Once you make it through this book you'll be a much, much better programmer. You'll also have an easy time learning languages like Haskell, which is used quite a bit in academia and is useful for real world software.

So buy a copy of the Little Schemer and download an interpreter, Dr. Scheme is pretty good, and get cracking.

Stack based or BrainFsck (1)

ZeroNullVoid (886675) | more than 6 years ago | (#22785496)

Brainfuc* is a fun one - http://en.wikipedia.org/wiki/Brainfsck [wikipedia.org] ASM but seriously the most practical languages to learn next are the scripting languages for installers like NSIS, Inno, or InstallShield.

By Neruos (0)

Anonymous Coward | more than 6 years ago | (#22785504)

Depends, are you doing this as hobbie or career?

As hobbie, what ever you want, what ever is the uber-lang-of-the-day. There are to many languages out there. Are you looking for compiled coded or scripting?

For career, you would need have a good understanding of java, c/c++, .net/vb and databases. You might want to touch up on some legacy items(sap, cobol, assembler, etc) if you intend to migrate or support companies with older infrastructure.

I agree with above posters (1)

Is0m0rph (819726) | more than 6 years ago | (#22785520)

If you are a good programmer you don't learn a new language because any language isn't hard to pick up. Make sure you have a good foundation of procedural, OO, and logic languages and you can write code in anything without a lot of learning involved.

Return to roots? (2, Informative)

Michael Iatrou (681428) | more than 6 years ago | (#22785592)

Well, after C++ and Java it's a good idea to actually learn C. It still makes a big part of the world to go around, an it seems hard these days to find programmers who know how to write fast and secure code in C.
Load More Comments
Slashdot Login

Need an Account?

Forgot your password?

Submission Text Formatting Tips

We support a small subset of HTML, namely these tags:

  • b
  • i
  • p
  • br
  • a
  • ol
  • ul
  • li
  • dl
  • dt
  • dd
  • em
  • strong
  • tt
  • blockquote
  • div
  • quote
  • ecode

"ecode" can be used for code snippets, for example:

<ecode>    while(1) { do_something(); } </ecode>