In the field of software engineering, you are never done learning. That should probably be one of the first ten rules of the profession.

Software engineering is still a young discipline. We can contrast it with something like bridge building, for example. Humans have been building bridges for thousands of years, and they pretty much fall into a few main categories such as suspension bridges and truss bridges. At this point, we know how to build bridges so that they don’t fall down.

Humans have only been building software for a decade or two. There are a ton of different methodologies out there for building software, compared to the relatively few different types of bridges. Unfortunately, we don’t really know how to build software so that it doesn’t crash. We know how to make crashes less likely, of course, but every system of any significant size experiences crashes at some interval.

Imagine if, in the first few decades of bridge building, people just decided to stop advancing the discipline – decided they were done learning. What would the result be? We might have bridges that fall down once or twice a year. How frustrating would it be to deal with detours and alternate routes while the bridge was repaired? Some people, those with the same mindset as the bridge builder who was done learning, would simply accept this as a fact of life. Truly bright individuals, however, would continue to study bridge structure and find ways to make bridges that last.

The analogy is a bit of a stretch, but the point is that we cannot afford to be complacent with the state of the art. Software engineering is a baby, and we all need to help it grow by studying continuously to improve it, and passing our knowledge on to the next generation. They will continue where we left off. This is a discipline whose true shape will be molded not over years, not over decades, but over lifetimes of study and practice.