Most Useful Programming Languages

DiscussiePurely Programmers

Sluit je aan bij LibraryThing om te posten.

Most Useful Programming Languages

Dit onderwerp is gemarkeerd als "slapend"—het laatste bericht is van meer dan 90 dagen geleden. Je kan het activeren door een een bericht toe te voegen.

1runkrocker
aug 27, 2008, 9:44 pm

What do you think the most widely used programming languages are? I was told by a fellow programmer the languages you need to know to be a programmer are: Java, C+, PERL, and Visual Basic. Hope to hear from some fellow programmers soon!

Oh yeah... And does anyone think DOS could still possibly be useful?

2timspalding
aug 27, 2008, 9:48 pm

I dunno, it feels like you're approaching the issue backward. What do you want to do? What do you know already?

3WholeHouseLibrary
aug 27, 2008, 10:43 pm

I fire up DOS command windows all the time. There's TONS of things that aren't possible in the Windows environment that are no-brainers in DOS. I'm even aware of some businesses that are still running DOS. I think they scavenge Goodwill for hardware support.

I specialize in the Dead Languages, and I either need to learn new languages or find another line of work. So, when you respond to runrocker, please also include what sort of applications and/or platforms they are good for.

Thanks.

4andyl
aug 28, 2008, 4:54 am

Most widely used is a bad measure anyway. Stuff like Cobol is still very widely used - however it nearly all legacy stuff and no-one in their right mind would recommend you learn that.

To a great extent it does depend on what you want to do. C++ and Visual Basic are not very well suited for doing web applications (you can do them but I wouldn't say they were the ideal match for the problem domain).

I am interested that your colleague didn't mention C#. I think it is shading out VB now in the Microsoft world.

Also most good programmers have to move from one language to another during their career. I know I have a number of times. So just learning one and sticking with it is probably not a long term option.

As for DOS - I would say forget it unless you have an app that requires it. There are far better command line interfaces available - if you are using Windows look at Cygwin (which offers a Unix shell and tools for Windows). That way you are building knowledge which will be of use on Linux and the Mac as well.

5timspalding
aug 28, 2008, 4:57 am

Sign of my ignorance: Does Windows still have DOS underneath it, even now?

6andyl
aug 28, 2008, 5:44 am

No it doesn't. It still has a command shell which offers most of the same facilities as DOS did.

7conceptDawg
Bewerkt: aug 28, 2008, 6:34 am

This is a very loaded question that should be approached a little differently. It's not about what's popular or what is hip right now. Languages come and go. The best thing to do is start with a language or languages that teach you the basics of programming, data structures, and logic flow. It's also good to have experience in both procedural and object-oriented environments.

I wouldn't recommend PERL for the same reason that I wouldn't recommend PHP. They are both hacky languages that let (and sometimes encourage) "bad" programming practices. I've used both of these languages (understatement) so I feel pretty comfortable with that statement. That's not to say that every program written in PHP or Perl has bad programming, just that they make it easy to do so. In the end it's up to the programmer.

C is a good starting point. From there you can learn C++, Java, or Objective-C (my personal favorite language for ease of use and elegance) quite easily. I'm not knowledgeable enough about VBasic to comment.

But it does come down to what you want to do. If you primarily interested in web programming then concentrate on Python, PHP, Perl, and Ruby. Pick one. Python is probably the most structured (from my perspective anyway) and best to start with. PHP or Perl are probably the easiest to learn. Ruby is the sexiest right now but that could be slipping.

8andyl
aug 28, 2008, 7:28 am

As above.

C is a good starting point and you can add C# to that list of other related languages.

I wouldn't recommend VB (or VB.NET) for that matter. C# is quite simply a nicer language which lets you do the same sort of stuff with the same tools.

Ruby is sexy for all the wrong reasons. People have picked up on Ruby because of Rails. However its real sexiness (at least to me) is at a much lower level - however unless you are an experienced programmer you are unlikely to appreciate those features.

Most of the other languages (apart from the dinosaurs) have lesser take-up in the commercial field however they do have their niches.

9MMcM
aug 28, 2008, 10:57 am

In addition to all the good advice above, there is another perspective worth considering. Do you want to find a team doing work that you will enjoy, where conditions dictate the language (not necessarily because the manager is an autocrat; the project may be well underway), and so want to bet on the best language for finding the best such environment? Or do you want to find an environment where you will be called upon to do good work with tools mostly of your own choice, and want the language that will best equip you to succeed there?

(I'll spare everyone language design opinions of the languages already mentioned, since that gets us off track.)

10timspalding
Bewerkt: aug 28, 2008, 12:06 pm

I wouldn't recommend PERL for the same reason that I wouldn't recommend PHP. They are both hacky languages that let (and sometimes encourage) "bad" programming practices.

Fair enough but I also wouldn't fall into the trap of snobism—believe, for example, that because LISP is such a great idea, it's also a great language in the real world. Reddit wrote themselves in Lisp because the Paul-Graham set pushed that view. They ended up rewriting it in Python because there were no libraries.

As far as "hacky" and "bad" programming, I'd defend both practices, provisionally. Programmers like to talk about tools, and think their job is writing programs. Unless you're some jerk in the bowels of a big software company, your job isn't to write programs but to create good things. Again and again I've seen a programmer get distracted by tool-sharpening or the gorgeous logic of their code, and create a piece of shite because they weren't thinking on the level of the thing.

Notably, IMHO, Chris is not one of those programmers. Somewhere along the line he learned how to think on that higher level—I suspect being a graphic designer helped. So maybe someone like him would benefit from being removed from hacky temptations. But I'm not sure your average programmer needs to focus on the tools all the time. The world is full of bad web applications. Programming is very seldom the problem with them.

In much the same way, sometimes it's not about the paint or the technique. You can be a great technical painter, and be a bad painter even so.

11caseydurfee
aug 28, 2008, 12:41 pm

Being a good programmer and being employable are two different things. The languages/skills that will make you most employable won't necessarily make you a good programmer. That affects not only the language you want to learn but how you learn it. Being an effective Ruby on Rails programmer does not require you -- and certainly doesn't help you -- to understand the abstract magic of Ruby that makes such a framework possible.

Becoming good requires a certain amount of brain training. Things like LISP are a good workout for your mind, even if they're not that practical or suitable for the kind of code most programmers end up writing all day.

But you want a straight answer, and probably don't want to start with brain bending. I would say Python, given no idea what you want to code. You can be pretty effective with only a beginner's knowledge. It generally stays out of your way and gives you good tools for whatever you're trying to do. And all the high-level stuff in LISP and Ruby is there for when you're ready to step up your game. Finally, given the huge investment Google has made in Python with AppSpot, the rise of the Django framework, and work at Sun and Microsoft on making Python run on top of Java and .NET, you might even be employable.

12timspalding
aug 28, 2008, 1:07 pm

I have to agree with Casey on that one—an agreement all the more significant because I'm NOT a Python programmer. Python is currently at a sweet spot or sorts. Maybe five years from now, Python will be PHP. But it's got a good mix of structure and flexibility, and doesn't require you to write your own libraries for everything.

13runkrocker
aug 28, 2008, 5:18 pm

I really hope nobody thinks I am ignorant when it comes to programming languages. I know at least a basic knowledge of a few. I was mostly interested in other people's viewpoints on the matter. I never really saw a topic discussing all kinds of programming languages so I wanted to make one because I thought it would be a good topic. I just wanted to clear that up and thanks to everyone for replying!!!!

14conceptDawg
aug 28, 2008, 10:48 pm

My mention of Perl and PHP being hacky languages is in no way meant to detract from them. I've been writing Perl and PHP since the mid 90s so I feel pretty confident in my position. It's just that they allow you to do things without thinking about them that would get you into a lot of trouble in more structured languages. The dynamic typing and automated garbage collection are two main points there. Also, by going straight into these languages you never learn many of the basic tenets of programming such as pointers, handles, structs, data structures, etc. Sure, many of the newer higher level languages don't use them but it is certainly good knowledge to have because eventually you really need to know how things are working underneath.

15timspalding
aug 28, 2008, 10:50 pm

I'm surprised to hear you make that point. I agree about the pointers and so forth. I haven't done a linked list in ages, and I rather miss them :)

I would have thought you'd think they lead you into bad habits for themselves too, no?

16MMcM
Bewerkt: aug 29, 2008, 12:38 am

It's interesting that there is a breadth of opinion on what the basic tenets of programming are. On the one hand, you have just modularity and abstraction in Hal Abelson and Gerry Sussman's course that turned into Structure and Interpretation of Computer Programs, so Scheme. On the other, really knowing how things are working underneath would seem to argue for assembly language.

Perhaps it would be productive to break "useful" down into specific characteristics, such as rapid development, large term support, long term maintainability, efficiency, layered (DSL) abstraction, continuous operation (with patching), interoperability, etc.

17conceptDawg
aug 29, 2008, 2:12 am

I also think it it highly dependent on the target solution. If you're going to be doing mostly web application programming then PHP, Python, Ruby, ASP, C#, and Perl are your mainstream choices. C doesn't really factor in much anymore unless you are writting special purpose cgi-bins.

Assembly language IS getting to know the guts of programming but, in my opinion, is a bit overkill for most mainstream programmers. If you're going to be doing board-level work like graphics pipeline programming then it makes a little sense. Web apps, not so much. There's a middle ground which is basic data structures, application flow, design patterns, (MVC for instance, whether you agree or not...it's good to be able to argue about why you don't agree with it and/or at least know what people are talking about when they are discussing it).

But then again, a lot of my discussion hinges around writing code that others can understand and use. Programmers tend to work in teams so that kind of standardization and base of knowledge is important, even if just for communication among the team.

18conceptDawg
aug 29, 2008, 2:13 am

Oh...and linked lists rock. Ohhhhh. It takes me back a few years.

19timspalding
aug 29, 2008, 2:15 am

>17 conceptDawg:

That's why it's critically important that you conform to your co-workers' bracketing style.

20TimSharrock
aug 29, 2008, 4:27 am

and back to lists of languages - the company I work at has large quantities of live Fortran, PL/1 (these are bugfixed and given local enhancements, but large new bits are not now written in them), there is some C, but most has now been absorbed into C++, the C++ volume is growing, but not as fast as the C#. Perl is used for utilities "round the edge" there are odd bits of VB here and there, and there are also millions of lines of our internal customisation language. Most programmers have a couple of favourite languages among the pile, but can read most of the others (Perl and PL/1 are the two that are least universally known - toolsmiths mostly use perl now, but there are still fortran tools in use, and the PL/1 is restricted to one of the divisions of the company). Personally I use C++, perl, some C# (increasing) and as litlle Fortran as I can get away with.

21andyl
aug 29, 2008, 4:38 am

#17

I would add Java to those mainstream web application languages - mainly for larger systems.

Also it makes sense to know languages from more than one paradigm. If you know java or c# (or even python/ruby) it can be advantageous in learning a functional language like Haskell or Ocaml. Even if you don't use it on and ongoing basis it will make a difference to how you think about solving a problem and hopefully make a difference to your understanding and implementation of certain concepts in your main language. This was the reason the pragmatic programmers promoted a "language of the year" clearing house where programmers were encouraged to learn a new language every year.

22conceptDawg
aug 29, 2008, 9:08 am

Ah yes, I left out Java. Good catch. But my list wasn't really meant to be comprehensive anyway. :)

19: Said coworkers should attempt to use the industry standard bracketing style and there would be no conforming necessary. Perfect example. :)

23MMcM
aug 29, 2008, 11:10 am

If we're rounding out the list, then ECMAScript / JavaScript / JScript. It is a solid language, which does not get much respect, due in part to how poorly written much of it is in the real world. There are at least a couple of ways of writing maintainable scripts, depending on how wedded to classic Simula OO vs. delegation you are. So it's likely you'll encounter a variety of styles in a largish / hybrid system (possibly including third-party libraries).

24lorax
aug 29, 2008, 11:14 am

19, 22>

;)

Not really relevant, but an amusing story for this group nonetheless:

Recently California's Governator decided that, to cut costs, all state employees would be paid minimum wage until the legislature passed a budget, and all part-time employees would be (temporarily) laid off.

However, the state's payroll system is still in COBOL. Among those laid-off part-timers? The only state employees left who know COBOL. Good luck hiring anyone else who knows the language and is willing to work for minimum wage....

25timspalding
aug 29, 2008, 11:33 am

>22 conceptDawg:

As the (near) inventor of social cataloging, I decide what's "industry standard." :)

26WholeHouseLibrary
aug 29, 2008, 2:11 pm

Okay, so you folks have just rattled off maybe a dozen programming languages that didn't exist even ten years ago. But you still haven't mentioned what they're good for, and that's what I'm trying to understand.

Example: In the olden days, COBOL was GREAT for writing business applications because it was plain English, and you could read it like a novel. I've worked with 4 revisions to the standards, and it just kept getting easier to write and implement, mostly because the standards were tightened and demanded a more 'structured' approach. Functionality it ~didn't~ have was direct manipulation on the bit level, but you could always call a subroutine that was written in FORTRAN or C or TAL or Pascal or whatever assembler-like language you had available. On the systems I've worked on (almost exclusively, for the past 28 years), the screen interface was written in a language called SCOBOL -- '74 standards, basically COBOL optimized for this one purpose. The major limitation is that it doesn't do disk I/O, and you can't do web pages with it, ad nausea. (Think DOS screens only without the elegance.)

In short, COBOL was good for getting an application written quickly; FORTRAN was good for number crunching (the entire NYSE/AMEX stock/bonds applications were once all-FORTRAN); TAL (my primary language for many years) was a fantastic language for transactional processes (ATMs, POS processing) and quite versatile for bit-flipping and data manipulation. C and Pascal are/were variations of TAL (should probably flip that around -- C and Pascal were probably created first; not sure...).

Now, I may be a dinosaur, and know only dead languages, but I ~do~ have opposable thumbs. At the last place I worked as an employee, they had a 'trainer' come in and give us a 3-day 'class' in the .net (environment?, style?, what?) -- object-oriented coding, generally. The training was supposed to have been specifically for people who coded in COBOL, but should begin working on web-based applications. The problem was, the trainer didn't know ANYTHING about COBOL, and couldn't relate a single thing he showed us to it. He couldn't explain the structure of the code he generated, how the I/O interface was used... Two years later, none of us had been given an opportunity to work in a web-based environment. Perfect set-up for a layoff -- "Hey, we trained you for the new platforms, but you haven't done anything with it. Bye-bye!"

(Sorry for the rant. I feel much better now.)

So, back to the (my, really, in #3) original question -- other than "company standards" (or lack thereof), what are the pros and cons (maybe features is a better term?) of the various web-based programming languages? And which ones are the most marketable? And which ones are already out-of-favor, but might still be worth being proficient in?

27MMcM
Bewerkt: aug 29, 2008, 2:41 pm

I may be wrong, but I think C# is the only language mentioned so far that didn't exist ten years ago. LISP is about the same age as FORTRAN and COBOL. Half century more or less.

There seems to be some indecision between listing languages and what they are good for and clarifying the goals so that an appropriate set of languages can be given.

28andyl
aug 29, 2008, 2:49 pm

Well functionally they are all pretty much equivalent - there are differences in syntax, tools, environment and predefined libraries but in terms of raw abilities there isn't too much to choose between them.

C# (which is part of .NET so might have been what your trainer was trying to train) and Java are pretty similar. Both have a very similar heritage and design philosophy. The usual web frameworks for Java tend to emphasise separation of concerns more than ASP.NET (the standard C# web framework) does. Both are squiggly bracket languages - like C. Both have removed raw access to the more tricky things like pointers although they still exist.

Perl (actually 21 years old) was first written as an alternative to shell script, sed, awk and friends. It was originally to help with processing reports. It has been improved and expanded over the years. Syntax is pretty obscure if you aren't from a strong Unix shell background. OO was added later and wasn't part of the original language design. Generally programmers need to have discipline to produce good apps with PHP.

PHP (13 years old) original designed for dynamic web applications. OO added later and wasn't part of the original design. Code can be heavily fragmented and mixed with html. Generally programmers need to have discipline to produce good apps with PHP.

Ruby (again around 13 years old) was designed as an OO language from the start. From a raw language pov it offers far more than the others in that it supports features such as mixins, metaprogramming, closures and more. The Rails web framework has loads of supporters and it certainly seems to make easy things easy. Whether it makes hard things more difficult (the usual tradeoff) I don't know. Syntax is a little cryptic.

Python (16 years old) also has some strong web frameworks. Syntax is far more readable. However structure is determined by white-space rather than squiggly brackets or BEGIN/END statements.

Perl, Python, PHP and Ruby are generally what are known as scripting languages. They are all dynamically typed.

BTW - that trainer must have been rubbish. You obviously need to build bridges between languages and IMO 3 days is no where near long enough. I would have started by getting you to write a simple web application in COBOL (I know people who have down quite sophisticated stuff in COBOL) just to take the mystique away. Then started on the .NET stuff.

29MMcM
Bewerkt: aug 29, 2008, 7:03 pm

I'm willing to take a stab at it from the other end.
A few task-oriented opinions:

Learning to program: Scheme.

1 to 2 person team developing web site, deployed quickly with the expectation of ongoing changes at all levels: Ruby on Rails (+ JavaScript for client-side bits).

12 person team developing >1M LoC application with front-end and back-end components: Java (+ JavaScript for client-side bits; + XML configuration data structures).

Windows desktop application / MS-Office add-on: C#.

MCU: C or assembly language.

FBW: Ada.

Hard-core logistics / optimization over terabytes of data at thousands TPS: Common LISP.

Embedded scripting language: Lua.

One-off integration tasks: Perl. (NB: It is best to destroy the program after running it. Otherwise, you may end up trying to maintain it, which is impossible. Also, should you find yourself inheriting someone else's Perl script, you may need to consider another line of work.)

Math: Mathematica.

Stats: R.

And, mostly for completeness,

Core business apps: ABAP. (Or PL/SQL, or even COBOL or RPG; it's never a technical decision)

30bvs
sep 9, 2008, 2:52 am

#29: good way to categorize languages! I use Scheme for many tasks: small, large, one-off, prototyping etc. No Perl for my own stuff though it is needed to hack on other people's stuff I use. C/C++ for speed. Maxima for symbolic math. Q (aka K4) for crunching through terabytes of data! Q is a broad spectrum language and I am using it as much as Scheme now. If you climb its somewhat steep learning curve and are based in NY, you can probably find jobs in the financial sector!

#26: I'd recommend JavaScript as it will get used more and more and it will lead you to learning related stuff (hopefully). Also, it is a decent language. You may want to check out if a local community college offers classes. Though relating JavaScript to COBOL concept might not be so easy.... SQL is another thing worth learning.

BTW, Tandem's TAL came after Pascal and C. I thought there was still some demand for TAL programmers?

31andyl
sep 9, 2008, 4:28 am

Generally the quality of most Javascript and the teaching of it as a general purpose language sucks. Also there are very few books that look at Javascript as a language - Javascript: The Good Parts (of which 10% of the book describes the awful and bad parts) is one - rather than just something to achieve small effects on web pages. The strong link to web pages is both a blessing and a curse for Javascript IMO.

32drwho
jan 2, 2009, 2:54 pm

It depends on the task at hand. Are you talking about building a web application, a utility to digest data and generate reports, an application that end users are supposed to use, an application that developers are supposed to use, or what?

33kenno
Bewerkt: apr 13, 2012, 11:10 am

I realise it has been several years since this post was updated but I've just come across it and found it interesting so decided to add my comment.

I have recently finished University where I studied Computer Sciences. I learned C, C++, Java and Python. before that I learned Pascal at college.

I graduated last year and I am now employed writing and editing programs in TAL, COBOL, SCOBOL and TACL, with the occasional bit of C thrown in

34conceptDawg
apr 25, 2012, 11:43 pm

And since this thread started there has been quite a lot of work going into creating a wider acceptance of Javascript/ECMAScript as a general purpose language. The work being done on Node.js is particularly interesting. It's a powerful language that is getting faster and faster because tons of money is being thrown at it by the big browser boys (Google, Microsoft, Apple, and Mozilla) to create leaner and quicker JS engines.

Also not mentioned above, but to create iOS-native apps (iPhone, iPad) you'll want to learn Objective-C, which is the bastard child of C and LISP. I happen to like it a lot but I know a lot of people can't stand the square bracket and very verbose method syntax. It helps that I've been using it for years.

If you want to do native Android development then Java is your tool. I'm not a fan. I've never been taken with Java but I'm especially put off by the Android toolset and design style (from an app structure standpoint, not necessarily the visual style).

You can also use tools like PhoneGap to make native apps for most mobile platforms using HTML and Javascript, but those are what I'd call "native" apps. They're hybrids, though that's not necessarily a bad thing either.

35brightcopy
apr 26, 2012, 12:06 am

There's also some interesting development with Adobe's Flash Builder. Since Apple loosened the "you must use objective C", Adobe has went whole hog and made a very nice toolkit where you can use Flex (it's a lot like a true object oriented javascript, but with neat features like data binding) to create native apps for iOS, android and desktop using the same source code. I've played around with it and it's quite promising.

And there's been a lot of work on mobile-apps-that-look-native, namely with Sencha Touch. But mobile web continues to be a headache since there's still a lot of limitations on what you can do with it (storage space, cpu, capabilities, etc.)

36andyl
apr 26, 2012, 4:53 am

#35

I wouldn't recommend Flash Builder. Adobe has more or less declared that people should really be looking at html5/js (at least in the long term). For example Sencha Touch is a html5/js mobile toolkit - there are many others.

37brightcopy
Bewerkt: apr 26, 2012, 10:22 am

Nah, that's a complete misunderstanding, due to Adobe bungling the messaging. If you'd like me to elaborate, I can. But if you're simply against it, there's no point.

ETA: And note I talked about ST in my post you referenced. I'm creating some projects in it, but html5/mobile has some severe limitations.

38kensor
Bewerkt: mei 4, 2012, 12:57 pm

The most important languages to know are C and C++, and they have been for the last fifteen years or so. Java has also been important as a reaction to them and on its own merits. Because of the recent popularity of iOS products, Objective-C enjoys a surge of interest. LISP & Scheme are important, in contrast, both because of differences and capabilities relative to other languages. Operating system shells (bash, zsh) and scripting tools (Perl, Python) are necessary and useful; worse or better results from them depend on efforts expended to learn and use them, as is true for all languages. Of hundreds, indeed, thousands, of languages, the more important ones are better documented and supported live. Last, but likely not least, various facets of mathematics are intimately interwoven within the fabrics of computer languages, so continuing study of these relationships is recommended.

39Makis
aug 4, 2012, 5:56 am

Calling Python merely a scripting language is making anyone a disservice. Large applications have been written with it and it copes very well and is effective. Here are some examples: http://wiki.python.org/moin/Applications

40crisafugate
mei 28, 2013, 4:32 pm

The most popular languages are the compiled languages: C, C++, Java, C#. But the fastest growing languages are the scripting languages, specifically Ruby, Python, Javascript. I personally am into the scripting languages including Ruby, Python and Tcl. But have to tolerate the compiled languages.

41crisafugate
mei 28, 2013, 4:34 pm

Python is a scripting language, of moderate power. Ruby and Tcl are much more dynamic than Python.

42brightcopy
mei 28, 2013, 4:59 pm

"Popularity" of a language is something that can be quite squiggly to try to quantify. I did some research into this lately, and here's a few interesting (and sometimes conflicting) attempts:

http://drewconway.com/zia/2013/3/25/revisiting-ranking-the-popularity-of-program...
http://www.enterpriseirregulars.com/35176/it-jobs-recovery-continues-picks-up-st...
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Take for example Javascript. It's near the top in some measures and a tiny fraction in others.

43applemcg
Bewerkt: nov 30, 2013, 9:52 pm

It's been a while since a message was here. So, I'm going to offer a tangential idea on "most useful programming language" it's been 6-7 years since i was in a hi-school classroom, where i taught Java to seniors. for the intervening time , as a trainer in industry, i taught Tcl, and our Java API, in addition to our proprietary "scripting" language.

Here's the tangent: for most of this time (the last decade), I've come to believe the important notion is:

"Your _third_ language should be a Programming Language"

And, in this context, the answer to "which" should be:

"Any one you can frequently practice"

To which I'd add "Excel Functions" as a useful "language". I like MMcM's taxonomy, too.

44vy0123
dec 3, 2013, 6:52 am

Erlang for programming Amazon Air's swarms of little delivery vehicles?