I took on an 18-year-old as an intern for some Web development work. He had taken AP Computer Science, a Python programming course in high school, and Harvard’s CS50: “CS50 is designed not only for concentrators in computer science but also for non-concentrators. More than just teach you how to program, this course teaches you how to think more methodically and how to solve problems more effectively. As such, its lessons are applicable well beyond the boundaries of computer science itself. That the course does teach you how to program, though, is perhaps its most empowering return. With this skill comes the ability to solve real-world problems in ways and at speeds beyond the abilities of most humans.”
In addition to this academic training he arrived with a vast expertise on building Windows-based PCs, especially for gaming.
Here are some specific-to-programming items that could have made him more effective:
- use Google and Web-based resources before interrupting the person who hired you, e.g., if you want to know how to do something in Emacs for which crib sheets are readily available on the Web and can be printed out
- assume that the person who hired you will have superior strategies for solving problems but not superior knowledge of syntax
- if there is a bug, strip the system down to the minimum number of lines of code that still exhibits the bug
Here are some general life-as-an-employee items:
- If you’re cc’d on communications regarding meeting times with other people and need to talk to them or arrange something with them, reach out directly via email, cc’d your supervisor. Don’t use your supervisor as your secretary.
- Don’t rely on your supervisor to keep schedules, remember tasks, etc. A senior programmer is not a secretary or project manager.
- Use all available resources. Ask questions in Web forums, ask for help from anybody that you know that has relevant knowledge. The most successful workers are generally those who bring in expertise from beyond the organization.
What did I learn? That grit is perhaps the most important determinant of success as a software developer. The most effective developers simply won’t quit until a problem is solved. One reason I think programmers often stay up until 2 or 3 am is that it bothers us if something isn’t working. So we keep at it until we collapse. We call in favors from friends and colleagues for help if we are stuck. I would go so far to say that if a person can cheerfully walk out of the office at 5 pm without having solved any problems then he or she should probably pick a career other than software (Real World Divorce shows that there are a lot of easier ways to make money here in the U.S. and this posting shows that a not-very-driven-programmer will likely have a short-by-modern-standards career).