My Journey as a Self-Taught Programmer
blog.octachart.com
blog.octachart.com
I was rather shocked by the amount of gaps I uncovered in my understanding. Sure there were some boring classes, but developing an understanding of the whole system from the logic gate up was hugely beneficial. Being forced to work through the details of operating systems, compilers, automata, and algorithms, as well as the history, theory, and formal structures of all the major families of programming languages, gave me very nice framework to build on over the years. Even studying the academic side of software engineering was more useful than I thought it would be.
I also learned a lot more than I would have had I done my degree when I was 18. If it were more practical, I'd recommend everyone take a few years working as an apprentice programmer before immersing yourself in the theory.
There's nothing magical about a degree. You can learn everything I did by reading, watching youtube videos, and practicing. But I never would have, and I clearly didn't in nearly 10 years of working at it. Having access to professors, TAs, and a peer group studying the exact same thing you are is a huge force multiplier. The tight feedback loop kept my understanding from straying off course and let me build accurate mental models much quicker than I could on my own.
I've known many engineers who were smarter and probably better programmers than me who didn't have CS degrees. The best engineer at my current company doesn't have a CS degree, but I'm almost completely certain that if he had a stronger theoretical background, that he'd be even better.
Anyway the school I went to absorbed a smaller technical school with a Masters in Software engineering that I’m debating on getting. One prereq I’d have to take is Algorithms and Data structures and that’s a gap I’d like to fill.
Debating on Masters in SE or join an IT Consulting firm and build off the self solutions for customers. I really like building web service apis.
I also have half of a Master's from Georgia Tech, but I was only talking about undergrad above. I've been too busy to finish (married, baby, building a house, and a new job in the same year), but I can definitely recommend the online program.
Seeing some unrelated degree or a "weak" version of a CS/Engineering one (now at a business school) and a cash cow masters[0] is a red flag on a resume.
I totally agree with having a different perspective when studying vs when I was 18. I see professors as other adults and not as “the guy I’m afraid of/I want to please/I hate”. I see school as something I chose and not something that life just put in front of me.
However I wish I could find that apprenticeship programming position you mention. I have enough savings to take a pay cut and dedicate myself fully. I feel like now that I’m more mature, if someone were to put me under their wing I’d take off rather quickly, but I haven’t found that yet.
My advice to anyone that's struggling to land a job is to build a clone of a popular product from start to finish and to open-source it.
Then include that as part of your portfolio of work.
It does not have to be completely functional. Pick a product that people use daily: Chat apps, calendars, music players, etc.
"It's X-product, but in Y-tech."
You will learn, you will prove that you can ship, and you'll have something to start a conversation.
When I got into computers, my local schools were years behind and playing catchup with the industry, which was simply moving far too fast for academic life.
I had a choice of learning stuff that was already archaic in school, or getting out into the industry and developing new technology that would eventually make its way back to the hallowed halls of academia. So, I accepted an apprenticeship-style position as a lowly junior, and I worked my ass off to become as competent as the rest.
A key factor in my success, 40+ years going strong and still loving the industry, has been to always keep an eye on the horizon - new technology approaches at near light speed (metaphorically), and all it takes is for someone to say "okay, I'll try to be productive with that", actually use it productively, and it becomes a new standard.
The one thing that has always dug me out of the pickle has been to keep my focus on the user. Computerization is nothing without the user. If you can think like a user and create technology that a user would adopt, you can be a great developer.
The other key thing is, don't get distracted by your peers. Even if they have a PhD in computer science, a little elbow grease and dedication to the task can prove ones mettle above and beyond the paper-indoctrinated. The compiler doesn't care about your qualifications, and neither does the user - learn to develop with a proper quality-centric workflow, and no PhD will be able to keep up with you.
Only ever been an issue once, and even then, I was more so the one taking issue than them (had a gruelling interview only to find out at the end they hadn't read my CV by asking about O Notation and saying "you must have used it at university at some point"). They said it wasn't a problem for them, but yeh, I wasn't too happy about it (and that might've showed a bit more than I wanted).
The downside of this relaxed approach is that I know very little of theory, and I only know about something if its something I've needed to know for a task or project. That can be an issue, but nothing too bad yet to concern me
No one ever asked me about my degree. They were all interested in what I can do for them.
Judging by other comments this is pretty much the norm. All you need is passion and time.
I have emphasized my ability to ship. I have never gone to a potential employee and said "hey trust me, I can do it even though I don't have proof."
Rather: "Here is the work I've already done, and I can do the same for you, or better."
I’ve hired CS grads and they need at least a year to learn how things actually work in practice rather than what they’ve been taught. Often this involves taking the simpler path rather than the more complicated one that immediately occurs to them. This is fine, BTW.
Maybe if demand were low for programmers, degrees would matter a lot. It is a way to weed out people if you have too many applicants. But demand is high, and supply (from what I understand) is relatively low. So work on selling yourself. I imagine people's github profiles mean more than a degree does these days.
But please note: I am an American former programmer, so take what I write with a grain of salt.
I stayed at the first company for 3.5 years. During that time i also spent enough time on the then-young Stack Overflow to get 30-40k reputation. I have a solid degree in a technical but unrelated field. And i'd like to think i'm actually a decent programmer, and that this comes across in interviews. All that added up to make it pretty easy to get the next job in the normal way.
I learned by trying to build a few different things and hacking them together until it worked.
I had many late nights of watching youtube videos and reading tutorials to try to understand more complex stuff. I remember seriously questioning if I'd ever get better.
8 years later and I'm a Senior Software Engineer in an incredible team at an exciting company. It's possible!
Of course it was a distinctly one way street of communication, but fortunately my questions could almost always be answered by a closer examination of the previous pages.
Would a formal course of study help me? Perhaps. Would it help me enough to be worth the time and money? Almost certainly not.
If I had done it earlier, would it have helped me enough to be worth it? I doubt it... but maybe.
As far as how I am as a programmer, the way I turned out was rigid in my design patterns, but with I'm told unusually readable code. My biggest sin is a lack of comments and documentation. I have a set of axioms/constructs that I use over and over again to build software in many languages.
It's just dumb shit that I use like reaching for legos off the shelf. E.g. a class object owns a thread that is joined in the destructor for that object, lots of singletons, uniform indent/variable name style (Allman + PascalCase), lots of jump tables and hash maps, etc.
So far in my career it hasn't been much of a limitation, but I suspect that I'll eventually run into an employer that needs me to be a bit more flexible. As far as competency, I can create pretty much anything except math-heavy stuff like 3D engines, crypto or compression algorithms, stuff like that. I'm awful at math, and that's one of my bigger regrets.
Loved electronics and computers from some of my earliest memories. I have a fond one of waiting at radio shack to demo windows 95 on their computers and when I first discovered Linux at my local library.
I used to get all the books out and only when I got home did I know if I could use them with my computer since most were old and were old Motorola's lol. C/C++ and PHP seemed to be the easiest at the time for me to learn so those were my starting steps.
i pivoted from a traditional engineering job by automating my job, then implementing a few ml systems for my company, until i could justify a title change.
im a big believer in taking on tasks slightly outside my confort level, forcing myself to learn how to do them well.