The fact is, fourteen years ago I was an angry customer service agent.
I didn't have (and still don't have) a CS degree.
Don't get me wrong, I was good at my job. My managers and coworkers consistently praised me because I did a good job. I was underpaid, but all customer service agents are underpaid. (Keep that in mind next time you get frustrated with one.) However, I hated it. No raise was enough, no reward was enough. No matter what happened I was dissatisfied. I couldn't even really put my finger on why I was angry. I just knew that this job wasn't enough. There had to be more.
I began reading a lot of developer blogs. Not the technical articles, but more like this article you're reading now. I wanted to know - could I do this? Was this an escape hatch? Seemed like lots of people were taking this plunge. Some were doing bootcamps. Others were trying to teach themselves using online resources. Still others were going back to school at a community college or similar. I knew that I wouldn't be able to do any of those things. I was poor, how could I go back to school and also have a job and still have money to eat? I didn't see a way.
I convinced myself that it was impossible and continued in my customer service career for five more years.
Then, one day, something changed. I'd successfully quit smoking cigarrettes, and realized I could apply the same discipline to do anything I wanted. I resolved to learn on my own. Reading dev blogs, I'd gleaned a little bit of wisdom from people who had done the same. It was similar to the advice that writers give each other.
- Make a plan and stick to it
- Apply what you learn to real life situations
- Avoid distractions
- Schedule a regular time everyday and keep showing up
- Don't give up if you screw up. Keep going
I chose to start with the /r/learnprogramming subreddit. I figured I should lean on an existing proven plan rather than try to roll my own. I found a tutorial series that was recommended on that site. It was called Higher Computing for Everyone and it taught beginners to code in C. I made it through all the available lessons, learning about pointers, structs, loops and similar structures.
Note: Higher Computing for Everyone has long since been abandoned and is no longer available.
I worked on learning from that site for about a year. I felt like I understood the material well, but new content was frustratingly slow to release. Also, I was having a difficult time understanding How I could apply what I learned to improve my situation. I wanted something I could use on the job so I could automate pieces of it. I needed to "Apply what I learned to real life".
Luckily, around that same time, I discovered AutoHotKey a windows scripting language, and I focused my efforts around learning this language. There was no tutorial series at that time, so I had to dive into the documentation to learn it. It had major advantages in that I could start using the language to do things for my job right away and I could compile the scripts into executables and share them with my coworkers and friends. (I got in trouble for this eventually - please follow your organization's policies).
If you're in a position to write scripts in Windows at work, even if it's VBA in Excel, I highly recommend it!
But this ultimately left me unsatisfied. I was making changes but I wasn't learning what I really needed to know. I wasn't getting to my goal of being a developer. I felt like the hero of my department but I also pissed off some HR people while doing it. (This is now a fun story to tell at parties, but at the time I worried I could be fired.) I needed a better plan.
- It had a thoughtful and pragmatic syllabus.
- It focused on programming skills that were transferable to other languages.
- It addressed tooling and other obstacles that frustrate beginners.
- It took a wholeistic approach to learning - keeping in mind the mental limits of the students.
- It engaged the community and allowed students to collaborate and share code.
The Odin Project impressed me and it became my go to learning guide.
I stuck with this plan for two years and it paid major dividends. I had moved to a Business Analyst role thanks to my work with windows scripts. I was now writing small applications in Ruby to organize reports and automate tasks. I felt I was doing the work of a developer sans title, but that soon changed.
Also during this time I read the following books:
Luckily, the lessons from the Odin Project were largely transferable to C#. Logical thinking has no language. I had to get used to strong types, but I already knew some of that from C!The hiring manager said that he was strongly considering me, and he noted I had a reputation for being able to learn new things. He told me that he intended to open another position in 3 months and if I could show improvement in C# by then I would likely be hired.
I jumped on it! Three months to learn a language? I felt like I could get there. I also networked with the developers who would be interviewing me. I could do this because we already basically worked together. I found I needed to know the basics of C# and a few common design patterns used in .NET.
- I used this set of courses among many other resources and blogs: MS Learning
- I also used some online guides to learn design patterns: Design Patterns
- This was about games, but I found it to be fun to read: Game Programming Patterns
The result? I passed the technical interview and I got hired! I've now been a software developer (officially) for five years. I shifted to web development, focusing on ASP.NET 4 years ago. Looking back, I believe my success can be attributed to hard work and luck.
I was lucky to have not been fired after passing around executables (even if it was for a benign reason, it violated the company policies).
I was lucky to be hired into a Business Analyst role where I could continue to apply my new skills on real life problems.
I was lucky to have been noticed by a manager in IT who was willing to take a risk on a completely green developer (albeit one with deep business knowledge).
Everything else was preparing for these lucky breaks.
I was lucky!
If you're like me, low on resources but wanting to get into software, then I think it's important to understand that this is the work of years not months. And even after years, it's about making the most of opportunities where you can make a difference. For me, at first, it was automating pieces of my job. For others it was getting involved with open source, or writing personal projects for fun and profit.
A final note: lots of people start down the path of software for the salaries. There is nothing wrong with that! The salaries are great! However, if you don't enjoy code then you might find yourself stuck again, working a job that can never compensate you for your misery. Beware.