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 started in IT officially when I join the Marine Corps. My MOS (job) was basicly as a help desk technician / network adminstration. I dabbled a bit with development while working as a logistics clerk for the company office. (Everyone has two 'jobs' in the Marines, your official one, and some duty you may be assigned temporarily.) I automated much of our administrative tasks by building a database and using various office suite software. This software was later moved up to the battion level and with the help of new Lieutenant, I got my first exposure to Visual Basic. After I left the Corps, I worked a few random jobs, but I also started a blog called MCTPhysics. This was the first time that I really started to learn to program. I wanted to make some collapsable buttons for the categories on my blog. So I hacked together a small script with javascript. I also had to modify templates in what I think was Perl. I still had very limited notions of how to program. I vividly rememebr being confused by the dot.access.syntax.of.javascript.

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.

But all was not well. I hadn't done enough research into my market. While C# was indeed very popular with business, there were relatively few jobs to go around in my area. And I had no degree, and my experience with C# was not with .Net. I had recieved literally no responses for my C# experience. I needed a wider net. And I was probably going to need to be remote, because my health still wasn't great. And remote jobs tend to require more seniority for typical .Net shops compared to web dev it seemed. So I began to learn web development. I chose to do FreeCodeCamp and it held my hand just enough to stay on track. I created my portfolio site around 3 years ago. I already knew the basics of HTML and CSS, and learning javascript was fairly easy as far as the basic syntax goes. I continued with the program and maintaining my mods for a couple of years.

About a year ago, my health had started to improve, and I was looking to get a job very seriously. I also had developed relatioships through the World of Warcraft community and there was an opportunity to work on a web app project. And so we started the shadowcraft rewrite, and I began to learn React and all of the modern javascript tooling/ecosystem. I wrote about that elsewhere if you'd like to read about that project. I took a year to complete that project. Until January of this year. But I started getting responses about my javascript, and in particular React, experience almost immediately. First technical was in May, and every month saw more and more interviews and technicals. But I was still very discouraged. I was getting past phone screens all the time, and the technicals would seem to go well, but for whatever reason, the opportunies would fall through. I can't state enough how discouraging this was.

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.

Keep your resume short. Don't bother with an objective. Explicitly state each technology applicable. You don't know how many times I was asked if I knew HTML/CSS or HTML5 or whatever even though I have javascript and react and other web technologies on my resume. Or my favorite. Do you know T-SQL when it clearly says SQL. The people reading your resume do not know anything about what they are hiring for. If you don't say the magic words, they won't understand. You are fluent in greek, they only know what is in thier phrase book.

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.

Get your first job, then think about your dream job. Don't do those practice sites. Learn real skills. Learn a framework/libary and use it extensively. Ignore the vanilla javascript peeps. You aren't being hired because you know javascript event loop. You aren't being hired because you know how to bind/call/apply. You are being hired because you can make a button turn blue or track down a mutation bug in Redux while the website is on fire. You are being hired to solve actual problems and build features, not because you know the algorithic effeciency of bubble sort. They want you to be fast on an interview, even though you can take as much time as you need. The way you get fast is by doing it a lot, and to do that you need to build, build, build. You need to write tens of thousands of lines of code. As much as you can. You ideally need to work on a project that is actually used by people. You need to know what it feels like when things go wrong and the stress rises. You need to get stuck. Like really and truely dumbfounded. You need to learn how to claw your way out of the hole when you are hopelessly lost. You need to learn to learn.

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.

Saturday, Mar. 17th, 2018