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)
I use PHP for most of my web development (along with HTML/CSS and Javascript) What would you reccommend for a long term solution? ruby?
LikeLike
Keith,
It really depends on what type of work you are doing. If there is significant backend work happening, then maybe moving to Java or Python is warranted. If the sites do not get a ton of traffic and are not too complex, PHP is probably a reasonable solution.
LikeLike
Hi Keith,
For Windows development, I use REALbasic. It’s a great dev tool because it’s cross platform, object oriented and it’s similar to VB. Depending on what you are doing, it’s great because you can create a Mac version and a Windows version with just a mouse click. They’ve been working on quality a lot lately and I’m very happy with the recent releases.
LikeLike
Edida,
REALBasic is an interesting option and I did not really look at the cross-platform options. I know the Mac supports Java as well, but Java on the desktop is generally unpleasant. Does REALBasic have a way to create a Linux version as well? That would be very cool.
LikeLike
Yes, you can compile for Mac, Windows or Linux. And the compiled apps are totally native.
LikeLike
We use REALbasic for our application development and deploy to Windows, Mac, and Linux all from the same source and it works great. I’d definitely recommend taking some time to look into this tool.
LikeLike
Rob, my personal suggestion is Perl over Python if that’s the route you’re taking. Use it with a web framework like Catalyst, and you’ve got quite a bit of power at your hands. That’s just because Perl is my preference, but both suffice, and Perl will be available for App Engine soon as well if that’s your reasoning.
LikeLike
I’m working with a social media platform (like Pligg) and its currently am looking into ideas on how and what to use to help potential scaling issues. It’s written with PHP at the moment.
LikeLike
Jesse, if perl gets support in Google App Engine, I would bet we would see a major resurgence in popularity. I was actually just commenting on the trends, as I am more of a fan of perl than python 🙂
Keith, I would look for some of those scalability/high availability expert blogs. I am not a scalability guy, but some people have told me that Java scales well for the server side. That being said, poorly written code will not scale in any language. So beware of people that say “X” does not scale.
LikeLike
I play with Lisp because I find it much more fun than anything I’ve tried in the past. I also find it much more tailor fitted to my needs than most other languages (aside from perhaps J and/or Python).
LikeLike
You say that XML/JSON are the primary formats used for data integration, this is factually incorrect. I have done integration work with hundreds of systems, and *very* few actually use XML, and I have never seen any use JSON.
The most common formats are some usually some derivative of CSV or MARC. The fact is XML is often an over-complicated solution for many systems, it is a pain to parse when the files are large (GB/TB), although not impossible (expat). Fine for web service stuff, but the reality is that very few systems need complex data structures where XML is applicable.
Saying that, XML is definately becoming more popular, although I would argue that it is being used in situations where it simply isn’t required (e.g. CSV would be a better choice). So for data integration formats, like with most things, use the format which suits the task. You will make the lives of the people at the other side of the system much more pleasing.
LikeLike
Sounds odd, but learn COBOL. Most of the important business systems run on it, and it is not well known in many schools. If you also learn the security systems on large machines (racf, acf2 etc.) you will be ahead of the curve. Many places don’t have people anymore who understand this stuff and are beginning to find that they need to re-protect their crown jewels.
LikeLike
Respectfully,
robdiana you better call wordpress and facebook for that matter and tell them they are using the wrong language.
Php is fine for large scale projects. probably the best solution because development time is short then other languages meaning implementation is cheaper.
LikeLike
I pretty much agree with everything, but the Xhtml part. http://www.webdevout.net/articles/beware-of-xhtml
Also PHP is good for large scale applications, just look at Facebook and Youtube. It all depends on how its coded, cacheing, etc.
LikeLike
I’d recommend C for anyone interested in Linux kernel or application development. C++ is used a lot too, but a great foundation in C will make one into a much better C++ developer, since they’ll really understand how to manage memory.
LikeLike
why would you make empty claims such as Python is the “next level” to PHP? That’s a huge mistake, and no one in the industry would dare go there.
“If there is significant backend work happening, then maybe moving to Java or Python is warranted. If the sites do not get a ton of traffic and are not too complex, PHP is probably a reasonable solution.”
Where are you pulling this shit? Java? Srsly? If you don’t want to have a job, listen to this guy. There’s a reason Facebook and Yahoo use php.
LikeLike
I can’t possibly beleive that you haven’t mention ASP.NET for rapid web prototyping and actually for web production. It is far superior and easier to use than php. I use both asp.net and php, and whenever I have the choice, asp.net is number one.
As far as Enterprise development goes, they are slowly switching from java to .NET.
LikeLike
Scaling issues aren’t about the language, it’s about the architecture. If you think you need to rewrite something in another language…you should go hire somebody who knows what they’re doing! Or of course look at how you host the site — if you’re running on shared hosting or even a 256MB VPS, thats likely your problem.
While it’d HELP to rewrite it in JAVA/C/ect. from something slow like PHP, Python or Ruby, it’s a massive job, and future development will be a pain; you should only bother if you’re some massively popular website such as Google.
I’m a Ruby guy, it’s slow (though faster than Python or PHP), but I use it because it’s a wonderful language to work with!
LikeLike
I would suggest looking into what schools and colleges are teaching to get an idea of what will be big in 5 years.
My college is teaching Java, Python and C/C++.
LikeLike
Learn java and c. Then the rest will be easy. Like Mike said, the language is not the key part. We can argue all day and night, but Ruby, Python and PHP are all dog slow compared to java or c/c++. But for most tasks they are quite fast enough and performance issues can be resolved by working on architecture, not language.
LikeLike
“If you try to remain standards compliant (which you should) then you need to look at the XHTML standards.”
I’m curious why you think XHTML is more important to learn than HTML. XHTML is nothing more than an XML reinterpretation of HTML; it adds no new structures to the language, and complicates it with spurious empty element closing tags. Granted, it provides the flexibility to incorporate things such as MathML, but this is unsupported by the dominant browser, so is not (unfortunately) a valid concern. HTML remains the language you should be focusing on, and W3C has confirmed this view by proceeding with development of HTML 5, after abandoning XHTML 2.
Oh, and I believe any programmer should learn C first; in addition to being useful in many environments, I think it provides a foundation of programming knowledge and logic on which to learn the higher level languages.
LikeLike
depends on what you want to do. if you want a job in the corporate world, learn c#/java. if you want to build software, learn c. if you want to be a database professional, learn sql and pl/sql (oracle) / t-sql (sql server). if you want to be a web professional, learn xhtml/javascript.
if you want to be broke, learn php/ruby/python.
LikeLike
The author is correct in stating that no programming language is the right tool for every job. PHP comes close, as do both Java and Ruby, but there are always things to consider such as hardware, budget, and maintenance concerns.
Personally I love Ruby and Rails. I love how I can prototype an application in Rails in a matter of hours sometimes and then I have time to spend refining it and making it smooth and creamy like butter. I also love Java because its like having a swiss army knife or one of those “leatherman” tools; it does just about everything. But, both Java and Ruby are slow if you don’t have the right hardware or server setup (e.g. shared hosting won’t cut it for production-ready apps).
If I had to pick only one language to learn it would probably be PHP. It’s ubiquitous, easy to learn, and if you know how to program it is a hell of a tool to have in your box.
Perl is OK too (some of us old-timers are waxing nostalgic right about now). It really does shine for text and file processing tasks, but Ruby is really catching-up. In 10 years I bet that PHP, Ruby, Java, and Perl may still be in use so learn basic programming — and stay away from Windows languages unless you only want to write Windows apps — using something like BASIC or even Java and hone your skills on other languages as you progress. I try to learn at least one new language or technology per year at a minimum. Once you get the basics down (if/else, expressions/regular expressions, variables/constants, and each language’s API), the rest is all theory and practice. 🙂
LikeLike
I recommend PHP/MySQL/jQuery/Json.
LikeLike
What language would you use for someone interested in going into the field of Bioinformatics?
LikeLike
Bioinformatics, you need to learn DNA
LikeLike
hello,
what language would i have to learn to create an iPhone application and for additional iPhone development?
LikeLike
Pretty much everything you said I agree with, minus the python stuff (python is extremely unstable in large scale web applications), and PHP is perfectly suitable for those applications. I work at Youtube and we went through a number of language options before ultimately deciding on PHP, it is the most stable and fastest, exceptionally when used with the Zend engine.
If you’re doing any application development, C# is a better option, but almost all companies use C++. Keep that in mind always if you want to work in the industry.
LikeLike
May I suggest that beginners should learn:
1) C/C++ and Pascal to develop their basic understanding of variables, control structures and functions. I mention both because (all?) modern languages use one of these two calling conventions and they both force different good programming habits.
2) HTML. All web work uses it.
3) SQL is how you get data out of databases. It’s easy to learn and critical knowledge.
4) Any common scripting language like perl or python etc. because they run on anything and it’s always useful to know what to do at a blinking command prompt.
5) Whatever language the job you want to get needs. From culprit to lisp, all languages are easy to pick up once you have the basics above.
LikeLike
@StephenS, YouTube.com
“Python is fast enough for our site and allows us to produce maintainable features in record times, with a minimum of developers,” said Cuong Do, Software Architect, YouTube.com.
http://www.python.org/about/quotes/
LikeLike
.net: VB/C#/ASP, SQL Server… MS has everything you need. A lot of people on here talking PHP/Perl/C++ etc. My advice is don’t waste your time on the old stuff or learning to glue stuff together with outdated screw languages
LikeLike
StephenS – I’ve done quite a bit of work with PHP (8 years) and I have to agree entirely with you. It’s much faster and more stable than people in this thread seem to think. Oh, there are undocumented “features”, but the php wiki gives better advice than any manual I’ve come across.
LikeLike
My favorite is REBOL:
http://musiclessonz.com/rebol.html
Extremely easy to learn, and more productive than just about anything else you’ll find.
LikeLike
I find most the advice here very pedestrian – learn the flavor of the day basically.
I would suggest you take it to the next level. There is 2 ways to go:
– Go low level, systems programming, assembly and C on Linux is one of the easier platforms to learn for (tools freely available, etc).
Also:
– Go high level. Lisp is the “standard” “ai” language that “everyone knows”. Suggesting you learn Lisp is a bad cliche. So I might suggest you try learning a functional programming language. Haskell is a pure one, OCaml is another.
And finally, branch out. Here are some systems any self respecting programmer should be reasonable experts in:
– Ruby on Rails
– Javascript in the browser
– PHP
– C++
– Java, but done well (no J2EE)
– C# maybe (or mono?)
– Objective C/Cocoa on Mac OS X
– Erlang, for highly parallel systems
– C for the good old basics
– Python, Perl and Shell scripting (all of the aforementioned)
– Database crap
You can’t afford to be a specialist. You get blown out of the water by deep-generalists.
After all, why would anyone say “oh man, if only I knew less systems.”
LikeLike
[…] @ 8:20 pm Tags: aiml, boo, c, erlang, haskell, L Sharp, owl, php, prolog, Python, RDF, SPARQL What programming language should I learn, a link I found on Twitter (like most of the other things I seem to find, nowadays) is a nice list […]
LikeLike
This is what I think.
Python : good for simplicity
Perl : good for quick + dirty work
Bash : good for quick + dirty work
C/C++ : good for control over the details
PHP : good for web design
VB.NET : good for rapid prototyping
Java : good for extreme verbosity
Lisp : good for breaking ground (I mean Common Lisp)
Erlang : good for distributed systems*
SQL and Javascript are pretty much masters of their universes. Same with most markup languages.
*Haven’t used Erlang because I haven’t found a reason to have a distributed system for anything yet.
LikeLike
Ask the collective Internet via Google Trends:
http://www.google.com/trends?q=C%7CC%2B%2B%7CC%2FC%2B%2B+jobs%2C+java+jobs%2C+PHP+jobs%2C+%22C+sharp%22%7C%22C%23%22+jobs%2C+Ruby%7C%22Ruby+on+Rails%22+jobs&ctab=0&geo=all&date=all&sort=0
If you want to write good software, or be a professional programmer, learn C/C++, then Java (in that order).
As important as the language is the IDE. If you’re new, first learn the command line, then choose Eclipse (for Java and even for C/C++).
LikeLike
I tend to agree with Ryan. Both skills are relevant, but in different domains. It’s becoming like the difference between wiring the house and designing the power grid. In the end it is AND, OR, and NOT, with C and its derivatives letting you precisely control the details. More functional languages (Erlang, Haskell, et al) give you a great view of the problem space but try to make the underlying structure disappear. Mind you, even the C programmer at some point decides to assume that whoever programmed the standard library functions knew what they were doing.
For me the next step is Erlang — it seems different enough to keep things interesting but not overly academic.
LikeLike
coldfusion should definitely be mentioned in this discussion.
LikeLike
Learn Pilot if you want to program aircraft control systems…
LikeLike
In DFW, if you want a job programming you need to know the microsoft stack. Front end: asp.net with c#, javascript (ajax), css
Back end: sql server (t-sql), ssrs, ssis
If you dont have these skills because you chose the java/open source/cheap route, then you’re usually limited or SOL when looking for a new job. If you have MSFT skillset, jobs are plenty even in this economy.
LikeLike
ruby and objective-c.
all i needed, and i’m happy with both where i’m at and where i’m headed.
LikeLike
Mention of coldfusion should be drug out into the street and shot repeatedly.
The rest of it is sort of hand-waving nit-picking. There are two different discussions here: what programming languages are best, and which programming languages are actually used by businesses. Two entirely different sets, I’m afraid.
LikeLike
I agree with list and I think this could be taken to another article. Mentioning of Flex would be great since it encompasses a lot of the technologies into one.
LikeLike
You mention Cygwin, but Powershell kicks it’s ass, and can integrate with anything on Windows. It’s far more powerful than any other shell. If you are a Windows administrator, learning Powershell means the difference between being ordinary and extraordinary.
LikeLike
I mostly agree with the list.
I would like to add that for good foundation you need to learn C/C++ at start. You can skip C# and go for PHP/Python after JAVA.
LikeLike
PowerBuilder = real men
LikeLike
We all know that there are so many programming languages available out there. And there are lots of mvc web frameworks that you can use too. It’s up to you what’s the best tool to solve the problem the important is you have to get things done.
LikeLike
Learn Assembly language, the master development tool of even most of programming languages. A bit difficult but worth learning.
LikeLike
I work for a gold certified Microsoft software development company. We use visual studio, sql server and visual source safe. If you’re interested in web development, SQL (being able to write your own store procedures and functions) and c#
LikeLike