Slashdot Mirror


Bad Programming Habits We Secretly Love (infoworld.com)

snydeq writes: Breaking the rules can bring a little thrill — and sometimes produce better, more efficient code. From the article: 'The rules are more often guidelines or stylistic suggestions, not hard-and-fast rules that must be obeyed or code death will follow. Sure, your code might be ridiculed, possibly even publicly, but the fact that you're bucking conventions adds a little bit of the thrill to subverting, even inadvertently, what amounts more often than not to the social mores of pleasant code. To make matters more complex, sometimes it's better to break the rules. (Shhhh!) The code comes out cleaner. It may even be faster and simpler.' What bad programming habits can't you (or won't you) break?

28 of 497 comments (clear)

  1. You're the problem by U2xhc2hkb3QgU3Vja3M · · Score: 5, Insightful

    If you think it's nice to break habits or do unconventional code just for the thrill of it, remember how fun it is when you need to work on someone else's code.

    1. Re:You're the problem by tripleevenfall · · Score: 4, Insightful

      “Any fool can make a rule
      And any fool will mind it.”

      Thoreau

    2. Re:You're the problem by Anonymous Coward · · Score: 4, Funny

      Back during Y2K updates to our code base, we'd occasionally have to deal with code written by an ex-employee, who we'll call John. It was so bad that every time someone opened a file he had worked on you'd hear a loud "FUCK! Another John file!" over the cubical walls.

    3. Re:You're the problem by Dutch+Gun · · Score: 4, Insightful

      I've heard arguments against writing proper comments similar to what the author makes: "but if you change the code and the documentation or comments don't change, then it might be worse than no documentation at all." My response is that if you're not updating the documentation or comments, then you're not finishing the job you were assigned. You could make the same arguments against taking the time to create meaningful variables and function names.

      There's another argument against comments I occasionally hear as well, which is "a competent coder should be able to discern what the code is doing without comments." While that's technically true, it's another argument I would reject. I feel the best comments can and should declare the intent of a block of code, rather than drilling down into the mechanics of the code. Those types of comments are often much more valuable than comments which simply regurgitate the mechanics of code in English.

      Still, in my own code, I don't have a fixed ratio of comment to code. It's entirely dependent on the complexity / obviousness of the code in question. For instance, if you have a very simple function, such as a handler that reacts to some UI event and just passes along the event to some other system, or performs a simple operation, it's stupid to spend a bunch of time and create excess visual noise to document that function. A quick glance at the code tells you everything you need to know about what's going on far easier than comment blocks.

      On the other hand, when code gets more complex, or the internal workings of a function is less than trivial, I expect to see a more comments in the code. In some of the most complex code I've either written or worked on, the number of lines of comments can actually exceed the number of lines of code. I've even seen some helpful little ASCII drawings in some particularly complex physics code, which was awesome.

      --
      Irony: Agile development has too much intertia to be abandoned now.
    4. Re:You're the problem by rgmoore · · Score: 4, Insightful

      I feel the best comments can and should declare the intent of a block of code, rather than drilling down into the mechanics of the code.

      Exactly. There's a lot of code that needs comments like "fixes bug XXX". If you had to fix a nasty bug and it took you a day to get the details right, let the next poor sap know what you were doing. Otherwise, he's likely to reintroduce the bug by tearing out this apparently useless code.

      Another good use of comments is to summarize a large block of code so that people don't have to dig into it to figure out what it does. For example, it's good to document functions at the top with enough detail that somebody would know how and when to call them without having to read through the whole thing.

      --

      There's no point in questioning authority if you aren't going to listen to the answers.

    5. Re:You're the problem by Translation+Error · · Score: 4, Funny

      Any fool can see that.

      --
      When someone says, "Any fool can see ..." they're usually exactly right.
    6. Re:You're the problem by jandersen · · Score: 4, Funny

      ...who we'll call John...

      ...a contractor I'll call Paul

      Right, so who's going to come up with George and Ringo to make up the full set?

  2. "The code comes out cleaner"? by PacoSuarez · · Score: 5, Insightful

    If the code comes out cleaner, you didn't break any of my rules. The rule "make the code as clean as possible" trumps all other rules.

    1. Re:"The code comes out cleaner"? by EllisDees · · Score: 5, Funny

      Does it trump the "make the code work" rule?

      --
      -- Give me ambiguity or give me something else!
    2. Re:"The code comes out cleaner"? by nitehawk214 · · Score: 4, Informative

      I would not consider non-working code as clean.

      --
      I'm a good cook. I'm a fantastic eater. - Steven Brust
    3. Re:"The code comes out cleaner"? by mattventura · · Score: 4, Insightful

      But sometimes you get awful, poorly thought out "style" guides like PEP8 that in many situations result in less-readable code. Go try lining up colons in a dictionary definition for the purpose of readability and see how it likes it. So actual readability gets thrown out in favor of some feel-good style guide.

    4. Re:"The code comes out cleaner"? by Mikkeles · · Score: 5, Funny

      Ah, the "No True Clean Code" fallacy.

      --
      Great minds think alike; fools seldom differ.
    5. Re:"The code comes out cleaner"? by phantomfive · · Score: 4, Insightful

      1) Make the code work
      2) Make the code readable
      4) Make the code flexible.

      --
      "First they came for the slanderers and i said nothing."
    6. Re:"The code comes out cleaner"? by aix+tom · · Score: 5, Interesting

      Having "taking over" a lot of code in my time, I can say for myself, having code that "works and I don't know why" makes me more nervous that code that "doesn't work and I don't know why".

      I'd rather have clean code, be it working or non working. If it's clean I can get it to work reasonably quick. If it's not clean and not working then I can easily justify a re-write. But if I can't understand it and it seems to be working, I always have the dread that someday it will break in a disastrous fashion in the most inconvenient of times with me being unable to do anything about it.

  3. It's a tradeoff by plover · · Score: 5, Insightful

    Sure, you can trade maintainability for efficiency and reliability. People do it all the time. You just have to understand the costs involved. If the efficient code gains you a million dollars in performance, maybe you can afford for it to be crappy code. Or maybe you'll be running the code for 10 years, and if it costs you $250,000 to keep a crusty old engineer on staff who can maintain it, suddenly that million dollars in performance may not be worth it.

    <disclaimer>I am a crusty old engineer.</disclaimer>

    --
    John
  4. Copy and Paste. by jellomizer · · Score: 4, Informative

    Sometimes I will copy and paste a function and just do some minor tweaks were I could have just added a parameter.
    Why do I do this? Readability. Having a function called SplitPersonName(string name) and another one called SplitCompanyName(string name) So when I run the function it will be easily readable, as well if there is a bug in one of the fuctions but it works fine for the other. I can just change that one function without having to unit test other parts that could have been effected.

    Also I avoid too much Classes that are extended from other classes, that tends to add confusion on where a particular code is being called if you are debugging it from the middle of the class structure.

    It is OK to break rules, but you should have a good reason to do so. Also you should feel free to not break the rules when you do not have a good reason to do so.
     

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    1. Re:Copy and Paste. by Junta · · Score: 4, Insightful

      Also agreed about too many classes. People think they make nice modular things by having short classes, but I just went through an exercise of pouring through about a dozen mind numbingly tedious files to find the single line of code that actually did something rather than just do a few pointlessly segregated checks or providing an alternative function for what '+=' already did or coercion into some datatype only to have it coerced back 'just in case' that middle layer might one day have another developer that would naturally think of it another way...

      --
      XML is like violence. If it doesn't solve the problem, use more.
    2. Re:Copy and Paste. by CastrTroy · · Score: 4, Insightful

      For any rule you can come up with, you can probably find a valid case where breaking the rule would result in better code. Even GoTo can be useful in certain circumstances. Most of the good uses of GoTo have been codified using other key words. .C# has the continue keyword. It's basically exactly the same as using a GoTo to skip processing the current item. GoTo would have accomplished the exact same task, but people have such a dislike of GoTo that they had to create a whole other keyword that does exactly the same thing.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
  5. Documentation by PvtVoid · · Score: 5, Funny

    From TFA:

    my friend wired together an Eliza-like AI to his editor, and voilà, every function had a few lines of "documentation." The boss wasn't smart enough to understand that the lines meant nothing, so my friend was off the hook. His code was officially documented. I think he even got a promotion!

    He should have been shot.

    1. Re:Documentation by amicusNYCL · · Score: 5, Insightful

      The boss or the developer?

      Yes.

      --
      "Our two-party system is like a bowl of shit looking at itself in a mirror." - Lewis Black
  6. long methods and coupling by Anonymous Coward · · Score: 5, Insightful

    long methods - someone thought it a good idea to limit every method to no more than 20 lines. I think this is a terrible idea, and can make code unreadable, which leads to:
    coupling - it's often best to tightly couple things for ease of debugging and development. How often are you going to change the database you're using? Is it worth going through another abstraction for every database call? Too much abstraction makes code unwieldy.

    I'd rather have a bunch of 200 line methods that represent logical units of work than a call stack 20 layers deep.

  7. Dijkstra Nailed It by myrdos2 · · Score: 5, Insightful

    In short, I suggest that the programmer should continue to understand what he is doing, that his growing product remains firmly within his intellectual grip. It is my sad experience that this suggestion is repulsive to the average experienced programmer, who clearly derives a major part of his professional excitement from not quite understanding what he is doing. In this streamlined age, one of our most undernourished psychological needs is the craving for Black Magic and apparently the automatic computer can satisfy this need for the professional software engineer, who is secretly enthralled by the gigantic risks he takes in his daring irresponsibility. For his frustrations I have no remedy......

    --Edsger W. Dijkstra

  8. Re:GOTOs in C by halivar · · Score: 5, Interesting

    Comp Sci professors teach "goto = bad" because the wisdom necessary to use it competently comes only with experience. It's like jazz; you have to know the rules and follow them before you can break them and not sound like a jack-ass.

  9. Lessons by Tablizer · · Score: 5, Interesting

    Variable and object naming, and commenting is an art-form that takes experience to do well. Here's a few practical guidelines I've learned follow:

    1. Think of newspaper headlines when commenting. Don't make somebody read the whole article to know what the article is about.

    2. Comment the "odd" stuff, not the obvious stuff infer-able from function name etc.

    3. Goldilocks Rule: Names both too long and too short can be bad.

    4. The more frequent a name is used, the shorter it should be. Use comments at declaration to give the full name. Example of a variable that may be used often:

    var dhv_id; // Department of Housing vendor ID

    If it's used often, I'd rather have an abbreviation than see DeptOfHousingVendorID all over the code, making it long and "wrappy".

    5. Everybody has their own preference, but you have to target the "average" developer (future unknown reader) to make code future-friendly.

    1. Re:Lessons by internerdj · · Score: 5, Funny

      "Think of newspaper headlines when commenting. Don't make somebody read the whole article to know what the article is about." You_won_t_believe_the_three_things_this_method_does(), This_method_just_announced_it_was_running_for_the_GOP_presidential_nomination(unsigned int year), Five_ways_to_make_your_integers_long(), ...

  10. The Issue with programming. by jellomizer · · Score: 4, Insightful

    We are hired to write new programs/new ways of solving a problem. Rules are made to solve common problems.
    If we only follow these rules we are limited to writing programs that have already been written, in that case we are just useless.
    If we know when to bend or break the rules, then we can create things that solve problems differently and is new and unique.

    When I work with programmers so are hard fixed on the right way to do things, I often get a response that x cannot be done. I break the rule and I have done it in a couple of days work, then they will go but you didn't follow the right form.
    The end user doesn't care about form, they care if it Works well, It can be maintained, and it is secure.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
  11. Re:Breaking out of the middle of a loop by PRMan · · Score: 4, Insightful

    He's still trotting out "rules" that were in vogue 15 years ago. Break, continue and early return are clean and inserted into every programming language eventually.

    --
    Peter predicted that you would "deliberately forget" creation 2000 years ago...
  12. can't code, afraid of disapproval by anyaristow · · Score: 4, Insightful

    It seems that many in the field these days are afraid to code something themselves for fear that someone will find fault. So, they do things "the established" way, which is generally frameworks or anything that can be called "reusable", even if this generation's "reusable" is always less reusable than last, because it keeps getting needlessly more complex to the point that nobody *can* reuse it.

    Used to be programmers had a fault we called "not invented here", in that they'd insist on re-writing things that already existed, because it was easier to understand their own code than to use someone else's. These days it's reversed. For fear of criticism, they *must* use someone else's code rather than write their own. I call it "afraid to invent it here."