Homegrown programmers

When programmers say another programmer is homegrown I believe they mean that programmer is self-taught and does not have a traditional computer science background. Though I don't perfectly fit this criteria, I consider myself homegrown.

I got an associate degree of science at, basically, an art college. During my college time I never took courses on data structures or algorithms and never programmed in assembly language. All seemed fine though. I thought I was going to be a web designer, not a boring programmer for the rest of my life. I was into HTML and Macromedia Flash and those things were waaaaay cooler.

In high school I was lucky enough to be living somewhere that had three years worth of computer science classes (pretty good for the mid-late 90s). The classes, as I remember them, were more about writing increasingly difficult programs but not really about theory or formal algorithm education.

Before high school I spent time on some old IBM machine. I can't name drop the specific type of computer and even if I did I don't think it would give me that OG programmer street cred I yearn for. I wrote programs in QBasic. I occasionally tweaked simple DOS game code to make them run in some random way I desired. Programming was just for fun.

Time and effort

Despite a high school and college experience focusing generally on programming, the formality most people experience in a computer science curriculum wasn't there. That said, I did leave out one important detail of my story so far - I programmed a lot.

I commuted to college only three days a week and the rest of the time I worked a job as a sort of junior MIS guy at a small company that built circuit boards. I was only 18 and I had my own office and computer. During my time at work I was sure to sneak plenty of programming in.

I was at home coding even more while every other college kid was out partying. I didn't drink or really care for crowds and I had a girlfriend so I didn't need to go chasin' gals, as the kids say. If I had a single vice that was becoming a problem... it was programming. Every night I stayed up late watching Conan and writing code in my parents basement.

In college I entered a design contests and did well, which I believe got me preferential placement in my college's internship program. My internship turned into a full time job. I was a Flash and PHP programmer.

Keep in mind this was after only spending two years on my associate degree. All my friends were still in college earning their bachelor degrees. This meant that on top of already working professionally, I was still tapping into an abundance of time to myself where I could write code. More late nights coding with Conan.

My girlfriend at the time, now wife, teaches children to play piano. This means she works later in the evening, so each day I get home and have a few more hours to myself. I also commute into the city each day. I use much of this time to read or write about programming.

I've had the opportunity to invest a lot of time in my programming career. I've taken advantage and continue to take advantage of that opportunity. This isn't the same as a college degree but possibly as valuable.

Are we good enough?

Every so often I worry about the gaps in my knowledge that certainly would have been filled by a traditional computer science curriculum. I think my worries are mostly due to fear of embarrassment. Most of my colleagues do have that traditional training, so that leaves me as a bit of a black sheep. The truth is everyone has gaps in their knowledge. No one knows everything. I try to focus on learning as much as I can about the problems I face rather than worrying too much about the problems I should know about but have never come up. I also try to be aware of my knowledge gaps so I know when I need to ask for help and invest time in filling those gaps.

There are some vast knowledge gaps that both homegrown and traditionally-trained programmers seem to suffer from. I haven't looked at all available computer science courses at all colleges, but the ones I did see all seem to focus on teaching students how to tell the computer what they want it to do. "Isn't that what programming it is?" you might ask. Nope. Its only one piece of the puzzle.

For all our code mess, bandaid fixes, and technical debt we still produce stuff that works most of the time. We're generally telling computers to do the right thing. But really computers only care about 1s and 0s, everything else is for humans. We should be good at writing code for humans; Code that humans can read and easily understand, reuse, extend, test, and so on. From what I gather these things are hardly covered in computer science programs and that to me seems like a major failure.

If you're a programmer you know that learning needs to be an ongoing process in order to survive. This means you'll probably do most of that learning outside of college. College for most lasts four years, but careers may last forty to fifty.

As for the learning that does happen in college, I wonder how long that knowledge stays sharp when those skills go unused. I certainly have lost many skills over time. Calculus, for example. Holy shit, I hope I don't have to do any calculus.

I would guess that, like my calculus, the unused skills of a traditionally-trained programmer would quickly atrophy. And why do they go unused? Lots of jobs do not use much of what would be learned in college. I wish I had numbers on this but I doubt they exist, so I'm basing this off my personal observations. I simply haven't had that "oh shit" panic moment where I've felt I was out of the loop at work because of that missing computer science background, so I assume that the special training they have and I missed, they aren't using very much.

One faction of the homegrown programmer population does worry me - The homegrown programmer who has spent most of his career working in total isolation. By "isolation" I mean having no programmers at work, at home, online, or anywhere, to learn from. If you aren't use to working with other people or writing code for humans (other than yourself) you are likely at a disadvantage.

Homegrown and traditionally-trained programmers are a mixed bag. The best and worst programmers I've worked with had traditional training. I've interviewed people who asked for six-figure salaries and had computer science degrees, but couldn't code FizzBuzz. Lots of people fail at FizzBuzz.

Having a computer science degree does not prove your competence as a programmer. Employers need to look beyond these degrees and dig into the actual skills their applicants have. I believe they'll find that a homegrown programmer who has invested time and effort in their self-training has an equal chance of being a productive member of their team.