In this three-part series Jeff Casimir from the Turing School explores the three aptitudes you need to be a successful programmer. Up first: How the LSAT can help prepare you for a career in programming.
This week President Obama debuted the TechHire initiative with the goal of getting more Americans into high-skill high-tech jobs. The administration estimates that there are half a million unfilled tech jobs in the US. Short-term developer training programs like those you find on Course Report are part of the solution. But the programs only work if there are great applicants ready to learn.
There are many people, programs, and instructional tools that will tell you anyone can program. That’s true in the same sense that just about anyone can write a book, but not all of us should be authors. The art of crafting characters, a dramatic arc, and life-like dialog is the work of those with an aptitude for storytelling combined with long hours of practice.
Anyone can write a program, but not everyone can be a programmer. A programmer is a person who uses software to solve problems. A good programmer writes software that solves the problem as it is understood today, but is flexible enough to solve the new version of the problem tomorrow. Their software is clear and logical such that another programmer can step in at any time and continue or build upon the work. A true programmer uses code in the same way an author uses words: to simulate a world that we can believe in.
On Course Report, you’ll find dozens of programs that want to help you become a programmer. Maybe you’ve worked your way through a MOOC, experimented with online tutorials, and attended an in-person meetup. Programming seems fun and you’ve heard there are amazing jobs when you have the right skills. But there’s this nagging question: “Is programming for me?”
I’ve spent the last 12 years teaching programming, both to children and adults, and observing the differences between those who “get it” and those who struggle. In this series I’ll help you figure out whether you have the aptitude to be really good.
In late 2011 my friend Chad Fowler and I were cooking up Hungry Academy, one of the first short-term developer training programs. I knew the program would have hundreds of applicants and I needed a way to differentiate them. A coding challenge wouldn’t work because we wanted to be inclusive of people who’d never programmed before. I thought about writing a simplified language that we could teach in 15 minutes, then have them “program” for 30 minutes, but that sounded too error prone. I looked around for others attempting to attempting to solve the same problem.
In 2003, I took the LSAT thinking that I would go to law school. I realized the LSAT was also trying to accomplish a similar mission: test your aptitude for the law without knowing the law, and that more importantly, programming is just like law.
The value of a lawyer isn’t in knowing the words of the law. It’s in seeing how abstract rules and patterns come together to explain or describe a real-life situation. The manner in which those patterns connect isn’t always clear, so there’s a need to line the problems up as best you can and deduce a solution. In programming we have rules, style guides, principles and patterns, but having those tools in your toolkit is useless if you can’t assemble them to solve real-life problems.
I set out on an experiment. I had access to 30 experienced, successful developers within LivingSocial. I pulled out a “logic game” from an LSAT prep test, made copies, and trolled the devs with lines like “you probably don’t have time for a logic problem but…” and the papers were snatched out of my hand. Minutes later I collected the results and, over and over, heard the same feedback: “I’m not sure it’s right, but this is what I’ve got.”
I graded their work and found that every single participant correctly answered five or six of the six questions correctly. I surmised that people who are good at programming are good at problems like this, but was the converse true?
Since 2011, I’ve overseen interviews of over 2000 applicants and I can definitively say yes. Not only is there a strong correlation, but the degree of success matters as well. In our aptitude interview, applicants are graded with a rubric resulting in a numeric score. The score is used to rank applicants and, somewhat surprisingly, the rankings from that test almost exactly mirror the rankings as students graduate after our 27-week program. From the close of the interview we can tell you how well you’ll succeed over the next seven months.
However, Turing isn’t a realistic option for everyone. How can you figure it out on your own? Thankfully, there are dozens of LSAT test-prep books full of sample problems out there, like the LSAT Logic Games Bible, that focus exclusively on these kinds of challenges.
This isn’t about studying for the LSAT. Read about how to use tables to map out the logic of a problem. Go through a handful of walkthroughs to see how these problems work, and then get serious: sit down with a problem you haven’t seen, work on it for about 30 minutes, and figure out the best answers you can. Take a break. Get a second problem and work on it for another 30 minutes. Take a break and then do a third problem.
Now, exhausted and nervous, grade yourself. Did you get over 80% of the answers correct? If not, based on my experience, you have a steep mountain to climb. It’s not impossible, but it will be slow and extremely difficult.
But if you hit that 80% then you’re on the right track. 90% is even better. You have at least one of the three aptitudes key to becoming a successful programmer. Come back to Course Report in two weeks and we’ll explore the second piece of the puzzle: spatial reasoning.