DEV Community

Discussion on: A Love Letter to Software

Collapse
 
billcosta profile image
Bill Costa

For me the joy of programming is being able to play with what is the ultimate Tinker Toy, Erector, or Lego Set. The things you can build in software are boundless, given enough time and motivation. I've just retired from a 40 year programming career, but I continue to code as a hobby and to support my other hobbies such as photography.

While I understand what you are trying to say, programming should be about engineering because engineering is about discipline. Picking the right tools, the right techniques and algorithms, determining the customer's needs, and testing, testing, testing. I was fortunate to learn programming at a good engineering school and the lessons I learned, beyond just the act of programming, have served me well over my entire career.

In my favorite class, over the course of the semester, we learned 6 very different programming languages. In each case we had to solve a non-trivial problem in that language. Each problem was selected to illustrated the particular strengths of that language and why it would be a good choice. When you were done, you had proved to yourself that programming languages are just a tool. Different programming are a good or not so good fit for solving different classes of problems. And you also learned that you should be able to become proficient in any programming language that is thrown your way. Each new language becomes easier to learn than the last. My favorite programming language almost always ends up being the one I'll learn next.

In another class we learned different ways to model logic. My favorite take away -- Finite State Machines (FSM) -- an incredibly powerful method for decomposing a class of difficult problems into a representation that is easy to understand, test, and turn into code. It is tool that I've turned to again and again over the course of my career.

But like all good engineering, there is an art to programming as well, and the joy to be found in the elegance of a good design.

One last observation -- when I first enrolled in the Computer Science program so long ago, it was such still such a new subject that it was initially a part of the math department. Now I'm an average math student at best, understanding the concepts, but not very good at turning the crank. But the one thing I found that is a good predictor of success in a programming career is the ability to do word problems. Often even the best math students shudder at the thought of word problems, but I relished them. I think it is also why you see so many physics majors gravitate to programming -- so much of learning physics is learning how to solve word problems.