I recently read a great post on Medium about how some people had gotten into software development and thought sharing my experiences might be interesting as well. Believe it or not, I didn’t always know I wanted to study computer science or work in technology. I actually vacillated several times both in high school when deciding where to apply and then again in college with what to major in. At one point I thought I’d become a pilot or an aeronautical engineer. Then in college I briefly considered mechanical engineering until I realized what a job would actually be like.
My path in software development hasn’t been a straight one. After deciding I’d do computer science, I started off in the financial industry because it was the only place I could find a job in the NY area since the tech companies weren’t well established yet. I learned a ton there working on challenging systems and developing in a variety of languages, but my heart was always in building software for everyone to use. That brought me to Audible, but the path was never assured.
Here’s how I ended up getting into technology in the first place.
What was the first thing that peaked your interest in programming?
When I was a young child, I distinctly remember getting our first computer. We actually drove probably several hours to Delaware where we could take advantage of a state with no sales tax. This was before online stores without sales tax and when computers still cost thousands of dollars. I guess the gas expended during the drive was less than what we saved at Egghead computers.
This first machine ran the somewhat new DOS. My father had taken some introductory programming courses and learned to install some freeware games including my favorite, a train simulation game. This love for games eventually brought me to wondering about how they worked and how I could build my own.
Later on, in junior high school, I got my first graphing calculator and saw others side-loading games onto it. I found that to be trivial and decided I would program my own version of space invaders on it.
What was the first language you wrote in and what did you write?
First though, I needed to learn programming. I ended up getting a book of tutorials from Sam’s, a popular guide series before tutorials were easy to find online. My first language was Visual Basic, a good choice for a beginner. The language allowed new programmers to build something visual with limited code in a simple syntax. Using form components and a drag and drop interface for the UI, it was easy to quickly prototype something and see it running.
I quickly programmed a trivia game for my biology class as a final project. I didn’t use any reusable components, objects, or separate the data from the logic and ended up hard coding every question, but it did work.
Who is your biggest inspiration in programming?
The biggest inspiration for me to get into programming for me was my father. He showed me that it was possible to write code easily and make computers do cool things with it.
My most influential mentors in programming have ranged across my different jobs. At my first (and later second) internships, Seyhan Ersoy taught me that Perl can be an effective language and not just for scripting. He also taught me a ton about the differences between coding in school on small projects and in an enterprise setting where quality actually matters since someone will have to maintain it. I even followed him to my second internship a year later.
Once I started full-time, Rupam Yadav at Goldman Sachs taught me a ton about building scalable, production ready software. I had the importance of testing drilled into me, something I still think distinguishes me from other engineers. Many engineers see testing as something they are either forced to do as lower value than feature work, or something others should worry about. Having an appreciation for testing as a core tenet of development still influences my work these days. He also taught me why you never write a for loop to process trade executions in a system where microseconds matter.
At Audible, Steve Hatch, CJ Jouhal, and Francis Shanahan have been my biggest influences, not necessarily in coding, but in running and leading software development teams. Steve took a chance on me becoming a manager and helped give me a safety net to fail and learn without harsh repercussions. I still get that support from CJ and Francis these days and continue to learn more about being an effective leader.
Any advice for programmers wishing to get into the field?
Look for opportunities to work with others, not just projects on your own. I learned so much from working with others once I started interning that I never learned on my own. Working on projects alone is useful to learn new technologies and practice problem solving, but working with others will force you to get better and learn from them. It also makes you focus on quality more than you will while working on a project where only you will see the code.
Also, focus on learning the fundamentals well, not necessarily a specific technology. Sure, recruiters might look for React on your resume some times, but the best managers will look for fundamental knowledge and the ability to learn new things quickly. Build things in a few different languages to learn the basics, but don’t worry about becoming an expert.
Spend time learning about things beyond languages and algorithms. The best developers aren’t just good coders, they are change agents and experts in other areas. Like I mentioned above, I feel the knowledge and drive I got for automating testing made me stand out and provided skills that others really don’t have. Learn about CI/CD best practices, test automation frameworks, or become an expert in dynamic programming. These things stand out more than a specific framework or language on a resume.
In your opinion, what makes a great programmer?
Good programmers look way beyond the code. They are engineers in the true sense of the word, much like any other type of engineer. They design systems and improve the systems they own. They understand how their components interact with others. They are also leaders in their teams and organizations. They help grow other team members through reviewing designs and code and giving feedback, mentoring others, and pair programming to offer improvements. They also push to improve systems as they work on them and bring new ideas in from outside.
This is a tall order. Good programmers are experts in coding and know a tremendous amount of depth in their language of choice and frameworks. But, they also need to be knowledgeable across a wide range of technologies and practices. They aren’t necessarily experts in these, but need to be conversant and knowledgeable enough to be able to make decisions about the right technologies to use.
Beyond all of this, good technologists also build software that has a positive impact in the world. Not all programmers have this opportunity, but the best will actively search for it. Software should make the world a better place for everyone, not just the privileged. Much of the technology world is still struggling to figure this out though.