Flexible dynamic tracing tools with the power to deeply introspect the kernel, like dtrace, are necessary to observe and debug such issues in production.
This gets at a kind of philosphical divide that I find separates the dynamic and static typing camps as well. I’m reluctant to bring this up since it so often results in vitriol, but as I switch between working in dynamic languages to static languages, I see a change in culture from systems to programs. That is, those who laud dynamic languages talk about systems where as static proponents talk about programs.
To say this thought is completely fleshed out would be incorrect, but I look at with the following (admittedly incomplete) analogy with biology: static language culture is about making sure we can understand what a cell is doing, dynamic languages are about putting the cells together to make larger organisms and observing them.
I’ve gone from a love of static to dynamic and back again a few times, and now I’m of the mind that we need both. At the “cell” level I prefer static guarantees (such as they are) but there are environments where I don’t know enough about them to provide what static approaches need, so I just start throwing them together and see what happens. When throwing them together, I really value the ability to introspect and change things as they are running.
This gets at a kind of philosphical divide that I find separates the dynamic and static typing camps as well. I’m reluctant to bring this up since it so often results in vitriol, but as I switch between working in dynamic languages to static languages, I see a change in culture from systems to programs. That is, those who laud dynamic languages talk about systems where as static proponents talk about programs.
To say this thought is completely fleshed out would be incorrect, but I look at with the following (admittedly incomplete) analogy with biology: static language culture is about making sure we can understand what a cell is doing, dynamic languages are about putting the cells together to make larger organisms and observing them.
I’ve gone from a love of static to dynamic and back again a few times, and now I’m of the mind that we need both. At the “cell” level I prefer static guarantees (such as they are) but there are environments where I don’t know enough about them to provide what static approaches need, so I just start throwing them together and see what happens. When throwing them together, I really value the ability to introspect and change things as they are running.