Norris numbers
teamten.com
teamten.com
A few months back, I expressed disappointment with Google Maps' dropping of support for displaying KMZs from other servers, and my intent to put together a replacement. When I finally got around to it, I found a JS library[2] (plus plugin[3]) that allowed me to replicate what I needed in about 10 lines of JS[4]. Of course, this is more the power of leveraging a library (and public tile servers), but I think it's still instructive to my point.
[1] - http://www.paulgraham.com/power.html
[2] - http://leafletjs.com/
[3] - https://github.com/mpetazzoni/leaflet-gpx
[4] - http://hardcorehackers.com/~npsimons/photos/2014/07-13:%20Ow...
This is why so many folks love DSLs. Fully abstract and get your geometric features out early; test them and make them flexible without having to re-code anything.
The last progress report about the project was in 2011..
Interestingly I am in a position to revisit the evolution of one of the systems in the FEAST study. The key insight from FEAST was the idea of an "S-curve" where complexity overwhelms drive for features. Initial development progress is slow because the infrastructure and framework for the system is not in place, then comes rapid development then a slow down as complexity kicks in.
The reviewed system behaved like that in the study (I checked the data) and for a few years after. But then a period of explosive growth occurred, halted only by a strategic decision to move away from the platform for technology management (obsolescence of mainframes) reasons.
However, from my software architect experience I imagine that any project in the millions of lines of code would be best broken into smaller services that communicate through a common backbone.
This type of architecture would allow a large dev team to be broken into smaller groups that each focus on smaller, manageable subsets of the large code base with each subset being a service which then communicates with other subsets through a backbone.
It would require a lot of internal documentation and back and forth communication between internal teams to get the services to integrate with each other flawlessly but it shouldn't be too difficult with proper care and talent.
Certainly I found no problems in working with some of the billing systems I worked on at BT which had way way beyond 2k loc and probably around the 200k.
I recall 1400 long line if blocks in one bit of fortran 77 code :-)
But we did have a real genius as team leader
A weak man can lift a small rock. A strong man can lift a large rock. But to lift a ten ton boulder, you need a crane. Even a weak man can operate a crane, if he knows how.
Your genius is like a strong but stupid man. Maybe he or she can lift a 1400 line 'if' rock, I mean block, but that's probably the limit. Any more would require a different mode of operation -- the programming equivalent of using a crane.
The point is that people who haven't broken the 1500 line wall will write code with no structure. That's why they can't break through the wall. That's the heaviest code they can lift without assistance.
Certainly there are well structured 1500 line programs. But those overwhelmingly come from people who have broken through that limit. The people who know how to use a crane will tend to use them even for smaller projects.
Why would I go to all the trouble to use a giant crane just to lift a smallish 20 kg (40 lbs) rock? Because then I won't get tired or strain my back. So I can lift another. And another, and another. I can do this all day without breaking a sweat. The strong man is tired and sore and worn out from just a few dozen small rocks, while I'm still fresh, still going, and still able to lift multi-ton boulders.
We where doing MR back in the early 80's on the largest cluster of super mini's in the UK - dam right Cliff was a genius the project would have not worked with out him.
I thought maybe you missed the point of the article, that's all. Read it again, more closely. Perhaps then you'll see Cliff in a different light.
If you missed the point of the article and he wrote a 1400 line 'if' statement, then it's at least plausible that you're both stuck behind that first or second wall. I could easily be wrong. Then again, maybe this article has the key you need to catapult yourself far ahead of Cliff. He may well be a genius, but you could potentially be far more effective and productive. You may even be able to accomplish things that Cliff would fail at.
So, give the article another read.
So how you would deal with a really big if statement without having more sophisticated tools? The business logic must have had a very large number of conditional branches. Even if you encapsulate the instructions of each branch in their own proc, it still doesn't change the fact that you're going to have a large number of conditions.
This isn't particularly a solved problem even in modern languages. We can use all kinds of layers of abstraction to make individual units of code smaller, but it's sort of an illusion. Splatting your business logic across a dozen or more files/modules/classes whatever might make it easier to look at in a text editor but it doesn't make it easier to develop or test. If you've got complex business logic you're going to have a complex program.
A core part of the documentation was large number of A1 sheets which covered an entre wall of our office ;-)
The core of the system working out what do to with all the log records was a collection of Pl/1G.
We did have to build a lot of extra stuff you get for free nowadays we had a custom build system that you could use to build any part or the whole system written in primes JCL.
(I lean towards thinking that some non-junk DNA has been previously mistakenly classified as junk, but that junk DNA still exists in a meaningful sense. But I'm a layman, and I don't even have a strong idea of what the expert consensus is.)
For years, the prevailing assumption was simply that modules evolved because entities that were modular could respond to change more quickly, and therefore had an adaptive advantage over their non-modular competitors. But that may not be enough to explain the origin of the phenomena.
The team discovered that evolution produces modules not because they produce more adaptable designs, but because modular designs have fewer and shorter network connections, which are costly to build and maintain. As it turned out, it was enough to include a "cost of wiring" to make evolution favor modular architectures.
http://www.astrobio.net/topic/exploration/robotics-a-i/evolv...
Believing in this phenomenon has promotional value - those other guys just don't "get it." I worry that deeply internalising it bears great risk of self-delusion. Acknowledgement of this phenomenon, irrespective of whether it exists or not, may prove detrimental.
One need not heed the arguments of those lesser 2,000-liners; only a 200,000-liner possesses the je ne sais quoi to know the right choices.
The article doesn't say anything negative about novice programmers, just that these are the things we go through when we learn. I certainly went through the stages described, and I'm hitting the near-million-line projects now and wonder what happens next.