Over a decade ago I completely changed the trajectory of my life from becoming a lawyer to becoming a programmer. I learned from a C++ book then made some pathetic iOS apps for about 4-5 months. I then moved to Silicon Valley to start my career. I'm sure you're reading this thinking 'what a genius!', but sadly the truth is far from that. I'm definitely proud of what I've accomplished but often think about the missteps I made along the way and continue to make to this day.
Rather than list some bullet points with my ten commandments of self-taught programming, I'll work my lessons into the story of my career. That way even if you don't learn anything you'll at least be entertained with some poor saps story.
The C++ book I started with was pretty good and my focus and attention to the material was also initially there. I would read the content and do the exercises for a couple hours a day. At one point the index in a for-loop confused me and luckily I had one developer friend I spoke with on the phone who cleared it up. Then came the harder stuff, and boy is C++ full of hard stuff. When asking my developer friend about pointers he said 'Oh, I've never used a pointer at work, don't worry about that'. Then came templates and classes and soon enough I was skimming chapters and looking for greener pastures. So I moved on to iOS applications. Following the much more complete tutorials and guides I was able to create a basic math game and a grocery app. After coming up with both I couldn't tell you the first thing about memory management in Objective-C, the MVC Paradigm, or how CoreData actually works. I could code but I hardly even had superficial knowledge. Make sure you know how to learn. Don't rush your learning. Master the fundamentals, they will be with you forever.
About 4-5 months in I started to send my resume out and interview for positions in southern California. Surprisingly I was actually getting responses. I had an interview one day where I chit chatted with the interviewer for a few mins then he began the interview. 'Ok, can you tell me what Object Oriented Programming is?' he asked, or something like that. I hung up. He called back. I didn't pick up. In my mind I was thinking, 'Is he serious? that's a question for more seasoned programmers. Can't he see I have only 4 months of learning?'. I looked back at my resume and saw that for C++ experience I had stated 3 years worth of experience. Oops. In another interview a few weeks later I was asked about the Model-View-Controller paradigm in iOS. This time I simply flushed my phone down the toilet. No, I'm kidding. I gave a response, or I came up with something that I knew was completely wrong. From the very outset of my career I become nervous about interviews and saw them as a huge undertaking. I denied myself opportunities out of a fear of failing an interview. Interviews are hard if you don't practice. The better prepared you are the better job opportunities you'll get.
Once I got my first job developing prototype apps for a small startup that was in the midst of pivoting I felt I had made it. My career was set and on cruise control. That 45k I was making would surely sustain me in the short term. So I relaxed. It was utterly foolish to think that 4-5 months of half-hearted learning could be the platform for my career. Looking back on that time it was perfect to learn, learn and learn. Instead, I produced mediocre code, working at a mediocre company, living a mediocre life. There was nothing stopping me from becoming an expert in iOS or Android or anything else. Hell, I could have just used the time to master interview questions. When you're starting out go above and beyond to learn, code and build things.
I then left my first job after about a year to dabble in startups, because that's what you're supposed to do as a young person in Silicon Valley. The startup went nowhere and again it was me trying to get the most done while being the most superficial as possible. I simply didn't have the gumption or the interest to go deep and tackle the hard problems. Could I be successful with that startup idea now? Maybe, but I know for certain I would learn a lot more and work a lot harder than I did then. Tackle hard problems head on. Everything seems difficult at first but if you approach it one small piece at a time you'll surprise yourself how far you can go.
From there my career continued to a startup doing Rails. Then I moved to a bigger company where I felt like I could call myself a proper 'Software Engineer'. Now I work at a unicorn as a core developer of a database system. At the beginning of my career I felt like I had cheated the system by getting a job without spending 4 years in college. In hindsight, it took me 8 or so years to feel like a proper software engineer. So, in some ways I would have been better off going back to school. It took me 8 years because I believe for a long time I lacked a quality which distinguished all the great engineers I came across, curiosity. I lacked the constant impetus to figure out how things actually work and to have mastery over my craft. The times I've been curious the payoff has been huge and it has often come in unexpected ways. Be ever curious. Figuring out the details about your company's codebase or how a tool works will always benefit you.
Becoming a self-taught developer is a tough road as is going through a bootcamp without any previous programming background. In all honesty, if you have the time and can afford school you should go. But if that isn't an option for you then I hope my story can help guide you.
Please feel free to reach out to me for advice :-)