3 ms·
In theory I kind of agree with this, but reality is that most programmers never "master" the trade. Abstractions that help people get there job done by simplif
by rpledge 17y ago
In theory I kind of agree with this, but reality is that most programmers never "master" the trade. Abstractions that help people get there job done by simplifying the task are useful. Remember that not everyone is writing the Linux kernel.
I think the real value here is that to master a system one needs to look beyond the abstractions at some point.
- andreyf 17y agoSo my hypothesis is that while this is true now, it won't be once the industry matures.
- 10ren 17y agoA problem we face is that we have new abstractions every 10 years (fueled - or at least facilitated via disruptions - by Moore's Law). So it's hard to master them. If that should change it would become possible for the industry to mature in the way you suggest.
- Quarrelsome 17y agoI really hope you're wrong. The premise that after many years of the industry developing it is still unable to create effective enough abstractions that don't "leak". That's a tragic state of affairs especially when there is a still a huge amount of content to learn to achieve mastery. I personally expect a maturity of the industry to arise when we make abstractions effective enough that those with less mastery are able to construct and run their own programs with less problems.... Wait, did I just state that something like VB6 helps mature the industry? Shoot me, please ;)
- loup-vaillant 17y agoReplace "VB6" by "Haskell", and I won't. :-)
- andreyf 17y agoI expect a maturity of the industry to arise when we make [effective abstractions]. Right, that's a great way of saying what I meant. To expound: effective abstractions must be "powerful" in the sense that they let you express ideas in broad strokes, and also "clear" in the sense that they wouldn't have unexpected properties (leak). Some of the macros I've seen in PG's Arc are good examples: they're intuitive and quick to look up. The problem with macros is that they aren't very polymorphic - you can't set default variables or pass in custom key/values as you can in Python's functions, for example.
- gruseom 17y agoThe problem with macros is that they aren't very polymorphic - you can't set default variables or pass in custom key/values as you can in Python's functions, for example. You can't? I think I do this all the time (unless I'm misunderstanding). Good post, by the way. I have been thinking about similar things recently and I agree with you. The idea that we'll build up a tower of abstractions that lets us sit on top and do powerful things forever is in some ways a gigantic mistake (q.v. "The Princess and the Pea"). You can do things with smaller, simpler white-box environments that you can't do with large, complicated black-box ones. Something like this is the principle behind what Alan Kay's group is working on, too. I wonder if the industry will ever absorb this. Based on what we know of software history so far, it would probably take some kind of killer app built on top of the radically new thing.
- ntoshev 17y agoLet's take a library implementing http as an example. To be a good abstraction, it should let you retrieve a page in one line of code: page_string = urlopen('http://google.com') There are a lot of default choices made for you here: all the headers to send, to follow redirects or not, what to do with cookies returned if there are subsequent request to the same domain, etc. There is also information thrown away, like most of the response headers. You may also want to get access to the response as an I/O stream instead of loading it at once in memory. A good library will be transparent in the sense that it would let you modify each and every one of these defaults and access the information under the covers if you need to, I see no way around this even as the industry matures, or you will get into the Larry Page's sort of trouble desperately trying to modify your user agent string. I wonder if there is a generic way to make libraries as transparent as possible in a uniform way, perhaps having language support for "default" parameters and a syntax to alter them. Yes, it goes directly against encapsulation.
- andreyf 17y agoGood example. it should let you retrieve a page in one line of code Agreed, but not the property of abstractions I talk about in this post. A good library/language would let you cast the response of urlopen to whatever it is you need - a String, an IOStream, even a DOM object, maybe even do it automatically using type hinting/inference. Parameters are just an optional dict of data to go with the request, could easily be passed an optional variable.
- ntoshev 17y agoYes, the library designer have to anticipate what you could possibly need to alter and expose it as optional parameter. Just looking at how Python's urllib/urllib2 have evolved with versions shows this is no easy task (otherwise the developers of the standard lib would have get it exactly right the first time). And it gets tougher when you actually want to modify behavior (like handling http redirects). The support for modifying behavior in popular languages is basically events, inheritance / interface implementation, and composing pre-built objects to get the desired behavior. This leaves me wanting to have a better way.