I wrote my first serious program in Basic on an Apple II computer in high school. My dad had me running data at the Yale computer center using a program written for him by a grad student in Fortran. I did not like fighting for a terminal, hogging the printer and CPU with massive jobs, and dealing with the wrath of angry graduate students. When we got our Apple II it seemed more than capable of taking on this burdensome task. But even with the Fortran code in front of me, coding was the most tedious job I’d ever done. The code started at the top and ended at the bottom. Creating every aspect of the report required what felt like an enormous amount of code. If I knew one thing in high school it was that I did not want to be a programmer.
My first structured computer class in Pascal in college helped change all of that. My superlative professor Andy van Dam taught me how to design code from the top-down, breaking it into pieces, reusing as much code as possible. Thinking about how easy the code is to read, modify, and maintain, helped me view software as a design challenge, not a rote tedious process. I was still on the fence about being a programmer.
When I learned C and Unix as a sophomore all of that changed. The experience of moving from the heavy, bloated, inflexible set of abstractions in Pascal to the simple, machine-oriented, clean, flexible, concise abstractions in C created for me a new understanding of the incredible potential of software. You can use software to not only build a system but transform a process. It’s the power of not just solving a targeted problem, but solving the meta-problem. The family of problems which make this particular system relevant and will ensure it stays relevant as we refine the system, or as processes evolves around the system forcing the system to adapt. C and Unix established more efficient processes for building systems and for me opened the door to seeing that potential.
As the designer of C and lead contributor to Unix, Dennis Ritchie’s impact on the world was and continues to be tremendous. His work underpins not only the Mac, the iPhone but Android, Google, Amazon, Netflix. His design sensibilities influenced not only C, but C++, Objective C and Java which together account for the majority of the code which exists in the world today. Hs work helped me not only get into the business of programming but also inspired me to always keep thinking about how to make programming better.
Hi Jeff, I work with Grace Xiao and she linked to your blog.
My first professional language was C and my first amateur language was Atari Basic 😉 Totally enjoyed this post.
I didn’t study this stuff in school – so much of my best learnings on software came from working with C, and more importantly from working with with more senior C and C++ developers.
Why I grew so much was not because they taught me how to code, but because they taught me how to think. And in large part, this meant learning how to think like Dennis Ritchie.
In the eighties – he started encouraging CS researchers to eschew “excessive relevance”. I’ve started taking this to heart, and looking for ways to make sure that while, yes, most of the time a dev team should be ruthlessly on-task, some time needs to be left to “play” with code. Because that’s how we really learn.
Cheers