May 25th 2010
I recently graduated from University with a B.S. in Mathematics and a minor in Computer Science. I love to write code and so naturally I began applying for computer engineering jobs. The keyword is computer engineering, NOT tech support, web ninja or css guru. What I found in the job market was shocking!
YOUR DEGREE DOES NOT MATTER. that much
If you are currently enrolled in a CS program, keep going to school. Your degree is supplemental to your time at university. The point is not to focus on getting 4.0s but to focus on becoming an expert programmer. An expert programmer not only knows how to build a red-black tree using linked lists and C pointers but she also knows how to fix a bug in an JSON parsing library. She will also know how to navigate a large codebase without an instructor’s direction. She will not be satisfied with the programming tools that were introduced to her in CS101, etc…
A week before my last final, I landed a real computer programming job. I took a position at Entryway and I will be working on their new product and existing client applications. I will be developing software on real, live, production applications. In the paragraphs that follow, I will outline what I did in order to get a programming job. Let us now begin with my college career.
I was a slacker in High School. I did not take college algebra or anything like that. Subsequently, I did not have very much direction going in to university. First, I tried DeVry. This was a terrible idea. DeVry and the likes do not provide environments for students to learn. Again, to support my hypothesis, University is NOT about acing tests; university is a time for you to discover how you learn and what to learn. Anyways, technical institutes want you to pass a test. DeVry wants their students to consume and apply technical documentation. I wanted to create technical documentation.
I left DeVry only knowing what I did not want out of university. I was still clueless on what I did want from university. So, I decided to be thrifty about my indecisiveness which lead me to community college. I recommend this to any high school student who wants to go to college but not sure what for. After a few semesters at community college I found myself at UMKC. Here I wandered from the business school into the Computer Science department. I took a C course and at that moment, I discovered my purpose. From that point, I knew that I was on a God ordained mission to program computers.
But why did you get a degree in Math and not in Computer Science? After all, you love to program.
I quickly realized that I did not need an instructor’s assignment to program. I did not have to be on some firm’s payroll to write code. I could open up my VIM editor at 11:30 at night and write as much code as I wanted. In fact, I was learning how to program from the internet, not the TA’s weekend sessions. My love affair is one of passion and passion does not need direct supervision. So, I made the decision to study Math. The only motivation behind this decision was my fear.
I use to think math was no fun, For I could not see how it was done, Now Euler is my hero, For I see why zero, Equals e to the pi i plus one.
Majoring in Math and minoring in CS gave me the best of both worlds. I was able to take 1 CS course per semester and that one course gave me the theoretical insight that I wanted. However, I was not programming a whole lot for school. This allowed me to read and write programs that truly interested me. I quickly found Ruby and fell in love with the Ruby community. Shortly after I started programming in Ruby, GitHub came on the scene and it truly changed the game. I was able to get my hands on some of the best code in the universe. Forget reading my instructors solution to an elevator simulation, I was reading code that was powering yellowpages.com.
I began attending Ruby users groups and national Ruby conferences. I read all of the ruby blogs and bought all of the popular books. I was enrolled in my very own university. The university of the internet. The internet is where I learned to program. School is where I learned how to solve problems.
How I got the job.
I created my own company and got my own clients and built them awesome websites. Not as hard as it sounds. Actually, it was very hard. I had to accept the fact that I was not going to get As in school. I would replace school time with programming-for-money time. Somewhere in my gut I knew that if I wanted to be a successful programmer (something that I have not obtained yet) I would have to build a portfolio of software that is actually being used by humans. A collection of academic exercises does not reflect your understanding of how computer programs behave in the wild. I found out that this idea (production applications != toy applications) is something that the industry values.
All the while I was creating websites for clients, I was spreading the news of my work via twitter. I was contributing features and bug-fixes to the open source projects that I used in my client work. I was telling the internet that I was a good programmer. Eventually, the internet replied.
When I decided that freelance was not for me anymore (another story), I began to do what the rest of my peers were doing; send resumes. I made a list of companies that I respected and would like to work for and then sent them a personalized email and a copy of my resume. In the email I highlighted what I liked about there company. For Instance, I sent this as a cover letter to Foraker
What I like about you: I appreciate your transparency. In Neal Enssle’s blog post “Hiring 101,” he specified Forakers terms of engagement. After stewing over his words, I immediately understood why I was so fond of the post; it reminds me of a well documented API. You clearly specify what I need to do in order to procure a spot on Foraker’s engineering team. Foraker represents craftsmanship. In the web development world, barriers to entry are routinely being lowered, these new efficiencies enable anyone with a MacBook to become a “developer.” However, when these new tools are placed in the hands of craftsmen, web development transcends into engineering. That being said, I am glad to see that Foraker practices TDD and pair programming. These practices are the fundamental reason for my job quest. I am eager to hear more about the process that goes into your client’s projects.
What you will like about me: You will be very interested to know that I am highly skilled in customer service, project management and solving problems through code. In my last year at University I have built a consulting company that has done over 60k in revenue. Now, you might be wondering, why would I want abandoned my consulting company? Well, I am eager to sharpen my engineering skills with experienced developers. I want to work with the best. I aspire to become a craftsman. If any of this has piqued your interest, read my resume, run my sample code, explore my github profile and then lets make time for an interview!
Things like a personalized cover letter show people that you are not some chump. This letter displayed my interest in craftsmanship while highlighting my strengths. This is necessary when you are cold calling future employers. Having a great cover letter and resume is important when you are interacting with firm’s for which you have no prior relationship established. This brings me to my next point.
Why not work with someone you already know?
This notion occurred to my only after I had already failed with several software firms. It is also worth noting that I made this discovery after weeks of prayer and fasting. On a spiritual aside — failure, prayer and fasting is a recipe for God’s plan to be revealed in your life. Try it! As I mentioned earlier, I made a habit of attending programming conferences. Conferences provided me with a great learning resource but more importantly, conferences allowed me to meet some of the best people in the industry.
When I attended RubyConf 09, I had the pleasure of meeting the entryway team. I was sitting at a table with Corey Haines and David Chelimsky when Katie walked by and said hi to Corey. He introduced us and then Katie introduced me to the team. We talked, ate and exchanged twitters and went on our way. Well, since RubyConf, I had been tweeting about all of the work that I was engaging in and I would always get a warm response from the entryway team. So, by the time I was ready for a job, entryway knew who I as and the work that I had done. When I sent a formal letter of application to Gustin, the founder of entryway, he did not have to read thru my fancy cover letter. Thanks to social networking, the entryway team was already aware of who I was and the work that I had done.
I was offered a position on a magnificent team of software craftsmen and I will began what is to be a great journey of becoming a professional, expert programmer.
I was able to get a programming job right out of college because of how I defined college. For me, college was a time where I could stay up all night exploring the technology that satisfied my personal curiosity. College was a time where I learned how to solve abstract math problems, not how to ace my asp.net certification exam. My charge to any CS student:
Learn to program on your own. Leave your comfort zone. You do not have to start contributing to open source projects. Start by modifying your next programming assignment, change the requirements. This may result in a lower grade, but you will be doing yourself a favor by not being dependent on a syllabus.