Advice on Someone Interested in a Programming Career?
July 17, 2009 11:58 PM   Subscribe

As someone who is in their mid-thirties, what are some realistic alternatives for me if I want to learn and eventually get a career in programming?

Background: liberal arts major, working in the service sector. I'm pretty happy with my job, but not passionate about it. I've always enjoyed tinkering around with computers to the point of obsession. I'm thinking I might take the plunge and learn programming. Here are my questions. (Apologies in advance...I have quite a few!)

1. I'm in my mid-thirties. Kind of worried about being the "old fogey" in a very young and dynamic industry. If it helps, I have no kids, and not planning on having any, and have a lot of time on my hands. Is a programming career viable for me?

2. I'm not a fan of 9 to 5 jobs. I'm even a less of a fan of 40+ hour workweeks. I _will_ and _can_ stick with a project until it is done, but I'm opposed to endless weeks of overtime, with no end in sight. Are there any programming or coding jobs that fit the bill? (Or are all you veteran programmers laughing your asses off right now at my naivete?)

3. I have no idea what path I need to take or language I should learn. Learn web development or C++? I like problem solving, I'm anal, and for better or worse, am slightly obsessive compulsive. I love creating procedures that lets the computer do repetitive tasks instead of users (something I've done in past jobs, using very simple VBA commands and applescript.) I've been told I have above average to excellent people skills. I would prefer not managing anybody, however. Or dealing with irate customers on a day-to-day basis.

4. Should I consider going back to school for a CS degree? Do I REALLY need a degree to be considered employable? Should I take classes at the local college or get trained online? My schedule is pretty flexible.

Thanks for reading this. Any input appreciated.
posted by thisperon to Computers & Internet (23 answers total) 25 users marked this as a favorite
 
Response by poster: (ack, advice *for* someone...not *on* someone)
posted by thisperon at 11:59 PM on July 17, 2009


1. You can learn to program. You can probably even teach yourself. If you're willing to take entry-level pay, you can get a job. But, don't for a moment think you can apply for "Software Engineer IV" right out of the gate and not get laughed at.

2. This is a big problem. For every programmer who comes in here and says, "I only work 40 hours a week", there are probably fifteen who work more than that. And each of those people who says they don't do unpaid overtime... well, even they do it at crunch time or during emergencies. It's one of the reasons I left employment in software (and started my own firm).

That said, it varies by company and personality. The last place I was employed, I simply refused to work more than 8 hours in a day unless my boss could articulate, to my satisfaction, how the current situation constituted an emergency. I got evil looks, but nobody really said anything--expectation management. The place before that, my fuckhead boss screamed till he was literally beet red in the face about how I still wasn't putting in enough time with 10 hour days.

But, the trend is toward more work, not less. I've never met an employee-programmer who claimed to be in the office fewer than 40 hours a week. I mean, none of us work all that time, but you know...

3. Don't learn C++ at first. The days of its ubiquity are coming to an end (since nobody likes it), and it's by far one of the worst languages for beginners I can imagine. It is huge, byzantine, arcane, and, most damning, inconsistent. To learn to program (which is separate from learning a language), I suggest Python or Ruby--both of which have consistent design philosophies, and are excellent for beginners (plus, lots of very real projects are written in them). After you learn to program, learning the syntax of any particular language is the work of about a week.

The web is the hot platform at the moment. So are mobile devices. Personally, I hate the web as a platform... and many other people consider it harmful as well (none of them are marketers). Also, frankly, I find that people whose only experience is web programming make terrible native programmers... they have to learn all over again.

4. Don't do an online degree. We'll laugh at you. Either go get your BS from a four-year university (state colleges are fine, community colleges are more laughable than the online ones), or teach yourself.

Don't get your associates or any of that shit. The philosophy is basically that you as a programmer were either awfully smart and went to real college and got all edumicated. Or, you were even smarter than that, and didn't need to. Since an associates degree doesn't teach you rigorous theory (like a BS would), it's essentially like paying thousands of dollars for the information contained in one O'Reilly book. It just makes you look like a sucker.

You can get a job being totally self-taught, if you have experience. But, it's a goddamn righteous bitch to get that first job without the compsci degree. You can try to come at it from the open source end, but that could take years before somebody notices you (if ever) or before a job you want actually cares about the project to which you contribute.
posted by Netzapper at 12:19 AM on July 18, 2009 [4 favorites]


Response by poster: Thanks for your amazingly thorough and informative response, netzapper. I suppose if I end up loving programming enough, I won't mind the 40+ hour weeks, but gah, that it just sounds like a recipe for burnout for normal people, no? Congrats on starting your own firm. That is utterly cool.

I was thinking I might just take an introductory class at the community college to get my feet wet. It sounds like I could begin a Python tutorial just as easily, though.

Again, thanks for your detailed answer.
posted by thisperon at 12:33 AM on July 18, 2009


If you're interested in not working 90 hour weeks, I would suggest learning Ruby first. The culture building around it has become increasingly focused with doing more with less. This might grate a bit with traditional programmers, but you might find that it's possible to have a "programming career" without many of the trappings that "programmers" have generally taken as read for decades.
posted by setanor at 12:38 AM on July 18, 2009


If you mean a broad definition of programming, then making websites is something I didn't start until my thirties. I love it, make a comfortable living at it, and a few people think I very much don't suck at it. But a lot of programmers would not include scripting or light programming as real programming...don't know if that helps at all.
posted by rahnefan at 1:11 AM on July 18, 2009


Response by poster: Did you go to school rahnefan, or were you self-taught?

If I may ask, what aspect of making websites do you enjoy the most?
posted by thisperon at 1:13 AM on July 18, 2009


It might make sense to learn HTML/CSS thoroughly first; it's not programming, but involves a lot of the same thinking (diligence, establishing sensible structures and conventions, etc.) and is a decent test for whether you can stick at learning new programming-type stuff. If you reach a point where you can create pages with valid, well-structured markup that look right across all the major browsers then you can probably start getting paid something for little bits of freelance work.

You could then move into server-side web dev, probably based around Python, Ruby or PHP (others can argue the merits of each). Sensible clients/employers will always take more notice of demonstrable skills and experience rather than qualifications, so your focus should be on producing some projects of your own and ensuring everything you create has incredible attention to detail.

Have you considered sysadmin work? Some people find it a better fit, but you need a cool head to go with the obsessive compulsive side so you can sleep at night and not freak out when things go wrong.

(I'm 38 and have absolutely no relevant qualifications, each bit of work I get is based purely on reputation, and that's something I constantly think about improving/maintaining)
posted by malevolent at 1:25 AM on July 18, 2009


Started as self-taught but then got a degree. Two years. I thought about the BS but ultimately decided that I knew enough that in my line of work, the BS would not benefit me. But I'm not upwardly mobile per se, I put a higher value on whether or not I'm enjoying the moment-by-moment stuff.

It's hard to rank what I like best about it. On one level, the level you may be feeling out, is that the work itself is creation, and not the kind where one screwup means you have to start over from the beginning. So for a designer it can be convenient in that sense. The medium is fluid.

Also you get to do work that is going to be seen by people. And web-related languages (mostly scripting, not programming as most think of it) are fairly easy to learn but you can still be creative with it sometimes.
posted by rahnefan at 1:29 AM on July 18, 2009


I'd suggest you try finding a job, maybe for the city, or some non profit, and start by either making small web apps or things that could help that department.

Reason being, they're so behind on technology, that if you make a web app that does, say some kind of administrative thing, you'll be considered a genius hero.

But it'd be nice to have some foundation to go along with it, and I know here you can take the equivalent of the first 2 years at a community college. $20 a unit.

Give yourself 5 years. I know ur hittin 40 but it's like a guitar, so easy to learn the c g d chords so you think you got it, but the real stuff come slowly over the years.
posted by 0217174 at 2:36 AM on July 18, 2009


I haven't been a programmer for a few years, but I still have friends in the business.

If it was the mid-to-late 90s I would have had no doubts, but now programming has become much more commercialized and much more competitive. You can still do it, and you will do it, if you love it enough. However, times have changed. You need to take an unconventional approach. Without a reputable degree and/or production experience I doubt you'll make it to the first interview, and even then you'll be at a disadvantage. There is a lot of age discrimination in the interview process.

The unconventional approach is to bypass the interview stage. Pick a few smallish or mid-sized companies that interest you. See if they have a blog or if some managers or technical leaders are on linkedin.com. Find out where those people hang out. Find out what groups they associate with. Become part of the group. In the meantime, set up a blog. Start blogging about things that are somewhat but not directly relevant. Post insightful and informative responses on other popular blogs.

Even in this age of data mining and automation, the best way to get the job is by knowing someone influential.
posted by TheOtherSide at 4:46 AM on July 18, 2009


I am a self taught programmer, I don't work in the industry but I do write code (I do audio programming, mostly in C because other languages tend to be too slow for interesting DSP stuff). The big A-HA with learning programming for me came with reading The Structure and Interpretation of Computer Programs. SICP is a freely availible text, that totally transformed my understanding of programming. This book uses scheme, but as mentioned above, once you learn one language the learning of another is a simple weeks work (unless you are talking about Malbolge).

Before reading SICP, I kind of understood programming because there was a syntax that seemed to work and I could eventually get the compiler to stop complaining about my code. After reading SICP I could look at my code, and the standard for the language, and understand the hows and whys what the compiler was most likely doing with my code. Having read and understood SICP can be the difference between a programmer who learns a cool little new language in her spare time, and a programmer that writes a compiler for a cool little new language she invented in her spare time.

SICP has its examples in scheme, which is a lisp family language. I think it was Eric S. Raymond who said that every programmer needs to learn a lisp family language, not because you will ever use it at work (you most likely never will), but because it gives you a huge set of new mental tools for programming, and ways of understanding the task of programming. Maybe learning scales on an instrument would be a good analog? You are not going to do scales on stage, but if you do your scales it shows in the quality of the performance on stage.
posted by idiopath at 4:51 AM on July 18, 2009


If you want to start with some self-teaching projects, I suggest you learn about Structured Query Language (SQL), and relational database management systems (RDBMS). These days, many applications are built on RDBMS engines, because the applications involve storage, retrieval and manipulation of data organized in structured recordsets. Many computer languages support some form of embedded SQL, as a means of efficiently interacting with database systems, and the RDBMS systems available today are quite sophisticated in automatically creating efficient access paths and indexes, which dynamically improve performance, while shielding users and programmers from the complexity of database optimization.

This is not to say that SQL/RDBMS use is a requirement for all types of programming, but if you have the choice of using such a sub-system, or writing code of your own to handle data manipulation, storage and retrieval, you will nearly always be better off using a standard RDBMS solution and SQL calls, than doing it yourself. You can freely download and use powerful RDBMS systems like MySQL, Postgres, and DB2 in your self-teaching efforts, and if you do wind up doing any amount of general business or Web application programming, the time you invest in understanding this technology will be repaid in spades.
posted by paulsc at 5:56 AM on July 18, 2009


Learn HTML, CSS and Ruby, on your own or combined with courses at your local college (the courses should be more theoretical and not focused on any particular technology, and if there are any language courses choose C and LISP over Java). Teach yourself databases. Create a project for yourself and build it, start to finish. Choose something that interests you, shows off your skills, and you can create from scratch. Use this as a portfolio item to demonstrate skills, and look for an entry level job or freelance work at one of the many companies that need these web dev skills. Meet people at these companies through networking rather than applying on job boards. You may want to start by working in interactive (design, web and advertising firms that use technology on client projects) rather than software (companies that sell software itself as their product) where the technology requirements are lower but there is a high demand. The former can be rather interdisciplinary and you can, depending on your interests and how your skills grow, manage projects, design user interfaces, and work with clients. Continue teaching yourself: algorithms, database theory, other computer science subjects, and any other aspects of the field that interest you.
posted by lsemel at 8:19 AM on July 18, 2009


While Netzapper's points about C++ and the web as a programming platform are right on, his puzzling rant against community colleges is one of the bigger pieces of bullshit I've read on AskMe in a long time.

Any time someone is considering a career change, an excellent place to start is a class or two at a community college, where you can get a feel for a new field or subject matter at a reasonable price. The content of transferable credit course is required to be exactly the same as that course at a 4-year college or university. I don't know that you necessarily need to stick around for an associate's degree, unless you decide to go for the BS. Then it might make financial sense to do the first two years at a C.C. and then transfer.

But really, just pick a class and plunge in head first. (I think the suggestion to take C is a good one.) Do ALL the exercises, not just the ones assigned. Talk to your instructor about more things you can try. Really dig in and experiment. Expand the class projects. Think about why your solution works, rather then just getting the program to compile and spit out the right output.

If, after that first course, you still enjoy it, then reevaluate.
posted by SuperSquirrel at 8:53 AM on July 18, 2009


Another option that comes to mind that's often overlooked: learn ActionScript. Judging from enquiries I get, there's a shortage of good Flash coders who can work effectively with designers/animators/server-side coders to create everything from interactive ad banners to full apps and games. It might also be a fun way to get to grips with OO principles etc.
posted by malevolent at 9:14 AM on July 18, 2009


As a very specific, place-to-start piece of advice, but Stanford's intro to CS course series is posted online, with tapes of the lectures and everything. I haven't actually looked at it and don't know the content, but if you learn better that way than from just reading a book or just diving in, it might be a good thing to look at.
posted by brainmouse at 11:00 AM on July 18, 2009


Here's some moderately scattered thoughts that comprise a different angle, since much of the existing advice is very good.

Learn to program (How to Think Like a Computer Scientist is a great start). Think of some kind of website that you would pay money to use. Build it (the book will teach you python, so learn django). Charge people.

The vast majority of corporate programming work really is sitting at a desk from 9 to 5 with occasional serious crunch. There is, however, a lot of room for people who do it differently, and one of the best ways to do it differently is to build something people use.

While reading How to Think, start planning your project. Write down ideas and sketch out interfaces. Without worrying about building a web project think about the things the book is teaching and how they'll apply to your project. Implement a command-line version first, the practice will be useful for learning and for the final product.

Also, my standard advice for new programmers is to find an open source project that you find interesting and start following along with the project communication - there'll be mailing lists, irc channels or forums or even just git or svn logs. Use the things discussed around the project as starting off points. Wikipedia is full of great starter articles about concepts and technologies and links to deeper discussion.

Find technology social groups in your area (meetup is a pretty decent resource) and let them know you're a newbie. Most geeks are pretty gentle.
posted by cCranium at 11:19 AM on July 18, 2009


I meant to be explicit: Keep your current job and learn in your spare time. Having a job that you don't outright hate means you get to pick and choose which programming job you eventually take. A lot of them are going to suck way more than whatever it is you're doing right now.
posted by cCranium at 11:21 AM on July 18, 2009


While Netzapper's points about C++ and the web as a programming platform are right on, his puzzling rant against community colleges is one of the bigger pieces of bullshit I've read on AskMe in a long time.

I'm sorry I was unclear. I don't actually have anything against community college (hell, I've attended my share of classes at them). It's just that, in my experience of the industry, an associate's degree from Vatterott College or whatever is a big glaring red flag that frequently prevents even the first interview.

That said, I really do think that an associate's degree is a waste of time. I've interviewed people fresh out of those programs: almost invariably, these candidates have demonstrated competent knowledge of the syntax and features of a particular language (Java lately), but have basically no theoretical skills. The fact that you know all the member methods of ArrayList is utterly, completely worthless if you can't tell me how an ArrayList differs structurally from a HashMap.

So, OP, go ahead and take community college classes. You may find them quite helpful. However, the associate's degree probably won't prove helpful. If you decide you need a degree, transfer your credits to a 4-year school and get the BS.
posted by Netzapper at 12:01 PM on July 18, 2009


I'm a programmer too and have worked as such for 3+ years. It really is something have to love and I believe there has to be a born aptitude. Also, a lot of what Netzapper said is dead on, especially what he said about online training, though like others have said I don't really agree with his panning of community colleges. Its true, there are some that are completely disregarded in the field, but there ARE good ones that are recognized by employers. Do your research, ask people in the field in your area, get suggestions. Also, having gotten a university degree as well as a college diploma, it bares saying that it is the college education that got me the job. I'm in canada and I went to a provincial community college so maybe my experience is different from the norm.

I wouldn't worry overly about the 'old fogey' thing. You may have to work a but harder at the start to prove yourself, but once you have you're set and you'll just be one of the team.

Also, the 40+ hour a week thing is going to be a significant hurtle for you. That vast majority of the jobs are exactly that, plus unpaid overtime. You need to think that one over really hard.

Good luck though! And if you find that programming isn't for you, have you considered focusing in a hardware/repair instead of programming?
posted by gwenlister at 4:15 PM on July 18, 2009


Oh, and it has been my experience that 'self taught' simply doesn't make you employable. Employers want to see the education backing you so that they know you are at least aware of proper syntax, naming conventions, structure, etc. In programming there are about a hundred ways to accomplish a task, but that doesn't mean they are all a good way to do it, you know?
posted by gwenlister at 4:19 PM on July 18, 2009


I wish to rescind my previous blanket comments on associate's degrees. Since writing my last comment, I've recalled that there are some really neat specialized associate's programs that consistently graduate excellent candidates. The one that leaps to mind is Fullsail, which has a video game programming associate's that plenty of people respect. So, programs of this nature would be totally acceptable. However, you need to do your research.

Also, I'd like to point out that I'm specifically talking about hirability. You can get an excellent (although largely non-theoretical) programming education at a number of podunk community colleges. However, as Mr. Clemens alluded, there's a difference between education and schooling. My advice against community college is based on their popular esteem in the American software industry. Fullsail is a completely different beast than, say, Ozarks Community College, despite offering the "same" degree.

If you weren't looking for the career, you wouldn't care about a degree at all. Since you want the career, you should at least seek the degree that doesn't immediately hinder your chances of even getting in the door. By all means, attend CC (and get your associate's if you want), but I'm merely recommending that you want to transfer for the BS to optimize your chances.
posted by Netzapper at 6:46 PM on July 18, 2009


Response by poster: Thanks everyone for your replies. You guys are GREAT. I guess I will try exploring my options at this point.

(Oh, and Netzapper, I did get that you weren't dissing associates degrees at all, just explaining how employer's might generally feel about them. Thanks for the tip.)
posted by thisperon at 1:46 AM on July 20, 2009


« Older Split desktop on two monitors   |   Bands similiar to The Cardigans? Newer »
This thread is closed to new comments.