Contacts really help too
Contacts are the way to go. Make some friends and help around.
I have helped run the high school computer lab, which has landed me a job with the teacher’s company. When my peers and school pals grow old enough, they have started supplying me with opportunities. And I try to do the same thing for them.
I’ve only done two jobs without being recommended by a contact, and they were respectively Tim Hortons and being a guide for tree top adventures (ziplines and the likes).
Especially when you have problems wearing glasses. ;-)
Odd and end .NET contracts when I could get them (not often), lot of temp work at factories, warehouses until I sorted it out. Didn’t get it fully kicked off until I moved to NYC and took a $40k salary dev job in Manhattan in 2008/2009.
I think I got hired because I was babbling excitedly about some reverse engineering I’d done in the past. Lots of learning on the job. Changed jobs about 13-14 months later, income nearly tripled.
Still don’t have a degree. You should probably expect to have to move to a major (as in, top 3-5) city in order to get started without a degree as much of the rest of the country is going to need cert to hire you unless you find a friendly SMB or startup.
I think it really depends on the company. My employer hires everyone from CS Ph.D.s to people with humanities degrees. It probably is pretty hard if you have no degree at all, though, because you’ll have to explain why and what you did instead. Work on OSS is also more important if you don’t have a CS degree. But, as has apparently been your experience, once you have work history nobody cares about the degree anyway outside of a few highly specific jobs.
It’s the same way anyone gets any job: convince someone that you can do the work they need done. There’s no one single answer, any of the following can work:
Have a Computer Science degree.
Get a referral from a mutual acquaintance that can vouch for you.
Have a work history that implies proficiency at the skills needed to do the job.
Have some certifications that suggest competency.
Have a portfolio of similar work to the job that needs to be done.
Be knowledgeable and persuasive enough to be convincing, without any portfolio.
Find a client/employer that has low expectations.
The specifics are different for everyone, but the common thread is they convinced someone to give them a job. It’s not about spending 2000 hours becoming the best programmer possible (although that’s a valiant goal in and of itself), it’s about selling your effort and expertise to someone willing to pay for it.
I started writing code around 13 (34 now), didn’t REALLY start until 18/19 in PHP in design industry. I lived in a major city (Toronto) and basically undervalued my skills in order to get into positions that would expose me to things that I felt I needed to be exposed to (not necessarily programming specific skills but being in different types of organisations).
I really didn’t know what I wanted to do at the beginning, but I had a fairly varied circle of friends, and everyone knew that I was spending my free time just building things, even if none of them would come to anything I would talk to my friends about it (having to explain in layman terms a lot of the time). That did a few things for me:
That led to small on the side jobs building web sites, a few systems applications, etc… smaller stuff, but it built a list of projects that I could list in my resume that looked good on paper and “legitimised” the skills I was building. You quickly learn even if a project “fails” it’s still a win, because you probably learned even a few things along the way that you didn’t when you started.
As the list built I was still applying for jobs at different places, first in design, then in a government systems company doing web stuff in PHP, then into .NET, PHP, Visual Basic, system, C at an accountancy, from there to financial systems by which point my resume was out there floating around quite a bit and got picked up by humanitarian projects which I’m still in and allows me to flex my skills in ways that I couldn’t have in previous jobs (Python, C++, C, Java, Systems, Desktop, Mobile, Web, networking, custom protocols, client-side, the whole stack).
At certain points I came across CS graduates who were pulled into Junior jobs, and I spent a lot of time evangelising “just building things”. But you have to be careful about it, some people really are happy “where they are” and some people take a bit of offense when you attempt to do what feels to you like broadening their horizons, to them it may feel like an attack on something that they have invested considerable time and effort into and it’s true, if you’ve spent years doing .NET and someone comes along and tells you you should be using Java and here’s why, that can feel a bit like a bit of an attack on your personal choices/preferences. And there’s a lot to be said for being really really good at something, you can be a polyglot and make good money, and you can be a highly prized specialist in a few core things and make pretty good money and STILL learn a lot and get exposed to new things on a daily basis. Both mind sets are a legitimate way to build a career.
Al that being said, at 34, there are some fundamentals that I still find i’m missing some times, things that I need to learn or things that in the lines of work I’ve been in, I haven’t been exposed to that a CS degree would have given me. But that’s sort of part of the allure of it all. At 34, there’s still lots of discoveries to be made, lots of Aha! moments I get exposed to which keeps me building.
The majority of hirers will not care about degrees if you show equivalent experience, not even necessarily in the problem area, but at least in the languages they specifically need. A good employer will prize someone who has a good base level of demonstrable experience and is eager and willing to put in the time to learn (this is at least my experience), if you speak passionately about the things you’ve built, whether big or small, it shows. This doesn’t mean you should go looking for jobs outside of the languages you prefer/like, it just means that there’s pretty much always growth and more learning to do in the software stack that you’ve invested your time in. I spent minimal time in .NET over the years, but the exposure taught me quite a lot about what I do and don’t like and how to accomplish certain things. That experience is invaluable the more and more your accumulate it, there were guys in .NET that could do things then that just felt like magic to me, and they built those skills by being committed to the MS stack.
I offered to work at a company (NOT a startup) for free until I contributed to the codebase. It took a month, then I worked for $8/hr for two months, then came on full-time after that.
That was 6.5 years ago and every job I’ve had since then has been through referrals. Any attempts I’ve made with recruiters or online freelancer sites have turned up nothing for me, so I don’t bother with them any more and instead lean on my contacts.
In 2002, a teacher set me up as a volunteer intern for an alumnus working at a lefty political nonprofit. He wasn’t entirely sure I was useful to have around, but their primary tech guy was happy enough, and now tech guy’s my boss and I’m working at a contractor that works for organizations in that field. At the time, I was terrible at writing maintainable code, but very personally invested in the organization and managed to get things out given very rough specs and sometimes questionable timelines.
The linked article could perhaps be more helpful in talking about the job-getting part, not the skill-getting part. I don’t have much of an idea what I’d’ve done were it not for that connection (law or public health, maybe; those were grad schools I considered). In a way it’s worse to idealize skill-building with great prose if you’re not going to offer people something that helps them convert that into a job.
Over on HN a post like ‘how did folks learn coding without StackOverflow?’ is on the front page. StackOverflow wasn’t exactly how I learned (documentation, imitation, and trial and error is closer), but thinking about it, something that’s changed more than how you learn to program is how you learn to get better. People share experiences in conference talks and blog posts now. There’s also a lot of noise or stuff written try and build a reputation; the most interesting stuff to me doesn’t promise to change everything, comes from folks with experience, and often talks about the problems they ran into. Also, lots more projects expose their development processes (code, code reviews, guides, etc.), and you can learn from that.
You don’t really build up many kinds of wisdom from just working by yourself, because a bunch of feedback you get from really deploying and working with others, and even then some of the more complicated lessons will only come slowly.
I did a course at a community college as I wasn’t having any luck getting a job straight out of year 12. Unfortunately I think that was what got me my first programming job even though I hadn’t actually learned anything in those two years. It looked good on paper though. My first job was in PHP which was a bit average. Then I got my second job in C++ based on my side projects which happened to line up with what the company was developing. Then I got my third job in C++ at a giant company based on the 10 years of experience at the second company and my github account which was a bit more diverse by that point.
So basically you have to get your foot in the door somehow, get some sort of certificate, or have a wide variety of projects, or just one niche one that is exactly what you want to do, or do a job or series of jobs that are just “ok” to get some experience to “prove yourself”. Good luck!
I’m mostly self-taught, with some mentorship. I was “good with computers”, but didn’t know a variable from a function at age 27.
I got a job doing tech support, and my coworkers were passing around paper troubleshooting instructions, so on my own initiative, I built a simple HTML-only intranet site as a slight improvement. I kept thinking of more features that would be useful, and kept getting advice from a friend, reading books, and building them. Eventually the site had server-side code, a database, the ability to send email, logins, access control, and more. My employer was tolerant of my development work at first and grew more supportive over time, but never to the point that I could code full-time; my phone could always ring with a tech support issue.
By the time I left that job, I had enough experience to land a full-time junior developer job. I showed that I’d helped the business materially, and gave specific examples of good development practices I’d learned. It’s been easy to find jobs since then.
My advice: do real, useful work for someone, for cheap or free if necessary. That initial experience is the hardest to get. The more experience you get, the more selective you can be about opportunities.
I dropped out of school and the best paying job I could get was dogsbody for the department of High Energy Physics. I had had some Unix experience earlier, so I soon moved up to assistant dogsbody to the Unix systems admin/programmer and, as this was 1993, I was in the right place at the right time. I am aware that the happenstance is unlikely to be replicable.