Music may not be in the cards right now
June 27, 2010 8:05 AM   Subscribe

Is there any kind of programming that a beginner could learn well enough within a year to be employed to do it? Low pay is okay.

I am a conservatory student set to graduate next May. My situation is an embarrassing cliche: for the past three years I had thought the most important thing I could do was gain an education in something that I loved, no matter how impractical (violin performance, for me). Over the last 6 months, I have slowly realized that a man's education doesn't mean anything if nobody will employ him to use it.

I have no marketable skills whatsoever. I have decided to spend my last year in school using all my free time to learn one.

I think programming would probably be the best fit for me. I'm not a gamer, I don't know much about computers, but music and math come extremely easily to me. I've been told that people who are good at music and math are often good at programming, too.

So, my question. Where should I start? What kind of programming should I learn?

I have a short-term goal, and a long-term goal.

Short term goal: learn enough that I will be able to find a job doing some kind of programming upon graduation in roughly 10 months, even if the job only pays minimum wage.

Long term goal, if the short term goal works out: become a well-rounded, competent programmer, gain the ability to produce a quality product, enough so that I could find a programming job paying a decent salary.

Thoughts?
posted by anonymous to Computers & Internet (21 answers total) 36 users marked this as a favorite
 
Just because you're good at math and music doesn't mean you'd enjoy working as a programmer.

I agree that people who are good at math and music can be good programmers, but it doesn't follow that people who are good at math and music will enjoy programming.

And, not all good programmers are good at math and music.

So, a better point to start is: would you enjoy programming.

Most of the programmers I know are introverted and are more comfortable working by themselves than in teams.
posted by dfriedman at 8:10 AM on June 27, 2010


First, you almost certainly do have marketable skills. It's a matter of finding someone to pay you to do something.
Second, while there is a lot of overlap between music, math and programming, it is no indicator of probable success.
Third, to get good at programming (much like getting good at music) requires that you love to do it.

That said - if you want to get into programming, and know nothing about it to start, I'd recommend reading this book which is available online for free: http://pine.fm/LearnToProgram/
Ruby is a great language, it has a culture of people who are interested in software craftsmanship, and if you learn Rails well, you can make a lot of money, at least in the short term.

After you get the basics of the language, I'd recommend building a couple of your own web applications, and getting someone knowledgeable to mentor you. If you're near enough to my timezone, I could help with that to some degree.

If you really like what you are doing, and devote significant time to reading about it, and doing it, then 10 months should get you to an employable level of skill, provided you look for jobs where they care more about results than degrees, and you are the kind of person who can continuously self-improve. You'd still be extremely junior, but things move fast in the Rails world, and knowing how to keep up is more important than having an exhaustive body of knowledge to start with.

Good luck, and feel free to email me at the address in my profile.
posted by bashos_frog at 8:25 AM on June 27, 2010 [3 favorites]


Try playing this game, Manufactoria. If you can stand playing it all the way through to the end and you derive some enjoyment out of it then you can probably get along as a programmer. But if you absolutely hate it and find it intolerably tedious that might indicate that programming as a profession is not a good fit for you. (Don't be discouraged if it simply takes you a long time to work out solutions to the problems, they aren't all too easy even for someone who has already done lots of programming.)

I'm not too sure if you can end up with generally marketable skills working on your own for ten months. But it might encourage you to mention that I know someone who was in a very similar position to you who worked out the changeover into the computer field; having never done any programming before, with two years left in his undergrad degree he changed his major to computer science and worked like hell and managed to steer himself into the computing field, and now a decade-plus later is the CEO of a high-tech company.

Ten months in your spare time is probably long enough to thoroughly dip your toes into the water, though. How about for now you continue the theme of learning things you enjoy, like maybe experiment with writing audio processing plugins for something like Audacity? (You would want to tackle that after selecting and going through some Intro to Programming stuff, though.) Once you have some basic proficiency you might be in a better position to seek out and choose a particular field to target.
posted by XMLicious at 8:47 AM on June 27, 2010 [2 favorites]


Let's get one thing out of the way first: the vast majority of programming jobs require an undergraduate degree in computer science, software engineering, computer engineering, or at least math or science. My estimation is that you will find it difficult to get a job without those degrees. Now, if you still want to go this path, here's my advice.

Short term - Learn python. I hear good things about this book. Inevitably everyone will tell you to learn their favorite language and python is admittedly one of mine. You should learn a scripting language for reasons I will illuminate later, so python fills that (otherwise java would be the obvious recommendation). Python is also used in just about any field you can find - statistics, music production, game production, website backends, .....
This summer, go through that entire book. Do every exercise. This will take up a lot of time. It will be like having a full time job. Be prepared. At the end of the summer, write down a description of a program you would like to have. Be as detailed as possible. It makes absolutely no difference what it is. You are going to build this in the next 3 months, or fail in the most horrific way possible. This additionally does not matter, just work as much as you can. Bonus points:
- keeping a journal.
- learn about source control.
- Start reading some subset of these sites: slashdot, hacker news, and proggit. Just try to sponge up the best stuff.
This fall build that project. When you get so frustrated you start to think about throwing your computer in a lake, work on project euler. There are other practice sites, but if you have a mathmatical mind, this will tickle a slightly different sector of your brain and might thus hold more interesting. At the end of the fall, look for a local internship in QA (quality assurance). It will be unpaid or marginally paid. You will have to sell yourself on this. Feel free to message me for advice at this point.
For the rest of the time you have, work that internship into the ground. QA is rarely considered exciting work, but it might be within your reach and it gets you in the room with other people who you can learn from. Every day you are at that internship, you must prove yourself to everyone there. If you get a job after graduation, it will be because you so impressed these people that either one of them will help you get a job somewhere else or this company will hire you.

Long term - get an undergraduate degree in computer science. I think if you avoid this, it will haunt you. In the meantime, get a hard copy of the structure and interpretation of computer programs. You are going to go through this whole book as well, with a little help from Hal. If you accomplish this, other programmers will look at you differently.
posted by yeoldefortran at 9:03 AM on June 27, 2010 [5 favorites]


There are alternatives to getting a whole new degree. If you find yourself struggling to teach yourself programming, take a course at your local technical school. Heck, do a whole certificate or diploma if you have to. I am doing a diploma in computer technology at mine (night school), and in my city, these diplomas are preferred by employers over Comp Sci degrees from the local university.

I also have a useless, artsy degree because I thought that pursuing your passion in university was the way to go. I've decided to work towards a career in programming, much to everyone's shock and confusion. I have no natural talent in math, nor am I even terribly logical in the way I think and conduct my life. But I really do enjoy writing code, and while I will never be a uber programming whiz superstar, I'll be perfectly competent on the job. The main requirement, I would say, is that you have to like to solve problems and have a certain persistent stubborness that makes you refuse to give up - go at it from a new angle - when what you're trying just isn't working.

You can do it. And don't give up if you can't self-teach. Good luck!
posted by kitcat at 9:27 AM on June 27, 2010


Heed the advice above.

With that said, systems administration and the programming that it can entail might be a good start for you. Basicly there is lots and lots of little tasks in a business that need automated. Think making sure that things are automatically backed up or that reports are run on a scheduled basis. There is also great need to turn manual processes into automated ones so that the human labor can do something more valuable as well as to automate away the human foibles of a manual process.

To some people this isn't as sexy as creating 1st class applications that end users love and rave about but this is a very important area for people who can execute and are reliable. Plus since the problems tend to be smaller and well defined they can be easier to implement and research for a beginner while still exercising the logical and detailed oriented parts of your brain.

Good luck.
posted by mmascolino at 9:37 AM on June 27, 2010


Python is a good starting language. It is clear to read, enforces good programming style habits, and it is very powerful. It is also marketable, but without formal education in the field you're going to have to build things with it on your own before anybody will look at you for a job.

This MIT opencourseware course is very good, but for some people it can still be a little deep end.

The Django web framework is a good thing to learn after you've got the basics down. It will help you build cool stuff.

Structure and Interpretation of Computer Programs recommended above is a great book, but it is not for the faint of heart. Look at Simply Scheme for a gentler introduction to computer science. It is a MUCH better introduction than anything I have ever seen written for Python. LISP/Scheme is a spare, elegant, extremely powerful language and if you can wrap your head around the required concepts, you are in great shape to become a decent programmer. Scheme is not, however, a widely marketable skill unless you are a real bad-ass.

Also note that software development and programming aren't exactly the same thing and it is possible to be a brilliant programmer who can't deliver a working product. Head First Software Development is a great introduction to the actual working practice of programming. If you find that programming really grabs you, a community college certificate in software development taught with an extremely marketable language like C# or Java might be appropriate.
posted by zjacreman at 11:14 AM on June 27, 2010


This is entirely possible. I think getting a programming job will be harder than you think. I would start looking now to see what's available, who is hiring, etc. If you're outside a major city or the West Coast, I think you'll be surprised to see how few jobs exist, especially without 3-4 year stipulations.

In any case, here's how I did it and I think at the end I probably had the same abilities of a green CS graduate. I knew a lot of theory, but working on a large project, every day, is an entirely different matter. Curriculum's are geared towards short, 2-3 week projects. This is unlike anything you'll ever encounter.

Start off with the Stanford School of Engineering. CS106A, CS106B, CS107 are a must. Buy the textbooks. Do the homework, follow along. I could do about 2-3 classes per day without being completely burnt out or staring at the screen like a zombie. A lot of times I would go back and rewatch certain lectures. I also recommend the iPhone application programming when you're done as it is probably the most pragmatic thing you'll do. Did I mention buying the textbooks? You should really buy the textbooks. Most of them are available from torrent sites and rapidshare if you're going cheap. The other classes are basically nerd masturbation and you'll never use them in any job you're likely to be doing (if you do use it, congrats on having an awesome job that deals with robots).

Stanford's free online classes cut things a bit short. MIT's courses more than make up for that. I really recommend 6.006 and again, buying the algorithm book. It is a standard. Skip everything but 6.00, 6.001, 6.002, 6.004, 6.005, 6.006, 6.0011, 6.0033, 6.0035.

If this is all you're doing all day and working at your own pace it is possible to get that all in one year. The books are boring, dry. You'll be thankful when the professor puts up tests as then you have a reason to really read the book, otherwise you're reading about btrees and thinking to yourself, "Well I can just sort of skip through this."

Concurrently I would recommend trying to design a larger program. I wrote a website to store all my books. Setting up a blog is also sort of a nice study. You'll learn about things like persistence, input validation, etc. You'll also learn at least to recognize the tools needed to complete a large enterprisey software package.

I think this is all trivial though. The hard part will be networking and finding a good job.

Really programming is one of the few things that you can know nothing about and receive a pretty good education without having to leave your computer. It is pretty meritocratic too, I know people who did not start out programming now working at some big name places. I can't imagine "picking up lawyering" and going to a White Shoe lawfirm.
posted by geoff. at 12:20 PM on June 27, 2010 [6 favorites]


the vast majority of programming jobs require an undergraduate degree in computer science, software engineering, computer engineering, or at least math or science.

Um, this is absolutely not true at all in my experience. Many programming jobs (particularly web development jobs, but others too) only require that you have programming experience. If you can build a well-coded MVC web application, you will definitely be able to find work as a web developer (NB: standard “In This Economy” caveats apply). Unless you are an amazing programmer with a strong mind for computer science, it would be unlikely that you could get a job working at Microsoft, Google, Amazon, etc. without a degree.
posted by !Jim at 12:30 PM on June 27, 2010 [1 favorite]


Oh, and I meant to add, if you can learn how to install Wordpress, make/customize basic themes, and make basic plugins, there's probably enough freelance work out there that if you built a client base, you could make a living. (In the beginning, I think it's likely you'd be competing with high-schools for $15/hr, though).
posted by !Jim at 12:33 PM on June 27, 2010


Go quick & dirty: PHP, MySQL, HTML. Once you've got the basics (a month, max) find a first project - there are loads of people who want a basic website (think small medical practice, family B&B, etc). Do simple stuff for free or cheap, you'll build a portfolio at the same time as learning (having deadlines really forces to you to learn). In 9 months you'll have a bunch of progressively competent sites that you got paid to make and coding ability - this will get you hired by a low/mid tier web agency as a junior. To get the job you need the commercial experience to prove you can do it, I can't understate this.

Then figure out what directions you can go in within that company, who the best people they have are that you can learn from. From that point you can double your salary within 2 years. Move on to a better agency if the learning curve starts to level out or if you don't get pay rises.

Stuff like Java and C++ is much better approached from a CS background - and they take a hell of a lot longer to get proficient at. But loads of web coders came into the industry the route I've described.
posted by dickasso at 12:37 PM on June 27, 2010 [2 favorites]


The concepts and theory are a lot more important to learn that any particular language if you want to be a good programmer. As you're leaning how to code, try to learn WHY things are done in a certain why. Whatever you do, don't just pick one language and assume it's the only way to do things. Every language has its good and bad points (some a lot more bad than good). The trick is to not get stuck in the bad habits from any particular language.
posted by jjb at 12:49 PM on June 27, 2010


Python would be very good for this, although php will be easier and faster to get into. If you decide to go the python way, take a couple of weeks to play with Django, and see if this line of work will appeal to you. If you're ok with earning little to gain experience, there's rentacoder. If you find web frameworks a bit intimidating at first you can start with small scripts and find odd jobs on rentacoder and do that for half a year to a year and then "graduate" into web work. But it is fairly challenging work so, while you don't have to completely fall in love with it, it must be somewhat appealing to you, otherwise it won't work.
posted by rainy at 1:52 PM on June 27, 2010


I've helped teach programming to students with little to no experience. I've found that there are some people who a natural aptitude for it and can learn much faster than average the concepts seem intuitive to them. This is why there are so many non-traditional programmers, with degrees in theater or biology or what have you. If you turn out to be one of those folks for whom it comes naturally (Donald Knuth estimated 1 in 50, but I think his standards were really high) then you what you're talking about may be doable. Possibly in your favor: I once read that in the 1950s, when companies like IBM were first hiring programmers, they found that music teachers worked out the best, even better than mathematicians.

Yes, you should learn web frameworks, except maybe at the very beginning where an interactive shell might be more suitable. Try to focus on concrete projects rather than "learn technology X". Without a degree or professional experience, I would say to build a really strong portfolio you can show employers, plus possibly some open source contributions.
posted by serathen at 2:38 PM on June 27, 2010


plus possibly some open source contributions.

So this is a bit off-topic, but how much do open source contributions matter? Do top contributors get hounded with job offers? I've always had it in the back of my mind if I really needed a job I could just contribute like hell for 6 months (in a meaningful manner of course), and it'd be a good way to generate job offers.
posted by geoff. at 2:50 PM on June 27, 2010


Nthing python as a good place to start.
posted by aesacus at 8:15 PM on June 27, 2010


So this is a bit off-topic, but how much do open source contributions matter? Do top contributors get hounded with job offers? I've always had it in the back of my mind if I really needed a job I could just contribute like hell for 6 months (in a meaningful manner of course), and it'd be a good way to generate job offers
In my experience (only a few years, only at one company), open source contributions can do a couple of things:

1) If you contribute to a project that a company uses or wants to start using, they will likely look for people involved in the project to help them get started or move forward (this is the scenario in which you get a job offer directly), and

2) even if you don't actually get job offers related to your open source work, you can put your contributions on your resume, use them for code samples, and use other collaborators as technical references. You also show a dedication and passion that will give you an edge over other applicants.
posted by !Jim at 1:03 AM on June 28, 2010


I have no marketable skills whatsoever.

Well, presumably you play the violin pretty well...

I guess I'm unsure why this AskMe wasn't 'I am in my final year of training as a violinist in [city]. What should I be doing now so I can turn my training and my love of music into a career?'*

If programming is something you want to pursue on its own merits, that's fine. I know a lot of programmers who gain great satisfaction from their work, but it sounds like what you really love is music. If you're happy to take minimum wage, why not pick something you can walk into untrained so you'll have more free time in which to pursue your real love?


* Have you done the research and found out who is hiring violinists in your region? Are you being tunnel visioned with regard to orchestral work or are you open to working in musical theatre and with bands? Are you relying on the conservatory to get ears on your showcase piece or have you been proactive and made your own list of people to invite? Are you networking, either by attending events or by locating the online spaces where the pro-musicians are hanging out? Have you considered working with children, either as a violin instructor or more creatively as a musical animateur? Do you have any experience playing outside of the conservatory? Have you considered getting a regular gig in an Irish pub or a high end restaurant or seeking work at weddings and other functions? Are you making connections amongst your fellow students, so that if one of the pianists makes it big and is asked to recommend a violinist, your name is on the tip of her tongue? Have you memailed me to discuss this in a lot more detail? I mean, yes, forging an arts career is difficult and you should be realistic, but that's not the same as giving up before you even start.
posted by the latin mouse at 1:28 AM on June 28, 2010


So this is a bit off-topic, but how much do open source contributions matter? Do top contributors get hounded with job offers? I've always had it in the back of my mind if I really needed a job I could just contribute like hell for 6 months (in a meaningful manner of course), and it'd be a good way to generate job offers.

Open source work I did for free has led to more job offers than everything else I've done, combined. I think it's one of the biggest secrets to being good at programming, too.

After I quit WoW, I found myself with six extra hours of free time every day, so I decided to start contributing to Django (the Python web framework mentioned earlier). I spent about six months writing small features and side apps during my free time, just for fun, maybe 20 hours a week at most, and that contribution alone has gotten me every job since. I'm consistently solicited for consulting work (at triple digit hourly rates) and hiring managers at companies like Google, Facebook, and Intel email me every few weeks to see if I'm available to explore engineering positions (sometimes I have fun responding). And now that I'm in a position to hire developers, I weigh open source contributions very heavily.

Like mentioned earlier, programming is one of the most meritocratic professions out there, and open source is a really easy way to show companies that you know what you're doing. In addition, the fact that thousands of people will see and use your code makes you a lot more self-conscious about how you write it (which makes you a far, far better programmer).

So that this answer is not a complete derailment, let me suggest to the OP: as soon as you've written more than one or two toy projects, find an open source project you like and start contributing to it. You probably won't find yourself out of work again.
posted by zain at 7:06 PM on June 28, 2010


1. Ignore this "will work for minimum wage" stuff. If you're going to
do it, do it hard, and have some self-respect about it! Be ambitious!

2. Ignore the people who are saying you need a degree in it to get a job.
You might need a degree to get past the HR drones, but that is not how
most people get jobs.

3. Programming is an extremely broad field. Since you want to get paid,
it makes sense to learn things that peopel will pay you for. These include:

* web development
* business automation
* (other)

- For web development, in addition to whatever programming langague you learn,
you might need CSS, JavaScript, and a general sense for how the heck the
web works!

- For business automation, scripting langagues (bash, Python, Ruby, Perl(?),
and whatever they use on windows) can be a place to start that has a
high reward curve. Along the way, you should probably learn how to
setup a server, or at least what's involved. I'd also plug for learning a
Unix here (and Mac is a Unix), but that's my bias!

4. Open source. Open Sources stuff is particularly valuable to me, when
I see it on a resume, because it shows that the candidate can 1.) work with
others, 2.) work with an existing code base 3.) understands the value of open
source.

5. There is a MeFi bias as work in these answers as well. Almost everyone
has pointed you toward Open Source / scripting langs. There is also this
whole world of Microsoft Stuff (tm), like C# and friends. There are lots
of jobs in the MS ecosystem. I don't know much about it, but it does exist.


6. So you decide to learn to program. How do you know when you're getting somewhere?

* step 0: you can code FizzBuzz: http://www.codinghorror.com/blog/archives/000781.html
If you can't get through this part within 2 days of starting (number entirely
made up!), you're probably not cut out for the field.

Then one or more of:

* project euler problems become easy http://projecteuler.net/
* you can make a working web-app in PHP, or Rails, or .NET, or Python
* you are able to answer questions on StackOverflow
* you see progress on the Programmer Competency Matrix
http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm
* You can solve our coding challenge, that we use as a screen for new hires:
http://www.renesys.com/challenge_site

7. Some specific points:

* Python is a splendid learning language. Finding Python coding jobs
is harder, except for Django jobs (the web framework). I happen to hate Django,
and find it to be terrible place for new learners to learn Python. Django
has a lot of magic appearing bits, which is confusing for new learners, and
strange, in Python-land (I'm sorry Zain!)
* Ruby/Rails is pretty hot in the web world, and might be somewhere else to
start.
* Which SICP (recommended earlier) is great, it's not the book I'd recommend
starting with. Scheme is a great language, but for a practical course,
start with a scripting language first.
* Languages each have different "vibes". While fundamentally, they all
tell the chip "add this stuff" or "put a number in memory there", they
vary on verbosity, what styles of programming they support, etc. Try a few
tutorials, and some different langs.
* StackOverflow is invaluable. Read the "subjective" tag if you want to
see some consensus on what other programmers think about this stuff.
posted by gregglind at 7:06 AM on June 29, 2010 [3 favorites]


Actually, your primary education may place you in one of the few job gluts:

Need a Job? Help Wanted at the N.Y. Philharmonic

(I realize it doesn't exactly answer the actual question, but I still thought it was relevent, considering your lead-in)
posted by timepiece at 8:17 AM on July 6, 2010


« Older How can I help my high-strung dog transition to a...   |   What's on the Inside Does Count?? Newer »
This thread is closed to new comments.