6 ms·
Programming as science: not consistent with reality IMHO. My argument is that it's pretty simple to build a good computer scientist: take a guy with good IQ and
by antirez 17y ago
Programming as science: not consistent with reality IMHO. My argument is that it's pretty simple to build a good computer scientist: take a guy with good IQ and put it into a good university. But there are zero guarantees that you'll end with a good coder also, as coding is a matter of taste, tradeoffs, design decisions, creativity, ability to think out of the box, and so forth.
The problem is that most of our industry is not ready to accept this news. There was no so important economic process like IT in the past where creativity and art had the same impact as it is happening with programming. Check the software and the sites you are enjoying every day: are they made by great scientists? The big majority are not.
But at the same time, the reverse is true. If you have good scientists you can create any complex program or system without problems. Look at all the PHDs at google, the result is a wonderful piece of technology, from the search engine itself to the cluster and other stuff they are running. But this is an engineering problem indeed, so it is a perfect fit for them.
But not everything is like that in our field. This is why for instance a big company like Google is not having a big impact in programming itself. If you see the reality most of their products for the masses are not working well, Ruby on Rails was not produced there, and so forth. It's not that I've something against Google but it is the perfect example of "company of scientists".
- gdp 17y agoI don't consider programming to be a much greater skill than the ability to install fixed wiring in a house or balance a budget. Are small business accountants "artists"? Accordingly, programming is not _currently_ a science. However, I think that is a much better position to aspire to than self-aggrandizement and glorifying a skill that is really no different than any other skill that any suitably motivated 12 year can acquire with a couple library books and an internet connection. With a science of programming, we can aspire to a position where programmers can at least claim to be engineers, and at least have good odds of most programming projects resulting in software of reasonable quality. Face it, there's good art and bad art, and it's subjective which is which. Programs have objective measures we can apply, depending on what the code is used for - developer time, performance, correctness... and a million others. We can argue about which measures are the right ones to use, but at least these measures exist. We can (with current technology) empirically evaluate a piece of code in many different ways. Actually starting to apply this kind of empirical evaluation is the first step towards programming being a science. [Edit: OK, so the parent to this was heavily edited after I posted this, but I can't be bothered rewriting this accordingly, so please excuse any incongruence between this reply and the post it is replying to]
- antirez 17y ago> With a science of programming, we can aspire to a position where programmers can at least claim to be engineers. This is not a good aspiration I think. Engineers can be replaced with not huge efforts, while you can't easily replace artists. Also this vision will lead to more bad programmers coming out from universities (if programming is an art), as the process of learning programming is totally different if you think it's a science or art. If it's a science, do CS courses. If it is an art, put them into craftsman shops to learn how to code.
- _delirium 17y agoI don't think the analogy's a very good one. If you want a housing analogy, I'd say it's more like architecture than ceiling-fan installation. And architecture has, hundreds of years later, never totally coalesced into a science. There are scientific and engineering sub-parts, but still significant "art" parts as well, and good architects are at least reasonably knowledgeable about both.
- wallflower 16y agoIf you have not yet read Stewart Brand's "How Buildings Learn", I highly recommend it. The basic premise is how the building is built determines how adaptable it is to change.
- barrkel 17y agoRadically disagree with you there. Wiring is in principle really simple - make sure the right wires are connected, insulated properly with appropriate safeguards; accounting is similar, where there are essentially only four kinds of things. Putting together a large piece of software, or optimizing a particular path in a large codebase, or putting together a creative solution to a class of problems, requires a much higher level of thinking. You need to bring together far more concepts at different levels of the abstraction stack, and have enough of them in your mind to arrange them without them interacting poorly at one level when you're coordinating them at a different level. Programming is more like building a whole new kind of house, without a plan, or altering an existing house, without it all falling down around your ears. As to subjectivity: you're wrong that software quality can be measured objectively, because of two simple facts: software isn't static - it must be modified over time - and humans are limited in their capacity for complexity. The abstraction which yields most readily to the changes that matter, such that those abstractions mesh well with those people doing the modifications, are subjectively good - their worth is dependent on the observer.
- jseliger 17y agoI realize that it can be irritating to have someone come in and split the difference, but in this case the problem seems to be that programming has some elements of art and some elements of science. So if you get people who passionately want to argue one side or the other, they argue past each other. Is an elephant chiefly long skinny parts (tusks, a trunk) or chiefly big round parts (main body)? I feel like I'm hearing the long skinny and big round people arguing with each other, when the answer is closer to "both." If you're interested in making a piano keyboard, maybe you're interested in tusks; if you're interested in eating (do people eat elephants?), maybe you're interested in the body. I think that PG in one of his essays said that CS is confusing because it's got a of people under its umbrella: some do mostly math, some are closer to artists, and some are somewhere else (I can't remember his distinctions). So the field has a lot of people saying "this is what it means," all of whom are at least somewhat correct. What is CS or programming or whatever you want to call this thing that involves making computers do stuff? On some level, the answer drifts towards "whatever you want it to be." But the flame wars are less satisfying that way.
- davidw 16y agoI think terms like 'engineering' and 'craft' point more towards what we want to describe. Programming is obviously not purely art or pure science in most cases, but a mix.
- jgg 17y ago(Note that this response isn't an attack on you specifically, it's just my feelings towards this argument in general) Where is the magical divide between "art" and "science" in the field? Do the adherents of either side even know what they're defending? If I know what a finite state machine is and how to apply it, does that make me "scientific"? If I hack together a web application in Scheme, instead of some Mathemagical, Dijkstra-approved language, does that make me an "artist"? Why can't people just accept that you need some of both to be a good programmer?
- jacquesm 17y agoTo me the art part in programming is that part which has not yet been 'beaten to death' and formalized. As soon as something is idiomatic I think it ceases to be art, but that does not diminish the artistry of the person or people that first came up with that.
- RodgerTheGreat 17y agoTo quote Theo Jansen, "The walls between art and engineering exist only in our minds." http://en.wikipedia.org/wiki/Theo_Jansen http://en.wikipedia.org/wiki/Theo_Jansen
- modokode 16y agoAnd to counter with a Donald Knuth quote, "We should continually be striving to transform every art into a science: in the process, we advance the art."
- mceachen 17y agoHere here! After witnessing N software fads with the pendulum of complexity and convention and configuration swinging to and fro, I firmly believe software crafting is much more similar to writing a book than constructing a bridge. Preferably a book without any surprising twists. Or homicides. But extra chunky bacon.
- silentbicycle 17y ago> If I hack together a web application in Scheme, instead of some Mathemagical, Dijkstra-approved language, does that make me an "artist"? Dijkstra would not have liked this.