preface
I wrote this book to pass on what I’ve learned from decades of professional software development and teaching. I’ve studied, lived, worked, and taught in Silicon Valley my entire adult life. I’ve held senior engineering positions at established computer companies such as Sun Microsystems and Apple, and also at several startups. I’ve developed advanced software at IBM Research (data analytics regarding the causes of obesity), Lawrence Livermore National Laboratory (enterprise software for NIF, the National Ignition Facility fusion energy project), and NASA (data management code for the Mars rovers and the Orion spacecraft). I’ve taught software development at both the undergraduate and graduate levels at several universities, including San José State University, where I teach classes in the Computer Science, Computer Engineering, and Applied Data Science departments.
Working with students and other beginning programmers has taught me that it’s important to practice good software design before bad habits set in. As students, we inadvertently learn “run and done”: as soon as a program assignment runs successfully, it’s done! After we turn it in, we may never have to see it again, so good design concepts such as maintainability are immaterial. We must unlearn that mentality to have a successful career as a professional software developer.