Learning a computer language

I’m 40ish and looking to get into the programming field. I know it will be tough, but let me worry about that part. Here’s what I need advice on:

What programming language/technology should I concentrate on to get a job? I’m familiar with C++ and OO, HTML, PHP, Mysql, Perl, some AJAX and a couple other things. I’m not proficient at any of them as I am a hobbyist for lack of a better term. I need to concentrate on one of them and was wondering if anyone could shed some light on the issue for me.

I would learn C#, ASP.NET, and the .NET framework in general. You can download all the tools you need for free from Microsoft.

Personally, I always recommend getting to where you “understand” things. Even if you memorized the entirety of Java’s API, if you don’t have a very good understanding of pointers, algorithms, etc. you’re still not going to be as good of a programmer as someone who might not have ever touched Java until three weeks ago, but who does know all that stuff.

So personally, I would also say that you’d do best to pick up some books on algorithms, to practice dealing with bytes and using binary operators, read through some books on optimization like Michael Abrash’s Black Book (which is free for download now), and check this page for a look at extreme defensive programming.* Specific languages come and go, so to some extent, you’re better off to just get into the more in-depth stuff about that language while you’re actually using it on the job.

  • Both Abrash’s book and the defensive programming page will reference things intrinsic to particular hardware and or a particular language (C), but the lesson to be learned from them is more a frame of mind towards aproaching coding.

The two biggies these days are Java and .NET. I prefer .NET (C# in particular), but that’s just because that’s what I happen to know. Java, C#, and VB.NET are all fairly safe bets as far as jobs go.

I notice that quite a few of the things you’re already familiar with are web-based. This is a good thing. Web programming is huge at the moment and I can’t see it shrinking any time soon. That’s the best direction to go in, IMHO.

On preview, I’m actually gonna have to agree with Sage Rat. Your particular choice in technology is nowhere near as important as your understanding of the fundamentals. Whichever path you choose, you need to keep learning and practicing until you can “think like a computer” Once you’ve got that sorted, you can pick up any new languages quite easily.

I vote with Sage Rat, too. If you already know some C++, C# will be very similar and there are a few good guides on the Web to how to migrate from C++ to C#. The two are so close that you can sometimes read quite a few lines of code without knowing which it is.

But you only need ASP.NET if you are working with databases, right, folks?

You can download C# Express Edition (which contains the Visual Studio IDE) from Microsoft for free and get started. I used that for a while and then bought full fledged VS in a $300 version, which gets other languages including C++ and Basic and a kind of imitation Java they’re going to drop.

There’s an excellent book called Programming C# written by Jesse Liberty and published by O’Reilly. I learned a great deal from it. He also wrote an easier one called Learning C# but since you already know some C++ you’d probably find Programming to be accessible enough and to go further.

I wouldn’t say that. ASP.NET is one good way to do database connectivity from a web page, but there are others, and there are other fun things you can do with ASP.NET as well.

That said, a familiarity with C# (or VB.NET), HTML, and XML will get you 95% of the way to being able to program effectively with ASP.NET, so you can probably get away with learning it if and when you need it.

You probably already have some work experience in a particular field. (Domain knowledge to use the geek term.) If so, that will give you a leg-up when looking for programming work. So you may want to find out what languages are popular with businesses in that field.

Dang, this is all Windows-centric. Now I could go off on a rant about the Macintosh and the fact this it’s not Windows, but that’s not what I mean. Possibly the most understated programming positions with some of the best job satisfaction can be in embedded systems. I don’t mean programming for the Palm OS, but for hardware that makes things work. The medical field, the auto field, the manufacturing field, all of these and more use huge numbers of systems that aren’t PC-based, and enough of it is still proprietary enough that it’s no job-shopped to Viet Nam. Also whilst all the kiddies are knocking on Bill Gates’ door, you can work with engineers (we’re not all that bad).

I hope for the love of God that industry specific embedded engineering somehow avoids this problem but the moron density in consumer electronics embedded software engineering is about the same as you’d find at Oracle or Microsoft. sigh

If you start by studying design patterns (pick up a book called “head first design patterns”) then you can get a good rounded approach to OO, design, and how things can be made to fit together. The examples in that book are based on Java but the concepts easily port to .NET or any other good OO language. PHP 5 has decent OO support.

Then having done that, take your HTML, PHP, mysql, skills and beef them up (best to start with what you already have). That’s a good core set, optionally polish it up with Ajax. Once you get your foot in the door with core skills, then you can branch out to the more exotic edge technologies. I wouldn’t bother with C++ as it’s difficult, tends to be tied to aging platforms, and seems to be getting eclipsed by other technology.

I actually prefer to program in C++ - but that’s only because it is what I know best.

I vote too with C#.

But no mention yet of Python, or any cross-platform, open-source approach?

Just asking - I’m also an out-of-work programmer who needs to retrain for the 21st Century. Not a hijack, just a nudge.

Learn COBOL.
Somewhere between 60%-80% of the production computer programs in the world are written in COBOL.

And the original COBOL programmers are beginning to retire, leaving a real shortage of programmers to maintain all those critical applications.

It’s not nearly as ‘sexy’ as all those new* languages people have mentioned, but it’ll get you a job in the field, like you said you wanted.

  • Note that all those ‘new’ languages that people are suggesting would have been different ‘new’ languages just a couple of years ago. And even more different ones before that. COBOL has been around for nearly 50 years now, and been the main programming language of the world for at least 40 of those years. And people have been calling it obsolete for 45 years (since PL/I), yet it’s still here, still running most of the major production applications. And most of the languages that were going to replace it are long gone.

So learn COBOL if you want a job in the field.

You should learn Python. Not only is it an awesome language, it’ll only take about 10 minutes to learn. Just write pseudocode and end all of your flow control lines with a : :slight_smile:

Here’s the secret: Don’t learn a language. Languages go away, technologies fade and become obsolete, and you might get stuck on a sinking ship with no usable skills in the new world. Worse, you might choose a language glutted with people: a market so full you can’t get a job that pays anything. Being replaceable is your lot in life, but don’t make yourself expendable.

To succeed, you need to learn to program. This is a good way to do that. He doesn’t mention some things I think are important, like reading Usenet newsgroups related to your languages and technologies and how you should keep learning specific languages so you know how they all coexist in the universe, but he does a fairly good job in a short page.

If you are doing this to get a job, then the first thing I would do is inventory the job openings in your area (or wherever you want to live). While every metro area has jobs based on each technology, some areas have more jobs in specific technologies. I think the answers would vary quite a bit if you lived in Chicago vs. Boston for example.

I would also give some thought to what areas you would enjoy working in: web development, financial software, embedded software, games, mobile software, etc. These areas all focus on specific technologies and it is good to match them up.

That said, if you are looking for an entry-level position, a good hiring manager would agree with what others above have said. A solid understanding of fundamentals is most important and a good candidate can pick up the specific technology as they go. However, if you want to get through the resume filters, then it is good to have some experience in the technologies that the job posting requires.

But if you don’t want to narrow your options, then learn C++ solid all the way through. If you have that covered you can easily move between .NET, Java, C, PHP, and JavaScript.

A buddy of mine was very successful with this route. He wanted to switch careers, so he got a quick degree based on around COBOL programming. He’s had a job since he graduated. I should add that he graduated right around 2000, so I don’t know if Y2K gave him a boost.

Java is cross-platform and open source.

Anyway, I’m really not sure how many jobs there are out there writing Python code. There are definitely plenty of jobs for J2EE(Java) and .Net developers.

It isn’t easy to teach oneself embedded programming – you really need experience in the field, and getting it at age 40 would be tough. One can at least experiment with .Net or J2EE on their own at home. The nice thing about J2EE and .Net for the OP is that his previous experience gives him a starting point for these technologies. If he goes on to do Web Development in J2EE or .Net, he’ll have directly applicable prior experience.