Ask HN: No formal software education – is there hope for me?
In 2015 at the age of 21 I got a Mechanical Engineering bachelor's degree. Afterwards I worked for two years at a place I didn't like very much and I learned some Python. Then, there was an opening at the school I graduated from for an assistant instructor and I took it. I then went on to teach in courses such as 3d modelling, FEA and transducers and electrical prototyping. I have great fun with it and learn a tonne as well as I get to interact with lots of smart and ambitious students.
So why leave a job like that?
It's mainly the pay but I also sort of fell in love with software this year. I started learning JavaScript last year, learned about databases, servers, React and Linux stuff. Loads of really exciting fun stuff!
So now I don't know how to transition to a software role. Many places I apply to want people who have experience in software development or they want to hire a junior for some super low pay. I can't put the words "software developer" on my resume but I have written a lot of programs for my classes and in hobby projects.
It feels like nobody looks at your GitHub profile though. I've got lots of projects I've done in the last year. But maybe that's just the grind? Just need to apply to enough places?
166 comments
[ 3.0 ms ] story [ 234 ms ] threadOr maybe write a lot of public code. This is highly risky, though. Few places consider those credentials.
To be honest, he just has to get past the L1 filter. Once he's in the stage where he's interviewing the predominant dominator of whether he'll get the job is interview performance not resumes.
So yeah, I've changed my mind. Probably well worth searching first before falling back. I guess in my head I'd assumed he'd already searched unsuccessfully but he never mentions that.
> or they want to hire a junior for some super low pay
probably still better than what you were making in another field.
get a recommendation for a recruiter from another developer in your city.
Has never detectably held me back and I very rarely even got questions about it. It was entirely "can you code? let's talk about it to be sure..." [just like anyone else]
I had to explain how to use std::function and lambdas to a fairly high level employee once (we were using C++). A Maths graduate (a PhD, actually). Problem? No, he was really good otherwise, and he got how it works in less than an hour. It is not complicated compared to what he normally did, he just happened to never need to use it in the past.
Needless to say he wouldn't know how to do find-union or how to write a compiler or write a formal spec for a programming language or how to compute GCD with C++ metaprogramming or any other "theoretical" fun things you would learn before you get a CS degree. It's not that important.
I did 5 years of elec hardware design and then got a job as a software dev. Been doing it now for 7+ years.
My advice, look for a scale-up. A business with a proven product market fit, but still looking after the pennies. The one I found was willing to take the risk of a good find because the “formal education” lot were more expensive. I’m reasonably sure my first boss would back me up in saying that the risk was well worth it’s. Apply, show them real world work, I’m sure you will go far. Engineering mindset is actually a real skill, most formal education backgrounds I talk to don’t think of things like failure modes or really understand the importance of good requirements like mech/elec engineering I’ve met.
Also, email me whenever to talk chris at matheson dot it
Hire all of them.
Do you just have code in Github or do you have an app running somewhere that people can actually interact with as well as the code for it on Github? If you don't have something live, push something live. Use Heroku or some other simple hosting solution if you want to get it live quickly.
You can also try to get involved with an existing substantial open source project. Try fixing a bug or adding a feature. Get advice from the project maintainers and work from there. That's as close as you can get to work experience of collaborating with a team. Get something merged to an OS project. And then when you interview you can talk about that experience so the company knows you can work with others to get production code shipped. You might have to log into IRC or Discord or send a bunch of emails to get started with the kind of direct communication necessary to do this. But learning how to take that kind of initiative is valuable in a company setting as well. If you do good work those open source maintainers could even become leads or references to help you find a first dev job.
Lots of people change careers into software development with less technical backgrounds than yours (I've met former actors, artists, lit majors...). You have much more than hope, if you're persistent you will find the job you're looking for, it just takes some hustle.
[incoming potentially helpful, very self-indulgent summary of what that looked like for me]
I was one of those teenagers who always wanted to be a web dev but ended up majoring in biochem because I felt that, while both were interesting to me, self-teaching web dev was working for me and it's not easy to get your hands on centrifuges.
I made sure that my masters (experimental medicine) would encorporate wet lab work, as well as a big machine learning part (since that got me closer to code) and wound-up falling in love. After I submitted my thesis, I applied on a lark as an ML dev after I saw an ad on HN for an oppening at large-ish software company. This was a scary time and I was sure I wouldn't get it. The hiring manager had a PhD in CS, it was a Scala job and I never wrote a line of it, and I had a hard biology background. But I aced the take-home technical they gave me and snagged the job.
I'm now doing my PhD in Electrical Engineering to get that formal background in ML and could promise you I never knew exactly how I would make this diagonal move, but always felt it was likely.
[how I see that drawn out anecdote to apply to your case]
You have a background in 3D modelling and FEA, and I would suspect (though may be wrong) that there are plenty of positions that are looking for tools development for e.g. Engineering or Animation (the Autodesks of the world). Do you think that's something you'd be interested in/can learn? You seem to be a self-starter, which is key in this sort of thing.
Include in your search positions that don't have developer in the word but are technical roles in e.g. 3D modelling that would require you or benefit from you coding now and then.
Finally, the GitHub stuff is largely ignored from my understanding. It's great to give back to the community, you can meet great people (some of them who hire people), but short of that it isn't really an application boost.
Best of luck!
I think there are a number of factors that cause this:
1) Even juniors get paid quite a bit compared to many other professions. 2) Software engineers have an uncanny ability to be worse than useless. A bad software engineer means you need several other software engineers to clean up their mistakes. 3) Given the above points, generally speaking, the companies that actually can afford to take a chance on someone without a proven track record are also the ones that don't need to. FAANG companies can attract top talent using their brand and deep pockets.
I think 2) is somewhat misguided, though. The ones making terrible, costly decisions probably aren't junior programmers anyway.
Jeff Atwood has a really good post that I think is relevant: https://blog.codinghorror.com/nobody-hates-software-more-tha...
Re: your post in particular:
> I can't put the words "software developer" on my resume but I have written a lot of programs for my classes and in hobby projects.
This can certainly go on your resume, just don't misrepresent it. A common pattern I've seen is for folks to have a "Projects" section on their resume that mostly takes the place of what they would list as their relevant employment. If people don't look at your github, put your github where they do look.
This also sounds like a problem with incompetent management. If an engineer can spend so much time building bad code that it takes multiple engineers to clean it up, it means that there was a long history of ineffective code reviews and inadequate training (e.g., nobody bothered to give the engineer an overview of the architecture of the system they were hired to work on).
And if the engineer is truly incompetent, it's also management's failure that the employee wasn't let go before they could create that amount of damage. Not to mention that management's interview process wasn't good enough to detect glaring incompetence.
If management takes their jobs seriously, the risks of a bad hiring decision can be minimized to the point where it's not that risky to hire someone without a CS degree or inside connections.
In some places it's not that easy to get rid of people. I know there's someone at my current workplace who I secretly wish was let go, but I know that the only realistic option I have is find a new job myself.
Is that really true though. It seems to be one of the only, if not the only, high pay fields someone who never went to / completed school can enter.
You are going to need to sell it though, you need a good looking website highlighting all your projects, link to github and keep your github clean.
The way I started was doing freelance projects until you're confident enough to move into enterprise ( somewhat ironic because freelance work typically involves more understanding of every part of the system ... and better skills ).
Do projects in the language/technologies that you want to work in and highlight those.
Looking back now I can see why it was hard for me to break in. The factors holding me back, in descending order, were:
1) No industry connections 2) No relevant experience (.NET didn't count in SF at the time) 3) Wasn't really "plugged in" to the prevailing tech culture 4) Nobody had heard of my university. 5) Frankly I wasn't very good.
5 almost doesn't count; very few people are any good when they start their career.
The single most significant factor (the dominating factor, really) was simply a lack of connections. Nearly every significant job I've ever had is a result of a referral from a friend, and this is true for basically everyone that I know. I have coworkers now who not only have no CS degree, they just don't have _any_ degree, and we happily hired them on reference.
I guess my point is that yes, it'll be tough for you at first. Not having those magic "CS" letters will definitely hinder you. That said, it's not an impermeable barrier. The best thing you could do for your future is make friends in the industry. The second-best thing (in my opinion, others may not agree) is to participate in a well-managed Open-Source project. Not to burnish your resume, but to learn the processes people use to collaborate - source control, issue trackers, code review practices. That stuff doesn't get taught in CS programs either, but it's essential knowledge. Having it will help get your foot in the door.
Skills are important, to be sure - once you get the interview you still need to be able to successfully sell yourself - but IMO getting the interview is the hardest part when you're new.
If you really want to do this though, you might want to buckle down for a couple of less than glamorous years. You can get into the software industry without qualifications, but you won't get in at the top with your first gig. You're gonna have to work your way there.
Some advise: keep doing hobby projects, keep learning new stuff constantly, and if you have a choice, pick the jobs that will serve to evolve your skills, not the jobs that pay the most.
It's been ages since anyone even asked me about my education, the only thing that matters is my current and previous assignment, and that I can demonstrate logical thinking on the interviews.
I'll add as a disclaimer that YMMV, we're currently in difficult times, and it affects even software Devs. I also don't know where you're at geographically, here in Sweden I'd go so far as to say that if you can land a software job before going to collage/university doing it is a waste of time, as you'll learn far more relevant stuff way faster while working. But I hear in the States that diploma is more important, so I can't be sure.
Believe in yourself and don't give up! You can do it!
I only had an Economics degree with no formal IT education and now I had a software dev job.
Like you, I was self-taught and only had built some personal projects, but it was enough to land me my first IT job in a shitty startup. And then you can have easier time finding other software dev roles.
But, I’ve heard of people from other countries talk about getting “certified” in a particular coding language or technology. I can’t tell if that was just a scam, or things like that have some weight in other parts of the world.
I’m sure people here have worked for a small company led by some sales guy who didn’t know what he was doing and would expect engineers to have degrees and certifications. I wonder if in other parts of the world, where those with knowledge of running a modern software engineering organization haven’t risen into leadership roles yet, it’s impossible to become a SWE without a whole bunch of diplomas.
Grew up doing web dev "as a hobby", basically self taught since middle-school. It was my passion, but never thought of pursuing it as a career or anything. Went to college, got a EE degree. Partly because parents thought it was generalized and better able to land me a job out of college. I partly agreed. Went to work at for gov't contractor and hated it. I would still code on the side when I got home. Left after a year and had my mini quarter life crisis lol. Decided to apply for a few jobs around me with zero experience in the industry.
2 interviews stuck out to me. First one was an a small agency. They gave me a coding test and I realized that I know a lot more than I thought I did and shouldn't imposter syndrome myself as much. Second one was a small startup. They saw a lot of apps I built on the side and were intrigued which netted me that offer. Decided to go for the startup and that experience really solidified my confidence that I could actually do this.
IMO, your engineering degree will help you get a foot in the door at least. ME isn't a piece of cake and you've proven yourself competent in that regard. Your lack of "formal" education might be a hindrance to some, but I think it demonstrates the ability to self start and figure shit out and most importantly to just build stuff. Just keep grinding until you find the opportunities; you might have to take a step 'sideways" to get them.
So it's totally doable.
> Many places I apply to want people who have experience in software development or they want to hire a junior for some super low pay
The truth of it is that you'll probably have to take a junior job first. Even with a great GitHub profile, there is no easy way to know if you can actually do it, since there is no way to really know how much of your Github profile you actually created.
The good news is that if you really are good, you'll get promoted quickly (or be able to quickly move to a more senior role elsewhere). But sadly, you'll probably have to suffer at least a year in a junior role to "prove yourself".
Can you elaborate on some of these areas? Were there common patterns you have seen? Asking as a mostly self-taught engineer always looking to uncover unknown unknowns in my knowledge.
Oftentimes they would know the topic intrinsically (like a search algorithm) but not know it's name or the typical use cases.
But like I said, usually by the next day they would be an expert.
And bloom filters are super cool, you should read up on them. You'll find an interesting set of problems that can be solved with them. The key to remember is that if you ask a bloom filter if something is in the set, and it says no, you are guaranteed that the answer is correct, and if it says yes, it may be there, but it's super fast at giving a no answer.
So if you expect that the answer will be no most of the time, a bloom filter may be a good data structure.
Here is one place it comes up: on reddit (or HN) when you load a page it shows you all the stuff you've already voted on. There are usually many things you could have voted on, and chances are you haven't voted on a lot of them. So when you ask "did user X vote on item Y", the answer is usually no. Storing the votes in Cassandra, which uses a bloom filter, makes answering that query super fast.
In fact, it smells to me a lot like the mentality of certain people at said companies who liked hazing interviewees by testing esoteric knowledge (e.g. twisted DP problems, reservoir sampling) instead of talent and potential. A part of me would have loved to see those companies implement a policy of using those interview questions on other employees, like a kind of 'random drug testing'. I imagine many would have been humbled rather quickly by such a process.
- I didn't know any Git command
- I was very uncomfortable working on a terminal actually (I remembering googling what a "terminal" was at the beginning of my studies, by the time I got my first job, I was only capable of following step-by-step tutorials for anything CLI related)
- I had no idea what "cURL" meant, a senior dev told me to send him the "cURL", saying that just had to "copy as cURL in the devtools" and I had no idea what to do it. When he got to my desk I was googling it. He was nice enough to have a discreet smile and teach what I had to do.
- Btw, I was completely unaware what I could do with Chrome devtools too. About as uncomfortable as with CLI
These are just the ones that I actually noticed and remember now, for sure there are others that I never noticed or forgot.
I personally wouldn't have immediately gotten "send me the cURL" if that was said to me personally, though I know the menu option in question. (It would help if it was a more distinctive word.)
Don't overestimate the average fresh CS grad.
I was expecting more HN like answer like the big O notation, data structures and design, algorithms related stuff since those are the holes you should find in someone without academic background as most web tutorials never go into that and neither the bootcamp courses though I have seen a few that do.
Something like, the guy didn't even know his code was O(n^2) or couldn't even implement dijkstra.
Your experience speaks more of academic settings than bootcamps. Just an observation.
It might be possible that it is a sum of both holes even
A big one: that it's usually a really good idea to say, "I don't know what that means." Being honest when you don't know what someone is talking about is probably the single biggest 'hack' a junior engineer can do to level up faster (provided they have a supportive team). A lot of junior engineers don't know what someone is telling them and end up burning a lot of time googling what could be taught in a few seconds. Any decent senior engineer will understand that you don't know very much and you're going to need to be taught. Exceptional engineers will be able to read you and see that you're confused and help you, but you can't count on having one of those on your team, so you'll have to let them know when you don't understand things.
For more experienced engineers without formal training, by and large the biggest way I've seen they can level up is learning about data structures and algorithms and how the two concepts play with one another. We mostly deal with arrays and hashes in our day to day, but understanding graphs, stacks, queues, linked lists and being aware of more exotic but usable data structures like tries and bloom filters (for example) is a great way to round out your coding skills. Understanding the read and write time of certain data structures and the algorithms that go with them and how you can sometimes trade space for runtime efficiency (e.g. copy your array into a hash/dict/object that is keyed on what you're checking on for fast look ups in a loop) or vice versa will help you write better, more performant code with intent.
Another big sleeper skill you can fill in is learning programming language design. It was a really tedious subject in school that I hated, but studying programming languages and how you take a C expression and turn it into an instruction the computer could understand introduced me to a ton of concepts. I don't necessarily directly use them regularly, but they inform my development style - tokenizing, grammars, context, tail recursion, scoping, etc. I'm really glad I spent the time to learn that subject, even though it was really hard at the time.
The other thing I had the benefit of was a formal math education. I don't necessarily use calculus every day, but understanding the idea of a derivative or an integral is very useful in software engineering. A graph of metrics for instance - taking the derivative of a graph that changes frequently will tell you the rate of change - understanding how this works and why it's important helps you make smart decisions, and also gives you a seat at the table when you get into the upper levels of engineering.
As math, I also have a pure math background, with an undergrad degree and some graduate study. Other than having that certain rigor of thought, and a problem solving mentality, I haven't really found a lot of use for it specifically in my work. For example, I probably know a lot more about graphs than any of my colleagues, because I took several graduate level courses in graph theory, but, in actual code, not much of that matters as long as you can recognize when a problem is a graph problem and find the correct algorithm (usually some variant of BFS or DFS). Every so often, I know some random fact that helps with a problem that comes up at work due to that math background, but it's not frequent. The last one I remember is that we needed a good way to compute the area of an arbitrary polygon.
Other than that, I can't think of much that I've used in work that was directly applicable. I wouldn't even say the derivative/integral concept is specific to a math background, since a lot of STEM majors require at least a 2 semester calc sequence. CS typically requires linear algebra. Stuff beyond that doesn't seem to get a lot of use, unless you're in the exact right specific field (e.g. writing graphics or other math-heavy software) from what I've seen.
My guess here is that the selection bias arises because self-taught programmers that get to the point of applying for professional SWE roles have probably put significant amounts of work into learning how to program. I can actually go one better with this though: one of the better junior engineers I've worked with didn't even have a high school diploma.
Full disclosure: I am also a mostly self-taught programmer, so I may be biased here, as well. ;)
> I can't put the words "software developer" on my resume
> I have written a lot of programs for my classes and in hobby projects.
It sounds like you might be selling yourself short. You might not have experience as a professional software developer, but you have experience developing software nonetheless.
Don't forget that your resume is an advertisement. You should absolutely highlight the experience and knowledge that is relevant to the position you want. People spend very little time looking at resumes, if your knowledge of databases/servers/react/linux/python isn't immediately clear in the first 6 seconds of reading, your resume will likely be discarded.
You can absolutely get a job with Software Developer on your resume, but the first one is the hardest. I ended applying for 3-5 jobs per day until I got hired. I applied for the job that hired me over a week in. don't be discouraged, and remember it's a numbers game for sure