As you say there is pros and cons. I am not adverse to static typing but it depends on the circumstances. For a short/mid-length script it's pretty much overkill. For larger projects i prefer the clarity of static types as it not only enables the compiler to catch stupid errors but also reminds you of what kind of data your dealing with. Obviously you can also have static types that are mostly meaningless (like passing around pointers to char/uint8_t representing binary blobs of some magical size - don't do it's impossible to define a meaningful type...) but if care is taken the result is quite helpful when reading the resulting code.