March 4, 2014 was when I first joined GitHub. Almost exactly 4 years ago from the day that I am writing this. Today I've been employed full time as a remote web developer for two months. I want to talk about my journey to full time development. This is mostly to benefit from those who are just now learning to code. You've probably been reading a lot about how to get your first development job. You've been building a portfolio and studying and practicing, and maybe you think you are ready. Or maybe you've just started and you've read about the great salaries and how easy it is to learn to code. There are a lot of success stories floating out there on the interwebs, but I want to tell mine, because most of the stories that you read are...optimistic. Maybe I am a huge outlier, and I'll get to that, but I don't think many of these 'learn to code and get a job in 2, 4, 6 months really tell a representative story.
So, a bit about me. Growing up I've had access to a computer pretty much from the time that I could read. This may not sound odd now, but I'm nearing 40. My first computer was a Tandy 1000SX. Home computers were affordable, but they weren't extremely common. Atleast, in Mississippi they weren't. It was a family computer, but it was basicly mine in practice. I spent many a night typing the magic combination of keys that were given in the many BASIC books we had. Making shapes and colors and sounds. I had a friend who had an uncle that was a programmer that gave him a book on Turbo Pascal. We used it to fashion text adventures together when I would visit. To be clear though, I had no real notion of programming back then, only that I was well aquainted with the idea of it and very basic notions of syntax. Being a programmer wasn't really even on my radar.
I went on to study physics at a local university. I wanted to be a research scientist. During that time I was employed by a university laboratory working in nanotechnology. However, I wasn't a great student. I was more inclined to work on the interesting stuff in the lab than to study for classes. During that time I took my first real course on programming. First with FORTRAN because it was a requirement for my physics degree (Which I failed. Twice. As I said, I am a terrible student.) and later I took the proper introductory CS course which was done with C++, which I aced because at that point, because I knew the basic constructs of programming from FORTRAN and my physics studies had made me a very stubborn problem solver.
My point in telling you all of that isn't to talk about myself. It is to demostrate that I didn't come into programming out of the blue. I had a history of exposure to it, and a technical background and education. I am unusually technically minded and a stubborn problem solver, but I'm not a gifted student or particularly hard working. I can't be because...
I got sick. I couldn't continue my studies. And I couldn't work. And it was a real possibility that I might be sick for a very long time. I decided that it was time to switch from my dreams of doing research to doing something that I could possibly do from home. I decided to go into programming. I decided to combine another passion of mine, video games, with learning to program properly. I think that it is important to combine passions. It'll keep you going when you are burned out on learning to program and having an actual problem that you want to solve is a great motivator. I played a number of games regularly that you could do some programming with. One was WoW, and you could write UI addon for it in LUA, but I felt that it wouldn't be very marketable to learn LUA. Another game was Kerbal Space Program, which ran on the Unity game engine, which used C#.
I thought that since C# was very popular with business, and if I did want to get into game development, Unity would be a decent choice, I decided to run with it. I started out modifying an existing mod for Kerbal Space Program called Interstellar. Tweaking it to my own liking and fixing bugs. I learned about git and github, which was where the original author hosted his code. I also created my own mod from scratch called ForScience, which was very popular. About a year after I started, the original mod author of Interstellar had abandoned the project, and my version was the only working version. I published my version and began work integrating the mob to play better with other mods. I released Interstellar Lite, and recieved my very first donation.
I was commited though. I knew that eventually someone would finally bite. That eventually my skills would be apparent enough that I couldn't be denied because of my education and work history. I did get a few small contracts on UpWork during this time, which kept me going. And one day in Nov, I get an interview for a company and they hired me on the spot. I was immediately tasked with doing some technical planning for a new project and all seemed well. And then a week went by, and then another. The company had just died off.
I took consolation that I did make some money. But I was back to square one. Atleast now I had a company to put on my resume. I was still technically employed by them, just without any active project.
Then it really did happen. I get call from a client on Upwork, and they seemed confident that they have plenty of work. I'm hired on for a couple of weeks on a react project, and then they want me to come out to San Fransisco on a react native project for a new client for a couple of weeks, and then new .Net project comes up. I'm asked to sign a contract directly with the comany. I have more work than I know what to do with and I'm working with great people with tons of different technologies. I love it. I feel vindicated for all of those years of struggle.
I also learned that I could have been employed a few years ago. I was ready then. Some of my coworkers were very much junior to me. I just didn't have the opportunity or the right marketing. If I was in a more populated area or if I had started with a technology that moves fast like the web, I would have been better off.
If you don't have a degree and you are in a relatively low population area without much opportunies, your road is going to be more difficult than someone in a populate area or with a degree. Even if you are willing relocate at your own expense, companies are going to be more risk adverse. If you don't have a degree, trying to get a job at a standard business is going to be a very tough sell. Almost all of my big hits were from software/tech companies. Traditional businesses want that degree because they don't understand that programming is a practical, creative skill, not just an academic one. If you are starting out, I would recommend a degree if you can afford one. I plan on finishing my degree as well, now that I have some income to afford it. It is worth the money, but you still need to learn to program. You do actually need to know a framework and the landscape of your chosen technology.
Some interesting things that I learned during the process of hundred real of applications (not just click > apply).
Research your market. Make sure there are plenty of jobs available for a technology that are looking for people like you before you invest in learning that technology. And try to pick a technology that is newer so that you don't face as much competition with people with more experience than you. Don't learn web forms, learn .net core. Don't learn Swing, learn Kotlin. Don't learn jquery, learn angular. That sort of thing.
My porfolio was just about useless. Both the website and my github account. I still think it is a good idea to have one. I learned a lot from those things over the years, but the recruiters, HR reps, and technical interviewers will hardly ever look at it. I was a surpise when an interviewer knew anything about me or my projects.
When they ask you to tell them something about yourself, keep it short. Like two or three sentences. For whatever reason, people seem to judge your experience more optimisticly if you leave out details. If you go into more detail, you risk exposing that you don't know something they think is critical. Don't ever pass yourself off as a junior, pass yourself off a yourself. Don't say you have more experience than you do, but don't let on that you don't know something. This is contrary to all of the advice I've seen. Everyone says that you should say when you don't know something and that they are looking for curious learners.
This is bullshit and I don't know where it comes from, but you are being hired as an expert. You don't want a junior surgeon, you want the surgeon that has done the thing 10000 times with zero complications. This is more true for the non-technical people in the hiring process. To HR and the CEO, you should be a god like miracle worker with infinite knowledge. To the technical director, you may not be sure, but this seems related to that and you have experience with that, and would be excited to work with it.
I think that anyone can learn to program. I also think that it takes a special type of person to do it well, and enjoy it. I think that you need a enjoy hard problems. Maybe I am projecting, I don't know. But I think that is very unusual for the average joe to just pick up a book on programming or follow a course and learn to program well enough to be employed. I think I've read that something like half of these bootcamps are attended by someone that already had a job programming. I am very skeptical that someone without connections learns to program in a few months and is making tons of money. I think that it takes years of exposure to be ready to work on all but the most trival projects. I think that the reason you see these articles about getting a job 3 months after learning to program are exceptional exactly because it is exceptional. If it were routine, there would be little value in sharing the story because it would be a story we've all heard. And I've seen more than a few where it was clear that the person had previous exposure to programming.
If you made it this far, firstly, thanks, as I know this was quite lengthy. And secondly, my point isn't to discourage someone. I just think that a lot of media tried to play it up like it is easier to do than at least my experience. If you look around, you'll probably see that it is far more common to hear about someone having a hard time getting thier first dev job, even from CS degree graduates. But it is worth it, at least to me, having gone through the process. I work from home now. And I get to learn new things every day, which I love. I found my place, and I hope that you can find yours.