Everything a self-taught developer shouldn't do

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 :-)

Tags

Comments

August 22nd, 2019

Hi! My background is in cinema. At least that’s what I studied in college. I then tried to get work in the industry with mixed results. Fast forward 10 years and I’m living in Paris teaching English. It was there that software engineering peeked my interest. You see, I was teaching English to a class of students who were learning programming. Further, they were coming from non CS backgrounds and taking their carrier path in a completely new direction. I started to believe that a 40 year old guy like me could do the same. I decided I would get a masters in CS and then try to get a job. I soon found out that going from a film bachelors to a CA masters is no easy task. Now I’m taking community college C++ and Python classes to build my knowledge and reach a level as to fulfill prerequisites to get into a masters program. So far I’ve taken one C++ class and one Python class. I’m currently taking my next C++ class and plan to take at least one more to get to an advanced level.

My question for you is 1. Do you have any advice for those who want to change their careers to software engineering in their 40s? I want to bring my film knowledge to software engineering to maybe work in the AI/creative space. 2. Is there value for for someone who has domain knowledge? 3. I know there is ageism in the programming industry. How much of an uphill climb am i facing?

I really liked your article. Any advice would be appreciated!!

August 22nd, 2019

You have taken a great first step and taken some CS classes. The problem I see in software engineering, is that someone does like the author and reads a book and writes a few simple program and all of a sudden they are a software engineer. There is a big step between a computer programmer and a software engineer. Programmers know syntax and can implement algorithms. Engineers understand why one construct is better than another, what implications the target hardware have on the programming style, why one language may be better than another for a particular application.
So, is your goal to be a programmer or an engineer? If you want to be an engineer, and actually claim the title, the only way is with a 4 yr ABET accredited degree. And in most states taking a state issued exam. Plenty claim the title without doing either, but there are not really engineers. Engineering has allowed the title to be diluted, and it’s unfortunate, but it is what it is. It would be no different than someone taking a few first aid classes and claiming to be a doctor, but everyone knows that’s not ok. For some reason engineering doesn’t have the same clout.
1a) Take classes or do research on languages. Just pick one. Doesn’t really matter. Once you know one language well, others are easy to learn. The basic constructs don’t change, just the specific syntax changes on how to implement them.
1b) Take classes or research on computer systems. Understand how the software interacts with the hardware. Be it a PC system or an embedded system. There is a significant difference in programming for a PC (application progamming) vs embedded (firmware). Neither is better than the other, they both have their place, but the style and considerations are worlds apart.
1c) Understand cybersecurity. Not to make a sales pitch, but look up Cybrary. They are a free online class model focusing on cybersecurity. They are great. With everything interconnected now, not understanding how security fits in the puzzle is foolish.
2) Absolutely! Understanding the domain and how end users in that domain think is invaluable. Leverage that.
3) It really depends on where you are and what you want to do. If you are passionate about learning and really understanding the field your age won’t matter too much. Let your skills talk for you.

Good luck to you. It’s an exciting and widely varied field. Opportunities abound.

August 22nd, 2019

@eyeflap I agree with a lot of what @cyberzl1 has written.

  1. I don’t think what you should study and work on depends on your age at all. Learn the fundamentals (Inside the Machine is a great book for that), then learn a language with manual memory management C/C++. Alongside you should learn about software design and architecture. You should be able to answer questions like ‘How does malloc work?’, ‘What happens when I make a web request’, ‘Explain a distributed system’
  2. Since you have previous domain knowledge you should ask yourself how you want to apply your domain knowledge. There are a lot of options from working on compute graphics systems to companies like Wistia that provide video hosting and services. So figure out where you see yourself and learn and build everything you can that is relevant
  3. Ageism is unfortunately a thing. But if you have the skills no one can take that away from you. So just focus on yourself and be as prolific as possible in what you learn and build

Good luck my friend

August 23rd, 2019

This is probably the most genuine stuff I read about how a developer developed into a developer. lol. That was repetitive.

I’ll bookmark this so that if someone ever asks me how to become a developer, I’ll shoot across this link to them.

August 25th, 2019

Hi,
Thanks for sharing about your journey becoming a developer with such probity. I think if you have the zeal towards learning/becoming anything, you will achieve that no matter what the circumstances.

Awesome man! Cheers.

August 30th, 2019

I’ve been in the field for decades. Through many roles, mostly programming around operations teams for past 15 years. Been around many self taught devs as well as those that came with fresh degrees in their pocket. While I would say that a degree gives you a leg up on that first job, theory wise and beginning salary, still a lot to learn. Having a degree in software engineering doesn’t make someone a software engineer.

Much of that comes from the long years of experience mentioned. Learning the craft and understanding not just the theory but also how to troubleshoot your’s or someone else’s Code when something blows up in production. How to build testing suites, running code through performance, integration with other applications, list goes on. The old 10,000 hour rule to become an expert still applies.

Interesting to see an inexperienced dev, frustrated because their code that “should” work keeps failing. After decades of coding, my code still fails at times, then the fun begins.

Topics of interest