Slashdot Mirror


Hiring Good Programmers Matters

Doctor O writes "Joel Spolsky (of joelonsoftware fame) has some good points and fun with numbers on the quality of programmers and whether it is more profitable to go with cheap or good programmers. His point is that a good programmer will simply create code of a quality that average programmers never can create. An interesting read."

681 comments

  1. The answer depends by SpaceCadetTrav · · Score: 5, Insightful

    Are you trying to build a good application or a cheap application?

    1. Re:The answer depends by anthony_dipierro · · Score: 4, Informative

      Not really. You'll spend far more money building an application with poor programmers regardless of the quality of the application. That is, if the poor programmers are ever able to finish at all.

    2. Re:The answer depends by TurtleQ · · Score: 5, Insightful

      As Joel points out, you can have both. He states that, unlike physical products, adding quality to software does not make the software expensive. This is because the cost of "super-programmers" can be divided among the thousands/millions of software licenses sold. The programming cost is fixed, so making it high quality may cost only pennies per sale.

    3. Re:The answer depends by SpaceCadetTrav · · Score: 1

      That's quite a blanket statement. Does it apply to "Hello World"?

    4. Re:The answer depends by anthony_dipierro · · Score: 1

      If you have to pay someone to write "Hello World", then yes, it does apply.

    5. Re:The answer depends by Jace+of+Fuse! · · Score: 2, Funny

      Isn't there already an opened source implimentation of "Hello World"?

      --

      "Everything you know is wrong. (And stupid.)"

      Moderation Totals: Wrong=2, Stupid=3, Total=5.
    6. Re:The answer depends by certron · · Score: 4, Funny

      Although, without bad programmers, we wouldn't have The Daily WTF.

      Sometimes a person's purpose in life is to serve as an example to others. What kind of example is another matter entirely...

      --

      fair.org counterpunch.com truthout.com indymedia.org salon.com
      eff.org guerrilla.net debian.org gentoo.org
    7. Re:The answer depends by unitron · · Score: 1

      If you're the one who has to maintain that "Hello World" program you'll quickly learn to appreciate the difference that using a good programmer made, espcially with regard to the documentation.

      --

      I see even classic Slashdot is now pretty much unusable on dial up anymore.

    8. Re:The answer depends by Dorsai42 · · Score: 3, Funny

      No, "Hello World" is patented ;-)

      --
      If you forget about the future, the future will forget about you.
    9. Re:The answer depends by eno2001 · · Score: 1

      Profit motive is a huge problem where coding is concerned. If you have suits driving the coders so that they can keep profits up, the quality is going to suck ass. If you have engineers driving the coding because they want perfection, the quality is going to shine. I don't know about you, but I'll take good code over money any day. I could give a rat's ass about profit.

      --
      -"...bad old ideas look confusingly fresh when they are packaged as technology" - Jaron Lanier (Digital Maoism on Edge.o
    10. Re:The answer depends by Jord · · Score: 1

      Thanks for that link, it just went into my morning reading list!

    11. Re:The answer depends by dusik · · Score: 5, Funny

      Yeah, you'll notice that a team of cheap programmers writes it like:

      printf("Hello world!\n");

      // 3 cheap coders x $0.05 = $0.15

      A single programming Guru will write it as:

      /*
      * Hello world!
      * Copyright (c) 2005 John "Code Guru" Doe
      *
      * This programme tells the computer to say hello
      * to the world, using correct Engligh grammar.
      * It should look like:
      *
      *     Hello, world!
      *
      * NOTES
      *
      *  The programme is limited to one way in which
      * it greets the world.  In version 2.0 we may
      * include another variant of the phrase.  We
      * will need an advanced AI engine for the task.
      *
      * BUGS
      *
      *  The punctuation is not entirely correct.
      * The programme skips the comma between
      * "Hello" and "world".
      *
      * TODO
      *
      *  Needs more testing.
      */

      // Greet the world.  To do that, we make the
      // computer say "Hello, world!".
      printf("Hello world!\n");

      // 1 guru coder x $80/hr x 8 hours = $640.00

    12. Re:The answer depends by Marc+Rochkind · · Score: 5, Funny
      Well, many people would call me a "guru programmer," and there's no way I would do this for anything like $80 x 8 hours.

      You need error-checking on printf and an error log for the error message, you need to internationalize and localize the string, you need both user and maintenance documentation, and you need a client-server architecture. Not to mention that you seem to have jumped into the project without written requirements, a specification, and usability testing.

      This would take about a month at my standard rate of $200/hr.

    13. Re:The answer depends by heatdeath · · Score: 5, Interesting

      Actually, in some kinds of applications, poor programmers are actually on par or better than smarter programmers. Usually you do your best when you're writing code that is easy enough to understand, but hard enough to keep you interested. I, for one, have no patience for writing simple test UIs, for example, or webpages. But some other people find it challenging enough to keep them interested.

      --
      I'm sorry. The number you have reached is imaginary. Please rotate your phone 90 degrees and try again.
    14. Re:The answer depends by D'Sphitz · · Score: 1

      Don't forget multi-player support

    15. Re:The answer depends by MPHellwig · · Score: 1

      Then the second question would be in what language, the answer would be:
      http://www.bgb.cc/bronson/helloworld/

    16. Re:The answer depends by Anonymous Coward · · Score: 0

      And you really don't give a rats ass about that pay check you get every once in a while either, now do you? ;-)

    17. Re:The answer depends by Dwonis · · Score: 2, Funny

      Client-server architectures are *so* 1990s. You need a "peer-to-peer" architecture now...

    18. Re:The answer depends by Javagator · · Score: 3, Informative

      Check out Petzold's Windows Programming in C#. Hello World is copyrighted. Seriously.

    19. Re:The answer depends by Savantissimo · · Score: 4, Informative

      Joel is clearly right about the quality and speed of the programming depending entirely on the quality of the programmers. But then he pulls a fast one and assumes that those same people are the best at anticipating what users want and designing the parts of the software that the user interacts with, and that is a rather questionable assumption. How many times have you seen a beautiful interface with unstable code (many media players come to mind) or a crappy interface with code that is like Bach in bytes (TeX, anyone?). There's a lot more that's important in making great software than coding.

      My pet theory - and I admit I'm talking out my ass here - is that managing new software development ought to go like this:

      1. Decide what you are going to make. Get a reality check from the intended audience. Don't assume that everyone likes or needs what a super-programmer thinks is spiffy.

      2. Design and mock-up all the static parts of the user interface and informally specify user-visible behaviors. Have someone who understands visual design and industrial psychology take the lead in directing the UI design with the programmers in a supporting role and management only there to back up the designer's decisions when requested. Get the best such person you can find, even if you think you can't afford her. This person is as important as everybody else on the project put together. Come up with as many radical variations as possible the first couple times through. Be bold and elegant and try to come up with things the user didn't even know she wanted. Have the UI design person get user feedback with the programmers present but with the understanding that they are there to find ways to make what the designer wants and the user needs happen and not to raise problems that programmers can solve on their own. The UI guy needs to be ruthless in excluding things that will get in the way, no matter how cool the programmers think the feature is. Repeat step 2 until the programmers start to lose their minds or the design converges in detail.

      3. Formally specify all user-visible behavior by writing the complete user documentation before the first line of code gets written. Have the UI designer and the tech writer work together on the outline and have the programmers looking over the writer's shoulder as the bulk of the text is written. If there is no tech writer, get the UI person to do it, if possible. Check with real users again to make sure it makes sense to them.

      4. Then let the programmers do their thing. Having hired good people, don't tell them how to factor or comment or code or what languages they should use. Let them add things only so long as it does not affect the user. (General solutions for specific problems, for example.) Before they start, make them hash out whatever rules they like to ensure quality and maintainability - but hold them to their own rules when things get hairy. Make a significant part of their pay (20%-50%) depend on matching the design and documentation to the UI designer's satisfaction, passing testing and meeting or beating target dates they agreed to when they got full control of the project.

      5. Short of correcting a thermonuclear fuckup that would otherwise cripple the software, don't allow any changes, additions or deletions to the design by anybody until the whole thing is out the door as planned.

      Is this a stupid or impractical way of doing things? What am I missing?

      --
      "Is life so dear, or peace so sweet, as to be purchased at the price of chains and slavery?" - Patrick Henry
    20. Re:The answer depends by Megane · · Score: 1

      Can I get paid a bonus for every bug I fix? (I'm gonna write myself a vacation to Hawaii!)

      --
      #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
    21. Re:The answer depends by turbidostato · · Score: 1

      "My pet theory"

      Your pet theory is just what TFA told you first: It seems cheaper as the per-hour rate to choose cheap proffesionals, but you will end up better choosing good professionals -even if you are not specially interested about having a good job done.

      That makes take gurus for arch/developing; take good graph/ergo people for the interface (while the programmers would probably be able to develop a decent UI -kindof), etc. ...and specilly, take a seasoned tough project manager to link all of them and to know when a professional is a good professional an when is just a mock up, and to know when things that look good on paper are just nonsense in reality (like your "Formally specify all user-visible behavior by writing the complete user documentation before the first line of code gets written" assertion, for instance).

    22. Re:The answer depends by Linus+Torvaalds · · Score: 1

      Save yourself some time and deploy GNU Hello. And yes, it really does include a mail client.

    23. Re:The answer depends by toadlife · · Score: 1

      Ditto.

      I'm not an expert programmer (I know a little php, vbscript, SQL, DOS Batch), but the "False Detector" made made me 'lol' - literally.

      --
      I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
    24. Re:The answer depends by tommy · · Score: 2, Insightful

      Writing for Internet Explorer these days is challenging.

      --

      I have a woman and money. Life is good.

    25. Re:The answer depends by aword · · Score: 1
      Also depends on which phase the project is:
      1. If project is in design/development phase, a bad programmer could screw up the whole thing.
      2. If the project is in maintanence phase, you need bad programmer to add on BUGs - to keep the cash flowing.
      --
      Exceptions always exist
    26. Re:The answer depends by Cederic · · Score: 2, Insightful


      For new software product development, you might get away with that.

      Writing software for business use, not a hope of achieving that.

      Deadlines of "7 weeks away, because that's when the ads go on TV", requirements of "Has to do everything!", constraints of "No, we can't afford ", changes a week out like "we just signed an agreement, you must integrate with this whole new supplier"...

      The only thing you've suggested that's really viable and sensible there is hiring good people. Although you utterly bollocksed that one by trying to link pay to project deliverables - do that and you'll get exactly what you asked for. That's never what you want.

      Good people will cope with changing environments and still deliver good work. For once, I'm agreeing with Joel, badly as he did justify his argument.

    27. Re:The answer depends by metalmaniac1759 · · Score: 1

      I guess this is the way M$ writes code... throwing in the (c) symbol much before anything! Put a US. Patent Pending notice and you've hit the nail on the head!

      Nandz.

    28. Re:The answer depends by metalmaniac1759 · · Score: 1

      First time I've seen someone referring to designers, programmers, and users in the female form!

      Strange!

      Nandz.

    29. Re:The answer depends by Kynde · · Score: 1

      You're obviously joking, but you forget that it's not notepads we use for writing code.

      The banner comes with a mere key combination. Self explanatory in-code documentation (stating what the code does) is absolutely useless. The printf line gets written with 10 key presses (automated and cursor positioned printf aswell as word completion).

      Added to that the speed of compilation, debugging and testing...

      --
      1 Earth is warming, 2 It's us, 3 it's royally bad, 4 we need to take action NOW
    30. Re:The answer depends by Anonymous Coward · · Score: 0

      Well, you must be friends with the guy who wrote this.

    31. Re:The answer depends by mcrbids · · Score: 4, Interesting

      Where you go wrong is that people don't actually know what they want!

      I've written projects with HIGHLY detailed specs. I've talked to people high and low. I've gotten signatures in triplicate.

      And, those are the projects that BOMB QUICKLY AND PAINFULLY.

      The last time I tried that approach, I was told on the DAY OF ROLLOUT after 1.5 months of full-time development that it "wouldn't work" and had to be "totally redone".

      I screamed, bitched, complained, waved contracts, specifications and all, before spending another 2.5 months rewriting the application. (while people were using it!)

      So, now I do things differently. I spend a bit of time, get a spec, and send out an email to all involved, and wait for 24 hours. Then I write it, knowing full well that it will suck upon delivery, and I make this knowledge apparent, obvious, and common.

      Then, the comments come. The text is hard to read. It doesn't include N-ARCANE-FEATURE. When you click the button called "Save", it saves it, but it's not obvious what you are saving.

      Whatever. The feedback comes in spades.

      So, focus on making updates quick and easy, and listen. That's the Linux way: release early, release often.

      People will tell you what they like and don't like. Listen, and release an update when you add new features.

      In my flagship product, I've released over 40 releases in a single year. It'd be painful, except that the product updates itself, and it takes me all of about 10 minutes to release. Really.

      It costs each user about the same - 5-10 minutes, and they can do it whenever they like.

      So, I release early, I release often, and I listen closely to the feedback. Users get what they want, and I get what I want. (Users' money!)

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    32. Re:The answer depends by el_womble · · Score: 3, Interesting

      This makes me worried about government contracts. What happens when there isn't any 'market' and the software is essential to running a country?

      In the UK that means that there is a bid. The lowest bidder gets it, they employ the cheapest coders on the planet, farm as much off shore as possible, and then waste millions supporting crappy software. We're now in a situation where we can't trust the government with ANY software creation. They got the passport software wrong (well to start with), they got the tax software wrong (New Tax Credits was a fiasco) and they got the air traffic control wrong (fortunately nobody has died... yet).

      What Joel says rings so true that its scary to think that the really important software will NEVER be written like this. But what can you do to remedy the situation? Because there is no market, you can't expect competition to improve the quality of the code, the only incentive being fines to companies when they get it wrong - thats no incentive, that just makes accountants want to do just a good enough job not to get fined.

      Do you open source the problem? While I agree that security through obscurity is not security at all, you will never get a country that thinks its a good idea to ahve its tax software open to all to see. There is also Brookes law to deal with and there is still no guarentee that you will attract the best of the best.

      Anyways... fascinating article!

      --
      Scared of flying, pointy things snce 1979!
    33. Re:The answer depends by Syre · · Score: 1

      Your pet theory is a prescription for disaster. You are assuming that:

      - The spec, written in the absence of consultation with the developers, will be for something that is possible to implement.
      - Whomever writes the spec really knows what people will want to use.
      - No incremental UI testing and feature testing is required.
      - Users know if they'll like something before they use it.

      In my experience, such an approach is taken by know-nothing marketing managers. What ends up happening is that the product never gets finished, because it wasn't do-able in the first place.

      A more reasonable approach is to have a roadmap, then build the first iteration, do user testing, refine it, build the second iteration, etc.

      Developers should be involved from the start so they can explain what's easy and what's hard to implement.

      That way, something is available for testing and feedback quickly, and you don't run into the problem of minor features or wacky interface elements which are extremely difficult to implement taking up 80% of the development time.

    34. Re:The answer depends by kennyle · · Score: 1

      What would you do?
      From "poor" programmer
      printf("Hello world!\n");
      Finish Project in 1 hour.


      From "advanced" programmer
      /* simply print the words "Hello world" to user */
      printf("Hello world!\n");
      Finish Project in 4 hours.

      from "guru" programmer
      /*
      * Hello world!
      * Copyright (c) 2005 John "Code Guru" Doe
      *
      * This programme tells the computer to say hello
      * to the world, using correct Engligh grammar.
      * It should look like:
      *
      * Hello, world!
      *
      * NOTES
      *
      * The programme is limited to one way in which
      * it greets the world. In version 2.0 we may
      * include another variant of the phrase. We
      * will need an advanced AI engine for the task.
      *
      * BUGS
      *
      * The punctuation is not entirely correct.
      * The programme skips the comma between
      * "Hello" and "world".
      *
      * TODO
      *
      * Needs more testing.
      */

      // Greet the world. To do that, we make the
      // computer say "Hello, world!".
      printf("Hello world!\n");
      Finish Project in 2 days.

      Now if you are a CEO of a software company, what business is creating software and selling to other companies which of those 3 programmers would you hire?

      Now if you are a CEO of a non-software company, what business is not creating software nor selling to other companies which of those 3 programmers would you hire?

    35. Re:The answer depends by microTodd · · Score: 1

      You are exactly stating the arguments for Spiral development model vs. waterfall development model. I've seen many engineering shops changing to this approach lately. Usually the management buzzword used is "agility" instead of "rigor".

      --
      "You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design
    36. Re:The answer depends by Deusy · · Score: 2, Insightful

      40 releases X 7.5 minutes X 100 users = 30000 minutes (or 500 hours) of employee time for the client.

      If only they cared.

      --

      Free Gamer - Free games list and commentary

    37. Re:The answer depends by fbjon · · Score: 1

      I think the programmer of The False Detector doesn't know about the '!' character.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    38. Re:The answer depends by Anonymous Coward · · Score: 0

      Your approach can work well - having been on such a project. The UI design was done up front, mainly as an exercise in developing the requirements. I believe (hope?) the end users, and not just the managers, got to try the interface as well. This was then written up as the requirement document, which happened to be turned into a user manual.

      Having the full requirements up front, and sticking to them, is great - although only if they make sense.

      I should add that this didn't stop things going titsup, with management issues slowing getting hardware and a talented programmer who managed to needlesly overcomplicate things. Coming up with a straightforward and workable system design up front would probably have helped.

      BTW: Why do people think Gurus want to do pointless things? I would not call that talented programmer a Guru - smart though his solution was, there was a simpler approach which would have worked just as well.

      Steve.

    39. Re:The answer depends by cow-orker · · Score: 2, Interesting

      I, for one, have no patience for writing simple test UIs

      Then you might be doing it the wrong way. To make the drudgery interesting again, you generalize to an interesting problem, then solve the original problem as a special case. In the case of UIs, you should probably write a tool that makes writing UIs easier.

      "I'd rather write code to write code than write code."

    40. Re:The answer depends by multipartmixed · · Score: 1

      You must not be a very good guru programmer if you'd leave printf() in there without any formatting arguments.

      puts() would be cheaper, and the input string would be a character shorter.

      --

      Do daemons dream of electric sleep()?
    41. Re:The answer depends by skatephat420 · · Score: 1

      I'll go with the Quality programmer, most likely he is not outsourced. WTF do I care if my boss looses money, as long as the money stays here.

    42. Re:The answer depends by Lumpy · · Score: 1

      funny how may industries think otherwise. Most of the vertical market apps we use here at work are so horrible quality they make everyones life miserable. some I refuse to call applications like the one's baseed on foxpro or even access! The company pays thousands for this crap that breaks regularly. Some of the VB apps that we bought for insane amounts of money usually break on a regular basis as well like when you do something like change the sa password for the MSSQL server from nothing to something else to actually give it some security. they HARDCODE the sa user and no password into the app.... then claim we need to pay them $3500.00 for custom programming to fix the issue. WTF is that?

      business mostly wants solutions that seem to work right now, they do not want it right and they do not want it correct or even well done. the last project I was handed to write in Python they asked if I could skip writing documentation and the other specifications and simply write it so we can get it a month earlier. Yay, they want me to create a nightmare so they can get going on something 30 days earlier for no real reason. I was even questioned why I waste time using a Versioning system (we use subversion) where we could simply put all the sourcecode on a network share.

      fortunately I have corperate policies and a director of operations that will stand between me and the PHB's... but very few have those luxuries. Good programmers like to do things right.. companies do not want it right, they want it fast.

      --
      Do not look at laser with remaining good eye.
    43. Re:The answer depends by thoth · · Score: 1

      Amen to that.

      I did a simple UI for a project I worked on. It was typical, had about 6 pages. I wrote a spec, mocked it up, put it through usability testing - it passed - and started to fill in the logic.

      Two months go by, no complaints, no comment. The wizard is basically done and I've tested the heck out it.

      Then, with three weeks to go, my lead comes in and says the UI is horrible and it all needs to be reorganized. He forces in a huge reorganization: move questions around (i.e. redo basically all the wizard pages), add new parameters to a tableview, which means new info to get/set, and so forth. Because of the number of changes, UI feedback isn't considered (i.e. new buttons, and no notification info was saved on button clicks).

      I make the changes, and the QA teams hates it. They point out see, I click this button (half a dozen times) and nothing happens. I show them they actually just saved 6 files.

      Later, I get railed on by the manager about the wizard. I damn near lose it, saying that for months nobody said a word, the wizard passed usability and followed the spec. Then, with 3 weeks to go it gets almost totally redesigned, QA hates it. How exactly am I to blame?

      So yeah, people don't know what they want. You can give them a spec, run usability on it, but that won't stop some bonehead from tossing it aside at the last minute.

    44. Re:The answer depends by OreoCookie · · Score: 1

      I think you're on to something. I have seen programmers take what should have been a simple 20 line function and turn it into a 1000 line class module because that's the only way they could stay interested in the project.

    45. Re:The answer depends by generalpf · · Score: 1

      Thanks, that explains why the Hurd isn't finished yet.

    46. Re:The answer depends by lgw · · Score: 1

      Good programmers write programs of the same quality faster than poor programmers. God engineers understand when a less-than-perfect implementation is appropriate. Hire a good progreammer who's a good engineer.

      Anyway, all of your examples break if built unicode. Where's the localization support? Commercial software is never easy. :\

      --
      Socialism: a lie told by totalitarians and believed by fools.
    47. Re:The answer depends by FictionPimp · · Score: 1

      I'm actually patenting a solution to the hello world problem.

      Basically, it generated a random string of chars that it searches for the phrase hello world (or any string you want really).

      If it finds that phrase in the random chars then it sends it to standard out.

      The program is still very slow in finding the strings, but I think as cpu's increase in speed it should become much faster.

    48. Re:The answer depends by Anonymous Coward · · Score: 0

      I think you've found the dorkiest website ever made.

    49. Re:The answer depends by ducttapekz · · Score: 0

      I know this was meant to be funny but a programmer who over comments isn't a great programmer. Also, a programmer who costs more isn't always a great programmer either.

    50. Re:The answer depends by 2b · · Score: 1
      Isn't there already an opened source implimentation of "Hello World"?
      http://www.gnu.org/software/hello/
    51. Re:The answer depends by cloudmaster · · Score: 1

      I would have to fire that programmer for clearly not knowing the correct spelling of "program". That's not a typo, that's misspelling the word a whole bunch of times. Lots of time wasted typing extra chars, not to mention documenting the obvious. Argh. This program will never get done. I'd overlook "correct Engligh grammar" though. :)

    52. Re:The answer depends by Anonymous Coward · · Score: 0

      If that is guru level, then what the hell is this?

      That's write381KB of compressed automake enabled "Hello, World!" joy!

    53. Re:The answer depends by Lodragandraoidh · · Score: 1

      Using an iterative (spiral) development model you would have avoided this problem because as the layers of the onion are put on - you release it to end users, then you get feedback, modify your requirements to reflect the changes, and roll those changes into the next iteration - approaching a point of equilibrium.

      Unless you are building for a problem that is easily understood (if I pull out the graphite rods the core will overheat), you will never have a complete specification before you begin implementation. Assuming otherwise is the folly of traditional (waterfall) methods. This is particularly true when dealing with UIs - human perception and needs are not subject to scientific axioms - other than 'Murphy's Law'.

      Sadly, most development shops are still doing projects like it's the 1960s.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    54. Re:The answer depends by unitron · · Score: 1
      " God engineers understand when a less-than-perfect implementation is appropriate."

      God wasn't engineered, He was "intellligently designed". :-)

      --

      I see even classic Slashdot is now pretty much unusable on dial up anymore.

    55. Re:The answer depends by Anonymous Coward · · Score: 0
      And, those are the projects that BOMB QUICKLY AND PAINFULLY.
      Take my word for it. Quick and painful is a lot better than slow and painful. And be thankful the project eventually died. Here's my story. Company hears telecom/internet is the next big thing. Thing is, Company isn't really in the telecom/internet business. So it hires a couple of PhD's, and an vague product idea is concieved. We start working on the shiny new product. After about 6 months, it becomes clear that there's no real difference between our (still non-exsistant) product and the currently available products of several competitors. PhD's reconvene. New specs arrive, which invalidates most of the work already done. Work restarts. Fast forward a year. Product is nearing completion. Turns out the project isn't going to be that revolutionary, so its canceled. CEO declares that we'll refocus our efforts on our existing customers. A year later, new CEO arrives, trumpets blare, "Telecom/internet" is the new big thing! Managers try to assemble a team to work on the new project, but have problems, since the previous players are gun-shy about working on a product that was shit-canned once. A team is cobbled together, but project is again canceled in another year. Smugness ensues.
    56. Re:The answer depends by Savantissimo · · Score: 1

      Did you even read my post?

      Who said anything about a written spec, creating the interface or documentation (not spec) without the input of the developers, or not using iterations? My point was get a real interface designer to lead the development of the interface, iterate interface design without having to code or rearrange code over and over, and get the user input early and often on the parts that they can see before you get into the actual coding. Spiral design is great for things that come in little chunks of usability, but when most everything has to work together before you have something that is usable, then you'd better take a different approach. Even so, when the approach I laid out is used for minimum usable functionality in the program (as I suggested), there is no reason that the spiral approach cannot also be used by making multiple passes through the method (abbriviated on later passes, of course.)

      --
      "Is life so dear, or peace so sweet, as to be purchased at the price of chains and slavery?" - Patrick Henry
    57. Re:The answer depends by Thuktun · · Score: 1

      So, I release early, I release often, and I listen closely to the feedback. Users get what they want, and I get what I want.

      http://agilemanifesto.org/

    58. Re:The answer depends by heatdeath · · Score: 1

      Which is horribly inefficient in most cases, since that code most likely won't be used again unless you have a -really- mundane job.

      Which was my original point. Someone who can just "get it done" and have that interest them will get it done quicker.

      --
      I'm sorry. The number you have reached is imaginary. Please rotate your phone 90 degrees and try again.
    59. Re:The answer depends by dup_account · · Score: 1

      I hear the multi-player version is based on the Unreal Engine and requires the latest nVidia graphics card (The "over-clocked" version) to run.

    60. Re:The answer depends by alpha_foobar · · Score: 1

      but would a good programmer create a better version of hello world than a bad programmer? and if so, then is a bad programmer still a programmer?

      How could a good programmer make a better hello world application? Isn't it bad programming to create a more complex solution where a simple solution exists and is well known? Therefor wouldn't a good and bad programmer produce a similar application in a similar amount of time?

      In conclusion, surely it doesn't apply to hello world.

    61. Re:The answer depends by anthony_dipierro · · Score: 1

      but would a good programmer create a better version of hello world than a bad programmer?

      Who cares? We weren't talking about a hello world program.

      In conclusion, surely it doesn't apply to hello world.

      And surely no one is going to pay someone to write hello world.

    62. Re:The answer depends by mcrbids · · Score: 1

      40 releases X 7.5 minutes X 100 users = 30000 minutes (or 500 hours) of employee time for the client.

      Our product is a compliance-based product, and requirements change surprisingly frequently. Also, when an update is performed, all the client's data is backed up onto our servers, so if the computer crashes or is stolen, all their data is preserved.

      Which then leads to the next piece - we allow administrators to view their staff's data through said servers, saving them countless hours of manual data collating.

      So, all in all, it's a *tremendous* time saver, with warm reception.

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    63. Re:The answer depends by Anonymous Coward · · Score: 0

      Because using this software is the only thing their clients have to do?

    64. Re:The answer depends by cow-orker · · Score: 1

      Come on, if you had to write one crud screen, you will have to write another. It will be different, but share the structure. It will be another instance of the same general problem. And suddenly the general solution is astonishingly efficient! This is also true if another person has to write the next crud screen.

      Of course, the reward structure in many companies makes efficient work in this manner impossible. But somehow that strikes me as a more fundamental problem, one that can't be overcome by hiring any programmers, whether good or bad.

    65. Re:The answer depends by Xiaran · · Score: 1

      Me too. Whats cool is I even have something to send them already. A few weeks ago I was working with a code monkey who had a dislike of if then else statments. I was getting him to write some fairly simple database accessing server side code, and he decided it would be a better idea to use a switch statment on results from the database. Problem was that the results wear String objects(this was Java)... and switch, of course, doesnt switch on Strings. Bummer. How to solve. Well switching on the hashCode of the object obviously. I spent about two hours going over all the things wrong with that. Still didnt convince him... gave up.. went home. Had a stiff drink.

    66. Re:The answer depends by GCP · · Score: 1

      you will never get a country that thinks its a good idea to ahve its tax software open to all to see

      Actually I think the government SHOULD provide open source tax software for some purposes. As a taxpayer, you should be able to download free tax preparation software from the government that comes with a guarantee: if you use it and answer each question it asks honestly, then the amount that it says you owe is the amount you DO owe. You wouldn't have to be personally responsible for keeping up with all changes in tax laws. The government would have to do it. The government would have no recourse to accuse you of underpayment other than accusing you of not honestly answering the questions.

      The actual algorithms (source code) for calculating what you owe would be open for all to view. If those algorithms didn't match the legislation, you would have people pointing it out quickly. If the legislation was ambiguous in some way, the problems the government would have implementing it in source code would be taken back to the legislators with a requirement for disambiguation. People could submit changes to the app, but only the government would have the ability to commit changes.

      --
      "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
  2. I hope he's wrong by Anonymous Coward · · Score: 4, Funny

    I hired a bunch of monkeys and I can't wait for them to write Shakespearian works!

    1. Re:I hope he's wrong by CrazyTalk · · Score: 2, Funny

      "It was the best of times, it was the blurst of times. Stupid Monkey!" - Mr. Burns

    2. Re:I hope he's wrong by Tackhead · · Score: 4, Funny
      > I hired a bunch of monkeys and I can't wait for them to write Shakespearian works!

      Well, I couldn't hire monkeys, but I did the next best thing - outsourced the documentation department.

      Romeo, Romeo, why is it that they are calling you Mister Romeo?
      You should be talking to your father about getting your name changed,
      And if you will not be doing that, oh please just be renewing my contract,
      And I will be changing my name to Julie or something else that sounds kind of American!
      (Shall I be listening to the on-hold music, or shall I just punch "0" and hope to be transferred?)

      They didn't quite meet the "all documentation shall be written in iambic pentameter" part of the specification, but it wasn't bad for $6/hr... and it was still better English than what my alma mater's graduating these days. I'm convinced!

    3. Re:I hope he's wrong by Anonymous Coward · · Score: 0

      fhjasdkasdlkamsdlkmsdfskdfl
      asldkasd to
      asdasddkasd be askdjasldjaskd
      asdasdsl or askdmdasldkmmdmddkdkks
      dpaoskdpoq not asdqwx mmf123cff
      to as;ldas;dlkas be

    4. Re:I hope he's wrong by ikkonoishi · · Score: 2, Interesting

      I heard they got 27 letters so far.

    5. Re:I hope he's wrong by Redwin · · Score: 1

      Ah, but does it conform to The infinite monkey protocol?

      --
      Warning, comments may not have been passed by the sanity department of my brain.
  3. Common Sense by Tweak232 · · Score: 3, Informative

    Is it really that hard to find out that if someone who is good at what they do will do a better job than someone who is not as good? That seems to be common sense.

    I guess it is just me... move along now, nothing to see.

    1. Re:Common Sense by jellomizer · · Score: 1

      Yes but it is more of an issue if the better programmer costs twice as much as the sub par programmer could you make more profit with the sub-par programer. Will his affordability out weigh the costs of poor quality.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    2. Re:Common Sense by Daverd · · Score: 2, Insightful

      It's not just whether a good programmer is better than an average programmer. The good programmer is going to be much more expensive to hire than the average programmer. TFA talks about why trying to cut costs on programmers doesn't pay off in the long run.

    3. Re:Common Sense by emurphy42 · · Score: 1

      The question is whether one good programmer will do a better job than several mediocre ones. The non-obvious (to some) factor is that programming is more complex than, say, digging ditches or working on an assembly line - there are significant differences in quality of output, as opposed to merely rate of output.

    4. Re:Common Sense by HermanAB · · Score: 1

      Common sense isn't...

      --
      Oh well, what the hell...
    5. Re:Common Sense by Anonymous Coward · · Score: 0

      The non-obvious (to some) factor is that programming is more complex than, say, digging ditches

      They're a lot alike, actually:
      the deeper you dig, the more likely the whole thing
      is to fall in and bury you when you least expect it.

    6. Re:Common Sense by jlarocco · · Score: 1
      Yes but it is more of an issue if the better programmer costs twice as much as the sub par programmer could you make more profit with the sub-par programer. Will his affordability out weigh the costs of poor quality.

      And it's been well known for years that the better programmer is almost always a better value than the sub-par programmer.

      Why the hell is this even on slashdot? Steve McConnell has pointed this out this very fact in Rapid Development, possibly even Code Complete, and there's more evidence in the references for Rapid Development. Hell, I think this might even be hinted at in The Mythical Man Month, and that's over 25 years old.

      Shit, and those are just the popular books that point it out.

  4. Can't Go Wrong by Anonymous Coward · · Score: 5, Funny

    ... sucking up to the egos of your readers.

    Yes, you're all great programmers, much better than all the others out there. Especially because you read my posts. We need more people just like you.

    1. Re:Can't Go Wrong by Anonymous Coward · · Score: 0

      And it's wonderful for promoting your software package. Everybody did read the plug at the end right?

    2. Re:Can't Go Wrong by Anonymous Coward · · Score: 0

      I liked you better with the **** in your mouth.

    3. Re:Can't Go Wrong by Pyromage · · Score: 3, Insightful

      I find this article interesting not because it sucks up to programmer egos - which it does - but because, unlike many other articles, it brings in some relatively hard data to support the up-suckage.

      Consider Paul Graham, who could be accused of writing programmer ego-stroking articles. They are both good writers, but I like that Joel (at least here) tries to support the theory. He doesn't say "Some programmers are fundamentally better", which is a fairly wide-spread folk belief, backed only anecdotally usually. Instead, Joel says "Are some programmer's fundamentally better? Here's some data that suggests just that".

      On a seperate note, a lot of other posters here are saying "Who's Joel?" and "Why should I listen to some guy I've never heard of?". Well, that's a silly argument against whatever he might be saying in your article of choice. Remember that ESR was a nobody once; he seems to be primarily noted for writing the Cathedral and the Bazaar. Similarly with Joel: he's worked on a few software projects, though you may have never heard his name, and he writes well, and his articles make sense. To me anyway: you may disagree, but at least then you're disagreeing based on content, not based on "I've never heard of him so he must be some jackass upstart know-it-all."

    4. Re:Can't Go Wrong by Vengie · · Score: 1

      This isn't sucking up to programmer egos. It sucks up to *good* programmer egos. Try sitting in on the first day of one of Stan's classes where he projects the number of students that will remain in his class by midterms....;)

      --
      When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi. (Larry Wall)
    5. Re:Can't Go Wrong by Javagator · · Score: 1
      "Some programmers are fundamentally better", which is a fairly wide-spread folk belief, backed only anecdotally usually.

      There is a book called "Peopleware" where the authors did a study on programmer differences. They found that differences of 10 to 1 in productivity were not uncommon. This was on easy tasks that any competent programmer should be able to do. I would guess that on hard problems the difference would be even greater.

      The hard part of hiring great programmers is recognizing them in the interview. I take part in a lot of interviews, and I have been completely wrong both ways, thinking first rate programmers are bad hires and thinking bad programmers are good hires. Some good programmers are a little different than most people. Sometimes they are unimaginatively different.

    6. Re:Can't Go Wrong by An+Onerous+Coward · · Score: 3, Funny

      Speak for yourself, Mr. Ego. Me, I looked at the story summary and saw my entire short career crashing down around me.

      Just pack my job up and move it to India now. Apparently, I won't be needing it.

      --

      You want the truthiness? You can't handle the truthiness!

    7. Re:Can't Go Wrong by ergo98 · · Score: 2, Interesting

      ... sucking up to the egos of your readers.

      Interesting that you say this given that a raging debate on JOS during the release week of this article featured an endless stream of readers mortally offended that Joel casually dismissed service type developers (e.g. the financial industry, etc). The vast majority of "developers" out there don't work for shrinkwrap shops, but rather get their bread and butter making VB forms and so on, and many of these people were offended by Joel's article.

    8. Re:Can't Go Wrong by jcr · · Score: 1

      The hard part of hiring great programmers is recognizing them in the interview.

      Amen. I have so many friends who are very, very good coders, who go into a kind of brain-lock in interviews. Sometimes I think I'd like to try posting a spec for a simple app, and then just hire the person who sends in the best implementation.

      -jcr

      --
      The only title of honor that a tyrant can grant is "Enemy of the State."
    9. Re:Can't Go Wrong by drsquare · · Score: 1

      This isn't sucking up to programmer egos. It sucks up to *good* programmer egos.

      How many programmers don't think they're good programmers? I'm betting that everyone here thinks they're in the 'good programmer' category, so there's going to be no dissent on this article. Of course most people here are probably terrible programemrs.

    10. Re:Can't Go Wrong by grazzy · · Score: 1

      Actually I feel very sad right now since I realize I'm not a very good programmer ;)

    11. Re:Can't Go Wrong by anothy · · Score: 1
      We need more people just like you.
      yeah... too bad none of 'em breed. ;-)
      --

      i speak for myself and those who like what i say.
    12. Re:Can't Go Wrong by Anonymous Coward · · Score: 0

      Hey but at least you know. There are a lot of fools out there who have no idea what's going on. =)

  5. versus by rd4tech · · Score: 4, Insightful

    A good, very intelligent and experienced programmer can develop scores of times faster than the average one, because:
    - There isn't a need to go and ask simple questions all the time around.
    - Development experience gives a 'mental' outline of what the end thing will look like
    - Intelligence comes handy when one is 5 level deep in a nested function (which can't be simplified) and trying to add another 2 levels at once.

    1. Re:versus by blueberrry · · Score: 1

      I don't think a very intelligent programmer shouldn't be asking questions around. I think it is quite the opposite: an intelligent programmer does not mean he has to be experienced in a specific language. An intelligent programmer should be able to pick-up any language because he has the intelligence to learn them very quickly. Which includes asking a lot of questions.

    2. Re:versus by dgatwood · · Score: 1
      Large working set memory also comes in handy as a function approaches 3000 lines of code.... :-D

      Not that I normally write functions that big, but...

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    3. Re:versus by dgatwood · · Score: 1
      After you've learned three or four langauges, procedural and/or object-oriented languages all start to look alike, at least syntactically. Most of the remaining details are things related to functions built into the language/libraries.

      That said, an intelligent programmer should be generally able to find most of the what he/she needs with a Google search far faster than by asking questions---or are you considering a Google query to be asking a question?

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    4. Re:versus by jellomizer · · Score: 1

      I agree I tend to pick up new languages by heart. It is not that I instinctively know what commands to write but I know the right questions to ask the "expert" or search for. For example when I have a new language to work with I first focus on the syntax. How are segments separate, { } [ ] Begin End white space etc.., the If statements loops, output, OOP or not or what degree. As for finding the command you just look it up.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    5. Re:versus by nate+nice · · Score: 1

      Often times though your questions cannot be answered by Google because it is a system oriented question. For instance, the software company I work at has a few large systems and it takes a long time to really figure out how each layer interacts with the other, etc. In this case it is perfectally acceptable to ask as many questions as you need to, so long as you're listning to the responses.

      As for asking a language specific question, I would agree with you that a good person (beyond a good programmer) would hit their favorite search engine. I wouldn't mind fielding questions about the internals of a language but usually that's not too important.

      --
      "If you are a dreamer, a wisher, a liar, A hope-er, a pray-er, a magic bean buyer ..."
    6. Re:versus by Anonymous Coward · · Score: 0

      I view those types of questions as relatively trivial in the big picture. One of the worst programmers I've ever worked with had a massive command of several programming languages. He could do "text book" stuff no problem and was the go to guy for questions about languages. It was doing something useful and truly creative that he just plained sucked at. Worse, he was so puffed up with pride over his command of languages, that he thought himself a great programmer. As a result, he was a real pain to "give the vision" to. It took a lot of explanation and prodding to get him thinking the way the other team members were, because he was so, I'm not sure how to describe it, but maybe "procedure oriented" is a good way.

      Great programmers don't have to know every nuance of a given language. It's what you can create which determines how great a programmer you are. At least with regards to shrink wrap software. If you work in a bank, then being a procedure monkey would make you great, but in developing apps for retailing that just isn't enough.

      I'll admit up front that my coding skills are mediocre when it comes to coding original solutions to problems. I know a few languages competently, but I'm not a great programmer in terms of designing software for retail. What I am great at is QA and in that role I have worked with some of the shittiest programmers I could imagine and some of the best I could hope to work with. I'm not saying this makes me an expert or my viewpoint more valid, but this is where my opinion is coming from on this.

    7. Re:versus by thrillseeker · · Score: 1
      I'll admit up front that my coding skills are mediocre when it comes to coding original solutions to problems.

      I've always tried to practice the Richard Feynman way of solving hard problems:

      1. Write down the problem.

      2. Think real hard.

      3. Write down the answer.

      Step 2 has been tricky to teach though.

    8. Re:versus by Anonymous Coward · · Score: 0

      Bad programmers write functions 3000 lines long. Good ones break it into smaller pieces.

    9. Re:versus by aralin · · Score: 1
      I don't think the trouble comes in nested functions. Any procedural programming comes down to a linear flow anyway and most people are fine in one or two dimensions needed to imagine that much. The trouble from my experience comes when your data structures become a little more complicated.

      When your problem can be reduced to a medium set of distinct mappings between 5 and 7 dimensional objects in 11 dimensional discrete space, thats where you lose most of your collegues behind. When you cannot imagine it in your head, you get "lost in space". :)

      I have to admit I have my limits too. I was still able to follow my profesors in schools when they talked about infinite dimensions, but once one of them started with the 2.5 dimensional space, I simply lost it and basically took him on faith and reduced down to symbol shuffling in order to come up with my proofs.

      Oh yeah, that brings me to the next thing, when is the last time you actually saw any programmer prove that his theory is right before starting to apply it in code? I swear I saw a guy hack for a year (with some interruptions) on a piece of crap code with an axe to try to beat it into submission rather than sit back and think about how to do it right. Most of the coding today is done by iterations trying to get into a proximity of a correct solution within 5 to 6 tries.

      --
      If programs would be read like poetry, most programmers would be Vogons.
    10. Re:versus by dgatwood · · Score: 1
      IMHO, a well-written 2800 line function consisting of a bunch of very neat 20- to 40-line cases inside a SWITCH block is a heck of a lot easier to read than if each of those case statements just contained a function call with a dozen or so parameters in each direction....

      Breaking inherently large blocks of code up into functions only makes sense if there are reasonable structural boundaries along which to do so. In this particular case, no such reasonable boundaries existed, so for maintainability, I elected to just keep it all together. I haven't regretted it for a minute. I can fix most bugs in this module in mere minutes... and there haven't been very many.... Most of the bugs I find are in the code that actually uses this function....

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    11. Re:versus by Jeremi · · Score: 1

      Step 2 isn't so bad... it's Step 3 I have trouble with.

      --


      I don't care if it's 90,000 hectares. That lake was not my doing.
    12. Re:versus by unavailable · · Score: 2, Insightful
      - Intelligence comes handy when one is 5 level deep in a nested function (which can't be simplified) and trying to add another 2 levels at once.

      Yeah, I'm sure it does. Or maybe that good inteligence should not be wasted on 7 level deep functions that need rewriting anyway?

      The Linux Kernel coding style does have an insight on this issue:
      Now, some people will claim that having 8-character indentations makes the code move too far to the right, and makes it hard to read on a 80-character terminal screen. The answer to that is that if you need more than 3 levels of indentation, you're screwed anyway, and should fix your program.
    13. Re:versus by autopr0n · · Score: 1

      - Intelligence comes handy when one is 5 level deep in a nested function (which can't be simplified) and trying to add another 2 levels at once. Even if it can't be simplifed, a good programmer will break it into smaller peices, unless the leaves are like one or two lines each.

      --
      autopr0n is like, down and stuff.
    14. Re:versus by autopr0n · · Score: 1

      IMHO, a well-written 2800 line function consisting of a bunch of very neat 20- to 40-line cases inside a SWITCH block is a heck of a lot easier to read than if each of those case statements just contained a function call with a dozen or so parameters in each direction....

      I have a hard time imagining a function that would require something like. Normally if I'm going to have to discriminate between a huge number of cases, I'll write a class system and derive 'cases' from the class. That way I can add and remove cases without editing the main code.

      If each of those 'cases' are somehow interdependent, then you definitely don't have anything manageable.

      The only example I could think of would be to perform different commands, like command line parameters, menu items, RPC function calls, etc. For all of those things you'd clearly want them to be modular.

      --
      autopr0n is like, down and stuff.
    15. Re:versus by Anonymous Coward · · Score: 0

      In my experience, and, sadly, I have rather a lot of it, developers spend waste far more time satisfying stupid company rules or being delayed by poor technology and tool choices made by clueless management than any of the points above.

    16. Re:versus by Anonymous Coward · · Score: 0

      Sorry to break it to you bud, but you're one of them there BAD programmers.

      A DOZEN parameters? !!!

      20 to 40 CASES in a SWITCH

      I hope you were trolling - if you wrote that kind of code for me, you'd be fired PDQ.

    17. Re:versus by halleluja · · Score: 1
      Intelligent programmers can be slower and counterproductive as they know it best and constantly trying to improve/beautify some of their code.

      So, it's about the package not the intelligence itself.

    18. Re:versus by Anonymous Coward · · Score: 0

      a dozen parameters is retarded. you can just make one class with a dozen fields, and lookie encapsulation works for you!

      fourty switch statements i can see though, but only if you have a large dispatch system, like in a MUD's text parser. In which case, you may want to look at lexx and yacc, since you're basically parsing a formal language here.

    19. Re:versus by dgatwood · · Score: 1
      That's a dozen parameters -with- heavy class encapsulation. If it weren't, there would be about 70 parameters going in each direction. Currently, the code uses one class with 51 data members, another with 11, plus a handful of local variables (mostly fairly large arrays). Total is about a dozen....

      Unfortunately, Lex/Yacc is out, because Perl reportedly can't be parsed by a Yacc grammar....

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    20. Re:versus by Anonymous Coward · · Score: 0

      What you're describing obviously is a prime candidate for polymorphism. Actually what you're describing is terrible. Since you don't discuss what it is or why it's irreducible, it's difficult to directly tell you how that you're wrong. I suspect very much that you are, however, incredibly mistaken.

    21. Re:versus by Anonymous Coward · · Score: 0

      Capacity dimensions have surprisingly little to do with programming, though they can of course be topical to understanding what you're programming. Infinite dimensions are actually not all that relevant either to the reasoning involved in programming, though again they can be useful in reasoning about what one is implementing.

      That is to say, that taking linear algebra hasn't set you apart from your peers. Nonlinear dynamics is more esoteric from the perspective of discussing programmers with undergraduate degrees in computer science. It isn't however particularly meaningful to the structure of software, or the engineering of software in general. It's mathematics that has applications that can be implemented with a computer by a programmer. If you don't understand the mathematics, then you won't be able to implement that. Much like if you don't have a working knowledge of finance, you aren't going to be able to implement useful financial software either.

      As for your later comment, very little software is proven correct. This is because doing so becomes exceedingly difficult the more a piece of software becomes useful for accomplishing something. Proving certain algorithms are correct on the other hand isn't all that uncommon in areas where doing so is feasible.

  6. Cost of Quality by overshoot · · Score: 5, Insightful
    The argument applies across the board with techies in the design end of things. Throwing bodies at a problem generally makes schedules slip even in the design state; what it does to the test and qualification stages is much worse.

    My experience with this is in the IC design part of the world, but the rule remains: you're better off with half the people but good ones.

    If you want to add bodies, let them do review work. It actually does contribute to quality, and has the added benefit of making better engineers out of the reviewers (and, IMNSOHO, of those who know that their work is going to be reviewed, too.)

    --
    Lacking <sarcasm> tags, /. substitutes moderation as "Troll."
    1. Re:Cost of Quality by dubbreak · · Score: 1

      Throwing bodies at a problem generally makes schedules slip even in the design state

      excellent point, it's amazing how many managers do not understand that. It's amazing how many people have not heard of The Mythical Man-Month. It should be required reading for anyone dealing with large projects (learn from someone elses mistakes in this case IBM's).

      Also not entirely on topic, but more programmers need to read The Design of Everyday things. There are way too many poor user interfaces out there, and DOET has a lot of great information of interfaces (from door knobs, to kettle handles and menu structures) and making them usable.

      And as long as I'm ranting read some Ask Tog, especially this if you haven't.

      --
      "If you are going through hell, keep going." - Winston Churchill
    2. Re:Cost of Quality by pvera · · Score: 4, Insightful

      This cannot be stressed enough: throwing more bodies into the problem only makes the project last longer.

      It gets worse when outsiders above the project (say, a division manager that is not paying attention to the status reports) decide to listen to hearsay and water cooler talk and use that as criteria to bring more people in:

      "The guys in the break room are bitching about the project, we need to bring more php programmers."

      Next thing you know, this head guy is talking to everyone except the actual team that knows what is going on.

      This happened to us less than a month before delivery. For real. We found by accident that the boss was concerned and was getting ready to shop around for extra PHP people. Small problem: we were not having PHP problems. Our problem was a hosed CVS repository, which is what we were overheard bitching about while making coffee in the break room.

      When we told the boss that there was nothing wrong with the code and we were less than two days behind our schedule (which is much more agressive than his) he almost shit a brick.

      The lesson? Don't bitch about technical stuff unless it is a controlled environment. We now keep our bitching for our daily walk to pick up lunch. The odds of someone from the office overhearing us and getting half of the information are pretty much nil.

      BTW, the boss still came up with a good idea for bringing extra people, since programmers are not needed. He thinks we can bring temps just to do grunt work like filling a bunch of web forms, etc.

      --
      Pedro
      ----
      The Insomniac Coder
    3. Re:Cost of Quality by Brandybuck · · Score: 4, Interesting

      If you want to add bodies, let them do review work.

      Let them do process busy work as well.

      A few months back we were too crunched on the schedule, but another project had cancelled so there were loads of bodies available. But putting them to work coding would have destroyed the project. As always, upper management didn't understand that. So when I was asked where I could best use some extra help, I answered truthfully: have someone else write all the freaking documentation and attend all the freaking meetings so I dont' have to. Tada! They listened and I ended up with four extra hours per day to get the work done.

      p.s. Of course, management never learns. Another project is slipping and they're throwing people at it as fast as they can cancel projects. Sigh.

      --
      Don't blame me, I didn't vote for either of them!
    4. Re:Cost of Quality by Anonymous Coward · · Score: 0

      Your boss makes busisness decisions solely on the basis of overheared chit-chat? He doesn't you know, talk to his employees. he doesn't confirm this stuff in meetings?

      You've got bigger problems than most.

    5. Re:Cost of Quality by iGN97 · · Score: 1
      This cannot be stressed enough: throwing more bodies into the problem only makes the project last longer.


      I once had the opportunity to work for a boss who had the sense to remove people from lagging projects instead of throwing more people at it. Not necessarily the "bad coders", but the observation was that there is speed in smaller numbers. Especially true for those projects that just seem to be stuck at "90% finished" no matter how much time you sink into them.

      Those were the days.
    6. Re:Cost of Quality by gokeln · · Score: 1

      You bring up an excellent point: people can improve over time. This is something that Joel seems to discount. Hire only the great programmers. My thinking is that great programmers are not merely talented, but skilled, and this takes time and investment. Companies that only want to hire great programmers are missing out on the possibility of making some promising but unskilled folks into great ones.

      Not to mention that while great programmers may not cost much more, the hiring process to find them does, and if more and more companies begin looking for the great ones, it leaves a vacuum in the market, thus driving up the costs and more and more pressure to outsource overseas.

      I'm not advocating to ignore greatness when you see it, but rather to look for general intelligence and be willing to do some on-the-job training. Don't you just hate those job advertisements that list umpteen required specific skills, any of which could be mastered with only a little effort? Always seems pretty short-sighted to me, and leads me to look elsewhere.

      --

      There's no time to stop for gas, we're already late.
  7. Websites by daviq · · Score: 0

    Have yee ever seen the programming of some websites? Ergo cheapo programmers.

    --
    Go to the w3.org and put Slashdot.org through the validator.
    1. Re:Websites by Metasquares · · Score: 1

      Don't confuse programmers with web developers. The sets overlap, but they are hardly congruent.

  8. Elitist Programmers by Anonymous Coward · · Score: 0

    Joel's pretty sure of himself isn't he? Anybody else annoyed with these elitist experts?

    1. Re:Elitist Programmers by anthony_dipierro · · Score: 2, Funny

      Yes, but an elitist expert will simply spout off the kind of bullshit that an average person never would come up with.

    2. Re:Elitist Programmers by Tim+Browse · · Score: 1, Informative

      He's not so smart, otherwise he wouldn't be talking about people being asked to "implement a ZLW file compressor" :-)

    3. Re:Elitist Programmers by Concerned+Onlooker · · Score: 1

      Yes. Mostly because I'm not in the elite. I wonder how many Slashdotters believe they are the "top programmers?"

      --
      http://www.rootstrikers.org/
    4. Re:Elitist Programmers by Skasta · · Score: 4, Informative

      He makes a note on another post saying that in the original paper Ziv was first author, which is way he lists it as ZLW.

    5. Re:Elitist Programmers by pclminion · · Score: 0, Flamebait

      "Expert?" The dude can't even spell "LZW" correctly. The guy's a joke.

    6. Re:Elitist Programmers by mister_llah · · Score: 1

      I think most people assume they are the best.

      The book smart coders think their way is the best, the hobbyist will think "I've been doing this for FUN, I'm obviously better" ... people in the middle think their blend of experience makes them better.

      Personally, I think they're all wrong, I'm the best!

      --
      MoM++ - A Classic Expanded - [Master of Magic 1.5]
      http://mompp.sourceforge.net/
    7. Re:Elitist Programmers by wootest · · Score: 1

      There are two schools of spelling that - the patent mentions Ziv first by name and some people thus go by that - "ZLW", while others go by the more common "LZW" order. Wikipedia has details. (Oh, and in the spirit of others treating you the way you treat others, would it be okay for me to deride you as a 'joke' for not knowing that, conveniently deciding to not take anything you say seriously?)

    8. Re:Elitist Programmers by Maxo-Texas · · Score: 1

      There is another basic problem. I know many excellent programmers who have no degree or formal training tho the majority these days do have a degree or formal training.

      I also know a lot of "certified" dumbasses. They have the degrees and certifications but they learned the test and have no emotional connection with programming. So they suck- sometimes horrifically.

      There is a huge push for certification- but in some cases you cull out the best programmers with these and open your door to nimrods.

      I have a computer science degree. I'm good- I used to be better. I will -never- be as good as my high school bud who quit college after 2 years to program full time. He's basically a god- fortunately his company knows it and they compensate him accordingly. He does both impossible things and possible things- just better and cheaper- and faster- than anyone else could do them.

      --
      She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
    9. Re:Elitist Programmers by Anonymous Coward · · Score: 0

      I'm annoyed with n00bs who use the word "elitist".

    10. Re:Elitist Programmers by Anonymous+Brave+Guy · · Score: 1

      Why not?

      (I hope you're not about to argue incorrectly that it must be LZW...)

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    11. Re:Elitist Programmers by pclminion · · Score: 1
      (Oh, and in the spirit of others treating you the way you treat others, would it be okay for me to deride you as a 'joke' for not knowing that, conveniently deciding to not take anything you say seriously?)

      The guy's a joke for plenty more reasons than that. I picked one I thought seemed funny. Touche.

    12. Re:Elitist Programmers by MPHellwig · · Score: 1

      ''' "Expert?" The dude can't even spell "LZW" correctly. The guy's a joke. '''

      When Joel judges, he knows where he judges about.
      You my friend, clearly do not.

    13. Re:Elitist Programmers by Vengie · · Score: 2, Informative

      Original paper was Ziv and Lempel, later (window refresh) refinement by Welsh. I took CS323. I wrote this code. I'm pretty surprised by the number of people here that have NFC and are posting......thanks for not being one of them. (Them being those that lack the FC)

      --
      When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi. (Larry Wall)
    14. Re:Elitist Programmers by Anonymous Coward · · Score: 0

      Excuse me, but what is NFC and FC?

    15. Re:Elitist Programmers by Anonymous Coward · · Score: 0

      I would guess 'no fucking clue' and 'fucking clue', but I've never seen these acronyms before.

    16. Re:Elitist Programmers by Anonymous Coward · · Score: 0

      The worst software developer I've ever had the misfortune to see was pathetically bad. But, in his mind, he thought he was stupendously great.

      I was given his software to debug when he was promoted to management.

      That was the most undebuggable software I have ever seen -- much worse than I could have ever imagined. No matter how many bugs I fixed, many more remained.

      I could have rewritten the entire thing from scratch in far less time than I spent trying to debug it, but I was always turned down when making the request. After a while, I got demoralized and spent more time playing games and looking for a new job than I spent debugging.

      My inability to debug that piece of crap software was very career limiting within that company. Management thought the guy was great and that failure to finish that task reflected on me, not him.

      After I left, the job was turned over to someone else. From what I was told by others, he spent the next two weeks seriously fixing bugs until he became aware that he could be fixing bugs until retirement age and not finish that job.

      After that, he quietly rewrote it. Every once in a while, someone would ask about a bug or two and he would fix a couple of bugs to make them happy. Then he would quietly go back to writing it correctly.

      Before he finished, the project was taken over by another company. So when the guy quietly rewriting the software finished the task, noone in authority objected to his actions since the manager no longer had any authority at all.

    17. Re:Elitist Programmers by Tim+Browse · · Score: 1
      It's a bit silly, though, don't you think? The world and his dog call it LZW. A few people decide it should be called ZLW. That's just being contrary really.

      It's not like we need more acronyms that mean the same thing. Does he talk about ZL77 and ZLMA too?

      PS. You know, it's just possible that other people in the world (and certainly on this website) have written/studied this code, too. You don't have a monopoly on that. I bet you'd get upset if I said "PIN number" too, eh? :)

    18. Re:Elitist Programmers by prionic6 · · Score: 1

      I was searching for the post with the word "elitist" in it and post it if there werent any... Unfortunately I think its too late to get this read by anyone... But nonetheless:

      First of all, how do you tell a "good" programmer from a bad one? Based on reputation? Based on grades? Crap decision. Everyone has to learn. Also the market for "good programmers" is way to small for every company only having the good people.

      Second, a companys primary goal, in my eyes, is not to make the best product. That is a close, but second, second! The first thing is _social responsibility_! Not every human is equally skilled in everything. Someone can do better raw programming, someone is a better architect, someone has good social skills, someone may be good at virtually everything, someone may not. The responsibility of the company is to put everyones skills to a good use.

      Lets say, theoretically, every company would only employ the best 10% of the people. Ignoring that some people may have multiple skills, that leaves 90% of the population unemployed! What a great thing to do!

      The elicist seem to forget that a company is not for making money. Its purpose is making money so that the society benefits from it! Not only a small part of it. Sorry if that is news to you.

    19. Re:Elitist Programmers by Anonymous Coward · · Score: 0

      That's what I was thinking, too, though he used the term "the FC" which doesn't sound right.

    20. Re:Elitist Programmers by wootest · · Score: 1

      The guy's a joke for plenty more reasons than that.

      Seeming as how the "reasons" are so "plenty", please enumerate a few for us.

    21. Re:Elitist Programmers by Anonymous Coward · · Score: 0

      I think he is only talking about artist jobs.

    22. Re:Elitist Programmers by Vengie · · Score: 1

      We did, in fact, have to look at ZL77. And there are many academics that still write ZLW -- not to say that many don't also write LZW. I wasn't saying I have a monopoly on having written/read the LZW algorithm, but I have, however, taken the course in question. *MY* time logs are part of the figures he mentions. As such, I feel like my opinion on the subject carries some merit. :P If you say "PIN Number" I'll cope, ditto for NIC card and ATM machine, but if you're discussing statistics collected from an aggregate and I am part of the aggregate (and so am familiar with the specific experiences being discussed) I do feel that more gravitas is implied. [The professor in question has come in after a test and said things like...."You weren't as spread out as I would have liked" -- et cetera.]

      --
      When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi. (Larry Wall)
    23. Re:Elitist Programmers by Tim+Browse · · Score: 1
      The professor in question has come in after a test and said things like...."You weren't as spread out as I would have liked"

      Sounds like a lawsuit waiting to happen :-)

    24. Re:Elitist Programmers by Paradise+Pete · · Score: 1
      That's what I was thinking, too, though he used the term "the FC" which doesn't sound right.

      I think that he used NFC for No Fucking Clue, but from the context I took FC to mean First Clue.

  9. Of course... by millennial · · Score: 0, Redundant

    With a sufficient number of bad programmers, and an infinite number of monkeys, you can create any program... perfectly. Just have the infinite monkeys get to work on fixing the bugs. You'll have a few copies of the program that are absolute crap, but eventually a winner will pop up.

    --
    I am scientifically inaccurate.
    1. Re:Of course... by ebrandsberg · · Score: 1

      Yes, and you will also have to pay an infinite number of well trained monkeys twice as much to find the bugs in the QA department to find the bugs for the monkeys to fix.

    2. Re:Of course... by TheLink · · Score: 1

      As long as you can sell the product to monkeys and make a profit who cares about QA?

      --
  10. The cult of the elite programmer by BlightThePower · · Score: 2, Insightful

    I'm not buying. Well, if it is true then it really it speaks to the failure of software engineering as a whole. I hire any other sort of engineer, I expect a certain level of competence and a job done to agreed standards. Not all engineers are created equal of course but the point still standards. This strikes me as revelling in a a form of failure quite frankly, there simply shouldn't be such a wide variation of outcome within the application of an engineering discipline.

    --
    Plays violent online games as: Nerfherder76
    1. Re:The cult of the elite programmer by someguy456 · · Score: 1

      That's where the difference between a computer programmer and a software engineer comes in. You can call yourself the former after even a self-taught course or one of those 6-month technical schools, but it takes plenty of time, work, determination, etc to receive a software engineering degree.

    2. Re:The cult of the elite programmer by Feyr · · Score: 1

      the problem here is exactly that, there is no such thing as a "software engineer".

      any asshat can call himself a programmer, and many do. even if they're complete utter crap. unlike the "engineer" title, the "programmer" one isn't regulated

    3. Re:The cult of the elite programmer by Anonymous Coward · · Score: 0

      Problem is that software is really not like building a house. You don't just have to obey the laws of gravity and the physical properties of your materials...you're trying to build a logical structure with many more degrees of freedom.

      It's kind of an art and requires experience and some basic knowlege to be able to avoid the pitfalls. The bad programmers have don't have enough of this and end up wasting a lot of time and possibly even reducing the productivity of others by introducing bad design or convoluted code. I've seen happen so many times.

    4. Re:The cult of the elite programmer by Anonymous Coward · · Score: 0

      I guess you think all house painters should be as skilled as DaVinci... you fucking retard.

    5. Re:The cult of the elite programmer by Anonymous Coward · · Score: 0

      Some of us aren't engineers, where is the creativity in engineering. An engineer can make a damn sturdy frame, but some of us can write code that is friggin art. This 'discipline' isn't just about knowledge, talent should be acknowleged too.

    6. Re:The cult of the elite programmer by MikeFM · · Score: 1

      For one rare moment I agree with Joel on this. One good engineer is irreplacable by any number of okay engineers. Lesser engineers are fine for doing the bits of the process that are little more than testing and data entry but they lack inspiration and insight into how things work.

      Simply knowing how to code doesn't make you a programmer. I come up with elegant solutions others usually would never come close to. I rather like having some of those programmers available to write the boring crap but I still have to tell them how to do their work and review it to make sure they did it. They are cogs and the real programmers are the engines.

      It ends in the difference between a product that, if you're lucky, just works and one that Just Works(tm).

      --
      At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
    7. Re:The cult of the elite programmer by Anonymous Coward · · Score: 0

      Wow, can the chip on your shoulder be any bigger?

      (Most) Engineers are creative. They have to be to solve problems with the minimum amount of expense whilst being under-budget. Programmerss, on the other hand, are just code monkeys. Half the kids out of school can program VB/Java.

      Engineers deliver reliable, real-world solutions. Code-monkeys create expensive, unreliable crap.

    8. Re:The cult of the elite programmer by TommyBlack · · Score: 1

      The real difference between software engineers and other types of engineers is that software engineering is not a profession. There is no general certification to enter software engineering, and there is no required professional organization with a fixed code of ethics.

      Of course, does anybody here really think government regulation would make software engineering better?

      --
      Why do my serious comments get modded "funny"?
    9. Re:The cult of the elite programmer by BlightThePower · · Score: 1

      Well then, perhaps you've identified the fundamental problem for me then. Its amateur hour all round. Have a cigar! Actually, its not for governments to regulate (not sure where that idea comes from), its for professions to regulate themselves. I'm not sure what it would be in the US but in the UK it would be incorporating to gain a Royal Charter or similar. Or just following the medieval model and forming a trade association or guild; if plumbers and joiners can do it, why won't software engineers?

      --
      Plays violent online games as: Nerfherder76
    10. Re:The cult of the elite programmer by davidgay · · Score: 1
      My father's an electronic engineer (one of those "real engineering" disciplines). Strangely, they also have good and bad engineers. They even have "real engineers" (similar to "real programmers").

      It's probably true that the average electronic engineer is more useful than the average programmer. But they're far from all being equally useful.

    11. Re:The cult of the elite programmer by crazyphilman · · Score: 1

      Yes, but even consultants who have NO comp.sci degree and took a VB boot camp are calling themselves "software engineers".

      Titles are meaningless now.

      --
      Farewell! It's been a fine buncha years!
    12. Re:The cult of the elite programmer by superpulpsicle · · Score: 1

      Someone mod this guy +99, I am out of points. I could not have said it better myself. Titles are meaningless bigtime. That's why everyone is so heavy on the references during interviews to see if there is a record of you doing your job successfully in the eye of someone else.

    13. Re:The cult of the elite programmer by Savantissimo · · Score: 1

      All these licensing requirements and guilds are primarily to protect the professionals from competition rather than the public from incompetents. If a customer wants to buy silver wrought by an unlicensed maker outside any guild, why should anyone have the right to interfere? The same goes for doctors, lawyers, teachers, engineers and all the other petty conspiracies against the public's purse right down to barbers and estate agents. If you let it spread you'll end up like Switzerland where one must speak three languages and be able to identify several dozen types of paper by touch alone in order to get a license to work as a stationery clerk.

      --
      "Is life so dear, or peace so sweet, as to be purchased at the price of chains and slavery?" - Patrick Henry
    14. Re:The cult of the elite programmer by therodent · · Score: 1

      Right, titles are meaningless.

      I call myself a programmer. Its faster and gets the point across that I spent a lot of my time reading and writing/testing code.

      We used to have a guy who was "chief scientist" at the web company where I worked in the late 90s. He couldn't even code: how sorry is that?

    15. Re:The cult of the elite programmer by crazyphilman · · Score: 1

      Heh heh heh... Yeah, the company I was in had one too. He got the idea from Bill Joy, who was his hero (I think).

      I seem to remember this was one of the big dot-com things to do, anoint people with weird titles. I spent a few months as a "parsing engineer" (which basically meant I was a perl hacker who parsed and fetched web content for syndication... I found it hilariously pretentious).

      --
      Farewell! It's been a fine buncha years!
    16. Re:The cult of the elite programmer by BlightThePower · · Score: 1

      The question is, was DaVinci any good at painting houses? And if he said he was, should we hire him to paint our house if he's going to spend all day jacking off and drawing pictures of helicopters? He can be an artist on his own time, if he's hired to paint my house he can get up the fucking ladder and have the job finished when he promised it.

      --
      Plays violent online games as: Nerfherder76
    17. Re:The cult of the elite programmer by BlightThePower · · Score: 1

      If a customer wants to buy silver wrought by an unlicensed maker outside any guild, why should anyone have the right to interfere?

      Nobody. But if you want to form an organisation that expects (and audits) the quality of its members, who is to interfere with general public using than as an indication of the likely quality of the services its members offer? If they want to. They can still hire the kid from the video shop if they want. You need to get over this "OMG Government" thinking. It would have nothing to do with them.

      --
      Plays violent online games as: Nerfherder76
    18. Re:The cult of the elite programmer by Savantissimo · · Score: 1

      So long as you're talking about voluntary, non exclusive trade associations - then, fine. The original post was talking about "required professional orgainization", though, and you mentioned medieval guilds, which were indeed goverment-mandated monopolies on trades.

      --
      "Is life so dear, or peace so sweet, as to be purchased at the price of chains and slavery?" - Patrick Henry
  11. Isn't this fairly obvious? by Saeed+al-Sahaf · · Score: 1
    His point is that a good programmer will simply create code of a quality that average programmers never can create.

    Isn't this fairly obvious? The thing is, in the code sweatshops that many "software" companies operate, high quality code is no longer the point. It's very much the same attitude that tangible goods manufacturers have taken, making a marginally acceptable product that is more or less disposable in the long run is the point. Get it out there, sell a few million units, and move on to the next version. If the product is too good, no one will buy the next version, and so good enough is the target. Companies that make a product you will never need another of go out of business.

    --
    "Who are in control, they are not in control of anything - they don't even control themselves!" - Glen Beck
    1. Re:Isn't this fairly obvious? by Hangtime · · Score: 1

      Kitchen-Aid seems to do pretty well for itself and you NEVER buy the same Kitchen-Aid appliance twice.

    2. Re:Isn't this fairly obvious? by putaro · · Score: 1

      Companies that make a product you will never need another of go out of business.

      Oh, but the wonderful thing about the software industry is that software goes bad. All you need is a few revs of the OS and pretty soon you need to have the latest version.

    3. Re:Isn't this fairly obvious? by Saeed+al-Sahaf · · Score: 1
      There are many types of applications that get up-graded in a regular basis, even Operating Systems. Linux and Windows both get upgraded on a regular basis, and you will pay for your new Windows if you want a legit copy. The same is true of many commercial software products.

      That YOU don't buy a lot of software says nothing at all except YOU don't run a lot of commercial software.

      --
      "Who are in control, they are not in control of anything - they don't even control themselves!" - Glen Beck
    4. Re:Isn't this fairly obvious? by yennieb · · Score: 1

      "Companies that make a product you will never need another of go out of business."

      Even in software, this isn't universally true. It's only true if your business model doesn't support it. Subscription-based software is a cash cow if you never have to update the software. Just sit back, support it, and cash the checks.

      Of course, OS updates alone make no-new-versions virtually impossible for most software.

    5. Re:Isn't this fairly obvious? by putaro · · Score: 1

      Huh? What comment are you replying to?

  12. There is one major problem. by jellomizer · · Score: 1

    The problem is defining what makes a good programmer. While some firms hire based on price. But still a lot of others actually try to find good programmers. Thus the problem what makes a good programmer. Is it certifications which I think are Crap, is it years of experience which is just as bad judge, or is it formal education which is just like certification.
    I like to consider myself a good programmer and most of my customers think so too. But am I really a top notch programmer there are a lot of programs out there which I see and marvel at and have great respect of the developers and I am not sure if I was placed on job with that request I would have came up with such an elegant solution. But on the flip side I see many programs so poorly done I am wondering how these people keep jobs.
    So it brings up the question what makes a good programmer while it is the persons ability to use a computer to solve problems. It is harder to be able to judge.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    1. Re:There is one major problem. by Anonymous Coward · · Score: 0

      I'd hope that you write code better than you write english...I'm still not sure that I understand what you're trying to say there. Perhaps try using some punctuation.

    2. Re:There is one major problem. by Xyrus · · Score: 1

      It's a little difficult to specify what a good programmer is.

      Whenever I ask the question "What is a good programmer?", I always get a list of traits as a response.

      I suppose it's similar to asking what makes a good actor. There are several criteria that will be common, and then there will be those that aren't.

      So while I'm sure the lot of us could come up with a semi-cohesive list of traits good programmers posses, I don't think it would be a true definition.

      I've worked with some great programmers. But it's always something that I "know", not something I could define precisely on a checklist.

      How do you know when you are a good programmer? When you have fewer questions and more answers. ;)

      ~X~

      ~X~

      --
      ~X~
  13. Yes, but... by TheOtherAgentM · · Score: 5, Funny

    Can the good programmer create code that compiles with a message, "Error: Too many errors." like I did in college? Now THAT is hard to do.

    1. Re:Yes, but... by mOdQuArK! · · Score: 1

      Sounds like you worked too hard to get that result - typical for a college student.

      For a typical C compiler, try a file containing:

      #error Too many errors.

      Too easy.

    2. Re:Yes, but... by dgatwood · · Score: 1
      Yes.

      #warning Error: Too many errors.

      main()
      {
      printf("Hello, world.\n");
      }
      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    3. Re:Yes, but... by dgatwood · · Score: 1
      That doesn't compile. It errors out. You need #warning for it to -compile- with that error message.

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    4. Re:Yes, but... by mOdQuArK! · · Score: 1

      Ah, my petard is hoist by my lack of literal interpretation. Oh well...

    5. Re:Yes, but... by eluusive · · Score: 1

      Nope, sorry. In that case it's a warning message. Having an error message and compiling are mutually exclusive. Don't let your head blow up trying to figure that one out.

    6. Re:Yes, but... by Anonymous Coward · · Score: 1, Funny

      The compiler once told me that it could "not guarantee the results" of my "ill-formed program."
      Compilers shouldn't talk smack like that; it can really hurt a guy's feelings.

    7. Re:Yes, but... by jrumney · · Score: 1

      Thats a fairly typical MS compiler error. All you need to do is forget to define one compiler constant or include two files the wrong way around in a project that includes STL and you'll see it.

    8. Re:Yes, but... by cant_get_a_good_nick · · Score: 1

      Acctually, this isn't that hard. Most compilers have some limit to the number of errors that they spit out, the general though being "if you got this many errors, you missed something early on and put your code into an uparseable state - fix it and we should be good". Sometimes missing a semicolon is enough to get some weird parsing state where everything else after is gobbledegook. Anything involving templates, such as the STL, is probably an easy source as well.

    9. Re:Yes, but... by landaker · · Score: 1

      Ah, my petard is hoist by my lack of literal interpretation. Oh well...

      Your lack of literal interpretation is launching your explosives into the air? =)

    10. Re:Yes, but... by T.Hobbes · · Score: 1

      $ gcc warning.c warning.c:1:2: warning: #warning Error: Too many errors. $ ./a.out Hello, world. Perhaps main() { printf("Error: Too many errors.\n"); } ?

  14. Yeah by Anonymous Coward · · Score: 1, Insightful

    But those 'good' programmers will expect to be paid 3-5 times what 'cheap' programmers expect for neat little things only other 'good' programmers would really appreciate. For businesses, who only see the exterior of your program, if it works good enough for what they are paying they could care less about your neat and efficient algorithms, intelligent naming conventions, and proper use of OOP. When money is the sole reason why you are in business, shoddy workmanship or crappy programming is something you don't really care about as long as it gets the job done for the lowest price possible.

    1. Re:Yeah by emurphy42 · · Score: 1

      They should care about those things, as the reduced cost of ongoing maintenance may well pay for the added up-front cost several times over. Whether they actually do care, of course, is a much different question.

    2. Re:Yeah by Anne+Thwacks · · Score: 1
      No one would consider paying 100 times as much for a good football player, would they, and anyone can see a good football player is 100 times better than an average one!

      No, wait...

      --
      Sent from my ASR33 using ASCII
  15. Who is Joel? by daniel_mcl · · Score: 4, Insightful

    Unless this Joel fellow has some sort of long-forgotten historical notability in software engineering, I fail to see why his articles continually show up here. His company, which he repeatedly plugs in his articles, has put out two pieces of software -- a bugtracker and a content management system -- which nobody I've talked to has ever heard of. Does Joel have some insight into programming that everyone reading Slashdot does not?

    I suppose, of course, that the same could be said for most tech journalists, most of whom would have a hard time compiling a source tarball. On the other hand, usually tech journalists are reporting on companies' press releases, not writing editorials about software design.

    --
    I used to read Caltizzle. I was a lot cooler than you.
    1. Re:Who is Joel? by PktLoss · · Score: 1

      I'm surprised at how rarely this is pointed out.

      That being said, I read his articles because unlike a lot of techie type blogs: He can write, He writes about broader topics than say problems compiling OpenSSL on a widget box 2000 with RH, he often uses real numbers to support his opinions.

    2. Re:Who is Joel? by Otter · · Score: 1
      1) Joel, IIRC, was the program manager for the development of VBA. I realize that that's mostly an opportunity for every twelve-year-old who has typed in and compiled hello.c to look down on him, but some might view it as "some insight into programming that everyone reading Slashdot does not".

      2) I know this is a radical concept to the "You can't say that! RMS says you can't say that!!!" crowd, but -- it's not like you can only read things you're going to unquestioningly believe. His stuff gets linked because it's original, well-written and provocative. It's not like you're not allowed to disagree.

    3. Re:Who is Joel? by not_anotherFanBoy · · Score: 2, Informative


      He jumped out of airplanes for the IDF, wrote the spec for VBA while he was the project manager for Excel in the early nineties, started http://www.fogcreek.com/ and made an assload of money.

      You can read the rest of his resume here: http://joel.spolsky.com/resume.htm

    4. Re:Who is Joel? by istartedi · · Score: 2, Informative

      Shutup. He's cool. Thousands of slashdotters who never had a chance to be cool in any other context now have a priceless opportunity to mimic the in-crowd in highschool by pretending that their pundits of choice have something to say that isn't obvious to anyone with an IQ of 90. Don't blow it for them. These nerds are desperately deprived of coolness and there's no telling what they might do if they don't get their fix.

      --
      For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
    5. Re:Who is Joel? by DysenteryInTheRanks · · Score: 0

      Agreed. Agreed. Mod parent up. I only read opinions from historic notables, myself. Ben Franklin, Linus T, Larry Wall. Anything else is a waste of time. Except when I'm on Slashdot, where I read comments from a guy whose chief claim to fame is writing a weblog by or for "icy blue chipmunks." daniel_mcl, I salute you.

    6. Re:Who is Joel? by Anonymous Coward · · Score: 0

      You must be new here. Joel has acquired the ability to provide morons with little snippets of common sense and he makes lots of money doing it! He is living proof that the sheep are out there and they want to give you their money.

    7. Re:Who is Joel? by xenocide2 · · Score: 1

      Joel worked for microsoft on one of their only in house from the start projects: Excel. The spreadsheet features a lot of programability and I hear it even had its own compiler or something for a while. That's his biggest credential, it seems. Oh, and I think he worked for Juno, a competitor to AOL, for a while.

      That said, you're exactly right. Joel takes that single fact, which could amount to perhaps one line in a resume or perhaps a single question in an interview, and basically writes a book about it. His self promoting writings usually border on fluff, especially you're already in possession of an MBA. But I think that there are times where what he writes speaks volumes to things that average techies don't know nearly enough about: selling software as a business.

      I don't think there are ton's of engineers out there with MBA's, and probably fewer still that have the knowledge and experience to successfully sell software to people. Microsoft, the biggest software company out there is best described as a software trader, rather than software developer. Excel is an anolmoly which serves Joel well. His articles at least give one the appearance of real world data and justification, with good explainations of simple business concepts to boot.

      But to really gain any standing with me, FogCreek really needs to create something of prestige, instead of building trivial software out of what appears to be the small financial empire of a former Microsoftie. Also, it might help if they didn't spell their bug tracking system with a Z.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    8. Re:Who is Joel? by puetzc · · Score: 4, Insightful

      The replies to this post seem to fall into two catagories:
      1. I haven't heard of him, therefore he must not be important and
      2. He can think and write, therefore I read his log.

      I definitely fall into catagory 2. I am not a programmer, but I work with programmers, request changes from them, and depend on their work. Insights that I gain from his website and his books have lead to more understanding on my part, and better results. That's good enough for me.

    9. Re:Who is Joel? by znaps · · Score: 1

      He may not, but that doesn't matter. What matters is that he's a smart software developer who can write really well. Kind of like Nick Hornby (who hasn't had the best of luck in his relationships with women it would seem, but can write about them really well).

    10. Re:Who is Joel? by A.S. · · Score: 1
      Blockquoth the poster:
      Does Joel have some insight into programming that everyone reading Slashdot does not?

      Yes, he does. I'll quote you a relevant section from his resume.

      Program Manager, Microsoft Excel. Part of the team that designs the world's best selling spreadsheet application. Drove a new macro language strategy for Microsoft (Visual Basic for Applications); coordinated all aspects of its implementation in Microsoft Excel, including design, development, testing, documentation, and marketing. Conceived and executed a C language programming interface to Microsoft Excel, and the Microsoft Excel Software Development Kit, a book by Microsoft Press. Conducted customer research for future versions and worked on the vision for Excel 95.
    11. Re:Who is Joel? by syousef · · Score: 1

      I am not a programmer, but I work with programmers, request changes from them, and depend on their work. Insights that I gain from his website and his books have lead to more understanding on my part, and better results. That's good enough for me.

      So are you saying that you don't have any expertise whatsoever in programming, so instead of relying on what your programmers are saying (or heaven forbid opening up a dialog with them!) you take the rantings of a self promoting programmer that's done little of consequence since the nineties.

      Somehow you claim this has worked for you. Perhaps the ideas expoused by Joel are a good fit to where you're working. Perhaps you were even pointed to his blogs by the programmers. If this is the case, fantastic. Otherwise talk to your own programmers and engineers first. If you don't have the right lingo to talk to them, study the field more seriously instead of relying on such a narrow source (and a blog at that!)

      --
      These posts express my own personal views, not those of my employer
    12. Re:Who is Joel? by Quarters · · Score: 1
      I've used both FogBugz and CityDesk professionally. They're both well written applications that fulfill a need and do their jobs well.

      That you and your close circle of friends/co-workers haven't heard of the software doesn't really mean anything. It could be that none of you have needed a professional bug tracking sytem or a content management system. Or, it could be that none of you have researched such systems.

      FogBugz, as I understand it, has sold extremely well and has gone through four releases. CityDesk has done well enough to warrant a 2.0 release.

      They also have Copilot coming out later this summer. It's an interesting product and project. The entire application is being written by summer interns in one summer.

      Joel's whole ethos is essentially, "Find a need, design a solution, and hire the best people you can to create the end product." It must be working for him as he own his own business, makes enough money to hire good talent, has a nice office setup in NYC, and is well known enough to talk at conferences, publish books, and influence the industry.

      I find it interesting, and short sighted, that you feel the need to put his achievements in some sort of "long-forgotten historical" context, though. If we're only supposed to judge the credibility of people by their past achievements then how would anyone ever be able to make a name for themselves?

    13. Re:Who is Joel? by jalefkowit · · Score: 1
      Unless this Joel fellow has some sort of long-forgotten historical notability in software engineering...

      Um, not to harsh your buzz or anything there, but you could always just go read the guy's resume if you don't think he has walked the walk. It's right there on his site, after all.

    14. Re:Who is Joel? by kesuki · · Score: 0, Troll

      Does Joel have some insight into programming that everyone reading Slashdot does not?

      Well, he wrote a 'duh, obvious' article, it was linked to and posted on slashdot, so well obviously he has more insight than you because you have to submit your 'duh, obvious' observations via comments, while joel can write them for a web page and get linked to.

      Hire better programmers and you'll get better code? no, you're kidding me... next thing you know you'll be telling me that if you hire better lawyers, a black man can commit murder and be found not guilty by a mostly white jury.

    15. Re:Who is Joel? by puetzc · · Score: 1

      Not to belabor the point, but GET OFF YOUR SOAPBOX. I am not a programmer, I am an engineer (MSME, BSEE, PE). I design mechanical systems, and work on a daily basis with programers who write control software for these systems, and who develop application tools to help themselves, me, and the end users benefit from our products. I say that I am not a programmer because I understand enough about programming to know that the data analysis, scripts and simple routines that I create do not make me a "programmer." I can recognize good code when I see it, but I am not skilled enough to create it. I have used enough poor software to recognize that many of Joel's ideas are practical and useful. I may propose ideas that I develop from reading many sources, of which JoelOnSoftware is one (many of the "classics" and "greats" are others). If as a group, we think that the ideas have merit, we work with them. If they don't, we develop better ones.

    16. Re:Who is Joel? by Sax+Maniac · · Score: 1
      He was program manager for Excel, one of the most successful software products in history.

      He knows his stuff, he's just started a new company for fun. Which is profitable, right now.

      What have you written?

      --
      I can explanate how to administrate your network. You must configurate and segmentate it, so it can computate.
    17. Re:Who is Joel? by Myrmidon · · Score: 1
      But to really gain any standing with me, FogCreek really needs to create something of prestige, instead of building trivial software...
      1. Who are you, that Joel should care if he has any standing with you?
      2. What kind of software has "prestige"? How much money can you make by writing it? If it's such a good idea, why haven't you built it yourself?

      The great thing about Joel is precisely that he's not a billionaire, not a famous computer scientist, not a guy who believes that striking it rich in the dotcom boom means that you are smart. He has experience in his field, thinks about his work, and writes very well indeed, but he's no rock star.

      He's a professional engineer: a guy with a small company that builds software in order to make money, live happily, and eventually retire. The software makes its users happy and sells, at a profit. That's it. No delusions of imperial grandeur. No religious warfare. No booth babes, sports cars, or TV commercials. No lusting after greater "prestige".

      I've worked for a company that confused "software engineering" with "the path to fortune and fame". I would not do so again. But I'd work for Joel.

    18. Re:Who is Joel? by daniel_mcl · · Score: 1

      IMHO, historical notability can be equated with producing something that changed the way things were done in a positive manner. Examples would be Fred Brooks, Minsky, Kernighan, Richie, Pike, Alan Kay, etc.

      The author of this article, on the other hand, has done nothing of any such noteworthiness. His main "achievement," if it can be called that, was designing and managing the implementation of a BASIC dialect in the 1990's. From his resume:

      "Program Manager, Microsoft Excel. Part of the team that designs the world's best selling spreadsheet application. Drove a new macro language strategy for Microsoft (Visual Basic for Applications)..."

      Now, most professionals consider Excel inadequate for any serious work, a point that was illustrated recently in a chemistry lab I was working in when three different computers running three different versions of Excel returned three different results for a linear regression. Upon writing an Excel macro which calculated linear regressions correctly, we found that all three computers were giving incorrect results. As data fitting is one of the most basic functions you could want in a spreadsheet and linear regression is the simplest form, I'm decidedly unimpressed by anyone who worked on Excel.

      --
      I used to read Caltizzle. I was a lot cooler than you.
    19. Re:Who is Joel? by Anonymous Coward · · Score: 0

      > Now, most professionals consider Excel inadequate for any serious work, a point that was illustrated recently in a chemistry lab I was working in when three different computers running three different versions of Excel returned three different results for a linear regression. Upon writing an Excel macro which calculated linear regressions correctly, we found that all three computers were giving incorrect results. As data fitting is one of the most basic functions you could want in a spreadsheet and linear regression is the simplest form, I'm decidedly unimpressed by anyone who worked on Excel.

      Not defending Joel, but reading your response raises serious questions.

      Now... I don't understand logically how this can happen. So you are saying that you take the same program (excel) though different versions, run it on different computers with same data, and get different results?

      Did you ever worked out what was wrong with the various Excel versions? Did you just put a blanket statement and say blah, Excel suxor, and went back to your own 'macro'? How do you prove that your macro has the correct results when it has different results from the 3 other tests you've done. Were you even using the Excel functions correctly?

      If you are so convinced that Excel is wrong, did you ever submit a bug report to Microsoft with the particular case?

      I've worked with Excel a lot, and I've never seen wierd stuff like this. I'm more inclined to deduce and believe that the issue is PEBKAC.

      I'm also decidely unimpressed by someone who can't even get an Excel spreadsheet to work.

      BTW, not many people can just brush off working as program manager of Excel as something not noteworthy. What's on your resume? NASA chief engineer?

      Finally, don't start flames. It isn't fun. Have a nice sleep and forget about this tomorrow.

    20. Re:Who is Joel? by thogard · · Score: 1

      There is a rumor that the Excel UI design was handed to them as a spreadsheet for the Lisa. Can anyone shed more light on that?

    21. Re:Who is Joel? by Suhas · · Score: 1

      I am assuming that you are not trolling.

      I have been using excel heavily for financial modelling for a long time now and the type of scenario that you describe has never happened in the last six years. Some of the financial models are extremely complex with more than 40 variables changing value at every step of the calculation and I have never, ever seen "different computers give different results". The financial models we use result in investments in billions of dollars and yes, we use excel like our lives depend on it.I would venture to say that the people I work with are "professionals". This type of anomaly simply does not happen. My guess is that you or people who created this macro do not know how to use excel and it's functions correctly. I doubt that your so called "macro" is anything more than a function writtenby someone with at best a half-baked knowledge of VBA and excel. Your problem is not excel, but a lack of knowledge of how to use it.

    22. Re:Who is Joel? by daniel_mcl · · Score: 1

      We used Excel's built-in LINEST function on the same data on three different computers and got three different numbers. The function which did not work properly was not written by a third party but by Microsoft. The computers, for reference, were all PowerPC-based Macs with various versions of Mac OS 9, and there were various versions of Excel installed.

      I then wrote a little macro which calculated the linear regression which gave identical, correct results on each computer. I didn't go to the trouble of sending an error report to Microsoft since I don't use Excel in my day-to-day business -- I had to use the computers in the lab that day because the alternative would have been walking home and doing the data analysis there.

      To recap, our home-rolled, off-the-cuff macro worked; the Excel builtin function didn't.

      I have a friend who is currently working as a quant at one of the well-known Wall Street analysts who occasionally asks me for math advice (I'm a mathematician). Recently he told me that his work invoved an Excel spreadsheet which took upwards of forty minutes to calculate. Now, perhaps this was the fault of some atrocious flaw in his code, but knowing him I doubt it. All in all I've been decidedly unimpressed with Excel. I'm sure that it's *useable* for serious work, but it certainly doesn't meet the sort of standards that professional-grade software should.

      --
      I used to read Caltizzle. I was a lot cooler than you.
    23. Re:Who is Joel? by xenocide2 · · Score: 1

      1. I am a young, enterprising computer programmer. Joel knows why he cares, but I'll share it with you since you asked. His target market for the software FogCreek writes is my type. This is why his blog / writings target me as well. Joel cares because I may buy his software later, or help him write software in the future.

      Prestigeous software is something that is hands down better than the competition, possibly even something that hasn't ever been done before. Prestigeous software is not something that could have an equally valid title of Yet Another Software Suite. The reason I say he should pursue something a little more ambititous is that it should put his word to the test. After all, his entire business is driven by prestige.

      I don't think Joel presents himself as a software engineer. Unless you confuse engineering with management. They both have lots of numbers, but engineering's goal is a product, management's goal is dollars. That doesn't mean Joel's a bad person, it's just that he doesn't write about software engineering. I don't remember reading anything about how useful or not useful UML is among the worlds greatest programmers.

      I appreciate Joel's stuff because he isn't Steve Jobs, and the world isn't Better With Apple. By this I mean that Joel has serious content and his company doesn't represent some wierd Californian lifestyle writ into a computer company. I don't appreciate that what I read is influenced by my spending habits, but every written word today is.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    24. Re:Who is Joel? by jericho4.0 · · Score: 1
      Project manager for Excel, one of the most widely used (and non-trivally, at that) apps in the world, is one line on a resume!?

      --
      "A language that doesn't affect the way you think about programming, is not worth knowing" - Alan Perlis
    25. Re:Who is Joel? by syousef · · Score: 1

      Not to belabor the point, but GET OFF YOUR SOAPBOX

      Thank you for so elegantly demonstrating my point, and that is that you seem to have a problem with listening to other people's opinions...except perhaps Joel's :-)

      --
      These posts express my own personal views, not those of my employer
    26. Re:Who is Joel? by KidSock · · Score: 1

      The only other article I read was the one about M$ loosing the API war (or something like that). I later heard that M$ decided to increase backwards compatibility of some of there stuff based on Joel's arguments. So apparently people think he's making sense. I certainly do. He's dead on AFAIC.

    27. Re:Who is Joel? by Suhas · · Score: 1

      I have never used Excel on Mac before. However, I will most certainly try and run some simulations using LINEST. I have previously been able to find bugs or poorly implemented functions in Excel on windowos, e.g. XNPV function, but never something which made me stop using excel for serious professional work.I am curious to find out if the LINEST function has a bug on the windows version of excel.I will certainly let you know what I find.

    28. Re:Who is Joel? by Krimszon · · Score: 1

      I bought his book. I don't know much about his software, but the book was very fun to read, very clever. He's a good writer, that's why people enjoy reading his articles.

    29. Re:Who is Joel? by dkf · · Score: 1

      Joel's articles have the great property of virtually always being a good read. In my experience, he's either insighfully right or wrong for reasons that you need to think hard about.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    30. Re:Who is Joel? by jcr · · Score: 1

      Joel, IIRC, was the program manager for the development of VBA.

      Ok, but has he done anything good?

      -jcr

      --
      The only title of honor that a tyrant can grant is "Enemy of the State."
    31. Re:Who is Joel? by Lonewolf666 · · Score: 1

      Being a programmer myself, I find Joels blog quite worthwile to read. Many of his ideas match my own experience, which indicates that he usually knows what he's talking about. Others are new to me, and worth thinking about. Sometimes I disagree, but that tends to on a philosophical level rather than on hard facts. So even where I think Joel is wrong, I see no reason to consider him outright incompetent.

      --
      C - the footgun of programming languages
    32. Re:Who is Joel? by 16K+Ram+Pack · · Score: 1
      I've worked as a developer/designer/PM on a number of projects and Joel explains his arguments (many of which I share) more lucidly than most people can.

      His writing about things like leaky abstraction and the piece about the Windows API becoming less relevant are very well written.

      Joel is, in my opinion a real thinker with more of a grip on the future of computing than most journalists.

    33. Re:Who is Joel? by MythMoth · · Score: 1

      Joel is an incredibly good writer. Thats why his articles keep showing up here.

      He's also very smart, runs his own company (he's his own PHB) and has worked for one of the bigger fish in a fish role, so yes - Joel has some insight into programming that everyone reading Slashdot does not.

      --
      --- These are not words: wierd, genious, rediculous
    34. Re:Who is Joel? by MythMoth · · Score: 1

      "...in a fish role" should have read "...in a big fish role" to reduce the surreality quotient of that sentence...

      --
      --- These are not words: wierd, genious, rediculous
    35. Re:Who is Joel? by kl76 · · Score: 1

      Does anyone else find it, err, surprising that in his resume, his first job after graduating with a BS was Program Manager for Excel? That's what I call fast-track :-)

    36. Re:Who is Joel? by Anonymous Coward · · Score: 0
      He's dead on AFAIC
      As Far As I C...?
    37. Re:Who is Joel? by OreoCookie · · Score: 1

      Joel is a guy who considers himself to be one of the best developers alive and yet has been working on the same bug tracking software for 5 years.

    38. Re:Who is Joel? by Anonymous Coward · · Score: 0

      But he went to Yale!
      And started his own company!
      He worked at Juno!
      Wrote 2 books!
      Was a paratrooper(!!) in the Israeli army!

      If you'd read more than two of his articles, you'd know all that. Why? Because he mentions these things ALL THE DAMN TIME. Christ. He's like Phil Greenspun, who can't go for two paragraphs without mentioning all the time he's spent at MIT.

    39. Re:Who is Joel? by sootman · · Score: 1

      He "plugs his products" with a little line that automatically gets included to the bottom of each page. He is a very smart guy with a profitable (the only thing that matters) small software company. He worked at MS in the early 90s (working on VB for Excel), then at Juno when they were a free ISP, then for his own little company, so he has a wide range of experience--everything from the 800-lb gorilla to a 2-man shop. Plus he is an excellent writer and is really into making good user interfaces. Of course, "good writing" is subjective, so visit the archive and judge for yourself.

      Here's a random sample, about why it's rarely a good idea to toss all your old code and rewrite from scratch:

      "The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they've been fixed. There's nothing wrong with it. It doesn't acquire bugs just by sitting around on your hard drive. Au contraire, baby!... it has grown little hairs and stuff on it and nobody knows why. Well, I'll tell you why: those are bug fixes.

      "One of them fixes that bug that Nancy had when she tried to install the thing on a computer that didn't have Internet Explorer. Another one fixes that bug that occurs in low memory conditions. Another one fixes that bug that occurred when the file is on a floppy disk and the user yanks out the disk in the middle. That LoadLibrary call is ugly but it makes the code work on old versions of Windows 95.

      "Each of these bugs took weeks of real-world usage before they were found. The programmer might have spent a couple of days reproducing the bug in the lab and fixing it. If it's like a lot of bugs, the fix might be one line of code, or it might even be a couple of characters, but a lot of work and time went into those two characters. When you throw away code and start from scratch, you are throwing away all that knowledge. All those collected bug fixes. Years of programming work."

      --
      Dear Slashdot: next time you want to mess with the site, add a rich-text editor for comments.
    40. Re:Who is Joel? by James_Aguilar · · Score: 1

      Joel? Joel's just this guy.

      In all seriousness, it's because he's a wise man who has worked widely and in many important positions. He very obviously knows what he is talking about. That's why articles are constantly being posted about him.

    41. Re:Who is Joel? by Anonymous Coward · · Score: 0

      I believe he was partially responsible for the original implementation of Excel, one of the few Microsoft Office programs that is actually worth a damn.

    42. Re:Who is Joel? by fool36 · · Score: 1

      His writing, though not superbly insightful, do seem to spark a spirited discussion. I'd be interested to read other/better articles that you could recommend.

  16. If you just want any engineer or programmer by WillAffleckUW · · Score: 1

    ask yourself what will happen when people die on your bridge, job site, in your hospital because the code went wonky or prescribed 999 mg of something instead of 4.5 mg ...

    And it does it with text that reads "Object reference not unlike paste error synk mast rtry input now (0,9):"

    But, hey, it's you who will be on TV that night ...

    --
    -- Tigger warning: This post may contain tiggers! --
    1. Re:If you just want any engineer or programmer by jack_csk · · Score: 1

      Despite those rather extreme situation that a programmer's work can kill, I did see the effects of sloppy coding practices. Even the smallest thing such as making assumptions in the program that may not be true all the time, or not checking for errors, could result in huge money and time losses for the users.

  17. Software application development comes down to... by tokengeekgrrl · · Score: 5, Insightful

    1. You can have it done fast.
    2. You can have it done cheap.
    3. You can have it fully functional

    Now pick 2.

    Fast and cheap = means using average and inexpensive programmers and is not fully functional

    Fast and fully functional = exceptional programmers and will cost an arm and a leg

    Cheap and fully functional = means it will take a long, long, long, long time for the average and inexpensive programmers to build it

    The timeline for the application, whether you need it tomorrow or can wait a few years, in addition to the budget determines what kind of programmers you can afford and need to hire.

      - tokengeekgrrl

  18. I agree. by Rick+and+Roll · · Score: 4, Insightful
    I agree. In the words of Leon Battista Alberti,

    No art, however minor, demands less than total dedication if you want to excel in it.

    This means that people who aren't dedicated to their profession won't properly trap errors, will always be calling functions wrong, and won't figure out what their users want. In a word, they won't excel.

    If you don't want your software to have nasty bugs, hire good programmers. If you want your software to work beautifully, hire good programmers.

    1. Re:I agree. by Anonymous Coward · · Score: 0

      If you don't want your software to have nasty bugs, hire good programmers. If you want your software to work beautifully, hire good programmers.

      Easier said than done.

    2. Re:I agree. by ednopantz · · Score: 1

      But isn't dedication different from being a great programmer? Hiring rock stars and making them do the 80% of programming that doesn't call for rock stars usually results in sloppy code written by people who can't be bothered to get excited by it. I'd rather have the the slightly underqualified but highly motivated do it. The difference is the level of dedication to the non rockstar stuff.

    3. Re:I agree. by Rick+and+Roll · · Score: 1
      I think both groups are dedicated programmers. The rockstars just might not be dedicated to your project.

      And both groups are above average. And neither quality is mutually exclusive.

      My point is that below average, you'll find people who aren't dedicated at all. And these are the people who will add the most bugs.

  19. What does 'best' REALLY mean ? by haute_sauce · · Score: 5, Informative

    It is not enough to have 'star' engineers, you MUST have dedicated and motivated individuals. Being a good programmer does not imply willingness to work towards a common goal or play well with others. In some ways I would rather have a team of mediocre programmers who were reliable and worked well together than a couple of 'stars' who had thier own agenda.

    1. Re:What does 'best' REALLY mean ? by arf_arf_arf · · Score: 1

      phb.

    2. Re:What does 'best' REALLY mean ? by Anonymous Coward · · Score: 0

      Well said.

  20. This isn't new at all... by Anonymous Coward · · Score: 0

    Boehm and Yourdon have been talking about this since at least the 70's. Steve Mcconnell mentioned it in Code Complete. The data suggest the difference between the best and the average is at least 10 times.

  21. Articles from another world... by Anonymous Coward · · Score: 1, Insightful

    Hiring Good Programmers Matters

    hahaha...

    No, wait. THis is sad.

    buhuhuuu...

    I'm a pretty good (great) programmer myself and meanwhile I believe that about ~98% of all IT businesses here (in Germany) have business models that are solely made of _consulting_.

    Here in Germany we take pride in not writing software ourselves anymore. We sell the software of other ppl from other countries while we train our social skills in never ending discussions.

    Consulting might earn some money as long as there are customers. But ppl who had not already a computer at the age of ~10 (or younger) like us are getting fewer every year. What money will consulting earn in 10 years? Consultants will be reduced to what they are: "Installation Wizards"

    That's it my friends. Stop your CS studies. COnsulting is just not worth it. Sit in front of your computer and write code with passion my german friends and some day there might come a feary from EA or something and take you with her to Vancouver/Canada where you'll get your own little box with computer and monitor.

    But please, don't believe that someone here in Germany is really looking for a good (or great) programmer anymore. Some might have a job. But are they coding? A Portal? - Bah, RSS will kill that and even T-Mobile has portal-free handies now with google.de as first page.

    I'm german and I know our IT branche has lost it's balls.

    1. Re:Articles from another world... by Anonymous Coward · · Score: 0

      WTF are you talking about and how is it in even the most tangential way related to the TFA?

    2. Re:Articles from another world... by ThaFooz · · Score: 1

      But please, don't believe that someone here in Germany is really looking for a good (or great) programmer anymore.

      Germany has never really been the center of the computing industry. I can't think of too many major players headquarted outside the Bay Area/Seattle/Boston. Not to troll, but it seems like Europeans are trying hard to remove themselves from the global market. They are far more expensive to hire than Americans, and no more skilled or educated.

      Anyways, when there are defacto standards apps in just about every niche, it should be of little suprise that the majority of IT jobs out there involve deploying and customizing said systems rather than re-inventing the wheel (ie it's easier to find a job using a hammer than a job designing one).

  22. Read Brooks by overshoot · · Score: 1
    I hire any other sort of engineer, I expect a certain level of competence and a job done to agreed standards.

    And if you hire any other sort of engineer, the standard you can demand depends on the engineer too. You're not going to be able to hire just any bloke who happens to have a BSEE and hand him the PCI-Express specification and then expect a low-BER implementation in a useful time frame.

    Experience counts. Quality work requires skilled craftsmen.

    Much more to the point, engineers are not cattle: you don't know everything you need just by counting heads in the herd.

    --
    Lacking <sarcasm> tags, /. substitutes moderation as "Troll."
  23. He forgot something by vectorian798 · · Score: 4, Funny

    Best working conditions --> Best Programmers --> Best Software --> Profit!

    WTF happened to the ??? step!

    1. Re:He forgot something by Tumbleweed · · Score: 1

      Best working conditions --> Best Programmers --> Best Software --> Profit!

      WTF happened to the ??? step!

      That's implied at the beginning - getting enough money to afford the best working conditions and best programmers. As the saying goes, it takes money to make money.

    2. Re:He forgot something by M3rk1n_Muffl3y · · Score: 1

      The underpants gnomes stole it ;)

      --
      This is not the sig you are looking for...
    3. Re:He forgot something by Sindri · · Score: 1

      He misspelled it as "Best Software". He has no idea what he wants to build.

  24. One remark I do not agree with... by Hangtime · · Score: 4, Insightful
    Internal, in-house software is rarely important enough to justify hiring rock stars. Nobody hires Dolly Parton to sing at weddings. That's why the most satisfying careers, if you're a software developer, are at actual software companies, not doing IT for some bank.

    I agree with the first part of the statement but not necessairly the second. The reason is as someone who has friends in both worlds rarely does the "software house" ever care about your outside life. If fufilled means being challenged, constantly engaged in your work, but constantly on deadline death marches, always-on fire control, and no life outside of work I guess you can call that satisfied. Have a friend who works MS. LOVES his job, but everything in his life revolves around it and the insane hours he keeps there.

    Work to Live, Don't Live to Work.

    I respect the heck out of Joel but he seems to fall in that second camp. When the tale of your life is told make sure its not about the code you cranked out but the lives and people you touched.

    1. Re:One remark I do not agree with... by Skasta · · Score: 1

      Actually, in another one of his articles, he mentions how he recommends/enforces a 40hr weekin his company due to diminishing returns from overtime.

    2. Re:One remark I do not agree with... by patio11 · · Score: 1
      I had a choice between two name software houses and working for the Japanese government in a vaguely techy position when I got out of college. Either of the two software jobs would have probably nearly doubled my salary (although I'm not sure about take-home pay -- my rent is 95% subsidized, etc, and the cost of living differential between Silicon Valley and rural Japan is so crazy on so many levels it befuddles me), but I took the job where I get home at 5:00 on the late days.

      Not that any of my coworkers do... Poor folks.

    3. Re:One remark I do not agree with... by Cyno · · Score: 1

      When the tale of your life is told make sure its not about the code you cranked out but the lives and people you touched.

      That's like saying "just have faith".. I'd rather work to accomplish something, even if its just for my own amusement, than waste my time with people who have no passion for creativity. I love my friends and family, but I have a limited amount of time here. If they're not interested in creativity I'm not going to try to manipulate them into being interested. I just hope they're happy, they're always welcome to join in all the fun..

      Its like the difference between pre-programmed and interactive entertainment. If they would rather watch TV than play a network game with me I'll accept that and quietly escape to my virtual world. After all, theirs is pre-programmed, its static, excessively repetitive, full of dogma and religion instead of science and fact. That is their preference, but it is not mine. I'll still keep informed, grabbing a snapshot of the status quo from time to time. And I'll always love them and hope, no pray, that they're making the right choice.

    4. Re:One remark I do not agree with... by Triones · · Score: 1

      I disagree.
      I think people who loves their jobs are usually happier. If you think that a job is just for money, then why bother with technical jobs anyway. There are so many other possibilities that pay better.

      Btw, you seem to think that 'working at actual software company' implies 'no life outside of work' ? This is just not true. Your single data point of 'a friend' is not statistically significant.

    5. Re:One remark I do not agree with... by microTodd · · Score: 1

      I think the "live to work" thing happens when you are a business owner. Its one thing to have a job (even if its doing something cool and fun) just to make your paycheck, but if its a company that you've poured your own sweat and blood into, then its not just a job. Its your hobby, recreation, and everything else.

      The joke goes, if you won the lottery what would you do? The idea is to determine what you REALLY want to do with your life. I suspect Joel would do the same exact thing he is doing now...run a software company.

      --
      "You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design
    6. Re:One remark I do not agree with... by ragnar · · Score: 1

      I have been a founder and part owner of a software company, albeit rather small, and these days I work in the public sector managing software projects. I too took some exception with Joel's presumption that the best software development gigs are with software companies. From my limited experiencing in both environments, I find the diversity of interests outside of a pure software company refreshing.

      --
      -- Solaris Central - http://w
    7. Re:One remark I do not agree with... by iwadasn · · Score: 1


      I don't particularly agree with even the first part of that asessment. I've worked at Microsoft, and now at several financial firms as well. The work I do for in house programs is MUCH more interesting than anything I ever did at Microsoft. The pay and hours are better, and the work is wildly more interestings. Perhaps I'm a bit biased though.

  25. Yeah, but by rsilvergun · · Score: 5, Insightful

    bad programming saves money now. Good managers save money now, and use this success when moving on to a better job. In this day and age of lateral movement and massive layoffs, where odds are you're not gonna be at that job long enough for hiring good programmers to pay off, why bother?

    --
    Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
    1. Re:Yeah, but by bobllama · · Score: 1

      That's why you find the best programmers in small startups - where the hiring manager is the founder, and expects to be around long enough to get the benefit of hiring good people.

  26. Not Always Feasible by Jose-S · · Score: 1

    What if you need to produce, say, a huge operating system, or a system requiring a million lines of code? (Open source is theoretically an answer, assuming the system is interesting enough to potential contributors.) You can't always use only good developers for a project. You need to go for the "long tail" effect.

    1. Re:Not Always Feasible by neonstz · · Score: 1

      In my experience, a team of good programmers will probably write the same system using just 250k lines.

    2. Re:Not Always Feasible by jack_csk · · Score: 1

      I remember when I took softeware enginnering, they had a saying that Microsoft assigns programmers of different qualities on different projects, based on the importance of the projects.

  27. This is my curiosity... by symbolic · · Score: 4, Insightful


    Does every "good" programmer have a degree in computer science? Are there exceptions? How can a programmer who might be "average" GET to be a "good" programmer? Can mediocre programmers be MADE into good programmers? This guy seems to be suggesting that it's ok to continue the cycle by doing NOTHING to enhance the abilities of these mediocre programmers. What about hiring a couple of good ones, and then some others who can be ACTIVELY mentored? Isn't that how some other professions work? What is medical internship all about? What about the journeyman status in the building trades? It's all about mentoring and moving people to the next level of expertise.

    1. Re:This is my curiosity... by k98sven · · Score: 1

      Does every "good" programmer have a degree in computer science?

      No, and far from everyone with a degree in CS is a good programmer. But it helps.

      Can mediocre programmers be MADE into good programmers?

      People can improve. That doesn't mean that they don't have limits to their capacity. And different people have different limits.
      (e.g. I can run a mile in five minutes. But no matter how much I train, I'm not going to run one in under four minutes. I don't have that capacity.)

      Isn't that how some other professions work? What is medical internship all about? What about the journeyman status in the building trades? It's all about mentoring and moving people to the next level of expertise.

      RTFA. The explicit point he is making here is that in programming, as in all creative professions, being 'good' is not as simple as being experienced. That's practically the definition of what talent is. This is not to say that experience isn't valuable. But it's not the whole story.

      (Continuing the analogy: A more talented runner will be able to run faster than you do on the same amount of training.)

    2. Re:This is my curiosity... by Beardo+the+Bearded · · Score: 1

      No, not every "good" programmer has a degree. A degree means nothing except that you have a degree. I say that as someone who has a degree. In my field (EE) I have to go through an additional 4 years of documented hands-on work before I'm truly able to call myself an Engineer.

      An average programmer can become a good programmer by gaining experience and making mistakes. Some people may think that they have an inherent understanding of machines; their abilities border on the psychic. That's garbage. It's experience that tells you what works, what's fast, and what's crap. No "good" programmer was born with an inherent greater ability to code better than anyone else. Did you write useful programs when you were 2 years old?

      As for the article and Apple making the iPod a huge success via design, don't forget that it also spent a huge fuckload of money marketing the bloody thing. The ads were on every channel, every hour of the day. If they did the same thing with the Mac Mini, they'd have more than 50% market share by the end of the year.

      I'm going home. It's late, I'm tired, and I'm hungry.

      --

      ---
      ECHELON is a government program to find words like bomb, jihad, plutonium, assassinate, and anarchy.
    3. Re:This is my curiosity... by symbolic · · Score: 1

      RTFA. The explicit point he is making here is that in programming, as in all creative professions, being 'good' is not as simple as being experienced. That's practically the definition of what talent is. This is not to say that experience isn't valuable. But it's not the whole story.

      I read the article, but unfortunately, your response got me no closer to an answer than the article. I realize there are talented people...but there are also people who have POTENTIAL, and who can meet that potential given the resources to do so.

      (Continuing the analogy: A more talented runner will be able to run faster than you do on the same amount of training.)

      That's my point...he makes no mention of this aspect of the process. Even though a mediocre programmer might not be able to acquire the same level of talent as one who is gifted, given access to the same resources (or at least some resources), how much BETTER could they be than they are?

    4. Re:This is my curiosity... by Trillan · · Score: 1

      No, not every good programmer has a degree. I'm not even sure it helps, to be honest. Most of the really good programmers I know have degrees in entirely unrelated fields, or none at all. Breadth is more important than depth once the ability to logically reason has been established.

      Yes, you can improve a poor programmer. However, their ability to improve is based more on their ability to learn as your ability to teach.

      In short, people are not created equal in terms of programming talent, just like they're not created equal in guitar playing, ice skating or writing.

    5. Re:This is my curiosity... by Anonymous Coward · · Score: 0

      To quote Mark Twain, "I never let my schooling get in the way of my education".

      I'm generally accepted to be a Good Programmer, and I've not only never found time to finish getting a degree, I've never been able to find time to get one of the innumerable certifications the field has to offer.

      However, when I was in school, I lived in the lab, practically memorized IBM's bookshelf (to the point of being accused of having swallowed them), printed out and pored over the source code to PrimOS, and hand-disassembled the IBM F-level FORTRAN runtime library. Nor have I mended my ways since then - I just do my learning in other places now.

      I'm not sure about making "average" programmers into "good" ones, because, if I'm any indication, I never was average, merely less knowledgable. What made me good wasn't that I suddenly acquired some magic new attitude or skillset, but that from the day I first said "Hey! this programming stuff is cool!), I pursued it with the single=minded fanaticism that is reason that I and geeks like me are often considered not quite part of the (so-called) sane human race.

    6. Re:This is my curiosity... by therodent · · Score: 1

      AC [you should get a handle],

      Good rundown.

      I ran a similar course to yours. I have lived and breathed programming since 12 years old, never got that degree, but have been getting paid to do it since age 20.

      The only good programmers I've ever worked with were fanatics from the moment they laid eyes on their first keyboard. Everyone else is still in school-somebody-teach-me mode, lumbering along.

      I should ask interview questions like "describe what you did last weekend" instead of "what's the difference between static and virtual members in c++"

    7. Re:This is my curiosity... by microTodd · · Score: 1

      Excellent point, symbolic. That's why the best interviewers don't necessarily just ask "How many years of C++ experience do you have?". They give you brain-twister-type problems that show, in general, your intelligence and enthusiasm. This is way more important than the number of years you've spent typing at the keyboard.

      Joel actually talks about this in another article (link) although he still insists on specific knowledge of programming syntax. I suppose that's just his way of minimizing the startup cost of a new hire. Pity, you'll miss out on some good people that way.

      The bext boss I ever had once said to me, "I'd rather hire a smart person and teach them to code, then teach a coder to be smart." (paraphrase). This is what you are saying in your post, and I agree completely. But my mindset does not get you a fast, hit-the-ground-running developer.

      --
      "You cannot find out which view is the right one by science in the ordinary sense." - C.S. Lewis on Intelligent Design
    8. Re:This is my curiosity... by Matthew+Weigel · · Score: 1

      Interestingly linked questions. My experience has been that good programmers have a mix of intelligence, theoretical knowledge, and practical experience; a good degree program can provide those. A lot of other things, like reading and programming, can provide them too. Further, a programmer can learn more and get better, and gain more experience and get better; it's hard to articulate whether a programmer can get 'smarter' or not.

      My own experience is that the best kind of experience involves dealing with the conflict between time, budget, and design; choosing to ignore any of them (or being able to) makes the experience less valuable in terms of how much you learn from it.

      --
      --Matthew
    9. Re:This is my curiosity... by Surt · · Score: 1

      Not every good programmer has a degree in computer science. In fact, there seems to be some evidence that a skewed portion of that population can't stand the boredom of finishing school. Unfortunately, there are plenty of programmers who didn't finish school who suck too.

      As to whether you can train someone to 'good' i'd have to say i've never seen it. You can definitely train all the way up to competent, though, and that's worth doing because there aren't ever going to be enough 'good' to go around.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    10. Re:This is my curiosity... by Man+from+Trantor · · Score: 1

      Not everyone has or needs a degree, but every good programmer *knows* computer science. If you don't know the basics, you can't be good.

      --
      <!-- /. bot -->
      while(!am) r2();
    11. Re:This is my curiosity... by nonsequitor · · Score: 1
      Does every "good" programmer have a degree in computer science?
      No, I've known some excellent programmers who have been in the industry for 30 years, though they were formally trained as musicians.
      How can a programmer who might be "average" GET to be a "good" programmer?
      When playing pool you'll never get better without opponents who are better. I think that also applies to programming, in the sense that you learn from your coworkers. However, as I noticed in school some people just don't get it. They memorized a lot and could regurgitate enough to get a degree, but they never really understood it all.

      Having worked with some very talented people since I learned to program as both an intern and participating in engineering coops, I grew a lot more than my peers who were not doing similar activities. Thats the difference between having a job when graduating and not having one. No one wants to train someone from scratch after college at college graduate wages.

  28. Not what the article is about by Space+cowboy · · Score: 1

    The point is that if your problem doesn't have the headroom to make a good programmer shine, then you don't need a good programmer. Any old joe will do. If, however, your problem is somehow "hard", then having the best pays off.

    His point, I think, is that a lot of the good software out there *does* have the headroom to make a good programmer shine, but in fact it's still "joe's" who are being hired (see the AOL argument).

    Personally I think it's because programming is a junction point between art and science - there's a lot of science and rigour in programming, but there's also elegance (in the mathematical sense) in most good solutions. Appreciation and production of elegance is a good definition of art.

    Simon

    --
    Physicists get Hadrons!
  29. That's because it's a craft, not engineering by GrahamCox · · Score: 4, Insightful

    I have always seen software "engineering" as a craft, done by craftsmen. There are too many unfixed aspects to be able to really call it engineering or a science. Of course it has elements of those, but it also has elements of art, and that's what makes it a craft. And just as there are wonderful craftsmen who can create a masterpiece of a beautiful chair from wood, there are factories turning out cheap Ikea furniture by the ton. Both might be perfectly functional in terms of parking one's botttom, but in a hundred years time no-one will be seeking out Ikea chairs in antique shops.

    Software is much the same. A true craftsmen of the art will produce code that is so tight, so functional and so spare that it is nothing short of beautiful. When was the last time you made something beautiful? We all get the warm fuzzies from time to time when we think we've done good work, but how can you really tell?

    My view is that software engineering courses are all very well (not exactly a waste of time), but they might perhaps be the wrong way to turn out good programmers. Perhaps something more like the traditional apprenticeship would serve better - mentoring by someone who is already a craftsman "well versed in the art". I guess the main drawback of this is that most good programmers are often terrible teachers, but that might reflect the lack of a tradition in the field.

    1. Re:That's because it's a craft, not engineering by JumpSuit+Boy · · Score: 2, Insightful

      It is not just programming it is software "design". Design being the inportant word. You don't have a interior designer right out of school redo your house your hire a firm that has some experienced ones and some that are new but are being mentored by the experienced ones. Your right software design/programing is not engineering.

      --
      Oh really?
    2. Re:That's because it's a craft, not engineering by Coryoth · · Score: 1

      And just as there are wonderful craftsmen who can create a masterpiece of a beautiful chair from wood, there are factories turning out cheap Ikea furniture by the ton...Software is much the same. A true craftsmen of the art will produce code that is so tight, so functional and so spare that it is nothing short of beautiful. When was the last time you made something beautiful?

      I'm not sure I actually fully follow this line of reasoning. You see Ikea hires designers, and some of them are very very good designers. Sure the aesthetic is spare, but if you like that you will probably appreciate the designs. Part of the requirements of the design is that it be possible to construct as a kitset. The bonus is that you can then get replacement partseasily and cheaply because everything is a nice replaceable component. Ikea does have some advantages.

      The main point here though is that it doesn't matter quite so much if an average craftsman or brilliant craftsman builds your chair, what matters is who designed the chair. If you design the chair well, then that design includes very specific instructions on how to build the chair. Given that sort of specified design a master craftsman and me with the right tools are not going to make an appreciably different looking chair. And I suck at carpentery. If software engineers can write good design specifications code poets aren't going to matter.

      And then there's another level where your analogy falls down. As a user of a chair I often have to look at the chair, thus the aesthetics of the chair do indeed matter to me. As a user of software I have to, well, look at and use software... I will only very rarely (and hopefuly never be required to) look at the code itself. I care if the interface has been designed well. I care that the visual presentation of the application itself is aesthetically pleasing. I will likely never notice nor care if some code poet has constructed a beautiful and elegant system.

      The most I could possibly care about in terms of code aesthetic is good structure, readability, documentation (including comments) and general maintainability. These are things that can be engineered, it just takes work. If you want to pretend that good maintainable design happens by artful felicitation and manipulation of programming instructions... well, to be honest I suspect that's going to be less maintainable, not more so.

      Jedidiah.

    3. Re:That's because it's a craft, not engineering by Diabolus777 · · Score: 1

      I am studying in an engineering university with a new "software engineering" degree.(I got in the program at the 4th year of it's existance, so they had their first promotion last year). Half our classes don't involve coding. We get told day after day that we are not to be "computer scientists". Sure, we will start coding, but we are formed to grow to become analysts, designers, and managers. I just finished my Software quality class. We had to learn about IEEE and ISO standards, and most importantly WHY they are important. As engineers, we are liable to our products. We can lose the right to exercice our profession if we deliver crap products. Standards help us focusing on the important issues. The quality standards have little to do with the code quality. They rather sya that if you did a good analysis, detailed specs, reviews, inspections and all those planification documents with a project manager behind them to make sure they're followed, code quality will be a natural result. So, take the good programmers and put them higher up in the production chain, make them leaders, designers, managers. Make them tell other people how to work. Software has a rework percentage far higher than any other engineering domains, between 20 and 40%. Not because software isnt engineering, but because it's a new discipline. We built bridges for thousands of years now, and software for only 50. That's why you dont see bridges collapse as often as software fail. Of course, these enginerring practices are new to the field and not yet popular. People still argue their validity, businesses fear the price tag. The thing is, read about the cost of quality: http://www.asq.org/topics/coq.html (this is one example, with many more on this topic) or the SEI http://www.sei.cmu.edu/managing/managing.html these things were made by and for good programmers. TFA didnt mention this one bit. Thinking that quality comes from programmers alone displays a serious lack of vision.

      --
      We should have been
      So much more by now
      Too dead inside
      To even know the guilt
    4. Re:That's because it's a craft, not engineering by GrahamCox · · Score: 1

      I fully take your point; perhaps my analogy could have been better thought out. Of course I don't just mean the code, I mean the overall design, the user interface, the aesthetics... all aspects of software design of which only a part can be engineered. Getting it all right is hard - in fact there are very few non-trivial applications out there that are not flawed in one way or another. In fact I can't name one.

      However I stick by my main point, which is that good software is a craft, and craftsmen count. Whether you apply that craftsmanship at the design stage or the coding stage is not so important as the fact that you do it, somewhere. Is the designer going to specify the exact set of objects that are required to implement a design? Their interfaces? Or is it sketched out and the details filled in by the implementor? Like Rembrandt, he might give the work of filling in much of the detail to his students, but the result is still undeniably a Rembrandt - but the student also must have great artistic ability. In reality the designer rarely goes into that much detail, whatever might be considered best practise. The user may not care about the architecture, but if it's wrong, chances are it will be noticed, in terms of awkward usability, lack of functionality, slowness, etc

      I fully agree with your last paragraph, but even with all of those things applied, the result could be an appalling mess if everyone involved is not good at what they do. Making the engineering really work requires craftsmen (and women, of course).

    5. Re:That's because it's a craft, not engineering by TrappedByMyself · · Score: 1

      I guess the main drawback of this is that most good programmers are often terrible teachers, but that might reflect the lack of a tradition in the field.

      The mentor relation ship is critical to producing great engineers. You don't have to be a good teacher to be a good mentor though. I've been both mentored and a mentor. If you have a good 'teacher' (who is not a total ass) and a good 'student' who is bright and has a work ethic, the rest will take care of itself. The teacher will give the student just enough to run with and the student will figure out the details.

      My view is that software engineering courses are all very well (not exactly a waste of time), but they might perhaps be the wrong way to turn out good programmers.

      You still need the courses. The student needs the foundation if they are going to learn anything from a mentor. The mentor needs to solidify the stuff that the student learned in the classes. If it's working, the student should be saying "Oh, I understand why that is important now" very often. The mentor shouldn't be teaching someone what a 'for' loop is. The mentor relationship is usually somewhere, like the workplace, where stuff needs to get done. If the student doesn't have a good grasp of the basic skills, they'll be useless and just a drain on the mentor's time.

      --

      Help me take back Slashdot. When did 'News for Nerds' become 'FUD and Conspiracy Theories for Extremist Nutjobs'?
    6. Re:That's because it's a craft, not engineering by BerntB · · Score: 1
      Ikea hires designers, and some of them are very very good designers. Sure the aesthetic is spare, but if you like that you will probably appreciate the designs.
      I have to comment on that.

      Complex designs hurts our eyes here in Sweden. With e.g. two lines in a house, we think it is totally overloaded. Three? We scream about ugly rococo garbage and run for water to bathe our smoking eyes.

      Once I saw a Russian orthodox church with a humongous number of small details everywhere -- and it still looked good, even beautiful! I felt like I was in a sex act with other men, animals, axes and power drills -- and enjoyed it. Shudder. :-(

      For the humorless: The above was a bit tounge in cheek. There are people in Sweden with taste, too.

      On topic:
      Regarding good/bad programmers and design/programming...

      You can get it to work with new programmers (not designers) if you put experienced guys reviewing the code of them. It quickly improves the quality of both the code and the programmers.

      It it was pure painm though. :-( And, yes, my exact work description weren't explained until I had signed a paper with a long time to quit.

      I think Joel's thesis in the article is true. But it isn't exactly news. He writes well, though. Paul Graham light, to be nasty.

      --
      Karma: Excellent (My Karma? I wish...:-( )
    7. Re:That's because it's a craft, not engineering by Geof · · Score: 1

      I agree. Engineering is more about the management of risk and uncertainty, which makes bloody good sense when you're designing a bridge or airplane, but is counterproductive for developing software. It's a management mindset: if we can manage risk, we can reduce uncertainty. One common way to reduce risk is to find a repeatable process. If the first bridge is stable, it makes sense to build another just like it. In software, this is exactly the wrong thing to do.

      First, repetition is a sign of mediocre software. If you find you're repeating yourself then you're generally doing something wrong. Reuse your code and solve new problems instead. This further implies that it's not sufficient to divide the process into design by experts and implementation by monkeys, because good software should not be repeating itself at any level.

      Second, as Spolsky points out, for shrink-wrap software only the best is good enough. With widgets, producing an identical widget at a lower price is a recipe for success. With software, it's a recipe for disaster: your competitor has already paid the up-front cost, so can't be undercut. The only way to succeed is to innovate, a process which is inherently risky.

      Mind you, these arguments apply most clearly for those who are in the business of selling software. In other situations, such as in-house and consulting work, risk may be a bigger problem and innovation relatively unimportant.

    8. Re:That's because it's a craft, not engineering by tourvil · · Score: 1
      Much of what you attribute to a craft can be attributed to engineering as well. A bridge can be visually quite artful. A traffic system can be almost beautiful in its elegance and simplicity. And engineers who graduate from an accredited school I believe often end up as an apprentice under a professional, until they themselves take the professional engineer's exam and become a licensed engineer.

      IMO, the big problem with software engineering is that it isn't enough like other engineering disciplines. Really it's just that software engineering is still a relatively new field. In time, I imagine people in general will be less tolerant of poorly written software, and the profession will stabilize to be more like the traditional engineering fields.

    9. Re:That's because it's a craft, not engineering by milimetric · · Score: 1

      Good point about software, it's really more like architecture than engineering. I think that's the most familiar and deep analogy. It's really old school to call it "engineering".

      Now, the thing about turning out good coders. I consider myself a very passionate and thorough coder. I love both web and database development. I understand the mathematical subtleties of good indexing and query optimizations and smart datastructures and good algorithms but I also love clean, beautiful design. I am still young but I aim to produce all of those things. I came from a traditional, try not to fucking fall asleep in class teaching method. I did fall asleep (a lot) and I messed up a lot but in the end I've been given a vast array of perspectives and experiences which I can BASE my education on. I think a common mistake is that your education ends when you leave college. I think that's when it begins. And in a way, you are an aprentice to everyone in your office, they all have something to teach you.

      My point is, it's not about how you learn but about how dedicated you are and how much you can make of your environment, no matter what that may be. That's essentially the quality that makes a good programmer anyway, the amplification of good things in an environment.

    10. Re:That's because it's a craft, not engineering by mclaincausey · · Score: 1
      Bruce MacLennan's superb book on programming languages has an interesting section that is attributed to someone else, but I cannot recall the source. It essentially goes thusly:

      Engineering in any form is at least in part a craft. A lot of the best engineering is aesthetically pleasing: function can follow form. There is, in any endeavor that can approach art (which certainly has to include physical and all other forms of engineering), an unquantifiable element that enters the picture from time to time, often on the most stymying problems.

      He mentions this in discussing the quality of language design, which can of course be applied to software design. There are scientific metrics for performance and even usability, but the most elegant solution might be... the most elegant solution.

      I think that software engineers who understand this and who aren't depending solely on algorithm analysis and statistics are probably the ones who transcend the mundane. Then, of course, there are those "engineers" who think a big O is a doughnut:P

      --
      (%i1) factor(777353);
      (%o1) 777353
    11. Re:That's because it's a craft, not engineering by Anonymous Coward · · Score: 0
      Your right software design/programing is not engineering.


      What about your left software?
    12. Re:That's because it's a craft, not engineering by Anonymous Coward · · Score: 0

      The last comment that you state I have run into numerous times in my career. I myself have seen way too many "Great" programmers crank out code that others believe is wondorous. When the code is actually looked at in depth, or an enhancement is requested, that is where the "Great" programmer is downgraded. If the code is not maintainable, or poorly commented, and documentation is non-existent, then the application becomes more of a "one off" type application. In other words, the application will probably have a short life span, limited use, or cater to VERY specific use.

    13. Re:That's because it's a craft, not engineering by Forbman · · Score: 1

      Much of what you attribute to a craft can be attributed to engineering as well. A bridge can be visually quite artful. A traffic system can be almost beautiful in its elegance and simplicity.

      From who's perspective, the designer's or the thousands of suckers stuck in it on their daily slog to work?

      A bridge is "beautiful" only when those ponying up the $$$ are willing to pay a little extra for aesthetic details. No way is the engineering sacrificed for aesthetics, nor for making maintenance tougher. Most highway bridges being built now are paying extra $$$ up front to minimize maintenance costs over 20 years or more. Cable-stayed bridges? Yes, they look cool, but they're also very low maintenance compared to a suspension bridge. The only reason the new Tacoma Narrows Bridge is also a suspension bridge is because it's going to sit right next to the old one (and for this area, a suspension bridge really is the only option, because otherwise Washington would have paid for something else far less elegant (it's on the website for it).

      Software engineering will be far more like electrical engineering, which is more about design, and elegance is far more a part of good design (except in medical electronics...). There is little liability in consumer electronics. Sell 1 million iPods, it's a business decision if a few have bad batteries. Screw up an implanted heart defibrillator, and people will die.

      And engineers who graduate from an accredited school I believe often end up as an apprentice under a professional, until they themselves take the professional engineer's exam and become a licensed engineer.

      Gotta justify your tuition to MIT? Anyone can take the professional engineer exams, just like you can take the Bar exam w/o having a JD first (like Frank Abagnale). (I worked with a state traffic engineer [yes, he passed the Professional Engineer exam... Hi, Ed) who's BS was in geography, not civil engineering).

      IMO, the big problem with software engineering is that it isn't enough like other engineering disciplines.

      Well, it is far more like electrical engineering than mechanical engineering, which in general is pretty dang conservative.

      Really it's just that software engineering is still a relatively new field. In time, I imagine people in general will be less tolerant of poorly written software, and the profession will stabilize to be more like the traditional engineering fields.

      No, software "engineering" is far more creative. You're given a set of parameters. You are not constrained by material limits except really for time (and thus, money). The more physical the engineering excercise, the more comprimises that must be made, and elegance will take a wayside for economics and liability. There is no "overbuild by 2x" in programming. How do you overbuild a stack? You don't, and you can't, unless you consider handling exceptions in a reasonable and meaningful way as "overbuilding" (I don't).

      Maybe you are thinking more about systems engineering: the pointyheads expect the website to take 10000 trans/sec when it's launched, and expect it to drop to about 200/sec in 5 days - so you lease the infrastructure to handle it, or get the pointyheads that it's a wise investment to keep it around for next time, and pay for it up front (gotta use up that capital budget before the FY ends!).
      Which is no different than: we anticipate that no more than 10% of the toilets will be simultaneously flushed in the Sears Tower, but better plan for 50% (or whatever the national code book says for buildings over 10 stories tall).

      This has nothing to do with time that software "engineering" has existed.

      As far as people getting tired of poorly written software, how will you (the end-user, help desk analyst, etc) be able to tell? You won't.

    14. Re:That's because it's a craft, not engineering by russotto · · Score: 1

      Software _isn't_ engineering. Certainly not in the sense civil engineering is. It is not the case that one can write a specification, make a design, analyze the design according to established principles to determine if it meets the specification, and then have lesser-skilled laborers simply crank out code, no matter how much SEI wishes you to believe this.

    15. Re:That's because it's a craft, not engineering by Anonymous Coward · · Score: 0

      You points are well taken, except for one. It's very often a mistake to take a good programmer, and try to make a manager of him or her. An architect, maybe. But the best programers I've met wouldn't take a management job. I wouldn't myself. I'm good because I love it. I simply don't want to be a manager, and leave programming.

    16. Re:That's because it's a craft, not engineering by turbidostato · · Score: 1

      "The main point here though is that it doesn't matter quite so much if an average craftsman or brilliant craftsman builds your chair, what matters is who designed the chair. If you design the chair well, then that design includes very specific instructions on how to build the chair. Given that sort of specified design a master craftsman and me with the right tools are not going to make an appreciably different looking chair."

      And that's what make software ingeneering quite a different beast. Here the DESIGN is the product.

      Ikea surely hires quite expensive designers so their chairs are high quality regarding their design requeriments about modularity, inexpensivity, formal lines, etc. Then, truly enough, no matter who mounts the chair, it is going to look just the same. But then, in the case of software, the design IS the implementation, the programmer is the chair designer, and you become... well, the cp command. And that makes the difference. Even if we consider the different roles between the software architect and the junior developer, even from the junior developer much more knowledge is expected that just "take screw 1a and put into 1A hole mounting Arm A into Leg 1" and it seems this isn't going to change in the near future (we COULD formalice COBOL so much that even machines could sput standard code -more or less like you being able to mount an Ikea chair, problem is noone uses COBOL now for new developments. Maybe in twenty years, Java and Java projects will be so well known we will have the ever-promised CASE tools The Way It Should Be, at least for "standard" projects, but hey, then nobody will be programming Java anyway so, again, you will have to depend on humans -and their talent, from the engineer to the junior devel again).

    17. Re:That's because it's a craft, not engineering by csrster · · Score: 1

      Actually you can take that view if you accept Jack Reeve's view that the source code is the detailed design and the "lesser-skiller laborer" is the compiler.

    18. Re:That's because it's a craft, not engineering by Diabolus777 · · Score: 1

      I'm not lying. The program was started by university of Texas I heard and it's officially an engineering discipline. The university I attend has been at the forefront of bringing this new curriculum in Canada. Most of my teachers sit on the IEEE boards. The Canadian order of engineers recognise our domain of expertise.

      --
      We should have been
      So much more by now
      Too dead inside
      To even know the guilt
    19. Re:That's because it's a craft, not engineering by Diabolus777 · · Score: 1

      You're absolutely right. But for those interested, the program offers a better alternative to getting a MBA or something. The curriculum merely open doors, you are the one to decide if if the path leads where you want to go.

      --
      We should have been
      So much more by now
      Too dead inside
      To even know the guilt
    20. Re:That's because it's a craft, not engineering by tourvil · · Score: 1
      From who's perspective, the designer's or the thousands of suckers stuck in it on their daily slog to work?

      Note that I said can be. Most traffic systems are simply functional, some suck badly, and a few are really well designed and can keep large volumes of traffic moving efficiently. As an older example, the difference in a divided highway system verses a normal street with stoplights can be drastic, even with the same number of lanes.

      Really, a lot of engineering is like that, including software. When something is done really well, the people using it won't really notice it.

      And for the record, I have a degree in computer engineering but my career is in software. So I'm not a professional engineer, though I have interacted with engineers and engineering students.

      My reason for posting was the OP's suggestion that there's too much engineering in software, or that there's no "art" in engineering. From my experience, calling software engineering "engineering" is somewhat of a joke, compared to the traditional engineering disciplines. Not because software development isn't like engineering, just that it's not treated as seriously. My opinion is that software could benefit from more engineering practices, not less.

    21. Re:That's because it's a craft, not engineering by Khelder · · Score: 1

      I think it's both, but at different times/phases. The early phase of creating software is like architecture, which has a clear artistic, non-engineering component. It's in this early phase that you have the most freedom to show vision, and where one or a few really talented people can make the largest impact.

      Later, during actual construction (i.e., coding), there's less flexibility and fewer choices, and it's more like workers at a construction site. Sure, you want people who know what they're doing, esp. whoever is in charge, but it's more like engineering at this point and less like craft.

      Ok, that's enough gross overgeneralization for me for now...

    22. Re:That's because it's a craft, not engineering by GileadGreene · · Score: 1

      Uh, have you ever actually done any engineering? It's as much a "craft" as software "engineering" is. Design is a fundamentally creative process. The difference between software "engineering" and "real" engineering is that real engineers have mathematical tools that allow them to analyze the designs that they have (creatively) developed, and to determine whether or not said designs will meet their requirements. Without having to go to the expense of a full-blown implementation. Such tools exist for software development too. They're just rarely used.

    23. Re:That's because it's a craft, not engineering by GileadGreene · · Score: 1

      I think most of the people arguing about whether software development is "craft" or "engineering" have no idea what real engineering actually involves. Design is a creative process. Even engineering design.

    24. Re:That's because it's a craft, not engineering by GileadGreene · · Score: 1

      Civil engineering isn't done that way either. I suggest that before you try to claim that software isn't engineering you first gain an understanding of what engineering is.

    25. Re:That's because it's a craft, not engineering by GileadGreene · · Score: 1
      They rather sya that if you did a good analysis, detailed specs, reviews, inspections and all those planification documents with a project manager behind them to make sure they're followed, code quality will be a natural result.

      The sad thing is that real world experience (in either software dev or in "real" engineering) will teach you that this attitude is completely wrongheaded. Blindly following a process will not automatically lead to good results. The people who claim that are the ones that want to mechanize and commoditize engineering. Real engineering is a creative endeavour. Yes, it helps to have some guidelines and a framework for what kind of documentation you need to produce. But more important is to understand why you are producing that documentation, and how it helps you to reach your goal (which is to produce a good product). Too many people document "because we're supposed to", and, because the don't understand why they're doing it, they do a crappy job. The document is ultimately useless, but the appropriate process box has been checked, so everything's ok.

      Real quality stems from having a commitment to producing a quality product, and creatively applying the tools available (analyses, documentation, test, etc) to ensure that your commitment is fulfilled. It doesn't come from blindly following step-by-step procedure: too often the result of that is a failed project, and a bunch of people standing around saying "it's not my fault - we followed the procedure!"

      Bottom line: the SEI talks a good line, but they are severely detached from the real world (at least based on my own real-world experiences in several different fields of engineering).

    26. Re:That's because it's a craft, not engineering by GileadGreene · · Score: 1

      Please do not talk about engineering if you do not know what it is. There are many engineering projects that involve building unprecedented systems (bridge-building for starters, since no two bridge locations are the same - the reuse of bridge design principles is more akin to code reuse, or better yet algorithm reuse). And don't be fooled by what passes for "engineering" education in most software "engineering" classes - it is emphatically not engineering. I suggest you look up some of David Parnas' writings on software engineering if you want to understand what software engineering should be if it is to deserve the name engineering.

    27. Re:That's because it's a craft, not engineering by Khelder · · Score: 1
      Design is a creative process. Even engineering design.
      I agree. However, when we don't distinguish between different phases of software construction, I think we oversimplify how hard it is to build software. So I still think it's interesting to compare software construction with construction of physical artifacts, esp. in terms of a framework for thinking about the different types of activities that happen at different phases of construction.
    28. Re:That's because it's a craft, not engineering by russotto · · Score: 1

      I hadn't heard of Jack Reeve before, but I think he's got it right in his summary of his "Letter to the Editor". The other major important thing he covers in his introduction. That's that in software, the final model IS the product.

      I've been saying some of the same things for almost as long (having been taught them the hard way -- by a run-in with both formal software proofs and MIL STD 2167A) Only instead of starting flame wars in respected journals, I've just been bitching to co-workers, walls, workstations, and anything else that would listen. I wish I'd found his essays back then.

  30. Wow! by Anonymous Coward · · Score: 0

    Talented, capable, motivated people able to out perform people just in it for the money! Slashdot post available at your local terminal!!

    Seriously, though, this has been said before by Paul Graham. This article talks about talent, as do some of his other essays

  31. And exactly what is a 'good' programmer? by Simonetta · · Score: 1, Interesting

    I simply must raise a point at the seemingly obvious statement that a 'good' programmer is so much better than an average programmer.

      Lord knows that applies to artists, look at the paintings that Botticelli did of me back when I was still alive compared to the ones done all of those other greasy creeps.

        But programming is supposed to be a science and a process. If you prepare a precision algorythm and carefully test it before coding with all manner of valid and absurd inputs, then it shouldn't matter what level of so called skill a programmer has when the coding proceeds.

        Oh, you mean a 'good programmer' is one who by lucky accident gets working code without using developing a complete algorythm first? What do you guys do, design microwave ovens for a living?

        There's no such thing as a good vs average programmer. There's only those who follow the algorythm and the lucky artists.

    Thank you,
    Simonetta Vespucci 1454-1476 Florence, EU

    1. Re:And exactly what is a 'good' programmer? by humankind · · Score: 5, Insightful

      Here's what I think is the difference between a good programmer and a bad programmer:

      1. It has nothing to do with money. You can find good quality developers at both ends of the pay spectrum. In fact, I adamantely believe that the further you get towards the high end of the pay spectrum, the worst the quality is. Too cheap is bad too, but not as bad as too expensive.

      2. A good programmer isn't limited to a narrow set of tools or technologies. He will pick the best platform and language/tools based on the application's needs. A bad programmer is one who only knows a small subset of technology and ends up forcing applications to operate within the confines of resources which limit stability, flexibility, performance and productivity.

      3. A good programmer spends a lot of time researching the project before ever writing a single line of code. A good programmer demands the client/employer be as detailed as possible regarding the specs of the application. A bad programmer is comfortable with ambiguity relating to product specs. A good programmer, in lieu of getting detailed specs from the client, will create his own outline of what the application will involve and make it finite before coding even starts and make sure the client signs off. Good programmers don't tolerate ambiguity in specs.

      4. A good programmer/sub-contractor is more likely to charge a flat rate for the development of the project than an ambiguous time-based wage (but all sub-contractors have to have provisions to deal with project creep and problem clients).

      5. Good programmers expose bugs in applications and platforms. Bad programmers create them where they didn't exist.

      6. Good programmers always exceed the client's expectations in terms of flexibility and versatility. Bad programmers tend to literally interpret feature lists and make program structure more finite than modular.

      and last but by no means least...

      7. Good programmers ALWAYS DOCUMENT THEIR CODE WELL! Bad programmers take great pride in making sure nobody can understand what they're doing.

    2. Re:And exactly what is a 'good' programmer? by Pman1 · · Score: 1

      There's no such thing as a good vs average programmer. There's only those who follow the algorythm and the lucky artists. But you are missing the bigger picture, the framework. Yes it all comes down to an algorithm of some sort, but usually software is a bunch of algorithms all tied in together, working together now.....and in the future. You have to think of the future, and how your code will adapt and respond to new algorithms. The average programmer will patch up his code until he reaches a point where nothing works and he will need to re-write it (time, money and frustrations). The good programmer will devise a beautiful (fully commented) framework that will allow for future expansion which won't need re-writes or clutter.

    3. Re:And exactly what is a 'good' programmer? by ConceptJunkie · · Score: 1

      If you prepare a precision algorythm and carefully test it before coding with all manner of valid and absurd inputs, then it shouldn't matter what level of so called skill a programmer has when the coding proceeds.

      It's real simple. A "cheap" programmer might take a month to do this. A good programmer might take a week. An exceptional programmer might do it in a day.

      There is literally that much difference in productivity there is among programmers. Just because you can eventually get the right answer doesn't make you good. Timeliness counts too.

      Even more important is flexibility to adapt to changing requirements mid-stream. A good programmer will be able to do this. A not-good programmer will have to redo much more... even if both of them can deliver a working product.

      --
      You are in a maze of twisty little passages, all alike.
    4. Re:And exactly what is a 'good' programmer? by Pman1 · · Score: 1
      Arrrggg, sorry about my first post.

      I didn't know that the enter key didn't really work for paragraphing.

      I must still be looking for the any key.

    5. Re:And exactly what is a 'good' programmer? by Anonymous+Brave+Guy · · Score: 1
      But programming is supposed to be a science and a process.

      Says who?

      An engineering approach with good processes is certainly an advantage, but there are an awful lot of successful software companies who emphasise getting good people and doing everything they can to facilitate those people doing a good job, and an awful lot of not particularly successful software companies who emphasise heavyweight procedures and doing things "properly" at the expense of getting the best out of their people.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    6. Re:And exactly what is a 'good' programmer? by e.colli · · Score: 1

      Good point.
      The article started with a good point too, but it don't prove anything with these numbers and falls apart in just another "write to get visibility marketing scheme".

      The arguments are weaks and common sense smelling like the marketing man inside Joel is dominating the programmer.

      From my teaching experience, there are a line dividing those who could be a programmer and who coudn't.

      From those who could there is an gaussian curve where the mostly are the average programmer. The few excepcional need an environment where they can be productive, like google, otherwise they could be worst in productivity than the bad programmers. When the environment is favorable, excepcional programmers do excepcional work... linus, gamma et all?

      Then my point is which like in other areas, the sucess of a project is that the most part of work is made by the invisible average and the management is a important part too and not only by the existence of brilliant minds working on it.

      Sorry my bad english.

    7. Re:And exactly what is a 'good' programmer? by Anonymous Coward · · Score: 0

      Are you trolling?

      I can only suppose that on the planet you are living programmers are given detailed pseudocode for every bit of action that is to be performed.

    8. Re:And exactly what is a 'good' programmer? by Anonymous Coward · · Score: 0

      look at the paintings that Botticelli did of me back when I was still alive

      What?

    9. Re:And exactly what is a 'good' programmer? by Anonymous Coward · · Score: 1, Informative

      Obviously this guy (modded up to 5) has not actually worked in the real world. While these are ideals, the difference between a good programmer and a bad programmer is actually none of these (I guess that's why this author is not the one cited orginally) but the ability to produce what is needed in spite of each of these points.

    10. Re:And exactly what is a 'good' programmer? by Triones · · Score: 1

      Programming is not just about 'algorithm implementation'. Usually there are many choices of algorithms and yet more choices of different implementations. Good programmer finds a good one. Average programmer finds a random one.
      Also, really good programmers design algorithms all the time.

    11. Re:And exactly what is a 'good' programmer? by TheDauthi · · Score: 1

      I agree with you, wholeheartedly, until the last. I don't ALWAYS comment my code to the extent I should. Perhaps that leaves me in the poor programmer side, but I've had people come in years later and tell me that my code was nice and maintainable. I had one look me up at a new job just to tell me how well-written a piece was. Talk about an ego boost.

    12. Re:And exactly what is a 'good' programmer? by tyme · · Score: 1
      Simonetta wrote
      But programming is supposed to be a science and a process. If you prepare a precision algorythm and carefully test it before coding with all manner of valid and absurd inputs, then it shouldn't matter what level of so called skill a programmer has when the coding proceeds.

      Oh, you mean a 'good programmer' is one who by lucky accident gets working code without using developing a complete algorythm first? What do you guys do, design microwave ovens for a living?

      There's no such thing as a good vs average programmer. There's only those who follow the algorythm and the lucky artists.


      What a load of horse shit!

      First, without a good programmer on hand, who do you think is going to design the 'precision algorithm' or the test plans? For any given problem there are countless different solutions (most of which, as the aphorism says, are simple, easy and wrong), and figuring out which solutions will be appropriate to the problem domain, and scale well as the problem evolves, is an unavoidably creative process, for which you need creative people (i.e. good programmers).

      Second, even when you have an algorithm already in hand, you need to have someone who can write the code in such a way that it can be easily understood, maintained and extended. This is also an unaviodably creative process: for any given algorithm and any given implementation language, there are, again, countless concrete implementations, each with their own advantages and handicaps. If you hire an average programmer, one without imagination or initiative, you can only hope that they will stumble, by pure luck, on the minority of implementations that don't paint you into some unfortunate corner two years down the road (requiring an astronomical investment in re-engineering the program). Hiring creative and independant people (i.e. again good programmers) will greatly increase the liklihood that the resulting programs will be well engineered.

      Anyone who doesn't understand these two simple facts is either a nitwit of a PHB or an average programmer. Engineering of any type is hard, unavoidably so, and software engineering is harder than most other disciplines. The only people who think otherwise are either not aquainted with real-world software engineering (ivory tower types) or are simply blowhard dilettantes with no real interest in the problem (often with a silver bullet to sell).

      --
      just a ghost in the machine.
    13. Re:And exactly what is a 'good' programmer? by Simonetta · · Score: 1

      It's certainly true that the commenting and code documentation is a pain and takes a lot of time. I suggest trying a speech-to-text system like the IBM ViaVoice or Dragon Naturally Speaking. Take the time to train it to your voice.
          Then, when the code is finished, start the speech program in the background. Bring up the source and describe it into the microphone as if you were trying both to impress a boss who was not technically proficient and a doctoral oral committee challenging every detail. Save the text file as, oh, 'rambling docs.txt' and save it with the code. Instant painless detailed documentation.
            It only seems like a weird concept until the first time that someone complements you on how incredibly adept you are with modern technology (and gives you a promotion and raise).

    14. Re:And exactly what is a 'good' programmer? by Simonetta · · Score: 1

      In the long run, after doing an analysis of the coding practices of many companies, the companies that emphasise heavyweight procedures (like detailed algorythms) and doing things "properly" (methodically) will do better financially than the companies that coddle to the whims of their superstar programmers. Software engineering is not Hollywood.
          There are successful software entities in both camps, of course. But the algorythmic process companies have the long term advantage. Superstar programmers appear all over the world, and it is more profitable to lay off the good programmers in expensive countries and hire superstars in low-wage countries. With PayPal, internet Skype telephone service, and free large file e-mail attachments, the writing of complex software is rapidly relocating to the cheapest countries on earth. Programmers that are willing and able to relocate to super cheap countries will have an advantage over those stuck by families and mortages in high-cost areas. When the military conscription starts again in the USA in the next few years, young American programmers will emigrating to secret private little sections of distant countries. They will bribe local authorities to ignore passport and visa violations and survive by taking programming jobs and getting paid through PayPal and international offshore bank transfers. They will form programming teams with other expats in conscription exile from various countries for mutual protection and support. Global tribes of atomized individuals who have never met, and have no idea what their fellow tribe members real identities are or where they are physically located in the world.

    15. Re:And exactly what is a 'good' programmer? by BoneFlower · · Score: 1

      Most algorithms have multiple possible implementations in any given language. The best one will depend on the task at hand, and a good programmer will determine the best one much sooner than an average programmer.

      Especially if the existing standard implementations don't meet the requirements. An average programmer might shave a couple seconds off the closest implementation using various amateur tricks. A good one will be able to shave off even more, or might know of an obscure algorithm for the given task that the average programmer has never heard of. And when it all hits the fan and there are *no* suitable algorithms out there whatsoever, the good programmer is the one you want to have on hand to create the new algorithm, or to get an algorithm designed for C to work in Visual Basic.

      Good programmers are also less likely to accidentally forget things like semicolons and periods and such, or to accidentally divide by zero... normally easy errors to fix, but when you have one popping up every 100 lines of a 100,000 line program, its going to take a while- especially if some of them slip through the compiler and hit you at runtime. And lets not even discuss more subtle errors that lead to buffer overflows...

    16. Re:And exactly what is a 'good' programmer? by Anonymous Coward · · Score: 1, Funny

      > Good programmers ALWAYS DOCUMENT THEIR CODE WELL!

      Have you checked Linux kernel source code ;)

    17. Re:And exactly what is a 'good' programmer? by king-manic · · Score: 1

      But programming is supposed to be a science and a process. If you prepare a precision algorythm and carefully test it before coding with all manner of valid and absurd inputs, then it shouldn't matter what level of so called skill a programmer has when the coding proceeds.

      Designing the algrotihm is science. Tracking down the bug that causes the program to return the wrong value once every 13-20 tries on the same dataset is an art.

      --
      "There are more things in heaven and earth, Horatio, than are dreamt of in your philosophy."
    18. Re:And exactly what is a 'good' programmer? by Anonymous Coward · · Score: 0

      Good programmers don't tolerate ambiguity in specs.

      Specs are always ambiguous. Yes, you can write down your ideal specs, and have the client sign off on them. But the moment the product ships, and people start actually using them, you'll get feedback saying "we want this to be more like that", or "why doesn't foo do bar?", and on and on. Change is the only constant in software development.

      Therefore, a good programmer to me is one who will create good designs, and good designs to me are those that are tolerant of change, that adapt easily to new requirements. Thinking actively about the design instead of just having it grow as you add features is fundamental to that, so, yes, good programmers will require full specs beforehand, if only to get an idea of the minimum requirements of the design. But the specs are not as important as the design that flows from them.

    19. Re:And exactly what is a 'good' programmer? by Bjarke+Roune · · Score: 4, Insightful

      I do not agree.

      1. It has nothing to do with money. You can find good quality developers at both ends of the pay spectrum. In fact, I adamantely believe that the further you get towards the high end of the pay spectrum, the worst the quality is. Too cheap is bad too, but not as bad as too expensive.

      Maybe you are not guaranteed good programmers by paying alot, but good programmers still cost more. I just do not see how things could be different, except if you are saying that companies are completely unable to recognize quality.

      2. A good programmer isn't limited to a narrow set of tools or technologies. He will pick the best platform and language/tools based on the application's needs. A bad programmer is one who only knows a small subset of technology and ends up forcing applications to operate within the confines of resources which limit stability, flexibility, performance and productivity.

      A good programmer will not only think of the needs of the application when choosing tools, but will also consider the context he is in. Chossing an unknown and complex tool might well be a very bad idea, even if it fits the job perfectly. I realize that you might intend this to go under "the application's needs".

      3. A good programmer spends a lot of time researching the project before ever writing a single line of code. A good programmer demands the client/employer be as detailed as possible regarding the specs of the application. A bad programmer is comfortable with ambiguity relating to product specs. A good programmer, in lieu of getting detailed specs from the client, will create his own outline of what the application will involve and make it finite before coding even starts and make sure the client signs off. Good programmers don't tolerate ambiguity in specs.

      Most projects are not of the form "implement a correct compiler for Java" or something equally well defined. In many contexts, demanding exact specifications will result in endless preparations, and as soon as the spec is "perfect", requirements will have changed. Specifications change because needs change and the knowledge of the users and developers increases as the project progresses. This is not a bad thing, it is a very good thing, even if it can be annoying to the programmer. I think eXtreme Programming gets this right: get some code out of the door as quickly as possible so people can try it out.

      4. A good programmer/sub-contractor is more likely to charge a flat rate for the development of the project than an ambiguous time-based wage (but all sub-contractors have to have provisions to deal with project creep and problem clients).

      Specifications change so a flat fee is a bad idea for everyone.

      Good programmers expose bugs in applications and platforms. Bad programmers create them where they didn't exist.

      Good programmers are human, so they make mistakes too. Of course they may do it less frequently, but they still do it.

      6. Good programmers always exceed the client's expectations in terms of flexibility and versatility. Bad programmers tend to literally interpret feature lists and make program structure more finite than modular.

      Unneded flexibility and versatility can increase code complexity, introduce bugs, make the program harder to use in the common case and lengthen development time. It is much better to get the program out there in use quickly, and then implement just those things people actually end up needing. Of course, in some cases things can be made more general "for free", and then the good programmer will try to spot it and do that. Sometimes the flexibility and versatility is really useful og necessary, and only in those caes will the good programmer make the program that way.

      7. Good programmers ALWAYS DOCUMENT THEIR CODE WELL! Bad programmers take great pride in making sure nobody can understand what they're doing.

      I might agree, depending on what yo

    20. Re:And exactly what is a 'good' programmer? by ebyrob · · Score: 1

      Actually... tons of comments and explicit companion documentation are not the only methods of providing readability. Good variable names, consistent structure, and an easy to read coding style can be just as important. So, even if sometimes you run out of time, or throw together some throw-away code without proper header comments and full docs, you're likely to maintain your typical coding habits in the mean-time because by now they just come naturally.

    21. Re:And exactly what is a 'good' programmer? by roman_mir · · Score: 1

      Ok, it doesn't have everything to do with money. But all the best programmers I know are making the top buck. This much is certain: if you are sure of your abilities you don't have to work for the lowest bidder and if you never declined work because it didn't pay enough, you don't really know your worth and if it is so, how the hell do you know what kind of a programmer you are?

      Sure, good programmer is not limited to a small set of tools but can evaluate the problem and apply the best solution. Only in this world that we live in, standartization is often what is required. And a Good programmer will not introduce tools into a firm that cannot be supported by the firm (unless (s)he is looking for job security.)

      Oh, yes, good programmers most often have to tolerate ambiguity in specifications. Are you still at school and have never done any real actual programming in the real world, where precise specifications are as scarce as good programmers? Good programmers in the desert of the real are very often forced to tolerate the abscense of specifications. They adopt to this problem.

      Very very few good programmers would work for a flat rate (see previous paragraph for the answer as to why that is.) Good programmers know that specifications are incomplete, wrong and will be changed. Good programmers are not stupid enough to accept a flat rate for something that they know for sure will be 2x to 4x the original amount of work. And if a good programmer just decides to buffer his cost 4x, he will lose the contract to a lower bidder, thus a good programmer will most often require an hourly rate but will deliver the project as soon as it is done.

      Your number 5 is irrelevant, it's too broad.

      Good programmers always exceed the client's expectations? That's not hard for anyone with half a brain, you don't need to be a good programmer to exceed specifications. You have to be good programmer to deliver what is necessary on time. But yes, a good programmer will make a program that is easy to maintain/extend. Bad programmers don't care.

      Sure, good programmers document their code well... when there is time.

    22. Re:And exactly what is a 'good' programmer? by dmccarty · · Score: 1
      In fact, I adamantely believe that the further you get towards the high end of the pay spectrum, the worst the quality is.

      I'm curious as to why you think this? Personal experience? Personal philosophy?

      --
      Have fun: Join D.N.A. (National Dyslexics Association)
    23. Re:And exactly what is a 'good' programmer? by Anonymous Coward · · Score: 0
      True.

      I am a grad student and f/t SE during the day. I work at a big company writing J2EE apps. I have had to work with senior level experts that could not grasp fundamentals. I mention something like, "I used JSF and kept business logic in SLSBs as Facade patterns as part of an overall MVC pattern." I get blank stares... the same people who put "Enterprise Java Beans" on their resume fail to understand the difference between the web container and the ejb container. They make new EJBs and cant figure out why they dont work when they never add deployment descriptors. I had an elaborate XML/reflection based email messaging system and they wanted to throw it out because they said reflection was a security risk (they didn't understand it).

      Ok, I came into this industry doe-eyed. I assumed that once I got out of college (under grad), the clueless types who rode my coat tails in architecture (for example) would be weeded out.

      I was a fool. Not only are there more clueless people in the industry than I would care to believe, but most of them make 3 times what I do as a low level SE. Are you kidding me? These guys build horrible systems with SQL embedded right in the GUI code. I mention things like IEEE QM standards and reducing maintenance costs and I get laughed at.

      I have found that I can sling code with good design, document it, and get it out the door ten times faster than these clods. No joke, this month a "Senior" level developer took ten days to COPY some of my code for something and did not understand why it didn't work (it was no where near what he needed).

      My only point is that the cream does not always rise. I see people who are the worst developers ever get promotions because they joined a Morale team that plans picnics. I tell my managers when their proposals are incorrect because they failed to understand something about software (or one of the so-called experts did not understand it); but the truth is, you can be brilliant and ignored. That is life. Half the time you might have to make up for the ignorance of your superiors and fix problems because they claimed something that was not true in an effort to put shine on their gold stars.

    24. Re:And exactly what is a 'good' programmer? by leabre · · Score: 1

      I'll have to dissagree with your point #7. Some of the best programmers I've worked with, and as of late, it would appear, that now I'm one of those best that others have worked with...

      I don't document the code. My coding style, is quite obvious what its doing. I don't comment the headers of each code file or method or parameter, as much of it is obvious, and I'm not just saying me, I'm saying even some of the best people I've worked with. I haven't worked with Martin Fowler or you or Stroustrup, so I'm not familiar with their style, only those I've worked with).

      What I've notice these people do, and thus, myself as well, is to comment where comments are necessary... for example, to descibe a business process, or at least link to an externally documented business process, or a complicated workflow that won't necessarily make sense why things are the way they are.

      Overall, a good developer/coder/programmer will comment, but I think a better programmer will know when to comment and where to put the comments.

      Our application (web-based insurance application, I do the accounting back/middle tiers) isn't documented at all... mostly, except in some are highly complex workflows/processes, yet no one on the team (or even new employees) have any problem working with it or understanding what is happening (except the more Jr. mid. level people).

      Anyway... just thought I'd chime in.

      I used to comment as is recommended and hyped to be the sign of a good programmer. But I've learned, saving time and effort means to comment where it makes sense. Nonetheless, it could also be the types of software I've worked on. I have never worked on a flight control system or space shuttle launch control system or hospotial heart monitoring software.

      Thanks,
      Leabre

    25. Re:And exactly what is a 'good' programmer? by twinchang · · Score: 1

      A good programmer means a GOOD programmer, a bad programmer means a BAD programmer. There's nothing related to the 'real world'.

      He just pointed out exactly what a good programmer should do and what should avoid to become a bad programmer.

      It's interesting to see that people often use 'Welcome to the Real World' tone when they actually creating more troubles for the others with their own incompetence, ignorance and laziness.

      We are all in Real World, like it or not.

    26. Re:And exactly what is a 'good' programmer? by humankind · · Score: 1

      Personal experience.

    27. Re:And exactly what is a 'good' programmer? by humankind · · Score: 2, Informative

      Obviously you disagree.

      I could respond to your arguments tit-for-tat, but I don't really think it's necessary. If I hired you, I suspect I'd end up having to re-do a lot of what you did, because you seem to be very good at coming up with excuses, which is what a good programmer doesn't do. Anyone who thinks that not documenting code is practical in any environment is not someone I'd respect as a "good programmer". Obviously, your milage does vary. Talk to me when you've developed commercial software that has sold millions of copies and recieved numerous honors and awards. I know what that's like.

    28. Re:And exactly what is a 'good' programmer? by humankind · · Score: 1

      Obviously this guy (modded up to 5) has not actually worked in the real world.

      What "real world" are you talking about?

      I've written software (SOLO) that has recieved "Editor's Choice" in PC Magazine, as well as the highest honors in other publications in the industry. Have you? What "real world" are YOU talking about?

      I've sold over one million copies of commercial software I've written. Not only that, I've built a software publishing company from the ground up, handling not only programming, but marketing, tech support and all other aspects. I've also developed systems that run public utilities in many states in the nation; systems for the DOD and UN and a few years back I designed an online system that sold for $7M to one of the Internet's largest operations.

      What real world am I not part of?

    29. Re:And exactly what is a 'good' programmer? by humankind · · Score: 1

      It's funny what people call the "real world."

      All I know if my world. I turned a hobby of computer programming into a vocation.

      I understand that you, probably the "new generation" of programmers don't understand how it used to be, and don't realize how much power you actually have. You work in cubicles, and you constantly have to conform to corporate ideals. To me, programming is art, and if you pursue it without compromise you can be rewarded far beyond what you think are your limitations.

      The world is what you make of it.

    30. Re:And exactly what is a 'good' programmer? by Anonymous Coward · · Score: 0

      >My only point is that the cream does not always rise.

      I've been there too.

        However, if you truly are a smart person / good developer, you'll soon realize the injustice of this and do what you can to work at a place that does appreciate you.

      Of course, you do have to live with the stigma of some people not considering you to be a "good developer" because you haven't risen yet. There is some truth in this because you may have made a suboptimal career decision (although there may be other reasons you are working there and you do have somewhat of an excuse for not having experienced the "real world".)

      But so long as you refactor (as your situation permits) and get the most optimal job that lets you use your talents, all will be right again.

    31. Re:And exactly what is a 'good' programmer? by Lips · · Score: 1

      Interesting how you should say this. Way back in '00 this superb article was posted: http://slashdot.org/articles/00/05/19/050258.shtml . Basically, "This article in Fast Company talks about the process the Shuttle Group uses to make software."

      The answer is, it's the process. The group's most important creation is not the perfect software they write -- it's the process they invented that writes the perfect software.

      Of course, this is a special case. This software must work, there is no other choice.

    32. Re:And exactly what is a 'good' programmer? by Bjarke+Roune · · Score: 1

      If I hired you, I suspect I'd end up having to re-do a lot of what you did, because you seem to be very good at coming up with excuses, which is what a good programmer doesn't do.

      Ad hominem (attacking the man instead of the argument).

      Anyone who thinks that not documenting code is practical in any environment is not someone I'd respect as a "good programmer".

      Ad hominem and strawman (attacking a different argument than the one actually offered). I did not say not documenting is practical, I said that one special type of documentation is often superior, and that sometimes conventional documentation is necessary too.

      Talk to me when you've developed commercial software that has sold millions of copies and recieved numerous honors and awards. I know what that's like.

      This is appeal to authority and also ad hominem. Also, even if it is true that you've been involved with making such a product, that does not imply that any specific one of your opinions about a good programmer are true.

  32. In other news, water is wet. by Anonymous Coward · · Score: 0


    Sheesh.

  33. Reminds me of Gilderoy Lockhart... by mpapet · · Score: 1

    Singing the praises of his beliefs based on reasonable logic and the apparent success of his small company.

    I don't think his vision would really work if he had to appease public shareholders and had thousands or even hundreds of people working for him.

    The guy definitely has insightful things to say sometimes. The self-congratulatory way he's done it this time is a little over the top.

    --
    http://www.maxineudall.com/2010/02/should-economists-be-sued-for-malpractice.html
  34. The full saying is... by DogDude · · Score: 4, Insightful

    You can have your application built cheaply, quickly, or well. Pick two.

    --
    I don't respond to AC's.
    1. Re:The full saying is... by swimmar132 · · Score: 1

      How can I have my application built cheaply and well (assuming that it will be slow)?

      I assume that I'm paying per hour.

    2. Re:The full saying is... by crazyphilman · · Score: 1

      Hire a small number of very good programmers, give them a reasonable, flexible deadline, and let them really pull out all the stops.

      --
      Farewell! It's been a fine buncha years!
    3. Re:The full saying is... by GlassHeart · · Score: 1

      Most of the good free software projects are cheap and of high quality. The ones that have lots of features added quickly tend to have full-time employees of some company working on them.

    4. Re:The full saying is... by DogDude · · Score: 3, Interesting

      You pay one or several good developers to develop it in their extra time. They'll charge significantly less since you won't have insane deadlines. And you don't have to pay by the hour. You can say I want these features for this price, with a deadline of xx months out. Or, you pay people to work on various smaller parts of the whole as you have the money.

      --
      I don't respond to AC's.
    5. Re:The full saying is... by pyite · · Score: 1

      Good catch. For those of you writing these "two out of three" things, here's your guideline: You must pick linearly independent attributes.

      --

      "Nature doesn't care how smart you are. You can still be wrong." - Richard Feynman

    6. Re:The full saying is... by d99-sbr · · Score: 1

      Homer: "Do you want the job done right, or do you want it done fast?"
      Marge: "Well, like all americans, fast, but..."

    7. Re:The full saying is... by gglaze · · Score: 1

      How can I have my application built cheaply and well?


      Out-source it to Bangalore!


      *ducks*

    8. Re:The full saying is... by fbjon · · Score: 1
      Ok, let me try!

      "You can have it cheap, low-quality, or inexpensive. Pick two."

      Do I get full points?

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    9. Re:The full saying is... by justforaday · · Score: 1

      I wonder where the shmuck my company hired to do our website fits in there. We don't even get to pick a single one of those three...

      --
      I'll turn into a supernova and burn up everything. Well I'll turn into a black little hole and you'll turn into string.
    10. Re:The full saying is... by Retric · · Score: 1

      I have seen vary High Quality Software written by one person. It took a few years to get out but as he never needed to have "design" meetings or talk about how he was changing things so it was vary efferent but a little slow.

      Smaller teams are always more efficient but under say 7 - 12 people they tend to take a longer time to get things done.

      Some products like windows are never going to get done if one person works on them but smaller teams still tend to be cheaper per feature. So that's Cost VS. Speed issue.

      You can skip over some testing and get a Speed and Cost Vs Quality issue.

      You can even get several teams and have them work on the same project. Then pick the best one and get Cost vs. Speed and Quality.

      Now if you combine the above you can exchange some of Speed, Quality, or Cost to get more of the others.

  35. Let me guess... by nobodyman · · Score: 2, Insightful

    ...You aren't in management, are you?

    Seriously though, it is very non-obvious to a good deal of IT Managers. When you perceive software development costs as ultimately a burn on revenue, their conclusion is that you need to minimize said costs (much in the same way that you would seek the lowest-priced landscaping or office-cleaning staff).

    1. Re:Let me guess... by Anonymous Coward · · Score: 0

      Cheapest office-cleaning staff? We call 'em burglars around here.

    2. Re:Let me guess... by Anonymous Coward · · Score: 0

      Burglars if you're lucky.

      Their rapid turnover provides your competitors with an easy way into your offices.

  36. Dissing Garfield and praising Seinfeld? wtf? by Anonymous Coward · · Score: 0

    That guy is a blasphemer (or someone with a very low IQ, you decide). This sort of crap should never be posted on Slashdot.

  37. my own experiences by slashdotnickname · · Score: 3, Interesting

    I work in a large group of programmers of varying ages and backgrounds. I believe you can categorize programmers into 2 main groups.

    The first, and the majority at our company, are school trained programmers. These are people whose main experience with coding has been either class related (where the emphasis is usually on theoretical applications) or employement related (where the emphasis is usually along the lines of "just get it done").

    The second group of programmers, which I'm in, is the hobbyist turned professional. We are people that began programming for fun, and often program on weekends on side-projects. Data structures and interface definitions become part of our regular vocabulary, and it's often hard to talk to programmers in the first group regarding projects.

    Also, from my own experiences at work, I can say that it's the smaller second group of programmers that end up carrying most of a software project, both in code output and internal design. Although the first group of programmers tend to do a better job at testing.

    1. Re:my own experiences by GlassHeart · · Score: 3, Interesting

      I'm a hobbying programmer who later got a lot of formal schooling. What does that make me?

    2. Re:my own experiences by Trifthen · · Score: 1

      And this is the problem with anecdotal evidence. I've been coding since I was nine, and now almost 20 years later, after college and learning the proper way to write code, I'm damn good at my job. There are others where I work without such background, and one dragged a project along for two years in various states of buggy semi-functionality.

      Often we would rewrite parts of his code while he was on vacation, just to simplify, debug, and optimize major components. I've never read anything by Joel, but his observations are spot on; a bad programmer really can't produce anything very well, and part of the proof that a mediocre coder with years of experience is still just a mediocre coder. I only wish there was some way to tell this to the people who write help-wanted ads. ;)

      --
      Read: Rabbit Rue - Free serial nove
    3. Re:my own experiences by Trifthen · · Score: 1

      A sucker. ;)

      --
      Read: Rabbit Rue - Free serial nove
    4. Re:my own experiences by Anonymous Coward · · Score: 0

      Also, from my own experiences at work, I can say that it's the smaller second group of programmers that end up carrying most of a software project, both in code output and internal design. Although the first group of programmers tend to do a better job at testing.

      And that is exactly why I kick so much ass. See, I'm a hobbiest (started programming at 10) that has a CS degree.

      So I get all the benefits of both your groups. I am loose, fast, and artistic when appropriate and I have a deep understanding of the science behind it all.

      BTW, I'm a damn good tester. I am my own code's worst enemy. I want my stuff bullitproof. I hate programmers that don't test for crap (ie. most of them!). It seems most programmers are afraid of breaking their code. Pfffft, if you can't jump in and start smashing the hell out of it then it isn't good code.

    5. Re:my own experiences by TapeCutter · · Score: 4, Funny

      Employed.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    6. Re:my own experiences by Doco · · Score: 1

      My experience is very different. Maybe it's because I work mostly with embedded systems. There most programmers are either CS/CE people who have school training, or they are EE people who did the 2 software course that they had to in school.

      I found that the "EE" programmers - that is the ones without much formal programming training can knock out a simple function really well - but can not build a bigger system to save their soul. The CE/CS programmers on the other hand get the big picture of the software realm and use data structures in a sensible manner, break things down into sensible functions or objects, etc. To the non-trained programmer an object is often just a container for a bunch of loosely related functions.

      Now - that being said it doesn't always break down along the lines of what their formal training was, but it often does - even if their schooling was 20 years ago.

      Now - to rip on some of the CS people - I've had new CS grads that didn't understand that hex was just another way of writing a number - they thought it was another data type. I've also run into CS grad students that didn't understand bit-wise operators. < sigh >

    7. Re:my own experiences by Lendrick · · Score: 1

      You'd be a hobbyist turned professional, then. Classes are neccesary for two reasons:

        - Proving to your employer on paper that you know what you're doing, and
        - Filling in all the little gaps in your knowledge that come from being self-taught.

      That said, the vast bulk of your knowledge and experience come from your hobby, not your schooling. Classes may force you to push your boundaries a bit, but in the grand scheme of things, classes are short, and most of your growth as a programmer will come from choosing your own direction and pushing your own boundaries.

    8. Re:my own experiences by syousef · · Score: 1

      How about the hobby programmers that went to school and trained as well? Someone who is both interested in computers, and in doing what it takes to get the job done.

      Also, I don't know if its a good thing for programmers to "carry the project". How about getting the whole team to carry it. It's called team-work after all! (Those who "carry the project" tend to burn out quickly and have very little else in their lives).

      --
      These posts express my own personal views, not those of my employer
    9. Re:my own experiences by GlassHeart · · Score: 1
      The question was actually rhetorical, because I have an allergy to "there are two types of people" statements.

      But to answer your second point, school proved to have filled in huge gaps in my knowledge. Hobbyists, unsurprisingly, tend to dig much deeper into what they like than most schooling ever will, but it's also easy to ignore all else. Formal schooling gave me a more complete picture of what I knew well and what I was missing.

  38. No it doesn't by Anonymous Coward · · Score: 0

    Given the fact that consumers are very well-trained to accept crap software and pay through the nose for it, what's the business case for the care & feeding of good programmers when mediocre programmers are so cheap and readily available? Unlike most physical goods it's difficult to judge the inherent quality of software merely from interacting with it as a user (especially when you're used to computers crashing once in a while anyhow). So why should a corporation pay megabucks for a Joel Spolsky (who no doubt is an excellent programmer) when Indians, East Europeans, or amateur Americans are available for a fraction of the cost? The code may be suboptimal but in market terms it's simply irrelevant.

  39. Re:What does 'best'...mean ?topgun or cannonfodder by Anonymous Coward · · Score: 0

    'Groups' and 'Teams' may have their place, but they are not the fundamental unit of accomplishment. When allowed to proliferate unchecked, they tend to expand to the limit of available resources and then tend to stagnate. - HackNeed

    Groupthinkers are great for implementation, if that is what you need, but if you want to do somthing that needs a bit of that which has not been done before, shoot for a Star! -IMNSHO

  40. Hiring Anybody by Anonymous Coward · · Score: 1, Insightful

    I just came back from the Santa Clara career fair. When you are looking for job, you can sorta guess what is going on in the market in general, but unless you meet your fellow job seekers and the corporate recruiters, you don't realize how much you are underestimating.

    From a corporate recruiters point of view, you have an avalanche of resumes of people with all amounts of relevant experience. Standing in line, I checked out the resume of the guy in front of me. I realized that if he and I were to sit down to argue as to which one of is most qualified for this job, we wouldn't be able to convince ourselves.

    Every job listing states "excellent this, excellent that". Every candidate claims they are bright and their degree and experience is highly relevant. One person I talked to told me that he found his last job after his 40th application.

    The entire process is a huge blur. The only thing that is happening is HR spinning the wheel until the candidate's acronyms are a 1-to-1 match with the job description. And they can do that. There are a ton of candidates.

    A few of the HR people I talked to thought I would be a possible match for a certain kind of job just because of an acronym I mentioned. I didn't want to tell him he was out of his mind (if he could read my resume and understand it, he'd realize that I'd rather die than take that position he mentioned). I realize that they cannot read, nor do they understand what is written, but they have to solve this problem.

    Nobody (except the very few) care about how good you are. "Good" means "risky" sometimes. They'd rather take the safe bet and sleep comfortably.

  41. Sounds like special pleading by BlightThePower · · Score: 1

    Lots of tasks are complicated and complex. Electrical engineering (for example) could hardly be said to be straightforward. Indeed, thats why its called "Engineering"; it as about process as much as doing things with electricity. There is a reason why architects and structural/civil engineers don't put up buildings that fall back down again immediately after. Not every architect/struct./civ. engineer is made incredibly experienced either, but somehow they don't construct tottering powers of shit and then shrug. I think CE has to ask itself why it isn't delivering consistent levels of quality. Its a fundamental question and shouldn't be ducked through handwaving.

    --
    Plays violent online games as: Nerfherder76
    1. Re:Sounds like special pleading by Anonymous Coward · · Score: 0

      There are significant differences between electrical/mechanical engineering and software engineering. One major difference is the rapidly changing environment - both in capabilities and in requirements.

      In computing, the rapid advancement of cpu/system design yields faster machines every year. These faster machines result in an ever changing set of 'appropriate' solutions to existing problems, as well as generating new requirements that would not be appropriate without the additional speed/capacity.

      While electrical/mechanical engineering advances also occur, there is a problem with practical application of those advances - it's just too expensive to tear down 5-year-old buildings just to re-build them with the latest and greatest advanced materials, just as it's too expensive to rip out the power-grid wiring every couple of years to take advantage of new technologies/techniques, or re-deploy a new set of chips.

      As a consequence of this rapid development of the underlying technolgies, and, most importantly, the speed with which they can be deployed in software, it isn't practical to develop 'standards' to too deep a level, since those 'standards' will become inappropriate very quickly. Some standards can, do, and should exist for software, but not to the same level as they do in electrical/mechanical environments.

    2. Re:Sounds like special pleading by Sax+Maniac · · Score: 1

      So why do cordless phones fall apart after a year or two, then? Those are built by electrical and industrial... uh, engineers?

      Because you paid $30 for it, not $100 million.

      The things that structural and civil engineers have different price tags and longevity requirements.

      --
      I can explanate how to administrate your network. You must configurate and segmentate it, so it can computate.
  42. Re:Software application development comes down to. by interiot · · Score: 1
    Practical engineering of any kind (EE, RF, ...) always involves coming up with the best design you can given a a range of constraints (which include time, money, staff, rate of change of constraints, etc).

    Good engineers are ones who can come up with the best product possible, given those constraints.

    Joel is saying that only the best products really matter, and so only the best engineers really matter.

  43. Good points, but by nobodyman · · Score: 1

    All good points, but the data in Joel's aritcle shows that great programmers aren't necessarily faster than bad programmers (or vice versa). Joel was unable to find a meaningful correlation between completion times and grades.

    That said, imho the main point is that good programmers produce better software. Given infinite time and/or money, Derek Smart could still *never* produce software as good as John Romero.

  44. Dumb summary by star_aas · · Score: 1

    My first reaction was....well duh, then I read the article and it's pretty decent.

  45. And they wont sell CD's of company source either. by WarmNoodles · · Score: 1

    One recent concern at least in Banking is the use of cheap programmers.

    The consensus after analysis was as follows;

    1) Cheap Indian programmers are more likely have access to over 65% of the corporations entire on-line source code.

    2) They Usually come to the US for training / assimilation and return to India with a few CD's of the complete source library.

    3) CD's have no access or audit controls, no expiration date are not signed, dated or checked out.

    4) A small suitcase of 5,000-10,000 cash can buy all the CD's from a collection of Indian programmers no questions asked with ZERO hesitation or reporting on the part of the programmers tested.

    You get what you pay for.

    Some one recently said, "Their will be no Digital Pearl Harbor",

    I say you got another thing coming suxxor.

    Recommendations:
    Suggest your local news paper reporter take several small suitcases of cash to India and Buy most of the financial sectors source code.

  46. Re:Software application development comes down to. by Morosoph · · Score: 1
    Cheap and fully functional = means it will take a long, long, long, long time for the average and inexpensive programmers to build it
    Forgetfulness (so that no programmer grasps the entire project), and introduction of new bugs whilst fixing others, is why this option isn't even on the menu.
  47. The Google strategy by restive · · Score: 3, Insightful

    Say what you like about this being dribble, but this is exactly what Google is doing, betting the farm on the long-term value of the cream of the crop.

    1. Re:The Google strategy by Anonymous Coward · · Score: 0

      and just look at what Google has turned out. Damn fine software (simple, elegant, useful, stable). Their betas are more stable and usable than most products that have been out for ages.


      --
      Good programmers == good software.

    2. Re:The Google strategy by TheLink · · Score: 1

      Didn't help Xerox or a few others that much.

      Even if tons of top scientists are in the US, it doesn't automatically mean you'd get a successful Manhattan or Apollo project.

      You could end up with the Space Shuttle for instance. While the shuttle kinda works, it's not really exploring any new frontiers. And not what I would call a success at all.

      The talent has to be managed and channelled. Not everyone can do that. Steve Jobs seems to be quite good at it (often requiring stuff to be "insanely great" AND more importantly being able to tell the difference in most cases).

      --
    3. Re:The Google strategy by patio11 · · Score: 2, Funny

      And now that they had the IPO, they can bet other people's farms, too! :)

    4. Re:The Google strategy by ytpete · · Score: 1
      The strategy worked great at Xerox. They pioneered half of what is cool in modern computing. Ok, I'm exaggerating, but: object-oriented programming, the mouse, WYSIWYG, Ethernet, bitmapped graphics... it's a long list.

      But you're right in that it didn't help them much. They wound up with awesome stuff to sell, they just didn't sell it very well (or at all). Whether you consider this a success or not is a little more subjective...

    5. Re:The Google strategy by Anonymous Coward · · Score: 0

      You should read one of Joel's other articles on this subject, where he realises that he isn't hiring the best programmers at all, only the best ones who happen to be in the market for a new job at any one time. Now, Google can pull more into the equation because "Hey! Google! Shiny!" (I have to say I've never understood this myself, but hey), but they still don't hire "the cream of the crop" just the cream of the people who are willing to work for them. Just like every other company out there.

  48. Re:Software application development comes down to. by Anonymous Coward · · Score: 0

    Ummm, that ancient platitude is simple enough that it doesn't require elaborate explanation of all three combinations. That's why it's an ancient platitude.

  49. Amen by Anonymous Coward · · Score: 0

    Mr. Joel may write well, but in order to preach one must have a well-recognized professional experience.

    I don't see this experience, therefore I don't give a flying f*ck about his insights. A mere ability to preach does not mean anyone will listen.

  50. The unstated assumption... by alexhmit01 · · Score: 1

    The unstated assumption here is that good programmers cost substantially more then average programmers. Salary TENDS to coincide with experience and business skills (negotiating raises, etc.). While skill no doubt plays a role, he is assuming a 1:1 correlation between salary and skill. While I have no doubt that the correlation exceeds 0, it sure as hell ain't 1.

    You want the best programmers, no question. A great programmer is EASILY 4 times as efficient as a mediocre one (as his numbers suggest), and isn't 4 times as expensive (the unstated part).

    However, you can EASILY spend more money on mediocre programmers. Talented programmers seem to want fun environments (which is the premise he started with, then dropped) and a chance to do cool things.

    A friend was working at a company building tools for IBM DB2... he HATED it because it was boring. Most of the programmers were older, had families, and were there from 9-5 working on properly documented and tested code.

    They didn't need flashy brilliance, it wasn't a consumer app, they needed correctness, which requires different skills.

    Interestingly, his own article contradicts a core claim: software is winner-take-all and you need the best. In reality, most markets are dominated by one player (network effects plus marginal cost = 0 implies a single major player), there are MANY viable niche companies, LIKE HIS, that earn livings and reasonable returns to investors WITHOUT dominating the overall industry.

    Fun read, no useful advice, total crap.

    Alex

    1. Re:The unstated assumption... by turbidostato · · Score: 1

      "You want the best programmers, no question. A great programmer is EASILY 4 times as efficient as a mediocre one (as his numbers suggest), and isn't 4 times as expensive (the unstated part)."

      And then, there is another unstated part (on your side). Currently programming is more an art than a technology (while most of the dislike it), and when you go on that kind of things, number cannot superseed quality. Just the same you can't have a Michelangelo's Moses just hiring ten average sculptors instead of one true Michelangelo, you can't get the amazing results one guru can offer you changing him with a dozen code monkeys.

      Well, Michelangelo's example can be a bit of overrating. Now, you won't hire a fresh-from-the-academy pilot to test the last Grumman fighter no matter how cheap he is since you know that, no matter how well he knows the theory, you need a seasoned veteran for experimental flights. But then, any software project is an experimental project since you never build exactly the same software twice (quite extrange for an engineering: you can build twice the same building, even exactly -and even then you need a proper architect to tell you that indeed it is feasible to use the same plans, but you won't build the same program twice -you would copy it instead).

      Just to tell it shortly: in order to produce software you are better using talent, and talent can't be subtituted with masses.

    2. Re:The unstated assumption... by erki · · Score: 1

      Currently programming is more an art than a technology

      Programming is NOT art, no matter how much you might like to consider yourself an artist, or whatever Paul Graham might think. It's a craft. Like carpentry. Or blacksmithing. True, a smith can and sometimes does create art. But mostly, smithing consists of making mundane things. Like plows. Door hinges. Chains.

      --
      AhForgetIt tendency rated 39%
    3. Re:The unstated assumption... by fbjon · · Score: 1

      Or swords.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    4. Re:The unstated assumption... by turbidostato · · Score: 1

      "Programming is NOT art [...] It's a craft."

      True enough: that's the word I was looking for (I'm sorry, I'm not English spoken and sometimes my vocabulary fails me).

      Now, once this has been stated, my post thesis remains the same: since you need your developer's craftmanship, it is clear there should be (at least) some times when you can't change one expert with ten rookies, just the same than with any other craftmanship.

  51. Ack!! Shoulda previewed! by nobodyman · · Score: 1

    Damnit, I meant John Carmack. (why do I always get those two reversed?) I think this error sends me to geek hell.

    must drill into memory...
    Carmack==talent
    Romero==hotty ex-girlfriend

    1. Re:Ack!! Shoulda previewed! by The_Wilschon · · Score: 1

      OT, but...
      I find it very odd that the only person I've ever met who had the last name Carmack also had the first name John, but wasn't the programming talent you speak of. He plays the trumpet and sings quite well, but he does not program.

      Carmack is not a particularly common name, AFAIK. Every time I see John Carmack mentioned, it kinda throws me for a loop.

      --
      SIGSEGV caught, terminating

      wait... not that kind of sig.
    2. Re:Ack!! Shoulda previewed! by Anonymous Coward · · Score: 0

      > Carmack is not a particularly common name, AFAIK.
      > Every time I see John Carmack mentioned, it kinda throws me for a loop.

      What kind of a loop? For, while, or infinite?

      And what about when I mention the name 'Cody Carmack'? :)

  52. Diss!!! by Anonymous Coward · · Score: 0
    The assignments are very serious for a college class: implement a Unix command-line shell, implement a ZLW file compressor, etc.
    ZLW?! Lempel, Joel's dissin' ya!
  53. Re:Software application development comes down to. by WindozeSux · · Score: 1

    1. You can have it done fast.
    2. You can have it done cheap.
    3. You can have it fully functional
    And:
    4. You can have done slowly.
    5. You can have it buggy.


    4 and 5 = MICRO$OFT WINDOWS
    1 thru 3 and 5 = MICRO$OFT stuff again!

    I can't believe that I was the first to comment about Micro$oft. Come on people!

    --
    Fallout 3 will suck.
  54. Rings True, But... by taoboy · · Score: 1

    ...it's practically impossible to economically justify fleshing out the staff of a really large project exclusively with Lance Armstrongs. On the large (>1M SLOC) project for which I work, we use them in pivotal roles, laying out software organization, building templates for others to use, writing the really hard parts and such.

    Not only that, but diffusing the leadership of a project amongst a large number of superstars may bog down the project more completely than trying to coax productivity out of motivated but less-capable minions.

    YMMV, of course...

    1. Re:Rings True, But... by Anne+Thwacks · · Score: 1

      If its anything like the last project I worked on with >1M SLOC, hiring 10 really good programmers instead of 5 good and 50 average ones would have done the job with 640k of SLOC and 10% of the computing power. And 1% of the bugs.

      --
      Sent from my ASR33 using ASCII
  55. I Couldn't Agree More by eno2001 · · Score: 1

    Based on the experiences I've had with totally shitty programming from various vendors the past few years, I think the problem is that the wrong people are coding. This is the result of various efforts to make programming "easy". By simplifying the process of coding, they've removed the dilligence of code inspection. In essence coders have been gelded (yes, had their balls removed) by these "easy to code" languages and IDEs. Show me a coder who can whip up C code in vi or with cat, and I'll show you a coder who is likely to have a handle on what their code is really doing. All this drag-and-drop shit is only doing one thing: it's dragging and dropping the quality of software into the latrine. People who "code" in Flash drive me up the wall. Flash sucks. VB sucks. Give me good old fashioned C or hell, even assembler. I don't buy into the notion that coding should be easy. It is a process of utilizing logic to get things done. That is never easy. Hide all of the logic behind cutesy GUI based IDEs and all we'll continue to get is shit code.

    --
    -"...bad old ideas look confusingly fresh when they are packaged as technology" - Jaron Lanier (Digital Maoism on Edge.o
    1. Re:I Couldn't Agree More by Trillan · · Score: 2, Interesting

      I agree that easier-to-use tools are making it easier for poor programmers to both sneak in and through their careers without being caught for the frauds they are. But at the same time, at least some of the easy-to-use tools are... easier to use. For experts, too.

      I actually have a thought on this: Requiring applicants to write something in a pseudo-language. The language is defined on a handful of pages given to him, and he has to solve a couple simple problems in that language. I think it would be a great barrier to block idiots from getting in.

    2. Re:I Couldn't Agree More by teneighty · · Score: 1
      I actually have a thought on this: Requiring applicants to write something in a pseudo-language. The language is defined on a handful of pages given to him, and he has to solve a couple simple problems in that language. I think it would be a great barrier to block idiots from getting in.

      Excellent idea! I nominate INTERCAL as the language of choice for this exercise.

    3. Re:I Couldn't Agree More by Pman1 · · Score: 1
      I disagree.

      A great IDE that I swear by is none other than Visual Studio .NET. Why you ask?

      So many great tools that come with it. No, I do not drag and drop to code, I write everything myself. But...

      ...one tool I love is the debugger. I can actually set a break point inside a STORED PROCEDURE and step through it inside VS.NET. Makes like so much easier when you have complicated/delicate queries to write.

    4. Re:I Couldn't Agree More by Triones · · Score: 1

      I had interviewed at a place that actually do this.
      They're a pretty successful private-held object database company.

    5. Re:I Couldn't Agree More by Trillan · · Score: 1

      What did you think of it? Did it feel like an unreasonable test?

    6. Re:I Couldn't Agree More by Trillan · · Score: 1

      Eek! Every time someone links to INTERCAL I read it again, hoping it will make sense. :)

      I suppose what I need to do is sit down and actually try it, but I'm afraid to get that much weird on my hands.

    7. Re:I Couldn't Agree More by BenjyD · · Score: 1

      I would say that he has a point, but that doesn't mean we should stop using IDEs. A good coder should at least be able to code using vi/emacs and a command line if they have to. Being able to write code with only the basics and debugging using just code examination and logging is important for what it teaches you. However, a decent coder should also recognise that they are more productive with a good IDE.

      In my experience, good developers can always do "text editor and gcc" development if they have to, while poor developers very often run in fear of anything without a visual debugger and a "Build" button.

    8. Re:I Couldn't Agree More by BenjyD · · Score: 1

      Dataconnections do exactly that as part of their preliminary six hours of testing. They give you a definition of a vaguely Fortran like language and then ask you to step through a hundred line program on paper and write down the final result. And, no, I didn't get the job.

  56. Hiring good..... by banuk · · Score: 1

    ... editors couldn't hurt either

  57. The other side of things by SuperKendall · · Score: 4, Insightful

    Regardless of what software he has put out or what other projects he has worked on, his blog (JoelOnSoftware) has been read by many developers I've come across - at least the good ones...

    I tend to judge him by what he has said more than any experience with software he has written or managed. And really his blog has very good insights on software that other people ignore at their peril - this particular story is no exception to that rule.

    just because he also has a bit of the marketer in him (understandable since he owns a business) does not automatically mean he does not know what hes talking about in regards to programming.

    So would you disagree with his assertion that a higher quality developer can produce code that would never come from a mediocre one?

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:The other side of things by sykjoke · · Score: 1

      I've certainly seen bad code written by 'good developers' because it lacks that design of a business analysts. I think it's more important to have good designers and analysts than developers, but it's even better still is some of those analysts are also developers.

    2. Re:The other side of things by killjoe · · Score: 1

      "So would you disagree with his assertion that a higher quality developer can produce code that would never come from a mediocre one?"

      Yes I would. If Joel is right then one presumes he is always hiring the best programmers in his state. This should by his thesis should lead to world class software which in turn should quickly be the dominant software in their markets.

      I propose that he is wrong because despite hiring the best programmers his software is not all that different then any other software and the marketplace tells me that it's in fact inferior to his competitiors who make much more money and sell lot more products then he does.

      --
      evil is as evil does
    3. Re:The other side of things by Anonymous Coward · · Score: 0

      Wow, can I sell you some ocean-side property in Arizona? You fool.

    4. Re:The other side of things by hopethisnickisnottak · · Score: 1

      I tend to judge him by what he has said more than any experience with software he has written or managed. And really his blog has very good insights on software that other people ignore at their peril - this particular story is no exception to that rule.

      Ah yes! Quite like taking tactical and strategical advice on a battlefield from Tom Clancy because I tend to judge him by what he has said and written more than any experience with battles he may have commanded or fought in. And really, his blog has very good insights on tactics that other people (read: serving officers in the armed forces) ignore at their peril.

      --
      -Shaunak
    5. Re:The other side of things by Flatulence2 · · Score: 1

      The idea with software engineering is that the quality of your programmers shouldn't matter a great deal. If you have good processes in place, the quality of your programmers should not be a major factor. Obviously better programmers will be advantageous. However you don't want to rely on a team of dedicated hardcore programmers that pull off ridiculous hours (or hit the 'high notes' as TFA suggests). Software should not be made by programmers, but processes. It's like talking about how you can build a better building with quality bricks.

  58. Does quality matter, though? by JanneM · · Score: 1

    So, you can make stuff of much higher quality than is possible with run-of-the-mill people. So what? If your customers/clients are focused on price and feature bullet points, it's a waste of time and resources to make it high quality. In fact, it's counterproductive - a high-quality system raises expectations and creates as much (or more) maintenance work as the normally crappy app the clients expected anyway.

    You should never overdo anything. If you're constructing a walk bridge, making it strong enough to handle a freight train isn't good workmanship, it's just foolish. If you're making buttons and handles used in industrial automation panels, it's a waste to make them in a gold-plated titanium alloy. If you're making a drill that's expected to be run for 50 hours over the lifetime of the tool (fairly typical for home use), you would just be pissing away resources by making it last for 500 hours.

    Same thing goes for software design and quality. You should not write _too_ crappy software, of course (where "too crappy" is situation-dependent) - but spending a lot of manpower, money and time on quality levels, features or extendability that will never be appreciated or used is just as foolish as the examples above.

    --
    Trust the Computer. The Computer is your friend.
    1. Re:Does quality matter, though? by ansible · · Score: 1

      I've got a couple points.

      I don't hink your bridge analogy is very good. A walk bridge which can handle a freight train is not well designed. That is about ignoring the requirements, not making the design of a walk bridge as good as possible.

      2nd point. I think that trying to maximize software quality can actually save money.

      The issue is all about bugs and support, in my view.

      Bugs cost money. Lots of money. If each of the users calls into a help line because of a bug in your off-the-shelf software (even just once), then you're going to be losing money big-time. Phone and even e-mail support (if you've got a human reading the e-mails) are expensive.

      Bugs can also cost you customers if they run into enough of them. You'll get less word-of-mouth advertising (one of the most cost-effective types), and you'll get less repeat sales.

      As far as software design goes, obviously you can go overboard and implement really whizzy new data structures and stuff which take a long time to develop. But putting a lot of effort into designing a product to be as robust and reliable as possible is well spent, in my opinion.

    2. Re:Does quality matter, though? by DemonSlayer · · Score: 2, Funny

      You hire good programmer to make code.
      You hire average programmer to make test.
      You hire cheap programmer to make documentation.
      You hire bad programmer to make coffee.
      You hire sexy programmer to make love.
      You hire ugly programmer to make installation CD.

      The software will be affordable.
      Good programmer - high pay but U hire only one.
      Average programmer - average pay.
      Cheap programmer - low pay.
      Bad programmer - under pay.
      Sexy programmer - average pay.
      Ugly programmer - low pay.

  59. therefore? improvement is futile? by AndrewR81 · · Score: 1
    From the article,
    The real trouble with using a lot of mediocre programmers instead of a couple of good ones is that no matter how long they work, they never produce something as good as what the great programmers can produce.

    Five Antonio Salieris won't produce Mozart's Requiem. Ever. Not if they work for 100 years.
    His main point seems to be that great programmers are able to write solid code in a much shorter time than the mediocre programmers. I'm not disagreeing with that. However, another point he seems to be making is that these programmers have an innate talent. They "good" programmers can try all they like, and never get to that level!

    It seems sort of pointless. If I'm a "good" programmer, I'm stuck that way. I can never be a "Mozart". Maybe people hiring will find it useful - look for the "great" programmers, don't go for a "good" programmer hoping he'll improve or that having lots of "good" programmers will make up for lack of "great" programmers. But as far as an individual goes, if you're good, you're good, if you're great, you're greatness is >> good. Seems rather obvious and similar to many skills.

    That said, I think it is possible to improve vastly with practice and training. A "good" programmer might not be "great" but he can get close, in the same way practice and training can vastly improve anyone's ability in a sport. Just seems like he doesn't address this aspect at all.
  60. Refrigerators by HermanAB · · Score: 1

    So how often do you replace your fridge or your stove, or your house for that matter? Durable goods do have a market and some people are willing to pay a premium for it.

    Think of a big hydro dam: It is constructed to last forever, since failure is simply unacceptable and repairs almost impossible.

    Companies that build durable goods seem to be doing just fine...

    --
    Oh well, what the hell...
    1. Re:Refrigerators by HungWeiLo · · Score: 1

      Companies that build durable goods seem to be doing just fine...
       
      But that's assuming all its competitors take the same high-road approach. If just one of those competitors decide to steal marketshare by selling an inferior product at a lower price, then all is lost. Look at Volvo for a good example of this. Who 10 years ago would have thought that Volvo would make cars that are only of average quality? Or that Mercedes-Benz, once the symbol of luxury and quality, would scrape the bottom in terms of quality even when compared to cheap Korean cars.

      --
      There are a huge number of yeast infections in this county. Probably because we're downriver from the bread factory.
  61. Quoting his own article - by apankrat · · Score: 1

    Five Antonio Salieris won't produce Mozart's Requiem. Ever. Not if they work for 100 years.

    Replace Saliery with Joel and Mozart with Paul Graham and the statement will still be very much true.

    --
    3.243F6A8885A308D313
    1. Re:Quoting his own article - by Anonymous Coward · · Score: 0

      funny enough, today most experts view salieri not much below mozart. a few early books and the movie made him the monkey he's seen as today by most

    2. Re:Quoting his own article - by Anonymous Coward · · Score: 0

      Paul Graham? What has he ever done other than flaming about Lisp?

    3. Re:Quoting his own article - by daniel_mcl · · Score: 1

      I'm always glad to see someone criticizing the Mozart-worship in "classical music" circles. Mozart was nowhere near the equal of his teacher Haydn nor his student Hummel, and yet we hear more about Mozart these days than those two combined. Surely he came out with a few good pieces -- the Rondo alla Turca comes to mind -- but for some reason people feel inclined to perform every single piano work the man ever came out with, most of which are just outright annoying to listen to.

      --
      I used to read Caltizzle. I was a lot cooler than you.
    4. Re:Quoting his own article - by tadas · · Score: 1
      Five Antonio Salieris won't produce Mozart's Requiem. Ever. Not if they work for 100 years.

      Um, Mozart's Requiem wasn't entirely by Mozart -- he died while writing it, and substantial portions were written by his student Franz Xavier Sussmayer.

      --
      This page accidentally left blank
  62. Amused by the responses... by Ingolfke · · Score: 1

    If this article had been about offshoring programming jobs to non-1st world countries the majority of the posts would be about how you can't just replace "good" American programmers with "bad" programmers. It's not a cost savings!

    But since this article is about how you only need the best programmers, most of the posts are about how elitist this post is and what an idiot this guy is for even suggesting such a thing.

    Sounds like there are a lot of very insecure folks around here (*gasp* someone repeats something everyone else has known for years!)

  63. Working Software by tempest69 · · Score: 1
    Rock-Star programmers are a two edged sword. They dont make the mistakes that humble the everyday maintenance coder, but they make mistakes of a much higher order. These problems are way harder to catch and or fix.

    Here is a bit of a dumbed down example. Build a program to build a prime number seive (boolean array) of one billion elements.

    Novice approach:

    Go to each position in the seive and check by modulus if it is divisible by a lower number.

    Standard Coder approach:

    Go to each position in the seive and check for modulus up to sqrt(currentIndex), because anything higher is silly.

    Rock-Star approach:

    Mark everything as prime, then foreach prime 2..sqrt(one billion)) multiply prime*each other remaining prime up to (one billion/prime) and mark it as composite.

    The Rock star method is fast furious and brilliant. And if you payed really close attention it's ALMOST perfect. The problem is that you mismark a few items if you go from the remaining primes up to (one billion/prime) but it would take another Rock Star QA person to catch the logic flaw.

    Storm

    Math Nerd Note:

    The Rock Star method works if you mark_composite(mult prime*(each remaining prime starting at (one billion/prime).DOWNTO.prime)).

    1. Re:Working Software by Rick+and+Roll · · Score: 1
      Very interesting post. It actually took me about thirty seconds to figure out why your were going up to sqrt(currentIndex). I guess I fit into the first category :(

      The main point of my post was that Joel really didn't say anything new, except he had a very elitist way of saying it. That's why I just used an age-old quote.

    2. Re:Working Software by bar-agent · · Score: 1

      The main point of my post was that Joel really didn't say anything new, except he had a very elitist way of saying it.

      He did have something new to add to the discussion: statistics.

      --
      i'd hit it so hard, if you pulled me out you'd be the king of britain [bash.org]
    3. Re:Working Software by ljaguar · · Score: 1

      ummmmm.

      how about just _the standard sieve_ of one billion bits?

      mark everything 'prime' ; that is, start with array filled with one.
      say sieve is one-based array of length billion

      for (i = 2, i = sqrt(one_billion); i++)
              if (sieve[i])
                      for (j = i + i; j = one_billion; j += i)
                              sieve[j] = 0;

      does eratosthenes sound familiar, math nerd?

    4. Re:Working Software by tempest69 · · Score: 1
      how about just _the standard sieve_ of one billion bits?

      mark everything 'prime' ; that is, start with array filled with one. say sieve is one-based array of length billion

      does eratosthenes sound familiar, math nerd?

      Um it does work, but you will sieve[30].setComposite() 3 times when it only needs to be done once. By one billion your really duplicating work.

      for(i=2 .,i lessThan sqrt_one_billion .,i=seive[i].next())
      top=one_billion / i

      while (i lessThanEq top)

      seive[i*top].setComposite()

      top=seive[top].prev()

      It does sound familiar, but it is a bit inefficient. it's O=NlogN instead of O=N. And Yes, only a nerd would care.
  64. Another important piece of engineering wisdom: by AXNJAXN · · Score: 1

    You can do things cheap, good, or fast. Pick any two.

    1. Re:Another important piece of engineering wisdom: by Anonymous Coward · · Score: 0

      Wow, how original. You're only like the 20th bozo to post that tired old platitude.

  65. Well, the dirty secret of software development is: by crazyphilman · · Score: 1

    "Talent matters".

    It's kind of taboo in our supposedly non-elitist society to say such things, but that doesn't make them untrue.

    A person can go to harvard, spend a hundred thousand dollars on his education, and still be a talentless hack. I know; I've met that guy (No, N---, I'm not talking about you, don't freak out).

    On the other hand, another person can go to a cheap, never-heard-of-it public school, and write good software effortlessly and quickly, on a level hacks can't even approach. It comes natural to a person like this.

    Talent can't be taught. It can't be bought. It either is or it isn't present.

    Again, I know this is a huge taboo these days.

    But it's still true.

    --
    Farewell! It's been a fine buncha years!
  66. Idealistic is not practical by Soham · · Score: 1

    While I agree with the point of the article, I don't believe hiring great people is possible everytime, however badly you may want to do it.

    At any given time in the economy, there are only a handful of companies that have seemingly large monetary resources as well as time, to shuffle through a million recommendations and resumes, and funnel them down with hard questions.

    When you are starting out (startup) rarely do you have enough time to wait for great people to come by and take advantage of.

    On top of that, it is not always possible to get rid of mediocre people easily without taking a big hit in your plans.

    While I respect all opinions, what is needed far more is not the advice on hiring great people, but on how to salvage sub-standard projects, lead mediocre people, manage a chaotic environment with limited resources and still come out succesful.

    Anyone?

  67. Re:Software application development comes down to. by Anonymous Coward · · Score: 0

    I don't know what you are bragging about, but your comments are pretty lame and no more. Yes you need smart people to make smart comments, but that doesn't matter on slashdot. Any Joe can do it.

  68. Firsthand knowledge by kc01 · · Score: 1
    I once worked with a junior programmer who'd recently "graduated" from one of those computer tech schools advertised on TV. He was a nice guy, and got his job done for the most part.

    Then we started noticing that his code was SIGNIFICANTLY larger than it really needed to be. Once more experienced people started checking his code, it became glaringly obvious that he didn't know what a loop was. He just duplicated code for as many iterations as was necessary.

    Now of course, this was an extreme example of the difference between a good programmer and a barely adequate one, but you see the point...

    1. Re:Firsthand knowledge by cr0sh · · Score: 1
      Of course, this depends on the language and the compiler, and in the instance of assembly, the cpu as well - but loop unrolling is actually a method of increasing performance, rather than decreasing it.

      Now, granted, if your application is compiled in any sort of fashion, typically the compiler will unroll loops as needed or requested, and "pre-unrolling" loops can cause problems in performance in these kind of situations. Likely, your situation fell into normal application development using either a scripting language or a compiled one, and your programmer was just brain dead.

      For certain situations (low-level embedded or tight routines at the assembler level), loop unrolling can be a very valid and useful tool to know, especially if developing assembler code or doing other similar embedded CPU development. The trick is knowing when and where to do such loop unrolling, and knowing whether unrolling the loop will help or hurt matters (ie, you have to know the CPU you are developing for, how many clock cycles it takes to iterate a loop, push/pull from the stack, etc)...

      --
      Reason is the Path to God - Anon
    2. Re:Firsthand knowledge by kc01 · · Score: 1
      Yes, I know. I've seen valid cases of duplicating code to save the time needed for a branch, typically in real-time warfare applications.

      This wasn't the case. Knowing when not to use a loop, and not knowing what a loop is are two entirely different things.

  69. Let's get 5 good tennis players against an expert. by Maxo-Texas · · Score: 1

    Or 10 bad ones against an expert.

    What's the result.

    I used to be a top-notch programmer. I'm down to medium now. Sliding into management since I don't want to be a contractor and management pays more otherwise. Top-notch programmers don't get the respect they deserve.

    That being said- hordes of drones + core of top notch is a lot better than "all top-notch" or "all drones".

    All top notch can't agree on squat. They irritate each other about fine differences in equally perfect but different code.

    All drones are much worse. They sometimes could not solve basic problems given almost infinate time. They need an expert to show them what they need to do- then they implement it.

    Lots of drones are very good for huge projects- because top-notch programmers should be resolved for the risky, hard stuff- not the "grind it out" stuff.

    My opinion- based on hmm... 31 years of experience. --- Former assembly language, cobol, fortran, pascal, lisp, oracle forms, rpg, c, c++, lately java, j2ee programmer- sliding into project management, status reports and meetings.

    --
    She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
  70. Re:Software application development comes down to. by Xugumad · · Score: 4, Interesting

    Another point to keep in mind that not all your programmers have to the above average, or even average. For example, we have a student helping out over summer. She just doesn't have the breadth of experience for us to trust her with architecture design or the most complex programming tasks, but there are lots of simpler, straight forward jobs that she can do. And working at around half my salary (per hour), she's a hell of a lot cheaper than hiring a graduate programmer with several years experience.

  71. Everyone's right... by Javaman59 · · Score: 1

    The article is right that there are programs that great programmers can write, that good programmers will never write, and the critics here are also right, that most programms can be written by good programmers. Simple. I would add that great programs are not only those which do something new and exciting, but also those that do something well known, but complex (like an OS, or a Word Processor, or an Air Traffic Control system), and do it efficiently, and without fault.

    --
    I'm a software visionary. I don't code.
  72. Good programmer = terrible teacher? by Anonymous+Brave+Guy · · Score: 5, Insightful

    This was an interesting observation:

    I guess the main drawback of this is that most good programmers are often terrible teachers, but that might reflect the lack of a tradition in the field.

    Something I've found in many aspects of life is that the people who are really good at something tend to be able to explain it, clearly and accurately, to someone less experienced. This is true of almost any field I've ever studied, from mathematics to martial arts, from driving to dancing.

    It's interesting that in Japanese, there is little distinction between being very good/experienced at something, and being a teacher of it. If someone in Japan asks you whether you teach programming, and you're the 20 year veteran Senior Software Engineer at your company, the answer is yes even if you don't teach in the English sense. It's simply implicit that by being good at something, you will be teaching those around you as you do it.

    I think the difference between someone who's really good at something and someone who's just OK usually comes down to a depth of understanding. One can follow a cookbook of techniques, or regurgitate information they've been fed in the past. The other writes the cookbook, because they've understood the information and worked out how it all fits together.

    A corollary of this is that those who truly understand a subject tend to be better able to convey their understanding to others. Because they can see it from more than one point of view, they can adapt their explanation and examples to fit the knowledge and learning preferences of the person they're trying to teach. Those who never reach that level of understanding can repeat what they were told when they were learning themselves, perhaps even in multiple ways they learned from multiple sources, but they can't adapt it, can't see it from different perspectives and present it in different and original lights.

    Thus I'm rather surprised that you think most good programmers are terrible teachers. Most programmers may be terrible teachers, but I question whether a good programmer who is unable to pass on that knowledge is really that good at all. It's unwise to generalise completely, because of course teaching requires skills all of its own, but I've met very few great practitioners in any field who weren't also outstanding teachers.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    1. Re:Good programmer = terrible teacher? by GrahamCox · · Score: 1

      Thus I'm rather surprised that you think most good programmers are terrible teachers

      Did I say that - well, maybe I meant many rather than most. But being a good teracher isn't just about depth of understanding, on which point I agreee with you - it's also about attitude. How often have you come up against the self-proclaimed "guru" at a software firm who likes to wield power by deliberately withholding his knowledge? Or who thinks he's doing you a favour by getting you "to work it out for yourself", with a knowing twinkle in his eye? Good teachers are also those who WANT to share their knowledge, and don't feel threatened by "giving it away". That eliminates probably half of the good programmers I've met, who really were good programmers and didn't need to be so insecure...

    2. Re:Good programmer = terrible teacher? by jericho4.0 · · Score: 1

      I found out a long time ago that the best way for me to learn something, was to try to write a quick tutorial. It forces me to encapsulate what I do know, and makes what I don't know very clear.

      --
      "A language that doesn't affect the way you think about programming, is not worth knowing" - Alan Perlis
    3. Re:Good programmer = terrible teacher? by Anonymous Coward · · Score: 0

      god i'm tired of hearing about japan.

      it actually kind of sucks there. it isn't a paradise for nerds, it's a paradise for trendsters who think all that japanese shit is cute or profound or both.

    4. Re:Good programmer = terrible teacher? by SeattleGameboy · · Score: 1

      That is a total BS.

      Just because you are an expert at something does not make you a good teacher. Teaching takes more than knowledge, it takes other traits like empathy, emotional understanding, doggedness, etc., and most importantly, passion for teaching.

      I had some BRILLIANT professors in college. The guys with well known theorems named after them. And there was no question, they were absolutely brilliant.

      And you know what? They were TERRIBLE teachers. Why? Because they were WAY ahead of most students on things they were teaching. They could not understand why most mortal students could not grasp some of the concepts that were so natural to them. The professors basically left the students behind and we were left to fend for ourselves.

      Does that make them less expert on their issues? NO! Does that make them good teachers? HELL, NO!

      Just because you know stuff does not mean that you can teach it.

      P.S. Another popular example... Larry Bird, Magic Johnson, and Michael Jordan are the greatest basketball players ever, and they all SUCKED as a coach.

    5. Re:Good programmer = terrible teacher? by Nept · · Score: 1

      Every teaching must be capable of being made popular (that is, of being made sufficiently clear to the senses to be communicated to everyone) if the teacher is not to be suspected of being muddled in his own concepts.
      -Kant, the Doctrine of Right

      --
      "Teachers leave us kids alone ..." - Roger Waters, Pink Floyd
    6. Re:Good programmer = terrible teacher? by MourningBlade · · Score: 1

      Something I've found in many aspects of life is that the people who are really good at something tend to be able to explain it, clearly and accurately, to someone less experienced

      I've found that in arts the difference lies between being able to explain something to someone and being able to teach someone the thinking behind arriving to such a conclusion - how to explore the problem.

      I can explain the technique I use in my writing (both code and fiction), the reason for my doing things (well...in most cases), etc. What I cannot do is teach someone how to do the same thing.

      Then again, the Japanese style of learning seems to be more suited to this: you mimic, mimic, mimic, then try your own variations. This is how most of us learn how to speak, dance, and make love[1]. What surprise, then, that an art would be best taught in that way[2]?

      [1] - Well, sex has less to do with mimicry and more to do with experimentation, but it's one of those things you have to learn by doing.

      [2] - This is as opposed to learning from a book, learning just theory. It's important to learn theory as well, but only when you can appreciate it.

    7. Re:Good programmer = terrible teacher? by roman_mir · · Score: 1

      When I play GO, I beat everyone I play with but for the hell of me I can't explain how I do it.

    8. Re:Good programmer = terrible teacher? by EvilBudMan · · Score: 1

      I am good at teaching others self reliance. Does that make me a good teacher?

    9. Re:Good programmer = terrible teacher? by James_Aguilar · · Score: 1

      Teaching seems to me to be a totally separate muscle from any other. Whether you are a good teacher or not might have no bearing on how good of a programmer you are, and vice-versa.

      However, I have found that skilled programmers do tend to be good learners. I have not yet seen anyone who needed a lot of help picking something up who was also a strong programmer.

    10. Re:Good programmer = terrible teacher? by fool36 · · Score: 1

      How often have you come up against the self-proclaimed "guru" at a software firm who likes to wield power by deliberately withholding his knowledge?

      I've not found a great programmer that was not generous in explaining technique and knowledge. I've certainly found self-proclaimed greatness is most likely misguided... and people who are not as good as they, or other people believe them to be, will often try to hide their lack of deep understanding.

      As cuckoo as it sounds, I believe that a great programmer needs to be humble enough to listen to the code and design it how it wants to be... maybe humility is inherent to a great designer?

    11. Re:Good programmer = terrible teacher? by fool36 · · Score: 1

      There is obviously something to be said about teaching someone near your level vs. teaching someone far below you. In one case, you are mentoring or collaborating, which I see as easier to do.

      I don't see a corelation between being very good at something, and teaching it to someone who knows nothing about it.

  73. Joel needs some better programmers by Yo+Maing · · Score: 1

    Anyone out there who has used FogBugz can tell you that Joel should follow his own advice and hire better programmers.

  74. You are missing the point by Anonymous Coward · · Score: 0

    The point is that you are better off gaining insights from somebody who is more recognized by the developer community. Joel's not one of them.

  75. How, uh, news, of you. by Stauf · · Score: 1

    No matter which industry you're in, no matter what you do/make/whatever - hiring good employees matters.

    If you're a car dealership - hiring good salesmen matters. If you're a home builder - hiring good architects matters. Things are not somehow 'different' just because we're talking about IT.

  76. and it's not just computers .... by Anonymous Coward · · Score: 0

    "Kelly" Johnson of U2/TR1 and A12/SR-71 fame felt the same way about aircraft design. His general rule was that you could get more done well in a shorter period of time with about 10-20% of the number of people in a "similarly sized and scoped" project. The key was finding the best talent and having management acting as a facilitator and generally staying out of the way.

  77. Over the years... by anubi · · Score: 1
    I have noted that any amount of "formal education" was completely meaningless unless the person had just ONE thing going for him...

    He HAD to have a passion for his work.

    No if, ands, or butts. Just that one thing has been the ONLY thing that I have seen that made a difference.

    And its a HUGE difference.

    This paradigm works in ANY field. Not just programmers.

    If you are not passionate about your work, you are in the wrong line of work.

    That is why I consider it SOOOOO important to find something to do that you LOVE doing it, even if you don't get paid... as its not long before others find out you do this, and want you to do it for them, and they will pay handsomely for it.

    You think IT guys have it tricky? Try Auto Mechanics. That stuff has gotten so complicated lately that few people can get it to work if anything goes amiss thats not a drop-in/out replacement item, often leading to thousands of dollars worth of needless replacements billed to the hapless car owner.

    Thats one of the things I am getting into. I don't need to actually fix the thing, I hook up a lot of homemade test equipment and find out why the car is not behaving the way it should, then let them make the decision of who lifts the wrench.

    I don't have tools, facilities, or the mechanical inclination to get into engines, but I can hook up to OBD-II ports, coil ( timing ), and watch realtime engine vacuum, exhaust pressure, crankcase pressure, fuel rail pressure, exhaust spectra ( HC, CO, CO2, NOx, O2 ), engine radial acceleration, and engine temperatures with a thermal camera... and get a damned good idea of whats not right in the engine without ever cracking it open.

    Right now, I am playing. The local community college just about lets me have run of the auto lab as my playground. For me, this is fun.

    Right now, I don't get paid. I am just seeing if what I wanna do is doable.

    When I get good at this, money will follow... but if I am gonna do it, its gotta be fun.

    Here's another one I'd love to clone myself off to go play around with... Bodine/Lynx/Kinetic Art and Technology are just releasing a really neat motor design called a Segmented Electromagnetic Array motor. It works just like the voice coil positioner in our disk drives, but this one is laid out to work full circle. I wanna play around with one of these sooooo bad! Try driving a refrigeration scroll compressor just to see how efficient I can make a refrigeration process run if I can get full control of motor RPM and expansion valve using AVR microprocessors as controllers. Play around with R410/water heat exchangers to interlink irrigation water to dissipate heat. The way this thing is made, once I assemble such a thing, it should run damn near indefinitely, as well as maxing out its efficiency for all ambient and load conditions.

    Or use it as a replacement for the flywheel, starter, alternator, and much of the brake in a car, leaving the mechanical brakes intact only for emergency backup. Brake shoes and belts wear out... magnetic fields don't. These are a flat pancake motor design...oughta make way for a really elegant engine design.

    Yeh, maybe I consider myself to be pretty good. But I LIKE what I do.

    I only have a BSEE. I don't have near the "documented" qualifications most "big company" types are looking for. But by golly, nothing in the electronic design arena scares me... I am in hog heaven with my test equipment and CAD systems, however "obsolete" the corporate types consider it to be. I know my tools like the back of my hand, even to things like knowing how much current my Triplett 630 sources when I take ohm measurements, or how my older Tektronix scopes are gonna load or distort the signals.

    I find out I can "mentor" someone forever, but if he can't wait for quitting time so he can go play videogames, there is nothing I can do to pour any insight into the guy.

    How does one find these kind o

    --
    "Prove all things; hold fast that which is good." [KJV: I Thessalonians 5:21]

  78. Marketing/sales department by doyen2000 · · Score: 1
    The application just has to be good enough.. (A few excellent lead programmers.. the rest should just use well known algorithms) It is the Marketing and Sales department that has to be stellar so that they can promote, create the illusion, sell it and corner the market like it was the best thing since slice bread.

    I think it is sad because it is driven by money.. but there is a lot of examples where this is the case.

    Cheers, A.

  79. Sources of ideas by Anonymous+Brave+Guy · · Score: 1

    Blockquoth the AC:

    The point is that you are better off gaining insights from somebody who is more recognized by the developer community.

    Why? What's wrong with reading someone's opinion, evaluating it critically in light of your own experience and your other reading, and drawing what insights and ideas you can from it? It's like no-one's got a degree any more. :-(

    Personally, I find a lot of the most thought-provoking articles I read aren't by big names. Big names can rely on having a big name, and the kind of sheep you're talking about when you say "developer community" will believe anything they say. It's the guys behind the big names who have to convince people using old-fashioned techniques like presenting facts and making logical arguments.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  80. Another Ego Trip Article by Anonymous Coward · · Score: 0

    Somehow articles like this only serve to stroke egos. Any objections?

  81. Stages of Enlightenment by wrook · · Score: 1

    I can't believe I'm getting sucked into this. Sigh... Slashdot -- Junkfood for the techie mind.

    OK, I read Joel's comments from time to time and sometimes he makes sense. This time he has revealed his naivety.

    There are stages of enlightenment that a programmer goes through to one degree or another. Some will go through many stages; others not very many at all.

    The first stage of enlightenment: I'm a good developer, but there are lots of good developers that I can learn from. I can't wait to learn from them.

    Second stage: I'm a good developer, but most of the other developers around me suck. If only we got rid of all the sucky developers, we'd be going somewhere.

    Third stage: I'm a good developer, but all the other developers around me suck. If I started a company with only good developers, I could make a fortune.

    Fourth stage: I'm a good developer and I *thought* all these people around me were good, but they actually suck. Since all developers suck, I need to put an iron clad process in place to make sure they don't screw up.

    [Note: sometimes stages 3 and 4 are reversed]

    Fifth stage (the first stage with actual "enlightenment"): I suck. Everybody around me sucks. What the hell am I supposed to do? I guess I just need to improve myself (or become Wine grower in Oregon using the millions I made from stages 1 through 4 -- potentially Northern California if you managed to sell your processes from stage 4, or your "management" expertise from stage 3).

    Sixth stage: Wait! Not everybody sucks (although I still do). There are a few (very, very few) people who have a handle on stuff. I'll try to learn from them.

    Seventh stage: I still suck pretty bad, but I'm improving. Also, I've realized that many of those other sucky people were just mismanaged (i.e. abandonded and ordered to "produce") and misinformed (i.e. not actually taught anything by anyone who knew anything at all or worse taught by those people from stages 1 through 6). Most reasonably talented people can do amazing things if they are coached and developed properly.

    That's as far as I go. However, I'm pretty sure stage 8 is "I'm totally sick of making fat cat asshole investors millions of dollars by producing completely irelevant toys that virtually everyone would do better without. I'm sick of watching people with great potential get ground down into stumps by greedy ladder climbing scumbags that fancy themselves as "managers" (or "directors" or "operating" "officers"). I think I'll become a waiter and write free software on the side.

    Oh well...

  82. I love his reference to... by rbarreira · · Score: 1
    ... the hot coffee episode:

    I made the claim, in those days, that good working conditions (or, awkwardly, "building the company where the best software developers in the world would want to work") would lead to profits as naturally as chocolate leads to chubbiness or cartoon sex in video games leads to gangland-style shooting sprees.

    --

    The AACS key is NOT 0xF606EEFD628B1CA427BEA93A9CA9773F
  83. and the quality delta is constant by yagu · · Score: 1

    I read somewhere (wish I could remember where) that really good programmers can be on the order of a magnitude better in programming than average programmers (in lines of code, time needed to write working code) and over the span of years, that ratio of better performance remains constant. Based on my experience this is probably close to the truth.

    1. Re:and the quality delta is constant by the+eric+conspiracy · · Score: 1

      From what I recall it was Fred Brooks, Mythical Man Month

  84. Color me unconvinced by xenocide2 · · Score: 1

    I want to agree with him, that the best coders are nessecary, but I don't quite trust the data. I can't seem to find the data he used. But I'm willing to chalk that up to my being lazy and his inside connections.

    But even if the data is true, what does that prove? What you're looking for is people who can do things correctly, and do them correctly quickly. Time to market matters, folks. He esablishes that there isn't a great correlation, but if anything, we should recognize that the highest concentration of students in his plot are exactly in that low time / high score area. The lack of correlation isn't a proof of anything; maybe it's just random, and if they tried another experiment you'd all get the same patterns with totally different grades. For his theory to hold true, the statistics should show that there are people who can code quickly and correctly.

    Finally, it's not like the iPod was awesome, and perfect in every way since the day it was made. They've been through several revisions, since the first one that made its own click noises without a speaker. More importantly, the original iPod was practically complete by the time Jonathon Ives got around to dicking with it. The GBASP is nearly as seemless, and you can still replace the rechargable battery with a little knowledge and a screwdriver. What propelled the 3rd gen iPod
    was a huge advertising campaign and a bigger drive.

    In this case, we're simply listening to Joel preach on about how important Egos and Personalities are to the computers business. I might suggest that he's got some investment in that opinion that clouds his judgement.

    --
    I Browse at +4 Flamebait

    Open Source Sysadmin

  85. Elaboratively obfuscated with evidencies by Satorian · · Score: 1

    TFA: Longest introduction to an iPod ad ever.

  86. Re:Software application development comes down to. by sinewalker · · Score: 1

    True. However, no matter how many times you explain that to your customers, they will want all three, and threaten to go somewhere else if you wont give it to them.

    What eventually happens is that you (or someone other software house if you don't cave) will end up paying for item 2, or item 1 (in terms of contract penalties).

    That's just the way it goes. If I could find out why it goes that way all the fscking time then I would start my own software house.

    --
    “Our opponent is an alien starship packed with nuclear bombs. We have a protractor.” — Neal Stepnenso
  87. actually... by gadzook33 · · Score: 1
    ...it's very rare for two programmers to be told to do the same thing.
    Actually, in the government this happens all the time. Maybe we should do a study.
  88. ... and safe search! by coma_bug · · Score: 1

    Yeah... and he used "safe search" for pictures of Angelina Jolie! What does this guy know?

  89. It's not about the coders... by Anonymous Coward · · Score: 0

    it's about the requirements.

    Good requirements + average developers = working solution

    Bad requirements + average developers = good luck ;)

    Good requirements + great developers = awesome solution
    ( this one is extremely hard to come by)

    Bad requirements + great developers = project past deadline, eventually delivered through heroics

  90. The Programmers' Stone by noidentity · · Score: 1

    In The Programmers' Stone Alan Carter and Colston Sanger describe mapping, a cognitive strategy they believe explains the difference between average and excellent programmers. It was part of a course about gave at one time about improving one's skill at programming.

  91. software development costs by amoeba47 · · Score: 2, Interesting

    Is it not true that most of the cost of software comes from it's maintenance? If the code is created well from the beginning, it will be much easier to maintain in the end. Therefore: Good Code = Easy Maintenance = Less Expense

  92. You fail to realize by chadseld · · Score: 1

    That not all engineers are created equal. You may think they are because they all have the same letters by their name, and similar resumes... but you would be wrong.

    A good engineer will be more productive than 10 run-of-the-mill engineers. This applies to software, hardware, EE, ME, etc...
     
    Often an entire product or company is held up by a core team of awesome engineers with a fleet of helper engineers to do the grunt work.

  93. It's really an ROI question by Anonymous Coward · · Score: 0

    Is it really worth paying extra for better talent,i.e. ability to produce good quality software? In this job market the answer is probably yes since you can get talent fairly cheaply. During the dot com boom probably no since talent was really expensive and you could make tons of money producing crap or even nothing at all.

  94. The unfortunate thing is... by JurgenThor · · Score: 0

    Some of the design and implementation of Fogbugz is a little... lacking.

    We're currently trialling it and so far:
    The interface is pretty.
    Why were there no indices on any of the tables?
    Parts of the code (asp) have frighteningly stupid design. Some of the comments comment on it (good and bad).

    Perhaps the issues that count against it rose out of having coders who hadn't done database work/theory before? Don't know.
    I still haven't made my mind up as to whether I prefer fogbugz or bugzilla.

    --
    GENERAL PUBLIC SIGNATURE (GPS) Any replies (derivatives) of this post must also use the GPS
  95. Brilliant programmers can be boneheads too by grikdog · · Score: 1

    Personally, I discovered I can't run with the tall dogs because my dinky little I.Q. of 135 just doesn't cut it in the world of high-volume shrinkwrapped code. The first quality of the best programmers I've met is an ability to deliver product on schedule, despite Dilbert-esque management that I swear to God thinks they understand "coders" and "coding." Most of these guys burn out fast, too. Some of 'em, like me, flame out, and never go back. The second quality of the best programmers I've met is the ability to think large -- to grok the point of the application being developed and to write structure that doesn't hide the meaning of the implementation. The best code reads like the Book of Revelations, and the best coders are very odd ducks indeed. Pay for them. They exist, and you're slitting your own throat not to.

    --
    ``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
  96. Problem with 2 is that 1 isn't well thought out by crovira · · Score: 1

    Its the problems we make for ourselves on the way to solving out original 1 that usually spell doom for a project/code/solution.

    Mostly because of the (human) language we use to describe the original problem in 1.

    And if you're unilingual, you've got a problem.

    If you're unicultural, you've got a problem.

    Really good programmers 'listen' before trying to apply a bunch of solutions which may turn out to be entirely inappropriate. (I once solved a programming problem by designing a desk for the data entry clerks. [It worked hand-in-hand with the dual-station manual cheque entry code I wrote. The code was easy but they couldn't figure out how to set up the work so that it could be used.])

    Really good programmers see the objects AND see the relationships between them.

    Really fortunate good programmers get to write to code to handle the relationships as well as the objects.

    --
    MSBPodcast.com The opinions expressed here are my own. If you don't like 'em... Think up your own stuff.
  97. Plans could only be as good as the people .. by Anonymous Coward · · Score: 0

    "Plans could only be as good as the people who implement them"

    No process could possible replace good programmers.

    Don't believe in RUP.

    Anyway good mentoring, focus, a good environment and common sense can improve productivity, indeed.

  98. Stan Eisenstat is an amazing professor... by Vengie · · Score: 0, Offtopic

    I took CS 323a...in fact, I took it in Fall 2001, making my times part of the COMPRESS01, (which we called encode-decode, and we had to learn how to do hard and soft links, as they called the same executeable), SHELL01, et cetera. The best part of TFA is where Joel discusses the assignments in 323a.....I still have my time.log files, and am shocked at some of the time figures -- although they were posted when I was an undergraduate, I never really paid much attention to the statistics...

    As a side note, Stan Eisenstat puts CS kids through some crazy hoops. In the compress program, you have to detect how you have been called (Argv[0]) -- except you cant just look for "encode" or "decode" -- as one of Stan's favorites was putting the file in an /encode/foo/ directory and then calling it. His method of teaching things (YAGNI) was simply amazing....and it is sad that he isn't more well known. I still cherish my class notes.

    --
    When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi. (Larry Wall)
    1. Re:Stan Eisenstat is an amazing professor... by Anonymous Coward · · Score: 0
      Agree.

      Took the class in Fall 1997. If it hadn't been my first exposure to C I would have done a lot better (took a non-standard path through CS).

      I've since taken a lot of software classes, been mentored and a mentor. I have never learned so much or had to do so much in such a short period of time.

    2. Re:Stan Eisenstat is an amazing professor... by Anonymous Coward · · Score: 0

      It's impressive to me that Yale has a CS program at all. Why would anyone go there for CS? Granted, there is some mildly amusing stuff from Gelertner on UIs and information, but it's just mildly amusing.

    3. Re:Stan Eisenstat is an amazing professor... by Vengie · · Score: 1

      We have Fischer of the Fischer-Lynch-Patterson fame, and Avi Silberschatz, formerly of Bell Labs. We stole Julie Dorsey from MIT, and we have a ton of sensor network/mobile research going on.

      And by "we" I mean "they" -- I'm an alum.

      Yale's CS program is highly theoretical but quite rigorous.....Gelertner's courses are mostly for non-majors.

      --
      When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi. (Larry Wall)
  99. Spolsky's a little off-base by dtjohnson · · Score: 1

    His points seem to be:

    1) good programmers write better code than less-good programmers...

    2) Always get the best...

    Point 1 is obvious but Point 2 is a very bad way to approach a project. Should you need or expect the best garbage man to pick up your garbage? What about the best auto tech to fix your car? Okay, you say, these are non-creative tasks so they are not good examples. Well, then, do you need the best writer to write the docs for your software? In most cases, no. It's just a manual, and doesn't have to win a prize for literature.

    Spolsky might like the 'best,' just as he might prefer fine wines or concours automobiles but for most things 'good enough' is the 'best' use of your resources. Besides, just try getting an Ernest Hemingway to write your manual...

    1. Re:Spolsky's a little off-base by aleclee · · Score: 1
      Did you RTFA?
      Internal, in-house software is rarely important enough to justify hiring rock stars. Nobody hires Dolly Parton to sing at weddings. That's why the most satisfying careers, if you're a software developer, are at actual software companies, not doing IT for some bank.
      --
      This message composed using 100% recycled electrons.
    2. Re:Spolsky's a little off-base by king-manic · · Score: 1

      His points seem to be:

      1) good programmers write better code than less-good programmers...

      2) Always get the best...

      Point 1 is obvious but Point 2 is a very bad way to approach a project. Should you need or expect the best garbage man to pick up your garbage? What about the best auto tech to fix your car? Okay, you say, these are non-creative tasks so they are not good examples. Well, then, do you need the best writer to write the docs for your software? In most cases, no. It's just a manual, and doesn't have to win a prize for literature.

      Spolsky might like the 'best,' just as he might prefer fine wines or concours automobiles but for most things 'good enough' is the 'best' use of your resources. Besides, just try getting an Ernest Hemingway to write your manual...


      He did mention that for a lot of projects this wasn't nessacary (web forms, simple business apps). I'd liken it to painting, more painters don't paint the mona lisa faster, but you don't need 16 Da Vinci's to pain your fence.

      --
      "There are more things in heaven and earth, Horatio, than are dreamt of in your philosophy."
  100. Re:vaporware by Forbman · · Score: 1

    As engineers, we are liable to our products. ...but not software engineers. Bridges, cars, etc., do not come with big huge no-liability stickers on them and limits of warrantability and merchantability ("replacement of the media").

    Until states start licensing software engineers like they do real Engineers (those licenses do imply liability for design...), then you'll have a point.

    Oh, and bridges DO collapse, but it's usually the fault of mother nature or other external forces (government entities who will not provide maintenance funds, asshats who drive log trucks across covered bridges exceeding the weight limit by 2-5x...).

  101. DUH! by dwlovell · · Score: 1

    Slashdot's new mantra:

    Common Sense for Nerds, Obviousness that matters!

    -David

  102. Re:Well, the dirty secret of software development by Sax+Maniac · · Score: 1
    I think talent is usually correlated with motivation and desire to succeed, more than anything else.

    You can become talented by practicing skills enough - the will to practice is all on you, though. I wasn't born understanding pointers or virtual functions, but man, when I discovered them it was so damn interesting I had to understand everything about them.

    --
    I can explanate how to administrate your network. You must configurate and segmentate it, so it can computate.
  103. There MUST be some engineering by CausticPuppy · · Score: 1

    Particularly in a multi-user app (such as a web application) there has to be some engineering involved.
    It is possible to write functional, tight code, that may be beautiful to look at, but that also does not scale well when it's slammed with 10,000 users at once.
    Not only do you have to be smart in your coding, but you also have to know how to interpret load test results, use profiling tools, and other more engineer-ish things.

    Often these load and performance metrics are part of the requirements, or at least they should be. To use the carpenter analogy, let's say the carpenter gets asked to build a custom piece of furniture that must be able to support the weight of a 100 gallon saltwater aquarium, while minimizing the weight of the furniture itself. He will be required to think like an engineer.

    So, a true craftsman will also be smart in the engineering.

    --
    -CausticPuppy "Of all the people I know, you're certainly one of them." -Somebody I don't know
    1. Re:There MUST be some engineering by Anonymous Coward · · Score: 0

      That is actually not too unlike painting. With painting, you have various mediums and various canvases. These interact and mix in various ways. The artist must have experience and understand how each element behave physically in order to produce a good result - and that's before he gets to put in the first line on his painting.

      And just like any good programmer, who tests out new ideas and ways of doing things in his spare time, the artist will try out new mixtures to see how they turn out, so that he may use this again at a later time.

  104. He is: by thufir · · Score: 0, Troll

    He's a homosexual communist jew.

    1. Re:He is: by Forbman · · Score: 1

      Might as well throw in "islamic fundamentalist" in the same breath, too.

    2. Re:He is: by killjoe · · Score: 1

      LOL. It's funny because it's true.

      --
      evil is as evil does
  105. Pick Two... My CEO says to pick Four by ljkopen · · Score: 2, Funny
    A few all employee meeting's ago, my companies president was telling us which was the most important:

    "We have to be faster... better... cheeper... and REUSABLE..."

    All the engineers I was with worked VERY hard to not laugh.

  106. Re:Software application development comes down to. by Jeremi · · Score: 1

    There is one way to deliver software fast, cheap, and fully functional -- don't write it from scratch. Instead, start with an existing mature project as your basis and customize it. (Assuming such a project is available, of course... but freshmeat and sourceforge have a lot of stuff in them, so it may well be)

    --


    I don't care if it's 90,000 hectares. That lake was not my doing.
  107. kind of circular by cahiha · · Score: 2, Interesting

    his blog (JoelOnSoftware) has been read by many developers I've come across - at least the good ones...

    "Good" can mean many things. Joel largely represents mainstream views of Windows and Macintosh programmers--the kind of views you might find among Microsoft Office, Microsoft Windows XP kernel, Safari, or even Mozilla developers. If you want to be like one of those developers, then follow his advice. If you think that there is something seriously wrong with that kind of software (as I do), then you would do well to read Joel's writings more critically and assume that some of it is bad advice. Thinking about those issues will still make you a better programmer.

  108. Re:Well, the dirty secret of software development by crazyphilman · · Score: 1

    Ah, but did you develop talent because you found them so interesting and worked so hard? Or did you find them interesting and work so hard because you managed to discover a talent you didn't know you possessed?

    --
    Farewell! It's been a fine buncha years!
  109. What does your Company make again? by skeptictank · · Score: 1

    I know your probably busy being stylish designers, 'good' programmers, writing your blog and what-not - but why don't you have a hyperlink to a products page on your companie's website? I remember a time not to long ago when there were lots of Great Companies with websites talking about how Great they were and how Great their talent was - but never saying what it was they made, what services they provided or what they sold. You wouldn't won't people to think your company was one of those.

  110. Re:Software application development comes down to. by radtea · · Score: 1

    Cheap and fully functional = means it will take a long, long, long, long time for the average and inexpensive programmers to build it

    Unfortunately, cheap and fully functional just isn't an option--as your own example suggests, it'll take average programmers a long time to get to fully functional, which will not only require you to pay their salaries for a long time, it'll get you to market long after the competition has released their product.

    Nothing is cheaper than senior developers. A good senior developer can produce much more code (covering more function points or whatever measure of external utility you care to name) that will be lower maintenance in much less time than a junior developer. But even the best senior developers only cost a few times what a junior developer costs.

    Economically, it makes sense to hire as many senior people as possible, because they'll be ten times more productive at twice the price.

    --
    Blasphemy is a human right. Blasphemophobia kills.
  111. PLEASE mod parent up! by CptNerd · · Score: 1


    Easily the funniest thing I've seen on Slashdot in
    quite a while!

    --
    By the taping of my glasses, something geeky this way passes
    1. Re:PLEASE mod parent up! by Anonymous Coward · · Score: 1, Interesting
      > Easily the funniest thing I've seen on Slashdot in quite a while!

      /takes a bow. Thanks for the praise.

      If you've ever heard Arlo Guthrie's "Alice's Restaurant", and missed the day the muse dragged me from my cubicle to spend an afternoon doing a parody called Natalie's Restaurant... well, not to brag, but you're in for a treat.

      (Arlo still did it better, though - I couldn't have come up with it except for having his original to work from :)

  112. steve jobs... by johnrpenner · · Score: 1

    sorry, can't find it now, but i remember reading an interview with steve jobs
    a couple years ago, and he said something to the effect of what this guy is
    saying -- that certain people are able to produce not just an equivalent amount
    of labour of another programmer, but really good talented individuals can
    replace 20:1 or 40:1 in what they can accomplish.

    then when he built the programming team at NeXT (the parent of OSX), he
    leveraged this fact to get a small group of the best able minds to produce
    what a much larger group of less talented people could not accomplish.

    if anyone has a reference to that interview, it'd be greatly appreciated...

    regards,
    j

  113. Next on Slashdot... by Anonymous Coward · · Score: 0

    Fire is HOT!

  114. So what parts do you dislike? by SuperKendall · · Score: 1

    I'm not saying I agree totally with him, but generally I find myself really agreeing with what he is saying. And he is also on the forefront of saying software needs to consider social aspects of interfaces going forward, which I totally agree with. Some mundane details of his interview process or so forth I don't care about so much as long as I think his Big Picture views agree with reality more often than not.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  115. Elitist Imbecile Attitude Must Stop by Anonymous Coward · · Score: 0

    How about skillful programmers for more diffult or important tasks and less skillful ones for less difficult or important tasks. Do you hire a Queens Counsel to defend you on a parking ticket charge? Attention pompous self-important leet types, wake up to yourselves and stop spitting on your subordinates.

  116. iPod? by retro128 · · Score: 1

    I lost interest in the article when he started going on about the iPod. He and I differ on the perception that choosing style over functionality is a GOOD thing. But then, that is not the point of the article.

    It seems to me that he isn't really talking about good vs. bad programmers. The differences he brought up (Zen vs iPod, Winamp vs. Media Player, etc) have more to do with opinion and company culture than it does with technical superiority.

    If you separate the wheat from the chaff, I think what he is trying to say is: "Surround yourself with competent and hard-working people, and you will succeed". And with that I couldn't agree more.

    --
    -R
    1. Re:iPod? by Anonymous Coward · · Score: 0

      Choosing style over functionality is a good thing when one is selling to a market to whom style is more important than functionality. The entire fashion industry is based upon this premise, hence all those expensive clothes that fail to protect one from the environment, shoes which are difficult to walk in, and bags without the capacity to hold more than a couple of small items. People who won't still be living with their parents at fifty, or don't aspire to a trailer and hunting racoons with a Wal-Mart-bought crossbow on Sundays, snap this stuff up depite its high cost. And it is this market that Apple have successfully tapped because they realised something that no other music player manufacturer has caught on to: people _wear_ iPods as well as listening to them.

      So geeks can sit in basements arguing endlessly about the iPod not having user-replaceable batteries, failing to play OGG-VORBIS files, using a proprietary DRM that is different from the proprietary DRM in WMA files, etc., etc., without having any effect whatsoever on the iPod market, which isn't buying them for their technical specifications. iPods outsell everything else put together for one reason: they're the only music player that you can wear without being written off as a sad lame-O dweeb who everbody avoids because they don't want to talk about Linux, exoskeletons, Quake-3, and the possibility of life on Titan.

  117. The Difference Between Average and Good by frenchs · · Score: 1
    The Average Coder
    total = 0;
    for(int i = 1; i < number; i++) {
    total += i;
    }
    The Good Coder
    total = (number*(number+1))/2
    The good coder knows that when number gets large, the iterative version is a bottleneck because it is O(n). Using the other method is always constant time. Maybe it's possible that the average coder might stumble upon the second method at some point, but highly unlikely it would be their first instinct.
    1. Re:The Difference Between Average and Good by jjohnson · · Score: 1

      But would the good coder know this bit of math without having learned it, either from a book or in a CS class? I doubt it. No one "stumbles" across mathematical proofs.

      --
      Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    2. Re:The Difference Between Average and Good by russotto · · Score: 1

      As a student, Gauss famously stumbled across that one. And all good programmers know the anecdote.

    3. Re:The Difference Between Average and Good by Anonymous Coward · · Score: 0

      Apparently the "good coder" was in such a rush to post the new trick he learned today in middleschool that he forgot a semicolon, and his program won't even compile! *grin*

      As for the comment about the former being "bottleneck," that depends entirely on the program in question. If your program does it exactly once, then it doesn't matter which method you use. However, if you're going to be doing it in a tight loop and you've empirically determined that the loop is running too slow, then you may be well served to use the latter to speed things up.

    4. Re:The Difference Between Average and Good by The+boojum · · Score: 1
      And the Really Good Coder would have changed it to:
      total = number * ( number - 1 ) / 2
      Gotta watch those boundary conditions!
    5. Re:The Difference Between Average and Good by king-manic · · Score: 1

      The Average Coder
      total = 0;
      for(int i = 1; i

      Both your coders forgot to throw an exception or avoid dividing by zero. I think you should fire your HR manager.

      --
      "There are more things in heaven and earth, Horatio, than are dreamt of in your philosophy."
    6. Re:The Difference Between Average and Good by Anonymous Coward · · Score: 0

      total = sum( range( number ) )

      logic and simple in python

    7. Re:The Difference Between Average and Good by Anonymous Coward · · Score: 0

      Except it is dividing by 2, worse case 0*(0-1)/2=0 no probs.
      . :)

  118. IQ for Outsourcing by Anonymous Coward · · Score: 0

    Interestingly enough, this may be the reason why outsourcing projects fail often http://www.isteve.com/IQ_Table.htm

    According to this study India has a mean IQ of 81. Although to be fair, this may be explained by poverty or nutrition.

  119. Good programmers are hard to find ... by Anonymous Coward · · Score: 0
    They're hard to find, at least in the free software world. Have you looked at free code? It's really scary in a lot of cases. Off the top of my head, here are some things I've seen in freely available software:
    char *x;
    x = malloc(somevalue);
    x = "some string";
     
    --
     
    some_char = (char)NULL;
     
    --
     
    while(!feof(fp))
    {
      if(fgets(buffer, size, fp) == NULL) break;
    /* ... */
    }
     
    --
     
    (x(*p++) << somevalue) | (x(*p++) << somevalue)
    Now, of course, any old idiot can write crap and release it freely, but bad programmers exist in companies too. I was one at my first job. My C was horrible but they still hired me, presumably because everyone else's was even worse.

    The problem, in my case, is that I'm a wizard programmer (ha ha, and modest too), but I don't care to write code for other people. So I don't.
  120. Furniture by metamatic · · Score: 1
    Both might be perfectly functional in terms of parking one's botttom, but in a hundred years time no-one will be seeking out Ikea chairs in antique shops.

    That's what they said about 50s furniture and the Bauhaus.

    --
    GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
  121. Don't overlook good management by jt2190 · · Score: 1

    Lately, I've come to realize that management has a profound influence on code quality. Simply saying "let's just throw a bunch of great programmers at it" won't do. First of all, you're fighting the bell curve. On average, the programmer you hire will be... average. Well, not quite. They will likely "fit in" to your culture, and will perform about as good as everyone else on the team. Since management is responsible for the culture, it's essential that they do everything they can to make the team as productive as possible, otherwise, even the best programmers probably won't help, and if they do help, they'll probably last six months and then quit in frustration, having been made horribly unproductive.

    In fact, I'd argue that a team can be made far more productive just by changing the manager. (Like that'll ever happen.)

  122. A minor correction by btarval · · Score: 1
    1. You can have it done fast.
    2. You can have it done cheap.
    3. You can have it fully functional

    Now pick 2.

    Madam, you are an optimist. I daresay most engineering projects are lucky to get one. ;)

    --
    The best way to predict the future is to create it. - Peter Drucker.
    1. Re:A minor correction by tokengeekgrrl · · Score: 1

      Actually, I'm not much of an optimist these days since management at my job is always demanding all 3.

      But thanks for the laugh. :)

      - tokengeekgrrl

  123. Y'all are off base. by Anonymous Coward · · Score: 0

    planning makes a great product. - your sig is my sig's bitch

  124. Moron by HornWumpus · · Score: 2, Insightful
    You've just moved the skill to the algorythm designer. Is your next claim that all algorythms have been designed and written down in a book somewhere? If they are you should find a library even if you have to pay for it.

    In the process of moving the skill to the algorythm designer you've made the whole process that much worse. Now the algorythm is being designed by someone who likely has'nt written much code with the current generation of tools, losing all sort of optimizations that CompSci (with a math view) people just can't see.

    Programming is an engineering process. In engineering you always operation with incomplete information. If you pretend to have complete information you will screw yourself.

    IMHO all self described 'star' programmers should start their careers working for a couple of years maintaining other 'star' programmers work (by that I mean crap code written by someone who thinks their shit don't stink). Arrogant little shits should not be ALLOWED to do design untill they learn humility. This is best accomplished by throwing them into a project that they could not possibly complete unassisted. 'hello world' is usually close to complicated enough.

    Call it paying your dues, or call it completing your education.

    --
    John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
  125. Revelations chapter 42 by Hosiah · · Score: 1

    And the voice did thunder from on high, and spake, "Yea verily, a handful of trained, competent workers can produce better code than 100 Elbonian crack monkeys chained to keyboards, though the latter be content to recieve bananas as payment." And the Pointy Hairs of the Bosses did turn white with the fear of wisdom, and they were blinded by the enlightenment.

  126. Now I'm confused... by sleepingsquirrel · · Score: 1

    How can Joel hire good programmers if he insists on using Hungarian Notation instead of a choosing a decent language?

  127. Y'all are off base . . . by Anonymous Coward · · Score: 0

    thanks for deleting my last comment
    planning planning planning.

    -your sig is STILL my sig's bitch

  128. You get what you pay for by Anonymous Coward · · Score: 1, Insightful
    (Posting anonymously here to protect the guilty)

    I had a client who was upset about my hourly rates because he was comparing me to offshore programmers who were working for about 1/8 of my rate. But his project was a mess. There was no separation between the View and the Model (ie, there was HTML thoroughly intermixed with code). No one understood how the system worked. Code was being stored in database tables and then executed to render requests. The project was vastly behind schedule. In short, a lot of things were going wrong. He was just looking at the $/hour, not value/$. Value/$ is the only ratio that really matters. He's a smart guy, and has learned from his mistake.

    One good programmer is more than equal to ten bad programmers. A good programmer will deliver this:

    • Code that's an asset, something which adds real value to the business
    • Code that's a product, in the sense that it is ready to be deployed both in-house and in other businesses, instead of code that is interwoven with infrastructure
    • Code that is documented and comprehensible to others who get involved
    • An organization that has internalized sane design and coding practices to make all of the above routine, instead of unexpected
    Anyway, that's what I did for him, as much as possible. Hiring programmers who don't know what they are doing is like building a house with bad construction. It may look good but it's not worth anything.

    -----------------
    mobile search

  129. Your stock is rising, Joel. by gummyb34r · · Score: 1

    Nice article about nothing. Made me rewatch "Dead Poets Society" - the chart method of defining a good poet.

    By definition (Joel hasn't given any btw), a good programmer better than a pile of bad programmers. What is the price of a good programmer?

    Obviously, a show-me-the-money cynic is a bad programmer no matter how awesomely he/she codes. It would be damn difficult to fit them into "best working conditions" and recieve profit.

    The Boss needs some good programmers who would readily exchange some of their profit for the "Best Working Conditions". A couple drinks on a ferry with the boss praising their virtues (see article's photo) - that would do the trick. And the blog - PR is important for business. Also tell them the bad example of smb who pissed off programmers. The famous "corporate spirit technique".

    "My technique is the best. My style is much better, Don't you know who I am."

    Yes, yes, Joel, your stock is rising. And then comes M$ and includes its free version of the smart project management software with the stupid name. Amen.

  130. You fail it. by mlyle · · Score: 1

    Gotta justify your tuition to MIT? Anyone can take the professional engineer exams, just like you can take the Bar exam w/o having a JD first (like Frank Abagnale). (I worked with a state traffic engineer [yes, he passed the Professional Engineer exam... Hi, Ed) who's BS was in geography, not civil engineering).

    From the National Society of Professional Engineers:

    Licensure laws vary from state to state and are exclusively under the control of the individual state legislatures. But generally, the licensure laws for professional engineers require graduation from an accredited engineering curriculum followed by approximately four years of responsible engineering experience, and finally the successful completion of a written exam. Some states may waive the written exam on the basis of education and experience, but the trend is toward an examination requirement.

    Though many states allow non-engineering graduates to take the exam on the basis of a long term of work experience in engineering.

  131. DRM version of 'Hello World!' by Anonymous Coward · · Score: 0

    #include <my_proprietary.h>

    int main (int argc, char* argv[]) {
      my_printf("%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
      0x48, 0x65, 0x6c, 0x6c,
      0x6f, 0x2c, 0x20, 0x77,
      0x6f, 0x72, 0x6c, 0x64,
      0x21 );
    }

  132. But do you want to be a great programmer? by Anonymous Coward · · Score: 2, Interesting
    Been there, done that. I'm one of the few people to become a multimillionare as a programmer. One of my algorithms is in every computer on the Internet. My name is in some textbooks. I have an advanced degree in CS from one of the name schools. I hold several software patents, which bring in royalties. And I spent most of this evening writing real-time C++, even though I made enough to retire twenty years ago.

    After forty years of programming, was it worth it? Often I wonder. I've tried very hard to do good work, whether anyone cared or not. Sometimes it paid off. Sometimes it didn't. But always good work.

    But I haven't had much of a life. I spent the Summer of Love in a mainframe computer installation. I've never married. Had a few girlfriends, but wasn't really into it. I'm not into nerd culture, either; I hate Star Trek, and haven't seen the new Star Wars. Nor am I a gamer, although I get royalties from technology in games you've probably played.

    And not because I'm the sterotypical overweight geek. I work out, and took jazz dance for years. That's not it. It's just my destiny to program. Whether I want to or not.

  133. Re:Software application development comes down to. by scotty · · Score: 1

    Open source projects? Or commercial projects heavily rely on open source components? Software development model on FOSS is surely slow - lots of varying programmers working in their spare time that can sometimes take ages to achieve that holy grail of one point oh. However, once they reached it, it is usually very functional.

  134. duh. by Anonymous Coward · · Score: 0

    see topic.

  135. Re:Software application development comes down to. by scotty · · Score: 2, Informative

    I think Joel is arguing that, by having your average cheap programmers, you will *never* accomplish that "fully functional" stage, no matter how long it takes.

  136. Joel Heads a Vanity Software Publishing Firm by Anonymous Coward · · Score: 0
    He's a vanity software self-publisher. Just as some people pay so-called "vanity publishers" to publish their book when there's no proven market, so some people will pay to publish software. His company is funded from his stock options at Microsoft. The products his company makes are simple: one is a web content management system and the other is essentially a software development bug tracking system. Both are too expensive per seat for my taste (although hobbled free versions are available). There are better free solutions available, but Microsoft users don't know that, so some buy his products.

    He is a good writer. He's been an avid ASP user. Since he worked for Microsoft he knows something of their older culture.

  137. CS Grads: too complicated? by mveloso · · Score: 1

    I've found over the years that CS grads tend to make things much too complicated.

    Generalization is great, but it always seems that CS-degreed programmers always want to over-generalize and over-engineer their stuff.

    What does this mean?

    Let's say I need a function that adds two numbers. Pretty simple. Instead of just writing a function, CS grads tend to write a big function, body of functions, or a library that does addition, subtraction, multiplication, division, etc.

    Then they'll forget to check the arguments, and it'll barf.

    As an aside, I don't think I've ever on a project that didn't need to refactor code, even if that code was written with the intent that it didn't need refactoring. So why bother writing generalized, reusable functions that do more than you want when you have to rewrite them anyway next time they're used?

  138. Don't comment, UNIT TEST! by bADlOGIN · · Score: 1

    Good programmers ALWAYS WRITE UNIT TESTS so that they don't wast time weeding and pruning comments. Comments fall out of sync with code. Tests can't. If you can't figure out what between good test coverage and the code itself, it's time to rip it out and start over.

    --
    *** Sigs are a stupid waste of bandwidth.
    1. Re:Don't comment, UNIT TEST! by Anonymous Coward · · Score: 1, Insightful

      Good programmers ALWAYS WRITE UNIT TESTS so that they don't wast time weeding and pruning comments. Comments fall out of sync with code. Tests can't.

      Tests can fall out of sync just like anything else. Discipline is an important part of all programming; so is being permitted by management to do your job. Neither are guaranteed.

      Pruning redundant or false tests out of the test suite is usually just as much work as pruning redundant or false comments out of the code.

      If the test is for a feature that no longer exists, it needs to be deleted at the time the code is changed.

      If a comment is inside a function that no longer exists, it is automatically deleted.

      Tests can't replace comments; in fact, a good test suite is itself often commented.

      You need comments tying the test to the actual business rules it's attempting to verify, explanations for assumptions underlying the test, and how any magic numbers listed in spot checks were generated, and a justification as to why they're the correct value.

      If your test code just says that foo() returns "bar" when called with "baz", but doesn't say why that's the right behaviour, it's not a very maintainable test.

      In short code needs comments. Test augment, but do not replace, the need to explain your code.
      --
      AC

  139. Expensive programmers != good programmers by EmbeddedJanitor · · Score: 1
    There is an argument that cheap implies crap and that expensive implies good. What rubbish!

    A very good programmer in China, India or Australia will cost less to hire than a crap programmer in Silicon Valley.

    --
    Engineering is the art of compromise.
  140. Good programmer? by ms1234 · · Score: 2, Interesting

    What is the definition of a good programmer? Someone who can write flawless code? Someone who can think up a solution fast? Someone who can look at the big picture and design the code and solutions to fit the big picture?

    1. Re:Good programmer? by klang · · Score: 1

      All of the above..

    2. Re:Good programmer? by antispam_ben · · Score: 2, Insightful

      What is the definition of a good programmer? Someone who can write flawless code? Someone who can think up a solution fast?

      Excellent qualifications.

      Someone who can look at the big picture and design the code and solutions to fit the big picture?

      No, this is bad. Looking at the Big Picture is the manager's job, who can't let a Mere Programmer, even a Good one, do that.

      --
      Tag lost or not installed.
  141. undoubtably right by dark+grep · · Score: 1

    While the article is undoubtedly right in everything it says, the conundrum comes in finding 'only the best programmers' which of course presumes there are good programmers to which the 'best' are better. Sadly, finding a good programmer is something almost impossible, at least in Australia, and therefore the 'best' of a very mediocre lot, is still pretty damn mediocre. Oh sure, there are many programmers who _say_ they are good. But any code you would care to inspect has one or more major failings. It is either a) a hack of someone else's working code with the comments removed, and can not be supported by the programmer b) buggy and inefficient as hell c) the coding is so obtuse the writer can't even understand it all any more, and all to often d) all of the above. And yet, this does not prevent the so called 'best' programmer for holding out their hand for a six figure salary, working a 2 day week (sure, we all know what 'working from home' really means', and through their care-less attitude contributing to the demise of every company they work for. My tip on Australian tech IPO's is look at how many programmers are on the payroll, then divide their salaries into the start-up capital, and that will tell you how many month the company will last before another capital injection is needed. It is a very sad state of affairs if you ask me.

  142. How do you know? by SuperKendall · · Score: 1

    So have you used FogzBugz, or other products he makes?

    I ask because it could well be the software is fantastic. I don't know myself never having used it. I do know from the travesty that was the ICO release that having great software does not make you a dominant player. Just look at Microsoft (cheap shot).

    I would offer as evidence the continued success of the company that in fact, the software he produces is pretty good. Selling bug control software and making money at it? Let me rephrase that; He is a genius. Would YOU like to try selling bug tracking software when you are not Rational of some other mammoth company?

    I know from personal experience that good programmers really can be 10x (or more) productive. In fact not having bad programmers around gives you a boost by default as you are not cleaning up messes. So it's easy for be to believe what he's saying, I guess you just need more proof.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:How do you know? by killjoe · · Score: 1

      " So have you used FogzBugz, or other products he makes?"

      No and I don't need to either. The marketplace determines what is good software and what is not. It's a subjective thing after all. You may think a piece of software is brilliant but I may think it's poorly designed and a worthless pile or vice versa. take Gimp for example. Many people think it's an abomination but others swear by it.

      My opinion or yours does not matter. The marketplace determines what is good and what is crap.

      "I guess you just need more proof."

      My signature says "evil is as evil does", the proof is in the pudding.

      --
      evil is as evil does
    2. Re:How do you know? by Anonymous Coward · · Score: 0

      No and I don't need to either. The marketplace determines what is good software and what is not. It's a subjective thing after all.

      Ah yes, the flawless marketplace. You should really consider your argument a bit more. Nothing about the marketplace guarantees that better software will sell the most copies or garner the largest marketshare. There are a hundred other factors that go into that, and only one of them is the quality of the software. Defining the best-selling software as the "best" software is just ridiculous. If I got a job as VP of a major corporation because my dad is on the board, does that make me the best person for the job since I beat out all the others? Not a chance. Same kind of thing applies to the marketplace.

    3. Re:How do you know? by ytpete · · Score: 1
      My opinion or yours does not matter. The marketplace determines what is good and what is crap.

      The almighty marketplace says Internet Explorer is ~10x better than Firefox. Opera is obviously utter "crap." Windows is clearly the best OS ever made. And Quark is the best page layout app available.

      Point is, there are lots of factors at work that may prevent the best product from dominating the market. Joel's products may not be top sellers due to poor advertising, or competitor lock-in, or overpricing---I don't know. But to write them off as crap just because you haven't heard of them seems premature.

      Anyway, his small company in NY likely doesn't have the best programmers out there, so it's not a good case in point. I'd say Joel's argument is sound whether his company is or not.

    4. Re:How do you know? by Shaper_pmp · · Score: 1

      haaaa hahahahahaha.

      I'm sorry, I'm sorry, you're right - everyone knows the best software is determined solely by market share. Especially with concepts like "monopoly", "de-facto standard", "must interoperate" and "FUD" around.

      Everyone knows markets are the perfect selectors of quality, right? That's why crappy Linux or *BSD can't break into the desktop, and Microsoft owns the world.

      Numbnuts.

      Market share determines who has the best marketing department, who was first to market, who's willing to abuse their position to extend a monopoly of theirs into other areas, or who has the most successful vendor-lockin. While ideally quality alone will win out, in practice it very, very rarely does, since any of the examples listed above generally trump mere "quality" on its own.

      I'd agree that markets would be a perfect selector: in a perfect world, all things being equal, if every piece of software worked in isolation and every purchaser was perfectly accurately educated in the pros and cons of evry product on the market.

      Unfortunately, this ain't going to happen any time soon.

      --
      Everything in moderation, including moderation itself
    5. Re:How do you know? by killjoe · · Score: 1

      "The almighty marketplace says Internet Explorer is ~10x better than Firefox. Opera is obviously utter "crap." "

      Yes, that's true. For most people opera is crap and IE is better. Sorry to tell you the obvious. Most people feel that way. I think firefox is better but your grandma disagrees.

      --
      evil is as evil does
    6. Re:How do you know? by ytpete · · Score: 1
      For most people opera is crap and IE is better. Sorry to tell you the obvious. Most people feel that way. I think firefox is better but your grandma disagrees.

      Well then this is where we differ. IMO, just because someone uses product X doesn't mean they consider it better than competitors Y or Z.

      Case in point: grandma is happy with IE merely because that's all she knows of. Show her Firefox and she may well say "wow, that's better!" There is plenty of anecdotal evidence to that effect, and little to the contrary. To me, the conclusion isn't that Firefox is "crap," but that (a) maybe it needs better marketing, and (b) Microsoft has an unfair advantage in this market. Vendor lock-in is another example where someone may prefer X, but uses Y instead---since the cost of switching is too high.

      One final point. If the market alone always chooses the "best" product, why do virtually all modern societies regulate their markets?

  143. Re:Software application development comes down to. by Anonymous Coward · · Score: 0

    Cheap and fully functional = means it will take a long, long, long, long time for the average and inexpensive programmers to build it

    Even the average programmers would require at least an arm and a leg, when hired over a "long, long, long" period of time.

  144. That's such a bunch of bullshit by melted · · Score: 4, Insightful

    First of all, a good dev is not necessarily faster than a bad one. The bad one will do just enough to get by, badly. The good one will make a fucking work of art out of the features he owns and it will be a pleasure to maintain and extend his code. This usually takes more time than "just enough to get by" approach, but this pays off time and time again over the years.

    Second of all, if you're five levels deep in the nested function, that's a good indicator that you're not good enough at software design.

    1. Re:That's such a bunch of bullshit by Anonymous+Brave+Guy · · Score: 2, Interesting
      First of all, a good dev is not necessarily faster than a bad one.

      That's a matter of perspective. If a "good" dev produces work that does the same thing in the same amount of time as an "average" dev, why is he a good dev? (Obviously this has to hold in the long run, and not just at the time of first writing, and usually this is where the difference lies. Clean designs and good documentation practices usually exhibit their greatest benefits during maintenance.)

      Second of all, if you're five levels deep in the nested function, that's a good indicator that you're not good enough at software design.

      Or that your algorithm is inherently complicated. I work with deeply nested logic all the time, yet the project I work on is very successful, and the developer team here has a good reputation. People who assume we're not good at design because we don't agree with their dogma annoy me.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    2. Re:That's such a bunch of bullshit by LaserSamuraiHead · · Score: 1

      ugh, tell that to the guy who originally coded what im' working on! I was just 6-7 levels deep in nested functions and it made me want to throttle myself with my keyboard wire

    3. Re:That's such a bunch of bullshit by TopShelf · · Score: 1

      My wife watches the TV show "Blow Out", about a salon in Beverly Hills, and the boss there actually had a good point while critiquing one of his employees:

      "Just do it right the first time, and that's quick enough for me."

      Obviously, this guy doesn't do pointy hair.

      --
      Stop by my site where I write about ERP systems & more
    4. Re:That's such a bunch of bullshit by fireboy1919 · · Score: 1

      Reputation doesn't mean that you write good code. Good code and bad code both work most of the time.
      Good code is just more maintainable and usually more flexible.

      Any n dimensional structure (including a logic block) can be transformed into a 2 dimensional structure. It's the basis for relational databases - which were created specifically to keep things like 6-level deep nesting from happening.

      Programming is about simplifying algorithms so that they are usable in a computer, and more importantly (usually) easier to maintain for people. If you can't or won't do a transformation as simple as that, you're not writing very good code - which may or may not mean that you're a bad programmer.

      --
      Mod me down and I will become more powerful than you can possibly imagine!
    5. Re:That's such a bunch of bullshit by Anonymous+Brave+Guy · · Score: 1

      Thank you for that lesson in Data Structures 101. Please now turn to chapter 2, where you will discover the concept of a graph, and the limitations that apply when you're working with them. Not every data structure is an n-dimensional array, and not all functions operating on data structures can be conveniently reduced the same way.

      Our algorithms are simple, for what they have to do: essentially they perform complex matching of subgraphs, an area of continuing mathematical research where there are few "good" solutions. Separating out the inner part of such a loop, which makes no sense out of context and has no independent value, into another function, would split a coherent whole algorithm into parts scattered between separate places. This would make it harder to understand and more difficult to maintain and adapt.

      I'd rather work with half a dozen nested loops that I can at least see on a single piece of paper than half a dozen nested function calls with the same complexity but less clarity.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    6. Re:That's such a bunch of bullshit by fireboy1919 · · Score: 1

      Not every data structure is an n-dimensional array

      Oversimplification of my argument. We're not talking about all of them, we're talking about nested conditions, which are logically equivalent to n-d arrays. Incidentally, any finite length data structure can be represented as an n-d array, as I'm sure you're aware.

      half a dozen nested function calls with the same complexity but less clarity

      You're proving my point...half a dozen nested function calls is harder to understand. Obviously you haven't selected a transformation that makes the algorithm easier to understand. That doesn't mean there isn't one.

      complex matching of subgraphs, an area of continuing mathematical research where there are few "good" solutions

      I used to work in image processing. Same thing: no good solutions, but a large solution space. Its a lot easier to think about a sparse matrix holding conditions representing different parts of the solution space than it is to do six level nesting.

      I can at least see on a single piece of paper
      I wouldn't consider the matrix-handling library part of the algorithm. If you don't, the end result will take up less space.

      --
      Mod me down and I will become more powerful than you can possibly imagine!
    7. Re:That's such a bunch of bullshit by Anonymous+Brave+Guy · · Score: 1
      We're not talking about all of them, we're talking about nested conditions, which are logically equivalent to n-d arrays.

      Now you're the one oversimplifying. We are -- are at least I am -- talking about nested code generally. In the sort of function I'm working with, most of the levels of nesting are either loops, or alternating loop-test-loop-test. You cannot reduce this to a finite series of independent tests known at compile-time.

      You're proving my point...half a dozen nested function calls is harder to understand. Obviously you haven't selected a transformation that makes the algorithm easier to understand.

      I was actually arguing against splitting out the code into separate functions (which is the usual dogmatic response I get from people who think quicksort is a difficult algorithm when I tell them about our deeply nested algorithms), so we appear to agree on this point. What nesting-reducing transform do you suggest instead?

      Its a lot easier to think about a sparse matrix holding conditions representing different parts of the solution space than it is to do six level nesting.

      No, it really isn't. All you will get is a lot of additional indirections via some sparse matrix type, which will cripple your performance and degrade the readability of the code, without improving either the complexity of the logic required or the clarity of the implementation.

      Trust me, this is what we do. The entire company is based on libraries that are effectively a bunch of neat graph-based algorithms that no-one else worked out how to write efficiently enough yet. I work with some very clever people: I have an undergrad degree in maths and postgrad CS, and I'm still the office junior in terms of formal qualifications. The top technical guys are invited speakers at conferences. You get the idea. If getting rid of a large family awkward functions that none of us particularly likes was as simple as changing a data structure, we'd have done it a decade ago. :-)

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  145. programming isn't the only thing by doom · · Score: 1
    (1) technical excellence is nice, but clearly isn't the main determinant of success, is it? Plug in your favorite example. Mine is that Borland was essentially pushed out of the business by Microsoft.

    (2) The logic of this essay is amazingly confused... the tangent discussing the ipod essentially disproves his main thesis. He points out a very serious technical failing in a product which is evidentally successful for non-rational reasons...

    All of that said, spreading the word that "we only hire the best programmers might turn out to be pretty good marketing.

  146. Eeeeeeewwwww. by Samrobb · · Score: 2, Funny
    must drill into memory...
    Carmack==talent
    Romero==hotty ex-girlfriend

    Wow. I don't know what's more disturbing - that Romero was your ex-girlfriend, or that you thought he was hot.

    "Ladies and gentlemen, the captain has turned on the 'Don't go there' sign..."

    --
    "Great men are not always wise: neither do the aged understand judgement." Job 32:9
  147. What to do with all the non-genius programmers by Anonymous Coward · · Score: 1, Insightful

    It's all very well to say that you should only hire the best programmers. But the fact is that these would be maybe ten percent of the available pool.

    Unless you are google you may well not be able to recruit the best.

    Another problem is it's very difficult to actually determine the quality of a programmer without hiring them and watching them work.

    For the rest of us who are not in the top 10 percent are we just supposed to pack up and go home?

  148. christ the almighty by stimpleton · · Score: 1

    True colors are revealed when one reads TFA:

    I quoteth:

    "When I'm not writing about software, I'm working on FogBugz: the smart project management software with the stupid name. Check it out now -- there's a free online trial. We just shipped FogBugz 4.0, a huge upgrade! Enter your email address to receive a (very occasional) email whenever I write a major new article. You can unsubscribe at any time, of course."

    --

    In post Patriot Act America, the library books scan you.
  149. Actualy. by autopr0n · · Score: 1

    I think Joel is counting "speed" as well as quality as greatness. But actualy his data dosn't support that. He says bad programmers will never be able to do what great programmers can, yet those taking 77 hours on an assignment do just as well as those taking 8 or so.

    --
    autopr0n is like, down and stuff.
  150. Good is better than bad?? by Nonoche · · Score: 1

    "His point is that a good programmer will simply create code of a quality that average programmers never can create"

    Captain Obvious strikes again!

  151. The problem with google by autopr0n · · Score: 1

    Is that if you don't know the name of a function, but know that it must exist it's very hard to get google to tell you what that name is. For example, use google to come up with a function that gets you the name of the user running a program on windows based on that programs PID (actualy, there are three functions you need to call to do this)

    --
    autopr0n is like, down and stuff.
  152. 2.5 dimensional space? by TheLink · · Score: 1

    You were Doomed...

    --
    1. Re:2.5 dimensional space? by aralin · · Score: 1
      You were Doomed...

      I had two hours a week course on Hausdorff measure and dimensions and it did not stop at this. You couldn't believe the things they do with these H-spaces. I guess it marked me for life. No child should ever take so much abuse, you know...?

      --
      If programs would be read like poetry, most programmers would be Vogons.
  153. Joel headed up the excel team at Microsoft by autopr0n · · Score: 3, Informative

    Joel was the lead developer of Excel at microsoft for a long time, and he also had a hand in the development of VBScript.

    Anyway, his articles are the main reason for his fame these days. His company also has a third product, CoPilot, that lets people fix software problems remotely.

    --
    autopr0n is like, down and stuff.
    1. Re:Joel headed up the excel team at Microsoft by Anonymous Coward · · Score: 0

      VBScript?

      *loads shotgun*

      and I read that as "fixes software problems randomly".... time for coffee methinks....

    2. Re:Joel headed up the excel team at Microsoft by heffrey · · Score: 1

      CoPilot is actually GPL VNC....

      Anyone know what clever things he's added?

      We tried FogBugz but is was rather naff in my view. I think we should judge his writing on its own merits (it's very good) and judge his software on its own merits (it's rather lame).

      I just read the compilation of (other people's) SW writing that he put together (Introduction to Best Software Writing I) and it was extremely good. Also his UI design book is a fine book.

    3. Re:Joel headed up the excel team at Microsoft by mpcooke3 · · Score: 2, Funny

      and he also had a hand in the development of VBScript.

      Perhaps thats why he now says companies should hire competant programmers.

    4. Re:Joel headed up the excel team at Microsoft by Anonymous Coward · · Score: 0

      Where the hell did you get that from? He didn't head up anything, he had a brief stunt on the UI team then left.

      Why on earth he refers to himself as a "usability guru", I'll never know. The articles and pompous title are designed to do one thing: market his software. The rest is bullshit.

  154. Re:Software application development comes down to. by fbg111 · · Score: 1

    Cheap and fully functional = means it will take a long, long, long, long time for the average and inexpensive programmers to build it

    It could also mean having a single, or small group of, exceptional programmers do it. For a complicated project you'll get relatively cheap (compared to having a large team of exceptional programmers), fully functional, and a long timeline.

    --
    Flying is easy, just throw yourself at the ground and miss. -Douglas Adams
  155. What is the point? by Anonymous Coward · · Score: 0
    What makes a good programmer a good programmer? Better than the average programmer?

    She can write better code (amongst other things). It (almost) lies in the definition. So man, what's the point?

    His point is that a good programmer will simply create code of a quality that average programmers never can create.


    Ah, that's the point! What a great insight.
  156. Cisco knows it by wilsoniya · · Score: 1

    Sometimes fancy schmancy modular access routers and self-defending networks just can't defend against an idiot at the helm... see here for details. -m

    --
    I can't remember the last time I forgot anything.
  157. I can tell you why he misses it by _that_ much. by Joseph_Daniel_Zukige · · Score: 1

    (Think of Smart showing you the quarter-inch.)

    Look at the graph on COMPRESS01. He says

            There's just nothing to see here, and that's the point.

    I look at it and I see a number of things:

    The median time spent ranges from the bottom scores to the top.

    The nearly top scores range from close to the least time spent all the way up to the most time spent.

    The median scores nearly reproduce the full range on time.

    Only the lowest scores seem to group closely relative to time, and they group at the median.

    And that doesn't surprise me one bit.

    What I would like to know is whether the guys with the high scores on COMPRESS01 tended to show reduced time on COMPRESS99. My guess would be that they would show somewhat reduced time, but there would still be a large range from quickest finish to slowest, some who finished COMPRESS01 quickly taking a long time on COMPRESS99 and vice versa.

    There is so much covered in those overview-of-applied-algorithms courses that it's impossible for any student to understand all the examples well unless the student comes in with ten+ years of wide ranging experience under his or her belt. Although, for example, the concepts of parsing might help with compression, the libraries the student might have built wouldn't.

    The high scores should all be considered the result of one of three things, gaming the system, luck, or spending too much time on the project.

    And that is very much how things work out in the real world. Spolsky can have his iPod.

  158. Re:Well, the dirty secret of software development by king-manic · · Score: 1

    I think talent is usually correlated with motivation and desire to succeed, more than anything else.
    You can become talented by practicing skills enough - the will to practice is all on you, though. I wasn't born understanding pointers or virtual functions, but man, when I discovered them it was so damn interesting I had to understand everything about them.


    No, a talent isn't somethign you can aquire. You can have a lot, or very little but talents are intrinsic. You can have a underdevloped talent, you can lack a talent, but you cannot simply aquire one if you didn't have it to start with. I can sing poorly, I sang well before but my talent was underused and is not under developed. My sister can't sing at all, no matter how much she tried, it wasn't her talent. Motives and desires don't help if the natural ability is lacking. Some people think, eat, and breath algorithms, some people struggle with recursion. It's about the different make up of our brains.

    --
    "There are more things in heaven and earth, Horatio, than are dreamt of in your philosophy."
  159. unfunny cat? by Anonymous Coward · · Score: 0

    I can't really agree with Joel. That cartoon cat was really funny sometimes.

  160. Way to simplistic by aCapitalist · · Score: 1

    First of all, Joel's metric of what is a "great" programmer seems to be how fast they can crank out code.

    So is programmer Mike really a great programmer if he's cranking out a thousand lines of code a day, but its unmaintainable spaghetti code, and he has a personality disorder so when his girlfriend dumps him he goes AWOL for a few weeks, and he doesn't get along with others, and his domain knowledge is limited to being a "great" programmer for certain types of projects....?

    I call bullshit on his drivel.

  161. He might be right about programmers but ... by Anonymous Coward · · Score: 0

    ... he is a total moron in regard with the movies and iPod :)

  162. Re:Software application development comes down to. by Anonymous Coward · · Score: 0
    1. You can have it done fast.
    2. You can have it done cheap.
    3. You can have it fully functional

    Now pick 2.
    Please note that you can take at most two of them, since long, long, long, long time of development won't be cheap in any circumstance.
  163. Social skills by pjunold · · Score: 2, Interesting
    It seems to me that the most crucial skills of a good programmer aren't even mentioned the article - the social skills.

    When working in a group it's the productivity of the group that counts - not the amount of code that a single member can dish out. And to a large degree I find the group productivity to be unrelated to the individual coding skills of its members.

    A good programmer helps develop an atmosphere where:
    • It's encouraged to ask for and give help.
    • It's encouraged to ask and give design advices.
    • It's encouraged to be proud of something clever you made, demonstrate it at the whiteboard and expect your fellow developers to listen.
    • It's encouraged to criticize the work of others in a positive way.
    A bad programmer then? The guy sitting in the corner who thinks he's a genius(and accordingly don't need no help from anyone) and don't want to admit he's been stuck with the same problem for days. I have zero patience for such wizkids.

    Of cause I'm just your average XP hippie...
    1. Re:Social skills by Blitzenn · · Score: 1

      "A bad programmer then? The guy sitting in the corner who thinks he's a genius(and accordingly don't need no help from anyone) and don't want to admit he's been stuck with the same problem for days. I have zero patience for such wizkids. "

      That doesn't make that guy a bad programmer, just a bad employee. Someone needs to noodle whip that person into understanding how to problem solve in an appropriate manner. That is a management issue. Dismissing such talent because of poor management skills, is missing real opportunity and possibly great success. I will grant you that there are individuals that will not tolerate being managed. I would agree with you that I too, have no patience for the like of those individuals, no matter how smart or talented.

  164. Speaking from experience... by Wonderkid · · Score: 2, Interesting

    ...it depends on the size of your company or budget. If you are a small organisation, you need experienced, honest, reliable and hard working programmers - because you cannot afford to wait for them to become good, assuming they have the potential in the first place of course. However, a large company can afford to assign less experienced engineers to less critical tasks (and even send them off to college), while allocating the top programmers to mission critical projects.

    --

    O'WONDERWe're working on it.

  165. Reuse of code by Anonymous Coward · · Score: 1, Interesting

    Aren't the good programmers supposed to write easy to reuse code which can be used by less experienced coders to implement?

    Some superguru perl coder writes an snmp application from the ground up in 2 weeks. The less experienced perl coder uses the modules available on cpan and fixes the job in a day.

    Just a thought.

    1. Re:Reuse of code by cr0sh · · Score: 1
      AC, you are right, but at the same time, you contradict yourself: First, you say that a good coder writes modules to be reused by less experienced coders. Then you say a great coder writes something from the ground up, while the less experience uses already written modules.

      I would say that a truely excellent programmer does not employ an NIH attitude towards projects, but rather leverages already developed code when and where he can. Time is wasted if world has to be rebuilt from scratch each and every time. You would never see a mechanical engineer designing a car say "these standard metric nuts and bolts just aren't good enough, I am going to design some new ones based on e" - he would be fired instantly.

      It makes no sense that a better coder would write modules for lesser coders, but then turn around and not use those same modules himself. Indeed, what you see in real professional programmers is that they typically have a toolset of pre-built modules from past projects, built and refined over years of experience. Furthermore, what you also see is that in the case where a module may have a bug or not work up to the performance needed, the professional programmer will go in and fix that module. Provided the module is encapsulated as a "black box" environment, the calling code should not notice anything, other than a gain in performance.

      In the case of CPAN and Perl (or PEAR and PHP, etc), this ultimately works to everyone's advantage, both professionals and average coders alike, simply because by including the improved versions of the modules they are using, everyone's applications become better. A rising tide raises all ships, or something to that effect...

      --
      Reason is the Path to God - Anon
  166. Yeah it does !! by sachu · · Score: 1

    especially the ones who read /. regularly :)

  167. Interesting read by Anonymous Coward · · Score: 0

    but garfield is funnier than sienfeld, and the ipod is not that great.

  168. Uh, don't hate me, please. by Anonymous Coward · · Score: 0

    But your simpul and logick code is linear in both space and time.

  169. I agree with the data by Goodbyte · · Score: 1

    I spent some time as course assistant correcting assignments from an introductional course in functional programming. All students attending the course has programming experiance from java before, and to pass the course four programming assignments had to be completed before deadline and validated (by me). Now the time students reported they used for each assignment ranged from 6h to 60h and then a fair amount of the students had corrections to make before they passed (usually not the ones reporting 6h of work)

  170. You don't mean 'coder', but... by antispam_ben · · Score: 1
    rather a Program Designer or "Software Engineer" (whatever that means, and it's on my resume!). When I see the word 'coder' I think of someone with little experience.

    Where an "average coder" might write the original code:
    total = 0;
    for(int i = 1; i < number; i++) {
    total += i;
    }
    A "good coder" might write:
    for(int i = 1, total = 0; i < number; total += i++);
    but a "good coder" is not neccesarily a good "software designer" or whatever title one might have, who would step out of the loop, see what the code means, and swap out the iterative solution for an algebraic solution if appropriate.

    Someone "fixed" the algebraic solution, but it appears to me it is correct, and it's the iterative solution that must be fixed by replacing
    i < number
    with
    i <= number.
    --
    Tag lost or not installed.
    1. Re:You don't mean 'coder', but... by maxwell+demon · · Score: 1
      Well, your "good coder" actually introduced a bug: Now he doesn't add up to the outer variable total (the declaration of which is not shown in the examples), but declares a loop-local variable with the same name. That't not what I'd expect from a good programmer ...

      Actually a really good coder would write it as
      total = number*(number-1)/2
      if he can prove that this won't overflow, and something like
      total = (number % 2)? (number-1)/2*number : number/2*(number-1)
      otherwise (if this one overflows, the original loop does so as well).
      --
      The Tao of math: The numbers you can count are not the real numbers.
  171. This is orthogonal to qualification of programmers by varjag · · Score: 1

    I've seen plenty of mediocre developers with quite inflated egos, and enough of great programmers doing their job without much fuss.

    The article has focused on the aspect of technical skills. Personal qualities and motivation are important, but they don't correlate that much with technical excellence, or lack thereof.

    --
    Lisp is the Tengwar of programming languages.
  172. In fact you really CAN have BOTH "qualities" by Anonymous Coward · · Score: 1, Interesting

    Actually this, like many other Slashdot posts, tends to look at the matter from a very enclosed US/Western European point of view.

    In fact, there are many huge companies making billions and billions of dollars that will go to India or a struggling Eastern European country, and hire GREAT programmers/gurus for something like 10 times less money than their peers working in the headquarters.

    I find this insulting for both programmers: one is forced to work cheaper or even loses his/her job, while the other is paid way less even though they may be working for the same company, and producing the same quality/ammount of code.

    Just my 2 cents.

  173. Take a look at Siemens by Anonymous Coward · · Score: 1, Interesting

    If you don't believe it, take a look at Siemens.
    They have like 45k of developers (more then Microsoft or Oracle, if I'm not mistaken) and I don't think that many of you can name some good software product that came from Siemens.
    Being a Siemens employee I can tell you that things are quite the opposite of what Joel believes software development should look like.
    On the other hand Siemens is so mind bogglingly big that perhaps there are departments for which the above does not hold. It also means that they can sell crappy software.

  174. Meh... 3000 lines are for pussies by redeye69 · · Score: 1

    I dropped a bunch of controls onto a WinForm, gave them some properties and VisualStudio wrote me a 4000 line method in microseconds...

    --
    Without precision, my life would be imprecise....
  175. Re:Software application development comes down to. by Anonymous Coward · · Score: 0

    I wish more employers thought this way.

    It is such a beneficial relationship. You hire a less experienced/qualified person to do the sort of simple non-critical tasks which are nonetheless important to allowing your project to progress and you pay them an awful lot less.

    The employee gets to gain valuable experience within the industry and will be grateful for the opportunity.

    The employer doesn't waste money on employing expensive staff for simple tasks and frees up their really "good" programmers from doing drudgework.

    I don't think the King David metaphor from the article holds true but matching your employees skills level to the job they are doing is just common sense.

  176. Other news by Frankie70 · · Score: 5, Funny

    In other news,
    1) Good Carpenters build good furniture
    2) Good Architects architect good structures
    3) Good Authors write good books

    1. Re:Other news by Blitzenn · · Score: 1

      What you wrote is humorous. It is so true too. Why can't people see the same thing with coding? It is beyond me that they seem to want to apply the 'more is better' principle to programming than any quality standards at all.

    2. Re:Other news by nexxuz · · Score: 0

      When I was workong as a carpenter last summer one thing that was alwas said was "We're being paid for our craftmanship not our crap man, s--t"

      --
      I love random hex numbers! Just like this one, 09f911029d74e35bd84156c5635688c0.
  177. Silly asumption by YeeHaW_Jelte · · Score: 1

    He seems to make a unspoken assumption throughout the whole article, and that is that whoever does it quickest does it best. I find this strange a pretty strange assumption. Especially when he goes on with all the product examples where obviously not the speed of the development was essential, but the quality of the end product. Good quality needs a lot of creative thinking and that just costs a lot of time. Any ole programmer can hack together a script that does a certain task; taking a step back and actually thinking about the bigger picture takes time but in the end yields much better results.

    --

    ---
    "The chances of a demonic possession spreading are remote -- relax."
  178. Is it just me... by evil_one666 · · Score: 1

    Is it just me or is Joel on Software reeeeeeeeeeeeeaaaalllly annoying? The man seems like a bit of an egomaniac, and a Windows apologist to boot.

  179. Not even nearly by Shaper_pmp · · Score: 1
    Congratulations - you've just espoused the mindset that leads to Windows, Visual Basic, Lotus Notes and the like, and one which will never, ever lead to Mac OS/X, Linux, Firefox, *BSD or Perl/Python/PHP. Which of these groups are more generally known to be high-quality, stable, robust and interoperable?

    Spolsky's writing from the perspective of a small development house, so he's not separating "design" from "implementation" - since they're often done by the same person/people it's all included under his catch-all "programmer".

    I personally would be more likely to use the word "developer", but that's just his phraseology.

    You can self-evidently get away with having a few "just average" programmers around. In fact, it's possibly a good idea since truly talented hackers tend to get demotivated when given shitty, trivial or uninteresting jobs to do.

    However, to suggest that developer-skill doesn't matter at all is insane - who designs and develops the "processes" you're talking about - non programmers? Then (empirically) they're unrealistic, buggy and prone to security holes. People with any experience of programming? Then they're part of what Spolsky calls his "programmers".

    You might also notice that:

    • Single, monolithic systems are generally buggier/more complex than small, efficient toolsets.
    • Design-by-committee is universally reviled as a Bad Thing.
    • In Windows and the like, security holes and serious bugs are more often things like buffer overflows (individual programmer errors).


    Which are all symptoms of poor programmers working in large groups, rather than one (or a few) talented individuals implementing a clear but extensible vision.

    "Software should not be made by programmers, but processes. It's like talking about how you can build a better building with quality bricks."

    Not really. It's more like saying you want your walls to be made out of brick rather than paper. Paper walls might be easier to work with and cheaper, but there's a reason we use bricks to build houses.

    And yes, you can build a monstrosity out of bricks, but you can also do it out of paper - at least the brock version will be stable, hardwearing and not prone to collapsing in the first a slight wind.
    --
    Everything in moderation, including moderation itself
  180. Good analogy by Anonymous Coward · · Score: 0

    I heard this great analogy somewhere else, I don't remember where:

    How many eight foot pole vaulters do you need to scale a ten foot wall?

  181. What the fsck? Joel born l337? by janit · · Score: 1

    He's had some good articles. This one starts nicely, but ends up being full of metaphors and the EXCELLENCE OF HIS IPOD. Also... He does not seem to take learning into account. Was he really born with his l337 sk1llz built-in?

  182. what? by Mungkie · · Score: 1

    everyone knows a million monkeys are better than one programmer!

  183. Re:Software application development comes down to. by Anonymous Coward · · Score: 0

    These are the same exact boundary conditions my boyfriend delineates when I ask for a good ball-licking.

  184. Re:Software application development comes down to. by ebyrob · · Score: 1

    Keep in mind... "good" doesn't necessarily mean the same thing as "experienced". She may still be very bright even though she's new to programming, in which case she's still "good", she just has a lot to learn.

    After all, none of us were born with C compilers embedded in our skulls...

  185. And get catastrophe code like this? by Moraelin · · Score: 2, Interesting

    Being good and experienced at programming doesn't just involve getting the code done and compiling. It also involves having some clue about stuff like security, good design, and generally knowing a lot more than just how to printf("hello world.")

    The corporation I work for had at some point decided to replace an existing, working system with a monstrosity that had more buzzwords. So a team from a BIG corporation contracted the work, and took a couple of years at it, until finally the project was scrapped.

    By the time it was scrapped, the code they had produced, although it did compile, had major problems, including fatal security issues. (And it also needed a cluster of two dozen servers to serve the same number of users as the old system did on 1 server. And took several hours to even start or stop. Literally.) Among other problems:

    - they consistently assumed that the _only_ way to reach a page was to click on a link, so they didn't have to check rights again when rendering it. The user wouldn't have gotten the link to it, if he didn't already have the rights, right?

    Wrong. By such trivial means as just editing the user id in the URL to 0, you could become super-user or change anyone else's password. (E.g., the super-user's.) And basically gain full admin rights to a corporate site.

    - they failed _repeatedly_ to quote text displayed on the site. So you could simply type some JavaScript code in a text box, and have it execute (e.g., on mouse-over) in the browser of whoever views that post or offer. Again, one possible and demonstrated use was to steal or change someone's data, including an admin's.

    - they failed _repeatedly_ to quote text used in SQL queries. So basically you just needed to input something like '" OR "1"="1' in the search field, and you'd get all the records on the system.

    - they failed to even conside "non-repudiation". If a user cancelled their account, a cascaded delete would ensue, deleting _all_ the data about that user or from that user, including contracts. It was suddenly as if that user had never even existed, ordered or paid anything.

    Etc.

    We're talking about a B2B e-commerce site, with contracts worth millions, not about someone's blog about their cats. And it had gapping holes bigger than the goatse guy, for f**k's sake. As they wanted to ship it, it _literally_ allowed anyone to access any data and escalate their privileges to the max, in just a few kestrokes.

    _That_ is a problem with making software with a team of incompetent monkeys. It's not just that they take longer to produce the code, or that it might need more debugging. It's that they just don't have the skill or knowledge to judge (or even consider) the implications of the choices they're doing at each step.

    --
    A polar bear is a cartesian bear after a coordinate transform.
  186. Software houses that care about your life by sita · · Score: 2, Insightful

    The reason is as someone who has friends in both worlds rarely does the "software house" ever care about your outside life.

    We live in different worlds. I have no experience of software product companies that try to consume you. On the contrary, in my experience, software product companies that hire "good programmers" are conscious that they "good programmers" are often "high performers" in several areas that don't include work, and need to be to keep happy, and thus productive. I guess that is because the people who consequently hire "good programmers" are similar themselves (not necessarily programmers, but of the same general disposition).

  187. Great. by Anonymous Coward · · Score: 0

    whats your test for blocking idiot managers and marketoids from sneaking in?

    1. Re:Great. by Trillan · · Score: 1

      My policy would be to stop hiring managers -- there's a high enough percentage of idiots among them that there's no point. :)

  188. I disagree, twice I disagree by kbw · · Score: 1

    The evidence of the article is based on student assignements and a love of iPods. Some students know more about computing to begin with, some students have a better aptitude for programming, some students finish their assignments and others don't. iPods are beautiful. But this does not support the argument that good products need a team of really good engineers and good having good engineers means having good products.

    The software products produced (for the last 15 years) are often too large for a single person to produce. Let's face it, every software development team has a mix of experienced and inexperienced developers. The tasks are usually broken up in such a way that coordination is required to pull them together to make a working system. Ad-hoc ideas need to be accomodated, but these play merry hell with project timescales and costs. Clarifications of boundary conditions need to be addressed from time to time, usually from an external team or company. Support teams have their own ways of working. They may have their own tools and methods. Invariably, the product is supported or used in a different way than the designers/builders envisaged. Finally, you need to educate the junior members of the team thru experience and good practice (and time and money).

    The above all point to management. It's management that can make the engineers life easy (by resolving issues before or when they arrise) or hell (thru incompetence). You tend not to notice a good manager until he's away on holiday, then all hell breaks loose.

    You simply cannot built a team of experts. They'll always keep clashing intellectually. You have to head the areas with gurus, but need more subordiate people around them to make their ideas work. This applies to development, test and support.

    A brilliant programmer straight out of university tends to have no idea about building reliable systems or making the product more supportable. That comes with experience. Anyone can learn it, but yes some people are natually better and some are more willing to learn, all leading to better engineers. The knowledge has to be passed on from senior to junior, or learned the hard way.

    BeOS and Coherent are examples of good products at the right time build by talented engineers that in the end, failed commercially. I'm sure readers can think of other examples too. It simply is not true that systems built by good engineers are commercially more successful. (VHS vs. BetaMax)

    Microsoft's success is not based on brilliant engineering talent. Microsoft may have some excellent programmers, but you just need to try to interface with some of its subsystems, and you'll soon see that all that glitters is not gold. The operating system gained traction with version 3, which crashed regularly. And when it's not the OS, it's the apps. It is marketing brilliance that has let to their success, despite the products.

  189. Re:vaporware by Diabolus777 · · Score: 1

    I do have a point, we are liscenced.

    Our school, with IEEE boards and other universities (i think U Of Texas started the thing) made the curriculum expressedly for the purpose liability and warrantability. A body of knowledge was made (www.swebok.org) and everything is in place.

    --
    We should have been
    So much more by now
    Too dead inside
    To even know the guilt
  190. Doesn't work for most internal software developmen by nautae · · Score: 1

    For a couple of reasons:

    1) At the beginning of some new programming project desired by somebody on the business side, the programmer will frequently not have sufficient domain knowledge to assist in coming up with complete specifications. For example, I used to work for a company that maintained demographic and and circulation fullfillment databases for B2B pubs (everything from Information Week to Concrete Construction.) With the more complicated reports that business side people asked for, I couldn't foresee the ambiguities in the specifications until I began implementing them, since I had no particular prior experience in the domain. And the business side people didn't necessarily understand the notion of "precise specification."

    2) Speed matters. Even a couple of weeks can make the difference between a rousing success and so-so release in some instances. This is certainly true in the trading industry, where I work now.

  191. Re:Software application development comes down to. by Morosoph · · Score: 1
    Open source projects? Or commercial projects heavily rely on open source components? Software development model on FOSS is surely slow - lots of varying programmers working in their spare time that can sometimes take ages to achieve that holy grail of one point oh. However, once they reached it, it is usually very functional.
    You still need good programmers to have a hand in there somewhere. Their input might be minimal, but seeing where one's efforts can make a difference is part of what makes a decent programmer.

    If you've ever attempted to come to grips with others' spaghetti code, you'd see why bugs remain obscure. Good programmers solve bugs partly by refactoring, and partly by simply being less likely to code errors, so that their efforts are simply less likely to give rise to bugs whilst solving them.

  192. Drowning under a waterfall by Anonymous+Brave+Guy · · Score: 2, Insightful
    Is this a stupid or impractical way of doing things? What am I missing?

    Not stupid, but naive. Waterfall models went out with the 1980s, because they didn't work.

    If there's one great truth the software industry has (mostly) successfully learned in recent years, it is that successful projects must be adaptable, because requirements change. With the possible exception of things like military and medical projects, it's almost never helpful to fix absolute requirements up-front. Any project whose plan involves the words "finished before the first line of code is written" is pretty much doomed to failure before it even starts.

    Yes, get user feedback early and often. Yes, get someone who understands UI design to do the UI design, and have someone whose role is to co-ordinate the customer view and the developer view of the project. Yes, give the programmers a clear idea of what you want and letting them get on with providing it. These are all good things.

    But you have to do them more than once. Whatever process you use, whether you prefer lightweight or very formal, it needs to be iterative and go in cycles. Unless you're prepared to increase your overheads by at least an order of magnitude, nothing else works.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  193. Just wondering.... by Anonymous Coward · · Score: 0

    ... why this guy gets soooooooooo much love on Slashdot? Sure, he's clearly smarter and more insightful than the average bear, but c'mon!

  194. The Mythical Man-Month by craigw1701 · · Score: 1

    The Mythical Man-Month: Essays on Software Engineering is the best book on this subject. It says that 10 very good progammers will be faster/cheaper/produce a better product than the same 10 leading a group of 200. Even though its an old book, its one that still has alot of good info. http://www.amazon.com/exec/obidos/tg/detail/-/0201 835959/002-7964039-5475214?v=glance

  195. Unfucking believable by BlightThePower · · Score: 1

    Fine. Don't listen to a well-intentioned observation, continue to be the only "engineering" discipline that routinely fails to implement solutions to time and on budget. I must say its interesting, on Slashdot programmers are geniuses and artistes. In real life they are people who make make a hell of a lot of excuses. Funny huh. I'll let you get back to your Joel-sponsored circle-jerk.

    --
    Plays violent online games as: Nerfherder76
  196. Re:Silly reader by Blitzenn · · Score: 1

    " He seems to make a unspoken assumption throughout the whole article, and that is that whoever does it quickest does it best."

    Apparently you did not read the article. He states, in no uncertain terms, that this is not the case. You can find the following quote just below the graphs in the article. He even emphasizes the text to stress it.

    "The quality of the work and the amount of time spent are simply uncorrelated."

    He is making the point that a good coder is not necessarily fast and a fast coder is not necessarily good. I think it is more the case that most programmers out there do not fall into the category of 'excellent' or even 'good' and are threatened by such facts as this gentleman present, very thoroughly and quite well I might add.

  197. Re:Let's get 5 good tennis players against an expe by Anonymous Coward · · Score: 0

    One company that exemplifies your approach is Microsoft. There are some superb people working at MS, but a lot of the basic code is cranked out by drones, and this has resulted in notoriously bloated, slow, inefficient, and buggy software that's riddled with security holes. While some of these problems can be laid firmly at the door of designers, many, many others are obviously caused by sloppy coding.

  198. Not just programmers by ishmaelflood · · Score: 2, Interesting

    I really liked his attempt at analysis, and particularly liked his attempt to split out the higher quality coders.

    I used to run the mechanical engineering section for a small project. We used a lot of contract CAD guys. A good CAD guy was about 4 times more productive than an average one, and would cost 0-30% more, per hour.

    With engineers my experience is that the best engineers are roughly 4-10 times faster and more accurate than the average guy, and the bad ones have a negative effect on productivity.

    War story: two of us redesigned a system and saved 200 bucks per unit. We make 100 000 units per year. So that's $20 million a year.

    Somebody redesigned one of my parts, saving $0.30 per unit. We had to recall several tens of thousands of units because the new design was unsafe. Total cost in excess of 10 million dollars.

    I have seen parts with identical functionality. One was designed by an idiot and cost twenty bucks. The other was designed by a competent engineer. $3

  199. COUGH COUGH AHEM..... by Anonymous Coward · · Score: 0

    "In computing, the rapid advancement of cpu/system design yields faster machines every year"

    In electronic engineering, the rapid advancement of cpu/system design yields faster machines every year

    Computer science is a subset of electronic engineering

    Flame on!

  200. It doesn't matter if you are great... by Qrypto · · Score: 1

    if nobody knows the difference.

    Face it most employers couldn't tell the difference between a good programmer and a bad one, even if they adminisister some cookie cutter test during the interview process.

    Furthermore even if they thought they were getting a great programmer most wouldn't know what to do with them. In the end 9 times out of 10 there's a time crunch and all the advise the programmer gives (part of what make him/her great) goes out the window anyway. e.g. Programmer: "I really think we should <b>create</b> a specification for this application". Employer: "We don't have time, we have a new deadline and there is no money in the budget to develop a spec." Besides as long as it does something no one cares whats behind the scenes at the code level right?

    So in the end unless you have a great programmer running the company just hire the mediocre peeps.

  201. What a load of nonsense! by mrRay720 · · Score: 1

    >The elicist seem to forget that a company is not for making money. Its purpose is making money so that the society benefits from it!

    HAHAHAHAHA! What planet have you been living on? Xena? The only interest companies have in social enrichment is that a 90% unemployed population won't be buying their products. Beyond that they don't give a damn.

    >Lets say, theoretically, every company would only employ the best 10% of the people. Ignoring that some people may have multiple skills, that leaves 90% of the population unemployed! What a great thing to do!

    Well firstly, the logical thing to do is to ignore the "top X%" nonsense, and look at it another way. Employ from the top down until you get to a point where adding the increasingly less skilled starts becoming a hinderance instead of a benefit.

    Besides, there's no reason why the bottom 20% of developers can't get a job elsewhere. They can crunch numbers, pick up a broom, stack shelves, or whatever.

    If you are completely crap at your attempted porofession, either be unemployed, improve yourself, or try another profession.

    Oh, and if you're talking social responsibility - what is socially responsible about allowing and encouraging incompetent people into the workplace to hold everyone else back?

  202. conclusions and data seem totally unrelated by rp · · Score: 2, Interesting

    Joel Spolsky's article first bings up some findings from hard data:

        - programming seems to take almost arbitrarily long; there appears to be next to no limit on maximum time and deviation (except hard deadlines)

        - there is no correlation at all between the time used and the quality of the result

    The question is whether quality correlates with other variables than time, more specifically, with the programmer.

    So the next step should be: when looking at the scores of individual programmers, do we see consistency? Is there such a thing as a "good" programmer, who scores consistently better quality than the average programmer?

    Joel's report becomes a little ambiguous at this point. He selects "the top 25% programmers" without saying how. I'm confident he selected the programmers who took the first 25% of overall (averaged) quality scores. I do not believe he selected the first 25% of results for every exercise, but the wording doesn't completely exclude it.

    He reports that, collectively, these top 25% of programmers take almost exactly as much time as the rest (both in maximum and in deviation).

    He then leaves the data and starts about the difference between good and average programmers. This is a total non sequitur. Nothing he says about that difference is supported by his analysis.

    It might seem at first glance that the analysis supports the notion that there is such a thing as "the good programmer". But it doesn't. Joel doesn't give us any information on whether some programmers perform better than others. He looks at the ones that came out in the top 25% and *calls* them the "best programmers". For all we know, the quality scores were completely random and the programmers that came out on top just got lucky this time. To see if quality of code is correlated with the programmer writing it, we should see if there is any consistency in the difference between individual programmers' scores across exercises. Joel didn't do this. He committed the classical logical error of assuming what he wanted to demonstrate, namely, that there is a difference between "good" and "average" programmers.

    For now, let's gloss over this fatal weakness and go along with Joel's (plausible) hypothesis that there is such a thing as a difference between "good" and "average" programmers. We now come to the strong point of the article. Joel was, of course, hoping to find that the programmers who produced (on average) the best quality code were also the faster ones. But they aren't: they are just as slow as the average programmer.

    It's to Joel's credit that he doesn't hesitate to report these findings, since in my eyes they are fatal to the hypothesis he started out with.

    What these figures prove is that the good programmers (those with good results on average) are just as slow as the average ones. The difference in productivity solely consisted of the fact that the top 25% got better results - but that is not exactly surprising, since it is how they were selected.

    Amazingly, Joel draws the opposite conclusion: these same figures are supposed to demonstrate a 5-10 times speed difference between programmers! But that is only when measuring on individual exercises. It is completely unwarranted to draw any conclusions on the speed difference across exercises.

    OK, so we don't really see any difference in productivity. "But wait, there is more! (...) No matter how long (mediocre programmers) work, they never produce something as good as what the great programmers can produce."

    Um, where exactly did we see this? Did the data provide any evidence that some programmers never find good solutions? Nope. Do some programmers arrive at good solutions all the time? No idea. if they did, I would think they would also work faster than the average programmer, and they don't. SO again, Joel is pulling his statement out of thin air, and the relationship with the data is no more than suggestion.

    On the whole, an interesting, but flawed article.

    1. Re:conclusions and data seem totally unrelated by Alphabet+Pal · · Score: 1
      He selects "the top 25% programmers" without saying how.

      Obviously, by selecting the 25% who are asking for the most money.

      --
      Because you can't spell "slaughter" without "laughter"
    2. Re:conclusions and data seem totally unrelated by Lodragandraoidh · · Score: 1

      The key point I think you are missing:

      While it may be true that the output of a so-called 'good' programmer and 'poor' programmer are identical, the output's quality varies.

      What this means (using arbitrary numbers) is if a good programmer takes X iterations to finalize a deliverable, the poor programmer may take X * 10 (for the sake of argument 10 times longer) to produce something that can be deployed. In other words, most of the output of a very good programmer is useful, whereas most of the output of a very poor programmer is garbage.

      Even if it takes only two times or some fraction of time above 1 - over the course of many projects this will add up. The programmers who are good will be able to outperform 'poor' programmers over a fixed time span.

      The sad part of all of this is the attempt to discredit these kind of arguments tends to erode what ever leverage 'good' developers can use to get just compensation for their efforts - leading management to think their programmers are interchangeable and replaceable gears in a machine. This leads them to hire based on this assumption, and make decisions regarding outsourcing based on these decisions. This ultimately leads to mediocre software, cost overruns, and missed due dates.

      In a reaction to that I advise anyone who is now a 'programmer' to reinvent themselves as 'integrators', 'system developers', 'system architects' etc - expand your knowledge beyond a narrowly defined area to become more valuable to your employers/clients. Pursue higher education in your field (I would recommend a computer science degree to start off). Gain a deep understanding of everything surrounding your software - so you create better software and you also become a resource for hardware, network and operational considerations.

      Overspecialization is the death knell of your career.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
  203. perspective... by Tominva1045 · · Score: 1



    If one had a ferrari needing a tune up would he let the jiffy lube guys do it?

    If one needed brain surgery would he let the ear-nose-and-throat MD do it?

    Software development is no different. Anyone can create a static web page. It is quite another thing to create a multi-threaded, web-enabled, windows application.

    --
    Cogito Ergo Sum
  204. Re:Doesn't work for most internal software develop by Anonymous Coward · · Score: 0
    I couldn't foresee the ambiguities in the specifications until I began implementing them, since I had no particular prior experience in the domain.
    Which is why, to be a really good programmer, you need to be at least a decent analyst.

    At least in my domain, SAP. If you don't understand the fundamental model of how business data flows through the system, you'll produce garbage, and you certainly won't know that the person writing the requirements doesn't have a clue what he's talking about.

  205. so wait a second... by Anonymous Coward · · Score: 0

    Joel makes a statement not entirely untrue, does a fair amount of comparison between software and the iPod (he must have an iPod fetish) and its a "good read?"

    This article seems to be stating the obvious. If thats how one gets ahead in IT, I could have been doing that years ago!

  206. So true by Anonymous Coward · · Score: 0

    Say what you want about Joel and his articles, but once again I think he's hit the bullseye. Most of the things he says just seem like common sense to me.

    I can tell you that one place it really pays to have the best coders you can get is the games industry. At the studio I work at, our lead programmers are brilliant. They have experience and knowledge that I don't and I'll admit that I look up to them. These guys are the coders that can sit down for a few days without any distractions and come up with an awesome and flexible new system.

    Being a great coder isn't just about being able to meet the spec in the shortest time, it's about having experience, knowledge and insight to come up with great ideas and ways of going about things.

    I work daily with the code of a mediocre programmer, and it frustrates me to no end as it's full of bugs and isn't robust/flexible enough to do the things that we want to do these days. The difference between that code and the code that the leads put out is like chalk and cheese. Currently, about 75% of my job is keeping the old code patched up whilst I write a more robust and flexible replacement for it. It shits me to tears.

    Posting anon because I don't know if the former coder is reading this or not, and as anyone in the industry knows, it's a rather incestuous little cesspool :-)

  207. The simple answer by Safety+Cap · · Score: 1
    management at my job is always demanding all 3
    The solution is to reduce the scope (i.e., features). Then you can get the features that are left delivered on time and at budget.

    If they balk and tell you you're not getting any additional money, then tell them they're asking you to buy a $.60 Snickers bar, a $.75 M&Ms bag, and a $1.25 bottle of coke, but they only gave you $2.00.

    If they say you're not getting any additional time, then tell them they're giving you a (newly) pregnant mom and saying, "You can have as many additional moms as you need, just deliver the baby in 4 months."

    --
    Yeah, right.
    1. Re:The simple answer by tokengeekgrrl · · Score: 1

      Oh, I try to reduce the scope but I work in the public sector where there is no chargeback and everyone asks for everything because it doesn't cost them anything to do so.

      I like the candy bay analogy, though, I'll definitely be using that one, thanks.

    2. Re:The simple answer by Safety+Cap · · Score: 1
      ~ everyone asks for everything because it doesn't cost them anything ~.
      Ahh, but it costs 'em time and resources, both of which are finite. :)
      --
      Yeah, right.
  208. Bad programmer by codeboost · · Score: 1
    I'm a bad programmer and I'm proud of it. I rarely document my code and when I do, I document the most obvious parts of it:
    if (x <= 0) //is x positive or negative?
    This helps, because it adds frustration to people looking through the code. The goal of a bad programmer, like me, is to make sure the project fails, so that other people don't see how bad I am. Bugs are good. They take time to fix. Time is money. The more bugs you code, the more you get paid. It's also good to present missing features as bugs:
    - Sure it's finished, but there's a small bug in the startup routine. I'll fix it on monday.
    A bad programmer has to read a lot of tech books and articles to bullshit your employer with the complex tech language. Confusion creates opportunities for missing the deadline. By 6 months or so.
    Oh... I thought you meant "Hello World"... I have to rewrite the whole thing!
    A bad programmer is always busy and always has a list of unfinished tasks before him.
    Can't do that, I'm still working on the network code.. You know, we had a bug there.
    A bad programmer always knows that the project sucks and nobody will give a ratt's ass if it's out or not.
    Bad programmers always dream of working in a nuclear facility or shuttle control lab or something. The more damage you can create the better you feel aftewards.
    The absolutely worst bad programmer knows he's brilliant, he just doesn't give a shit.
    Bad programmers eventually open their software companies and end up creating Windows or something.
    1. Re:Bad programmer by jockeys · · Score: 1

      so then... would that make you the Bastard Coder From Hell?

      --

      In Soviet Russia jokes are formulaic and decidedly non-humorous.
  209. It's experience that screws up the system by dmorin · · Score: 1
    I agree completely that there are great, born-to-it programmers that are capable of creating things that "in it for the money" average programmers will never achieve.

    However, when you're talking about somebody who is maybe 2-3 years out of college versus somebody who is 15 years out, it becomes a much different question. Would you rather have an average coder with major experience, or a junior kid that shows flashes of brilliance?

    Personally I like having a couple of young, bright people on the team who want to be mentored. You just can't fill a team with nothing but that. It's the balance between the two that is most important, to me. I don't want a team of 20yr industry grumpy guys any more than I want a team of 2yr know-nothings.

    1. Re:It's experience that screws up the system by micromuncher · · Score: 1

      As a 20yr industry grumpy who is more up on current technology that most compsci graduates, I can definitely say it depends on individual merrit. I've been the "high priced consultant" on several projects that were low-balled and handed to bright kids out of school, ripping out "cool ideas" that just didn't work because they didn't have the experience to know better. At school, you don't get to work on multi-discipline, multi-person projects of any real scale. Greens tend to re-write everything themselves, have odd biases (like everythings gotta be open source, or this or that brand, or gotta be written from scratch.)

      So I agree. Its a balance - but the green need to be willing to learn as much as the grey need to listen to new ideas.

      --
      /\/\icro/\/\uncher
  210. Deadlines are killing quality... by Anonymous Coward · · Score: 1, Interesting

    From my experience, the lack of quality in programing comes from unreasonable deadlines. It is very rare in my professional experience that I have time to sit down, create a design, test the interface, build and document the software, test the software, make revisions, and then do some more final documentation.

    In most cases, someone says "we need something NOW", and it is a scramble to just barely come up with something working by the deadline. Documentation or testing are certainly out the window.

    And clients don't care about anything they can't see (meaning, they will have a 6 hour meeting on the color scheme of a web app, but don't care if the code is so convoluted that no-one else will be able to work on it without reverse engineering it). The sad thing is in the long run it costs them more time and money.

  211. Re:Software application development comes down to. by gedhrel · · Score: 1

    My experience with all too many developers is, "we can do it slow and expensive; hey, we'll throw in badly for free." :-/

  212. But... by $1uck · · Score: 1

    The future supply of "good programmers" depends on today's supply of cheap programmers getting work experience (and mentoring from today's "good programmers").

  213. You're all so cool by Anonymous Coward · · Score: 1, Insightful

    I once saw a survey that indicated close to 90% of licensed drivers thought they were above average. I've remembered that ever since, because it's a psychological phenomena that you can see everywhere.

    Such as this thread. Remarkable coincidence that _everybody_ who posted happens to be an above average programmer.

    1. Re:You're all so cool by wk633 · · Score: 1

      I read somewhere (no doubt on slashdot) that the skills required to recognize competence are the same skills that make one competent. So, incompetent people don't have the skills to know they are incompetent.

      The authors did acknowledge the possibility that they were incompetent, and just didn't now it.

  214. Good points. by 5n3ak3rp1mp · · Score: 1

    I'm in the second group. I spent most of some summers coding for fun in my early teens. I knew I was in a minority, but who can argue with intrinsic motivation?

    At college I didn't do too well at engineering calculus (memorizing taylor series and maclaurin series?? WTF is up with that??) and that was a requirement for both physics and CS majors (my first two choices) so I ended up a Psych major with a CS minor.

    In the end I enjoyed that decision as I not only loved the "wiring" aspects of the brain but I became much more "well-rounded" than the engineering school grads I knew (hey, I can document with correct grammar!), yet I kept my intrinsic interest in coding. Perhaps I cannot bang out a compiler or a compression algorithm... but I can talk to other objects that do that grunt work ;)

    I constantly run into people at work in the first group. They came to coding in college, or even later. They are the "get it done" types, and when they go home, the last thing they want to do is sit at a computer. Perhaps they tend to "get it done" faster than I do, but they do not appreciate what "beautiful code" means, and I often have to clean up their messes. The other day I had to explain to someone why the output of one MD5 implementation cannot possibly be different from the output of another MD5 implementation... I didn't even bother to bring up about how MD5 is considered less safe these days, as these people do not read technical blogs in their spare time like I do. I have to butt heads even over such simple decisions as grouping related preferences in the UI together, just because it will take 5 more minutes. I care about users as much as architecture. "Getting it done" is important, but not to the exclusion of all else. I would rather communicate to the client "look, i'm almost done, but I am really into this and I would like to put some extra polish on."

    Not so, the first group...

    I find that people in the first group are also heavier sticklers about timeliness. I would prefer to arrive late and work late, like your proverbial hacker. These folks are more concerned about keeping up appearances and catching the 8:15 train every day.

    I'm still casually looking for a job (or creating my own job...) where I work with some people in the second group, but I keep finding myself surrounded with first-groupers in the corporate world.

  215. Re:Software application development comes down to. by TheLinuxWarrior · · Score: 1
    If only managers would realize that this formula pretty much applies to any IT project.

    You want it done yesterday? No problem...fork over extra cash and we can expedite everything. You want it on budget? Then it will take as long as we told you it would take.

    You can't have it both ways.

    I always try to use a "building a house" analogy when dealing with managers. Assuming that it takes 3-6 months to build the average house and costs the purchaser $250K. If you want the house in 30 days, add $50-100K and it can be done. Cut the budget and you get a smaller house that will take longer to build.

  216. Wrong, but good people COULD build good stuff by bluGill · · Score: 1

    That is not correct. Good Carpenters CAN build good furniture, while bad carpenters cannot. However that does not mean a good carpenter will build good furniture.

    I have quit buying books by several authors because they no long write good books. They can write good books, and I have worn out copies of some of their early works where they did. Today they are just putting words, on a page, and the publishers go along with it because they know people like me think "She wrote that one great book, I'll try this one".

    Frank Loyd Wright was well known for leaky roofs.

  217. Whats new by Anonymous Coward · · Score: 0

    Why does Joel's argument pertain only to the software world. In every field, having those that excel at what they choose to do in life, will always give exponential return. I always hear that the top programmers are 10 times more productive than their average peers. Does this not also apply to other professions (Except burger flipping). What makes programmers the exception.

  218. Sort of... by SuperKendall · · Score: 1

    Ah yes! Quite like taking tactical and strategical advice on a battlefield from Tom Clancy because I tend to judge him by what he has said and written more than any experience with battles he may have commanded or fought in.

    No, more like taking advice from General Patton because I was also a general in active duty and could see the sense of what he said from practical experience.

    I have been a software developer for over a decade now, thus I feel I am pretty well qualified to judge the reality of what others are saying on the topic. I've been through many successful and a few failed projects, in both large and small teams, and what he says about the abilities of above-average programmers is spot-on.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  219. Sorry by SuperKendall · · Score: 1

    Sorry about setting you up for the merciless pummeling you have endured in replies. it was just so easy...

    My counterpoint will thus be gentle. The marketplace has in fact determined his softwrae is good by continuing existance and indeed expansion of that company.

    What companies do you own that are greater successes?

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  220. Only for very specific software by SuperKendall · · Score: 1

    The idea with software engineering is that the quality of your programmers shouldn't matter a great deal. If you have good processes in place, the quality of your programmers should not be a major factor.

    That is only true for custom internal IT projects.

    That form of software should in fact be the most limited, since custom internal IT software should (if you want to get the most bang for your buck) rely on many modules of higher level functionality - weither open source or commercial.

    It is these modules which need to be written by better programmers in order to really be a powerful tool for the corperate IT developer. The argument he puts forth as to quality of code applies equally to quality of API - a really good developer can put together an API that is a joy to use, that a bad programmer would not arrive at in a million years.

    Joel even says in his article that the argument he is making does not apply so much to corperate development. It just so happens that very little work should really be corperate in-house stuff and should be using well-crafter higher level modules where possible. Many times in-house developers are working on projects they could have just adopted an open source solution to address, which is really unfortunate for the companies involved. But that's another reason why hiring good developers is of use even for IT, because they will realize when and when not to code more often than others - if nothing else just due to extreme laziness!

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  221. to quote Clarence "Kelly" Johnson: by VolciMaster · · Score: 1
    "Use a small number of good people."

    The primary mantra of Lockheed's Skunk Works. It always works.

  222. Odds Are . . . by James_Aguilar · · Score: 1

    If most programmers had a more realistic understanding of how crappy they really are at it, they would not be busy congratulating themselves right now.

  223. Re:Software application development comes down to. by Brandybuck · · Score: 1

    Only three choices? My old boss said that software engineering was like a small blanket on a big bed. Whose feet do you want to get cold? It depends on which corner you tug on.

    1) Time
    2) Cost
    3) Functionality
    4) Quality

    Tug on any one corner and the other three get shorted.

    --
    Don't blame me, I didn't vote for either of them!
  224. Why the pictures of his gay cruise? by Anonymous Coward · · Score: 0

    What Joel doesnt examine the breadth of software development projects to know all the different types of programmers that might be right for different types of projects.

    In many cases a hoard of mindless minions is just what the doctor ordered. In other cases you might need a top-shelf computer scientist. In others, you might need 4 fresh Indian IIT grads and a soda machine.

    I have found hiring on skill problematic because this requires a resume of past successes - many turn into the developer equivilent of the BOFH once they have the 'high note' to back up their negative attitudes and lack of contructive productivity.

    Youth, attitude, and productivity are much more interesting to me in most cases, although I will also subscribe to the King David philosophy in the general case.

  225. However, Joel misses some data by Gr8Apes · · Score: 1

    I like Joel's writings. I like this article. However, the first thing I noticed that's truly missing for his point to be made is a mapping of times to individuals across multiple projects. This article displays some info, but misses proving the assertion.

    The question he doesn't answer: are the same people always at the bottom of the time scale, or are all represented equally? IOW, are there truly great programmers, or do individuals just have flashes of brilliance occassionally?

    --
    The cesspool just got a check and balance.
  226. Not cheap; not good; sellable!!! by Anonymous Coward · · Score: 0

    Are you trying to build a good application or a cheap application?

    Neither one. You're trying to build an application that people will buy!Marketing sells software. It doesn't matter how good a product is; it doesn't even matter if they like it! It only matters if they buy it! Everything else is secondary.

    With something as complex as software, "quality" isn't obvious to the end consumer. It's not like they can kick the tires, or check for rust: the average consumer is like a six year old trying to choose which car to buy. They're going to be swayed by the best salesman; not by the best engine or the finest engineering techniques.

    A good salesman can spin just about anything to make it sound good. They can probably even convince their customers that better quality is a bad thing.

    Imagine a salesman trying to sell a safe made out of cardboard:

    Is our new cardboard safe really more secure than those old-school, clunky metal ones? Of course it is! It's made of an all new, state of the art material: cardboard! Don't be saddled with those old, clunky, cast-offs safes people in the Dark Ages used! Get modern! Go cardboard!

    Cardboard safes are more secure! There are several known techniques for drilling into metal safes, but no one drills into cardboard! And consider fire hazards! Unlike those cheap metal models, the cardboard safe will catch fire before your documents do! Get your cardboard safe today!


    You see, it's all about marketing! Paying for "great programmers" probably isn't worth it for most companies; because paying for "great software" isn't going to profit them as much as a great salesman will. It's sad, but true.

    Now, if you'll excuse me, I'm off to buy one of those newfangled cardboard safes....

  227. It takes a bunch of things by Anonymous Coward · · Score: 0

    1) Good Managment
    2) A good mix of motivated programmers with a mix of experience
          -- entry level coders to do the "easy" stuff
          -- mid-level coders to do the hard stuff
          -- super programmers to do the impossible
    3) Other people
          -- business analysts with BOTH programming and business experience (CRITICAL!)
          -- tech writers to create the documentation
          -- system architect/team leader to keep everyone on goal

    Anyway, the most successful projects I was on were rolled out in phases. First a new back-end was created (in phases itself) to feed data into the old system. Then, after the backend (main processing, reports, interfaces, etc) was completed, the UI stuff started. First, the least mission critical items were done. With a team of 10 programmers, we were rolling something out every 2-4 weeks for a year. If something failed, we just rolled back to the old system for a couple weeks until the fix could be fully tested. With each rollout, we discovered more and more about what worked for the organization.

    BTW, at the end of the project, we were on time, below budget, provided more functionality then was initially requested, and the END USERS threw us a party (actually, there were several throughout the year!) Management was happy, users were happy and programmers were happy. Oh, and we were all allowed to take our vacations throughout the year!

    It takes a good team and short rollout cycles.

  228. The lesson? by complexmath · · Score: 1

    Don't make business decisions based on rumor when accurate information is easily obtainable. I agree that it's wise to choose the proper venue for any conversation, but that's an entirely separate issue. That isn't to say I don't have similar stories of my own, but I consider such behavior far more appropriate in a highschool hallway than in a boardroom. Talk is talk but business is busines.

  229. Is *he* a good programmer? by vikstar · · Score: 1

    Or look at the iPod. You can't change the battery. So when the battery dies, too bad. Get a new iPod. Actually, Apple will replace it if you send it back to the factory, but that costs $65.95. Wowza.

    and then

    Apple made a decision based on style, in fact, iPod is full of decisions that are based on style. And style is not something that 100 programmers at Microsoft or 200 industrial designers at the inaptly-named Creative are going to be able to achieve, because they don't have Jonathan Ive, and there aren't a heck of a lot of Jonathan Ives floating around.

    If he considers the inability of easily replacing a battery inplace of style a good feature of the ipod product, then I will never ever want to buy his software.

    --
    The question of whether a computer can think is no more interesting than the question of whether a submarine can swim.
  230. Re:Software application development comes down to. by Anonymous Coward · · Score: 0

    She's getting half your salary per hour, and you think she's cheap?? :P

  231. Joel by Quill_28 · · Score: 1

    Was Joel trying to hard in this article?

    I don't disagree with what he says but this article sounds like a tryout for ESPN the Magazine.

  232. Re:That's such a bunch of... by http · · Score: 1

    I can't recall if it was Pike, Kernighan, Ritchie or Raymond that said function length is a better indicator of quality than indentation. I have just recently re-read 'The C Programming Language', 'The Art of Unix Programming', and 'The Practice of Programming' all in the same month, and it starts to blurrrrrr.

    my $0.02

    --
    If opportunity came disguised as temptation, one knock would be enough.
    3^2 * 67^1 * 977^1
  233. Function length by sleepingsquirrel · · Score: 1
    I can't recall if it was Pike, Kernighan, Ritchie or Raymond that said function length is a better indicator of quality than indentation.
    Here's an interesting paper which is somewhat relavent to your point...
    Observes from a number of experiments that the fault curve rises logarithmically with function size until reaches a point at around 300 lines of code at which point it becomes quadratic. The implication is that both small and large components are unusually error prone. The paper then develops a mathematical model of reliability based on the properties of the human short term and long term memory which explains this.
  234. Re: Interesting paper by http · · Score: 1

    Thank you. I sit edified.

    --
    If opportunity came disguised as temptation, one knock would be enough.
    3^2 * 67^1 * 977^1