On Coding

A little off topic from the usual content of this blog, but thought I might as well post it here :)

People often ask me advice about getting into coding. It's hard advice to give because my own experience has been so unusual. The people I know who do it either come from computer science or they have backgrounds as long-term hobbyists with idiosyncratic backgrounds. I fit into the latter category. I started playing around with computers as a very young age because I was homeschooled and my father worked in IT and had stuff laying around. He'd often give me old computers. From that I got into gaming and I did my first coding while modding games and making game-related websites. So much for gaming being a waste of time :)

The reason I never did computer science is because I couldn't and then by the time I could, I wasn't interested. I didn't go to "real school" until I was about 15 and I was thrilled to be awarded placement in a math and science magnet school. I was one of three students who were behind in math who they allowed in on a provisional basis. Unfortunately my family moved after that and the chaos from that combined with an unsupportive school system meant I not only didn't catch up, but I got such bad grades that I ended up in remedial math in the basement with the "bad kids." My math SATs and ACTs were mediocre. Clearly, I wasn't going to get into any kind of decent computer science program.

I went into agriculture because I liked it and it was also known as a "backdoor" into University of Illinois at Urbana Champaign that would allow in people with bad high school grades. Some people then switch out, but I never did because it was the opposite of high school for me. I finally figured out how to study and did really well. I did get a job as a dorm network technician– I think there was one other women out of 30 others in the University. It was there I met a boyfriend who studied computer science and because of him I thought about switching in since I was doing well, but honestly the program seemed really unappealing. If I wanted to be in an academic program where they expect you to sleep very little and let it consume your entire life, I probably would have chosen something conventionally interesting like pre-med.

And while occasionally I think I should go back and get a CS degree, it would be unnecessary for me. There are areas of coding where it's largely people from CS like encryption, but there is plenty of coding work for people who don't have a very hard math and theoretical background though it's important you are a stickler for best practices and learn, for example, the basics of things like OOP. You might even become more a stickler about this stuff than a person from CS because you know that if you code ugly and bad people will be the first to blame you. 

Herein lies the problem: how do you get into it then? Until now this niche was filled with the self-taught, but now people are trying to teach this type of coding. And this is tough since there isn't really any pedagogy for it.

I had to teach a student worker at my previous job and I looked and looked for teaching materials. And they exist, but they are targeted to people who are comfortable teaching themselves. For my own use I've taken advantage of Codeacademy and Lynda (I'm also a big fan of using Codewars to build up skills and practice), so I tried assigning my student them. And probably like most people who start them, he didn't finish them.

It requires a lot of self motivation and not everyone can learn this way. I ended up writing a lot of different exercises I'd assign him and work with him on. But it was incredibly time consuming and not really my forte. During this time I was also expected to also fulfill my regular duties as a web developer, which I quickly fell behind on. I also became at least a little resentful because here I was guiding someone else along, when I'd managed to learn this stuff on my own.

Code schools have sprung up, but who is teaching them? People like me who have no clue about teaching probably. I honestly don't have a lot of experience with them, but I've known people who have gone to them and I feel they've fed them unrealistic expectations. A couple of people I know have dropped out of them. Which sucks because they are expensive.  

I know it's harsh, but if you don't have the ability to teach yourself, you are going to flounder in a tough environment where you are working alongside people who are going to be skeptical of your abilities (and they won't hold your hand) and the skills you need to have are constantly changing.

So my advice if you're really serious about coding to really dive into coding as a hobby and follow through with it. This is important whether you have as CS degree or not (my student worker who was struggling with getting his career started had a CS degree). If you get stuck you should be doing what the rest of us do and Googling it (and often ending up on Stack Exchange) or finding something that does something similar to what you want and taking it apart to see how it works. Take advantages of some of the books, applications and online courses out there. Most importantly: build an app or a website on your own and deploy it yourself. Attend local meetups. Yes, it's a lot of "extracurricular" work, but it will really test your ability to succeed in the workplace and will look amazing on your resume. This very site you are reading this on was one such personal project and I've used this site over the years to develop my skills further. For example my first responsive Drupal theme was built for this site. Drupal is a CMS that's pretty common in large corporate and government environments so it's a very valuable skill to have. 

In the meantime, the industry needs to look long and hard at itself and ask whether or not we really trust code schools to take charge of developing pedagogy. And Universities need to ask whether they're failing to educate a lot of talented students on how to work with code, servers, etc. because their only program related to that is computer science.

After college, I continued building websites as a hobby and was lucky enough to have a roommate who did what I do now, which is specializing in the Drupal CMS. Sometimes people give me a hard time for that since it's not exactly the "sexiest" area of coding. But I have some experience with "sexy" things like Ruby On Rails (back when it was sexy I guess, I heard recently it wasn't sexy anymore, I don't really care) and Angular and it's really all the same to me. It's a mixture of slogging with some puzzle solving in between. It's the slogging that a lot of people can't take.

For example here is a bug I solved on an Angular web app: a spell in a game for removing a snowman spell from yourself was causing people to have negative amounts of gold coins. Solving this bug required me spin up the application in a virtual machine, search through the code, find areas that seemed like they were part of that chain, "break" them to see what they did, look for other spells that worked correctly and "break" them to see how they worked, figure out the difference between the ones that worked and the broken one, implement that on the broken one, and then testing it. Then other people tested it when I posted it to Github and luckily it worked for all of us, because otherwise I would have continued to have to poke at it until I figured it out.

Also this was all "for fun" and in my spare time and on a very minor bug. To code you don't just need to be smart, I think being tenacious is far more important. Also if you aren't some kind of computer science genius or something it helps you fill niches if you are a good documentation writer, user trainer and tester like I am. These skills are often undervalued, but they are desperately needed and often the kind of people CS programs select are often not good at them.

I'm very grateful for this career. I've never been without work. I've done other things here and there (writing for example) and made the decision to stick with coding. But I firmly believe that to succeed in it as an adult with an idiosyncratic background, you're going to need to be comfortable teaching it to yourself. But also that I'm probably a weirdo who is totally unqualified to teach normal people or give them advice.