Exactly. What is observation? Don't the particles in the cat's tail observe the cat's death? The cessation of the cat's metabolic processes decreases the rate at which chemical energy is being released inside the cat and turned into heat. The amount of thermal radiation from the cat is observed by the inside of the box. The amount of thermal radiation from the box is observable by anyone outside the box, too. Vibrations from the cat breathing can affect the movement of air outside the box. Vast numbers of particles in the cat, in the box, and near the box should, through tiny interactions, register the cat's death. It is impossible for the cat's death not to be observed, if observation is merely the fact of particles having different state depending on whether the cat lived or died.
Somehow, though, uncertainties that persist in isolation are collapsed through interaction. Perhaps waveforms collapse because there is a limit to how much uncertainty they can contain, or how far that uncertainty can spread before collapsing. Perhaps there is an improbability or upper limit attached to uncertainty, just like Heisenberg's uncertainty principle places an upper bound on certainty. An observer, through interacting with an uncertain phenomenon, increases the scope of the uncertainty beyond the supportable limit.
I just realized there would be a great benefit if observation really were an anthropocentric thing. Doctors could have had Terry Schiavo observe the outcome of an experiment. If the waveform didn't collapse, then she was brain-dead. If it collapsed, then she must have been sentient to "observe" the experiment. A quantum mechanical experiment could be attached to a probe and used to test whether a woman's fetus was sentient, to decide whether she could have an abortion.
If the criterion for observation were life, rather than sentience, we could let a virus observe the experiment and finally settle that question once and for all.
Hey, stop clearing this up. Future physics funding may depend on how well physics flatters people. If they're eager to embrace an anthropocentric misunderstanding of "observation," let them.
It would only be philosophical profound if the "observer" had to be a sentient being of some kind. In experimental quantum mechanics, the "observer" is the experiment's sensor[s]. If the equipment is set up to write the data into a file, QM doesn't predict that the existence of the phenomena being measured depends on whether a sentient being ever opens the file and looks at the data. (It also doesn't depend on whether the filesystem is full, preventing the data from being written, etc.) The act of observation has already been performed by the sensor that generated the data, or the particle that the sensor captured, or maybe something else.
Exactly what constitutes "observation" is a fascinating question that I wish I knew more about, but as far as I know, there's no reason yet to suspect that sentience has anything to do with it.
But the idea that observables only exist when observed is, while appealing to very small children still undergoing psychological development, plain rubbish.
I wouldn't go so far as to call it "rubbish," but there's no support for it. Its appeal is purely philosophical, and its philosophical appeal is purely psychological, and the psychological reasons are, like you said, childish. When physicists started stretching the meaning of "observation" -- purely as a linguistic convenience -- the public loved it, because it made them the center of the universe. I don't think physicists seriously believe that the experimental sensors display different values depending on whether anybody is looking. The sensors are the observers. The idea that sticking your sensors into a situation changes what happens there is very cool when you understand the physics, but its appeal to the general public depends on the public's anthropocentric misunderstanding of it.
Niggles aside, I'd like to point out for you that most modern apps will auto-save your open documents every 10 minutes by default
If Word ever crashed on me, I would know that.
The day I feel pride in creating something inefficient that caters solely to my own laziness, I think I'll move to the USA and start slurring my speech.
Let's see, throwing away my badass code I'm so proud of and writing new code to replace it because it will mean less work in the long term for whoever maintains the application. Yep, that's the kind of laziness I can be proud of. I don't know where you get the idea that a programmer is either optimizing code or goofing off, but let me assure you, I can work a long hard week and not optimize a single loop.
You know, I wish people did still learn Latin.
People still do learn Latin. I took four years of Latin in high school. I think there are more people learning Latin in the U.S. now than twenty years ago. If you're wondering why I assumed you were getting on in years, I got it from your cranky attitude that everything is getting worse and people are getting stupider and lazier. You're acting like an old geezer who feels left out and left behind.
Obvious? I'm a programmer, and off the top of my head, I couldn't tell which of those is pegged to memory bandwidth. I would guess that the first probably stresses branch prediction and cache size, the second stresses floating-point vector operations, and the third stresses integer vector operations. I probably got at least one of those wrong. Consumers would need a guide to help them pick which rating to use.
Not to mention that those numbers don't depend solely on the CPU. Only whole systems can be benchmarked. The specs of the benchmarked system would have to be printed on the box, too. It would also be helpful to see benchmarks for multiprocessor systems, since different CPUs have different support for multiprocessing.
Having a small, standard set of benchmarks would also lead to inevitable market distortions as companies made engineering decisions based on how they affected the benchmarks.
On the other hand, there are very nice theoretical systems for CS, programmers just choose to ignore them.
You're absolutely correct. My best guess as to why this is the case in computer science: Theory is taught. Practice is taught. Applying theory to practice is preached. It isn't recognized as a skill that should be demonstrated by teachers and practiced by students; it doesn't appear on any syllabus, so no teacher budgets any time for it. In the classroom, teachers of theoretical CS subjects might mention practical applications but never execute them. To save time, teachers of practical CS subjects refer to the inevitable conclusions of theoretical analyses, without actually carrying out the analyses. As a result, students believe that the connection between theory and practice is a pious pretense that normal people don't bother living up to, like premarital abstinence.
hey that looks great on paper until you realize that today's hardware and software often work slower than 10 years ago. Sure they have a gazillion features, but they can't get the basics right. Word processing, spreadsheets, email... these are things that haven't changed much in a decade.
Those apps have changed. They have to change. Nobody wants the old ones. Funny how that works, eh? A clone of Microsoft Word 2.0, which I used in high school, would be fast, efficient, adequate for virtually all usage, and commercially worthless. You and I may want the old fast versions, but I haven't noticed anybody developing software just for me. (I keep waiting for that to happen. I also want a cell phone without a friggin' camera. And get those kids off my damn lawn.)
Those old apps weren't that responsive anyway, and they were incredibly unstable by today's standards. I'm younger than you, but I'm old enough to remember when saving your work every ten minutes was just common sense. These days that would be a neurosis. Maybe that has something to do with simpler, less-efficient code?
Actually, I haven't noticed anything of equivalent complexity that runs worse today than it did ten years ago. I do notice is that the market for old, well-understood kinds of applications is dominated by the apps with the most features, so those apps aren't comparable to their predecessors of ten years ago. If you want to compare like with like, compare emacs today with emacs ten years ago. Compare gcc with gcc. It turns out this nifty new hardware is really smokin' fast!
Yes, it does mean you have to be a bit more diligent about alloc/free, but as a professional software developer, you should be perfectly fine with it.
No, I'm not fine with it. My brainpower, as copious as it is, is the most precious resource I have. Sure, I can handle memory allocation. Right now I do most of my programming in C++, with a bit of Python here and there. Sometimes I have to use the heap, and that means making sure my objects get deleted. Fine. I've had two or three memory leaks in over three years of work as primary developer on a C++ application, and only one made it into production, where it had a minimal impact. (Thank you, smart pointers.) That doesn't mean manual memory management is a good use of my time. Sure, it used to be a good idea, back in the day. Back in the day, people checked the oil in their cars a few times per month. If it were good to submit yourself to every possible discipline that used to be prudent, no matter what the present-day benefit, we'd all be checking our oil once a week, practicing martial arts, learning Latin, and swearing fealty to a feudal lord. Those things might be good fun and beneficial for our personal development, but neglecting them no longer entails unacceptable consequences.
You said yourself that extraordinary effort was put into optimization because it was the only way to make programs run acceptably fast. Well, that reason doesn't exist any more. You need a new reason. A good programmer invests his effort where he'll get the greatest return. A good programmer knows that meticulously pairing new and delete costs time and brainpower. (A good programmer also knows that meticulously pairing new and delete restricts his design space, sometimes precluding the simplest, most elegant design. Again, thank God for smart pointers.)
A lot of people regret the passing of the exigencies that forced them to come of age and learn discipline. For you, the exigency was meager hardware, and your measure of discipline is tight code. For the current generation, the exigency is complexity, and the measure of discipline is simplicity. Twenty years ago, restraint meant being frugal with machine resources, even when it caused you hardship. Today, restraint means being frugal with mental resources, including our own, even when it causes us hardship. It isn't all wine and roses. Imagine
The problem with what you say is that many theoretical results are of no particular beauty or interest except in the implied context of application. If they are never successfully applied, then they turn out to be nothing but ugly, boring math. If you want to do math, you'd better make sure it's either beautiful or useful.
I think it would be tragic to have a single official set of benchmarks, because the standard would be subject to political manipulation, slow to adapt to new kinds of usage, or both. Forcing companies to provide fair and accurate information about something so murky and contentious is extremely problematic, and it's likely that the result would be worse than useless.
If there's demand for consumer-friendly ratings, experts should create simple web-based wizards that ask a few questions about application usage and price range and spit out a list of customized rankings. Even a mediocre attempt at customization would be better than any uniform rating system. Consumers would have to assess the credibility of the various experts, but that's better than the alternative of creating a government-approved set of numbers to be used as a political football.
Programmers are sloppy, because sloppy is all the industry wants to pay for.... The problem is that somehow, people now tolerate underperforming software.
Bottom line: there's no sense in writing software for old hardware if the extra cost of tweaking the software exceeds the cost of buying new hardware.
Besides, if you were able to convince the industry to pay more for one thing, would it be performance? You, as a customer, can improve performance by upgrading hardware. You can't easily improve reliability or usability, though. What you mean by "sloppy" is the use of safe languages, garbage collection, straightforward (rather than optimized) code, and other conveniences that result in developers spending less time on basic coding and more time on testing, redesigning, and adding features. Many apps that are pretty well-polished in terms of usability and reliability would be less usable and less reliable if the managers or programmers had insisted on "tight" code from the beginning. Yeah, I used an associative data structure from a standard library when I could have used a fixed-size array for only fifty extra lines of code. If it doesn't create a scaling problem, so what? The time I saved means more time for finding and fixing defects, and I may have actually prevented a defect or two by making my source code smaller and clearer. Many performance problems turn out to be bugs or misfeatures anyway -- think Firefox. The fewer critical bugs in the application, the sooner the performance bugs get fixed.
The flip coin of this is of course that a self-supporting woman is more likely to leave the couple for any reason.
I see that as a good thing. The non-self-supporting woman is more likely to stay and cheat, and justify the cheating out of her abundant sense of entitlement. Or she'll just stay, resent you, and make you pay somehow -- maybe by spending enough to thwart all your hopes and dreams.
Most parents think they're among the very best parents in the world, and they're almost all wrong, but I don't think that's why they chose to have kids in the first place. I don't have kids myself, so I don't really know. If that's why people have kids, then for most people it's the biggest misjudgment they'll ever make.
Second, I don't think I need to appreciate the efforts of everyone who's underpaid and abused with their consent. I only appreciate such people when they do so in order to perform a service they feel that society undervalues, like teaching and social services. Corporations do not undervalue email and internet access. They would gladly pay two or three times what they currently cost, and anyone who doubts that has been bluffed. There is no virtue in being an underpaid IT geek.
Yeah, it makes you appreciate the women who do feel an obligation to work and support themselves, because it's a self-imposed obligation. I know guys with live-in girlfriends with college degrees who are theoretically self-supporting but who only work the equivalent of two or three full-time months per year because of their long stints of extremely part-time work and their occasional efforts to gain credentials in one professional field or another, which always end in disinterest shortly before they reach fruition. All of this is funded by the boyfriends, of course, who also put up with hints or outright complaints about the couple's inability to keep up with the Joneses.
Screw that! As with most problems of this type, arguing is futile. Just find a girl who doesn't act that way and show her plenty of appreciation.
It might be why some European countries face nursing shortages and depend heavily on immigrants from poor countries. It might also be why turnover is so high, even though nursing pays well relative to the level of education required.
You don't get it. The "challenging" working conditions make me feel super hard core, like an elite commando, and the long hours protect me from exposure to my cooler, better-paid age peers. If it were just another low-paying job, and I had to invent excuses to stay in front of a computer all evening, I'd feel... not very smart and successful.
Re:I thought IT workers can telecommute to work?
on
Women Are Fleeing IT Jobs
·
· Score: 4, Insightful
Maybe this means that women are smarter? They know when to bow out of a stupid job like this.
First thing I thought: Men are easy to trick into thinking, "I work sixty hours a week for a wage that barely supports my lower-middle-class lifestyle, but I'm AWESOME! I'm a Perl NINJA!"
How many IT guys work crappy jobs for crappy pay because the work makes them feel smart and powerful? The only women I can think of who do similar things are models, who work a crappy job for crappy pay for similar delusions of status.
I concur. This is probably my largest pet peeve with web sites. It seems like such a simple thing to test and notice, but apparently not.
Um, as a web-literate (well, HTTP- and XML-literate) software developer who knows nothing about HTML/CSS, may I ask why this is something you have to TEST? There's no way to write a web page and know that stuff like that won't happen? Who the hell tolerates that kind of programming environment? My interest in learning the web presentation layer just crawled in a corner and died.
On the contrary, I think people with good programming taste will be driven away by an intro course using Java. Java is not needlessly complex; it is complex because of engineering trade-offs that can't be explained to beginners. A good programmer is grossed out by complexity that can't be explained and justified. Doing simple programming exercises in Java is ugly and unpleasant, because Java's beauty depends on the context it was designed for.
Someone who has no trouble accepting Java without understanding the problems Java was designed to solve, or with a little hand-waving from the professor about object-oriented programming, is not a good candidate for computer science. Such a person might do a good job working on other people's systems but does not have the right instincts to design systems himself.
I agree with you to a certain extent, but I don't agree that computer science education is to blame. Girls don't feel free to enter hard-core technical roles. They only enter a technical field in large numbers when society gives them special permission by advertising soft, non-nerdy roles inside that field. Only a minority of engineering graduates end up doing design work; most end up in human-centric roles like management, sales, support, and training.
How many mechanical engineers say they're in the field because they "love metal?" How many civil engineers enter the field because they "love cement?" How may computer science majors love computers? How many engineers say they just want to enter a stable profession where they can make a good living, versus how many computer science graduates? Now you see the difference, and why it's okay for women to be engineers, but not computer scientists. You can also see why female enrollment in computer science surged when there was an image of CS as a lucrative career path and fell when it went back to being a field for enthusiasts. Woman aren't allowed to love technical work.
This is not an idea constructed by people who love science and technology. I've heard all my life that mathematicians, computer geeks, and other nerds are good at what they do because of their social deficits. Basically, we were told that our skills are just symptoms of disability. We were told that to succeed in scientific fields, you have to give up your humanity, and therefore scientific fields were full of people who didn't have much humanity to begin with.
Most importantly, we were told that women did not suffer from this tendency toward inhumanity that men did. It doesn't take a social critic to see that women would parse that argument as saying that nerdiness is a defect that is tolerated in men but unthinkable in women.
This stigma was intentionally created by humanities types who thought the influence of science and technology on society was too strong, and the prestige of science and technology too high. They were fighting an ad hominem battle to regain the influence they thought they were losing.
Now their argument has succeeded, and it is restricting the freedom of women to pursue fields they enjoy. Instead of setting women free from this stigma, some people want to preserve and perpetuate it. They see women's lack of interest in technology as a wonderful thing that makes women better than men and gives them a special role in society. The whole idea of making computer science "attractive" to women is just a way to avoid dismantling this sexist idea. Instead, let's give women permission to be attracted to hard-core technical problems that appeal to their intellect instead of appealing to their supposedly "feminine" side. Let's not elevate/insult women by saying they can't derive intrinsic pleasure from solving technical problems, and can only be interested in helping people, saving the world, and nurturing children.
I agree 100% about Java. I love Java as a language, but it's designed to solve the problems of rapid, large-scale software development. Nothing in it makes sense unless you understand those problems. If any beginning programmer says that Java is not a confusing, senselessly baroque way to program, then they are either lying, stupid, or perverse.
I do think Scheme would be a wonderful first language, though, at least for mathematically oriented folks. Python is probably the best choice for a broad audience.
Programming is a ubiquitous facet of computing because it turns out to be the means for all hands-on work. Programming in computing is like writing in history; it isn't the point, but it's essential in large quantities if you want a good education. Nobody should get a computer science degree just because they like cranking out lines of code; they need to like computer science, too.
(Why is programming ubiquitous? Code is the only interface rich enough to specify interesting things. When the interface is reduced to point-and-click and data import, that means the computing problems have been solved -- someone else has made all the important computing decisions, and only domain problems remain. Across many broad areas of computing, writing code of one sort or another (SQL, VHDL, software programming languages, HTML, application-specific languages) turns out to be the best way to transform your ideas into a working system.)
That doesn't mean that CS is about programming; that idea is a common attitude among new students and a point of view heavily promoted by the software industry, which wants to turn every college into a factory for Java monkeys, but it is most definitely not an attitude promoted from within the discipline of computer science. Programming is everywhere because it tends to be the only way to put computer science knowledge into practice, not for any other reason.
I don't agree that modeling and simulation are part of computer science. Modeling and simulation are usually done using computers, and there are technical challenges associated with implementing them on computers -- that's the CS part. Once those challenges are surmounted, the remaining problems of modeling systems, building simulations, and analyzing data are universal problems tackled by biologists, geographers, sociologists, historians, and so on. Computer science can't claim to have any deeper understanding of these problems than any other discipline. It would be like the forestry department claiming special knowledge of sketching because pencils are made of wood. The math department has a much stronger claim, and they (modestly and sensibly) limit themselves to developing and teaching powerful mathematical techniques that assist in those activities, rather than claiming the entire activity as their domain.
When you remove programming, most things become either theoretical (still CS) or a domain problem (not CS.) I guess it's understandable for people to be misled by the amount of programming CS students do. Maybe CS departments should explain to prospective students that programming has the same relationship to computing that writing has to history. If you can't tolerate writing, don't major in history. If you don't love writing, that's no problem, you only need to love history. Same thing with CS. You don't need to love programming, you just need to tolerate large amounts of it.
That is a different vision from one focused on optimization and language development - it is one focused on simulation and modelling (and perhaps on data collection)
People in all kinds of fields learn those skills. You might as well get a degree in physics or biology so you can learn that stuff AND learn about a field of study.
Computer science students shouldn't be allowed to fall behind other disciplines in their practice of data analysis, but they shouldn't be encouraged to see it as "computer science." They should see it as a fundamental skill that many college graduates need to have. A specialist in data analysis would be bettor off as a stats major than a CS major.
Never confuse "doing cool stuff with a computer" with studying computer science. Many, many people in different fields are doing amazing and valuable stuff with computers. That isn't what makes computer science a unique and separate field of study.
With less emphasis on literature and more emphasis on running the projector!
Seriously, I hope they're not trying to make CS into a department that turns out super-savvy users. Many other undergraduates departments turn out large numbers of very sophisticated computer users who can do neat stuff with data and graphics. If that's what CS becomes -- using programs written by other people to do interesting, valuable stuff -- then you should get one of those other degrees so you acquire knowledge of a field along with your computer skills.
Programming, systems, and the theory behind both are what computer science is about. Using computers is a basic function of any educated person.
Once I corner these "educated" people on the technical facts they start trying to weasle out of the dicussion by bringing up psychoacoustics and claiming that technical accuracy is some how not important because of how humans perceive audio.
I know nothing about audio, but I do think it's funny that audiophiles spend half the time bragging about the fidelity of their system and the other half talking about how "cold" and "sterile" the higher-tech, more accurate systems sound.
Exactly. What is observation? Don't the particles in the cat's tail observe the cat's death? The cessation of the cat's metabolic processes decreases the rate at which chemical energy is being released inside the cat and turned into heat. The amount of thermal radiation from the cat is observed by the inside of the box. The amount of thermal radiation from the box is observable by anyone outside the box, too. Vibrations from the cat breathing can affect the movement of air outside the box. Vast numbers of particles in the cat, in the box, and near the box should, through tiny interactions, register the cat's death. It is impossible for the cat's death not to be observed, if observation is merely the fact of particles having different state depending on whether the cat lived or died.
Somehow, though, uncertainties that persist in isolation are collapsed through interaction. Perhaps waveforms collapse because there is a limit to how much uncertainty they can contain, or how far that uncertainty can spread before collapsing. Perhaps there is an improbability or upper limit attached to uncertainty, just like Heisenberg's uncertainty principle places an upper bound on certainty. An observer, through interacting with an uncertain phenomenon, increases the scope of the uncertainty beyond the supportable limit.
I just realized there would be a great benefit if observation really were an anthropocentric thing. Doctors could have had Terry Schiavo observe the outcome of an experiment. If the waveform didn't collapse, then she was brain-dead. If it collapsed, then she must have been sentient to "observe" the experiment. A quantum mechanical experiment could be attached to a probe and used to test whether a woman's fetus was sentient, to decide whether she could have an abortion.
If the criterion for observation were life, rather than sentience, we could let a virus observe the experiment and finally settle that question once and for all.
Hey, stop clearing this up. Future physics funding may depend on how well physics flatters people. If they're eager to embrace an anthropocentric misunderstanding of "observation," let them.
It would only be philosophical profound if the "observer" had to be a sentient being of some kind. In experimental quantum mechanics, the "observer" is the experiment's sensor[s]. If the equipment is set up to write the data into a file, QM doesn't predict that the existence of the phenomena being measured depends on whether a sentient being ever opens the file and looks at the data. (It also doesn't depend on whether the filesystem is full, preventing the data from being written, etc.) The act of observation has already been performed by the sensor that generated the data, or the particle that the sensor captured, or maybe something else.
Exactly what constitutes "observation" is a fascinating question that I wish I knew more about, but as far as I know, there's no reason yet to suspect that sentience has anything to do with it.
I wouldn't go so far as to call it "rubbish," but there's no support for it. Its appeal is purely philosophical, and its philosophical appeal is purely psychological, and the psychological reasons are, like you said, childish. When physicists started stretching the meaning of "observation" -- purely as a linguistic convenience -- the public loved it, because it made them the center of the universe. I don't think physicists seriously believe that the experimental sensors display different values depending on whether anybody is looking. The sensors are the observers. The idea that sticking your sensors into a situation changes what happens there is very cool when you understand the physics, but its appeal to the general public depends on the public's anthropocentric misunderstanding of it.
If Word ever crashed on me, I would know that.
Let's see, throwing away my badass code I'm so proud of and writing new code to replace it because it will mean less work in the long term for whoever maintains the application. Yep, that's the kind of laziness I can be proud of. I don't know where you get the idea that a programmer is either optimizing code or goofing off, but let me assure you, I can work a long hard week and not optimize a single loop.
People still do learn Latin. I took four years of Latin in high school. I think there are more people learning Latin in the U.S. now than twenty years ago. If you're wondering why I assumed you were getting on in years, I got it from your cranky attitude that everything is getting worse and people are getting stupider and lazier. You're acting like an old geezer who feels left out and left behind.
Obvious? I'm a programmer, and off the top of my head, I couldn't tell which of those is pegged to memory bandwidth. I would guess that the first probably stresses branch prediction and cache size, the second stresses floating-point vector operations, and the third stresses integer vector operations. I probably got at least one of those wrong. Consumers would need a guide to help them pick which rating to use.
Not to mention that those numbers don't depend solely on the CPU. Only whole systems can be benchmarked. The specs of the benchmarked system would have to be printed on the box, too. It would also be helpful to see benchmarks for multiprocessor systems, since different CPUs have different support for multiprocessing.
Having a small, standard set of benchmarks would also lead to inevitable market distortions as companies made engineering decisions based on how they affected the benchmarks.
You're absolutely correct. My best guess as to why this is the case in computer science: Theory is taught. Practice is taught. Applying theory to practice is preached. It isn't recognized as a skill that should be demonstrated by teachers and practiced by students; it doesn't appear on any syllabus, so no teacher budgets any time for it. In the classroom, teachers of theoretical CS subjects might mention practical applications but never execute them. To save time, teachers of practical CS subjects refer to the inevitable conclusions of theoretical analyses, without actually carrying out the analyses. As a result, students believe that the connection between theory and practice is a pious pretense that normal people don't bother living up to, like premarital abstinence.
Those apps have changed. They have to change. Nobody wants the old ones. Funny how that works, eh? A clone of Microsoft Word 2.0, which I used in high school, would be fast, efficient, adequate for virtually all usage, and commercially worthless. You and I may want the old fast versions, but I haven't noticed anybody developing software just for me. (I keep waiting for that to happen. I also want a cell phone without a friggin' camera. And get those kids off my damn lawn.)
Those old apps weren't that responsive anyway, and they were incredibly unstable by today's standards. I'm younger than you, but I'm old enough to remember when saving your work every ten minutes was just common sense. These days that would be a neurosis. Maybe that has something to do with simpler, less-efficient code?
Actually, I haven't noticed anything of equivalent complexity that runs worse today than it did ten years ago. I do notice is that the market for old, well-understood kinds of applications is dominated by the apps with the most features, so those apps aren't comparable to their predecessors of ten years ago. If you want to compare like with like, compare emacs today with emacs ten years ago. Compare gcc with gcc. It turns out this nifty new hardware is really smokin' fast!
No, I'm not fine with it. My brainpower, as copious as it is, is the most precious resource I have. Sure, I can handle memory allocation. Right now I do most of my programming in C++, with a bit of Python here and there. Sometimes I have to use the heap, and that means making sure my objects get deleted. Fine. I've had two or three memory leaks in over three years of work as primary developer on a C++ application, and only one made it into production, where it had a minimal impact. (Thank you, smart pointers.) That doesn't mean manual memory management is a good use of my time. Sure, it used to be a good idea, back in the day. Back in the day, people checked the oil in their cars a few times per month. If it were good to submit yourself to every possible discipline that used to be prudent, no matter what the present-day benefit, we'd all be checking our oil once a week, practicing martial arts, learning Latin, and swearing fealty to a feudal lord. Those things might be good fun and beneficial for our personal development, but neglecting them no longer entails unacceptable consequences.
You said yourself that extraordinary effort was put into optimization because it was the only way to make programs run acceptably fast. Well, that reason doesn't exist any more. You need a new reason. A good programmer invests his effort where he'll get the greatest return. A good programmer knows that meticulously pairing new and delete costs time and brainpower. (A good programmer also knows that meticulously pairing new and delete restricts his design space, sometimes precluding the simplest, most elegant design. Again, thank God for smart pointers.)
A lot of people regret the passing of the exigencies that forced them to come of age and learn discipline. For you, the exigency was meager hardware, and your measure of discipline is tight code. For the current generation, the exigency is complexity, and the measure of discipline is simplicity. Twenty years ago, restraint meant being frugal with machine resources, even when it caused you hardship. Today, restraint means being frugal with mental resources, including our own, even when it causes us hardship. It isn't all wine and roses. Imagine
The problem with what you say is that many theoretical results are of no particular beauty or interest except in the implied context of application. If they are never successfully applied, then they turn out to be nothing but ugly, boring math. If you want to do math, you'd better make sure it's either beautiful or useful.
I think it would be tragic to have a single official set of benchmarks, because the standard would be subject to political manipulation, slow to adapt to new kinds of usage, or both. Forcing companies to provide fair and accurate information about something so murky and contentious is extremely problematic, and it's likely that the result would be worse than useless.
If there's demand for consumer-friendly ratings, experts should create simple web-based wizards that ask a few questions about application usage and price range and spit out a list of customized rankings. Even a mediocre attempt at customization would be better than any uniform rating system. Consumers would have to assess the credibility of the various experts, but that's better than the alternative of creating a government-approved set of numbers to be used as a political football.
Bottom line: there's no sense in writing software for old hardware if the extra cost of tweaking the software exceeds the cost of buying new hardware.
Besides, if you were able to convince the industry to pay more for one thing, would it be performance? You, as a customer, can improve performance by upgrading hardware. You can't easily improve reliability or usability, though. What you mean by "sloppy" is the use of safe languages, garbage collection, straightforward (rather than optimized) code, and other conveniences that result in developers spending less time on basic coding and more time on testing, redesigning, and adding features. Many apps that are pretty well-polished in terms of usability and reliability would be less usable and less reliable if the managers or programmers had insisted on "tight" code from the beginning. Yeah, I used an associative data structure from a standard library when I could have used a fixed-size array for only fifty extra lines of code. If it doesn't create a scaling problem, so what? The time I saved means more time for finding and fixing defects, and I may have actually prevented a defect or two by making my source code smaller and clearer. Many performance problems turn out to be bugs or misfeatures anyway -- think Firefox. The fewer critical bugs in the application, the sooner the performance bugs get fixed.
Most parents think they're among the very best parents in the world, and they're almost all wrong, but I don't think that's why they chose to have kids in the first place. I don't have kids myself, so I don't really know. If that's why people have kids, then for most people it's the biggest misjudgment they'll ever make.
Second, I don't think I need to appreciate the efforts of everyone who's underpaid and abused with their consent. I only appreciate such people when they do so in order to perform a service they feel that society undervalues, like teaching and social services. Corporations do not undervalue email and internet access. They would gladly pay two or three times what they currently cost, and anyone who doubts that has been bluffed. There is no virtue in being an underpaid IT geek.
Yeah, it makes you appreciate the women who do feel an obligation to work and support themselves, because it's a self-imposed obligation. I know guys with live-in girlfriends with college degrees who are theoretically self-supporting but who only work the equivalent of two or three full-time months per year because of their long stints of extremely part-time work and their occasional efforts to gain credentials in one professional field or another, which always end in disinterest shortly before they reach fruition. All of this is funded by the boyfriends, of course, who also put up with hints or outright complaints about the couple's inability to keep up with the Joneses.
Screw that! As with most problems of this type, arguing is futile. Just find a girl who doesn't act that way and show her plenty of appreciation.
It might be why some European countries face nursing shortages and depend heavily on immigrants from poor countries. It might also be why turnover is so high, even though nursing pays well relative to the level of education required.
You don't get it. The "challenging" working conditions make me feel super hard core, like an elite commando, and the long hours protect me from exposure to my cooler, better-paid age peers. If it were just another low-paying job, and I had to invent excuses to stay in front of a computer all evening, I'd feel... not very smart and successful.
First thing I thought: Men are easy to trick into thinking, "I work sixty hours a week for a wage that barely supports my lower-middle-class lifestyle, but I'm AWESOME! I'm a Perl NINJA!"
How many IT guys work crappy jobs for crappy pay because the work makes them feel smart and powerful? The only women I can think of who do similar things are models, who work a crappy job for crappy pay for similar delusions of status.
Um, as a web-literate (well, HTTP- and XML-literate) software developer who knows nothing about HTML/CSS, may I ask why this is something you have to TEST? There's no way to write a web page and know that stuff like that won't happen? Who the hell tolerates that kind of programming environment? My interest in learning the web presentation layer just crawled in a corner and died.
On the contrary, I think people with good programming taste will be driven away by an intro course using Java. Java is not needlessly complex; it is complex because of engineering trade-offs that can't be explained to beginners. A good programmer is grossed out by complexity that can't be explained and justified. Doing simple programming exercises in Java is ugly and unpleasant, because Java's beauty depends on the context it was designed for.
Someone who has no trouble accepting Java without understanding the problems Java was designed to solve, or with a little hand-waving from the professor about object-oriented programming, is not a good candidate for computer science. Such a person might do a good job working on other people's systems but does not have the right instincts to design systems himself.
I agree with you to a certain extent, but I don't agree that computer science education is to blame. Girls don't feel free to enter hard-core technical roles. They only enter a technical field in large numbers when society gives them special permission by advertising soft, non-nerdy roles inside that field. Only a minority of engineering graduates end up doing design work; most end up in human-centric roles like management, sales, support, and training.
How many mechanical engineers say they're in the field because they "love metal?" How many civil engineers enter the field because they "love cement?" How may computer science majors love computers? How many engineers say they just want to enter a stable profession where they can make a good living, versus how many computer science graduates? Now you see the difference, and why it's okay for women to be engineers, but not computer scientists. You can also see why female enrollment in computer science surged when there was an image of CS as a lucrative career path and fell when it went back to being a field for enthusiasts. Woman aren't allowed to love technical work.
This is not an idea constructed by people who love science and technology. I've heard all my life that mathematicians, computer geeks, and other nerds are good at what they do because of their social deficits. Basically, we were told that our skills are just symptoms of disability. We were told that to succeed in scientific fields, you have to give up your humanity, and therefore scientific fields were full of people who didn't have much humanity to begin with.
Most importantly, we were told that women did not suffer from this tendency toward inhumanity that men did. It doesn't take a social critic to see that women would parse that argument as saying that nerdiness is a defect that is tolerated in men but unthinkable in women.
This stigma was intentionally created by humanities types who thought the influence of science and technology on society was too strong, and the prestige of science and technology too high. They were fighting an ad hominem battle to regain the influence they thought they were losing.
Now their argument has succeeded, and it is restricting the freedom of women to pursue fields they enjoy. Instead of setting women free from this stigma, some people want to preserve and perpetuate it. They see women's lack of interest in technology as a wonderful thing that makes women better than men and gives them a special role in society. The whole idea of making computer science "attractive" to women is just a way to avoid dismantling this sexist idea. Instead, let's give women permission to be attracted to hard-core technical problems that appeal to their intellect instead of appealing to their supposedly "feminine" side. Let's not elevate/insult women by saying they can't derive intrinsic pleasure from solving technical problems, and can only be interested in helping people, saving the world, and nurturing children.
I agree 100% about Java. I love Java as a language, but it's designed to solve the problems of rapid, large-scale software development. Nothing in it makes sense unless you understand those problems. If any beginning programmer says that Java is not a confusing, senselessly baroque way to program, then they are either lying, stupid, or perverse.
I do think Scheme would be a wonderful first language, though, at least for mathematically oriented folks. Python is probably the best choice for a broad audience.
Programming is a ubiquitous facet of computing because it turns out to be the means for all hands-on work. Programming in computing is like writing in history; it isn't the point, but it's essential in large quantities if you want a good education. Nobody should get a computer science degree just because they like cranking out lines of code; they need to like computer science, too.
(Why is programming ubiquitous? Code is the only interface rich enough to specify interesting things. When the interface is reduced to point-and-click and data import, that means the computing problems have been solved -- someone else has made all the important computing decisions, and only domain problems remain. Across many broad areas of computing, writing code of one sort or another (SQL, VHDL, software programming languages, HTML, application-specific languages) turns out to be the best way to transform your ideas into a working system.)
That doesn't mean that CS is about programming; that idea is a common attitude among new students and a point of view heavily promoted by the software industry, which wants to turn every college into a factory for Java monkeys, but it is most definitely not an attitude promoted from within the discipline of computer science. Programming is everywhere because it tends to be the only way to put computer science knowledge into practice, not for any other reason.
I don't agree that modeling and simulation are part of computer science. Modeling and simulation are usually done using computers, and there are technical challenges associated with implementing them on computers -- that's the CS part. Once those challenges are surmounted, the remaining problems of modeling systems, building simulations, and analyzing data are universal problems tackled by biologists, geographers, sociologists, historians, and so on. Computer science can't claim to have any deeper understanding of these problems than any other discipline. It would be like the forestry department claiming special knowledge of sketching because pencils are made of wood. The math department has a much stronger claim, and they (modestly and sensibly) limit themselves to developing and teaching powerful mathematical techniques that assist in those activities, rather than claiming the entire activity as their domain.
When you remove programming, most things become either theoretical (still CS) or a domain problem (not CS.) I guess it's understandable for people to be misled by the amount of programming CS students do. Maybe CS departments should explain to prospective students that programming has the same relationship to computing that writing has to history. If you can't tolerate writing, don't major in history. If you don't love writing, that's no problem, you only need to love history. Same thing with CS. You don't need to love programming, you just need to tolerate large amounts of it.
People in all kinds of fields learn those skills. You might as well get a degree in physics or biology so you can learn that stuff AND learn about a field of study.
Computer science students shouldn't be allowed to fall behind other disciplines in their practice of data analysis, but they shouldn't be encouraged to see it as "computer science." They should see it as a fundamental skill that many college graduates need to have. A specialist in data analysis would be bettor off as a stats major than a CS major.
Never confuse "doing cool stuff with a computer" with studying computer science. Many, many people in different fields are doing amazing and valuable stuff with computers. That isn't what makes computer science a unique and separate field of study.
Seriously, I hope they're not trying to make CS into a department that turns out super-savvy users. Many other undergraduates departments turn out large numbers of very sophisticated computer users who can do neat stuff with data and graphics. If that's what CS becomes -- using programs written by other people to do interesting, valuable stuff -- then you should get one of those other degrees so you acquire knowledge of a field along with your computer skills.
Programming, systems, and the theory behind both are what computer science is about. Using computers is a basic function of any educated person.
I know nothing about audio, but I do think it's funny that audiophiles spend half the time bragging about the fidelity of their system and the other half talking about how "cold" and "sterile" the higher-tech, more accurate systems sound.