Slashdot Mirror


Why Programming Still Stinks

Andrew Leonard writes "Scott Rosenberg has a column on Salon today about a conference held in honor of the twentieth anniversary of the publishing of 'Programmers at Work.' Among the panelists saying interesting things about the state of programing today are Andy Hertzfeld, Charles Simonyi, Jaron Lanier, and Jef Raskin."

134 of 585 comments (clear)

  1. panel link by AnonymousCowheart · · Score: 5, Informative

    here is the link to the ppl on the panel, and talks about their backround

    1. Re:panel link by nlper · · Score: 5, Insightful

      Reviewing the list of contributors, it's interesting to note that some of them had already stopped programming back when they were interviewed. So why should we listen to them opine about software development techniques today?

      My pet peeve on the list would have to be Jef Raskin, who's far better at self-promotion than actually coding. Had people actually listened to his ideas in the early days of the Macintosh project, they would have delivered a machine without a mouse or other features most people associate with the Mac. (As Andy Hertzfeld puts it, he's not the father of the Macintosh so much as the eccentric uncle.)

      However, if you want to hear him repeat the same things he's been saying for the last 20 years, he'll be keynoting the Desktop Linux Summit. No doubt he'll be beating the horse's skeleton that mice, icons, and the windowing interface are what's holding Linux back on the desktop. (MacOS X be damned!) Using those special "leap" keys that made the Canon Cat so successful, now that's the future!

      Tyler

    2. Re:panel link by Anonymous Coward · · Score: 2, Interesting

      Ever use type-ahead find in Mozilla?

      He basically pointed out that the subset of operations we now perform on "the web" would satisfy 90% of humans and should be optimized for, and to some extent, he's been proven correct.

      There's a problem with the Humane ideal providing few good metaphors for data modeling, but we seem to do okay switching between keyboard ("text manipulation metaphor") and mouse ("grabbing hand; spatial manipulation metaphor"), so it's pretty zero-sum.

      When it comes to writing, I'd rather have a Cat than OpenOffice, but I'm not sure it'd be any better at, say, graphing.

  2. Want to read the whole article? by stephanruby · · Score: 4, Funny
    Want to read the whole article? You have two options: Subscribe now, or watch a brief ad and get a free day pass. If you're already a subscriber log in here.

    No thanks. The first two paragraphs didn't make me want to read anymore. I'll wait for the comments of the slashdoters to appear.

  3. Why registration sucks. by GoofyBoy · · Score: 3, Funny

    In response to a Salon article on the state of programming today, GoofyBoy posted a witty and insightful comment. Its sparked a large thread of apologists and public outrage from a wide range of slashdot readers and trolls.

    Want to read the whole comment? You have two options: Subscribe now, or watch a brief ad and get a free day pass. If you're already a subscriber log in here.

    --
    The surprise isn't how often we make bad choices; the surprise is how seldom they defeat us.
  4. This is why I hate slashdot by Imperator · · Score: 5, Insightful

    Someone with a @salon.com address submits a story to slashdot linking to a Salon article. That article costs money to read. Slashdot posts the story anyway.

    Could an AC please post the full text?

    --

    Gates' Law: Every 18 months, the speed of software halves.
    1. Re:This is why I hate slashdot by Anonymous Coward · · Score: 3, Informative

      In some quarters today, it's still a controversial proposition to argue that computer programming is an art as well as a science. But 20 years ago, when Microsoft Press editor Susan Lammers assembled a collection of interviews with software pioneers into a book titled "Programmers at Work," the idea was downright outlandish. Programming had long been viewed as the domain of corporate engineers and university computer scientists. But in the first flush of the personal computer era, the role of software innovator began to evolve into something more like the grand American tradition of the basement inventor -- with a dollop of the huckster on top and, underneath, a deep foundation of idealism.

      It made sense that the people writing the most important code for the new desktop machines were ragged individualists with eccentric streaks. At a panel on Tuesday (sponsored by the SDWest conference and Dr. Dobb's Journal) that celebrated Lammers' book, seven of the 19 original subjects of "Programmers at Work" lined up on stage to talk about what's changed in software over the past two decades -- and demonstrate that they have lost none of their cantankerous edge.

      In "Programmers at Work," Lammers told the crowd, "I looked at the programmer as an individual on a quest to create something new that would change the world." Certainly, the panel's group lived up to that billing: it included Andy Hertzfeld, who wrote much of the original Macintosh operating system and is now chronicling that saga at Folklore.org; Jef Raskin, who created the original concept for the Macintosh; Charles Simonyi, a Xerox PARC veteran and two-decade Microsoft code guru responsible for much of today's Office suite; Dan Bricklin, co-creator of VisiCalc, the pioneering spreadsheet program; virtual-reality pioneer Jaron Lanier; gaming pioneer Scott Kim; and Robert Carr, father of Ashton-Tate's Framework.

      But for all their considerable achievements, this was not a group content to snooze on a heap of laurels. In fact, though the hour-and-a-half discussion was full of contention, one thing all the participants agreed on was that software today is in dire need of help. It's still too hard: not only for users struggling to make sense of poorly designed interfaces, but for programmers swimming upstream against a current of constraints that numb creativity and drown innovation.

      These veterans shared a starting-point assumption that the rest of the world is only slowly beginning to understand: While computer hardware seems to advance according to the exponential upward curve known as Moore's Law (doubling in speed -- or halving in cost -- every year or two), software, when it advances at all, seems to move at a more leisurely linear pace.

      As Lanier said, "Software inefficiency can always outpace Moore's Law. Moore's Law isn't a match for our bad coding."

      The impact of this differential is not simply a matter of which industry gets to collect more profits. It sets a maddening limit on how much good we can expect information technology to achieve. If computers are, as it has often been put, "amplifiers for our brains," then software's limitations cap the volume way too low. Or, in Simonyi's words, "Software as we know it is the bottleneck on the digital horn of plenty."

      Most successful programmers are at heart can-do engineers who are optimistic that every problem has a solution. So it was only natural that, even in this relatively small gathering of software pioneers, there were multiple, and conflicting, ideas about how we should proceed in order to break that bottleneck.

      Simonyi believes the answer is to unshackle the design of software from the details of implementation in code. "There are two meanings to software design," he explained on Tuesday. "One is, designing the artifact we're trying to implement. The other is the sheer software engineering to make that artifact come into being. I believe these are two separate roles -- the subject matter expert and the software engineer."

      Giving the forme

    2. Re:This is why I hate slashdot by anthonyrcalgary · · Score: 5, Funny

      Are you seriously suggesting that anyone would read the article anyway? No, this is the time to broadcast one's opinions in a fashion loosely connected with what we think the article might be about.

      --
      When someone might yell at me, it has to be OpenBSD.
    3. Re:This is why I hate slashdot by Otter · · Score: 5, Insightful
      Could an AC please post the full text?

      They have free day passes, FYI.

      To summarize, though:

      • Charles Simonyi has a new company that he claims will change everything.
      • Jaron Lanier is still happy to inform you that he's a genius and everyone else is stupid. Don't count on him to do anything, though.
      • Andy Hertzfeld sounds like he's gearing up to lose more money on Linux desktop software.
      • Salon continues to suck up to Linux users.
      That's pretty much it. Don't count on anything more useful out of these guys, except maybe Simonyi.
    4. Re:This is why I hate slashdot by torokun · · Score: 5, Informative
      This is some serious copyright infringement, man. Ripping an article verbatim and posting it on another site.

    5. Re:This is why I hate slashdot by the_mad_poster · · Score: 4, Funny

      Or, to summarize your summary:

      Same ol', same ol'.

      --
      Alito: A vote for Alito is a punch in the eye to put that bitch back in her place!
    6. Re:This is why I hate slashdot by starm_ · · Score: 4, Funny

      lol good sig!... or is it bad sig?

    7. Re:This is why I hate slashdot by WasterDave · · Score: 5, Insightful

      Oh, for fucks' sake. Sooner or later somebody doing this - anonymous or not - is going to get Slasdot sued.

      Fucking stop it. It's a copyrighted piece of work, it belongs to someone else, it is their right to control it.

      Dave

      --
      I write a blog now, you should be afraid.
    8. Re:This is why I hate slashdot by YU+Nicks+NE+Way · · Score: 2, Informative

      Uhh...no. Although I'm very angry with the Slashdot editors for posting this particular lead, this is blatant infringement of the most egregious form. Fair use only defends people who violate copyright in small (e.g. by printing a limited passage with full attribution) or who have some other significant difference from the original (e.g. a parody is almost be definition infringing, but protected by fair use.) Including a whole text verbatim for the purpose of avoiding the tariff a copyright holder has set is not fair use, whether or not the author benefits from it.

    9. Re:This is why I hate slashdot by bcrowell · · Score: 2, Insightful

      They have free day passes, FYI.
      Too bad you can't get the day pass if you don't have Flash installed.

    10. Re:This is why I hate slashdot by afgates · · Score: 2, Insightful

      I consider this to be improper use of the hard work of the Salon staff. There are only 74,000 paying subscribers to salon, full disclosure, of which I am one. They provide a nice counter-balance the Microsoft sponsored Slate online magazine. So many of the online e-zines have suffered and closed down over the last few years, and the infosphere is poorer for it. As a anarcho-capitalist, I believe that any valuable service or product should be made as easily available as possible, but as a consumer in this arrangement, I have a responsibility to support that creative producer. For example, though I download music for my personal use, the artists and tracks I find to my liking, I go and buy the artist's product, either through iMusic or at a brick and mortar. Salon will allow you to sample some of their content with only a small hurdle. If you find the product useful and to your liking, support them directly. Take responsibility for yourself. Remeber, IAAMOAC (http://www.davidbrin.com).

    11. Re:This is why I hate slashdot by ebuck · · Score: 2, Insightful

      Well, I took the bait and read it.

      It's suprisingly full of fluff. I admire the challenge to go somewhere new and interesting, but am equally appaled by lack of sense of direction in the article.

      It's about as coherent as pointing out that theres 360 degress around you, and they are all hopeful and promising. Then asking you "Where do want to go today?", while reminding you that you're in your hometown.

      The dismissal of open-source as a non-innovator is questionable, and the statments about programming itself not getting better keep me scratching my head. What do you mean by more innovative programming? Compilers won't accept any type of creative garbage, and personal expression in the language (aka Perl) has it's own limitations.

      These guys should be motovational speakers, but problem is they don't have a large an audience as say, people with finiancial troubles, grumpy employees, or people with weight problems.

      Lack of industry-redefining innovation is an indicator of maturity in computing science. Innovations become small steps forward, and are no longer the cataclysmic leaps that existed in the past.

      Look at Gnome as (only one) example. They changed their default browsing mode to a spatially oriented one. It's innovative, but it's not going to be as big a leap as say, going from the command line interface to a windowing one. Arguing that it's not a big enough innovation to have real merit implies that their early pioneering breakthroughs elevate them to a kind of revered status as super-programmer.

      It's easy to be innovative via discovery in a field that hasn't matured, it's a lot harder to be innovative via discovery when millions are working along side of you. I'm not trying to diminsh thier hard work and effort, not discount the magnimity of their accomplishemnts, but to stretch my analogy (a bit too far), claiming that nobody has discovered a new continent recently isn't the fault of less innovative map makers.

    12. Re:This is why I hate slashdot by pizza_milkshake · · Score: 2, Funny
      As a anarcho-capitalist,

      I told you, we're an anarcho-syndicist commune, taking turns to act as a sort of executive officer for the week.

    13. Re:This is why I hate slashdot by Anonymous Coward · · Score: 2, Funny

      This is because there are in fact several persons posting around here, with differing opinions. Didn't you know?

    14. Re:This is why I hate slashdot by gorre · · Score: 2, Funny

      This is some serious copyright infringement, man. Ripping an article verbatim and posting it on another site.

      Don't worry this is /. nobody is actually going to read it.

      --
      "Madness is something rare in individuals - but in groups, parties, peoples, ages it is the rule." -- Nietzsche
  5. Hmmm, there's an interesting duo... by The+Spie · · Score: 4, Funny

    If they did this as a round table, I would have been sad to have missed it. You just know that at some point in the discussion, Raskin and Hertzfeld would have gotten into a fistfight over who the real father of the Mac was. "Two geeks enter, one geek leaves..."

    --
    If using Linux is about choice, how come people complain when I choose to use Windows?
    1. Re: Hmmm, there's an interesting duo... by Black+Parrot · · Score: 3, Funny


      > If they did this as a round table, I would have been sad to have missed it.

      Yeah, I wanted to see them work out who got which fork.

      --
      Sheesh, evil *and* a jerk. -- Jade
  6. why does programming stinks today, an opinion by bsDaemon · · Score: 4, Interesting

    Please keep in mind that being only nearly 20, the depth of my personal experience is not that of say, someone who was around when UNIX was first rolled out. However, I have been in my day an avid C and BSD (mostly FreeBSD, but some NetBSD) user.
    Honestly, from where I sit (you may agree or not), programming and computer stuff in general has become a lot less like a science or craft, and more like a factory job. In the early days programmers who physicists, engineers, and mathamaticians. Today programmers are just programmers. More and more computer science departments are teaching using Java. Why? because it helps people to understand how the computer works? no. Simply, because it's what the industry is using.
    I had 4 technicians from Cox over at my house yesturday because my parents couldn't figure out what was wrong with the cable modem. They were the most filthy, disgusting bunch I have ever seen and were dressed more like gas station attendants than professionals. Why? because that sort of work has become blue-collar and low-rent.
    Programmers are no longer expected to be educated beyond their field. they are being educated to produce software, not to be COMPUTER SCIENTISTS. How many graduates of say, ITT Tech would actually understand Knuth, even if they have ever heard of him? Likely, not many. That is why software sucks. That is why the programming "trade" sucks. and that is why companies can send the jobs abroad to people who work for peanuts. Programming is just like stamping "Ford" on the grill in a Detroit assembly plant these days and nothing more.

    1. Re:why does programming stinks today, an opinion by matusa · · Score: 4, Insightful

      While that is true, it's also naive to think it would be any other way. Why? Think about every other profession! The opportunity to be doing something creative is delegated to a selective, lucky few. I say lucky few because everyone has met great people in crap jobs.

      So the question of course becomes--how do you dodge the bullet of crap positions? Doing well in academia is probably unfortunately the best solution. I'm going to CMU next year, annd had a nice talk with one of their CS profs about some openGL + C++ projects I'm working on, plus some AI research I started. I will get to work on these things, however I will also have to try not to swallow cyanide while dying through Java classes teaching me how to program in a way so dumbed down that even the greatest imbecile can't screw up.

      This of course touches upon a great sadness of modern engineering training for me: you don't get taught to think--you get taught to use prescribed methods. Why? Ostensibly to never never reinvent the wheel, but also to get retards to do the job fine.

      Let's not be stupidly depressed about everything, however. Trying to shoot to the very top has always required talent and hard work, and always been possible.

      I think programming is truly great, truly beautiful. This afternoon I made some money writing some boring PHP code, but also worked on my personal projects, and I'll work to have the tides change in the future.

    2. Re:why does programming stinks today, an opinion by Rinikusu · · Score: 3, Insightful

      And it's precisely this attitude of yours towards your "common man" that really makes computing suck, in general. Your entire post reeks of "elitism", harkening to a time where computer programmers were some sort of elite bunch that people "just depended upon" to make the magic database "go". Now that computing has been reduced to the masses, for better or for worse, you feel that you and your 4-8 years of education in the computing field are threatened by a bunch of ITT graduates who don't have the theoretical knowledge that is absolutely not required to generate a simple GUI that queries a database and presents them to the user.

      Frankly, programming as a profession bores me, which is why I no longer do it. I don't mind programming, on projects that *I* want to work on, but I no longer want to work on databases that aren't mine or are applicable to anything I'm remotely interested in. I'd rather use the computer as a TOOL, you know, a means to an end. It seems a lot of programmers are programming because it IS the end. They have no interests outside of computing.

      The fact that many ITT Tech students may not "understand" Knuth is irrelevant because many ITT Tech students don't give a flying fuck about Knuth. I know who Knuth is, I've owned/used his "Art of Programming" or whatever it was called, and I don't consider myself a better person.

      --
      If you were me, you'd be good lookin'. - six string samurai
    3. Re:why does programming stinks today, an opinion by the_mad_poster · · Score: 4, Insightful

      Any moron fresh out of ITT or CLN with a degree pasted to their face by their own drool can churn out a reaking pile of code that will work.

      However, without the theoretical knowledge to back that basic syntax knowledge up, it won't work well.

      The grandparent post mentions coding being a "factory job". The commoditization of coding IS a huge problem. Coding WELL is not easy. However, because these half-wits that barely dragged their sorry asses through High School can go to CLN and pick up the latest "Microsoft cert dujour" or whatever other worthless peice of paper they offer, the overall expectation of coding is dropping. I couldn't tell you how often I've been ordered to cut critical corners by clueless bosses who don't understand coding on any level deeper than how to throw syntax together to create a brittle shell of a program that will work just long enough to take the customer's money and run (a favorite quote: "... *I* was never taught that." - spoken in the manner of someone who can't imagine they don't know everything).

      The problem isn't that we're elite. The problem is that good programming is no less complex or time-consuming a task now than it was 20 years ago. Why is it elite to try and explain that to someone when they tell you not to bother with such and such critical piece or this basic security test? It's not elite, it's just that we've been flooded by so many bozos that wouldn't know good programming practice if it bit them in the balls that we're constantly deluged by sub-par workers and everyone has come to accept that sub-par work as the norm.

      --
      Alito: A vote for Alito is a punch in the eye to put that bitch back in her place!
    4. Re:why does programming stinks today, an opinion by KrispyKringle · · Score: 4, Insightful
      I know a number of people just bitched you out for this post, so I'm going to try to keep it brief. ;) Just a few points, in no particular order.

      You refer to the cable guys as iif they are the epitome of computer science. They aren't computer scientists. They almost certainly aren't even programmers. Perhaps to the completely ignorant, all computer-related jobs are the same, but they aren't. Most jobs as a technician are crap. Slightly above that would be the post of admin. Keeping something up to date. Installing new software. Above that, some network and system admins have interesting jobs designing new systems, implementing creative solutions to problems, and so forth. Programmers have a similar opportunity, to do creative coding, but often it's just another solution to another problem. Not something that sounds like a lotta fun. And above that would be computer science. Research. Whole different ball game.

      I think this is the root of your confusion. You see more blue-collar technical jobs. This doesn't mean less research is going on, though. Back in the day, the only people who interacted with computers were academics and researchers. There was no ITT tech. Now, in addition to the academics and researchers (of whom there are actually almost certainly many many more), there are hordes of unwashed masses actually (heaven forbid) using computers as tools, rather than just for the academic prospects themselves. Point is, the research is still there; in fact, there's far more of it. But there are also more and more other uses. This isn't a bad thing; it's a good thing.

      In case you don't see what I mean, look at it this way. Your complaint could be summarized with an analogous complaint about the watch industry. Back in the 1800's, the only watches available were really classy, expensive, work-of-art kinda things. A gentleman's accessory. Now, any old Joe on the street has one; they come in all sorts of cheap, disposable, low-quality shitty versions. But that doesn't mean there are less high-quality versions; in fact, there are more. Tag Huer, Rolex, Citizen, Suunto...the competition to make the greatest precision timepiece is quite tough, I suspect. Point is, there's a lotta shit out there now that wasn't there in 1800, but plenty more nice watches as well.

      Hmm. I guess I didn't really keep that brief. Sorry.

    5. Re:why does programming stinks today, an opinion by torokun · · Score: 4, Insightful
      It's clear to me why you wrote this post from a subjective standpoint -- I thought the same way when I was 20. Even when I was 24. I don't think the same way now at 28.

      Why? Because I've seen through experience that (1) most people can't learn the hard CS stuff, and (2) 95% of projects don't require it. The sad fact is that "Computer Science" is only really applicable to solving "hard problems", writing compilers, designing languages, or to AI and its kin. It is in general, not applicable to business applications.

      It used to be, but what happened? Computers got faster. Here's the progression in my career...

      1. Kudos for optimizing memory management and speed in C/C++, or even assembler.
      2. Questioning the need for such optimizations and pushing profiling before such work if it would take a significant amount of time
      3. Questioning the need for ever doing optimization, questioning the value of low-level languages.
      4. Pushing high-level languages (web-based solutions / VB) for everything unless a clear need exists.
      5. Sending everything to India.
      This just wouldn't work unless most apps simply didn't need the work that we as computer scientists want to put into them. Knuth is a perfect example -- he spent years and years getting TeX perfect just so he could see his books typeset perfectly. We have that sort of perfectionist bent.

      But it's all driven by money in the end, unless you're in academia, or research... A very few people are in positions doing both technically hard stuff and making money for it. These would be like Wolfram Research, google, some game companies (although I hear they're sweatshops, but what isn't nowadays?)...

      In the end, you're correct that a lot of hard problems can only be handled by people trained in CS. These would be the things mentioned, along with parallelism, threading, and optimization issues... But it's also true that most of the products out there don't need these. We're sifting these categories apart now, and unfortunately, it's just a fact that not much yummy stuff is left.

      But when you have garbage collection, a raging fast machine, and graphical IDE's, even if someone puts crappy code together, as long as they make a decent API, it's going to work after they try to compile it half a million times.

    6. Re:why does programming stinks today, an opinion by heyitsme · · Score: 5, Insightful

      As a student at a major Big Ten University (tm) I can easily tell that your perception is a bit skewed. The old cliche "you get what you put into it" applies to many things in life, and computer science is no different.

      My school's core computer science curriculum is in Java. Language of instruction is a moot point to a rather great extent. You can learn as much from a data structures class taugh in Java as you can from one taught in $language_of_choice. The idea is to learn how things work fundamentally, and then apply those ideas practically. A linked list in Java works the same as a linked list in C. Its not about Java being the "industry standard" as you call it, its about Java being a perfectly modern and capable programming language. The idea

      Your next analogy of the cable repairmen almost prompted me to moderate your post as +1 Funny, but when I found out you were not joking I decided to write this reply instead. To even equate a cable repair person with a computer scientist is pure madness. Even if they were programmers, how is getting the cable modem working a good metric of "computer stuff in general" being "a lot less like a science or craft and more like a factory job", or even relevant to the discussion of computer programmers vs. computer scientists at all?

      None of your points even remotely explain what you consider the fundamental problem: "why software sucks...why the programming "trade" sucks...why companies can send the jobs abroad to work for peanuts" The fact is not all software sucks, many people love their jobs in the industry, and these people are getting paid well to do their jobs. Most of the computer scientists you speak of don't work in the private sector, you can find them at government research institutions.

      To say that these type of people don't currently exist, and that current CS curriculums can't produce scientists of this caliber is nothing short of ignorant.

    7. Re:why does programming stinks today, an opinion by Doomdark · · Score: 4, Insightful
      however I will also have to try not to swallow cyanide while dying through Java classes teaching me how to program in a way so dumbed down that even the greatest imbecile can't screw up.

      ...

      This afternoon I made some money writing some boring PHP code, but also worked on my personal projects,

      While I whole-heartedly agree with points you are making, it's worth mentioning that there's nothing fundamentally wrong with either Java or PHP, that leads to boring lowest common demoninator programming: it's possible to do interesting advanced and sophisticated things using both, as well as with their countless alternatives. Except for some elitits who claim one has to use, say, functional programming languages to do anything interesting, or "no pain no gain" hard-core low-level language fanatics, most truly good programmers understand it's not tools that make exceptional advances; it's the craftsmen that use them.

      --
      I like paying taxes. With them I buy civilization -- Oliver Wendell Holmes
    8. Re:why does programming stinks today, an opinion by KrispyKringle · · Score: 2, Interesting
      Oh, yeah. And one thing that we can do to help mitigate this problem? Help managers understand what it is we do. If we want the uninitiated to think that programming is this difficult, arcane task they'll never understand, then they won't ever learn to tell the difference between a valid excuse (``that's a complex request that will require a lot of time for writing and testing to do well'') and a lame one (``I need to contact MSDN for the latest version of the J2EE hashtable implementation to speed up our ASP.NET servers''). Let them in on your secrets and they'll be a bit more receptive to your side of the story.

      Sorry for the replying to myself thing. I hate it when people do that.

    9. Re:why does programming stinks today, an opinion by Stinking+Pig · · Score: 3, Insightful

      Lemme get this straight, doing well in academia is the answer but the only good thing in your academic curriculum is a side research project because your main classes don't teach thinking?

      I'll say this for the English degree, which I highly recommend to any young geek looking at schools: you learn to think, you learn to communicate, and you learn to differentiate shit from shinola. Surviving through a hardcore postmodernist-influenced seminar will prepare you for any amount of corporate meetings.

      --
      "Nothing was broken, and it's been fixed." -- Jon Carroll
    10. Re:why does programming stinks today, an opinion by Milo77 · · Score: 3, Insightful

      I agree - coding well isn't easy, but my CS degree really only half prepared me for being able to code well. Yea I learned a lot of theory and understand more-or-less exactly what's going on on that processor, and this has enabled me to write some pretty clever code. But I've also learned that cleverly written code (code that's "better" in a purely acedemic sense) can be some of the worst code. It reminds me of that aweful hacker creed: "it was difficult to write, it should be difficult to read." Its sad, but true for most of the "software developers" I've met. They'll write terribly clever code, but in the end they've done a disservice to the project's long-term viability. I saw another quote this week (off the UNO website, off slashdot earlier this week) [paraphrase]: "the code will get written once, but read many, many times - if you make it easy to read you and others will benefit in the long-run." (you get the gist)

      It is sad what we've allowed to happen to software engineering - a disgrace really.

    11. Re:why does programming stinks today, an opinion by noonien_soong · · Score: 5, Insightful
      Let me get this straight. You're 19 years old, you've played around with computers a little bit "in your day," you've read some Knuth, and you're smart enough that you've come to see yourself as superior to the average blue-collar worker. This gives you so much insight into the world of software engineering that you can discern exactly what the problem is---programmers aren't as smart as you are, and if they were, software wouldn't suck. Would you say that's a fair characterization of your argument? Because that's how you come off.

      The first thing you have to realize is that software is being written at a much higher rate now than it was back in the days when programmers were physicists and mathematicians. That's because it no longer takes a rocket scientist to write a program, and that is a Good Thing (TM). If the programming learning curve hadn't come down, we wouldn't be living in the wonderful information society that we are today, because there simply aren't enough rocket scientists to hammer out every PHP script and database app one might desire. The technical aptitude of the people working on the foundations of computing is certainly not degrading as programming becomes more democratized, because those people's talent and skills are not forged in some intro programming class. Every hacker knows he learned his art outside the classroom. So it's not exactly logical to assume that colleges could turn out a crop of brilliant innovators if only they used Haskell, read Knuth, and taught all their CS students physics and numerical analysis on the side. Clearly, what would actually happen if one simply cut the lowly Java-bred programmers out of the programming craft is that a lot less bad software would be written, a little less good software would be written, and all of it would cost more. That's not exactly an improvement.

      None of this is to say that there are not pervasive (and addressable) problems in modern software engineering. Those problems are simply much more endemic to the state of the art of programming than they are to any particular group of people. As many have pointed out, software today is brittle. It is frequently opaque, offering users and programmers alike only the most rudimentary means of debugging. The bread and butter software used by everyone everyday is often monolithic, designed for one purpose and impossible to customize without intensive study. Think about it for a moment, and you'll realize that much of the functionality of a typical document-editing application is duplicated in any other. In principle, such functionality could be factored out. But I can't digress too far into that here - let me continue with the list of reasons why software sucks. Integrated development environments give programmers a view of a project that scares poorly with complexity, software is incredibly difficult to build from source (unless you use Java--heaven forbid that should find its way into the bubble of intellectual purity you inhabit), and perhaps worst of all, the design decisions and architecture of software are usually not expressed clearly anywhere except in source code, where they are obscured by all manner of syntactic complexities, compiler optimizations, and details that aren't significant to the overall intent of the code. These things--all the things that make software complex, which make it difficult for groups to work together on large software projects (as you would understand if you'd ever worked on one)-- are some of the real hurdles to be overcome in software engineering. ITT Tech and outsourcing to India are NOT the problem.

      I haven't said much about how to solve any of these problems. But I've said a lot, so I'm going to stop now. I highly encourage you to get some more experience and perspective before you make sweeping and arrogant generalizations. College-aged know-it-alls with overblown rhetoric are a dime a dozen. Real problem solvers are rare.

    12. Re:why does programming stinks today, an opinion by ebuck · · Score: 4, Insightful

      Agreed, good programming is not easy, and many more of the avenues to enter the field should require more basis in theory (language design, automata, OS internals, compilers, underpinnings of good database design, etc.)

      But good programming should be less complex now than it was before. That's the whole imperitus of language design. That's the reason that the last of the big languages to roll out is the same "simple" JAVA bashed in a few previous posts.

      In a previous post, I couldn't fathom the divergence of thoughts that denounced JAVA as a language while espousing that he's really cool C++/OpenGL stuff out there. C++ has a syntax that's unwieldy and awkward, mastered by comparatively few, and full of "compatibility" weaknesses shared by it's older brother, C. It's almost like it was thrown in there subconsiously to say, "Look, I am an uber elite programmer. OpenGL and C++. Watch me whine as I use something that has a clean, clear syntax."

      I'd hate to hear him gripe about PASCAL.

      "Really cool work", can be done in any language, and the proliferation of languages shows that there's many solutions to the same problem.

      His bashing the language for it's simplicity was as insightful as bashing good error checking, testing array boundaries, or enforcing garbage collection. Note that technological improvements can lessen the impact of these annoyances, but when the language design is flawed, only deep education of the masses (as in, don't do this, you'll regret it) can save the language.

    13. Re:why does programming stinks today, an opinion by slamb · · Score: 3, Insightful
      You refer to the cable guys as iif they are the epitome of computer science. They aren't computer scientists. They almost certainly aren't even programmers. Perhaps to the completely ignorant, all computer-related jobs are the same, but they aren't. Most jobs as a technician are crap.

      Agreed.

      Slightly above that would be the post of admin. Keeping something up to date. Installing new software. Above that, some network and system admins have interesting jobs designing new systems, implementing creative solutions to problems, and so forth. Programmers have a similar opportunity, to do creative coding, but often it's just another solution to another problem. Not something that sounds like a lotta fun. And above that would be computer science. Research. Whole different ball game.

      Here's where you lose me. I don't agree that computer science is "above" programming. In fact, I'd say that programming is the union of computer science and software engineering. Superior programming requires contributions from both fields.

      Software engineering is nothing to sneer at. It envelopes version control, coding style, rigorous specifications, code review, bug tracking, API documentation, user manuals, user interface design and testing, unit/regression/acceptance testing, etc. There's some real artistry involved. It's easy for us programmers to neglect these, saying that they aren't hard but we don't have the interest or resources. But in reality, when I really try to do even the most seemingly mundane of these tasks, I find there's a lot more skill involved than I previously realized.

      The experience has also made me skeptical of the idea of farming software engineering tasks off wholesale to specialized people. For example, writing good API documentation requires the involvement of the people who designed the interface. Likewise good user manuals require the people who designed the UI and administered the user tests. Pure technical writers can maybe even write the bulk of the prose, but if they can't do what they document, they don't have a prayer of noting subtleties without help.

      Summary: I think actually designing, implementing, and even proving correctness/efficiency of algorithms is a much smaller part of the whole than we like to admit. The other things not only valuable and difficult, but also should be done by the same people.

    14. Re:why does programming stinks today, an opinion by ExEm2SS · · Score: 2, Insightful

      Okay, I just had to respond to this post. You're young so it's expected that you're going to be opinionated and judgemental. I used to have that luxury when I was your age.

      I am an ITT Tech graduate, and I have been a computer geek since 1995 when I bought my first computer. When I was working in Portland as an electrician, we used laptops for troubleshooting. We needed these laptops so that we could plug them into our machines's PLC's (Programmable Logic Controllers). Unfortunately, laptops and industrial environments don't mix. Although we asked management to buy us industrial laptops, they refused, which meant that we would usually get the sales force's old laptops, which happened to be in great supply. These were old IBM thinkpads and their life expectancy was about three months once they were subjected to the harsh environment. Ok, no problem. If a laptop dies, pop out the hard drive, and stick it in another laptop. Unfortunately, our system admin could never figure out how to open up the laptop and remove the hard drive. Finally, after about the third time showing her, I decided that it's probably time for me to change careers. Here I am, an electrician, showing a University of Washington graduate how to replace a hard drive in a laptop. Go figure.

      Anyhow, I knew that I couldn't get into the IT based on my background. Even though I played around with Linux, I needed to have that magic piece of paper. Guess what, this was during the Dot com boom when every Tom, Dick, and Harry got an $80,000 a year (or so it seemed at the time) job and became an instant millionaire (on paper). I figured, what the hell, I didn't have the time to go to a four year university, and ITT seemed to have a respectable name. (Little did I know) Anyhow, it seemed like a fast track to a career that I would enjoy.

      Anyway, I got to ITT and started their CNS (Computer Network) program. However, I was always interested in programming, so I switched to the SAP (Software And Applications) program. While it's not a Stanford education by any means, it wasn't bad as long as you were willing to work hard and apply yourself. It didn't really go into any advanced topics, but it did go into the fundamentals. We had two Java classes, a Linux class, two VB classes, two C++ classes, and a Data Structures class using C++. We also had two software design and architect classes. Not university level, but pretty solid. I guess I was lucky, I had good instructors. Fourth of them come to mind. One of our instructors had a PhD and worked for NASA on the space shuttle program. The other guy developed missle guidance software for the Air Force. The third worked for IBM. The fourth, well, she didn't know shit from shinola.

      While in school, I was able to get job as a customer support rep at a very, very tiny ISP. 800 customers, three employees. Anyhow, the guy they hired to as the system admin got fired for incompentence. My boss found out that I played around with Linux and made me the system admin. That and I also worked cheap. Let me tell you, I learned FreeBSD the HARD WAY!!!! As in WHAT NOT TO DO!!! As in the web server's down, and you're feverously reading the FreeBSD handbook and parsing the newsgroups to get the Freaking thing up and running. Oh yeah, also explaining to your customer's why your web server's down. The job sucked and so did the pay, but I got a lot of experience real quick. Pretty soon my reputation got around because I gave the customers good service, and I was able to land a few minor consulting jobs.

      Fortunately, after I graduated from ITT Tech, I was lucky enough to land a programming job, as a Microsoft Access report writer (Yuck!). Mind you, I did my final software project at ITT using Java and MySQL so I wouldn't have to work with Access!!! However, in this economy, beggers can't be choosers, especially when you have a two year degree from ITT Tech. Anyway, after working with Microsoft Access and exploring VBA's capabilities, I found that Access is a very use

    15. Re:why does programming stinks today, an opinion by Quantum+Jim · · Score: 2, Informative

      Note: This reply got really off-topic as I wrote it, but I still think it is an interesting train of throught. Got me thinking about languages, at least. So it may be a little rambling... I apologize in advance for any hard-to-understand prose.

      "Really cool work", can be done in any language, and the proliferation of languages shows that there's many solutions to the same problem.

      That's generally true except for some niche markets. There are still a few things, which should be programmed in assembly or a lower-level language like C. Problems with extreme memory or speed requirements are often only solvable with languages invented when most computers benchmarked against those extreme memory or speed specs.

      when the language design is flawed, only deep education of the masses (as in, don't do this, you'll regret it) can save the language.

      I don't think most languages - C++ in particular - are flawed. They rather represent different tradeoffs between ease of writing small programs, ease of writing large programs, limiting performance, capabilities, and extensibility.

      For instance, Java and Python provide large built-in libraries to make programs less complex. Those two languages are also generally implemented via virtual machines. VMs provide a medium between slow-but-safe (and highly portable) interpreted languages like BASIC, ECMAScript or Haskell and the traditional fast-but-dangerous compiled languages such as C/C++ or others. Also C++ was originally implemented in C macros - wasn't it? That's extreme extensibility. However, you don't want to use those features for individual projects: it'll only add complexity and thus a greater chance of bugs. Those features are generally useful for niche experiments, debugging, or sharing code among many projects. As a movie said (or something like it), with great extensibility comes great responsibility. :-}

      There are many more examples. Special-purpose languages like XSLT which do one thing really well (in this case, interpret data) and suck at almost everything else. (The game of Life can be implemented in XSLT, but why? :-} ) Some languages are easier to use in some professions than others - i.e. Lisp and Haskell in Comp Sci; Matlab and Mathematica in Engineering (although everyone really hates them); I once saw a psychology experiment written in Pascal (why? I don't know!). The choice of a programming language is all about design tradeoffs. The requirements of the problem dictate which class of languages are best suited - it doesn't make one right or one wrong.

      --
      It is impossible to enjoy idling thoroughly unless one has plenty of work to do.
      - Jerome Klapka Jerome
    16. Re:why does programming stinks today, an opinion by Reteo+Varala · · Score: 2, Insightful

      So the question of course becomes--how do you dodge the bullet of crap positions? Doing well in academia is probably unfortunately the best solution.

      I very much doubt that. The #1 method of succeeding in ANY business, whether it's programming, engineering, or even performing, is the ability to market and sell what you do. All the skill in the world isn't going to count for aught if you can't sell what you do... and if you can't program worth beans, if you can sell, then you're going to be able to make big bucks on crap.

      Hey, if it can work for Bill Gates, it can work for you!

  7. So.... by JFMulder · · Score: 2, Interesting

    ... reading this, does this mean that Windows comes from a dumpster??

    Anyway, there's a lot of valid points in that article. Where I work we have the system on peer-review where everytime you submit your branch it has to be approved by someone else. Basically the person just scans through the code, looking for the general idea of how things were implemented.

  8. Re:Copyright by CeleronXL · · Score: 4, Informative

    In general I'd have to agree, but in this case seeing as Salon was simply trying to get money by having one of their own staffers(?) submit the article here, I think it would be well deserved. ;)

  9. Programming Skills by Anonymous Coward · · Score: 3, Interesting

    It's such a simple concept. The more of anything we have, the more the mediocre stands out. With millions of writers, we get self help books, assorted garbage, and several really excellent works.

    Programming has an artisitic side, the creativity, vision, and insanity required to apply oneself to a project is much like the authoring of a book. Many have the skills, know the principles, but even then, few have the internal extra to create.

    I may know language and syntax, but I'm nowhere near the league of Shakespear, Tolkien, Asimov, or Clancey. Fortunately for me, they are nowhere near my league when it comes to putting code together.

    We have millions of coders - 60 percent will have average skills, 20 percent will be below average (or plain suck), and 20 percent will be above average, including that rare 2 percent of the absolutely insane, don't let them out on weekends, make sure they get fed, check they haven't peed themselves brand of genius.

    1. Re:Programming Skills by ArbitraryConstant · · Score: 2, Insightful

      My employer has a pretty sweet racket. They keep a few employees that are still in university so they can snap up bright young people without having to sift through hundreds of idiots.

      In other news, this is the inaugural post from my new account, created so no one at my office knows I'm talking about them.

      --
      I rarely criticize things I don't care about.
    2. Re:Programming Skills by Paleomacus · · Score: 2, Insightful

      My company does this too. I'm one of those in university employees you speak of.

      It is great to experience both sides of the fence simultaneously. Every week I get a good helping of theory and a huge truckload of the real world application (or tossing the theory out the window,whichever the case may be).

      I enjoy programming as long as I'm not doing something brain-dead factory work like building a new form/ui for one of our web apps.

  10. Re:Copyright by PktLoss · · Score: 2, Insightful

    The article is of obvious interest to a large subset of the Slashdot community, and the editors made the choice to post it here. If he/she hadn't posted it, someone else would have, so I don't see how who made the initial post is relevent.

  11. Why programming stinks in general: by BeerSlurpy · · Score: 5, Insightful

    It is entirely possible to survive in many companies as a bad programmer who nonetheless manages to be productive and produce seemingly non-buggy code. They may even appear to be especially hardworking and motivated because of the poor design that they have to spend extra time working around as they add features.

    The forces that allow this phenomenon to self-perpetuate are:
    =Lack of people who know how to manage engineers properly, know how to recognize good ones and bad ones and how to motivate the ones you have to be productive.
    =Lack of good project management skills that inevitably leads to crunched schedules and poor quality code, also lack of perception on the part of management as to why software is having problems with performance, bugs or schedule to complete
    =Lack of desire to retain good engineers or cultivate improvement in the junior ones
    =Lack of communication between engineering and whomever is giving them work, especially regarding desired features and schedule
    =Lack of quality control, lack of oversight, lack of checkpoints in project progress

    It doesnt help that the concept of "good engineering" is so hard to measure- a few things are "obviously bad" but most things are not. Even if someone is being completely wrong headed about one particular concept, it is entirely possible that they are exceptionally strong in many other areas within that field. It eventually boils down to "the proof being in the pudding" with the pudding being exceptionally complex to make and subject to the whims of the royal pudding tasters when done.

  12. Re:copyright and stealing by PktLoss · · Score: 2, Insightful

    We are robbing them of its purpose, to generate revenue via ads, day passes or subscriptions.

  13. Soon will be gone forever the glory days of old by Illserve · · Score: 4, Insightful

    For programming to get "good" it's going to have to get unfun. No more will long haired super cool geniuses plug away for hours on end.

    It'll have to be a managed engineering process with all the fun and excitement of a CPA convention.

    1. Re:Soon will be gone forever the glory days of old by alienmole · · Score: 4, Insightful
      For programming to get "good" it's going to have to get unfun. No more will long haired super cool geniuses plug away for hours on end.

      It'll have to be a managed engineering process with all the fun and excitement of a CPA convention.

      This only works when no innovation is necessary. You can't CPA-ify innovation (at least, no-one has ever succeeded at that). That's why big companies have to buy small companies, and why big companies run research departments for the long-haired super cool geniuses to play.
  14. It's Gordon Moore's Fault by G4from128k · · Score: 5, Insightful

    Moore's Law is one reason why software still stinks. Instead of perfecting systems within the confines of a limited amount of resources, its too easy to just assume more MHz, MB, amd Mbps.

    With exponentially increasing resources, nothing ever stabilizes and everyone knows it. If people design software with the assumption that it will be totally obsolete and replaced in 18 months, they create software that is so badly designed that it must be replaced in 18 months.

    Until hardware performance plateaus and people get off the upgrade-go-round, programming will be sloppy and ugly.

    --
    Two wrongs don't make a right, but three lefts do.
    1. Re:It's Gordon Moore's Fault by miu · · Score: 2, Interesting
      I'm gonna have to disagree with the notion that lack of scarcity leads to bad design.

      I think more often that low level optimization often locks us into a bad design, look at the Mac System software version 9 and lower or Windows before XP for an extreme example of this. Locks and crashes caused by apps were common because the task scheduler and memory model were created with scarcity in mind - developers at Apple and MS knew better ways to do things, but were locked in by those descisions made based on earlier hardware capabilities.

      --

      [Set Cain on fire and steal his lute.]
    2. Re:It's Gordon Moore's Fault by Dixie_Flatline · · Score: 2, Interesting

      I half agree. The complete lack of regard that most programmers have for the amount of system resources that they have is in most cases, entirely tragic. There are a lot of programs that could have a smaller memory footprint or run much faster if any time was taken to make these things fundamental to the design.

      That said, I've never really heard anything good about the code that developers have to write for systems like the PS2 that simultaneously have a wealth and a lack of resources. The PS2 has a lot of processors to work with, and that's great! Well, it's great until you realize that the abundance of processors just makes things really hard to synchronise, and you're doing all sorts of hacks to make things work. On the other hand, the PS2 barely has any memory to work with at all, and that's ALSO problematic, since you're always cutting corners, and getting data off the disc in a timely fashion is a pain in the ass. (The PS2 developers that I know have all had to write their own memory managers just to make things even pretend like they're working.) Both those things contribute needlessly to high complexity. Managing complexity well is the TRUE mark of a good programmer, but nobody wants to deal with more than is absolutely necessary.

      By comparison, both the XBox and GameCube are purportedly easier to program. Both of them have hard and fast limits on memory and CPU speed, but both of them provide enough of each to make managing the complexity easier. Programmers still have to be careful with their resources, but they don't have to resort to as many dirty tricks to get everything to work.

      So, just because a system has limited resources doesn't mean that the code coming out the other end is going to be clean and the programming is going to suck any less. You just end up with a different kind of sucky programming.

  15. Physical vs Digital Creation... by gilmet · · Score: 4, Insightful

    The two are remarkably similar. As time goes on, analagous roles to those found in the production of physical machines/structures (such as concept artists, architects, engineers, construction workers) will be defined for digital creation. Actually, this has already happened. Perhaps what's lagging behind is the partitioning of education that leads to these professions?

    --

    Every time you read this, I am going against my principles.
  16. Programming as a ends in itself is factory work by xtal · · Score: 4, Insightful

    I agree with you, but only partly. Another problem is that some people are interested in programming applications as a ends in itself - e.g. their whole life revolves around implementing solutions to other people's problems. The guy from cox probably couldn't care less about Knuth - it's just what he's being told to do. Perhaps this isn't so much a problem as it is a side-effect of the need for programming services.

    That's because business has a need to get their problems solved, and finds the most effective tool to do it - in this case, generic problem solvers or programmers. This is work that is easily outsourced.

    Back in the day, the guy programming was solving problems to make -his- life easier. It's not a stark distinction, but one that needs to be made. My formal training is as an EE, I I took MANY more advanced mathematics courses than the CS people at least at the undergraduate level. We did a grand total of three programming courses, all of them offered by the CS faculty, and when I was there, we were taught Modula-2. It's since moved to Java. They don't start out teaching the virtual machine or bytecode, either. Pointer? Eh?

    Anyway, back to my point - I used Matlab, C, Assembly, you name it in my digital systems courses. We were not taught those things; we were expected to know them or learn them on our own to solve the problem at hand.

    Using a calculator to solve a problem and making the calculator are different things.

    --
    ..don't panic
  17. Re:copyright and stealing by bug1 · · Score: 2, Insightful

    Its purpose remains the same wether its succesfull or not.

    Copyright infrement doesnt change the intent of the copyright owner.

  18. Building code from specification by JordanH · · Score: 5, Insightful
    From the article:
    Simonyi believes the answer is to unshackle the design of software from the details of implementation in code. "There are two meanings to software design," he explained on Tuesday. "One is, designing the artifact we're trying to implement. The other is the sheer software engineering to make that artifact come into being. I believe these are two separate roles -- the subject matter expert and the software engineer."

    Giving the former group tools to shape software will transform the landscape, according to Simonyi. Otherwise, you're stuck in the unsatisfactory present, where the people who know the most about what the software is supposed to accomplish can't directly shape the software itself: All they can do is "make a humble request to the programmer." Simonyi left Microsoft in 2002 to start a new company, Intentional Software, aimed at turning this vision into something concrete.

    It's difficult to believe that Simonyi could be ignorant of the many many years of development of CASE tools and AI projects that have promised to build software systems from specifications.

    In 1980, a Professor told a lecture hall of Sophomore Computer Science students, myself included, that almost none of them would have jobs in programming, because in just a few years we would have AI systems that would build software systems from specifications that subject specialists could input.

    I don't think we are even a little bit closer to that dream today than we were 24 years ago.

    Maybe I'm confusing things here, though. Specifications aren't exactly the same as design. I know that I've sat through some CASE tool presentations where they implied that the work was all done when the design was done, but they were doing some pretty fast hand waving. I believe that those tools did not live up to the promises of their marketing.

    Am I off-base here? Has Simonyi cracked this problem with something entirely new?

    1. Re:Building code from specification by gcaseye6677 · · Score: 3, Insightful

      Anybody remember parameterized programming about 15 years ago that was supposed to replace the need for programmers? Gotta love how that worked out.

    2. Re: Building code from specification by Black+Parrot · · Score: 3, Interesting


      > I don't think we are even a little bit closer to that dream today than we were 24 years ago.

      The problem, IMO, is that providing a specification that is detailed enough and correct enough to generate a correct program from is just as hard as writing the correct program in the first place.

      OK, maybe only as hard as writing it in a slightly higher-level language, but if so, just huse the HLL.

      --
      Sheesh, evil *and* a jerk. -- Jade
  19. Programming sucks because it's in its infancy by Anonymous Coward · · Score: 2, Insightful

    When we have the power to build highly generalized, evolutionary programs we might start to approach the reliability levels seen in nature. We will look back on all these fancy programming metaphors we have now as barely better than hunter-gathering. We haven't even had our programming agricultural revolution, let alone our industrial one.

  20. these people have had their chance by hak1du · · Score: 3, Interesting

    Sorry, I don't think any of those people have much credibility left: they have been in the business for decades, they have had enormous name recognition. We have seen the kind of software they produce. If they knew how to do better, they have had more opportunities than anybody else to fix it. I think it's time to listen to someone else.

  21. Mechanics and programmers have similar problems. by rice_burners_suck · · Score: 4, Interesting

    I admittedly haven't read the article (yet), but I'd like to include a few reasons of my own that programming stinks. As you might guess, I am a programmer.

    My friends and I compare a lot of computer things to car things. Most likely, we do that because we are enthusiasts of both. Fast cars and fast software are very similar in many respects.

    A little background information on cars is necessary to gain the full effect of my argument about programming. Although the next three paragraphs may seem unnecessary at first glance, I assure you that I am a careful writer and that you should read them.

    Car enthusiasts fall into quite a few categories. For example, people who restore classic Mopar or Chevy cars enjoy making everything look like "mint" condition. Usually, every part of the car is so spotless and beautiful that you could eat off the engine. On the other end of the classic car spectrum, there are those who will tub out the entire car and concentrate only on performance features. These cars may not look like much, but they'll break your neck if you push the gas too hard. And of course, there is an entire spectrum of prefenences between these two ideals.

    In most of these categories, the hard core enthusiasts like to do the ENTIRE job themselves. They won't let anyone else touch their cars. The wanna be's will usually contract out nearly everything, because they want the glamor of showing up at car shows and showing off their machine, but can't hold a screwdriver and don't know the difference between a 6-point wrench and an Allen wrench. And of course, there is an entire spectrum of car knowledge, experience, and do-it-yourself levels in between these two extremes.

    Somewhere in the middle of the two extremes are people like my friends and I. We do a lot of work ourselves, but when it's a complex or high-risk job, or if we don't feel like doing it because it's boring and time consuming, we'll have a professional do it. There are auto mechanics who do pretty much any job. And there are mechanics who specialize in a specific area. For example, I have my radiator guy, my transmission guy, my engine rebuilding guy, my chrome plating guy, my carpet guy, my headliner guy, and the list goes on and on. I use each specific person for the job he excels at because I understand thoroughly what I am about to explain.

    Programmers are a lot like the car enthusiasts that I am and whom I describe above. Some prefer to do EVERYTHING, like that guy who wrote 386BSD and wouldn't insert other peoples' code improvements. (The project got forked and now you've got the *BSDs, and that guy is no longer involved as far as I know.) Some prefer to concentrate only on a specific area of software, such as graphics, numerical algorithms, kernel schedulers, assembly optimizations, databases, text processing, and the list goes on and on forever. Even an area such as graphics can break down into a plethora of categories, such as charting software, user interfaces, etc.

    The biggest reason that software sucks, in my opinion, is the very same reason that the automotive repair industry sucks. I wouldn't be surprised if programmers are just as hated as car mechanics. The programmer's boss is just like the old lady who takes her car to the mechanic. Neither knows anything about the job at hand. The only thing they know is that it costs them big and the results suck.

    For the programmer's boss, the software contains bugs, is difficult and confusing for the customer to use, and takes much too long to develop, so the market window closes, the project goes over budget, and maybe higher management cancels the project altogether.

    For the little old lady, the car broke down. The mechanic wants to fix it properly. But doing so will take weeks (believe me). The symptoms are caused by one or more problems, which require several new parts and quite a lot of labor to repair. The parts may be hard to find. The old ones may need to be rebuilt. And generally, people don't like renting a car for t

  22. Interstitial Ads v. "have to pay" v. reg-only ... by timothy · · Score: 4, Insightful

    Ads can be (are not always) annoying, in any medium, but they make the content possible.

    Radio ads drone on seemingly forever, but they pay for me to listen to Coast to Coast a.m. once in a while, or NPR (whose ads, in the form of begging, are even worse, but whose content is better). Television ads, on programs not caught to TiVo, can be obnoxious, too.

    The Salon article *can* cost money (that is, you can subscribe to Salon to read it), but you can also watch an ad (or you can click on the ad and carefully look away from it) and then read the article for free. That's what I do. Sites not run as charities need to pay for their content somehow: Even some commercial websites don't make money per se, but are justified by other means (goodwill, information spreading leading to sales, etc), and some are free to read and make money with banners. Salon, unlike some sites, has provided two ways to read their stuff, meaning (I hope) that they stay in business, since I like some of their original stories. Note that reading Salon by the watch-ad/get-daypass means doesn't require you to give them demographic information, answer surveys, surrender your email, click checkboxes to avoid (yeah right!) spam, choose a password, or pay any money.

    Probably someone will come up with a way to block the content of the interstitial Salon ads: the arms race continues. But I prefer their approach to the increasing number of news sources that require registration and / or a paid subscription. The New York Times is annoying but hard to ignore as a news source, enough so that we link to it from Slashdot despite the required registration process; other papers, barring unusal circumstances, we won't link to because it's annoying to keep so many username / password combinations and have to login to read their content.

    And that it's someone from Salon who submitted ... Na und? An editor or writer with a publication or website can submit just like anyone else; I'm glad when they're up-front about it. Would you rather A. Leonard have submitted more sneakily from a throwaway hotmail account? :)

    Cheers,

    timothy

    --
    jrnl: http://tinyurl.com/c2l8yr / foes: http://tinyurl.com/ckjno5
  23. Kind of disappointed by Comatose51 · · Score: 2, Interesting

    The article doesn't provide much of the actual discussions so it's really hard for me to decide if I agree with the experts. From the article, it seems to imply that there are problems with software. That much is nothing new. Software is fragile and implemenation is difficult. However, the article doesn't really seem to get at the reason, other than to say we lack the necessary tools. So, while I agree with that much, it's nothing shocking or particularly insightful. It's disappointingly shallow for a Salon article.

    The only real shocking part to me was the Bill Gates quote. He's an Open-Source man at heart or just a hypocrite. :P

    --
    EvilCON - Made Famous by /.
  24. So how can this be done? by miu · · Score: 3, Insightful
    From the article:
    "Making programming fundamentally better might be the single most important challenge we face -- and the most difficult one." Today's software world is simply too "brittle" -- one tiny error and everything grinds to a halt: "We're constantly teetering on the edge of catastrophe." Nature and biological systems are much more flexible, adaptable and forgiving, and we should look to them for new answers. "The path forward is being biomimetic."
    This is easy to say, but what to do about it? A CPU is controlled by a set of registers and the contents of a stack, even if you virtualize those things (JVM, smalltalk, .NET, ...) and give them access controls you still have a system that is subject to massive failure once a single part of the system falls.

    So for this biomimetic approach to work would require a dramatically different machine architecture from what we have now. Of course this would also require the rewrites of all existing Operating Systems and lots of existing application and library software. So 'emulate biological systems' is a nice easy answer that does not really answer anything in the near term.

    --

    [Set Cain on fire and steal his lute.]
    1. Re:So how can this be done? by melatonin · · Score: 2, Interesting

      one tiny error and everything grinds to a halt

      This is easy to say, but what to do about it?

      Simple, you don't make programs so stupid. Here's what a program does. "OH SHIT! THAT WASN'T SUPPOSED TO HAPPEN! EXCEPTION! Oh shit, there's no exception handler. CORE DUMP!"

      The problem comes down to 'that wasn't supposed to happen.' It reminds me of my 2nd year CSC course when my prof said "assume all your input is correct." WTF? They never teach you about error handling in university (not in any curriculum that I've seen anyway).

      The problem is that 'errors' aren't talked about much; we just all agree that they're bad and throw an exception (or SIGTERM) when one happens. We're also told to write programs that are correct, and that programs are either correct or not. There's confusion there.

      Programs are either faulty or not, in that they either do what they're told or not. A correct program does what it's expected to do.

      The problem is when you confuse faults with errors. Faults must not happen. Errors are expected to happen! You can't assume that all your input is correct. You can't just bury your head in the sand and throw an 'i/o error' exception.

      You have to keep things simple and design your systems to follow certain rules. In this case, code should do what it was asked to do or not do it. That second option has to be considered as part of the design. You can't design code that will work if everything happens as expected, and will throw some kind of exception (caught by who knows what) if something unexpected happens. If you let everything have a simple chance to succeed or fail, errors can cascade cleanly to some other code that cares to handle it.

      For example, say a library is using some other library to write data. Library #2 tells lib #1 that it can't write the data asked. Lib #1 tells the code that calls it that it can't write a PNG file. The user application tells the user that it can't save the document as PNG. If exceptions were used, it would have to be caught. And by which part of this system? What if one part expects another part to catch the exception?

      The only thing missing in that example is why the failure occurred. In OOP systems it is easy to communicate between components - communication between 'black boxes' is the whole point in OOP. The way I do it is that if an object is unable to perform a requested action it returns a basic 'no' response, and the reason can be queried from that object later (model objects wouldn't have this ability and they shouldn't - but controller objects would).

      Anyway, the point is that 'errors' (which are really just things you didn't plan for but should have) do happen and you have to design your systems for it.

      Here's some food for thought, Objective-C vs. Smalltalk. In Smalltalk, every method returns 'self' (this) as a result unless you explicitly return a different object in the code. This allows you to chain messages (method calls) together,

      mailbox messages lastObject description.

      my Smalltalk's a bit rusty, but mailbox is an object, messages is a method that returns an array object, which responds to the lastObject message. This expression evauluates to the description object for the last email in the mailbox. In Objective-C, you'd write it like this,

      [[[mailbox messages] lastObject] description];

      Which does pretty much the same thing. There's one difference between Smalltalk and Objective-C, which has been debated for some time. Let's say that the messages array had a count of 0. In both Smalltalk and Objective-C code, you'd expect that lastObject return a nil value. The difference between the two languages is their concept of nil. In Smalltalk, nil an another object that raises a DoesNotUnderstand exception to any message that's sent to it. In Objective-C, nil is treated like a black hole, and sending messages to ni

      --
      Moderators should have to take a reading comprehension test.
    2. Re:So how can this be done? by SlashdotStu · · Score: 2, Insightful

      And who says that a program that experiences fundamental errors but limps along anyway is a good thing? Is it going to hose my data?

      I cite the Rule of Repair (Repair what you can -- but when you must fail, fail noisily and as soon as possible.) from "Basics of the Unix Philosophy".

    3. Re:So how can this be done? by miu · · Score: 2, Insightful
      I agree with the philosophical point, the problem is that highly configurable systems are subject to a wide variety of fundamental errors. I've caught flack on several occasions for implementing "early verbose" failure, the powers that be want systems to deal with the error and "figure out what to do". This often results in some pretty heinous code, but the servers must roll.

      So a desire for "self-healing" is motivated more by the bottom line than any sort of engineering principle. (The question of good engineering being a necessity for good business has been fought and lost too many times for me to care any more)

      --

      [Set Cain on fire and steal his lute.]
  25. Shoveling Data by nycsubway · · Score: 4, Interesting

    That sounds like most IT jobs. I've found that IT is different from research and academia. Where I work, at an insurance company, I started referring to what I do as shoveling data. Because my entire job can be summed in one flow chart. Begin, open file, read file, process data, end of file? no. read file. end of file? yes. close file. end of program.

    It's mindless. The problem with programming today is that yes, it has become a commodity. Something that people expect you to be able to sit for 8 hours a day and do continuously, without thinking or having any input of your own whether WHAT your doing is really worth it.

    There is no creativity in the corporate world, I think thats why so many people choose to work on open source software.

  26. Charles Simonyi? by Anonymous Coward · · Score: 2, Insightful

    Charles Simonyi, former MS Chief Scientist and inventor of the horror that is Hungarian Notation? I guess they picked him as an example.

  27. Simonyi stating the obvious? by sashang · · Score: 4, Interesting

    "One is, designing the artifact we're trying to implement. The other is the sheer software engineering to make that artifact come into being. I believe these are two separate roles -- the subject matter expert and the software engineer."
    Funny chap talking about how design and implementation should be separate. Seems a bit ironic considering he was the one who create Word docs where the layout and content are all packed into one file. Most decent solutions separate the layout from the content (eg: Latex, HTML/CSS). If Simoyi was a web programmer he'd be laying out his html with tables.

  28. Why this article stinks... by slamb · · Score: 4, Insightful

    The article is crap. A typical snippet:

    "There's this wonderful outpouring of creativity in the open-source world," Lanier said. "So what do they make -- another version of Unix?"

    Jef Raskin jumped in. "And what do they put on top of it? Another Windows!"

    "What are they thinking?" Lanier continued. "Why is the idealism just about how the code is shared -- what about idealism about the code itself?"

    This is similar to many articles before disparaging the WIMP (Windows, Icons, Mouse, Pointer) model. A bunch of "visionaries" who see that we've used this same model for some time and therefore are convinced it is horribly limiting, and that we are using it solely because the people who actually make systems have less imagination than people who write these kinds of articles. [*] They never have any but the most vague suggestions of a better model. They certainly never take the time to explore its limitations longer to ensure it really is workable (much less actually an improvement).

    In fact, this article is so vacuous that I'm not sure what they think stinks about software, much less why. And certainly not how to fix it.

    [*] In fairness, this article mentions people who have done some impressive work in the past (and is thus atypical of the genre). But still, I do not see any suggestions for a fundamentally better model or even any concrete problems with the existing one.

    1. Re:Why this article stinks... by nathanh · · Score: 4, Interesting
      I take it you don't know much about Raskin. He has real reasons to criticize "another Windows" as he puts it, reasons that go far beyond "we've used this same model for some time.

      Ignoring your snide attack on the previous guy's knowledge - do you really think anybody on /. doesn't know who Raskin is? - I agree with the previous guy that it's unfair to blame open-source coders for producing "more of the same". Let's look at the comments:

      "There's this wonderful outpouring of creativity in the open-source world," Lanier said. "So what do they make -- another version of Unix?"

      Jef Raskin jumped in. "And what do they put on top of it? Another Windows!"

      "What are they thinking?" Lanier continued. "Why is the idealism just about how the code is shared -- what about idealism about the code itself?"

      They say that "Windows" (meaning WIMP) on top of "UNIX" is a bad idea. Why? It's exactly what Raskin's former employer is currently doing. And Windows is essentially WIMP on top of VMS. Where is the innovation coming out of the leading two desktop OSs? They too are just rehashed versions of decades old ideas.

      I don't think it's the open-source community's responsibility to be free R&D for the entire computer industry. Isn't it enough that they are producing free software? Do they have to research it as well? What an onerous task! R&D should be in the domain of researchers and academics. It took 40 years for WIMP to progress this far. Does Raskin think open-source can turn that around over night? If so, then he has more unrealistic expectations about open-source than all the /. cheerleaders combined.

      To put it bluntly, I don't think it's fair for Raskin and Lanier to demand such a high standard from the money-poor open-source community when the ultra-rich closed source companies aren't doing any better. Microsoft pumped how many billions into their R&D department and what they did get? A ripoff of J2EE and a ripoff of MacOS X. Apple pumped billions into their own R&D and they've produced Display Postscript... I mean Display PDF... only 20 years after Adobe did it. Colour me unimpressed.

  29. From the soapbox by DaveAtFraud · · Score: 4, Insightful

    I have been working professionally in software development for not quite 24 years with experience in aerospace/defense, established commercial, "dot com", and a post dot-com startup companies plus I dabble in Linux. This still means this is a series of single data points taken in different industries at different times so take what I have to say with a grain of salt.

    The worst programming problem is unrealistic expectations on the part of management. What it really will cost and how long it will take is always too much and too long so budgets and schedules get cut. At least aerospace/defense makes an attempt to figure this out and bid the contract accordingly. The commercial world looks at when the next trade show is or something else equally irrelevant and then says it has to be done by then with the staff that's available. They end up getting what they paid for and blaming the programmers when it crashes (See my sig. Yes, I do software QA). Established commercial companies aren't quite as bad but there is still a tendency for making the sale to somehow trump in the determination of what can be developed with the time and resources available. The resources may be there but there is a tendency to try to produce a baby in one month by getting nine women pregnant and then wondering why there is no baby after the month is up in spite of publishing detailed schedules.

    In contrast, I think one of the primary reasons free/open source software tends to be of significantly higher quality is that these factors don't come into play. A feature or program either is ready or it is not. If it is not, it stays as a development project until it either dies of apathy or enough people are attracted to it to make it into something real. For established projects, you have people like Linus who "own" the project and ensure that contributions only get incorporated if they pass muster.

    I find it amusing that one of the criticisms of FOSS is that the schedules are unpredictable but the reality is that software development schedules ARE somewhat unpredictable* but at least the FOSS development process recognizes this and instead focuses on the quality of the program rather than pretending it doesn't exist and coughing up something that isn't really done based on someone else's absurd schedule.

    * If someone develops the same sort of software over and over again (think IBM) they will eventually gain enough experience to have a reasonable shot at scheduling and resourcing a project correctly. The fewer data points you have, the less likely you are to get it right.

    --
    They that can give up essential liberty to obtain a little temporary safety deserve neither safety nor liberty.
    Ben
  30. Re:And Here's the Google Cache to the Article by JPriest · · Score: 5, Informative
    Here is the same link without the annoying highlighted words.
    just remove all+the+search+terms

    The same link here with extra words highlighted.

    --
    Saying Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
  31. Keep it simple, stupid. by melatonin · · Score: 2, Insightful

    Uh, I haven't read the salon article.

    I think it comes down to a matter of discipline. One of the things that made Unix such a success is KISS. Unix is built around the philo that you should focus on one thing and do that one thing well. Tools in Unix don't re-invent the wheel to get stuff done; they rely on other tools.

    Another thing that comes to mind is what Apple's VP of hardware engineering Jon Rubenstein said in an interview. He said that engineers get too creative when they do work, and end up engineering things that do not need engineering - the rote work, as he put it. You have to get engineers to be creative in the non-rote work.

    IMO, Java is too complicated and easily gets in the way (I'm not going to touch C++ here). At least with C you can start off with a one-line Hello World program. I've seen first-year CS students trying to understand the many lines of code that constitutes a Java Hello World program (there are so many elements to a typical Java HW example; the class declaration, the static main declaration, the exception handler, System.out, etc. Every token except for "Hello, world!" is gobbldygook to newbies). In the case of C, it can go either way. To a well disciplined programmer, C programs can be extremely elegant. On the other hand, you can end up with some really fug-ugly code. However, a Pascal programmer is more likely to use C in an elegant way because Pascal is simple enough to make a programmer focus on the task, restricting the programmer's freedom to do stupid things.

    Although many argue that type-safety is incredibly important, that you can get really weird behaviour if you don't have type-safety, and that it's important that languages restrict programmers by being type-safe. Uh, no. Type-safety is like training wheels. If your program is well structured, 'types' in the program are for the most part irrelevant. What matters is what the code is doing, and knowing what the general flow of the program accomplishes. In a well-structured program with a well-defined execution flow, the data that moves around should always be well defined anyway.

    Here's another way to look at it (something an old professor brought up). What useful program has no input and produces no output? There is no such thing. Your job as a programmer is to transform your input sources to your desired output products. And the path to get that done should be as simple as possible. Unfortunately, we've got languages with templates, boxing/unboxing, exceptions, RTTI, etc as our main tools, that often provokes us to design systems that are more complicated than they should be.

    Really, it's like an artist trying to make a painting, and going out and buying a self-cleaning, featherweight, self-balancing $1K paintbrush. That's way beyond the point, isn't it? An artist needs to envision their artwork and realize it in their medium of choice. Similarly, a programmer needs to understand the problem they need to solve and then efficiently implement it on their target system (be it a PC or an automated toaster oven). Language features don't make programmers write better programs; discipline does. I can't remember the example perfectly, but it's something like, if you give a team 20 tools to do the job, they'll try and use all 20 tools. If you give a team 4 of those tools that they really need, they'll find a solution too - and a more efficient one.

    Anyway, KISS. You need to focus on what execution paths your program takes and what affects those execution paths (and note that exceptions throw a wrench into that. I avoid them). Don't get too creative with the language you're using. The best thing for a programmer to do is to learn how to program non-trivial projects in several different languages (Java and C++ don't count as different languages). And then hopefully more programmers will demand cleaner programming environments that aren't just souped-up C++ clones, and programming will stink less. (Take a look at Smalltalk some time).

    --
    Moderators should have to take a reading comprehension test.
    1. Re:Keep it simple, stupid. by MythMoth · · Score: 4, Informative

      I think you're over stating your case.

      In pure line count a minimal Java Hello World would only have one additional line.

      It is crammed with keywords, and it contains the notion of Objects and Classes.

      But I see that as a good thing - you can concentrate on the mainline code and introduce the student to control flow and so forth, but when you come to the concepts of classes you've got a nice immediate example to point to.

      It's so much easier to teach a language when a common reaction to new information is "oh, I wondered what that was for" rather than "why would I ever need that ?"

      Finally I have to completely disagree with you about type safety. A perfectly written and comprehended program does not need type safety. A real world program will never be either, and type safety will prevent some of the nastiest bugs from occurring and keep your data intact.

      I have no problem with C in its place, but its place is not as a learning language or as a business language.

      D.

      --
      --- These are not words: wierd, genious, rediculous
    2. Re:Keep it simple, stupid. by OnanTheBarbarian · · Score: 3, Insightful

      How does this get modded "insightful"? I'm sort of tired of people parading around their ignorance about programming disguised as 'good design sense'.

      "Type-safety is like training wheels."

      Yeah, right. One day you graduate to the level of Supreme Programming God, with the power to effortlessly remember the exact types of all the "void *" pointers they left lying around. And of course, you don't need type safety when interfacing to other people's code, because you're just so damn intelligent, you instantly understand everything about their code and don't need those 'training wheels'. Because lord knows we all understand exactly what the other programmers mean and don't need no steenking type system to communicate what should and shouldn't be legal.

      "Unfortunately, we've got languages with templates, boxing/unboxing, exceptions, RTTI, etc as our main tools, that often provokes us to design systems that are more complicated than they should be."

      I love Slashdot for these kind of broad-brush statments. Which language uses exceptions or RTTI as its 'main tool', exactly? And who the hell thinks exceptions and templates are more complicated than implementing the same features _without_ exceptions or templates.

      My guess: someone who has never written a large program* or a program that actually requires generic programming or sophisticated exception handling (yes, sometimes it is OK to just print an error message and quit). The stuff about type safety also suggests near-total lack of experience with programming large systems with portions of the system written by other people.

      Also, absent turning newlines into spaces, how do you write a properly formatted 1-line "Hello World" program in C? If you're going to complain about Java's main declaration and System.out, you should at least take into account C's main declaration, and the equally inscrutable (to a first-year student) '#include' line.

      * Pre-emptively: to the people that always post about how you don't actually need to ever build large systems, because you can always build elegant collections of small, gem-like, perfect tools, please close your Web browsers and finish your sophomore CS homework.

  32. I already sent this letter in response.... by ciggieposeur · · Score: 5, Insightful

    Quoting the article: "Giving the [software architects] tools to shape software will transform the landscape, according to Simonyi. Otherwise, you're stuck in the unsatisfactory present, where the people who know the most about what the software is supposed to accomplish can't directly shape the software itself: All they can do is 'make a humble request to the programmer.'"

    As a programmer who recently stopped working for a very very very large computer firm that sells both hardware and software, let me say that Simonyi's point makes zero sense. Tools already exist to "shape software," and they are known as programming languages like Visual Basic, C, C++, C#, Java, Perl, PHP, Python, etc...

    I'm frankly sick of architects (that's the term for people who say they design software but don't actually design software) who bemoan the gap between their glorious visions and the real products their teams end up producing. These people need to click "Close" on their UML models and go get their hands dirty by writing parts of the production code. Then they'll understand the real-world constraints that their codeless design didn't account for, like internationalization, performance bottlenecks, user authentication, heterogenous networked environments, and ACID transaction support (to name the first few).

    Oh yeah, and the reason open-source developers wrote a Unix-like operating system (Linux) and put a Windows-like interface on top of it (X11 + GNOME/KDE) is because these are both very reasonable and mature solutions for a variety of computing needs. If any of you architects out there want something besides Linux that conveniently abstracts away 99.9% of the hardware interaction yet also provides an easy-to-learn interface for general users, you are more than welcome to write it yourself. Or you can model it in UML, click some buttons, and hope it compiles.

    Why do I think software sucks? Because market droids and architects who forgot how to program get together and promise their customers AI in only six months.

    1. Re:I already sent this letter in response.... by Salamander · · Score: 2, Insightful
      I'm frankly sick of architects (that's the term for people who say they design software but don't actually design software) who bemoan the gap between their glorious visions and the real products their teams end up producing. These people need to click "Close" on their UML models and go get their hands dirty by writing parts of the production code. Then they'll understand the real-world constraints that their codeless design didn't account for, like internationalization, performance bottlenecks, user authentication, heterogenous networked environments, and ACID transaction support (to name the first few).

      While I generally agree with your point and have spent a great deal of my own time and energy over the years ranting in much the same way about reality-free architects, I think you also need to consider the other side of the story. Just as you get tired of architects who stay up at the 30,000 foot level and never come to earth to code, architects get tired of programmers who are grubbing around in the dirt and refuse to look at how their little piece affects the whole. Any project of significant complexity needs people working at both high and low conceptual levels. A message-formatting module might be important, for example, but still a small part of the overall design. It shouldn't consume huge amounts of (human or machine) resources, or drive interface definitions throughout the rest of the system, but all too often the guy writing the message-formatting module acts like it's The Only Thing That Matters. It's an architect's job to remind such people that there are other things that matter too. There are other modules, and other considerations, and of course the features that users need and developers occasionally forget. Some of those considerations, like security or performance, are of immediate concern to developers, while others involve different constituencies.

      No you can't do it that way, the architect has to say, because it complicates recovery or doubles the number of scenarios QA has to test or requires an overhaul to the documentation or leaves our support people hanging as they try to explain a weird program limitation to an unsympathetic customer. Of course the person who just wants to get their one piece done doesn't like to hear that, and they go off grumbling about architects who don't understand how hard it is to write a decent message-formatting module. Screw 'em. Somebody has to look out for how all the pieces will eventually fit together or else you end up with a dozen brilliantly-coded modules that don't work together. Been there, done that, seen projects and companies fail because of it. Yes, there are reality-free architects who spend way too much time with their nose stuck in the latest $10K piece of UML-diagramming junk and don't have Clue One about how anything actually works. Maybe they're even the majority of architects, and every one of them should be shot (except that shooting's too quick). However, there are also architects who can code as well as anyone else on their team in any of a half-dozen languages, and who would love to prove it day in or day out, but who end up being architects because they're the only ones on their team who can do anything but code. More projects fail due to a lack of architecture than due to an excess of it.

      --
      Slashdot - News for Herds. Stuff that Splatters.
  33. Re:The silver bullet already exists by eclectro · · Score: 3, Funny

    The silver bullet of programming already exists. Link.

    For a minute there I thought you meant this silver bullet

    I know that I am a much better programmer after a couple of "silver bullets".

    --
    Take the cheese to sickbay, the doctor should see it as soon as possible - B'Elanna Torres, "Learning Curve"
  34. Hungarian Notation by Speare · · Score: 4, Informative

    The linked page didn't mention that Charles Simonyi is the Hungarian for whom the term, Hungarian Notation is named.

    Hungarian Notation is that Microsoft Windows programming naming strategy where the first few characters of a variable name should hint to the reader as to its data type. So hToolbox tips you to understand that it was a HANDLE type, even without scrolling your editor up a couple pages to find out; papszEnvironment would likewise tell a Win32 devotee that it was a Pointer to an Array of Pointers to Zero-terminated Strings.

    It's not the first such instance of binding data type and name, and it won't be the last. For example, FORTRAN compilers have long had implicit variables; any variable not otherwise declared that started with I, J, K, L, M, or N would be assumed to be an integer, where most other variables would assume a real (floating-point) type. So FORCE(LAMBDA) directs the code to a real scalar from a real array, given an integer index. Many programmers start a routine with IMPLICIT NONE to disable this assumptive behavior, as mistakes are easy to make when you let the machine decide things for you.

    BASIC would use sigils at the end of the variable names (NAME$, COUNT#, and scripting languages like Perl use sigils that precede the name %phones, @log, $count).

    --
    [ .sig file not found ]
    1. Re:Hungarian Notation by jcr · · Score: 2, Insightful

      The linked page didn't mention that Charles Simonyi is the Hungarian for whom the term, Hungarian Notation is named. ..which notation is nothing but an irritant when code is well-structured.

      -jcr

      --
      The only title of honor that a tyrant can grant is "Enemy of the State."
    2. Re:Hungarian Notation by PopCulture · · Score: 3, Insightful

      which notation is nothing but an irritant when code is well-structured

      which happens how many times when you buy software from anybody.

      which happens how many times when your own development team is faced with insane deadlines and unrealistic specs.

      Which happens how many times in the post dot com boom?

      --

      Here's to finally giving Bush his exit strategy in November
    3. Re:Hungarian Notation by jhoger · · Score: 4, Insightful

      It makes variable names butt ugly.

      The farthest I am willing to go is to end my pointer variable names with the letter p, and pointer-to-pointers with pp. Array names don't get a suffix, since they're not really pointers.

      It makes the code leaps and bounds clearer without the hideous ugliness of Hungarian notation. And pointers is where the bad errors are, so it's the bang-for-the-buck here...

    4. Re:Hungarian Notation by arkanes · · Score: 4, Insightful

      It's usefull for what it does, but it does make code damn fugly (and near-unreadable, for me), and theres far better tools now for figuring out what a variable is.

    5. Re:Hungarian Notation by pipacs · · Score: 5, Insightful
      It makes variable names butt ugly.

      Another problem is that if you change types, you have to change the names, too. Or if you don't, you end up with a completely misleading code.

    6. Re:Hungarian Notation by prockcore · · Score: 4, Insightful

      even without scrolling your editor up a couple pages to find out; papszEnvironment would likewise tell a Win32 devotee that it was a Pointer to an Array of Pointers to Zero-terminated Strings.

      No it wouldn't. It would tell a win32 devotee that it started out that way.. it may not be that way now.

      Look at how many "lp" variables are in the win32 headers.

      Hungarian Notation is the most horrible concept ever because it always ends up lying. I bet that's why MS is so slow to fix buffer overflows.. in order to change a variable from an int to a long is an arduous process.

    7. Re:Hungarian Notation by fforw · · Score: 4, Funny
      The linked page didn't mention that Charles Simonyi is the Hungarian for whom the term, Hungarian Notation is named.

      my first thought was :
      why should I listen to what m_plzstrSimonyi has to say about programming?

      --
      while (!asleep()) sheep++
    8. Re:Hungarian Notation by Anonymous Coward · · Score: 2, Interesting

      Grandparent failed to mention that it is equally irritant when the code is badly structured as well. Actually it might be even worse, since the notation is possibly also lying then ("hey, I'll just change this to unsigned without touching the name").

    9. Re:Hungarian Notation by arkanes · · Score: 2, Insightful

      I don't care if you use it or not, but I thought we were talking about the relative merits of it. I prefer descriptive and readable variable names, and I rely on automated tools and an IDE to show me the type if my memory fails. Note that I'm familiar with Hungarian notation and I still think it fails the readability test - it's messy and distracts from the variable name which is where the real meaning is.

    10. Re:Hungarian Notation by Ed+Avis · · Score: 2, Insightful

      I feel that if you want to use a notation where the type of a variable determines part of its name, then this should be checked by the compiler. Furthermore, it should be easy to strip off the type prefixes when editing code (for those who don't like them) and add them back, since they can be automatically determined from the variable's type.

      Manually prefixing each variable name with redundant information is the kind of extra work that I'd rather have the computer do for me.

      --
      -- Ed Avis ed@membled.com
    11. Re:Hungarian Notation by dustmite · · Score: 2, Informative

      Hungarian Notation is not a "Microsoft thing". If you've ever bothered to read the original Charles Simonyi paper, it has nothing to do with Windows, and the original seemed more tailored for e.g. physics concepts than window and process handles. Microsoft later adopted an adapted version of this for their own coding. It's not a "Microsoft thing" or a "Windows thing", sheez, if I had a cent for every time someone repeated that bit of misinformation.

    12. Re:Hungarian Notation by john.r.strohm · · Score: 4, Informative

      Hungarian notation was originally developed as a band-aid (tm) for the near-complete lack of type checking in C. When all ints are created equal, and may be freely assigned to each other, and pointers must routinely be type-coerced to something else, and the compiler refuses to help the programmer keep things straight, something like Hungarian notation becomes necessary.

      Hungarian notation declined after Stroustrup added strong typing to C++. It is worth noting that Stroustrup never even considered NOT doing strong typing in C++. (Read his book on the design and evolution of C++.) Distaste on the part of hard-line C programmers for strong typing also declined, after C++ forced them to eat their broccoli, and they discovered it actually tasted pretty good (by catching errors that would otherwise not have been found nearly as easily).

      It is also worth noting that Hungarian notation never caught on in any language other than C. In particular, Ada programmers never bothered with it: the Ada type system was rich enough that it could do everything that Hungarian notation pretended to do, and enforce it, by requiring compilers to refuse to compile type-incorrect programs.

      (Somewhere, recently, I saw something about a commercial satellite project that was forced to use Ada, because there was no C/C++ compiler available for a recently-declassified microprocessor. Their programmers screamed bloody murder at the idea. The screams stopped when they noticed that the Ada compiler was catching errors for them.)

    13. Re:Hungarian Notation by humblecoder · · Score: 2, Funny

      This has got to be the perfect troll!!

      This post immediately leads to an (off-topic) flame war about the relative merits (and lack thereof) of said notation, AND at the same time it gets modded up to 5!

      I bow down before your superior posting skills...

    14. Re:Hungarian Notation by Arkaein · · Score: 2, Interesting

      This is true if you explicitly append a character for the type of every variable. However, there are other uses of Hungarian notation that imply more intent than explicit types.

      In my C++ code I tend to use the following conventions:

      m_ = member variable
      sm_ = static member variable
      g_ = global

      These will not change unless the variable is moved to an entirely new scope.

      Actual type annotations:

      p = pointer (not likely to change unless all code using it changes)
      n = integer counter (usually int, but long or char could work also)
      str = string (not always used, and I know MFC/Win32 uses sz, but pretty clear)

      Combine these, and I know that m_pObject is a pointer to a object of some sort which is a member of the current class.

      That's basically it. A few characters that help convey intent, which is I believe the purpose of a good variable name. These examples are invariant to minor changes in type, such as switching float to double.

      I would agree there are bad emples of Hungarian notion, notably by Microsoft. I really hate the lp* notation. Only microsoft would feel the need to declare a whole new type that is simply a pointer to another type.

    15. Re:Hungarian Notation by GooberToo · · Score: 4, Insightful

      I remember reading DD mag years ago. They had a series of articles on why HN sucked. For me, the ones that really stuck in my head were:

      o When properly used, it created many ambigious meanings, which defeated the whole purpose of using it. Most of these ambiguities centered around various pointer constructs, which is supposedly one of the major areas which it attempts to address. Basically, HN is broken right out of the gate.

      o It often required more typing, which slowed development and increased typo error rates. Which, in turn, required another round of typo fixing and compile attempts.

      o While HN provides "instant" type information, it's often harder to read, especially for complex types, requiring much longer than an "instant" duration to comprehend or extract the information that it's attempting to provide.

      o Maintaining code is very problematic. Changing the type of a variable may result in changes in countless files. This increases development time. It also causes a lot of garbage to be created in RC logs, which may of otherwise required changes in as little as one file.

      Long story short, the disadvantages of HN do not justify what is basically a single reward, when it actually works. Basically, there are smart programmers that use good names which help convey the same types of "instant" type information and then there are bad programmers that insist on using HN.

    16. Re:Hungarian Notation by Barryo_Stereo · · Score: 2, Insightful

      Since I haven't yet seen my main objection to HR posted, I'll add it in for the archives: What do you do first and most when reading code? Try to figure out what is happening at that point. The first thing you should run into is a variable name that is descriptive and will help this out. After all else fails, when debugging, you would check the type. However, HR is backwards in that the type appears prominently first and slows down the normal understanding of the purpose of the code. Not a big deal, but one more thing to make debugging more difficult.

  35. Programming = Art by HarveyBirdman · · Score: 4, Funny
    Oh it *is* an art.

    Sadly it's the type of art where they paint with feces.

    --
    --- Ban humanity.
  36. Unrealistic expectations (Re:From the soapbox) by BobaFett · · Score: 2, Informative

    Unrealistic expectations? Yes. Of the management? That's the least of our problems. The "common sense" expectations for software are vastly unrealistic. Modern software tools are incredibly complex systems, both in the number of internal "degrees of freedom" and in their interaction with the environment. Yet they are expected by the public at large to function properly under circumstances which could be more different from what it was designed for than, say, driving a Ford across the lake (why is nobody complaining that Ford was lax in their testing because they only tested their cars on roads, which, after all, cover a tiny fraction of Earth surface?)

    At the same time, software is perhaps the only industry where everyone is a friggin expert. Most people (in the US anyway) happily pay someone $25 to change their oil. How many are willing to pay someone $25 to install a new sound card in their PC and load drivers? And, if you look at the complexity of interactions between parts of the system and open-endedness of the interface with the environment, oil change is downright primitive compared to sound card change. But no, for some reason it should be "easy". Look at everyone who enables "expert mode" on their software, while even "novice mode" presents more controls than a smal airplane.

    And the only people who actually understand the complexity of the software, the software engineers, somehow let themselves become convinced that software really should allow millions of users to do thousands of things they want, the way they want, all at once, and be "easy" at the same time.

  37. Why an old C64 hack thinks programming sucks by MagikSlinger · · Score: 5, Insightful

    I hate programming now. I loathe the thought of it. Not because I hate the act of programming, but the systems I have to work with.

    Sure, in the nice old days, the C64 and IBM PC were fairly easy to code for, but they also gave you very little bang for the buck. The nice thing was a couple hours of programming could get something nice out.

    Now, it can take me a couple hours to do even a simple notepad application from scratch. I'm forever spending lines of code to fill in structures or respond to all the events an API wants.

    The computers got more powerful, and the APIs also got more powerful, but now I spend so much time filling out basic structures that I don't need. I'd rather a lot of that stuff was user configurable or stored in an XML file somewhere. I don't want to have to know about allocating & positioning fonts! I just want to dump it in a nice scrolling box.

    It's like a bureacratic nightmare writing code now. Sure, there's MFC, etc., but that's like the "easy" tax form. The moment you want to do just one thing different, you're back to square one. And the learning curve, sheesh!

    That's why I like projects like XUL. We've made the APIs so programmer centric, that I can't breathe anymore. I just want to code the important stuff then let someone else make the GUI pretty.

    --
    The bitter lessons of a veteran coder: http://bitterprogrammer.blogspot.com
    1. Re:Why an old C64 hack thinks programming sucks by soft_guy · · Score: 4, Interesting

      From your post, it sounds to me like you are doing win32 programming. It also sounds like you are trying to use a bunch of those calls that Microsoft has that end in "ex".

      You're right. Those damn calls have so many goddamned parameters and complicated structures to fill out, it feels like you're going on a snipe hunt every time you want to make a system call.

      Try Qt. Its not quite as efficient as win32, but for GUIs, it generally doesn't matter. For other things, the key is to make as few system calls as possible and instead rely on the C/C++ standard libraries.

      I'm lucky. I get to write commercial software for MacOS X using Cocoa. Still, the bugs I have are mostly due to having to make system calls. When I'm writing code to hold and manipulate data using the STL, I have very few bugs. Where I run into trouble is when I want to use something like Quicktime or other system APIs where I don't really know what the calls are doing and there are a lot of undocumented gotchas.

      --
      Avoid Missing Ball for High Score
  38. Last bastion of the tired/lazy/stupid/damned.... by MagicDude · · Score: 2

    One reason I believe that programming is bad these days is that the market is flooded with poor programmers. At my school, many freshmen come in with lofty goals about being computer systems engineers, or electrical engineers, or something like that, but they get their little freshmen butts kicked by the carriculum and end up dropping engineering. Most people I've seen this happen to end up switching to Computer Science or IT. Combine these people with those who came into college to do CS or IT, and you have a glut of people entering the market trying to score programming jobs. And some of these people are those who kinda just fell into it with no real interest other than to graduate college. I think CS carriculums should be more intensive so as it isn't used as a fallback major for those who can't hack it in other fields.

  39. In some cases, getting better and better... by BrianMarshall · · Score: 2, Interesting
    I love to program - it is a craft and I love to do it well. I started with BASIC and FORTRAN in a high school computer club (with time donated by the local technical college), and I wrote FORTRAN for most of the '80s.

    The thing was, even in the late 80's, to mention that a particular approach would be 'elegant' was the kiss of death; it meant that you were amusing yourself at the company's expense rather than doing your job. There was still a strong desire in big companies to control programming with methodologies and basically attempt to do things in such a way that talent was not required. It was like the military - they don't/didn't want talent; they wanted interchangeable programmers that could be put onto any job.

    This is undoubtedly still true today in many cases.

    But, more and more, companies want senior talented people. And more and more, companies realize that when a talented programmer claims to have an elegant solution, it means simple, reliable and fundamentally sound.

    More and more, companies are realizing that any idiot can write complicated software; it takes a really good programmer to write a simple, sound solution.

    Of course, I am talking about real programming here, not dragging boxes around on a form and putting 2 lines of code behind a button.

    --
    "When the going gets weird, the weird turn pro" -- HST
  40. Simonyi's Intentional Software Explained by Vagary · · Score: 3, Informative

    If anybody else goes to Simonyi's company and still can't figure out what they're talking about (mostly because it's vapourware at the moment, I believe), may I direct you to this Wiki. It turns out that he thinks source transformation tools will change the world.

    I'm told that my university is one of the leading source transformation research centres in the world, but the only interesting things they're producing right now are for understanding legacy systems. So yes, there's probably a lot of money in source transformation, but it's also boring as hell.

  41. and this is why I hate copyright by Anonymous Coward · · Score: 4, Insightful

    Admittedly it was outside of the letter of the law to post this outside of its home site. But this is the internet. The expectation is to be able to link to another part of someone else's site so that we have this inter-related "web" of information. The commercialization of the internet with broadcast paradigm limitations destroys the peer-to-peer web-like nature of the ... of the web. Linking was supposed to be the proper attribution format for the web. The salon web site (and several other web sites) don't really allow this any more. The are definitely resources available through the internet, but they are no longer really part of the web, as they have chosen not to play by the rules and guidelines of the medium. If they don't want to play by the rules, they can leave.

    As for copyright: Copyright was meant to limit copying with copy presses. The world wide web is not what the provision was designed for. I haven't visited Salon since they went with this advertising scheme. I would not have gone to their site if this hadn't been posted here. I'm reading web pages for news, and if I wanted to mindlessly watch ads as I was told to by my corporate masters, I'd be watching TV instead. If salon wants to force ads, they should be on TV or Radio. This is the wrong format for that crap. I don't think this loses them anything, as many other people here feel the same way and won't even go through the hassle of a free reg. to read NYTimes articles.

    After I lost my third slashdot username and just started signing my AC posts. If I couldn't post as an AC, I wouldn't post at all. I have better things to do than jump through someone else's hoops.

    Anyway, even the letter-ignoring law abiding slashdotters understand the bad karma of direct posting, but the impetus for doing so was that the submission of this article appeared to be an intentionally subversive advertising ploy. "Submit to a news site so that they will do the work of advertising for us so we don't have to pay for it, then force them to watch ads so that we get paid for it." Even if it wasn't like that, it surely fails to avoid the appearance of impropriety; and as cynical and paranoid as the techno-elite usually are, it was assumed that someone was trying to pull a fast one, so we pulled back.

    I'm glad I got to read it. It was nice. If it hadn't been posted, I wouldn't have read it. Salon gained from this by having content attributed to them that was of decent quality. I'd consider going back if it hadn't been made quite clear that they are still doing the crap that made me start my boycott of them to begin with. If they didn't want the article put up on slashdot, then someone from salon shouldn't have sent it in.

    I have no remorse for a commercial organization failing to reap the full financial rewards of exploiting a non-profit web site, just like I have no tolerance for SPAM or unsolicited phone calls hijacking a communications service for the purpose of advertising against the will of the audience. Not to mention leveraging laws well outside their intended boundaries to bully common citizens into compliance with unfair practices.

    - theed.

  42. Why it really sucks by Hamster+Of+Death · · Score: 4, Insightful

    Nobody knows how it should be done. Plain and simple. Sure there are 50 different ways to shuffle 1's and 0's around to produce something that kind of solves a problem someone may or may not have (customers seldom even know the problem they are paying to solve).

    Add to that the string of phbs, development team, testing team. Then you end up with people who don't really understand the problem, solving it with tools that we don't know if they work or not, or which they might not even fully understand. (Have you proved GCC is correct lately? How about .NET?)

    So until we can get a method that ties programming to what it really is (problem solving) we get to poke about blindly in the dark to find our 'solution' and hope it shuts up the customer long enough for them to write the check. We're slowly getting there, but because programming is still a new thing it hasn't been remotely fully explored yet.

    There's lots of room to figure out how to make a computer solve a problem once it's defined. Finding the problem is a major portion of the battle. The rest comes in finding a repeatable, provable way to solve it.

    Until that happens youll need your blindfold and poking stick handy.

  43. No Silver Bullets by BrianMarshall · · Score: 2, Interesting
    As Fred Brooks pointed out in the classic paper in 1987, there are "No Silver Bullets".

    Writing software is difficult because it actually is complex - a piece of software of any size has more "moving parts" than (almost?) any other thing people build.

    Things have gotten better over the last 50 years - high-level languages, object-oriented design and information-hiding to reduce interdependencies.

    But software is still one of the most complex things people make. Better tools and approaches help, but there are no silver bullets - software is complex because it is complex.

    --
    "When the going gets weird, the weird turn pro" -- HST
  44. The reason programing sucks... by rusty0101 · · Score: 2, Interesting

    ... doesn't fit on a bumper sticker, so no one is really concerned about it.

    Seriously.

    Physics is about finding the one inch formula. One of which is e=mc^2

    Accounting is about making sure that the accounts ballance. Profit is the difference between cost and revenue. Cost plus Profit equals Revenue. Accountants recognize that they are part of both the "Cost" and "Profit". Good business management recognizes that eliminating the Cost will also eliminate the Revenue, which will also eliminate the Profit.

    Programing is not currently about finding the least expensive way to solve a problem. It is about finding a usable way to help people accomplish their desires.

    Computer Science, such that it is, in most cases is a euphamism for Software Engineering. The goals of Software Engineering when I was going to school was to write "provable" software. "Provable" software is software that you can "prove" every line of it does exactly what the "engineer" who wrote it intended, nothing more, nothing less. If the developer writes to variable "n" in function "A", and the scope of the design is that variable "n" is only applicable to function "A" then when function "B" changes variable "n", it should not affect what function "A" expects it to be.

    That is a very simplified version of what Software Engineering is all about. Software development is supposed to be about using the tools that software engineers have used to build useful software. All too often it is about using tools other software developers have created instead, because other software developers have gone ahead and created something to work with, because they got tired of waiting on Software Engineers to get over being elietist, and actually putting together provable designs.

    A suspension bridge is a beautiful piece of engineering. It is also very often a very beautiful piece of hardware. The Tacomma Narrows disaster happens when a piece of engineering comes across a situation that the engineer was not expecting, and didn't design for.

    Likewise software developers are using unproven tools to acomplish various tasks. Then they are being asked to work arround the problems that come up when their tools encounter situations that the developers of those tools had no idea would ever be asked of those tools.

    As a result, we currently get buffer overflows, memory overruns, as well as hundreds of other problems that can best be described as anoyances, and at worst be described as security flaws.

    ------

    Alternatives to the WIMP design, as well as the Unix understructure.

    While Lanier bemones the fact that we have not "surpassed" the Unix and Windowing mode of computer archetecture and interface, at best he can be said to have waved his hands at a new direction, (VR). The only "improvement" I have observed is the time based document stream view that has come out of MIT, and even that can be considered a WMP view (minus the icons at the moment.) For some people this very well may be an improvement, though I think it is only useful to those people who look at time centric management of information. In other words, I think it's a great way to manipulate stuff like e-mail, but probably wouldn't be of particular use in managing a book store inventory.

    "Mind Mapping" seems to me to be a "better" way of managing information, but I don't know that it is a great idea as an interface for a computer. Perhaps that's based upon my own limitation as my input to a computer is a small set of serial interfaces, rarely used concurrently, and the output is a couple of serial interfaces, and a "screen" or "window" of data that I process as information.

    As long as that is what my interface to a computer is, I will probably run into limitations as to what I can expect from a computer. Those limitations are going to affect how I interact with the computer, as well as how I, and others, develop software for the computer.

    Rather than bemoning the current state of the art as being of the same

    --
    You never know...
  45. The difference is obvious (to me, at least) by jjohnson · · Score: 2, Insightful

    I think comparing the progress that software development makes to the progress of hardware development is a fundamental mistake. Moore's Law depends upon the properties of the materials we're using and our ability to exploit them--chip fabrication, heat conduction, power consumption--not upon our ability to design chips. It's not the chip layout that's improving, it's our ability to milk what's already in the materials, which yields exponential growth. We're not responsible for that growth curve, the materials are. Doubling the length of our lever gets us the ability to move four times the weight.

    Software, on the other hand, is all about design. Of course it's not going to double in power every 18 months--we're not doubling in design ability every 18 months. If the computing of our hardware were limited to our chip design abilities, it would be going just as slowly.

    --
    Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
  46. People, not computers by Mr.Oreo · · Score: 5, Interesting

    This is coming from a game programming point of view, but I think it applies to all facets of software development. Programming sucks these days because of the communities it has created.

    I'm not going to be a Yancy and specify where these points aren't applicable. Take what you read here with a grain of salt, but I guarantee you can apply one of these to an experience you've had.

    - Zealot Trolls.Answering someone's question with a code solution that contains even the pettiest OO fault, even if it has nothing to do with OOP, will get you nothing but a bunch of OOP zealots on your ass, saying 'WRONG! That shouldn't be public' or 'WRONG. The destructor should be virtual' or 'WRONG. Should pass by reference'. You get the point. There are more and more trolls on boards these days looking to stroke their ego by posting extremely minor corrections to mostly correct solutions.

    - Wheel Engineers. Stop making 3D engines. Stop making WinSock networking wrappers. Stop making ray-tracers. Stop making things that have been done 1000x before unless a)It's for fun/educational purposes. b) You're going to do something someone else hasn't. Even if there's _one_ thing in your coding project that someone hasn't done before, it's definitly worth it to create. Red-Faction was the last game IMO that added anything new to the world of 3D engines, other than 'taking advantage of x graphics card feature'. Physics is another area to inovate with game engines. Please Stop Re-Inveting The Wheel and giving it some cheezy name.

    - Meatless Code. Anyone who has worked with the 3DS Max SDK knows what I'm talking about. Important data is fragmented everywhere, and accessed in 10 different ways. You spend more time reading the API docs than you do programming. I was reading through some ASP.net code the other day, and it took 45 lines to update a table with an SQL command. I read through it, and it could be done with 5 narrow lines of perl code. With C++, you could probably spend a solid two weeks writting generic 'manager' code that does absolutely nothing. Programmers need to learn to draw the line between 'productive' code and 'silly' code. Having a DataObjectFactoryCreatorManager class for 'ping' program, is a bit silly.

    If I could do the world a favour, it would be to send all coders a letter that simply said "You are not the best. Live with it.". If I read another reply to a simple question with some dork awkwardly throwing in that he's "A 20 year C programmer who wrote a compiler on a TSK-110ZaxonBeta when I was 11". No one cares about your background unless they ask, or it's relevant.

    Other than that, programming is fine. Except for Java.

    --
    - Mr.Oreo
    1. Re:People, not computers by Anonymous Coward · · Score: 2, Interesting

      Sorry. I usually hack up my own wheel quicker than adapt to someone elses since that would:

      a) require learning the interface
      b) need glueing code
      c) generate a dependency problem

  47. Re:Have you looked at the ads? by The+Snowman · · Score: 4, Insightful

    If you think this post had alot of obscenities, you should have seen the email I sent to salon.

    Salon writes good articles for the most part, and they have had rough financial times. If ignoring an "internet commercial" means they get money to keep writing articles such as this one, so be it. I do not like it, but I understand they are just playing the system. I understand economics well enough to know that this is a necessary evil.

    Now, as to your comment, please try to be constructive. I communicate with companies and my Congressmen on a regular basis, both email and snail mail. Some of the issues are very dear to me, such as the letter I wrote to Dell berating them for laying off American call center employees to outsource to India. Not once in my letter did I swear or come across as uneducated, unintelligent, or uncaring. Swearing and other vulgar language does nothing to help your cause. Be constructive. Do not just say "ads suck," provide them with a solution to your perceived problem. I think you will be hard pressed to do this, however. Their solution is very good for their company and not too intrusive to their readers, although it is intrusive.

    --
    24 beers in a case, 24 hours in a day. Coincidence? I think not!
  48. Re:Resource is the problem by jhoger · · Score: 2, Interesting

    Actually you are on to something.

    The thing that was supposed to make programming easier is reuse. The mystery to some is, that it never really materialized.

    On the hardware side of thing reuse is everywhere. Standard components are made which are unbelievably complex but have a simple interface and are cheap. The manufactures give away the parts for development, and reference designs which show exactly how to design them into a product. Drivers are often licensed for free.

    Why hasn't this happened in software? Proprietary software is the problem. There is no vast array of components that you can draw upon without having to pay for a license agreement for each and every one. The best answer so far is things like Java and .Net which come with a ridiculously gigantic runtime library. These will help.

    But I think F/OSS provides a compelling answer. If you're willing to comply with the GPL there is a vast amount of software ready to be reused in your design. I think it's going to work unless the government steps in to stop it.

  49. It helps to understand low-level stuff by Admiral+Burrito · · Score: 4, Informative
    You can learn as much from a data structures class taugh in Java as you can from one taught in $language_of_choice. The idea is to learn how things work fundamentally, and then apply those ideas practically. A linked list in Java works the same as a linked list in C.

    The thing is, Java is somewhat high-level. There are things that go on under the hood that you won't learn about, but once in a while pop up anyway. For example, being taught Java, you won't learn about the difference between memory allocated on the heap, and memory allocated on the stack. And yet...

    This does not work (it doesn't even compile):

    String x = "a";
    (new Runnable() { public void run() { x = "b"; } } ).run();
    System.out.println(x);

    There's nothing wrong with the code; the problem is that Java pretends to support closures but really doesn't. To use x in the anonymous inner class, you need to declare it final. But if you declare it final, you can't do the x = "b" assignment.

    I'm familiar with C, so I understand the difference between the heap and the stack. I can infer that x (the reference to the string, not the string itself) is allocated on the stack. It is not uncommon for instances of anonymous inner classes to outlive the stack frame they were created in, so the compiler doesn't know whether or not x (on the stack) will still exist when the object's run() method is called. So it makes a _copy_ of x, but in order to pretend that it is still x, the compiler wants you to declare it final so that the original and the copy can never get out of sync.

    Having experience with C, I know the heap is a safe place to put things that may need to outlive the current stack frame:

    final String[] x = new String[] { "a" };
    (new Runnable() { public void run() { x[0] = "b"; } } ).run();
    System.out.println(x[0]);

    It's ugly, but it works. The reference called x needs to be declared final (because it's on the stack) but the reference contained in the array does not need to be final (because it's on the heap).

    Because of my experience with lower-level stuff, I understand how Java is faking its support for closures, and how to work around the limitations. This is only one example; there are many other times when understanding things from a closer-to-the-metal perspective gives insights that would be lost if things were only understood from a high level. Joel Spolsky summed this up fairly well: Leaky Abstractions

  50. programming doesn't stink, it's in its infancy by morphage · · Score: 2, Insightful

    If one compares the industrial revolution with the so called "information age", we are somewhere in the early 1800's. The industrial revolution resulted from the experimentation of scientists with formal training and tinkerers with informal training. The information age is no different. During the first few decades of the information age, those who worked with computers were both scientists and engineers with formal training, as well as tinkerers with informal training.

    After the foundation of the industrial revolution was laid, two professions emerged, the engineer who designed the machines, and the mechanic who maintained them. Some of the previous posts noted with dismay the similarities between blue collar workers and graduates of technology programs and certificate holders. Computer science and engineering is still barely older than 40 years old. Since the demand for programmers is still very large (even if the demand is being met in India), simple jobs are being delegated to programmers with training lacking theory. These are the mechanics of the information age and they have their place.

    The "technician programmer", is on the same level as those technicians who obtain degrees in "engineering technology". The technician programmer is well suited for cranking out small system administration scripts, coding SQL, creating database front ends, and developing websites. Like machinists, they work with tools that are comparatively simple, and repetitive in nature. Occasionally, a complex problem requires a new method of applying the tool. A machinist can make engine parts, but can't design an engine in the same way a technician level programmer can create a database, but not the database engine.

    Unfortunately, the tech schools try to convince both their graduates and businesses that technician programmers are able to do more than this. In the current economy, businesses would much rather pay a tech school graduate to customize an off the shelf solution, than an unemployed programmer trained as a scientist or engineer. However, there will always be jobs for systems programmers and software engineers, as long as someone is willing to pay for new ideas. The difference between the "technician programmer" and computer scientist and engineer needs to be recognized, just as the difference between the appliance repairman and the electrical engineer, and the mechanic and mechanical engineer is recognized.

    We have not seen the true next generation of computers. Miniaturization and speed increases are the results of advancements in materials science and electrical engineering. Computer science and software engineering are still using ideas from the first generation of technology. The majority of computers (PC's) run a von Neumann architecture, with software written in languages that are procedural, even if support for classes and objects is included. Classes and objects simply create a method of abstraction to enable the problem to be approached in modular manner. Not that this is bad, but the models and techniques of computer programming are based on the limitations of hardware technology from the 1960's and 70's. The tradeoff between performance and ease of use are still issues in software engineering. The next generation of computers may eliminate the constraints of current methods, as well as introduce new constraints. It's all part of an ongoing process called technology. This is a good thing.

  51. Programmers.. not programming by mabu · · Score: 3, Insightful

    The problem is not the art, it's the "artists".

    Programmers are analagous to lawyers now. It used to be that passion and a genuine interest was why most people were in this business. Now most people arbitrarily pick CompSci because they think that will give them career stability, and really giving a damn about the art of programming doesn't matter much. So like lawyers, you have this new breed of people in the industry who are just there for the money and have no appreciation for the work and the accomplishment. You don't see lawyers trying to use their craft to change the world.. you see them chasing around ambulances. Likewise, you don't see programmers these days trying to make things better.. you see them promoting ASP, Java, PL-SQL, and a hoarde of other get-bys so they can collect their check and move on.

  52. Copyright infringement questions by Quantum+Jim · · Score: 2, Interesting

    That's an interesting point. Somebody will often post a copy or mirror of an article or web site if the original has been slashdotted. The copy has been presented because the original is unavailable due to technical reasons: It is the author's intent to keep the page up, but there isn't enough bandwidth. Is that still copyright infringement if permission hasn't been obtained prior? What about Google's cache?

    --
    It is impossible to enjoy idling thoroughly unless one has plenty of work to do.
    - Jerome Klapka Jerome
  53. I've read this before by lokedhs · · Score: 2, Insightful
    Ever coupld of months some know-it-all, usually with a few degrees in CS come out saying that "programming sycks", "we haven't eveolved in 20 years", "we need better tools that can automate things" and usually finishes off with "this can't go on! We're working on a tool that will transform programming!".

    Then you usually don't hear from them again. Want to know why? Because they're wrong.

    The fact is that regardless of what methodologys used when developing software, in the end you are simply giving instructions to the computer what to do. No matter how many layers of tools you try to add on top of this, in the end you want to giveinstructions to the computer how it should solve the problem at hand. What it all boils down to is that the more complex the problem is, the more detailed must your instructions to the computer be.

    Allow me to give an example: If you have some calculations to perform you can do that in a spreadsheet app, but when your formulas grows more complex you start scripting the spreadsheet. After a while even that isn't enough and you write a separate VB (or other scripting language) app to do this for you. Again, the problem might grow to the level that even your scripting language can't handle it and you sit there with a full app implemented in Java or C++ which solves your original problem. If you happen to be a CS professor, you will start thinking: "why did I have to write this app so solve this simple problem? Programming sucks! We haven't evolved in 20 years! I'm going to write an app that takes the complexity out of programming!", you will publish an article on this, and then you'll spend the next couple of years trying to solve a problem that doesn't exist.

    Are you old enough to remember the craze about 4GL? The reasoning behind that is exactly the same as what Charles Simonyi says:

    Giving the former group tools to shape software will transform the landscape, according to Simonyi. Otherwise, you're stuck in the unsatisfactory present, where the people who know the most about what the software is supposed to accomplish can't directly shape the software itself: All they can do is "make a humble request to the programmer." Simonyi left Microsoft in 2002 to start a new company, Intentional Software, aimed at turning this vision into something concrete.

    Right. Brining programming to non-programmers. Think about it. Does it make sense? As soon as you start programming, you ARE a programmer. Why, then, do you want to limit yourself to a limiting point-and-click tool? This is where 4GL failed. While making it very easy to connect a few database tables together, the real business logic was hard or even impossible to create, and the resulting apps were extremely difficult to understand and impossible maintain.

    One of the best tools that helps programming in recent years is, in my opinion, IDEA. It's a Java IDE that doesn't assume that the programmer is stupid and doesn't understand programming, but rather automatically creates the boilerplate code for you while you write the code. You still work with the code, you just don't have to write all of it.

    There's an enormous difference between IDEA and the "4GL mindset". While IDEA acknoledges that the best way of writing code is by typing in the instructions that will actually run, the 4GL mindset assumes that people are incapable of learning this and need fancy icons instead. Allow me to clarify:"icons is not a good way of representing computer code.

    It feels to me that the people who claim these things have realised that they are not the worlds bet programmers. They realised that programming can be hard, but instead of acknowledging this and try to be better, they decide that it's the "state of programming today" that is at fault. That if they don't know how to write good code it's got be the tools fault. It couldn't possible be that some non-academics can be better programmers than them, now could it?

    So

  54. Why programmers still stink? by varj · · Score: 4, Funny

    Lack of soap!

    --


    -sig- It's not stupid, it's advanced -sig-
  55. Re:Have you looked at the ads? by sonamchauhan · · Score: 3, Insightful


    > > > If you think this post had alot of obscenities,
    > > > you should have seen the email I sent to salon.

    > > Now, as to your comment, please try to be constructive.

    > Try actually reading what he's pissed off about - the ad
    > he got required his interaction before he could continue.

    So? It's a *Slashdot* slip-up, not a Salon one. If he was angry, he should have berated "timothy" (the Slashdot editor of this story) for wasting people's time pointing to the Salon article without stating it wasn't free (this probably means timothy subscribes to Salon.) And then, maybe, also scold the story submitter (who was quite probably another Salon subscriber.)

    Instead this guy blows up, spews profanities on Slashdot, *and* sends a (much worse) attack letter to ... Salon!?! He is an idiot.

    > ...pissed off rant on slashdot, ...as acceptable as ... in a pub ...
    To be angry on somebody for no reason is not acceptable - anywhere.

  56. concrete problems with the existing model. by Anonymous Coward · · Score: 3, Interesting

    But still, I do not see any suggestions for a fundamentally better model or even any concrete problems with the existing one.

    Its the editor!

    No, not the IDE, its the model we use.

    I've coded almost daily for over 25 years, so ponder this!

    We're working the parse tree once removed and are forced into prose by the ancient conventions and a pathetic need to print.

    We lack a model in which we work the parse trees symbolically/pictorially using the keyboard. One where we can zoom structurally, rotate and slice our model by patterns, flows and data-access regardless of instance and without regard for 'files'.

    From the 'forest for the trees' department.

    Cheers!

  57. Investment of time and work vs. results by blahplusplus · · Score: 3, Interesting

    The problem of near infinite time investment... of time and work versus finite amount of resources for small customer payoffs / results. It takes massive investments of time to get the computer to do some of the most basic interface and problem solving tasks so that humans can do and perform some simple tasks, even today. Tools and compiler/language development needs to get better. Right now many programs are too fragile, very hard for the end users to modify (without recompilation), and they are far from robust. Think of it this way, in an ideal world any program should be able to run on any platform without having to be recompiled and any necessary hardware/software dependencies would be automagically emulated (assuming you have the CPU power). Computer scientists have yet to create decent "building blocks" and tools that don't require a thorough understanding of how the tool itself was made. i.e. you don't expect a construction worker to know the workings of how his tool(s) was made or came to be manufactured or how it works internally, he can use it to perform all tasks from the intended "purpose" without ever having to understand how it was made or works internally from a single domain of functionality. Too many times programmers have to have cross disciplinary knowledge of their tools/etc that should not be required to get the job done. Weak analytic/development tools to help other programmers and new programmers demystify what is going on without having to write lengthly comments to tell other programmers what sections of code mean. This should tip you off right there that if you have to comment and explain something that should be as obvious as reading plain english sentences that mean the same thing you've got severe weakness on multiple person projects that shouldn't be there. No one ever gets confused about- "Today I went to the supermarket and bought some food." with "Today I picked up some food at the supermarket." If you look at computer programming languages today, its like learning a foriegn language because you're forced to "learn the rules", syntax of how the language works AND how it parses and a million other little "gotchas" when it interprets your code. Right now programming tools to create things are simply in the dark age. How many lines of code does it take to create buttons, lists, input boxes, programmer and user friendly functionality from scratch? It takes a massive investment of time and energy today just to create the meaningful building blocks let alone full programs.

  58. 3 reasons why I think software sucks by Anonymous Coward · · Score: 3, Insightful

    I have been working in industry for a bit over 7 yrs and have made a few observations that I believe makes software suck:
    -People try to rely on process to fix 'common sense'. By common sense I mean being careful, meticulous, and using one's brain for each situation one comes across. Granted, I work in a large corporation and this may not apply to some of the smaller companies, but I have noticed that when we find a bug, or have some sort of other development issue, management tacks on more process to fix it. It's of course normal for people to make mistakes but sometimes you just have people that continually use poor judgement - get rid of those people and get others who can do the job right!
    -Today's engineers have a large tendancy to overarchitect, doing MUCH more than is required; overthinking what possible changes may occur in the future and designing code around that idea (this idea isn't bad in and of itself, but I have found people get carried away in this area) - What happened to the KISS principal?
    -I may sound horribly outdated, but I have serious questions as to whether OOP has bought us anything as an industry. Sure, when used properly, I believe it can have some benefits. BUT I think it gives the programmer so many powerful tools, that incompetant programmers (of which are there many) turn those tools into powerful weapons. Most of the projects I have dealt with have been C based (~90%) - the rest, some sort of OOP (the remaining 10%). Even though the quantity of procedural code greatly outnumbered the OOP, the two most confusing, sh*ttiest pieces of garbage were OOP - I don't this this is a cooincidence. I have found that people can learn the techniques and tools of OOP, but often they fail to understand the philosophy and why it was developed in the first place. Abuse of OOP creates mass amounts of crap code that needs to be maintained.

    1. Re:3 reasons why I think software sucks by rofthorax · · Score: 2, Interesting

      Yeah I'm beginning to see this myself.. My brother when he first came upon OOP said at Xmas time that he doesn't believe it is all that useful, that he would rather code everything in C because of the efficiency. However I still believe its good to think in terms of objects, just not good to design code first with objects, its better when refactoring the codebase, like going from something C based to something C++.

      Another thing is to look at design antipatterns that talk about OOP flaws, like the "blob" anti pattern, a object that is litterally an entire application or a library.. I've seen this a lot..

      The one major problem I have with the industry at large is the the avoidance of pure OOP concepts, like that of agents (objects that traverse a network, jump from computer to computer, and have self knowledge). I see this great acceptance of XML, but XML is a data format, a pure object format includes methods to manage the data contained int he object, and those methods should be able to best manage themselves.. The methods for the objects can be purely data oriented, and need not any system resources to do what is needed. So why not put these agent link objects in sandboxes, limit their computational resources to managing themselves? This makes it so that libraries are not needed to manage the objects, the objects never become obsolete because the code is within, not without. The objects can be upgraded to newer methods that know how to manage them, but the code may be replicated for each object, the idea is that the code that manages the objects need not be complex. And the objects can pass from system to system without having to be rewritten because they run in a virtual machine.

      You could do something like this with XML, but the reason companies like Microsoft support XML is it is not CORBA, its not a standard for interfacing, its not a object oriented design, its a structural data format (that doesn't allow overlapping of elements by the way). If Microsoft adopted a standard for objects that was open like XML, then it would be like giving too much away, because then people could write them out of the picture.. With XML, at least they can change the language, the interfacing method is harder to maintain (data objects and organization, versus functions with parameters), people still must rely on libraries to interpret and transform the data in XML..

      If we put something like Perl code in a XML object, and relied on the methods in the XML to maintain itself (limiting the access of the perl interpreter to system resources), then the XML library that interprets the object is the object itself, or a reference object that knows it well. This eliminates the need for libraries in the system that must be compiled or included to use the objects.. Its allows for varying types of objects to be written, that do various things and no libraries are required.. Even if there is a lot fo object replication, each kind of object a system captures, it could reference the original object to obtain the methods to manage the data of the each type of object it sees.

      This means software never becomes obsolete.. Word processor files are always readable, image files always viewable, sound files always playable, etc.. This for Microsoft would be a disaster, because for one it would not require them to be a part of the picture. Its a democracy, the objects that work the best people use.. Its platform independent, the objects manage data with local methods running on virtual or real processors (in a sandbox). Allows programmers to move onto better things, rather than wasting a lot of time adhering to standards that will change tommorow (so that management in a company can justify upgrades to the next best spanking new version of Windows..

      The thing I had noticed though is that commercial software development tends to make companies adopt archaic languages so that their competitors can't adopt their projects (should management come to be disastisfied with their solutions), this is why one will use del

      --
      Just say no to license servers!!
  59. Why Programming Still Stinks? by Pan+T.+Hose · · Score: 2, Funny

    Because Programmers Don't Shower?

    --
    Sincerely,
    Pan Tarhei Hosé, PhD.
    "Homo sum et cogito ergo odi profanum vulgus et libido."
  60. Re:Python: Everything you want from Lisp -- and le by ultrabot · · Score: 2, Interesting

    Now Lisp took a hit in the aftermath of the Lisp machine days, but with computers and Moore's law and advances in compiler and language technology, maybe it is time for the idea to come back.

    The problem w/ Lisp seems to be that not many programmers like it. Even the ones that try to like it, and learn it in school.

    If you teach someone Python, it is extremely probable that the pupil will become a Python fan. Teaching people Lisp (or Scheme) seems to have pretty much the opposite reaction. Some of it is probably due to shoving FP down their throats, but not all.

    Lisp, they say (Paul Graham, et al), was the victim of worse is better,

    Wasn't it Richard Gabriel?

    How about Python as a worse-is-better substitute for Lisp? Even Paul Graham admits it is getting close.

    Actually, Python already seems to have replaced Lisp. Only the die-hard macro freaks stick with Lisp, most dynamic typing - first class functions - simple semantics people have picked up Python.

    If Python is to become the heir to Lisp

    Curious wording you have here. Python has beaten Lisp in popularity ages ago. Perhaps you mean a technical heir to Lisp? Lisp is by far not a "king" in anything, except perhaps power of expression. Many would argue that it is too powerful to be practical.

    But speaking as a Delphi programmer who has done some work in C++, Java, and C#, I think Python has potential and is something I am going to be looking at as it evolves.

    Better yet, starting hacking in Python right now. It doesn't *need* to evolve, it's excellent as it stands. I'll take all the evolution with open arms, but the beauty of programming in Python can take your breath away even now.

    It really opens your eyes and helps you see how the rest of programming community seems to be still living in dark ages. I believe this is how Lisp people feel about their language too, so I guess we are in the same boat in a way. There seems to be a weird synchronizity b/w Lisp and Python. Both are probably manifestations of some deeply profound programming archetype :-).

    --
    Save your wrists today - switch to Dvorak
  61. You forgot Gates dumster diving for source code! by BroncoInCalifornia · · Score: 2, Funny
    Gates went on to say that young programmers don't need computer science degrees: "The best way to prepare is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and I fished out listings of their operating systems."

    This image of Gates liberating source code print outs from dumpsters made the whole artlicle worth reading.

    --

    Religion is the main cause of atheism.

  62. What would Kolmogorov say about Brooks' Law? by 1iar_parad0x · · Score: 2, Insightful

    Just a random, but somewhat related thought....

    IIRC, Stephen Wolfram has argued that there exists a Principle of Computational Equivalence. (Kolmogorov and Chaitin said similar things in a more rigourous way.) In short, PCE says that any computation to describe certain phenomena would take a similar amount of time to occur as the phenomena itself. In other words, massive parallelism or some other intrinsic property causes some phenomena to be so computationally intractable, that it would be just as quick to take a measurement of the phenomena as opposed to mathematically computing it ourselves. Algorithmic Information Theory says that some data is so random that the program to describe it is of a similar message length (in terms of information) as the actual data itself. Thus there is a hidden complexity in the data.

    I wonder what Kolmogorov's view of Brooks' Mythical Man Month would be. Could it that software is complex because software is Complex? Perhaps we've reduced software to it's most reduced form. In other words, maybe there exists no more efficent way of describing the phenomena we wish to describe. Is the data that we describe in the business world is so random, that no set of instructions can reduce it by any signifigant order?

    --
    What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
  63. End Users need to demmand better by Tenzen01 · · Score: 2, Interesting

    Many people have attacked the problem from how Developers should write software. As many have mentioned, the ridiculous management schedules and push to just "get it out the door" tends to lend itself to corner cutting in design, coding, testing, etc.

    I think that it is up to the End Users to start demmanding better. None of "This Software is provided with no warranty" crap. Somewhat expected from Free Software, but I can't begin to understand how real businesses that spend millions of dollars on commercial software can continue to stand this. If you bought a car with even a fraction of the defects seen in most commercial software packages, you would return that thing so fast it would make the dealer's head spin.

    People will argue that building a car and building a desktop application have entirely different sets of risk and expectations. The desktop application will (probably) not kill you when it crashes. There are all sorts of regulations and lawsuits that exist to keep the manufactures very concerned about the quality of their product.

    The same is needed in the software industry. Until there is a major demand for high quality products, where users no longer expect or even tolerate that they will find bugs, software will continue to give into buggy, quick and dirty code that must be replaced every 18 months.

    There exist software industries today that have incredibly tight quality control and testing (medical & military for instance) and will not tolerate bad code or bugs. Their Software is far less feature rich but far more robust.

    End Users of the software need to demand higher standards from their software before the state of programming will really get better.

  64. Is it elitist? by Anonymous+Brave+Guy · · Score: 2
    Except for some elitits who claim one has to use, say, functional programming languages to do anything interesting, or "no pain no gain" hard-core low-level language fanatics, most truly good programmers understand it's not tools that make exceptional advances; it's the craftsmen that use them.

    On the other hand, a professional in this field who isn't at least aware of the benefits of both low-level languages and functional programming probably has such a hole in general knowledge of their subject that they'll never be a "truly good programmer". You don't have to use them, any more than you have to be some sort of L337 Hax0r d00d who runs Linux because it's cool. But some awareness and appreciation of the strengths and weaknesses of different tools and approaches is elementary to becoming a competent practitioner of any craft -- not an expert, just competent.

    Until we get away from this attitude that writing a basic database front-end in Visual Basic or an eight-week course in Java and OO qualifies you as a competent professional, and get back to the point where the average developer has a basic appreciation of the broader issues in their subject, we will continue to write crappy code, the world will continue to succumb to script-kiddie hacker wannabes, business software will never live up to its promise of boosting efficiency for the real work your company does (whatever that is), and so on. That's what you get for hiring incompetents, and sadly, incompetence has become the norm in our industry.

    This is not elitism. It's simply advocacy of learning your subject before practising it, and taking a little pride in your work. Both are terribly old-fashioned values in today's high-tech world, and terribly politically incorrect, but there you go. You wanted to know how to improve things; I'm just telling it as it is.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  65. Re:Interstitial Ads v. "have to pay" v. reg-only . by gnu-generation-one · · Score: 3, Insightful

    "Sorry, could have been clearer. I was talking about commercial websites (like Salon)"

    Yep, it's pretty awful watching people like Salon trying to operate a website -- kind'a like watching an amateur at anything failing.

    For any other website, it's surprisingly simple. Write something interesting, put it on the web, and people come to your site and read it.

    Then newspaper companies try the same, and completely fail.

    They design a subscription system, spend years sorting out credit-card handling, account management, setting up the website to track people, setting up systems to stop images being linked to, setting up referer logs and browser-detects, setting up banner advert servers, loggers, and systems to charge advertisers. Setting up systems to convert simple text stories into flash or images or 10 frames, or anything to make it more difficult to copy.

    And then after a hundred thousand dollars have disappeared into website design, start copying stories from the newspaper onto the website. And wonder why so few people are jumping the hurdles to get to any of their content.

    Then having a meeting, wondering why nobody's subscribed, and spending thousands more dollars setting up a system where people can watch an advert and do something to prove they read it, and setting up a temporary ID and making it so people can use that ID to read content, and doing the logging and the tracking and the cookies to make sure that only one person can use each ID at a time.

    And they wonder why the website isn't making a profit.

    Eventually they get a few thousands of subscribers, and rack their brains trying to think how to make the site more profitable, even as they spend 60K per year on DBAs to handle all the user-ID and user-tracking databases, and the same again on support staff to handle lost passwords and account cancellations.

    Yep, it's like watching a newbie bricklayer's wall falling down each time he builds it and wondering what's wrong. So bad to watch, you almost feel compelled to go over and offer them a clue. But they'd never take it. They know what they want, and it's big-budget.

  66. The programming paradigm needs to change by StarBar · · Score: 2, Interesting
    I could write a very long post about this because I have given it a lot of thoughts over the years, but I'll keep it short(er). I have bitched a lot about why we need better software and *not* faster CPU:s. Does your word processor produce your documents faster these days using 2.6 GHz instead of a dazzling 90Mhz? Ohh, you still type at the same pace...?

    Writing stuff in C gives you speed and almost total freedom. Nowadays you can even write drivers entirely in C. Pascal and Ada tried to address quality issues by limit the freedom with declarations. OO languages like Simula, C++ and Java tries to address reuse. Interpreting languages like BASIC, Perl (semi) and shell scripts adresses the compile time issue. But who/what adresses the way we attack the problem?

    The common denominator for all languages needs to be adressed. The text file! Just think about it, how much time is spent just to format and handle the chunks of code that should carry out your creative solutions? More than you think including missing #includes, linker arguments, shared/private symbols, bugs related to text file scope (static globals) and lazyness not refering across text file boundaries properly when the project grows.

    Smalltalk tried to adress this by making everything OO in a super inheritence metaphore, but to me at least I just got confused because the base functionality is so huge. Maybe they are onto something but its far too complex to gain popularity and I don't think it has the simplicity needed to succeed. Many incremental compiler projects has been promissing I think but we haven't seen a real usable and working environment yet.

    I do think that with some slight adjustments to the C language removing the text file as scope and the #include CPP directive a base for a better and creative programming paradigm could start. Instead all globals (variables and functions) should be stored in a "scope tree" where the actual storage should be language idependent. Each level in the scope tree should require an API declaration. Each node could be idependently compiled and incrementally linked. Emacs would work directly on the scope tree. The system should be able import C projects and detach the code from the text file structure.

    This would give the programmers back some of the energy and creativeness wasted on dull tools and malfomed source code trees of today, without loosing the huge C base of sources out there and instead focusing on the language itself.

    I know this is just a dream I have had for a long time and maybe someone already started on a similar project somewhere?

  67. Re:ADA by Bush+Pig · · Score: 2, Informative

    The reason we do this is largely because Ada compilers tend to be expensive, buggy or huge (sometimes all of these). That said, Ada is a really nice language to program in. It was the primary teaching language at Adelaide University when I did my degree, and certainly helped force good programming habits. Although it's possible to write horrible code in Ada, it requires a particularly dedicated kind of stupidity, and the nice thing is, that if you get a clean compile, you can be pretty sure the program will do something sensible (but not necessarily what you intended).

    --
    What a long, strange trip it's been.
  68. Why Programming Still Stinks by yason · · Score: 2, Insightful
    Why Programming Still Stinks

    Because it IS hard and has very few ubiquitous engineering disciplines and practices to support creating a distinguished craft out of it.

    It also offers lucrative fallacies to explain further the lack of those qualities. First, as opposed to "programming" (the real craft) "coding" (a more common practice) is NOT hard and almost any technical person can write code. And coding is unfortunately commonly mistaken for programming. Designing and writing maintainable programs that are as simple and elegant as possible, and then actually maintaining them is not included in the skillset of many people in the business. Most of the commercial software sucks and has a relatively short life.

    Secondly, companies not investing in quality helps creating a breeding pit of bad, non-sustaining program-making habits. Sadly enough, customers are kind of used to the unfunctionality of computer programs, they won't demand standards on software quality. Therefore, it's not profitable to do a good job since technically inferior products often conquer the markets and set actually good products aside due to non-technical factors (as it was with Microsoft Windows).