Considering that you started programming on your own as a self learner and have found success (whatever that means to you) as a programmer in life, what do you think were the reasons behind that?
Was it:
1. Formal CS or Math education alongside or later on?
2. Pure grit and consistency in completing stuff you started
3. Working in real projects at industry
4. Something else entirely
Even people who went to a university only learned from the work they did. Most of what they learned wasn't on the syllabus. So, treat everything you do as a thing you can learn from. In any textbook you pick up, do all the exercises.
The main thing I learned in engineering school and used after was that not knowing how to do a thing did not mean I could not do it.
If you have to do a thing again, do it better than last time. Maybe the result could be better, or you could get there with less wasted time. Always devote some attention to how you could be better than you are.
I think the real distinction between self-taught and formally taught comes down to sequencing and structure.
Self taught people don't always know what the next step is, whereas university or a good mentor can pull you towards the next hop by structuring the lessons into a sequence which naturally goes from a to b to c to d whereas self taught individuals sometimes swing from a to d before coming back and learning c sometimes entirely missing b.
If my first job had been at a larger company, filled with meetings and processes, I never would have built up strong confidence writing code, coming up with solutions and building things.
2. Starting out 20+ years ago, when Googling the answer wasn't possible also played a huge part. Coupled with a 1 above, it meant that the only way to solve a problem or to work out how to do something was to work through it over hours and days myself.
My early solutions to unusual problems or tech shortcomings were not always ideal, but they always worked.
Both of these helped build up confidence in my own abilities, a knowledge that there's no problem I couldn't solve, and the certainty that I was fully capable of building whatever I wanted or needed to build.
Deleted Comment
2. I built a lot of little projects, but most not to "completion". I did take 3 freelance projects for way too little money (don't recommend undercharging), and those did get to a "complete" stage.
Eventually I got a job, at which point there stops being a difference between "self-taught" or "cs grad" because an engineer is always learning / teaching themselves at work. Most of what a web dev does day to day has little to do with the topics taught in a traditional CS major. Once i was working in the industry, I used work as a chance to keep growing and adding to my toolbox. This is not something everybody does.
I used to have a sense of inferiority to CS grads, but I actually think being self-taught prepared me well for the day-to-day job of a developer.
I am self taught, then went to a boot camp and now work at a FAANG. Things that helped:
1) Making challenging projects.
2) Spending lots of time reading CS books. Ended up writing https://thecomputersciencebook.com.
3) “Obsessive curiosity”.
4) Going to a top university (for non-CS).
5) Looking like a stereotypical programmer.
So, (0) Survive, then. :-)
A solo public hobby project meant that I landed up having a kind of “portfolio” for my first actual software development job.
I was also lucky that the interviewers were cognisant of my background and the questions focused on asking me to explain my technical decisions and how I solved problems. They were essentially gauging my general software development aptitude and potential.
For the job I landed I had to learn C# (had only done PHP, ASP classic and JavaScript before), but I picked it up pretty quickly.
The other thing I realised after having the job for a while was that the fact I had seen the hobby project through to actually releasing something pretty polished was far more significant an achievement than I originally gave myself credit for as many supposedly “professional” developers haven’t achieved this.
Overall, a good bit of luck, but I was able to capitalise well on it due my being a bit of a “natural” when it comes to software development.
1. The most useful stuff I learned in school was concurrency related, things like mutex or mapreduce. I may not have looked into those skills on my own
2. I don’t do that. If I start a passion project, most of the time it either turns into a tiny Proof of concept, or I learn a lesson and quit working on it. I don’t regret that at all
3. I had a sales engineer style role as my first job- it was great to get exposure to how a variety of companies run things and I still reference that experience all the time. Now working as a developer- you learn a lot more about the trade offs of various decisions when you’ve got to maintain the thing later on, so that’s been really valuable as well
Also as another poster mentioned, starting off at a startup was basically steroids from a "practical knowledge" perspective. I got my first job as a self-taught rails dev with 1 personal site in my portfolio, and left 4 years later with experience in:
Most of those things I was introduced to in some capacity in the first 2 years honestly. Now that I've had the opportunity to go to several other companies, its clear that my willingness to get into unknown technology and figure things out the same way I was forced to at the startup is probably the biggest "super power" I have now. People in general really prefer to stay in their own lane tech wise I've found.