можно на все это с трех позиций смотреть:
- типизация - мол вот эти weak/strong dynamic/static и т.д.
- декомпозиция/изоляция - файлы, модули, пакеты, неймспейсы. Как ты дробишь систему.
- расширяемость - хз как это назвать на самом деле, но смысл в том насколько просто поменять систему. Где с одной стороны "надо все пересобрать" и с другой стороны "realtime системы где можно на лету код менять" (тот же erlang)