2,516 karma · joined April 15, 2009
If a language can allow mutability in an area of code without allowing side effects to escape from it we can have all of the reasoning advantage that FP gives us at a level above the mutations. We can also have the performance we want.
In retail it used to be the case that you could go to the same store a month later and see the same shirt to buy. The Sears catalog [1] presented that sort of constancy for consumers. Today there's a lot of flux. Some of it actually engineered to prevent people from delaying purchasing decisions. In software we can and do introduce breaking changes for ease of maintenance, and that can be ok as long as people are used to it. It's making the choice to have a living ecosystem.
I think it's deeper than that, it's Inverse Conway's Law_. Reddit was fine before they introduced sub-reddits. It used to be a nice "not quite so tech" HN. Sub-reddits allowed very different cultures to form and easily war with each other.
Conway's Law states that systems end up with structure that mirrors the structure of the teams that design them. The inverse is true too. Social systems tend to mirror geographical (or in this case, technical) structure.
Fair enough. I did write a book on the other parts, though. https://www.amazon.com/Working-Effectively-Legacy-Michael-Fe...
"thousands of little classes everywhere and no one knows how to find the places where things really happen."
Would be nice if they had a pointer to the reason, however.
"Contract conditions should never be violated during execution of a bug-free program. Contracts are therefore typically only checked in debug mode during software development. Later at release, the contract checks are disabled to maximize performance." - https://en.wikipedia.org/wiki/Design_by_contract
I don't know if this is true in your case, but often people who object haven't spent much time working in dynamically typed languages. The readability issue is orthogonal to typing and it tends to be fine.
It's kind of like the "monad tutorial" problem in software. Everyone tries to reach for analogy for that computational structure. Although there are some decent ones, in the end, people who work with monads just have to accept the monad laws (sort of a parallel to the data that physics has on quantuum phenomena) and eventually they develop a sense of what they are independent of cafeteria trays and burritos ( http://codetojoy.blogspot.com/2009/03/monads-are-burritos.ht... )
I'm surprised this way of seeing the world isn't more wide spread. My opinion is that it should be among people who have a deep interest in science.
As a teen I read a book by Robert Anton Wilson that made an interesting point. We have experiments showing wave-like and particular-like behavior but all we have is that data and we can accept it at face value without having to impose the idea of a wave or a particle on it. "Waves" and "particles" are, like you say, analogies.
There's no particular reason the phenomena can't behave like both, and, in fact, they do. It's only a paradox if we choose to analogize. We don't have to.
As Korzybski said "the map is not the territory." Trying to resolve wave/particle duality is trying to impose one of two maps from other territories to a new one.
If we take a criticism of a technology we use as criticism of us, it's a rather unhealthy state to be in. Technologies come and go. They aren't something we should immerse our identity in.
In my experience, companies with technical founders tend to have cultures that handle this issue better.
For instance, it's no accident that we started with hundreds of thousands of small websites and ended with most traffic going to a few. Ask yourself how the internet could have been constructed that would have prevented sites like Facebook or Twitter winning the popularity contest. The 'Power Law' dynamics behind this are the same ones that lead to some airports being hubs and others not, the fact that there is a backbone rather than everything going point-to-point, and many other phenomena.
We can have decentralization but there are costs. Someone has to pay them.
As an example, just being able to think in terms of a transpose makes many problems trivial: http://michaelfeathers.silvrback.com/moving-quickly-with-com...
What I appreciate about C in particular is that it seems harder to "program by accident" than it is in most languages. C was my first language. After I learned C, I programmed in a higher level language for a while later before discovering that its runtime threw exceptions on 'array subscript out of bounds.' I discovered it by looking over someone else's shoulder in a lab. I realized then that I had just learned not to do that because C was so unforgiving.
We can argue whether the kind of discipline of thought that you gain from that experience is good or even useful today, but I suspect it is. It's different from learning how to do mental math in a world full of calculators - that's just raw mental exercise.
They are all emphasize transformation pipelines. What the array languages bring to the game is shape polymorphism and many more operators. I suspect we'll see both move into more mainstream languages over the next 5 years or so.