Hope Me Reboot My Career, This Time As a Programmer
August 8, 2012 2:42 PM   Subscribe

I'm a 41 year-old father/husband considering a career reboot. Considering programming. How to get started at my age? Snowflake questions inside.

I've read a lot of comments lately from folks who seem to make really good money writing programs, coding, etc. I have considered looking into it many times in the past, but always figured it was too late to go back to school, start over, etc. But I recently looked at a free online course on Java and found that I dig it. I think I could get into this. I like systems. I like structuring things, nit-picky syntax things, etc. And I want to be able to build my own programs and apps (I get ideas). So ...

Where to start? Is this something I would need to go back to school for? What kind of degree? Or can I take some courses and get a certification? Do the answers depend on whether I intend to work for someone else, freelance, build/sell apps?

Can I start with free course materials, websites, podcasts, videos, books? At what point would I be able to actually make a bit of money while learning?

Is there a particular language I should start with? Do I also need to learn other things, like Photoshop, to go along with coding, for design purposes? What else do I need to know that I would not think to ask?

Presume I know nothing and have to go cheap. I can put in more time than money. Located in Lexington, KY. Will answer any other questions you need. Links and personal stories appreciated!
posted by skypieces to Computers & Internet (22 answers total) 48 users marked this as a favorite
Although I have never used them I would suggest looking into MIT's (free) OpenCourseware.. maybe start with the intro to Java? The have many.

As far as language goes, plenty of people will be along shortly to declare you should learn X, Y, or Z, but if you go about it correctly then the language really should not matter that much.. Sure, it will matter at first, but as long as you learn the concepts as well as the literal language-specific syntax/constructs, you will find it is pretty easy to jump from one language to another.

Good luck!
posted by mbatch at 2:56 PM on August 8, 2012 [1 favorite]

As someone who thinks in several different computer languages, it's great to be able to code and whatever language you pick is fine. What I could use more of (at a few years older than you, as a professional programmer without degree) is more specific domain knowledge. So I'd say: Find some process in your life and current work that could be improved with the application of computers, and learn what you need to to optimize that process.

If that's learning Java to build some wide scale web app, that's a great start. If that's learning C and embedded systems to build an automated drape controller, that too. If that's learning Perl to sort through some huge data set and distill it to a usable report, that too.

Programming is a tool, and it's a pretty refined one compared to when I got into the game. What's interesting isn't the tool itself so much as what you do with it, and at 41 you probably have some domain knowledge that'll make the "what to do with it" even more interesting.
posted by straw at 3:03 PM on August 8, 2012 [4 favorites]

I am a late starter in programming myself -- didn't take my first programming course until I was nearly thirty. It can be done, but you *really* have to enjoy it. You don't need to learn Photoshop, unless you want to be a designer/coder (say, a front end dev for web pages). You're right that whether you need a degree or not depends on exactly where and how you want to work.

What I would suggest you do is try to do a lot of work for yourself right now. Start out with a simple language (Java is good; Python might be better -- there are all kinds of online tutorials for this) and start building basic programs on your own. Lots of them. If you get stuck, look on the internet and at places like StackOverflow for help. If you find this enjoyable after a few months, then you'll be ready to decide how deep you want to go.

Another tip: doing open source projects is a great way to gain experience, and looks really good on a resume. But it can be *hard*. Don't even try until you've been coding for a while. Good luck -- it can be done if you're dedicated.
posted by ariel_caliban at 3:11 PM on August 8, 2012

There are a lot of great hints in this essay.

Join local users groups of all kinds. (Linux, Java, Ruby, C, Python) even if they aren't the language you are focusing on.

Program with a goal in mind. There is no substitute for writing a simple app or game.
posted by poe at 3:13 PM on August 8, 2012 [2 favorites]

You'll have to pay but lynda has some excellent tutorials.

A good start would be this one: Foundations of Programming: Fundamentals
posted by run"monty at 3:25 PM on August 8, 2012

All I know is if you're in Lexington you should go talk to these guys. I had the privilege of participating in a startup accelerator alongside the AwesomeTouch team and I ended up going out to Kentucky and visiting their space just because they had such enthusiasm and collaborative/learning/exploring spirit.

I think the biggest thing if you're getting into it is to get to the point as quickly as possible where you can start coding up ideas for yourself. Start with something small that you can explore outward from. And try as much as possible to learn the "why" behind things and the Right way to do them, though don't waste enough time on it that you're not actually making progress building anything. Knowing the theory and principles of design will help you be adaptable as you do different projects with different frameworks and languages. And, you can avoid becoming the subject of this article.

Java is fine. I'd suggest NetBeans if you're going to work with it. It's been long enough for me that I don't know great tutorial resources for it, though I've started writing some notes if you're looking to do server-side stuff (and participated in this discussion some months ago which resulted in useful links).

Some things in other languages are Lispbox (read Practical Common Lisp and Land of Lisp) and Python (read Learn Python the Hard Way).

Try this: start out with whatever is your current favorite. If it's not clicking with you, try a different language. If you go through all of them, one per week/month, maybe it's you and not the language in question. Either give up or get more discipline or study moar. But just get to a point where you have a system you like, with a good foundation and general applicability, then go wild from there.

You can start learning any time. Programming is so easy in many ways. As long as you're willing to think through what you want and say it exactly, we have wonderful machines that will do whatever we tell them. There are so many more resources now than when I was a kid, and computing power is commoditized and basically free. Jamie Zawinski was a big inspiration to me when I was younger. He worked for Peter Norvig right out of high school! Though it's entirely worth noting that he got so sick of programming and the nonsense surrounding the industry and culture that he sticks to his nightclub now.
posted by vsync at 3:40 PM on August 8, 2012 [1 favorite]

Udacity has some programming classes too.
posted by vsync at 4:02 PM on August 8, 2012

Agree with poe that you need a goal in mind. Game, app, web site, productivity tool, whatever ... but having a goal will keep you focused.

You don't need a degree or certification. Get some books that are rated highly on Amazon in areas that you are interested in. Spend a lot of time coding and continue spending time on things that interest you. Design and coding are a knockout combination if you have the knack.

Thinking about employment isn't the goal right now, but rather getting so proficient that you feel like you're doing your employers a favor rather than vice-versa.
posted by RobotVoodooPower at 4:53 PM on August 8, 2012 [1 favorite]

Response by poster: I have asked in the right place. The nuts-and-bolts suggestions are wonderful (links, etc.). The insight about overall goals, motivation, and aim is just what I am looking for. RobotVoodooPower, your "doing your employers a favor" advice is a great vantage point to work from.

I am currently reading "How to Think Like a Computer Scientist: Learning with Python 3". This kind of simple, top-down overview is good for me. Much of what I had found heretofore presumed I already knew more than I did.

I do have an app in mind to eventually work toward. In fact, if I find I am able to build for myself in the future, I am sure many ideas I once had will resurface. And my INTJ personality is itching to launch something with this capability.

More pointers, tips, insights are very much welcome. Personal stories are valuable. If you work in this field now (as an employee, freelancer, entrepreneur, or in any other capacity) and are successful in it - or have seen things I should avoid - sound off.

Oh, and thanks.
posted by skypieces at 5:15 PM on August 8, 2012 [1 favorite]

Surprised nobody's mentioned codecademy yet - it's really the best shot I've seen of the 'learn by doing' sort of technique. (if you have a specific way of learning, whether it's printed books, videos, etc., let us know, there's materials of every sort)

Get a free GitHub account pronto and read other people's code. Find a project that's in your interest field and get it to run, then change little things about it. If you can improve it, submit a pull request and ask for a code review - people will be quick to give tips. (whether they'll be nice, well... it's the internet)

Less-kosher suggestions follow: not intended to be trolling, or flamebait. Take them as you will.

If you're using Windows, switch. Not because it's better or worse than anything else: the vast majority of open-source coders are not using Windows and will be less likely to support code and/or help you out with programming problems if they're laced into Windows platform problems. The best coding tools - editors, environments, etc - are on OSX and Linux.1

Java isn't the best option for starting programming: it's very complex in ways that don't translate to other languages very well. Python is a better option, because the language itself has few surprises, not too many features, and will get your head wrapped around the typical programming constructs quickly.

1: except for windows-specific tools, but it's unwise to get into windows-specific programming at this point in time.
posted by tmcw at 5:37 PM on August 8, 2012

If you want a career writing apps, learn Objective C not Java. There's way more money on the iOS side of the fence than Android.
posted by w0mbat at 5:43 PM on August 8, 2012

A programmer is someone who solves problems with computers. You should only become a programmer if analyzing and solving problems is interesting and enjoyable for you. It's not that hard to learn how to write code. It is that hard to learn how to be a programmer. This is partly because being a programmer involves writing as little code as necessary.

If you have an opportunity, you should take a course in programming. This is because most books are focused on teaching you how to code, and a good course will talk about the problem solving aspect of programming. If you pursue a degree, I'd recommend a degree in Computer Information Systems, which is more job-oriented than a Computer Science degree (and I say this as someone who majored in Computer Science). You'll learn more database design and practical programming, and less about the theory behind operating systems or compilers. If you choose to teach yourself, read some or all of the books on this list after you've learned the physical activity of coding.

As far as languages, learn a programming language like Java or C++ before you learn a web scripting language like PHP. Learning this syntax will be useful in a lot of different ways, whether you're doing Java or C++, or C#, or Javascript, or writing Android apps or whatever you end up writing. After that, learn a different language, like Python. (If you want to learn Python first, do it with the understanding that most languages aren't like Python.) Learn something with database interaction, and learn something that serves web pages - whether it's PHP, .Net or Ruby on Rails or whatever.

The fact is you'll write bad code. I've written bad code. I've looked at stuff I wrote five or six years ago and honestly I wanted to go back in time and slap myself. I've looked at a lot of code written by other people, some of it very bad, and had to make it work. Please don't learn on the job in a professional coding setting. You'll regret it, or someone else will. Get through your bad code before you become a pro. College will do this, a number of private projects will do this - but get it out of your system.

Finally, please read this post. I don't say this to be discouraging, but I only want you to become a programmer if it's the right thing for you.
posted by graymouser at 5:46 PM on August 8, 2012 [1 favorite]

I work in this field & have since I graduated college aons ago. Bear in mind that I've only worked at very large software companies so my experience is extremely skewed here. I think learning to program is fabulous & you will have great fun, but I would caution you against investing too much in it as a second career choice, which it sounds like you are interested in with the 'career reboot' thing.

(This is where folks who have worked in the industry in other areas will hopefully contradict me.) Honestly, you are going to need a lot of open source commits or an extremely impressive self built program to even get an interview if you have a long resume of non technical jobs and are new to programming. Once you get an interview, you will have to really prove yourself in collabedit or some whiteboard coding- I don't like to be biased against folks, but we reject people with CS degrees & 5 years of professional coding all the time. It can be tough to get in the door.

As far as programming being useful and a good thing to learn: yes! I would vote for python; you can do many awesome things with it. Java is a tough one; it's used widely in enterprises but it takes a lot of dedication and guidance to program Java well. You can do it, certainly, but I would expect that if you pick an open source project to contribute to you're going to get some very brutal feedback on your first few contributions. Listen to them, implement the changes they want, and learn from it. Programmers are blunt. We mean well, but it comes off kind of roughly in your average code review.

Stack overflow is extremely useful, as are user groups. If you really like thinking about programming, I would recommend Structure and Interpretation of Computer Programs. We used it in my intro CS class and it will teach you think about programs in a way that allows you to get much farther much faster. It's a difficult book but it gives you the mental framework to understand theoretical computer science. Do you need that to knock out some open source contributions & some python scripts? No. But if you want to actually grow as a programmer this book is pretty excellent.
posted by lyra4 at 5:49 PM on August 8, 2012

Response by poster: tmcw, I was actually just wondering about a couple of things you mentioned, particularly, Windows vs OSX. I typically use a Mac. I do have an older WinXP laptop. The course I mentioned above uses PyScripter (which is Win only), so I am starting with that, just to stay consistent with the course. But I do prefer to work in OSX, if possible. I have no Linux experience whatsoever. If that is a big plus in this field, I will steer that way. Thoughts?

I mentioned earlier that I am using codecademy (Java course). I will be looking into any Python studies there. The interactive style there works well for me (though the "theory-first" approach of the book on Python I mentioned last is great too).

Based on several suggestions I have seen, I am pursuing Python before Java. Seems like a simpler place to start. I do recognize that its simplicity is not the norm and I will have to work up.
posted by skypieces at 5:49 PM on August 8, 2012

Response by poster: I really appreciate the "know why you are doing this first" approaches here - the "less is more" and "coding is a tool; but what is the problem?" approaches. I get that. Maybe it's because I am a bit older. I don't buy tools that I have no use for. And, if I buy a tool, I don't collect attachments for no reason. I tend away from re-inventing wheels. I copy/paste. I use shortcut keys.

I want to learn this so I can write programs that I would want to use. I see much of the industry moving toward mobile, so I am interested in that. I don't want to know everything. I want to know enough to build a great program, and a little bit more. Frankly, I am much too "entrepreneurial" (thanks, Dad) to embark on a long-sought career with a company. Within a year I will be trying to shill something I have written on someone with disposable income.
posted by skypieces at 6:02 PM on August 8, 2012

Lots of people use OS X as their daily development platform. Linux knowledge is helpful if you're going to eventually be managing servers or something, and Windows excels at certain things like XNA game development.

Python is a great place to start. Each language you learn will help you pick up the next -- and learning the different frameworks and libraries can be as difficult as learning the language. The important thing is to Always Be Coding. Hope you like coffee :)
posted by RobotVoodooPower at 6:18 PM on August 8, 2012

skypieces: "I mentioned earlier that I am using codecademy (Java course)."

Codecademy is JavaScript, not Java :)

Starting on OSX is actually an advantage in my opinion, and most developers I know use it.

Good luck!
posted by yaymukund at 7:07 PM on August 8, 2012

Agreed that the UNIX terminal in OS X is a far better environment for learning (and working!) than a Winbox!

And while learning to code iOS apps is a great idea, it's tough for a beginner -- starting with Python is definitely the way to go.
posted by ariel_caliban at 7:36 PM on August 8, 2012

I've been programming on IBM mainframe computers for about 37 years, financial industry. So my perspective is COBOL coding (yes, still alive in big companies), relational databases and high volume transaction management systems.

Granted, my experience is way different than the average programmer today, and not likely to make you big bucks. So the only reason I am replying is to give you just another angle on the whole thing, a couple additional insights.

When someone asks me about an area of data processing that it's clear they are unfamiliar with, I ask if they want "a drink from the fire hose". Pick any area and you can spend tons of time studying just that (access security, service oriented architecture, scalability, data integrity, disaster recovery, performance, design patterns, objected oriented design and interfaces, software version control, sorting and searching, asynchronous processes and race conditions, etc.) Notice nowhere in that list did I mention a programming language? And of course, the same goes for me and holes in my knowledge.

Another thing I notice about programmers is there are very few really good ones, and so a corollary is that the average company (in my experience, at least) is not hiring the best programmers, but rather those they can afford and/or are willing to work at that company in that locale. Add in human personalities (puzzle solvers who don't like spending a lot of time coding, coders who are very productive but don't comment their code so only they follow it, those who know the business/industry side of things but are lousy coders, and excitement junkies who only like reacting to emergencies and get bored with routine work) and you realize that much of a day is spent in meetings or fixing mistakes or trying to make deadlines.

As I said, these are just a couple thoughts from an old guy.
posted by forthright at 8:11 PM on August 8, 2012

Start with something easier, like Python or PHP. Graduate to Java and other more advanced concepts and languages after you've learned basic programming concepts. You do sound like you have the right personality for the work.

A certification might be enough, but you're going to have to have some impressive code samples - things like work on a good, currently maintained open source project and/or multiple finished apps that people actually use to show in an interview. You'll also have to ace the programming questions in the interview. If you can get to the point where you've published mobile apps into an app store and people actually use them, you'll have a big advantage. Also consider that you'll often be competing against 22 year college grads who don't have families (or much else to do) and don't mind working 60 to 80 hour weeks. Not every programming job is like this, but many are.

A computer science degree will get you a better conceptual base to work from in terms of getting jobs and understanding core concepts. You'll also much more time to learn and absorb what you'll need to know.

Either way, keep learning on your own. This is definitely an achievable goal.
posted by cnc at 10:45 AM on August 9, 2012

As anetwork admin who had to do one year asa programming major its not an easy job. Yo ucould be spending 12 hours a day coding infront of a computer. IF you hate math you probably will not like programming.

If you like fixing things and solving problems then the Network admin side might be a better choice.
posted by majortom1981 at 10:47 AM on August 9, 2012

Similar to forthrite above I started my career long ago as a Mainframe programmer in the eighties but transitioned to Network administration in the nineties. Other than some simple scripts I haven't actually written a program in years (not counting some SQL, etc.)

I still miss the creation of nicely flowing programs. Network design and support is (IMO) much more complicated, but for some people the problem solving and avoidance is really fulfilling.

Personally, I'd go back to programming in a heartbeat even if I had to learn a new language, logic is universal, but I'm locked in at my job.

My boss points out that everything he knows about Network Admin came from a few years working on and eventually leading our help desk team. I think he spends 25 hours a day in front of PCs.
posted by DBAPaul at 7:41 AM on August 10, 2012

« Older Edit manuscripts, like in the pencil days. On a...   |   Ahhhhhhhhhhhhhh! Newer »
This thread is closed to new comments.