which programming language shouldi learn to be best employable.
May 5, 2011 6:41 PM Subscribe
let's assume i'm decently technically minded, and entirely burned out on my current job (technical support). let's further assume that programming is vaguely attractive and something i think i could do, and that i would like to be employable at 50-65k a year.
what language do i learn? why?
You are in a great place to start. I started in Tech Support, then moved to QA, then to developer.
I am REALLY HAPPY with that path. I can empathize with QA testers and Tech Support, who always seem to have to clean up after the Developers. Now, as a developer, I understand that it isn't always just the developers - we have to write great code, but sometimes shitty applications, based on user needs and design specifications. And sometimes we have to develop on a team, and the team sometimes doesn't have the best programmers, and sometimes, we have to release the application with defects.
It's nice to be a developer in a startup or small company because you don't always have to write enterprise wide applications with extremely stringent governance practices, and cam write small apps that just sort of 'help out.'
Bide your time, go to school, learn the basics of programming theory and design, then you can pick up pretty much any of the major languages pretty easily. Start with web programming, that is an 'easy' way to go and cheap - you can get a good Windows or LAMP (Linux, Apache, MySQL, PHP) host for about a hundred bucks a year, to use for developing websites.
And I am still learning, working on my two year (computer science, developer track).
posted by Monkey0nCrack at 7:14 PM on May 5, 2011 [3 favorites]
I am REALLY HAPPY with that path. I can empathize with QA testers and Tech Support, who always seem to have to clean up after the Developers. Now, as a developer, I understand that it isn't always just the developers - we have to write great code, but sometimes shitty applications, based on user needs and design specifications. And sometimes we have to develop on a team, and the team sometimes doesn't have the best programmers, and sometimes, we have to release the application with defects.
It's nice to be a developer in a startup or small company because you don't always have to write enterprise wide applications with extremely stringent governance practices, and cam write small apps that just sort of 'help out.'
Bide your time, go to school, learn the basics of programming theory and design, then you can pick up pretty much any of the major languages pretty easily. Start with web programming, that is an 'easy' way to go and cheap - you can get a good Windows or LAMP (Linux, Apache, MySQL, PHP) host for about a hundred bucks a year, to use for developing websites.
And I am still learning, working on my two year (computer science, developer track).
posted by Monkey0nCrack at 7:14 PM on May 5, 2011 [3 favorites]
As someone recently in your shoes, I would start with shell scripting, work my way up to Perl and Python, and then work in C to really learn programming of data structures, the difference between stack and heap, and general memory management. This knowledge will pay off when writing code in other languages, such as Objective C.
Java is like Perl and Python in many conceptual respects, and you won't gain much programming insight as quickly as you would with Perl or Python. It would provide some object-oriented programming knowledge, but at the cost of great simplification.
Once you know C, you can move to C++ for knowledge of the STL and object-oriented programming.
At any point along the Perl to Python continuum you could pick up a system administration job reasonably easy, easily paid at that salary level. With C under your belt, along with basic data structures, you could get an entry-level programming job at many businesses.
posted by Blazecock Pileon at 7:17 PM on May 5, 2011 [4 favorites]
Java is like Perl and Python in many conceptual respects, and you won't gain much programming insight as quickly as you would with Perl or Python. It would provide some object-oriented programming knowledge, but at the cost of great simplification.
Once you know C, you can move to C++ for knowledge of the STL and object-oriented programming.
At any point along the Perl to Python continuum you could pick up a system administration job reasonably easy, easily paid at that salary level. With C under your belt, along with basic data structures, you could get an entry-level programming job at many businesses.
posted by Blazecock Pileon at 7:17 PM on May 5, 2011 [4 favorites]
I second axiom. A good company should not hire you because you know a specific language - if you're a good programmer you'll pick up any language they throw at you pretty quickly because you'll know the concepts. I learned how to code first in java and I think it's a good language to learn on if only because so many CS1 classes use it that there are tons of resources available to help you learn. I develop software in C++ now. Back when I was an intern at a different company it was all perl. The company I work for now makes a point to not ask language-specific interview questions and though they have you write code during your interview, you can do it in any language (at least that's the case with my team and other teams I've talked to about it).
posted by kthxbi at 7:17 PM on May 5, 2011
posted by kthxbi at 7:17 PM on May 5, 2011
I'm giving basically the same answer as axiom did, but from a different perspective. I program in COBOL, invented in 1959 and still used for large scale transaction processing and financial accounting. I've got 35 years experience, and I have heard of companies holding classes to teach raw new employees COBOL since it is a dying language (hint, young employees are cheaper).
But my point with this answer is to show you what I *also* must know beyond the language COBOL (feel free to Google or Wikipedia any of these terms): JCL, CICS, IBM Language Environment, SQL, DB2, XML, VSAM, ISPF/TSO and whatever Debugger is available on the machine I am working on. When a program crashes I need to be able to understand the system generated messages including module/fault details. It's also nice to understand "unit of work" concepts for database integrity and disaster recovery. And this is not to mention the team oriented support tools such as JIRA for issue tracking and subversion for revision control. There are also performance issues (sure your program may work, but when processing thousands of transactions it better not be slow). And of course it would be great if other people could read your code, not just you.
Most of the other replies I see on preview assume a modern language, but as you can see even with older languages there are all kinds of ancillary aspects.
I wonder if you have a friend or relative who is a developer that you could have in person or email conversations with to get a better understanding in what they face during a typical work day, and what they would ask a prospective employee.
posted by forthright at 7:36 PM on May 5, 2011 [1 favorite]
But my point with this answer is to show you what I *also* must know beyond the language COBOL (feel free to Google or Wikipedia any of these terms): JCL, CICS, IBM Language Environment, SQL, DB2, XML, VSAM, ISPF/TSO and whatever Debugger is available on the machine I am working on. When a program crashes I need to be able to understand the system generated messages including module/fault details. It's also nice to understand "unit of work" concepts for database integrity and disaster recovery. And this is not to mention the team oriented support tools such as JIRA for issue tracking and subversion for revision control. There are also performance issues (sure your program may work, but when processing thousands of transactions it better not be slow). And of course it would be great if other people could read your code, not just you.
Most of the other replies I see on preview assume a modern language, but as you can see even with older languages there are all kinds of ancillary aspects.
I wonder if you have a friend or relative who is a developer that you could have in person or email conversations with to get a better understanding in what they face during a typical work day, and what they would ask a prospective employee.
posted by forthright at 7:36 PM on May 5, 2011 [1 favorite]
Ruby or C# and know sql backwards
That's where the money is
posted by the noob at 8:08 PM on May 5, 2011 [1 favorite]
That's where the money is
posted by the noob at 8:08 PM on May 5, 2011 [1 favorite]
Seconding the suggestion to try to move into QA first.
there are lots of QA jobs that require some sort of programming, or rather
scripting abilities. It's easier to start that way.
You could then move on to development,
or from QA you could jump to be a systems engineer....you already have a good subset of skills needed.....
posted by theKik at 8:17 PM on May 5, 2011 [1 favorite]
there are lots of QA jobs that require some sort of programming, or rather
scripting abilities. It's easier to start that way.
You could then move on to development,
or from QA you could jump to be a systems engineer....you already have a good subset of skills needed.....
posted by theKik at 8:17 PM on May 5, 2011 [1 favorite]
If you're just thinking about money:
Look at this list comparing the average salaries for different programming languages.
It's a few years out of date, but cross checking them here shows they're not too far off today. (Salaries aren't everything. There are a ton more Objective C and Java jobs than Pascal or COBOL jobs.)
Where you are depends on how much you can earn. A programmer in Rural America makes half that of one in Silicon Valley.
That said I learned C++ years ago and it has served me very well. Not that I get paid often to use it, but so many languages are derived from it or have used it for inspiration that the knowledge is easily transferred and is not going anywhere soon.
posted by Ookseer at 9:25 PM on May 5, 2011 [2 favorites]
Look at this list comparing the average salaries for different programming languages.
It's a few years out of date, but cross checking them here shows they're not too far off today. (Salaries aren't everything. There are a ton more Objective C and Java jobs than Pascal or COBOL jobs.)
Where you are depends on how much you can earn. A programmer in Rural America makes half that of one in Silicon Valley.
That said I learned C++ years ago and it has served me very well. Not that I get paid often to use it, but so many languages are derived from it or have used it for inspiration that the knowledge is easily transferred and is not going anywhere soon.
posted by Ookseer at 9:25 PM on May 5, 2011 [2 favorites]
I'm going to be a bit contrarian here. Sure, I basically agree with Axiom about the wrench analogy, but that doesn't really help you much or answer your question.
You have to start with some language.
You understand that learning a programming language is a huge time investment and you want to make an optimal choice.
And it isn't true at all that it doesn't matter which one you choose. That's nonsense. Companies absolutely do look for people with experience in their favored language.
I recommend Python.
It's an interpreted language that's used for just about everything. It's used in games, in scientific programming, in Web development. If there's a complicated software package written in C, then Python is often the scripting language that purchasers of the package used to customize it.
Python would be a great start and I'm sure there are tons of companies that need a good Python programmer.
Another option is Ruby. Ruby is used almost exclusively for building websites. (Before Rubyists start screaming -- *almost* exclusively, and come on, it's true.) So it's a good choice if you want to do that. It is a general-purpose language and learning it does teach you some high end concepts that are more like obscurities in other languages. I work with Ruby every day and like it very much, but if I could turn back time I might go with Python.
I don't recommend Java as a first language. It was actually my first programming language. It is kind of slow and arduous to code in Java compared to a nicely designed interpreted language such as Python or Ruby.
posted by eeby at 10:45 PM on May 5, 2011 [5 favorites]
You have to start with some language.
You understand that learning a programming language is a huge time investment and you want to make an optimal choice.
And it isn't true at all that it doesn't matter which one you choose. That's nonsense. Companies absolutely do look for people with experience in their favored language.
I recommend Python.
It's an interpreted language that's used for just about everything. It's used in games, in scientific programming, in Web development. If there's a complicated software package written in C, then Python is often the scripting language that purchasers of the package used to customize it.
Python would be a great start and I'm sure there are tons of companies that need a good Python programmer.
Another option is Ruby. Ruby is used almost exclusively for building websites. (Before Rubyists start screaming -- *almost* exclusively, and come on, it's true.) So it's a good choice if you want to do that. It is a general-purpose language and learning it does teach you some high end concepts that are more like obscurities in other languages. I work with Ruby every day and like it very much, but if I could turn back time I might go with Python.
I don't recommend Java as a first language. It was actually my first programming language. It is kind of slow and arduous to code in Java compared to a nicely designed interpreted language such as Python or Ruby.
posted by eeby at 10:45 PM on May 5, 2011 [5 favorites]
Sure there are a lot of things you will need to learn, but some of them,testing, how to debug, profile, you learn in conjunction with a language, after all, you can't test, debug or profile if you have no code. You need to code period.
The process stuff can wait till you are employed, you won't be any worse off than a recent grad if you don't know scrum. Please learn how to use source control though.
I might take a lot of heat for this but here is my advice: learn JavaScript.
1) The tool chain is incredibly simple, you can write it in notepad and run it in any browser.
2) There is no gigantic API or framework, no .NET, no win32, no J2EE. You can get by with Just JavaScript and the browser DOM, doesn't get any simpler.
3) Javascript is starting to come into it's own. As web apps get more ... Application like... There is more and more JavaScript.
4) There is a way to break into the biz, there are thousands of enterprise Java and C# guys. You want to learn sharepoint? Hell no. Write some interesting stuff in JavaScript and put it on GitHub. Start forking JavaScript projects. Get involved and you will have job offers quicker than if you tried to break into LOB apps for a fortune 500.
Think up something you think is cool, write it up in JavaScript, not only will you learn, you will have code to show for it at the end.
posted by Ad hominem at 10:54 PM on May 5, 2011 [1 favorite]
The process stuff can wait till you are employed, you won't be any worse off than a recent grad if you don't know scrum. Please learn how to use source control though.
I might take a lot of heat for this but here is my advice: learn JavaScript.
1) The tool chain is incredibly simple, you can write it in notepad and run it in any browser.
2) There is no gigantic API or framework, no .NET, no win32, no J2EE. You can get by with Just JavaScript and the browser DOM, doesn't get any simpler.
3) Javascript is starting to come into it's own. As web apps get more ... Application like... There is more and more JavaScript.
4) There is a way to break into the biz, there are thousands of enterprise Java and C# guys. You want to learn sharepoint? Hell no. Write some interesting stuff in JavaScript and put it on GitHub. Start forking JavaScript projects. Get involved and you will have job offers quicker than if you tried to break into LOB apps for a fortune 500.
Think up something you think is cool, write it up in JavaScript, not only will you learn, you will have code to show for it at the end.
posted by Ad hominem at 10:54 PM on May 5, 2011 [1 favorite]
Nthing those who have said that language choice is not such a big deal - by the time you get an actual programming job, you will probably know several (and that's not counting kind-of-languages like HTML, CSS, SQL, XPath, etc). But, like eeby says, you have to start somewhere, so I guess you have a few choices:
- Pick a language out of a hat
- Pick a language that will be immediately useful to you (Perl, maybe, if you're in technical support?)
- Pick a project that you'd like to contribute to, and learn the language that it's written in
- Pick a project that you'd like to start from scratch, and learn the language that's most suitable (i.e. web application->ruby, javascript; device driver->C)
- Pick a language which a friend or colleague can help you to learn (a surprisingly good option; having a mentor of sorts can make it much easier to get your head round tricky programming concepts)
- Pick a language that looks like fun (I have just discovered that Processing.org is ludicrously entertaining to play around with)
The crucial thing is to pick a language that you can actually use in anger, not just do exercises in a book.
posted by primer_dimer at 1:59 AM on May 6, 2011
- Pick a language out of a hat
- Pick a language that will be immediately useful to you (Perl, maybe, if you're in technical support?)
- Pick a project that you'd like to contribute to, and learn the language that it's written in
- Pick a project that you'd like to start from scratch, and learn the language that's most suitable (i.e. web application->ruby, javascript; device driver->C)
- Pick a language which a friend or colleague can help you to learn (a surprisingly good option; having a mentor of sorts can make it much easier to get your head round tricky programming concepts)
- Pick a language that looks like fun (I have just discovered that Processing.org is ludicrously entertaining to play around with)
The crucial thing is to pick a language that you can actually use in anger, not just do exercises in a book.
posted by primer_dimer at 1:59 AM on May 6, 2011
Ruby, because it is beautiful and elegant and comfortable, and creates enjoyment as you work in it, which helps in learning more and more. Also, it includes and supports many different programming ideologies and methods, so there's a really big playing field.
(This is why Ruby worked for me. May vary.)
Assembly language because it is profound and crystalline in its stark simplicity. It is highly emergent and teaches you the foundations of literally everything else. (That has been my experience.)
As others have said, any language you learn is a gateway to an art and a craft. Most reasonably common languages can net you a job. A few languages will please you, motivate you, and be fun to work in. Pick one of those.
posted by krilli at 3:53 AM on May 6, 2011
(This is why Ruby worked for me. May vary.)
Assembly language because it is profound and crystalline in its stark simplicity. It is highly emergent and teaches you the foundations of literally everything else. (That has been my experience.)
As others have said, any language you learn is a gateway to an art and a craft. Most reasonably common languages can net you a job. A few languages will please you, motivate you, and be fun to work in. Pick one of those.
posted by krilli at 3:53 AM on May 6, 2011
A good company should not hire you because you know a specific language
That's absolutely absurd. A good company has better things to do than spend money training people for jobs they're supposed to already know. If you don't know a specific language and everything is written in that specific language, I don't care how smart or naturally gifted you are—you're not able to perform or produce immediately, which makes you a liability.
posted by Civil_Disobedient at 8:15 AM on May 6, 2011 [1 favorite]
That's absolutely absurd. A good company has better things to do than spend money training people for jobs they're supposed to already know. If you don't know a specific language and everything is written in that specific language, I don't care how smart or naturally gifted you are—you're not able to perform or produce immediately, which makes you a liability.
posted by Civil_Disobedient at 8:15 AM on May 6, 2011 [1 favorite]
C# or Java will give you the most job possibilities in the most areas. $65k is not a difficult amount to make as a programmer with a few years experience.
You could make more in a smaller niche, but then you'll be more worried about transitioning to new technologies all the time and competition.
posted by blue_beetle at 8:27 AM on May 6, 2011
You could make more in a smaller niche, but then you'll be more worried about transitioning to new technologies all the time and competition.
posted by blue_beetle at 8:27 AM on May 6, 2011
"I might take a lot of heat for this but here is my advice: learn JavaScript."
Yes, that's actually a very interesting suggestion.
I still think Python would be great, but JavaScript would also do a lot for you. You'd learn about object orientation and the commonalities of all programming languages. JavaScript does share some of the high-end concepts of Ruby and is a surprisingly sophisticated language.
It's way less brutal than Java, C, or C++. Much gentler learning curve. You could be doing useful work much sooner.
It would be a good basis for when you start to add other languages.
As far as money goes, someone with solid JS, HTML, and CSS skills will get work. How much you earn depends on how good you are and where you live, as always.
The only downside I see is that 99% of JS work is writing client-side code that runs in the browser. You aren't learning about MVC design or how to connect to a database. So if you start with JS you're going to want to add a server-side language such as Ruby, Python, or Java before long. Or if you want to move towards system-level programming or building desktop applications C, C++, or Java.
posted by eeby at 1:52 PM on May 6, 2011
Yes, that's actually a very interesting suggestion.
I still think Python would be great, but JavaScript would also do a lot for you. You'd learn about object orientation and the commonalities of all programming languages. JavaScript does share some of the high-end concepts of Ruby and is a surprisingly sophisticated language.
It's way less brutal than Java, C, or C++. Much gentler learning curve. You could be doing useful work much sooner.
It would be a good basis for when you start to add other languages.
As far as money goes, someone with solid JS, HTML, and CSS skills will get work. How much you earn depends on how good you are and where you live, as always.
The only downside I see is that 99% of JS work is writing client-side code that runs in the browser. You aren't learning about MVC design or how to connect to a database. So if you start with JS you're going to want to add a server-side language such as Ruby, Python, or Java before long. Or if you want to move towards system-level programming or building desktop applications C, C++, or Java.
posted by eeby at 1:52 PM on May 6, 2011
That's absolutely absurd. A good company has better things to do than spend money training people for jobs they're supposed to already know.
I suppose it depends on the level of the applicant and the company, but both large companies I have worked at (Microsoft and Google) hire people who don't program any of the languages used all the time.
That said, this works best for large software shops that are more interested in long-term talent acquisition than needing an engineer immediately. Smaller companies, especially startups, won't be anywhere near as tolerant of a learning curve, at least for anything less than an amazing candidate (no software company that is worth anything would turn down a superstar because they don't know language X -- someone like that would pick it up in no time at all).
But as a new programmer, you won't have the experience or resume to indicate to prospective employers that you can learn a new language quickly, so it doesn't hurt to pick somehting popular to increase your hireability.
I think Python and Java are good candidates for both learning and usefulness. Python is definitely the easier of the two to pick up.
posted by wildcrdj at 3:35 PM on May 6, 2011
I suppose it depends on the level of the applicant and the company, but both large companies I have worked at (Microsoft and Google) hire people who don't program any of the languages used all the time.
That said, this works best for large software shops that are more interested in long-term talent acquisition than needing an engineer immediately. Smaller companies, especially startups, won't be anywhere near as tolerant of a learning curve, at least for anything less than an amazing candidate (no software company that is worth anything would turn down a superstar because they don't know language X -- someone like that would pick it up in no time at all).
But as a new programmer, you won't have the experience or resume to indicate to prospective employers that you can learn a new language quickly, so it doesn't hurt to pick somehting popular to increase your hireability.
I think Python and Java are good candidates for both learning and usefulness. Python is definitely the easier of the two to pick up.
posted by wildcrdj at 3:35 PM on May 6, 2011
You can write server side stuff in JavaScript with node.js. JavaScript is really picking up steam.
posted by Ad hominem at 4:54 PM on May 6, 2011 [2 favorites]
posted by Ad hominem at 4:54 PM on May 6, 2011 [2 favorites]
This thread is closed to new comments.
All that said, if you insist on picking up a language, it depends on the type of job you want to get. Web application development? I'd say, roughly in order, Java, PHP, Python, Ruby. game development? Probably C++. Mobile app development? Objective C and Java. Decide what you want to do for a living and then worry about picking a programming language to learn first. Do some research into what languages are used in the field you'd like to be in. Once you know any standard procedural1 language, any of the others is fairly easy to pick up.
1 All the languages mentioned above are procedural/imperative. I'd stay away from declarative/functional languages like Haskell at first.
posted by axiom at 6:58 PM on May 5, 2011 [18 favorites]