Fred Garvin
Posts: 52
Nickname: fredgarvin
Registered: Jan, 2008
|
|
Re: Getting Dynamic Productivity in a Static Language
|
Posted: Apr 4, 2009 10:20 PM
|
|
>> it's the type system that ultimately underpins the kind >> of tooling you get with things like IDEA ... >> So I concur with Michele - "the larger the code base, >> the smaller the relevance of the language on the >> productivity.". The problems I've found are to do with >> structural complexity and behavioural unpredictability - >> things like non-locality of change, mind-numbing >> logic, lack of cohesion, monolithic codebases, >> unexplained wtfs, bad abstractions, the absence of a >> coherent "physics" for the system of the code. Plus the >> overall entropy and drag of poorly written code.
Well, if the type system is static, you have tooling, otherwise you pretty much don't. On large systems the tools make or break productivity. So claiming "the larger the codebase, the smaller the relevance of the language on productivity" seems unreasonable.
For instance, all the problems you mention: structural complexity, etc. are all reasons we have static analysis tools. Most of your examples scream "refactor" e.g., extract interface, extract method, rename, modify signature, introduce variable, replace inheritance with delegation, etc. etc. While refactoring you need to find usages of types, methods, properties, etc. And you need to look for types, declarations, etc. Even if the large system is "perfect", you can't keep it all in your head, so you need code completion. And all these features must be reasonably deterministic in order for them to be reliable. You simply cannot achieve this level of sophistication with a dynamically typed language; by definition it's not possible.
The truth is there aren't any "perfect" large systems; none that stay perfect anyway. And, as it happens, successful software is often the least "perfect". To the uninitiated it evolves in "peculiar" ways, usually under pressures of competition and deadlines. After all customers don't pay for perfect software -- they pay for features that work for *them*. So we make trade-offs; we trade an ounce of perfection for a pound of features and we do it until we can't. Some realize we can't at the right time, some don't. In any case the code must evolve in a timely and accurate way to stay competitive. Tools in capable hands are what makes this happen.
|
|