As I do my professional and personal work, I am always looking for the best tool for the job. In software development, there are several programming languages that can be used for a wide variety of reasons. I am often asked by people new to software development what is the best language to learn. They get confused when I ask them what they plan on doing. The reason is that people think there is going to be a best language for everything. However, everyone knows that there is no silver bullet. On the other hand, there are some languages which are better suited or more widely used in specific areas. So, given that idea, I came up with a list.
Enterprise Software Development – Java is typically used in this space as people are moving many administrative applications to an intranet.
Windows Development – C# should be used for any Windows development, this includes anything interface with the Microsoft Office Suite. Don’t tell me about POI for Java, I have used it, but the native libraries kick POI’s ass.
Rapid web prototyping and anything WordPress – PHP is really good for rapid prototyping what a web site should act like. It may even qualify as v1.0 for your site. It may not be a good long term solution and there are better options for large-scale development. It is also the main language for anything related to WordPress.
Web Prototype with a backbone – Python has quickly gained acceptance as the “next step” after PHP. Many current web applications use Python extensively. Adoption will continue as more services natively support Python like Google’s AppEngine.
General Web Development – (X)HTML, CSS and Javascript must be in your toolbox for any significant web development. If you try to remain standards compliant (which you should) then you need to look at the XHTML standards.
Data Integration – XML and JSON are the main data interchange formats on the web and in corporate development. With XML, there are various syndication formats (likely the subject of another post) and other business format standards to review.
Databases – SQL is critical to almost any application. If you learn standard SQL, then you can translate this to almost any database product on the market especially the popular engines like Microsoft SQLServer, Oracle, DB2, MySQL.
Toolbox – Every programmer should be able to do more than just program in one language. In addition, there are many scripting tools that can be part of your toolbox which can make you extra productive. Cygwin is a Unix shell that you can install on Windows, and I can not live without it. Unix scripting is very powerful when dealing with batch processing of files or even just interacting with the file system. Perl, the Pathetically Eclectic Rubbish Lister, is another language that can be used for web development, but it really shines when dealing with file and text processing.
I know I have ignored various tools and languages, but this is really just a starting point. In software development, it is always helpful to keep learning new things and new concepts. If you really want to stretch your mind, start working in Artificial Intelligence and programming in LISP, or do some logic programming in Prolog. If you feel really adventurous take a look at Standard ML. I am not sure what it is really useful for, but it is a completely different language than most.

![Reblog this post [with Zemanta]](https://i0.wp.com/img.zemanta.com/reblog_c.png)
This article was very informative. I switched to mac from PC a year a go for obvious reasons, (Vista gives me bad dreams). Unfortunately I had to leave behind my favorite scripting language, AutoIt. It is free and open source. Every admin should at least make sure and give this a hard look. It has the quickest dev to distribution time of anything I’ve seen. It is interpreted, so it is too slow for any real data crunching. However, if you need a quick fix on a windows system that is ready as fast as you can figure out the logic; AutoIt is what I would use. Check it out. Heck, I’ve seen it on Military computers.
http://www.hiddensoft.com
And thanks Edida for mentioning REALBasic. I think I’ll check that out.
LikeLike
FreeBASIC would be solid for the total newbie as it is cross-platform (Dos, Win32, Linux, Xbox, with bsd and macos pending). It can make solid useage of the win32 api, but also gtk/sdl/opengl/etc. It can use old school basic syntax or even ‘c’ concepts such as pointers, structures, constructors, destructors, and inline asm. output can be exe, dll, asm script, with output to c pending. Additionally win32 form apps must have a message pump made from scratch rather than having the language do it for you (cough vb cough).. ^_^
LikeLike
Great article, thanks for the info on not having to know all the different types just to program something simple in Java, and to know several to work with php/msql.. rest
LikeLike
I break it down into a few catagories:
1) Simple website ~ php
2) Simple website with backend ~ php + pgsql
3) Rapid prototyping of a concept ~ python +sqlite
4) Industrial strength website ~ php + Oracle
5) Industrial apps ~ Java + Oracle
I actually do not recommend mysql to any of my clients nor do I use it. If it’s small, then you want sqlite; backups in sqlite is simple, just copy the file. If you need an opensource solution that’s a bit beefy, pgsql almost rivals Oracle. If you need industrial strength, then Oracle.
php for web, python for everything but the largest of enterprise stuff.
I can RAD a python+sqlite in about half a day; I’d say in prototyping, me+python+sqlite+2 days is equal to 16 people+java+oracle. Yes, it’s that big of a difference.
LikeLike
Game development: C/C++
Embedded software development: C/C++
LikeLike
When will people learn that HTML and CSS are not programing languages. They are not object oriented and lack any basic underlining features of actual programing languages such as For loops, do-whiles, if statements, etc. They are styling code to get something to look a certain way, not to perform functions. (Even though JavaScript is kind of makes it as a programing language)
LikeLike
For Bioinformatics: we mainly program in C, a bit python – all under Linux-Environment.
LikeLike
Java, C#, SQL, HTML, CSS and Javascript
can cover all areas
LikeLike
the faster rapid prototyping I know is in Java:
jmatter
LikeLike
I don’t think there is a catch all language any more. No one have the luxury of saying “I’m an X programmer, I don’t do Y”. The fact of the matter is you need to know them all (or at least as many as you can).
So take a step back and really understand the principles or programming, object programming, design patterns, etc. Learn all about the the architectures and frameworks available to you. Then you can turn your hand to any language.
I work mostly in Microsoft Technologies (it pays the bills). But I also do Java, SQL, XML, HTML, JS, CSS, JSON.. you name I will do it. If I don’t know it, I will learn it.
That is what makes a good developer. Not what you know. Its knowing what you don’t know, and learning it.
LikeLike
What about Objective-C with Cocoa? On Mac or iPhone systems this should clearly be your choice.
LikeLike
Once again, I read an article like this and commentors want to bash ColdFusion. Not a surprise really, happens all the time.
I ‘accidentally’ put my resume up on Dice in November, and I’ve gotten 1 or 2 calls each day for a legitimate job opening for a ColdFusion programmer. (I also get a ton of headhunter calls, but those don’t count.)
So my suggestion to everyone else is DON’T learn ColdFusion. As the rest of the world has run to PHP/VB.Net, there has been a huge gap left in the pool of ColdFusion programmers.
Makes it nice for me that I can pick and choose between jobs while other people are getting laid off!
LikeLike
FYI, Standard ML’s major schtick is that mathematically proving that code written in it correct is really easy compared to other languages. As far as I know, it’s mostly used for research into automated theorem proving – if you want to learn a language like it but a bit more useful, you should probably look into other purely functional languages like Erlang or Haskell. (Possibly OCAML too – I’m not certain.)
LikeLike
RealBasic is pretty bloated. The executables it makes are huge and slow, as each exe is bundled with the framework.
PureBasic however, compiles native to MacOSX, Windows, and Linux, and the exeuctables are tiny and very fast. http://www.purebasic.com
LikeLike
This is a great article that underscores the breath of knowledge needed to be a successful professional.
I think an important point is that the question, “What programming language should I learn?” cannot be definitively answered, since most programmers will learn many languages during their career.
The true professional knows that understanding the foundational ideas of programming and programming language theory makes learning the next language easier.
The secret to a lucrative programming career is to learn the next language.
LikeLike
QUESTION for future career:
I’ve been trying to get on the Portal team here at work. They recommend learning basics like PHP.
I’m hoping that as I go through college I’ll have some website development experience under my belt, as I see that sort of work translates well to whereever I may choose to transfer.
I was thinking of learning C (for the core fundamentals of programming) and PHP or something like CSS (for actual page development).
My goal is web development (for visual aspect, but still able to offer background programming also). I just want to be useful on a portal team.
Is this a wise decision?
LikeLike
C++ is a better language to know than C#. you can do everything you can do in C# with C++ but you can do a lot more too. C# should be used if you know you can save time and money by using the features that come available with it namely the .NET framework for Windows and XNA.
C++ programmers created C# so a good understanding of C++ will give you a good understanding of C#.
In my environment we program to VxWorks OS with C++.
LikeLike
Where is C++???
Everyone knows every REAL application, game or OS is written in C++!
LikeLike
If you want to learn databases, saying “learn SQL” is only useful for simple queries. There are a lot of variations to SQL dialects.
If you’re just getting started, learn on a database that implements most of the SQL standard. If you’re on windows this means SQL Server and not Access. If you’re going the open source route this means PostgreSQL and not MySQL.
Why PostgreSQL? Because it follows the SQL standard carefully and the knowledge you learn will also be applicable to other databases. MySQL is a good database, and there are times it is the more appropriate tool for the job, but when it comes to learning, PostgreSQL is your best choice.
The reason for this is that MySQL, in the name of speed and releasing a package, have sometimes taken shortcuts. These shortcuts means that you don’t have to be as careful about the format your data is in, because MySQL will change your data to fit the storage method. Other databases will instead reject data that is malformed, rather than trying their best to store it.
Additionally, there is a lot of functionality that MySQL does not have (or did not have until recently.) It’s easy enough to replicate this functionality by other means most of the time, but by not being there in the first place a MySQL user has no idea these features are available when they move to other systems. By learning on a more complete system you will have a larger toolbox.
LikeLike
[…] up with a list. Includes the major programming languages and why you'd want to learn them.Link:https://regulargeek.com/2009/02/11/what-programming-language-should-i-learn/ Leave a comment Powered by LiveJournal.comAdvertisement Customize if (SnapShots) { […]
LikeLike
“Windows Development – C# should be used for any Windows development”
Sorry, generalizations in most cases are bad, and this is one of them. In the real world, I see 10 times as much VB.NET code as I do C#.NET. The two languages have feature parity and use the exact same runtime libraries. MS has made and promoted them as equals in the managed code space. If you are looking to get a job you should learn BOTH. You can argue C# is more like other languages, but you’ll see more VB code in the wild.
LikeLike
“If you try to remain standards compliant (which you should) then you need to look at the XHTML standards.”
I disagree. XHTML offers no benefit over HTML except in rare cases. (And if you don’t need to cite sources, then neither do I.)
There are different flavors of the HTML and XHTML standards: Strict, Transitional, and Frameset. If you want to remain standards compliant, learn to validate the Strict doctype for HTML. Your code will be cleaner and tighter than using the Transitional XHTML doctype I see so often.
More info:
http://www.alistapart.com/stories/doctype/
LikeLike
Have to learn Javascript and Python, haven’t learned either yet.
LikeLike
OK, tell me this…WHY should C# be used for all Windows development? You make a bunch of ridiculous “fire and forget” statements like this in your article. How about a little explanation behind your assertions? And “because it’s better” won’t cut it.
LikeLike
You should definitely know Actionscript 3.0 if you want to do interactive applications on the web – Arunabh Das
LikeLike
master SQL. For every 1 decent database guy there are dozens of applicaiton programers. Data lasts for years, applications come and go with the wind. The database is the foundation the app is built on. SQL Rocks!
LikeLike
Which language you learn is not relevant.
Learn a language – pick one.
Learn it well.
Learn it REALLY well.
Understand the principals of programming, data structures, and software development in general.
No matter what language you learn, you WILL have to learn others. Over the last 25 years, I have programmed professionally in about 15 different languages. I have “played around” with another 10-15.
Learn the fundamentals, learn the craft, and learn the science. And learn how to learn, because you will have to keep on learning for your entire career (if you want to stay employed).
LikeLike
Learning C/C++ opens doors to most of other languages – Java, Python, PHP, ActionScript, you name it. Once you program in C/C++ you know the basic structures and syntax of most of the other languages and, so, learning other languages becomes easy.
LikeLike
When it comes to web development, Ruby (on Rails or Merb) is my weapon of choice.
LikeLike
If you are building complex web applications you should definitely take a look at Curl, http://www.curl.com. The Curl language came out of an MIT research project in the late 1990s and combines rich text formatting (like HTML), easy presentation scripting (like JavaScript)and
full-featured object-oriented programming (like C++, C#, Java).
LikeLike
I am attempting to start-up a SaaS company. I
have been doing a lot of research and am struggling a bit to answer a fundamental technical question. That is what should I use as our primary development language?
Code: We are starting from scratch as far as developed code. Zero legacy applications. Most of the developers I would hire have Java experience. I anticipate starting
coding in 3 months.
Application: It is not your typical SFA/CRM application i.e. database and a screen. Think of it more along the lines of a high volume transaction system like an ad management system or even an ecommerce web site. The
process flow for the transactions would be: Receive request, retrieve data, data processing, determine result, and send result back to requester. Data would come from
anywhere — web services, database, or contextual data. Of course configuration would be done via web pages by business users, but this would be done at design time, not run time. Server response times < 100ms.
Ecosystem: This solution would commonly integrated with content management systems and databases.
SaaS. The solution will need to support two deployment options: via Cloud (like Amazon) or on-premise (maybe LAMP).
If this were 5 years ago, it would be easy. I would choose Java/J2EE. Given the popularity of Ruby, Jruby seems to be the right choice. But then with Groovy being more tightly integrated with Java and JVM, maybe that is. I
have read a lot about the JVM supporting multiple langaues i.e. Scala for multithreading. I am also considering using a
DSL.
Running on the JVM is of primary importance. I struggle to see any scenario where we would need to run on the CLR.
Any thoughts or guidance would be helpful.
LikeLike
With the rise of RIA (Rich Internet Applications) for both consumer and enterprise UI’s I would add Adobe Flex (MXML/ActionScript) to the list.
More and more business applications (SAP, Oracle, IBM) use or support Flex for the front-end (especially for charting, rich visulization, interactive web UI). Since Flex applications run on the Flash runtime same code works consistently in all major browser on Windows, MacOS and Linux. Same code can even be deployed on the client using AIR.
The demand for Flex developers is also very high right now.
LikeLike
PHP is worth more than prototyping. Something must be right about PHP if Flickr, Digg and Engadget use it. Not scalable my ass.
LikeLike
Recursive languages like Common Lisp are still appropriate and relevant for Artificial Intelligence applications.
LikeLike
This article lost all credibility as soon as its pro-Python / anti-PHP personal bias was exposed. Bias like that has no place in articles that are supposed to teach others. The author can and should learn a lot from the comments here. Or at least if the author insists on pushing a bias they can provide evidence supporting that claim.
LikeLike
I’m so sorry to read your PHP part.
Many people made a lot of comments like this about PHP but they are so “last year” ! Most of them pretend they know how to code in PHP and claim their sooper-dev-skillz 10 minutes after their first “Hello World” but they have no idea about scalling, optimization, debugging, design patterns, unit tests, good practices…
PHP (5+) is a complete programming language and you can get amazing results when coded/used in a good way, even on huge sites.
Stop flaming against PHP like you’d do when it was PHP4.
LikeLike
It seems to me that real advances in programing over the usual choices (Java, C#, C/C++, Basic(s), Pascal) are those found in pure, lazy functional languages, most notably Haskell.
A few reasons for that:
1. functions can’t have side-effects, so testing means worrying just about arguments, not the state of objects, global variables, …
2. debugging means finding a function which produces wrong result for a valid input, and all that is already on stack
3. there are no deadlocks and race conditions, since no data can be changed, thus FP languages already support multi-threaded execution out-of-the-box
4. hot-code deployment on live systems is possible, that is upgrading while the thing is still working
5. it’s possible to reason mathematically about FP program, that is you could actually prove your code is correct
GHC Haskell is open-source implementation with various extensions, vast standard library, performance of compiled code on par with C/C++. It can be also run as byte-code from interactive shell, ghci. But, GHC Haskell is also a scripting language, meaning you could run it from ordinary terminal without compiling it first, either by runghc or by using usual shebang trick (by placing #! /usr/bin/env runghc in the very first line of your Haskell file). Only thing I didn’t found so far is how to embed/extend (scripting) GHC Haskell, into/from some other (compiled) program.
LikeLike
PHP is good for prototyping but does not scale when it comes to enterprise-grade applications.
LikeLike
I know there have been other comments about it –
But dear god, C++!
You don’t have a single language on that list which allows real memory, threads and handles managing.
Sure, your programs will be all nice and fluffy, but some programs do have stricter performance requirements even on your (obviously un-utilized) quad core system.
LikeLike
Seriously, I’d kill myself if I had to use Perl/Catalyst…for OS scripting I’d definitely go Django, Rails, or CakePHP (and variant frameworks for Python, Ruby, and PHP). There’s nothing wrong with Java or C# depending on what you want to do. I’d learn Erlang or Haskell any day over Standard ML…don’t waste your time.
LikeLike
[…] came up with a list. Includes the major programming languages and why you’d want to learn them.Link:https://regulargeek.com/2009/02/11/what-programming-language-should-i-learn/ Posted by Makin at […]
LikeLike
I still have a great deal of fondness for Forth, especially for microprocessor applications. It’s also very nice when you have control of the computer (e.g., a dedicated micro for some sort of process control or the like).
LikeLike
[…] at 11:21 am by LeisureGuy It of course depends on the nature of the task you’re facing. Here’s an interesting take, though Forth is not mentioned except in a […]
LikeLike
It all depends on how big of a nerd you want to be.
LikeLike
C the backbone of everything is C
as long as you’ve learned java… why not use ColdFusion for web prototyping, if you’re the Open Source type use Open BlueDragon or Railo (railo to be foss very soon, they say this month)
LikeLike
I can’t believe Ruby wasn’t on the list… mind boggling. I guess things became apparent when robdiana said he/she uses a PC.
LikeLike
Ruby without Rails is not good for anything.
LikeLike
Looking at some comment about REALbasic, RAD tool for Cross-Platform application, I found some database connectivity problem in them when I tried it and I don’t like basic as well.
Anyone have an idea about generating C# on visual studio express, then we can subclass from IronPython, For windows. Glade Interface Builder with Python code generator for LINUX and X-Code+Cocoa+Python works for Mac OS X. Can use Twisted for network applications. RAD GUI on VSE,Cocoa,GIB and native for free, with just one language.
LikeLike
If you are a digital artist, you should look into Processing. It’s an easy, fun, language which is fun to play with.
LikeLike
[…] What Programming Language Should I Learn? | Regular Geek (tags: language webdesign programming development web-design computers Learning java) […]
LikeLike