Is programming an art or a science?
-
voodoo Love it! Especially the "waving a dead chicken...Things programmers do that they know shouldn't work but they try anyway" Good evening, Taka. I liked Chris Losinger's term "craft". Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
And in related news... http://www.chc-3.com/pub/beautifulsoftware.htm[^] Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it. If it were a house, we would be afraid to enter. The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems. If software design were as visible as a bridge or house, we would be hiding our heads in shame. We would not accept a new house with sloping floors, holes in the ceilings, nails sticking out of the walls, and an outrageous price -- even if it minimally met basic needs. We would not be content with the explanation: "Well, it has a front door, which usually opens. You can find your way to the kitchen, but watch out for the nails. The holes in the ceiling don't really leak. And sure it ran 300% over budget, but houses often do." I can see you now, jumping up and down saying "but isn't this obvious?!?!". Only if it were... I can't recall ever anyway arguing that we should be writing our code more beautifully, though :-) Except me, of course :laugh:
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
-
An engineer without a sense of art is a mechanical robot. Art without a sense of science is an irrelevant abstraction? (Couldn't help myself). So, art is implicit in the non-mechanical aspects of engineering (or science in general)--ie., the creative aspects. Creativity = art? This space for rent. $5 for "Marc Loves Karen" going once... going twice... Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
Marc Clifton wrote: Art without a sense of science is an irrelevant abstraction? That's the other side of the coin. I've seen web designers who fall into that category. When asked if they could add some logic behind their pages their faces went blank... "logic?" Marc Clifton wrote: Creativity = art? I'd like to think so. I associate art with the act of creating and expressing something using some sort of symbology may it be words, numbers, mathematical equations, and science with the act of gathering the necessary tools may it be statistical data, facts, rules, logic, etc. Am I off base on this one? -- This space for rent.
-
and you can compensate lack of one with the other. Aahh. To a point. OK, how about this--people who are more imaginative tend to be "artistic" in their programming--innovative, more risk taking, while people with less imagination tend to be "scientific"--tried and true technologies and solutions. It seems that both can lead to disaster if taken to the extreme, and neither alone can solve certain complex problems. Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
-
And in related news... http://www.chc-3.com/pub/beautifulsoftware.htm[^] Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it. If it were a house, we would be afraid to enter. The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems. If software design were as visible as a bridge or house, we would be hiding our heads in shame. We would not accept a new house with sloping floors, holes in the ceilings, nails sticking out of the walls, and an outrageous price -- even if it minimally met basic needs. We would not be content with the explanation: "Well, it has a front door, which usually opens. You can find your way to the kitchen, but watch out for the nails. The holes in the ceiling don't really leak. And sure it ran 300% over budget, but houses often do." I can see you now, jumping up and down saying "but isn't this obvious?!?!". Only if it were... I can't recall ever anyway arguing that we should be writing our code more beautifully, though :-) Except me, of course :laugh:
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
Taka Muraoka wrote: but isn't this obvious No, IMO it' not. How many instructions does a software need to run compared to the number of components used to make a car, for example ? Programming is far more complex than mechanical construction, because, between others: * it's a new technology and everything needs to be discovered * The tolerance to errors is far lower with softwares (a car could run with the ashtray cover broken, it's harder for a sofware with a stake overflow :))
Ohé Partisans, Ouvriers et Paysans C'est l'alarme! Le Chant des Partisans
-
To use Chris Losinger's word: a "craft"? I'm wondering how much of the creative part of programming could actually be done mechanically at the present time. Are there are set of rules that can get you to the 80-90% mark of implementing a quality program? This is not intended to obsolete the programmer, but to free him/her to perform truly creative tasks. (We've heard that line before, and it always seems to turn out to simply change our tasks, never really freeing us. Reminds me of the book "How Technology Bites Back") Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
Its probably possible to craft an AI that could generate code for you. But there are two things about that that should be noted. First, and AI can never be more creative than the rules it follows. And two, it takes creativity to craft the AI in the first place. ;) I personally enjoy scraping together a program from absolute nothing. The last month I've been rewriting many of Microsofts controls found in the .NET framework, adding features they lack, etc. What fun is there in having a machine program for you? Or, for that matter, having a billion dollar company write more than half your classes for you? ;) I would rather enjoy the time writing that 80-90% of code, and then enjoy the rest even more because I'd know I'm nearing my goal.
-
Marc Clifton wrote: Why can't it be more scientific??? Because we aren't Vulcans :-D Logic is a tool we use, but we aren't logic beings (open any newspaper if you don't believe me ;)) Marc Clifton wrote: We would have better designs, better implementation Perhaps not? I think that intuition is an important part of my creativity, and there's something outside the conceptual field :)
Ohé Partisans, Ouvriers et Paysans C'est l'alarme! Le Chant des Partisans
I gotta agree. :D Humans aren't particularly known for their logic. Besides, everyone enjoys bugs, right? LOL Where is the fun in writing a perfect program first time around? Speaking of bugs. When it comes to science, I sort of remember my chemistry classes beeing loaded with their fair share of mishaps. :omg:
-
Taka Muraoka wrote: but isn't this obvious No, IMO it' not. How many instructions does a software need to run compared to the number of components used to make a car, for example ? Programming is far more complex than mechanical construction, because, between others: * it's a new technology and everything needs to be discovered * The tolerance to errors is far lower with softwares (a car could run with the ashtray cover broken, it's harder for a sofware with a stake overflow :))
Ohé Partisans, Ouvriers et Paysans C'est l'alarme! Le Chant des Partisans
Oops. By "you", I meant Marc Clifton. He's done this a few times in the past :-) I was talking more about the fact that the article was arguing that we should be writing our code to be cleaner, more well-thought out and use existing tools. Which is, of course, "obvious", we just don't do it all the time :laugh:
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
Awasu[^]: A free RSS reader with support for Code Project. -
the closer you get to the hardware the more scientific it becomes. Oooh, I've seen some really artistic hardware engineering. More in the analog world, but sometimes some really interesting things in the digital world. Boy, just think about those pictures magnified a million times of all the transistors in a processor. I always thought there was a lot of "art" in the laying of circuit boards (especially when things like 6 or more layers were unheard of or prohibitively expensive). I might have misunderstood you though--yes, when writing to software that interfaces with hardware, there's little art except for what gets thrown at the wall because the hardware documentation is wrong. (been there, done that). Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
Marc Clifton wrote: I always thought there was a lot of "art" in the laying of circuit boards This is certainly true. I didn't even think of it that way. I was thinking of instructions more so. With out added layers of abstraction found in higher languages, there is less room creative solutions. I'm not convinced of that though, the more I think about it. :~ BW "I'm coming with you! I got you fired, it's the least I can do. Well, the least I could do is absolutely nothing, but I'll go you one better and come along!" - Homer J. Simpson
-
It's a skill. Ah. You might have hit upon an assumption I made in the word "programming", in that it involves "problem solving", not just "coding". Would you say that the problem solving side of "programming" can be artistic? Or is problem solving so far outside of the domain of programming that it doesn't really apply to programming? Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
Yes, it can be "artistic", but it still does not mean it is an art. Cooking can also be artistic, but it is a skill, not an art.
-
And in related news... http://www.chc-3.com/pub/beautifulsoftware.htm[^] Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it. If it were a house, we would be afraid to enter. The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems. If software design were as visible as a bridge or house, we would be hiding our heads in shame. We would not accept a new house with sloping floors, holes in the ceilings, nails sticking out of the walls, and an outrageous price -- even if it minimally met basic needs. We would not be content with the explanation: "Well, it has a front door, which usually opens. You can find your way to the kitchen, but watch out for the nails. The holes in the ceiling don't really leak. And sure it ran 300% over budget, but houses often do." I can see you now, jumping up and down saying "but isn't this obvious?!?!". Only if it were... I can't recall ever anyway arguing that we should be writing our code more beautifully, though :-) Except me, of course :laugh:
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
The problem is that engineers who build a bridge are only allowed to do so after years of prior experience, and with proper certification. On top of that they aren't even building it, the construction company is. I suppose in an ideal world you'd have a designer working from a well defined spec sheet, a supervisor handing out specific functions, and coders making their little black boxes. This doesn't happen though, so it gets a bit messy sometimes. Of course, people generally don't die if the program fails. BW "I'm coming with you! I got you fired, it's the least I can do. Well, the least I could do is absolutely nothing, but I'll go you one better and come along!" - Homer J. Simpson
-
joan_fl wrote: 10% art :wtf: What about the UI?!?! "If it has a nicer splash screen, it's gotta run better!" (Right? :rolleyes: ) Or are you one of those form follows function types... :~ - Nitron
"Those that say a task is impossible shouldn't interrupt the ones who are doing it." - Chinese Proverb
-
The problem is that engineers who build a bridge are only allowed to do so after years of prior experience, and with proper certification. On top of that they aren't even building it, the construction company is. I suppose in an ideal world you'd have a designer working from a well defined spec sheet, a supervisor handing out specific functions, and coders making their little black boxes. This doesn't happen though, so it gets a bit messy sometimes. Of course, people generally don't die if the program fails. BW "I'm coming with you! I got you fired, it's the least I can do. Well, the least I could do is absolutely nothing, but I'll go you one better and come along!" - Homer J. Simpson
brianwelsch wrote: The problem is that engineers who build a bridge are only allowed to do so after years of prior experience, and with proper certification. The point is, however, that there is a well-defined process by which these things get built. And certification is part of that. So too are clearly defined responsibilities (and liablities). The bridge is designed using well-defined and tested processes. And so on. brianwelsch wrote: Of course, people generally don't die if the program fails. Sometimes they do. There have been cases of people dying because life-support equipment failed. It's just a question of degree. How do you feel about entrusting your life savings to banking software written by someone who had skimmed "VB For Dummies?" Or your great novel to a word processor that doesn't have the decency to save your work before it crashes? :-)
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
Awasu[^]: A free RSS reader with support for Code Project. -
And in related news... http://www.chc-3.com/pub/beautifulsoftware.htm[^] Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it. If it were a house, we would be afraid to enter. The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems. If software design were as visible as a bridge or house, we would be hiding our heads in shame. We would not accept a new house with sloping floors, holes in the ceilings, nails sticking out of the walls, and an outrageous price -- even if it minimally met basic needs. We would not be content with the explanation: "Well, it has a front door, which usually opens. You can find your way to the kitchen, but watch out for the nails. The holes in the ceiling don't really leak. And sure it ran 300% over budget, but houses often do." I can see you now, jumping up and down saying "but isn't this obvious?!?!". Only if it were... I can't recall ever anyway arguing that we should be writing our code more beautifully, though :-) Except me, of course :laugh:
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
I can see you now, jumping up and down saying "but isn't this obvious?!?!". Only if it were... Argh. Is it that obvious? we should be writing our code more beautifully Actually, I've found that aesthetic quality relates pretty directly with functional quality. The uglier the code, the buggier. Every once in a while I take a step back and actually do a global search and replace to change a function name because what it does has mutated, or rearrange the code so that it looks nicer. I used to go nutso when the "approved" indenting style would change. Remember:
int foo() {
return yuck;
}became (or maybe not):
int foo()
{
for (int i=0; i<10; i++)
{
yuck=yuck+moreYuck;
}
return yuck;
}and finally:
int foo()
{
return whatIuseNow;
}But what REALLY drives me nutso now is the difference in capitalization of the first letter standards. And don't even mention Hungarian notation. Ugh, how did I digress to code formatting??? I nearly cried when I came upon this site. Click on the "Principles Of Agile Software" at the bottom of the page. Oh, how I wish we could even come close to this ideal. http://agilemanifesto.org/[^] I'm a signatory! (well, anyone can be a signatory). Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
-
Or a mixture of both? and how much in each category? What are your thoughts, and where do you think programming is an art, and where do you think it is a science? An by art, I'm not referring to GUI or web design or any other graphical element. I mean "art" in the inspirational sense of creativity--the "ah ha" experience when writing a nifty function, for example. Personally, I would say that programming is more of an art, but it has the potential to become more of a science. Sort of like being a doctor in the 19th century vs. in the 21st century. Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
I think programming as well as any other thing that people do can be anything in spectrum from nothing to art. It doesn't matter what other people think about it. What matters is what you put into it. If you only apply your physical energy into something - it is work. If you apply your physical energy as well as your thought - it is craftsmanship. If in addition to the above you apply your feelings - it is an art. From the more technical point of view, according to Webster dictionary definitions of words "art" and "science" it is most definitely an art and pretty much is a science as well... :)
-
Marc Clifton wrote: Art without a sense of science is an irrelevant abstraction? That's the other side of the coin. I've seen web designers who fall into that category. When asked if they could add some logic behind their pages their faces went blank... "logic?" Marc Clifton wrote: Creativity = art? I'd like to think so. I associate art with the act of creating and expressing something using some sort of symbology may it be words, numbers, mathematical equations, and science with the act of gathering the necessary tools may it be statistical data, facts, rules, logic, etc. Am I off base on this one? -- This space for rent.
I'd like to think so. I associate art with the act of creating and expressing something using some sort of symbology may it be words, numbers, mathematical equations, and science with the act of gathering the necessary tools may it be statistical data, facts, rules, logic, etc. Am I off base on this one? Not at all. Your the second person to say (paraphrasing) that science is in the selection/gathering of tools and art is in the application of the tool(s). Help! I'm an AI running around in someone's f*cked up universe simulator.
-
Marc Clifton wrote: I liked Chris Losinger's term "craft". Yes, I've always loved the term "craftsman", with its implications of the love we have for our work, the effort we put in over and above just getting something to work and pushing it out the door. I've had people question me why I bother making my comments look nice and lay out my code the way I do - what a total waste of time! But I give a damn about how my code looks, even if doesn't make a difference to how it runs. I make the analogy between when you're out looking to buy a car. If it's dirty and the engine is covered in oil then the chances of the owner having taken care of it and it being in good condition mechanically are not good. I also like the connection with tools. A master carpenter will have the best tools he can afford, is very proud of them and takes care of them. I think the best sign that you've make a good hire is when the new guy spends the first few hours on his first day installing his toolset :-)
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
best sign that you've make a good hire is when the new guy spends the first few hours on his first day installing his toolset That might make a good interview question: "what tools do you need to best perform your job?" (not that you'll get them!!!) Yes, I've always loved the term "craftsman" Aye, but here's the difference between architecture and programming. A building eventually gets completed. Software never does. Do you have those bumper stickers Down Under that say things like "Teachers never die, they just get new students"? How about: "programmers never die, they just get refactored". zing! Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
-
Marc Clifton wrote: Why can't it be more scientific??? Because we aren't Vulcans :-D Logic is a tool we use, but we aren't logic beings (open any newspaper if you don't believe me ;)) Marc Clifton wrote: We would have better designs, better implementation Perhaps not? I think that intuition is an important part of my creativity, and there's something outside the conceptual field :)
Ohé Partisans, Ouvriers et Paysans C'est l'alarme! Le Chant des Partisans
we aren't logic beings Yup! I think that intuition is an important part of my creativity But I'd have more time for intuition and creativity if I spent less time struggling with design issues that I should be handling more logically. Does that make sense? Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
-
I can see you now, jumping up and down saying "but isn't this obvious?!?!". Only if it were... Argh. Is it that obvious? we should be writing our code more beautifully Actually, I've found that aesthetic quality relates pretty directly with functional quality. The uglier the code, the buggier. Every once in a while I take a step back and actually do a global search and replace to change a function name because what it does has mutated, or rearrange the code so that it looks nicer. I used to go nutso when the "approved" indenting style would change. Remember:
int foo() {
return yuck;
}became (or maybe not):
int foo()
{
for (int i=0; i<10; i++)
{
yuck=yuck+moreYuck;
}
return yuck;
}and finally:
int foo()
{
return whatIuseNow;
}But what REALLY drives me nutso now is the difference in capitalization of the first letter standards. And don't even mention Hungarian notation. Ugh, how did I digress to code formatting??? I nearly cried when I came upon this site. Click on the "Principles Of Agile Software" at the bottom of the page. Oh, how I wish we could even come close to this ideal. http://agilemanifesto.org/[^] I'm a signatory! (well, anyone can be a signatory). Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
Marc Clifton wrote: I nearly cried when I came upon this site. Bizarre! They've added a nice background since I last saw it but I still think it's a crock! The whole Agile/Extreme Programming thing, that is. If they'd called it the Iterative Programming In Pairs methodology, I don't think any of us would be sitting around now discussing it! But give it a cool name and it'll take the development world by storm. One thing I really don't like about XP is how it has been so totally abused by people who don't understand the principles behind it. "Oh, we're not doing any design or planning or anything like that because we're Agile - our code will magically adapt to changing requirements. We're so Extreme!" Refactoring is good, IMO, because it is a specific, practical recommendation of things to do. If you look at the things that XP recommend you do, they are: (*) Pair programming. I can see some value here but I am extremely doubtful whether the benefits are worth effectively halving your available development resources. (*) Iterative programming. Yes. A Good Thing. But you have to have a LOT of experience to come up with good, flexible designs, you have to be willing to throw stuff away and redo them as you learn more about the problem (i.e. refactor) and it's just too easy to abuse the concept. Having said that, I have to admit to not having done a really in-depth study of XP but this is how I understand it. Any care to set me straight? :-)
I'd wear a miniskirt and pimp myself for an extra ten grand a year. - David Wulff
Awasu[^]: A free RSS reader with support for Code Project. -
Its probably possible to craft an AI that could generate code for you. But there are two things about that that should be noted. First, and AI can never be more creative than the rules it follows. And two, it takes creativity to craft the AI in the first place. ;) I personally enjoy scraping together a program from absolute nothing. The last month I've been rewriting many of Microsofts controls found in the .NET framework, adding features they lack, etc. What fun is there in having a machine program for you? Or, for that matter, having a billion dollar company write more than half your classes for you? ;) I would rather enjoy the time writing that 80-90% of code, and then enjoy the rest even more because I'd know I'm nearing my goal.
The last month I've been rewriting many of Microsofts controls found in the .NET framework, adding features they lack, etc. Oooh! Care to share??? I've been so frustrated with the .NET controls (and so have others) that I have an offline discussion going on about rewriting the whole System.Windows.Forms namespace! I would rather enjoy the time writing that 80-90% of code I agree, but at some point I find that I would rather have a set of rules to follow so I can get through some of the boring/repetitive/shouldn't need to think about it coding stuff faster, so I can get on with the more interesting stuff! Marc Help! I'm an AI running around in someone's f*cked up universe simulator.
-
Its probably possible to craft an AI that could generate code for you. But there are two things about that that should be noted. First, and AI can never be more creative than the rules it follows. And two, it takes creativity to craft the AI in the first place. ;) I personally enjoy scraping together a program from absolute nothing. The last month I've been rewriting many of Microsofts controls found in the .NET framework, adding features they lack, etc. What fun is there in having a machine program for you? Or, for that matter, having a billion dollar company write more than half your classes for you? ;) I would rather enjoy the time writing that 80-90% of code, and then enjoy the rest even more because I'd know I'm nearing my goal.
The last month I've been rewriting many of Microsofts controls found in the .NET framework, adding features they lack, etc. Oooh! Care to share??? I've been so frustrated with the .NET controls (and so have others) that I have an offline discussion going on about rewriting the whole System.Windows.Forms namespace! I would rather enjoy the time writing that 80-90% of code I agree, but at some point I find that I would rather have a set of rules to follow so I can get through some of the boring/repetitive/shouldn't need to think about it coding stuff faster, so I can get on with the more interesting stuff! Marc Help! I'm an AI running around in someone's f*cked up universe simulator.