Slashdot Mirror


Ask Slashdot: What Are the Hardest Things Programmers Have To Do?

itwbennett writes "Software development isn't a cakewalk of a job, but to hear programmers tell it (or at least those willing to grouse about their jobs on Quora and Ubuntu Forums), what makes programming hard has little to do with writing code. In fact, if the list compiled by ITworld's Phil Johnson has it right, the single hardest thing developers do is name things. Are you a software developer? What's the hardest part of your job?"

473 comments

  1. Maths by Anonymous Coward · · Score: 0

    Maths

    1. Re:Maths by Jeremiah+Cornelius · · Score: 5, Insightful

      What is the hardest thing "coders" have to do? Based on the evidence that I have seen, over more than 20 years?

      Comment their code

      Either that, or produce relevant, well-defined logging.

      The other hard things they have to do are usually related to have a project to complex or ill-defined for producing a clear outcome. This is usually not the coder's doing, but a downstream problem derived from insufficient architecture role/guidance and probably a weak project management function.

      --
      "Flyin' in just a sweet place,
      Never been known to fail..."
    2. Re:Maths by Pino+Grigio · · Score: 1

      That's one of them. The other is getting everyone to agree on what to do and how to do it.

    3. Re:Maths by Anonymous Coward · · Score: 0

      and englishes too

    4. Re:Maths by ArhcAngel · · Score: 2

      What is the hardest thing "coders" have to do? Based on the evidence that I have seen, over more than 20 years?

      Comment their code

      Either that, or produce relevant, well-defined logging.

      The other hard things they have to do are usually related to have a project to complex or ill-defined for producing a clear outcome. This is usually not the coder's doing, but a downstream problem derived from insufficient architecture role/guidance and probably a weak project management function.

      It's hard to develop a strategy when your boss comes running in screaming "The sky is falling" because your biggest competitor just released a new version that adds feature X and you are now tasked with implementing feature X into your product by tomorrow and it has to be on all the install media that has already shipped as well.

      --
      "A person is smart. People are dumb, panicky dangerous animals and you know it." - K
    5. Re:Maths by man_of_mr_e · · Score: 5, Interesting

      The hardest thing programmers have to do is think like non-programmers. Or maybe even think like someone other than them.

      None of these things are rocket science. Some of them are computer science, but that's kind of the point.

      Programmers are typically forced to develop software to demanding schedules which leave no room for the things in the list. They CAN do those things, they are just never given the time to do them.

      Yes, many programmers won't do them even if given the time, or will goof off if given the time until they have to write crap code to meet the deadline, but that's a different story. Or maybe not.

      The hardest thing a programmer has to do is Think like someone else, Not goof off when you think you can get away with it, and to push back to have the time to do the things that are necessary to write AND MAINTAIN good code.

      Of course, circumstances vary. The difference between a startup succeeding and failing may in fact require being first to market with crap code. But at some point, you have to pay back the technical debt you build up.

      Ok, so lets add that to the list as well.

      Oh, and making end users understand the impact of their crazy changes.

    6. Re:Maths by Jeremiah+Cornelius · · Score: 0

      Value by feature. The great checkbox myth of management.

      --
      "Flyin' in just a sweet place,
      Never been known to fail..."
    7. Re:Maths by Reverand+Dave · · Score: 1

      Holy shit. This exactly.

      --
      I got here through a series of tubes
    8. Re:Maths by gander666 · · Score: 1

      To be fair, it usually comes as pressure from sales.

      --
      Suppose you were an idiot and suppose you were a member of Congress ... but I repeat myself. - Mark T
    9. Re:Maths by TheRealMindChild · · Score: 1

      I know I have long time between commits because I'm sure as hell not committing anything that doesn't even compile. Also, when I am in the middle of writing code for bullet point X and it is not done to the point that it will page fault with a null pointer exception (as an example), I'm not committing that either. I certainly don't look forward to the verbal shit storm that inevitably follows when I would commit such code and someone tries to actually use it. You get a commit when I have finished exactly one task.

      --

      "When life gives you lemons, don't make lemonade. Make life take the lemons back!" -- Cave Johnson
    10. Re:Maths by Anonymous Coward · · Score: 0

      these days with a log4 variant in every language I use logs as comments. Basically anywhere I would have normally written a comment I use an info or debug log statement instead. Then still use normal error log messages etc. where needed. Then anytime you get one of those really odd production-only type bugs you can flip the verbosity script.

    11. Re:Maths by Jeremiah+Cornelius · · Score: 1

      To be fair, it usually comes as pressure from sales.

      Who don't understand the value of the software to a customer, and can only line up checkboxes next to price tags.

      --
      "Flyin' in just a sweet place,
      Never been known to fail..."
    12. Re:Maths by ArhcAngel · · Score: 1

      It's hardly a myth to me as it has happened more than once.

      --
      "A person is smart. People are dumb, panicky dangerous animals and you know it." - K
    13. Re:Maths by Anonymous Coward · · Score: 0

      To be fair, it usually comes as pressure from sales.

      Who don't understand the value of the software to a customer, and can only line up checkboxes next to price tags.

      Neither do most buyers!

    14. Re:Maths by Jeremiah+Cornelius · · Score: 1

      Why sales for tech needs to be technical. Why sales for tech need to be subject matter expert for customer domain.

      Why good technology experiences by customer organizations are rarer than princess farts.

      --
      "Flyin' in just a sweet place,
      Never been known to fail..."
    15. Re:Maths by fisted · · Score: 1

      How is that related to commenting one's code?
      Protip: It's not.

    16. Re:Maths by aaronb1138 · · Score: 1

      If you can't deal with a boss who comes in screaming, "The sky is falling," the fault lies entirely on you. First, this is part of the common lack of social skills and big picture prioritization that plagues most programmers. Handling the boss is something everyone has to do, and the rest of us that work hard, have to deal with a dumb scrap of a boss, and still get our work done competently are tired of hearing that whine. Second, if you can't manage your reactions to your boss to produce good work, you need to find an easier place to work.

      Everybody has an occaisional entire day/week/month destroyed by the dumb whims of sales, the boss, or that one retarded customer. Guess what, their product still ships and works.

    17. Re:Maths by DexterIsADog · · Score: 1

      I love how you jumped to other roles to blame on programmers' failures.

      Having held most roles in IT and operations, I think the hardest thing for programmers is relating to other human beings. They really suck at that.

    18. Re:Maths by rot26 · · Score: 0

      Did you say sax and violins?

      --



      To ensure perfect aim, shoot first and call whatever you hit the target
    19. Re:Maths by Jeremiah+Cornelius · · Score: 1

      I think you misconstrue my observations and my tentative conclusions.

      --
      "Flyin' in just a sweet place,
      Never been known to fail..."
    20. Re:Maths by gmclapp · · Score: 1

      Commit != comment.

      --
      Common Sense (+1)
    21. Re:Maths by mrchaotica · · Score: 2

      All right, but apart from thinking like others, not goofing off, pushing back on the schedule, and paying the technical debt, what have the Romans ever done for us?

      (Wait, what were we talking about again?)

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    22. Re:Maths by gutnor · · Score: 1

      Yeah, well. I work on the sort of application that require lot of customisation on top of a core product. Our sales generally "wow" the client and get them to sign by showing the UI. One of the first client customisation though, is hooking to their system so that they don't have to use our UI.

      In some cases, it is all about checkboxes. With large companies you sell your software to one strategic group but that's a totally separate operational group that get to use the software.

      So sure those companies should go under for such inefficiencies, but apparently they post billion dollar profit every quarter and received government bailouts the one year they failed.

    23. Re:Maths by Requiem18th · · Score: 1

      That other people have shitty Bosses doesn't mean he can't complain about his you miserably twat.

      --
      But... the future refused to change.
    24. Re:Maths by swillden · · Score: 0

      Comment their code

      I hate comments. Comments are evil.

      Why? Because they're almost inevitably wrong. Many comments are wrong when they're written, and all comments eventually become wrong.

      I write comments as I'm writing code, whenever something isn't clear. Then I go back after it all works (and passes a unit test suite with near 100% coverage), and refactor and rename until the comments are no longer required, until the code is clear and readable enough to stand on its own.

      Some key techniques:

      • Temporary variables: Just because a calculation can be completed compactly in-line doesn't mean it should. Results, especially interim results, can often usefully be extracted and assigned to well-named variables. The well-named variables are the key... they give you an opportunity to explain what this value is/means and to imply the rationale for computing it.
      • Helper functions: Writing short functions is a good idea in and of itself, but I frequently find little blocks of code with a comment at the top explaining what the block does. Extract the block into a separate function, and give it good, descriptive name. If the block needs a bunch of data, you might need to rethink how it works a bit or use the next technique.
      • Helper data structures: If you have big lists of parameters, or sometimes even if you don't, collect them into data structures and... bet you can predict this at this point... give them good, descriptive names. In OO code, I sometimes even collect groups of member variables into internal, helper classes, purely so I can name the helper classes and maybe add some methods that use those variables, so that I can name those. In C++ there's no cost to this as long as everything is by value (well, perhaps a few bytes for alignment, but it's rare that I'm paying attention to alignment). Even in Java and other reference/pointer-heavy languages the cost is small, and well worth it for the improved readability.
      • General refactoring: If you can't get something that's readable without comments even with all of the above, it's a really good sign that your abstractions are wrong and need to be rethought -- so that you can define new wones and give them good, descriptive names.

      Yes, the secret to readable, comment-free code is good naming. Of course, there's still the risk that the names may become wrong over time just as the comments do, but I find that to be less of a problem, as long as good refactoring tools are available. Programmers -- at least the ones that care about names -- are pretty sensitive to inaccurate naming, in a way that they're not sensitive to comments, which often go unread.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    25. Re:Maths by fisted · · Score: 0

      Yes.

    26. Re:Maths by Anonymous Coward · · Score: 0, Informative

      So what does commenting code have to do with maths (the comment you replied to)? Oh, I see. There were already a lot of comments when you posted, and you wanted yours toward the top. That's one way to do it I guess.

    27. Re:Maths by Anonymous Coward · · Score: 0

      Comments are 99% of the time worse than a waste of space. They are usually invalid, because the code changes and people don't then change the comments. Write better code and you will not need comments. If you're reading ugly code, for the love of god, don't trust comments. Not even something as simple as "This method return Object A", as it probably actually returns "Object C" by the point you read that comment.

    28. Re:Maths by dkf · · Score: 1

      Either that, or produce relevant, well-defined logging.

      You get much better at that if you develop complex multi-process server applications where there's no chance of attaching a debugger.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    29. Re: Maths by Anonymous Coward · · Score: 0

      Yes: the hardest thing programmers have to do is take responsibility for their work instead of pointing fingers.

      And it is the thing they do least well!

    30. Re: Maths by Anonymous Coward · · Score: 0

      We'll he did say programmers (which includes him) have trouble with comments.

    31. Re:Maths by RoboJ1M · · Score: 1

      1) Maintain consistency with your peers when writing the same software together.
      2) Communicating with peers
      3) Not making assumptions
      4) Not telling me about ad-hoc design/schema changes
      5) Estimates
      6) Consistency in quality assurance procedures

      However it appears that with oversight, training and having the work delegated into manageable quanta, all these problems go away.
      A lot of it was caused by the heroic one programmer/one product/no design or requirements model.
      Or "FAD": http://thedailywtf.com/Articles/FrontAhead-Design.aspx :)

      If I had to choose one word as What's Hardest and Most Important?

      "Consistency"

  2. Amazing by Murdoch5 · · Score: 2, Informative

    I actually agree with that list.

    1. Re:Amazing by girlintraining · · Score: 1

      I actually agree with that list.

      Don't worry. Your reputation for being disagreeable won't be harmed by this one admission. Unless the mods vote you up a couple more times. :D

      --
      #fuckbeta #iamslashdot #dicemustdie
    2. Re:Amazing by Carewolf · · Score: 1

      The most difficult part, not punching your co-workers in the face when they keep discussing the name of the project instead anything relevant to solving the project.

    3. Re:Amazing by JWW · · Score: 1

      I think the most difficult thing the author of the article had to deal with was making a list of thing that could be represented by a block of text, be represented instead by a stupid slide show that isn't loading correctly right now....

    4. Re:Amazing by Anonymous Coward · · Score: 4, Funny

      I actually agree with that list.

      I don't.
      The most difficult task for a programmer is Personal Grooming, followed closely by eating Healthy and getting enough Exercise.

    5. Re:Amazing by Murdoch5 · · Score: 0

      LOL! I don't care about mod points, I just care that force one a realistic list on programming problems finally got posted.

    6. Re:Amazing by Murdoch5 · · Score: 1

      I had to once walk out of the room and I was still so mad I just went home mid day. The next day when I came back to the room the guy that made me mad still hadn't corrected his mistake and still hadn't finished his work.

    7. Re:Amazing by DexterIsADog · · Score: 1

      I had to once walk out of the room and I was still so mad I just went home mid day. The next day when I came back to the room the guy that made me mad still hadn't corrected his mistake and still hadn't finished his work.

      Well then, you did exactly the right thing, didn't you? Bravo!

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

      I'll pretend that you weren't trolling and agree with you.

      -- Lardy McNeckbeard

    9. Re:Amazing by Mashdar · · Score: 1

      I have no problem naming things. I just go alphabetically down this list of fruit! http://en.wikipedia.org/wiki/List_of_culinary_fruits Comments include deserts and alcohol products containing said fruit. Some editorializing as to the deliciousness is optional.

    10. Re:Amazing by Anonymous Coward · · Score: 0

      idiot

    11. Re:Amazing by qu33ksilver · · Score: 1

      Sorry to interrupt. But finding a suitable name is one of the few exciting things that I like. I feel that giving a solid name to a project gives it a good feel and motivates people. Yea.. I am one of those types.. I focus on the exterior more than the interior.

    12. Re:Amazing by Anonymous Coward · · Score: 0

      Yeah, but it is just demotivating to everybody when the nice name given to something after hours of discussions over several days by its creators is overruled by 5 minutes work of an overpaid marketing consultant.

    13. Re:Amazing by Anonymous Coward · · Score: 0

      they're not difficult if you never do them

    14. Re:Amazing by Anonymous Coward · · Score: 0

      I disagree with personal grooming. I have no trouble in that area, nor do any of my co-workers. Eating healthy and getting enough exercise.... Totally agree.

      Fucking work gets in the way all the time.

  3. Solving real world problems by Anonymous Coward · · Score: 0

    Like poverty, war, hunger. Oh, wait, no we don't solve those.

    1. Re:Solving real world problems by SJHillman · · Score: 4, Interesting

      Coders have probably spent far more time helping wars, real and simulated, than solving them.

    2. Re:Solving real world problems by Anonymous Coward · · Score: 0

      I guess that depends are what you consider a solution to conflict.

    3. Re:Solving real world problems by viperidaenz · · Score: 1

      I suppose its better if 100,000 people from each side ran at other with swords until one side is dead?

    4. Re:Solving real world problems by oneandoneis2 · · Score: 2

      Well, "not going to war" could be considered an excellent solution to conflict

      --
      So.. it has come to this
    5. Re:Solving real world problems by xevioso · · Score: 1

      So is "calculating how to increase the damage your weapons will cause so that when you bomb people trying to throw acid in the faces of little girls going to school or cutting off the noses of women who make complaints about rape, they will decide to stop fighting or die."

    6. Re:Solving real world problems by OhSoLaMeow · · Score: 3, Funny

      I suppose its better if 100,000 people from each side ran at other with swords until one side is dead?

      “You mean, you'll put down your rock and I'll put down my sword and we'll try and kill each other like civilized people?”

      --
      They can take my LifeAlert pendant when they pry it from my cold dead fingers.
    7. Re: Solving real world problems by Anonymous Coward · · Score: 0

      As if the conflict began when you declared war.

    8. Re:Solving real world problems by CBravo · · Score: 1

      Yet your logic does not work very wel and is therefore falsified. Find a new theorem. Politician.

      --
      nosig today
    9. Re:Solving real world problems by Anonymous Coward · · Score: 0

      Well, "not going to war" could be considered an excellent solution to conflict

      "I'm sure the city fathers of Carthage would be glad to know that."

    10. Re:Solving real world problems by Anonymous Coward · · Score: 0

      "they will decide to stop fighting or die."

      How often does this actually happen? Usually they just lay low for a few years. There's also this weird idea called "blowback". You should read up on it. The people you bomb today have friends and families that come back to haunt you en masse a few years later. Remember, the US deposed the leaders of Iran. We trained the mujahadeen

    11. Re:Solving real world problems by swillden · · Score: 1

      Or, as happens in the real world, they focus on training all of the new recruits your bombs motivated, so they can send 10X as many terrorists out to fight you.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    12. Re:Solving real world problems by Anonymous Coward · · Score: 0

      Coders have probably spent far more time helping wars, real and simulated, than solving them.

      I just knew it was only a matter of time before someone made a slight at vi vs emacs.

    13. Re:Solving real world problems by Anonymous Coward · · Score: 0

      Well, if you count vim vs. emacs I guess I can't argue...

    14. Re: Solving real world problems by Anonymous Coward · · Score: 0

      Well that's just because war isn't sufficiently solved yet. I mean, we haven't solved Go yet, and war is significabtly more complex. I for one forgive our robot overlords their shortcomings in this department

  4. Two sides of the coin by swm · · Score: 5, Insightful

    The head and tail of the list

    9. Designing a solution
    1. Naming things

    are pretty much two sides of the same coin.

    If you have a design, you will know what call things.
    If you have names for everything, you will be able to build a design from there.

    And these *are* the hardest things on the list.

    1. Re:Two sides of the coin by Anonymous Coward · · Score: 2, Interesting

      If you have names for everything, you will be able to build a design from there.

      You think the inventor of the mouse pad started with the name? What's a "mouse pad"? Sounds like a feminine hygiene product for mice...

    2. Re:Two sides of the coin by JustOK · · Score: 1

      At the time, maaaan, like a mouse pad was a groovy place for mice to like hangout and live, you know?

      --
      rewriting history since 2109
    3. Re:Two sides of the coin by Anonymous Coward · · Score: 0

      But on the other hand, X was always called X. It is derived from eXpermental window system.

    4. Re:Two sides of the coin by Anonymous Coward · · Score: 5, Funny

      "there are two hard things in computer science: cache invalidation, naming things, and off-by-one errors"

    5. Re:Two sides of the coin by Anonymous Coward · · Score: 0

      This is funny, but as a developer I really have found this to be true. Cache invalidation is so hard (especially for deleted objects).

    6. Re:Two sides of the coin by Anonymous Coward · · Score: 0

      The hardest part of design is partitioning into distinct pieces with small interfaces. Naming just documents that design in a way that reading the code tells you what it's doing. I agree, both are hard.

    7. Re:Two sides of the coin by QRDeNameland · · Score: 2

      The head and tail of the list

      9. Designing a solution

      1. Naming things

      are pretty much two sides of the same coin.

      And these *are* the hardest things on the list.

      While I agree that these items are closely related, in my opinion, these were the *easiest* thing on the list. After all, this is what programmers are trained and paid to do, and for me this is the most enjoyable part of programming.

      Of all the items on the list, the one I'd put closest to the top is 'time estimates', since in anything other than the most trivial cases it is an exercise in predicting problems yet unknown.

      But the one that would be on the very top of my list isn't there: Interfacing with god-awful third-party software, and tracking down the inevitable breakages when said software gets updated. This facet of my job has become more and more prevalent over the years, where I have to chase down a problem for which I have no good diagnostic tools, no access to the source code, and as a result spend hours of fruitless and frustrating poke-and-hope troubleshooting, or searching Google eight way to Sunday hoping to word your problem in some way that corresponds to some other poor soul who might have the same problem. (This xkcd is a good illustration of that dynamic.)

      I guess to some extent it depends if by 'hard' you mean "challenging" or "so frustratingly, brain-numbingly tedious that you want to gouge your eyeballs out". Yes, good design is 'hard' in the first sense, but I feel good after a day of that kind of work, but that second kind of 'hard' work makes me wonder why I became a programmer in the first place. Unfortunately, it seems that over time there's less of the former and more of the latter.

      --
      Momentarily, the need for the construction of new light will no longer exist.
    8. Re:Two sides of the coin by frank_adrian314159 · · Score: 1

      If you have a design, you will know what call things.

      Not necessarily. Quite often, you can have many name choices for the same conceptual object that can have serious implications for downstream code. For example, might the object someday be part of a larger model which might benefit from a different name to support naming parts of that model? Or is the name that you think is obvious something new for which nomenclature hasn't yet solidified? Or are you sure that the name is actually what the people who are maintaining the code are going to call it?

      And, please, refactoring folks. don't tell me it's easy to change names. I know it seems that way, but it's not always. Not only do you need to change the name of the object, but often those of many of the methods in your object and sometimes the contagion spreads to related objects. Then there's the issue of comments in the code. Or did you forget to change them?

      Yeah, I think putting naming at #1 is about right for the technical stuff. Hell, I once worked on a tool for a consulting company whose whole raison d'etre was to get an organization using the same vocabulary to reduce the amount of miscommunication in the organization. Of course, after that they often performed other heinous actions upon the corporate body, but I ramble... In any case, naming is hard.

      --
      That is all.
    9. Re:Two sides of the coin by Anonymous Coward · · Score: 0

      thats like saying a pilot's single hardest job is flying the plane. Numptys - Its a bit like saying an english degree is easy.

    10. Re: Two sides of the coin by Anonymous Coward · · Score: 0

      Originally mice pads were mandatory. At least for the 1.0 Microsoft mouse. It has a steel ball and won't track at all on a hard surface.

    11. Re:Two sides of the coin by QRDeNameland · · Score: 1

      "there are two hard things in computer science: cache invalidation, naming things, and off-by-one errors"

      I think you made a mistake...the should read "10 hard things"...

      --
      Momentarily, the need for the construction of new light will no longer exist.
    12. Re:Two sides of the coin by DCFusor · · Score: 1

      Agree, there's a lot of power in a (correct) name, especially in code. swim hammers it here. I ran a uP embedded dev firm, the hardest part was getting customers to understand feature 1 doesn't happen on day one, two on two and so on. If we had a month, 3 weeks of it were design, a couple days coding, a couple testing. Once they learned that was best, we were turning down work because we couldn't keep up with demand.

      --
      Why guess when you can know? Measure!
    13. Re:Two sides of the coin by jamiesan · · Score: 2

      Three! There are three hard things in computer science: cache invalidation, naming things, off-by-one errors and fanatical devotion to the pope....

      Nobody expects the Spanish Estimation!

    14. Re:Two sides of the coin by vettemph · · Score: 1

      There are only two software developement modes:
      1 Bugging
      2 Debugging

      --
      The government which is strong enough to protect you from everything is strong enough to take everything from you.
    15. Re:Two sides of the coin by John.Banister · · Score: 1

      Unfortunately, it seems that over time there's less of the former and more of the latter.

      If your employer knows that you're good at the task everyone hates, and willing to do it without a fuss....

    16. Re:Two sides of the coin by Anonymous Coward · · Score: 0

      I want to Fucking Kill my coworker who has the worst taste in naming I've ever seen someone use in production code. And a tendency to leave half-finished broken things lying around. And an unwillingness to clean up his fucking mess when he left it not working. And his stream of consciousness "documentation" style. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    17. Re:Two sides of the coin by Anonymous Coward · · Score: 0

      But on the other hand, X was always called X. It is derived from eXpermental window system.

      No it isn't. It's derived from W.

    18. Re: Two sides of the coin by Anonymous Coward · · Score: 0

      My PCjr (circa 1982) also required the mouse "pad" as well. It was an optical mouse, and the pad was a metal sheet with a special grid for it to track.

      I think I saw a similar technology on a Sun machine once as we'll.

  5. Estimation by scottnix · · Score: 5, Insightful

    By far the hardest part of my job as a professional software developer is estimating how long a feature will take to develop.

    1. Re:Estimation by networkzombie · · Score: 4, Interesting

      I use IT Time. Begin with your best estimate of how long the project will take and double it. Add two, and then double it again. That is how long it will take. I cannot remember what colleague I learned this from (an Assembly programmer I think), but is has been fairly accurate (for me) for almost 20 years.

    2. Re:Estimation by Cazov · · Score: 1

      my coworker increases the time increment (minute becomes hour, hour day, etc) and doubles the value.

    3. Re:Estimation by phantomfive · · Score: 4, Insightful

      Here is something that I read in Mythical Man Month that helped me:

      An estimate that is accurate will decrease over time, as some parts of the project will get done ahead of schedule.
      An estimate that is inaccurate will remain the same until just before the deadline, when the time needed will suddenly jump up.

      A lot of people make their estimates based on what will happen when everything goes right. If you make your estimate based on what will happen if everything goes wrong, then your estimates will be a lot better. And with practice, if you pay attention to how accurate your estimates were, then you will get improve.

      --
      "First they came for the slanderers and i said nothing."
    4. Re:Estimation by chuckinator · · Score: 4, Insightful

      I agree wholeheartedly because this is the most visible departure point for people that aren't programmers. They want to know when your application will work, bug free, according to spec, and even handle the corner cases that no one thought about in the design meetings. They don't care about how to iterate over a list of elements in a collection or sort through config files or transition through states, but they damn sure want it to work within a reasonable amount of time even if they don't know how they think it should work.

    5. Re:Estimation by Anonymous Coward · · Score: 5, Insightful

      By far the hardest part of my job as a professional software developer is estimating how long a feature will take to develop.

      More often than not, it's the pointy-haired-boss who tells me how long a task is going to take. And since they're the ones signing my paycheck, I tend to figure out how to get the task done in the time allotted. Unfortunately with time and complexity fixed, that makes quality the variable.

    6. Re:Estimation by travdaddy · · Score: 2

      By far the hardest part of my job as a professional software developer is estimating how long a feature will take to develop.

      How much time will that take to estimate?

      --
      Adidas To Bring Back Sneakernet
    7. Re:Estimation by bunratty · · Score: 5, Funny

      Why not quadruple and add four instead? Oh, right, you learned this from an assembly programmer.

      --
      What a fool believes, he sees, no wise man has the power to reason away.
    8. Re:Estimation by Inzkeeper · · Score: 1

      Estimating continues to be the bane of my existence.
      But the most lost I every was involved trying to estimate a full database data conversion process from an old non-rdbms system.
      "Oh but our data is clean", they said.
      I spent over a week just fixing / coding for bad date formats.
      I asked a senior guy for advice. He suggested something similar:

      Come up with a number. Multiple by an arbitrary single digit. Double it. Double it again.

      Eventually I learned not to fix bid data conversion. Ever.

    9. Re:Estimation by Anonymous Coward · · Score: 1

      Begin with your best estimate of how long the project will take and double it. Add two, and then double it again.

      you might also consider adding one and quadrupling it

    10. Re:Estimation by Anonymous Coward · · Score: 0

      So really, he multiples by 120, 48, 14, 8, or 104...

    11. Re:Estimation by wavedeform · · Score: 4, Interesting

      But this violates Hofstadter's Law

    12. Re:Estimation by bill_mcgonigle · · Score: 4, Informative

      Why not quadruple and add four instead? Oh, right, you learned this from an assembly programmer.

      assembly programmers always shift, they don't multiply by powers of 2.

      shl ax, 2
      add ax, 4

      if memory serves...

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    13. Re:Estimation by laejoh · · Score: 2

      Real assembly programmers whould tell you to take your best estimate, shift to the left, add two, and then shift to the left again!

    14. Re:Estimation by Carewolf · · Score: 1

      Well, it is easy to make such estimates if you the development you are doing is boring and routine. The problem is if you are trying something new, and that doesn't just mean new in the world, but new to you or new to the business. Estimate how big unknown obstacles are..

      It is kind of like estimating how tall a mountain you have never heard of before is. With a bit of experience you might which mountain range it is part of and how tall mountains there usually are, but unless you already know the solution there is no good way of knowing the solution...

    15. Re:Estimation by invid · · Score: 1

      My rule is, honestly try to figure out how much time you think it will take to write the code--and then double it.

      --
      The Moore-Murphy Law: The number of things that will go wrong will double every 2 years.
    16. Re:Estimation by Anonymous Coward · · Score: 0

      I use PI. I learned it from a project manager (and he was usually +/- 2-3 weeks. "how do you usually get your schedules right? I take everyone's estimates times PI". Not sure why but it works.

    17. Re:Estimation by Anonymous Coward · · Score: 0

      Work weeks are generally considered to be 5 days, not 7.

    18. Re:Estimation by bre_dnd · · Score: 3, Informative
      inc ax

      shl ax,2

      would be slightly faster and use less memory :)

    19. Re:Estimation by Anonymous Coward · · Score: 1

      I use PI. I learned it from a project manager (and he was usually +/- 2-3 weeks. "how do you usually get your schedules right? I take everyone's estimates times PI". Not sure why but it works.

      Pi works because when he asks for the estimates he says "How long will this take, give me a round number".

    20. Re: Estimation by _0xd0ad · · Score: 1

      No, first you increment and then you shift left twice*. Increment is a unary operation, so you avoid an unnecessary operand.

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

      Real assembly programmers whould tell you to take your best estimate, shift to the left, add two, and then shift to the left again!

      Stop perpetuating the use of the wrong endian, damnit!

    22. Re:Estimation by Nivag064 · · Score: 1

      The version I was given, about 40 years ago: was keep doubling the estimate until it appears unreasonable, and then double it again.

      Unfortunately, that is often too optimistic!

    23. Re:Estimation by Anonymous Coward · · Score: 0

      I didn't want to but I laughed at that.

    24. Re:Estimation by disposable60 · · Score: 1

      Real assembly programmers hear shift-left when you say double.

      --
      You're looking for quotes? See my journal.
    25. Re:Estimation by kbahey · · Score: 1

      What is the unit for "add two"? Days, weeks, months?

    26. Re:Estimation by Anonymous Coward · · Score: 0

      And then nothing you ever estimate gets funded or built because you lack the ability/skill to do it in a timely manner - even if you were just estimating.

    27. Re:Estimation by SQLGuru · · Score: 1

      Until management tells you that your estimates are too high and make you give them the best number anyway.

    28. Re:Estimation by Richy_T · · Score: 1

      He's not the chief engineer on a vessel designed "to boldly go" by any chance?

    29. Re: Estimation by Richy_T · · Score: 1

      +1. Uh, I mean INC A

    30. Re:Estimation by psithurism · · Score: 1

      I used a quite similar method that has worked great for letting me know how long I'll take rather accurately, but then you forgot the tail end of it:

      Once you get your accurate measurement, realize that neither management nor the rest of your team will tolerate that much time being taken, so first half the known time yourself. Give this number to management and the team, who will subtract a bit from your estimate and then assume you can work on your next task in parallel therefore halving your remaining time again. Then you realize that half your time is going to be taken up with meetings you forgot, therefore halving your available time once again. This estimate gets locked into the schedule and immediately afterward the scope is tripled.

      Now try and finish the project according to schedual, assuming that is x=1 day, while knowing it will take 2(3x*2*2+4)=32 working days (2 months once you factor in weekends, holidays, company events vacations and meetings about why you are so far behind). Then give up on estimating and improve your excuses.

    31. Re:Estimation by Richy_T · · Score: 1

      Though typically, you don't even expect the mountain to be there. Or it wasn't there last time you passed through the territory. This typically, but not always, occurs with Microsoft products. Last up was when what I had once done with xp_cmdshell in 5 minutes took two days before I gave up and went with a different method.

    32. Re:Estimation by Anonymous Coward · · Score: 0

      The problem with doing it right is that management doesn't want to hear the reality up front. They won't commit to proceeding if they are actually faced with the real time/cost to complete, so the development team has to provide optimistic estimates. I remember management asking for interest in joining a team to implement a new project. One experienced engineer said, to the effect of, "I'll lead that effort, so long as you give me X full-time resources and promise not to take them away for other projects for Y months." Boss said no way. Inexperienced engineer says "I can do that pretty much solo in Z Y". Noob gets the job. ... YEARS later and a steady drag on more and more peoples time the project was not finished in any kind of successful way. Cobbled-together spaghetti bowl of spread sheets continually being modified and requiring a convoluted manual process of copy and paste to preform calculations followed by reviewing the results and more pasting to produce a report. Many times per month.

    33. Re:Estimation by evansly · · Score: 2

      I would usually give time estimates based on worst case scenarios, not cost just time. Then I would always be able to give the clients their projects slightly ahead of schedule. I had 1 client I fought and fought with because she started to catch on a little. I would say, I can have that finished by end of the week, being Monday. She'll come to me on Wednesday asking why the hell isn't it done yet!?

    34. Re:Estimation by Anonymous Coward · · Score: 0

      Real assembly programmers whould tell you to take your best estimate, shift to the left, add two, and then shift to the left again!

      I did that & now I have to have the job done by 1975.

    35. Re:Estimation by pr0fessor · · Score: 1

      The Montgomery Scott work estimate calculator... I use it too.

    36. Re:Estimation by QRDeNameland · · Score: 1

      I'm assuming you meant that to be funny, but I've had to estimate time for an estimate on a number of occasions. Yes, it sounds recursive, but it's usually for cases where the research for the actual estimate is the the biggest part of the project, and once the research is done, the coding itself goes relatively quickly.

      --
      Momentarily, the need for the construction of new light will no longer exist.
    37. Re:Estimation by organgtool · · Score: 1

      My boss always lets me pick my own deadlines as long as they are reasonable. It gives me the ability to estimate how long it will take to deliver at the level of quality I am known for. It also allows me to improve on my ability to estimate project scope. However, since I choose the deadline, I have no excuses if I fail to deliver on that date. Extensions will be given as long as there's a good reason, I let him know early enough, and as long as he knows that I'm not slacking off. This autonomy has provided the best environment I have experienced so far.

    38. Re:Estimation by Anonymous Coward · · Score: 0

      >If you make your estimate based on what will happen if everything goes wrong, then your estimates will be cut by a upset project manager for being "overpessimistic".

      There, I fixed that for you. I've always said that I always estimate perfectly; it's just that people can't handle the truth.

    39. Re:Estimation by Anonymous Coward · · Score: 0

      No kidding man. At first I thought it would be all of the small tedious code regions that keep everything together, but time estimation is a lot harder than that.

    40. Re:Estimation by ArcadeMan · · Score: 2

      "Real assembly programmers hear shift-left when you say shift-left."

      I don't get it.

    41. Re:Estimation by bill_mcgonigle · · Score: 1

      excellent. :)

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    42. Re:Estimation by ArcadeMan · · Score: 1

      Real nerds use the "Scotty Principle".

    43. Re:Estimation by bigg_nate · · Score: 1

      Honest question: add two of what unit?

    44. Re: Estimation by Anonymous Coward · · Score: 0

      A real assembly programmer would shift left 2 then add 4.

    45. Re:Estimation by radarskiy · · Score: 1

      " If you make your estimate based on what will happen if everything goes wrong, then your estimates will be a lot better. "

      No, your estimates will still be inaccurate, just in somewhat different ways.

    46. Re:Estimation by phantomfive · · Score: 1

      You clearly fail to understand the meaning of 'better.'

      --
      "First they came for the slanderers and i said nothing."
    47. Re:Estimation by phantomfive · · Score: 1
      --
      "First they came for the slanderers and i said nothing."
    48. Re:Estimation by phantomfive · · Score: 1

      Never accept responsibility for someone else's estimate. It will only cause you pain.

      --
      "First they came for the slanderers and i said nothing."
    49. Re:Estimation by Anonymous Coward · · Score: 0

      I can help you with this.

      1. Break it down into parts that will not take longer than 6 hours (which should be roughly how long you're actually coding a day) to do. If you do this then you can estimate fairly accurately. If someone ask you for an estimate, don't answer right away... tell them that you will get back to them. You need to know that no matter how you say it, if you give them a number that is what they will expect.

      2. Do research before you estimate. If it's a small task, I try to actually figure out the code I'm going to change before I estimate. It's it's a bigger task I make sure I at least know where my code is going to tie in and do a quick class diagram. Just to make sure I have actually know what I'm going to be doing.

      3. Try your best to not allow scope creep. Some tactics to managing scope creep that work for me is to let them know that I can add that extra data, but I'll have to get back to them without with the adjusted estimate. If it must go into this release without adjusting the release date, I'll bring them a list of things that we can remove from the current feature list that will balance the time... that is once I've estimated the new stuff of course.

      If you're someone that can be counted on to deliver accurate estimates, within a day or two, your value goes up tremendously. Too many people use that lame "Quadruple what your initial thought is" stuff. It's one of the things that separates the boys from the men in our industry.

    50. Re:Estimation by Anonymous Coward · · Score: 0

      I agree wholeheartedly because this is the most visible departure point for people that aren't programmers. They want to know when your application will work, bug free, according to spec, and even handle the corner cases that no one thought about in the design meetings. They don't care about how to iterate over a list of elements in a collection or sort through config files or transition through states, but they damn sure want it to work within a reasonable amount of time even if they don't know how they think it should work.

      Typically this crowd also uses the estimate as a bargaining chip. You tell them six weeks, and they come back and tell you four weeks. You tell them, perhaps four weeks if everything goes right the first time, which it won't. Then you get the new four week schedule, and they congratulate themselves (and voice to others) that they just saved the company lots of money, but a month later nobody holds them accountable when the project slips by two weeks. That's the developer's fault.

      Now I don't budge my estimates for anyone. Not even when someone tells me that "it's not that hard", or "you're being unreasonable, Joe says he can get his stuff done early." Lo and behold, I deliver on time, every time. Poor Joe, he gets hit on performance reviews for being late.

    51. Re:Estimation by Anonymous Coward · · Score: 0

      What does it matter? Just keep them consistent. Sheesh.

    52. Re:Estimation by fatphil · · Score: 1

      WTF? No need for 2 instruction decodes and pipeline slots:

      LEA EAX, [EAX*4 + 4]

      --
      Also FatPhil on SoylentNews, id 863
    53. Re:Estimation by Ginger+Unicorn · · Score: 1

      Add two what? Adding two drastically changes the estimate depending on what units you're working in.

      If I say a job will take 1 year, I double it to 2 years than add 2 years then double it, that's 8 years.

      If i say the same job will take exactly the same amount of time but express it as 365 days, double it to 730 days then add 2 days then double it again to 1464 days, that's 4 years and 2 days.

      --
      (1.21 gigawatts) / (88 miles per hour) = 30 757 874 newtons
    54. Re:Estimation by kmoser · · Score: 1

      By far the hardest part of my job as a professional software developer is estimating how long a feature will take to develop.

      Actually, I find this part fairly easy. I must be an anomaly because my estimates are usually far more accurate than those of most programmers. I also tend to get a very good idea up front of what the client wants, and what they mean when they ask for vague things like "reports" or "a control panel to let me change stuff".

    55. Re:Estimation by Anonymous Coward · · Score: 0

      Holy shit, Dilbert has a mouth! When did that happen??

    56. Re:Estimation by naoursla · · Score: 1

      That is easy. Break the task down into smaller tasks that you can estimate. If you can't estimate a broken down task, break it down more (think "3 hours"). Then add up all the bits.

    57. Re:Estimation by chuckinator · · Score: 1

      I concur with your observation, and I agree with your approach to dealing with estimation. Estimates are definitely used as a bargaining chip between engineering and management, and there's some tricks of the trade to help maintain honest and reasonable estimates without sandbagging (overestimating out of self interest) the numbers. It does take some tenure to pull off, so the guy that just got hired a few months ago is likely not going to have a lot of bargaining power. It also takes intellectual honesty, the ability to clearly communicate the breakdown of the tasks step by step, and a credibility that only comes from a history of being professionally honest.

  6. Estimates by Anonymous Coward · · Score: 1

    Estimates, and filling out my time sheet. The stuff I do doesn't fit into neat little categories that the PMs want (unless they're really vague).

    1. Re:Estimates by viperidaenz · · Score: 2

      Does "Posting on Slashdot" come under "Design" or "Development"?

    2. Re:Estimates by heathen_01 · · Score: 1

      Design of course.

    3. Re:Estimates by viperidaenz · · Score: 1

      I use the "eeny meeny miney mo" technique to decide.

  7. Programmer Troubles by girlintraining · · Score: 5, Insightful

    Easy: The hardest thing a programmer has to do is explain why what they're doing isn't a simple matter of programming.

    --
    #fuckbeta #iamslashdot #dicemustdie
    1. Re:Programmer Troubles by garcia · · Score: 4, Interesting

      I once had a non-technical manager and she told me what I did was simply "magic" to her and others and while she knew the results provided weren't as simple as it seemed to them, others in the organization felt it was.

      It's a very difficult concept for non-technical people to understand and part of the life of any developer to deal with. It's the same thing many developers feel about management and administration and we all need to share in the responsibility of not assuming it's easy and/or "magic".

    2. Re:Programmer Troubles by sconeu · · Score: 2

      At least she was aware that it wasn't as easy as it looked... you were ahead of the game.

      --
      General Relativity: Space-time tells matter where to go; Matter tells space-time what shape to be.
    3. Re:Programmer Troubles by dubbreak · · Score: 2

      Definitely. No matter where I've worked that has been an issue with someone at some level in the organization. "Oh that should be easy."

      That also goes hand in hand with estimation. With proper estimates non-technical people will often think you're sandbagging. "There's no way it can take that long!"

      I'm lucky with my current clients. They've been through a successful project and a few failed ones and have a much better grasp on how long it takes to develop reliable software and why it's best to get it as close to right the first time. This also means they are aware of the costs of developing and maintaining software.

      Some of my biggest frustrations were working in companies under people that had no clue about software. Not budgeting for maintenance (i.e. assuming once the software is released it is done, and it just makes money with 0 more input of money), dictating deadlines with 0 input from the staff that will actually be writing the software, trying to create a product based on a name and no requirements then pushing the blame on the failed project onto the developers that did anything and everything that was asked of them... heck, one company I used to work at (prior to going on my own) just fired their lead dev. Why? He had the audacity to imply a failed project was the fault of people higher up. Something along the lines of:

      "You can't put the blame on us. We wrote exactly what you asked for, changing directions every time you changed your mind on what the product was."
      "Well you should have pushed back if you thought this wasn't the right way to go!"
      "Here are emails showing I did.."
      "Well you didn't push back hard enough!"
      "You said the project goes on and I don't want to hear anymore about it. Here's the email!"
      "Obviously you don't understand how things work here. We're going to have to let you go."

      Classic case of the leader surrounding himself in people that will agree with everything he says. He only ever wants to hear, "Yes, that's an amazing idea boss, you are so smart."

      --
      "If you are going through hell, keep going." - Winston Churchill
    4. Re:Programmer Troubles by Anonymous Coward · · Score: 0

      Saying that it's "magic" or that you are just super smart because you can do it, it just their excuse for being lazy. Most people could understand basic programming, it just takes concentration and persistence. The biggest difference between programmers and no programmers is that we enjoy the mental challenges while the others prefer to claim they are too mentally challenged to try.

    5. Re:Programmer Troubles by PRMan · · Score: 3, Funny

      Yeah. I had a boss that after watching Independence Day couldn't figure out why we couldn't just wirelessly connect to anything without any setup or passwords like they do on the movie. And when we told him it was impossible, he thought we were just being difficult. I hate that movie.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
    6. Re:Programmer Troubles by kbahey · · Score: 1

      There used to be a product manager at a place I worked at, he used to say : "All developers do is move windows around on the screen". So this grew into a running joke at status update meetings "... and I moved some windows around ... and had a fix for X ...".

    7. Re:Programmer Troubles by Anonymous Coward · · Score: 0

      Dude, when a woman compliments you she wants something.

    8. Re:Programmer Troubles by psithurism · · Score: 3, Funny

      Yeah. I had a boss that after watching Independence Day couldn't figure out why we couldn't just wirelessly connect to anything without any setup or passwords like they do on the movie. And when we told him it was impossible, he thought we were just being difficult. I hate that movie.

      Oh, but it is very possible, but security doesn't permit it for one obvious reason: so our primitive enemies can't connect to our space age equipment and turn off whatever vital systems keep them from blowing up our space ships or other valuable infrastructure.

      But if he ignore the lessons that could have been learned from the villain's mistakes, then you can still use it to your advantage. Explain that what they did in the movie is commonly termed "infiltration and hacking," and if he wants me to fly into our rival competitor's headquarters and install viruses on their computers; well, that's not my specialty and is illegal, but I'm pretty sure I could do that faster and derive more excitement from it than converting the tabbed based interface we have to whatever interface paradigm was in vogue this morning that you'll change your mind about this afternoon.

    9. Re:Programmer Troubles by Anonymous Coward · · Score: 0

      My current customer translated "we're going to use some open source libraries in this project" to "that feature is free in terms of programming time". Free is now the 4 letter F word in my group. It's taken a lot of work to explain that just because something is in a library that it does still require effort to use it in our code.

    10. Re:Programmer Troubles by Anonymous Coward · · Score: 0

      You should just kill the guy and take his money.

      This is far more dignified than working for a living and, arguably, more honest as well.

  8. Documentation by gabereiser · · Score: 4, Funny

    Apparently where I work, it's documentation. It's so hard, we don't have any.

    1. Re:Documentation by Anonymous Coward · · Score: 0

      It's not that it is hard, just not important when compared to getting the code done.
      Although good up front documentation will make the coding easier and faster.

    2. Re:Documentation by Anonymous Coward · · Score: 0

      That invariably comes from management and the bean counters. Despite being counterintuitive, the money people want code yesterday. I've worked in most market sectors as an AP for over twenty years, mostly freelance, and only one site wanted documentation. Everywhere else was man-the-pumps attitude, even with greenfield projects. Even trying to have clients sign off on functional requirements proves futile.

      When there has been documentation, it's alway years out of date, never updated, invariably plain wrong, has no ERD et al.

    3. Re:Documentation by Archangel+Michael · · Score: 4, Insightful

      Documentation isn't hard. It is time consuming.

      To document something well, you have to know it very well. Once you know a system that well, YOU often don't need the documentation, because it is in your head. Much of documentation isn't for yourself, it is for whomever follows you.

      --
      Agent K: A *person* is smart. People are dumb, stupid, panicky animals, and you know it.
    4. Re:Documentation by Garridan · · Score: 2

      Documentation is a skill. If you think it's not hard, you're either ignorant to your own failings, or those downstream of you are very lucky. Lots of people try hard and spend a long time on documentation and still fail to make it good. It *is* hard for most people to think of the many ways documentation needs to be used, the many mindsets of its users, and balance those two into concise, readable documentation.

    5. Re:Documentation by ArsonSmith · · Score: 1

      I find it just the opposite. I document everything for my self. I know the next time I come to do something I will forget the intricate switches and options needed to get it to work the way I did last time. Of course the documentation is only completely readable by me. I keep it all in a wiki so others can view and modify it as needed and I can see what I wrote and how it was changed by others. It also helps to get things formatted in a normal way.

      --
      Paying taxes to buy civilization is like paying a hooker to buy love.
    6. Re:Documentation by lq_x_pl · · Score: 1

      If I had mod points, you would get them all!
      Quality documentation is difficult to write. Explaining things clearly and concisely in a way that folks uninvolved with the development can grok requires that the author forget all of their assumptions as they're explaining algorithms/functionality/use. It is useful to have someone interrogate you about your code while you're generating end-user documentation for it.

      --
      An internal system operation returned the error "The operation completed successfully.".
    7. Re:Documentation by Zmobie · · Score: 1

      Honeslty, a lot of the best documentation I have seen goes hand in hand with just having a good design. When the program is well designed most variable names, function names, objects, etc. are meaningful and if you adhere to good practices such as single use, limits on functions line size etc. The code explains a lot of itself. It does NOT eliminate the need for comments (at my company we use less of them, mostly they are to explain design decision or crazy areas of the code that are not intuitive or were hacked in because of a deadline) or general documents like design docs and functional specs.

      Comments and other documentation can be extremely useful and not too time consuming to create as long as they are done right.

    8. Re:Documentation by organgtool · · Score: 1

      You're also too busy to write the documentation because you're constantly putting out fires created by other developers who don't know any better because there's no documentation.

    9. Re:Documentation by swilver · · Score: 1

      I've been the one that "follows others" often enough. You know what? I never read the documentation beyond the rudimentary "how to get the environment set up". After that, I will look at the code and see what it actually does, not what it is documented or supposed to do.

      Nothing annoys me more than having a wise ass sitting next to me telling me to read the documentation "because that's how it is supposed to work"... especially when I get called in because it doesn't work as it is supposed to work.

    10. Re:Documentation by swillden · · Score: 1

      Apparently where I work, it's documentation. It's so hard, we don't have any.

      Where I work, we document everything, in exacting detail. We call this documentation "code".

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    11. Re:Documentation by swillden · · Score: 1

      In all seriousness, this is why I have become death on comments. I hate comments in code. If your code needs comments, fix the code until it doesn't need them. Because the code is never wrong, and the comments inevitably become wrong, if they're even ever right.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    12. Re:Documentation by Anonymous Coward · · Score: 0

      "Once you know a system that well, YOU often don't need the documentation"

      Well that is bollocks for starters. Try going back to code you wrote a year ago and then tell me its still all in your head.

      "Much of documentation isn't for yourself, it is for whomever follows you."

      See above. Documentation is not only for who "follows you", it is for you and the rest of your team as well.

      No documentation = amateur programmer. The poor excuse of "it is time consuming" is just trying to cover up how bad the programming is. Best not document it in case someone sees what a botch job it is!

    13. Re:Documentation by fatphil · · Score: 1

      Absolutely. Comments are for amateurs who think that they can placate people with comments rather than good readable code. Alas some people can be so placated, but they're not the coders who actually have to deal with the code. (E.g. maintenance programmers.)

      Sure, comment things that aren't expressible as code. Such as *why* you're doing something. If you keep your functions sensible sizes, then a simple 1-line comment should be sufficient to explain what the whole thing does, and you don't need to go into *how* it does that - the how should be precisely described by the code itself, as you say.

      --
      Also FatPhil on SoylentNews, id 863
    14. Re:Documentation by swillden · · Score: 1

      Sure, comment things that aren't expressible as code. Such as *why* you're doing something. If you keep your functions sensible sizes, then a simple 1-line comment should be sufficient to explain what the whole thing does, and you don't need to go into *how* it does that - the how should be precisely described by the code itself, as you say.

      Ideally, you should be able to completely capture the "why" in the names. I agree that's not always possible, and there are often usage notes that need to be added at the level of a function, method or class. Information about thread-safety, description of the contract, etc. (though much of the latter can also be expressed as pre- and post-conditions). And I think there's a lot of value in class and method/function-level comments which can be automatically extracted to generate API documentation, like Javadoc or Doxygen -- but they also create a maintenance burden, so balance is important.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
  9. Making users happy. by Anonymous Coward · · Score: 4, Insightful

    I build something exactly from their specifications.
    Someone wants something changed, I change it.
    Someone else wants something changed, I change that.
    Another person wants it back the way it started.

    The users are NEVER happy. It's maddening.

    1. Re:Making users happy. by Anonymous Coward · · Score: 0

      It is more like marketing:

      Joe Salesdroid goes and sells Blarfmatic 1.0.2 to a customer, saying that it has this cool feature, XYZ in the next rev.

      Well, Blarfmatic has XYZ nowhere in the source tree in any, shape, or form. Joe Salesdroid lied, and now two things are going to happen, the sale gets lost or some programmer writes the feature, however buggy, to be in the program.

      Since Joe Salesdroid is in the golf foursome with the CxOs and the lead devs are not, it is almost certain which way this is going to go. Obviously the next things that will happen is that said feature which gets coded up by an unmeetable deadline has flaws in it, support gets hammered hard, which causes dev to get hammered hard by both support and the marketing people.

      Moral of the story: Management is the career path to take, or perhaps it isn't too late to hit law school (no such thing as an unemployed lawyer) and be on that golf foursome with a reserved tee time.

    2. Re:Making users happy. by Archangel+Michael · · Score: 1

      I call this "pick a lane".

      This is also a place where customizations settings can come from. If you design well, your design becomes more flexible, and users will start using things in ways that you couldn't imagine before starting the project.

      --
      Agent K: A *person* is smart. People are dumb, stupid, panicky animals, and you know it.
    3. Re:Making users happy. by BullInChina · · Score: 1

      It is also possible that Joe Salesdroid recogonized a need and sold a product that had value for that customer. Now i agree he should have consulted with the dev team, but a sale that causes inconvience is far better than no sale at all.

    4. Re:Making users happy. by viperidaenz · · Score: 1

      Sounds like the moral of the story is to play golf.

    5. Re:Making users happy. by harperska · · Score: 1

      Most users don't want customization settings. They want it to just work the way they expect it to work. Putting in lots of fiddly options isn't design. It's punting on design.

    6. Re:Making users happy. by harperska · · Score: 4, Insightful

      The key to good design, on the other hand, is making it work in the way the user expects it to work, not in the way the user tells you they want it to work. More often than not, those two are quite different.

    7. Re:Making users happy. by AmaDaden · · Score: 1

      The problem you're having is that users don't know what they need, they just know they have problems and they are suggesting solutions for you to implement they think will solve them. The problem with that is they don't know what computers are good at so they make suggestions that sound good but are not likely to work well in practice. You need to take their requests and see what the real problem they are trying to solve is. Then point out the problems in their solution and suggest features that can solve the real problem for them. Just remember to be nice about it so they will learn to trust your judgement. Nobody wants to give in to the guy who loves to yell "I told you so"

    8. Re:Making users happy. by beowulfcluster · · Score: 1

      I was once asked to move a checkbox from the bottom to the top of a panel so that the user wouldn't have to tab through all the other textfields and things in the panel to get focus to the checkbox. I was then asked to change the focus traversal so that tabbing through the panel skipped the checkbox (yes, really) so they wouldn't have to tab past it every time they wanted focus on the first textfield. These requests came from the same user.

    9. Re:Making users happy. by Anonymous Coward · · Score: 0

      I learned the hard way that it's pretty much impossible to compete internally with the salesdroogs. The only solution for me was to go to work where there aren't any.

    10. Re:Making users happy. by Pfhorrest · · Score: 1

      There are actually a lot of unemployed lawyers. When the economy tanked in 2008-2009, a lot of high-level lawyers got laid off, which made it virtually impossible for fresh law school grads to get jobs in their field (because there's so many people with many years of experience ahead of them in the jobs line). In 2009 I was dating someone with a juris doctorate who worked a call center to pay the bills. Last I heard she'd managed to make her way up to some paralegal-esque office job, but still couldn't find real law work befitting her education. And apparently that's true of a lot of people in similar situations.

      --
      -Forrest Cameranesi, Geek of all Trades
      "I am Sam. Sam I am. I do not like trolls, flames, or spam."
    11. Re:Making users happy. by Kielistic · · Score: 1

      Yes. The way they expect it to work. Which is often quite different from how another will expect it to work.

      Good customization accommodates both with minimal effort to either.

    12. Re:Making users happy. by Archangel+Michael · · Score: 1

      My point exactly.

      It is like the difference between iOS and Android, especially keyboards. I can't stand the stock iOS keyboard. I sucks as far as I am concerned. With Android, if I don't like the keyboard, I can put a different one on. With iOS, not so much. One is a better design, because it has the capability of being more. Not every user cares, but those that do can change it.

      --
      Agent K: A *person* is smart. People are dumb, stupid, panicky animals, and you know it.
    13. Re:Making users happy. by Anonymous Coward · · Score: 0

      Welcome to the 99%...

      Better to be in the 1%: "We fuck things up, but you get to pay!'

    14. Re:Making users happy. by Anonymous Coward · · Score: 0

      In any other business, selling something you don't have is called 'fraud.'

    15. Re:Making users happy. by Anonymous Coward · · Score: 0

      Worse, given a project from someone way up the chain with little specifications, and they give you little time to do it. Try to build some project management in to gain a little sanity but stakeholders keep adding requirements. Then the guy at the top, who has attended most of the project meetings wonders why the project is 6 months overdue.

    16. Re:Making users happy. by naoursla · · Score: 1

      Create milestones. Only change the spec like that between milestones and get buy-off on the design changes and impact to the schedule.

  10. Documentation by Anonymous Coward · · Score: 0

    Documentation. In particular, the kind you know nobody will read. They have to have binders of documentation to show the acquiring company though. They won't read it. They'll just look at the size and number of binders. An equal candidate for first place is estimates. I kept having to tell people that it's not like laying pipe. There are no standard estimates. It's like they want you to lie to them. The whole thing has no purpose other than to put the programmer on the spot. If your estimate is too long they push back. If it's too short, they have what they want--a reason to blame you. OK, yep. It's estimates. Much worse than documentation.

    Reading other people's crappy code is bad too; but nowhere near as bad as PHB shit like estimates and docs that you know won't be read.

  11. Their laundry by Anonymous Coward · · Score: 3, Funny

    Their laundry

  12. Understand existing code by Anonymous Coward · · Score: 4, Insightful

    Trying to comprehend other peoples code is, without a doubt, the hardest thing for me. Naming? That would have never occurred to me as a 'problem.' If you can't come up with a proper name fairly easily maybe you didn't really know where you were going.

    1. Re:Understand existing code by Anonymous Coward · · Score: 0

      Trying to comprehend other peoples code is, without a doubt, the hardest thing for me. Naming? That would have never occurred to me as a 'problem.' If you can't come up with a proper name fairly easily maybe you didn't really know where you were going.

      I agree. But this gets complicated. I deal with a system where I get three different date formats depending on where I am pulling information from. Then I have to put it into other formats depending on where it is going. So I build functions to format them correctly. If I build the swatch function which would handle everything, it would be a bear and need to be well documented but I could name it something like 'date_formatter' and have a table of contents at the top. But that is too time consuming and error prone. So what I end up having is several functions named along the lines of date_formtter_mm-dd-yy_yyyy-mm-dd. This gets pretty unreadable after a while.

    2. Re:Understand existing code by erp_consultant · · Score: 1

      This has happened to me only twice in my career. I was brought in to fix code that someone else wrote. The documentation was somewhere between poor and non existent. In both cases I spend literally weeks poring over the code trying to figure out what the hell this person was trying to accomplish. In the end I was forced to confront the client and admit to them that I couldn't make heads or tails out of it. My recommendation to them was to scrap this spaghetti code and rewrite it in a form that was maintainable.

      Interestingly, in both cases, they chose to bring back the spaghetti coder and have him finish the work. I told them they were throwing good money after bad. Fell on deaf ears. I told them that by the time he was done they would have an even bigger mess on their hands. Not only that, this person would have them by the short hairs until the end of time because he is the only person on earth that could possible make any sense of the mess he created. Crickets. In the end I figured they were a perfect match for one another, wished him luck, and moved on.

    3. Re:Understand existing code by Anonymous Coward · · Score: 0

      Trying to comprehend other peoples code is, without a doubt, the hardest thing for me. Naming? That would have never occurred to me as a 'problem.' If you can't come up with a proper name fairly easily maybe you didn't really know where you were going.

      Coming up with names usually isn't too problematic, it's coming up with naming conventions, to tame large projects.

    4. Re:Understand existing code by Anonymous Coward · · Score: 0

      After spending a good 2-3 years wading through he messes of other people (not mention that author ego is inversely proportional to code quality) I wholeheartedly agree.

    5. Re:Understand existing code by Anonymous Coward · · Score: 0

      I guess I don't see the problem here... does your programming language include date conversion & formatting functions in its (class?) library? Why do you need to name anything beyond the source and destination?

    6. Re:Understand existing code by DanielOom · · Score: 1

      Understanding existing code is what a programmer on a team does much of the time. Sometimes the documentation is missing, or I am too lazy to go searching for it. The original programmer is usually not on hand. Comments in the code are rare, variables inepty named.

      Finding bugs in someone else's code is not easy. The real hard part is when you've found a bug and try to fix it, but have no clue as to what the original programmer intended it to achieve.

  13. The hardest part? by Anonymous Coward · · Score: 0

    Explaining my work to laymen

  14. PCLoad Letter? WTF does that mean? by binarylarry · · Score: 3

    Deal with clueless management.

    --
    Mod me down, my New Earth Global Warmingist friends!
    1. Re:PCLoad Letter? WTF does that mean? by tutufan · · Score: 1

      This might sound like a wisecrack, but it is in fact the answer. You can be a Michaelangelo of programming, but if your boss comes in and tells you that from now on everyone will be using six-letter variables names, programming in Visual Basic, and using nothing but Perforce for version control, the quality and power of your results will be so-limited. Some people imagine that a really good programmer can overcome any set of such constraints, but it's easy to see that that's not the case.

    2. Re:PCLoad Letter? WTF does that mean? by Anonymous Coward · · Score: 0

      One of these things is not like the other:
      six-letter variables names, programming in Visual Basic, Perforce

    3. Re:PCLoad Letter? WTF does that mean? by Anonymous Coward · · Score: 0

      At work we use perforce, but many people in the team just use git p4 and no one will ever know the difference.

  15. Answering questions on Slashdot by Anonymous Coward · · Score: 0

    The hardest part of my day is coming up with pithy replies to 'Ask Slashdot' questions.
    So, like, is this meta or what?

  16. Second to estimation by scottnix · · Score: 1

    A distant second to development time estimation is when I'm working for a place that requires class and or worse, pseudo code level design. I would almost always rather do a functional spec or similar higher level design then just start cranking out code, making changes as needed.

  17. Easy solution. by aardvarkjoe · · Score: 4, Funny

    I name all of my classes and variables "George." Problem solved.

    --

    How can we continue to believe in a just universe and freedom to eat crackers if we have no ale?
    1. Re:Easy solution. by brainboyz · · Score: 1

      You must've gone to the same school my coworker did. He names everything "My".

    2. Re:Easy solution. by Anonymous Coward · · Score: 2, Funny

      And your namespace is "Jungle", right?

    3. Re:Easy solution. by Anonymous Coward · · Score: 0

      I most likely had to do with starting with Perl as their first language.

    4. Re:Easy solution. by Hatta · · Score: 3, Funny

      Ah, a perl user. my $my;

      --
      Give me Classic Slashdot or give me death!
    5. Re:Easy solution. by Anonymous Coward · · Score: 0

      So he's the guy who came up with that "My Computer," "My Documents," "My Pictures" crap? Slap him for me!

      I worked with a programmer who learned the "correct" way to label those iterators was:

      foreach (listItem as anItem) ...because it supposedly makes the code more "English-like." I pointed out to him that you never say "hand me that anItem"!

    6. Re:Easy solution. by nschubach · · Score: 1

      He doesn't name it that way. He copy pastes it from a tutorial site...

      --
      Every time I start to have faith in humanity, I ruin it by driving to work between 7 and 8 am.
    7. Re:Easy solution. by Anonymous Coward · · Score: 0

      I name all of my classes and variables "George." Problem solved.

      John, I hate you and working on the crappy code you have done!

      br. Pete

    8. Re:Easy solution. by Anonymous Coward · · Score: 0

      In Python I name all my variables Bruce.

    9. Re:Easy solution. by TheSpoom · · Score: 1

      Go away, George.

      --
      It's better to vote for what you want and not get it than to vote for what you don't want and get it.
      - E. Debs
    10. Re:Easy solution. by Tablizer · · Score: 1

      I name all of my classes and variables "George."

      George indeed was quite variable. "This month let's invade X!"

    11. Re:Easy solution. by Anonymous Coward · · Score: 0

      In my first year at university I found my Scheme homework so easy that I started reusing operators as variables. Over Christmas holidays we were assigned to basically write a regexp matcher for scheme data structures. I finished it early before Christmas and the next year I had a hard time explaining my code to the tutor...

    12. Re:Easy solution. by HyperQuantum · · Score: 1

      Oh, you work with Michael Widenius?

      --
      I am not really here right now.
  18. explaining to others what i do by kcmastrpc · · Score: 2

    i mine as well tell them that I raise unicorns.

    1. Re:explaining to others what i do by SJHillman · · Score: 4, Interesting

      I'm one of those guys who do a bit of sysadmin, a bit of desktop support, a bit of coding, etc. It got to the point where if someone not in IT asks what I do, I just tell them "I run the Internet". Sadly, most of them take it seriously.

    2. Re:explaining to others what i do by phantomfive · · Score: 1

      i mine as well tell them

      With that kind of sentence, it's no wonder you've been having troubles.

      --
      "First they came for the slanderers and i said nothing."
    3. Re:explaining to others what i do by CODiNE · · Score: 1

      There's a good I.T. Crowd episode about that.

      Consider putting a blinking light on a box and asking people if they'd like to hold it for a second.

      --
      Cwm, fjord-bank glyphs vext quiz
    4. Re:explaining to others what i do by Anonymous Coward · · Score: 0

      I had the same kind of job, and I told people I did "plumbing."

  19. Management by Anonymous Coward · · Score: 0

    Having to work on things like "Independent Development Plans", or touchie feelie things like personal objectives.

  20. I had to put down my 15 year-old dog. by kumanopuusan · · Score: 5, Funny

    That was hard. I loved that dog.

    --
    Use of the words "good", "bad" or "evil" is almost invariably the result of oversimplification.
    1. Re:I had to put down my 15 year-old dog. by jbeaupre · · Score: 1

      Next time use a Python script.

      --
      The world is made by those who show up for the job.
    2. Re:I had to put down my 15 year-old dog. by Anonymous Coward · · Score: 0

      Emacs has a macro for that

    3. Re:I had to put down my 15 year-old dog. by Anonymous Coward · · Score: 0

      Or an actual python.

    4. Re:I had to put down my 15 year-old dog. by avandesande · · Score: 1

      It's so true. if you have some talent and experience programming is a piece of cake- you have the opportunity to solve tens or even hundreds of problems in a single day, it can be addictive. If only real life was that simple...

      --
      love is just extroverted narcissism
    5. Re:I had to put down my 15 year-old dog. by Anonymous Coward · · Score: 0

      Is that a Java dig?

      Just want to make sure I am understanding the joke right.

    6. Re:I had to put down my 15 year-old dog. by krray · · Score: 3, Interesting

      I'm not sure why you got flagged funny.
      Off-topic, sure, but FUNNY?

      I'm with you though. Had to do the same not too long ago. 15 years and 10 months my black lab made it to. Hardest day of my life was putting him down.

      And then shortly after... My uncle went ape-shit crazy. Killed his wife. And was shortly thereafter murdered himself by S.W.A.T. No joke.

      And there sat the dog. So I got on a plane and drove the dog home +2,000 miles.

      Probably the best dog I've ever had yet...

    7. Re:I had to put down my 15 year-old dog. by Anonymous Coward · · Score: 0

      The dog that was already dead sat there when your uncle got himself expired by cop?

      And then you got on a plane and drove?

      What the fuck are you on?

    8. Re:I had to put down my 15 year-old dog. by Anonymous Coward · · Score: 0

      My wife said she was leaving with my dog. Man I'll miss my dog.

      Offtopic: Just before I came home I was told to be careful, because I was catching a lift with a women that some people think is promiscuous, and my wife is elsewhere.

    9. Re:I had to put down my 15 year-old dog. by Dragon+Bait · · Score: 2

      That was hard. I loved that dog.

      I would have marked this as "insightful" versus funny.

      For me:

      1. -- Watching the love of my life marry someone else because I was too cowardly to ask her out in time.
        -- Explaining to my nephew that he'd never see his dad again.
        -- I still don't know what to say/do around my niece that was raped.
        -- I don't know if I'm proud of myself or self loathing for not having killed the rapist yet.

      Most of these fall into "communication with people"; one falls into "planning and plan execution."

  21. People by CnlPepper · · Score: 2

    Deal with people....

    1. Re:People by CnlPepper · · Score: 4, Insightful

      ...particularly physicists who think they can code.

    2. Re:People by Anonymous Coward · · Score: 0

      Agreed. Dealing with people is the single most difficult thing about my job (which consists of database programming, system adminstration, and tech support), and consequently, the reason why I've gone absolutely nowhere after 15 years of a "career" (in terms of both respect AND compensation). The one thing I'm proud of is that I've learned a shitload in that 15 years, even if I have nothing to show for it.

    3. Re:People by EmagGeek · · Score: 1

      That's why you give the "dealing with people" job to Tom Smykowski.

    4. Re: People by Anonymous Coward · · Score: 0

      ^ especially of the opposite sex.

    5. Re:People by Anonymous Coward · · Score: 0

      Expand that to anyone who can kind of code. They think their little script they wrote to parse CSV files extrapolates into how hard the rest of programming must not be. It's like a guy who makes origami bridges harping on civil engineers. The scope and size of the project introduces all sorts of concepts & concerns a hobbyist would never have to deal with.

      Just because you open up R and run your little K-means clustering algorithm doesn't mean you know jack shit about software engineering.

    6. Re:People by dkf · · Score: 1

      ...particularly physicists who think they can code.

      The best way to deal with such people is to break their code before their eyes in a few minutes (and having seen what passes for code among physicists, you should be able to do that without breaking into a sweat). Then tell them that they've got to make it work again, and that they've got to ensure that it stays working for 5 years. While they do their own job as well.

      Good programming is not just about banging the code out, it is about making it so that the code is obviously correct and obviously strongly resistant to getting broken, all on a very restricted budget.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
  22. Marketing, product managers by A+nonymous+Coward · · Score: 2

    It's the clueless marketing and product spec types who don't have a clue how computers work, don't have even the most superficial knowledge of how the current systems work, can't decipher what customers say they want, and write product specs which are so devoid of reality as to soak up more time straightening out than everything else combined.

    1. Re:Marketing, product managers by Anonymous Coward · · Score: 0

      It's the clueless marketing and product spec types who don't have a clue how computers work, don't have even the most superficial knowledge of how the current systems work, can't decipher what customers say they want, and write product specs which are so devoid of reality as to soak up more time straightening out than everything else combined.

      And these people always balk at the indication that what you do will take time, or is work. I can hear it now (just because it happens so often). "Look, it's really quite simple!"

      If it were so God dammed simple, then do it yourself instead of trying to explain it to me over the course of an hour.

  23. Say No by colonel+landers · · Score: 1

    I get more requests than I can physically accomplish. Usually requests come from higher ups or people that really need something to make their jobs easier. I'd like to help everyone, but keeping up is impossible.

  24. only two hard problems by Anonymous Coward · · Score: 2, Funny

    There are only two hard problems in Software Development. Naming things, cache invalidation, and off-by-one errors.

    1. Re:only two hard problems by nayrbn · · Score: 1

      Did anyone catch the off-by-one error in this post? Yes, the number of times this joke has been posted is now two.

    2. Re:only two hard problems by idontgno · · Score: 1

      No, just once now.

      Oh, wait, am I off by one?

      --
      Welcome to the Panopticon. Used to be a prison, now it's your home.
  25. Testing and Rollout by IronAmbassador · · Score: 1

    The hardest thing i do on a daily basis is testing my code properly so that it won't break any of the 100 or so applications that it interacts with, any of which may also have change and impacted how they interact with my application.

  26. Users... by cmeans · · Score: 3, Insightful

    And their ever changing specifications, indecisiveness, lack of comprehension of the time it takes to implement, then re-implement something, and their general reluctance to pay once it's done.

    1. Re:Users... by sandytaru · · Score: 3, Insightful

      Get a good analyst to do that junk for you. They exist. Make them deal with the users, get your requirements, translate them from User Speak over to proper Dev Speak, dig out the required database changes and grind out the new data, and let you code away merrily from there.

      I do that for my team, along with the functional documentation and the bulk of the testing. That frees up more time for our coders to, you know, write code.

      --
      Occasionally living proof of the Ballmer peak.
    2. Re:Users... by cmeans · · Score: 1

      We're a small shop...everyone wears many hats. They don't always fit, but we try to look fashionable :)

  27. Time Estimations by Anonymous Coward · · Score: 5, Insightful

    Here's a spec that is incomplete and will keep changing over the life of the project. Tell me how long this will take and remember that your preformance will be measured against how well you meet your estimates.

    1. Re:Time Estimations by phantomfive · · Score: 4, Interesting

      Increase your estimate to longer than it will take, even with changing requirements. Tell your boss, "this part of the spec is undefined, but in the worst case, it will take X days." When you find out a spec change will increase your estimate, tell your boss immediately.

      Estimation is definitely a skill, but it's one that can be developed.

      --
      "First they came for the slanderers and i said nothing."
    2. Re:Time Estimations by Anonymous Coward · · Score: 0

      Here's a spec that is incomplete and will keep changing over the life of the project. Tell me how long this will take and remember that your preformance will be measured against how well you meet your estimates.

      But they don't present the spec to you that way. BAs and managers are convinced that they have the most complete spec possible because they've been meeting for six months. "80% of the work is done." Start your sprint and have it done and tested in two weeks (because only programmers have to do agile).

    3. Re:Time Estimations by Stanza · · Score: 1

      Increase your estimate to longer than it will take, even with changing requirements. Tell your boss, "this part of the spec is undefined, but in the worst case, it will take X days." When you find out a spec change will increase your estimate, tell your boss immediately.

      Estimation is definitely a skill, but it's one that can be developed.

      Boss: We need to implement this.

      Me: Okay, but it will take at least a few additional days, and I'll need to look at it closer before I can confirm that estimate.

      Boss: But we can't give you additional time, we've already allocated the budget and the customer is expecting it on time!

      Me: Well the original spec doesn't have it and I'll just keep doing what I'm doing.

      Boss: But sales already told the customer that we already included that feature! Do it!

      Considering my experience, estimation skills are actually skills in lying in the original estimate to give yourself enough time when the inevitable spec changes occur. And without spec changes, that "double all estimates" is still good advice, but the one I do is bump it up to the next unit of time (think it will take a day? tell them a week. Think it will take a week? Tell them a month.).

      Also, bosses will come with ludicrous demands sometimes. The engineers at a previous place I worked at commonly told the bosses "don't schedule more than one miracle per project". The message we were trying to convey was yes, sometimes we can pull off miracles, but that's not something to rely on.

    4. Re:Time Estimations by sjames · · Score: 1

      Then the customer goes to another developer who tells them two weeks instead of a year. Sure, two years later, bozo the developer isn't even half way done, but that's no consolation since he got paid and you got nothing.

    5. Re:Time Estimations by Zmobie · · Score: 1

      I find time estimations to be by far the most difficult thing. Especially when sales promises the customer the damn sky and says we will have delivered by Monday... Our sales guys even readily acknowledge now they often give unreasonable timelines to the customer and the developers bail their asses out.

    6. Re:Time Estimations by Anonymous Coward · · Score: 0

      Considering my experience, estimation skills are actually skills in lying in the original estimate to give yourself enough time when the inevitable spec changes occur. And without spec changes, that "double all estimates" is still good advice, but the one I do is bump it up to the next unit of time (think it will take a day? tell them a week. Think it will take a week? Tell them a month.).

      Also, bosses will come with ludicrous demands sometimes. The engineers at a previous place I worked at commonly told the bosses "don't schedule more than one miracle per project". The message we were trying to convey was yes, sometimes we can pull off miracles, but that's not something to rely on.

      And yet you don't see the failure in padding your estimates? It's a self-fulfilling prophecy.

      If you pad your estimates so that you can cover the slop when the boss demands you do something stupid -- you're enabling that behavior in the future. "Well, he did it last time so he can do it again this time." "Well, he always comes through when I put one new demand on the project, so surely he can buckle down and handle two new demands this time..."

      If you're young and ever-so-afraid of your boss and keeping your job, you're likely to do this kind of behavior, because at that point in your life/career, making your boss happy is the most important thing.

      When you get older and realize your worth, you begin to grow a backbone and put your foot down, respectfully, and keep your boss's expectations in check, so as not to allow them to spiral out of control due to your own doing, because at that point in your life/career, making YOU happy is the most important thing. You can always find another job if you're good at what you do.

    7. Re:Time Estimations by phantomfive · · Score: 1

      That's not a time estimation, that's a salesguy trying to manipulate you. You never need to take responsibility for someone else's estimate.

      --
      "First they came for the slanderers and i said nothing."
    8. Re:Time Estimations by phantomfive · · Score: 1

      Don't commit to other people's promises. If your boss promised to get something done in an unreasonable amount of time, that's his problem not yours.

      --
      "First they came for the slanderers and i said nothing."
    9. Re:Time Estimations by Anonymous Coward · · Score: 0

      Unfortunately, if you give a decent estimate to a client, they will make the contract with the other software development mob that provide a lower estimate, even though that means the quality of the product will be terrible.

  28. following a changing spec list by bugnuts · · Score: 4, Informative

    The most annoying and maddening thing I've ever had to do was follow a changing spec list from a manager who thought it was some iterative process, instead of giving me an actual complete task description to work on.

    Even though it was his nickel, it sucked the enjoyment out of that job.

    1. Re:following a changing spec list by careysb · · Score: 1

      +1. My last place was so ridiculous in this regard that I decided to take early retirement.

    2. Re:following a changing spec list by DCFusor · · Score: 1

      So, you weren't doing your job - anticipating the changes and writing general code that is easily adapted to change. You wanted to be a robot, your boss wanted human judgement.

      --
      Why guess when you can know? Measure!
    3. Re:following a changing spec list by Anonymous Coward · · Score: 0

      The most annoying and maddening thing is other programmers that think we're designing battleships, so the spec will ever be complete.

      Specs are never complete.
      It's always an iterative process.
      The best that you can hope for is to die in your sleep.

    4. Re:following a changing spec list by swillden · · Score: 1

      The most annoying and maddening thing I've ever had to do was follow a changing spec list from a manager who thought it was some iterative process, instead of giving me an actual complete task description to work on.

      The solution to that is to accept that the spec is a snapshot in time of an iterative and ultimately unknown and unknowable document. In fact, that is the essence of the Agile methodology. Agile isn't appropriate for everything, but your case was exactly what it's for.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    5. Re:following a changing spec list by hh10k · · Score: 1

      What, you believe in the waterfall development model? An iterative process is the only way to go.

      Developing software is not like building a skyscraper. You can very easily turn your design upside down at any time, and you're going to miss opportunities for better features if you blindly follow some original plan. Of course it can come at the cost of time, but it's the manager's job to make these business decisions.

    6. Re:following a changing spec list by bugnuts · · Score: 1

      Basically, it was an exercise of him trying to solve a problem by throwing me at a dartboard, instead of letting me find the solution that I was hired to do. It was not an agile programming environment, it was a PHB not knowing when to get out of the way.

  29. The hardest thing is not posting snarky comments by paramour · · Score: 2

    to /. about inane flash-based articles when I should be working.

  30. Deployment logistics by curunir · · Score: 2

    The hardest thing for me is that there are so many different environments and the code needs to work in all of them. There's integrated dev, qa, staging, end-to-end testing and production and each of them are subtly different. When deploying code, the logistics around how to get it to the right place at the right time in a working state can be really hard. A simple Google search for branching strategies will show that there's numerous ideas on the best way to shepherd a team through the code freeze, regression, deploy and MR phases.

    Things get even more complex in an elastic environment where you have to autoscale. A simple call to a database can then require service discovery, master election and a whole host of other technologies/techniques that adapt to the fluid conditions of an elastic environment.

    So from a code perspective, you always have to built abstract interfaces to non-specific infrastructure. A simple file loading turns into loading a URI that loads via the proper strategy (file://, s3:// or even something custom that reads from a db). A caching layer may be distributed in production and a simple in-memory hash in development, so that has to be abstracted too. Making sure your db queries are performant can also be difficult when your local database is nowhere near the scale that exists in production.

    We've had some limited success using vagrant/chef for development environments to make them more similar to the downstream environments (i.e. developers actually run multiple VMs with individual functions as we have in our prod environment), but there's a limit to how much you can run on an individual machine.

    Naming is the easy...just get a thesaurus and understand that it's important. Though it does remind me of one of my favorite quotes about software development (credit to whoever said it originally...I'm too lazy to look it up):

    Half of programming is naming; half is figuring out responsibility boundaries; and half is rewriting because you named your god-object wrong

    --
    "Don't blame me, I voted for Kodos!"
    1. Re:Deployment logistics by Anonymous Coward · · Score: 0

      Naming is easy? I think not. A thesaurus doesn't help with confusion between, oh, deals and legs of a deal. (and cashflows in your legs)
      It really doesn't help when differing systems are using different, conflicting, metaphors and you got to integrate those things together.

  31. Designing things by sigmabody · · Score: 1

    I agree with the list, generally-speaking.

    I would expand on the designing things point: it's not just matching requirements with implementation, but also designing something which will still work 10 years and 20+ design and technology iterations from now. It's designing something to anticipate future changes, and code in flexibility where appropriate. It's making something which doesn't just perform the function, but doesn't have subtle flaws which will cause very hard to diagnose issues down the road. It's building code which will still be maintainable, even after various future iterations. The ability to design code properly is what differentiates between a "normal" developer, and and extraordinary one.

    IMHO, anyway.

    1. Re:Designing things by darkwing_bmf · · Score: 1

      The key thing I've found that helps with all of those things (though certainly not completely) is taking the extra time to drive a requirement/design/implementation down to it's essential elements and separating the high level logic from the low level implementation details. Reducing complexity today while still meeting the design goals will pay dividends down the road.

  32. Fight with Sales by darrellg1 · · Score: 2

    They promise things that can't be accomplished. Ugh.

  33. Copy paste the list please by Anonymous Coward · · Score: 0

    Could someone copy/paste the list from that site? I don't feel up to solving exactly what combination of allowing Javascript to run from 15 different domains is required to get the slideshow to work...

    1. Re:Copy paste the list please by nitehawk214 · · Score: 3, Insightful

      Could someone copy/paste the list from that site? I don't feel up to solving exactly what combination of allowing Javascript to run from 15 different domains is required to get the slideshow to work...

      The 10th hardest thing: Make their shitty javascript heavy site work.

      --
      I'm a good cook. I'm a fantastic eater. - Steven Brust
    2. Re: Copy paste the list please by Anonymous Coward · · Score: 0

      Open sores hippie

  34. GPU Programming is a PITA by dryriver · · Score: 2

    I'm still trying to find a way to use the GPU for computations without having to jump through crazy hoops to do it. Also, multithreading in general is often a PITA to get right...

    --
    Why did the chicken cross the road? Because Elon Musk put an AI chip in its head.
    1. Re:GPU Programming is a PITA by mghiggins · · Score: 1

      I'm still trying to find a way to use the GPU for computations without having to jump through crazy hoops to do it. Also, multithreading in general is often a PITA to get right...

      This.

      It still seems like it's really hard to write maintainable, extendable code that does parallel execution in anything more than a trivial way (break up a calc into independent pieces with no interaction).

      Does anyone know if there's been any interesting work on new language paradigms for this sort of thing? It feels like the community is waiting for some kind of change in semantics that'd make this easier for the bulk of developers who aren't parallel execution gurus. Like object oriented coding was for the ability to scale code by developing intelligible interfaces: not something you couldn't do with earlier paradigms, but it made it easier.

      --
      All opinions expressed herein are not my own; I haven't had free will since last year when aliens ate my brain.
    2. Re:GPU Programming is a PITA by Anonymous Coward · · Score: 0

      Qt

    3. Re:GPU Programming is a PITA by Anonymous Coward · · Score: 0

      There's an interesting case study on Chapel, Charm++, Liszt, and Loci in:

      Exploring Traditional and Emerging Parallel Programming Models Using a Proxy Application
      presentation
      paper

    4. Re:GPU Programming is a PITA by PRMan · · Score: 1

      I don't find this to be the case at all in modern OSes. Run a program you wrote in C#. Can you at any time get the 4 CPUs in Task Manager to be farther than 5% away from each other? Unless you are doing some crazy complex calculations (video, audio, compression, etc.) it's nearly impossible. I find that most people who whine about the lack of parallel execution don't actually need it.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
    5. Re:GPU Programming is a PITA by Anonymous Coward · · Score: 0

      I'm still trying to find a way to use the GPU for computations without having to jump through crazy hoops to do it. Also, multithreading in general is often a PITA to get right...

      Check out ArrayFire

      It's free for most users, works with CUDA and OpenCL under the hood, and has bindings for C, C++ and Fortran. Probably one of the easiest ways you can take advantage of the GPU for computations.

      I used this library while I was in graduate school, and found it very helpful.

    6. Re:GPU Programming is a PITA by Anonymous Coward · · Score: 0

      Learn some functional programming. Maybe play with Vertex and Pixel shaders on a random model off from one of the open source game art websites. I learned a lot about functional programming just by learning how to write shaders to produce complex effects like fluid sim, atmosphere rendering, and lighting. The Direct X SDK has excellent documentation of their shader language, you could translate it to OpenGL shader language pretty easily too, they are similar languages.

    7. Re:GPU Programming is a PITA by Anonymous Coward · · Score: 0

      http://en.wikipedia.org/wiki/SequenceL

  35. Electrical Engineers by Anonymous Coward · · Score: 0

    I'm a firmware developer. For me, I'd say it's explaining to electrical engineers and managers from electrical backgrounds that tasks aren't quite as simple as they say.

    "Oh, just read this register", they say, "It's easy, I can do it from U-Boot".... In Linux, this is not super hard, but it's not trivial either, because you can't generally simply do it from user space. That's just one example.

    1. Re:Electrical Engineers by mc6809e · · Score: 1

      Even worse is the expectation that the firmware can magically tweaked to make a poor design suddenly work as intended.

  36. Naming Conventions by sfm · · Score: 1

    I often find myself in conflict:

    Short, easy to type, but possibly ambiguous names
        -or-
    Clear detailed names in 26+ characters

    The choice depends on the audience I believe will be reading, and if I am having a good/bad day

    1. Re:Naming Conventions by viperidaenz · · Score: 1

      ctrl+space is your friend.

    2. Re:Naming Conventions by Zmobie · · Score: 1

      Good IDE with autocomplete typing gives pretty close to the best of both worlds. Only one time do you have to type out the long name and after that it is just autocomplete everything. I lean towards long names partially because of this and on large codebases this becomes necessary to help facilitate proper documentation.

    3. Re:Naming Conventions by Anonymous Coward · · Score: 0

      I think I have a solution to this: Use a short name when writing the code the first time, and then use find-replace to switch it to the longer name.

      My professor is a big advocate for long names, and I think this is how I'm going to avoid massive capitalization and typing slowdown.

  37. Preventing feature overflow by EmperorOfCanada · · Score: 1

    Preventing a steady rain of feature requests that vastly exceed the development capacity. Often these features will take longer in programming time than the time they will save.

    Another hard one is to use an older programming technology when you have been using a far newer one for some time.

  38. Working on boring projects by CQDX · · Score: 3, Insightful

    Most of the other issues don't bother me if the project is really cool. Plus with my productivity ramped up management tends to stay out my way. OTH, with boring project, everything on the list is 10x more painful. Unfortunately, for the typical programmer, their entire life is spent working on the former.

  39. Build systems. by Anonymous Coward · · Score: 0

    The code is the easy part. Compiling from a wide array of libraries on different embedded hardware is not a trivial undertaking and no every programmer is capable of doing it.

  40. Unit Testing by BlueMonk · · Score: 1

    Testing is often the hardest part of writing any feature or fix because often times it takes a relatively long time to set up an environment and a test scenario. It's also particularly difficult to narrow down a problem to its source when integrating with software for which no source code is available and support is sketchy. I've seen problems in Microsoft and SAP software that take a long time to work out and sometimes leave me SOL.

  41. Naming things by Anonymous Coward · · Score: 0

    Naming things is the single most hardest thing humans have to do....

    6 months to figure out a name for our unborn.....

    3 hours making up a cool name for Skyrim character, instead of playing the damn game. .....

    1. Re:Naming things by Anonymous Coward · · Score: 0

      You got it backwards. I spent 6 months thinking about my Skyrim character (before the game came out), but the kid was a last-minute thing. Apparently you cannot name a child "Big Daddy Fuck-fister the Orc," so I was forced to think quick. It turned out for the better: Little Bobby (Tables) is doing just fine; although, he does like to eat the cat's tail. And that's not a euphemism.

  42. Getting requirements that conflict. by darkwing_bmf · · Score: 5, Insightful

    The hardest part is when the person asking you to implement something new doesn't think through the implications of what they're asking for. Sure it looks great on powerpoint for one specific use case, but rarely are all of the relevant factors are taken into account.

    1. Re:Getting requirements that conflict. by Anonymous Coward · · Score: 0

      This. Nothing in programming is as difficult or important as when you have to take mutually exclusive requirements from two different people - or sometimes just one person - figure out what it is they really need, and convince them that yours is the right solution. Users generally come to you with a solution instead of outlining the problem, and they tend to have really stupid ideas for what constitutes the correct solution.

    2. Re:Getting requirements that conflict. by Anonymous Coward · · Score: 0

      There are products like this on the market (see Dedupe appliances), the marketing points sound fantastic, but when you either are charged with implementing it, or maintaining it for a long period of time you discover that the negatives may actually be worse than the problems being solved.

    3. Re:Getting requirements that conflict. by viperidaenz · · Score: 1

      What about when the army of BA's have given you a full set of requirements then they change one use case half way through development, so the others conflict... and the snow ball starts rolling down the hill.

    4. Re:Getting requirements that conflict. by Xyrus · · Score: 1

      Well that goes hand in hand with what I think is the hardest: being able to think like a complete fucking idiot. I'm convinced that if I could think like the most idiotic end users/managers/marketers of my software, I would be able to create near invincible code that would work exactly as they want, ahead of time and under budget. :)

      --
      ~X~
  43. Looking at this from the wrong direction by roc97007 · · Score: 1

    Math? Math is fun. Naming things? Very entertaining. Designing a complicated algorithm? It's what I live for.

    Had you asked me twenty years ago what was the hardest thing about programming, I'd say, interfacing with non-technical management, for a variety of reasons.

    As me today, and I'd say offshore infrastructure admin. Doing my job is fun. Somehow convincing someone else with few communication skills and little training to do their job so I can do mine, that's probably the hardest part today.

    Not the answer you may be looking for, but the difficulty of the problem at hand is generally under your control. A balky environment managed by an undertrained call center is not. That's where the real pain originates.

    --
    Oliver's law of assumed responsibility: If you're seen fixing it, you will be blamed for breaking it.
  44. WTFM. by jzu · · Score: 1

    Nothing is harder.

  45. iCloud by Porkwich · · Score: 0

    For the love of fuck, anything involving iCloud.

  46. This one's easy by Anonymous Coward · · Score: 0

    The number one most difficult thing for developers to do is to act like civilized adults who are members of a team of people concerned with the success of the team as a whole instead of just themselves.

  47. Work with bad programmers by Anonymous Coward · · Score: 2, Insightful

    Nothing pains me more than seeing bad programmers make up fake problems they then "solve" with unnecessary complexity, no thought into the pattern applied (if applied at all) and using the loudness of numbers to silence a good idea.

    1. Re:Work with bad programmers by Anonymous Coward · · Score: 0

      I feel this. I recently re-wrote something that was 3000 lines, a dozen files, didn't make a scrap of sense, crashed randomly, used too much memory, and used horrible practice and naming everywhere, and exposed dozens of API functions when it should have been 2 or 3. (think separate functions for setLED1(state), setLED2(state), etc.)

      My solution used no memory allocation other than a few bytes on the stack, was less than 300 lines, and my co-workers could actually understand it.

      This was a process which was responsible for blinking LEDs. I am not fucking kidding.

    2. Re:Work with bad programmers by PRMan · · Score: 1

      And even worse is when the 3000 line dozen file version is deemed to be correct because it implements some pattern. Yeah, testability (for the test cases you didn't write) and "being correct" are much better than readability or simplicity.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
  48. Communicate effectively by thatDBA · · Score: 2

    Communicate effectively with less intelligent people

    1. Re:Communicate effectively by PRMan · · Score: 1

      And when they assume that because communicating is easy for them, that "you're so smart" it should be easy for you and if you miscommunicate (meaning they are too stupid/lazy to understand basic concepts), it's because you are being devious and uncooperative.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
  49. Where did it go? by SuperKendall · · Score: 1

    Nowhere on the list did I see cache invalidation. What gives?

    I guess it's the third item on the list at work, only the other way.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  50. People by Anonymous Coward · · Score: 0

    The single hardest thing to do:
        Interface with people and manage their expectations

  51. Dealing with reality... by jasno · · Score: 3, Insightful

    The hardest thing, consistently over the years, is to bridge the gap between the ideal and the practical. We've all faced problems that could be so easily solved if we could just rearchitect the code or omit a few requirements. Situations that would be so simple if only they were so simple. Crafting a beautiful algorithm and then being told that you have to add an exception here, or a special case there. I generally prefer driver-level programming because it tends to involve the lowest number of hacks and special cases(if you're laughing at this, you're probably a firmware guy that hasn't written an application or middleware in a while).

    Working on a commercial product that has limited logging ability and trying to reproduce and diagnose errors in the field is pretty high up on my list of hard things to do. Unfortunately it is nearly all I do nowadays.

    Working on unglamorous code or writing documentation is hard, but mainly because it's hard to stay focused.

    --

    http://www.masturbateforpeace.com/
    1. Re:Dealing with reality... by phantomfive · · Score: 1

      The hardest thing, consistently over the years, is to bridge the gap between the ideal and the practical. We've all faced problems that could be so easily solved if we could just rearchitect the code or omit a few requirements. Situations that would be so simple if only they were so simple. Crafting a beautiful algorithm and then being told that you have to add an exception here, or a special case there. I generally prefer driver-level programming because it tends to involve the lowest number of hacks and special cases(if you're laughing at this, you're probably a firmware guy that hasn't written an application or middleware in a while).

      The art and challenge of Software Engineering is making an elegant design that matches all the constraints.

      --
      "First they came for the slanderers and i said nothing."
    2. Re:Dealing with reality... by jasno · · Score: 1

      ...and that handles the constraints when they change, because they will change.

      Maybe the marketing guy changed his mind. Maybe your #1 customer has a special case they need you to accomodate. Maybe the latest TV on the market improperly implemented HDMI and now you've got to accomodate that.

      --

      http://www.masturbateforpeace.com/
  52. 2 hard things in comp science by Aviancer · · Score: 2

    This was eloquently described by Phil Karlton, and extended by Martin Fowler:

    There are only 2 hard things in computer science: Cache invalidation, the naming of things, and off-by-one errors.

    http://martinfowler.com/bliki/TwoHardThings.html

    1. Re:2 hard things in comp science by El_Muerte_TDS · · Score: 1

      And that's the 4th time this joke was posted.

  53. Data Structures and Algorithms by Anonymous Coward · · Score: 0

    Choosing the best data structure to represent a problem and the best algorithm to manipulate it. In OOP, defining the best set of classes to do the job.

    1. Re:Data Structures and Algorithms by Musc · · Score: 1

      That's the easy and fun part.
      If you find that to be the hardest part, then what do you consider the fun part?

      Compared to figuring out a design, everything else is tedious and boring. Things like debugging, documentation, and testing are hard because they are boring.

      --
      Hamsters are at least as feathery as penguins. HamLix
  54. The hardest thing? by DJCouchyCouch · · Score: 1

    Getting up in the morning.

  55. Hardest thing a programmer has to do is ... by vivek7006 · · Score: 1

    Find a mate and procreate

    1. Re:Hardest thing a programmer has to do is ... by viperidaenz · · Score: 1

      That's the easy part. It's the child support payments that come 9 months after she sobers up that's the hard part.

  56. Naming? Yes, but not so much. by jthill · · Score: 1

    Hardest: understanding the actual requirements, fairly often the first part of that is distinguishing clients' (management, other departments, customers, whatever) proposed resolutions to situations they as a rule neglect to describe from the actual situations and the resulting problems that need solving.

    Next hardest: naming is the easily-describable part of it, a prerequisite but not the purpose. What it boils down to is making it worthwhile to read the code, to follow the "if you can't teach it, you don't understand it" rule and not waste people's time.

    After that, the stuff you can learn by ordinary study.

    --
    As always, all IMO. Insert "I think" everywhere grammatically possible.
  57. Project Managers by foistboinder · · Score: 2

    What Are the Hardest Things Programmers Have To Do?

    Dealing with incompetent project managers.

    1. Re:Project Managers by cerberusss · · Score: 1

      Dealing with incompetent project managers.

      Goddamnit Foist, why haven't you finished your Sprint today? And why didn't you fill in your timesheet? I expect I can find you in the office this Saturday.

      --
      8 of 13 people found this answer helpful. Did you?
    2. Re:Project Managers by Anonymous Coward · · Score: 0

      I don't program full time, but I get along with the project managers much better than the other programmers...

      I don't know C# or Java, so I write all my code in Haskell. The other programmers are all trying to get me to change, they say no one else in the company knows Haskell and that I must be mistaken that comments are not recommended in Haskell like they are in other languages. Also, apparently monads and functors aren't big in other languages, I just assumed that anyone developing code would have taken some category theory in college?

      But anyway, most of them got laid off last month and a lot of the Java and C# coding went to Bangalore, but the project managers decided to keep me. It was a total shock to me since their code is well documented and I use mostly 3 letter variable names in mine. But what can you say? I guess the project managers see the big picture...

    3. Re:Project Managers by roeguard · · Score: 1

      In my experience, you only need one person in that team to be competent -- a decent project manager can plan for an incompetent coder, and an good coder can direct an incompetent project manager.

      The real problem is if both are incompetent. And since competency varies from project to project, even within the same person...

  58. Hardest thing for programers... by Anonymous Coward · · Score: 0

    What is the hardest thing "coders" have to do? Based on the evidence that I have seen, over more than 20 years?

    Find and keep a girlfriend.

  59. That is easy by cjjjer · · Score: 1

    Getting the proper requirements from people.

  60. There are only two hard things in Computer Science by Anonymous Coward · · Score: 0

    There are only two hard things in Computer Science: cache invalidation, naming things and off by one errors.

  61. should be on the list by Anonymous Coward · · Score: 0

    The hardest thing for programmers to do?
    1)Remember that not everyone has a super super fast computer with tons of ram.
    2)Remember not everyone is or should be Administrator on their computer.

    1. Re:should be on the list by pigiron · · Score: 1

      Anyone who is a software developer should ALWAYS have admin privileges be an administrator on their desktop development machine and also on any server development machine.

      I make this very clear to any prospective employer. If that criterion is not met I simply refuse to work there.

      Sysadmins should be strictly shown their proper place below developers in the hierarchy of any shop.

  62. In order of difficulty ... by PPH · · Score: 1

    1. Enumeration.
    ......

    Wait. Strike that. Make it:

    0. Enumeration.

    --
    Have gnu, will travel.
    1. Re:In order of difficulty ... by pigiron · · Score: 1

      Everyone knows programmers don't know how to count!

    2. Re:In order of difficulty ... by Anonymous Coward · · Score: 0

      Seriously, it bugs the shit out of me when I hear someone say "the first item is index 0, because programmers start counting at zero." NO, they don't! They know that the offset of the first item is zero bytes from the base address. Saying we "start counting at zero" makes us sound like idiots instead of knowledgeable about how the computer works.

    3. Re:In order of difficulty ... by pigiron · · Score: 1

      the offset of the first item is zero bytes from the base address.

      Correct! JUMP immediately to...

  63. Hardest thing programmers have to do is by Anonymous Coward · · Score: 0

    Hardest thing programmers have to do is to get a girlfriend. :P

  64. Wake up and get out of bed... by Anonymous Coward · · Score: 0

    Programming is a piece of cake. This is the reason why I do it rather than automotive repair or electronics technician, cable tv installer or any other labor intensive job.

    The two hardest things to do every day, wake up and get out of bed. The rest of my day is just gravy.

    Pretending I am doing something or look like I am doing something, with my head propped up on my hand with my arm on the desk, sleeping. That is tough to do.

    If I need to stretch out a project, killing time, hiding in various peoples offices, having to sneak back in after a 2 hour or more lunch, pretending to be interested in meetings that have nothing to do with my project, to kill more time, are all tough to do.

    If a clueless middle manager give you and your staff a month to complete a project and you know you and your team can do it in a week and a half, why tell him any different. Turn it over to QA 2 days early and look like a hero.

    So, I would say killing time is the hardest thing to do.

    1. Re:Wake up and get out of bed... by Musc · · Score: 1

      If programming is a piece of cake, you need to find something more challenging to program.
      Bragging that your programming job is easy is like bragging that you aced remedial pre-algebra.

      --
      Hamsters are at least as feathery as penguins. HamLix
    2. Re:Wake up and get out of bed... by Anonymous Coward · · Score: 0

      Yea, I could find a more challenging job. But I have worked here long enough to have seniority and project lead on every project handed to me. I get to have staff work for me, I have my own office with a door, the key code to the management bathrooms, and an assigned parking space.

      I am an older programmer that nobody wants to hire now. Recruiters see a long history on my resume and I get passed by for being "Senior" level. I've applied to atleast 20 jobs in my area in the last year and I haven't heard back from one of them. Even if I cut it back to just my current job, 10 years still means "Senior" level.

      I don't make the greatest amount of money that I have ever in my career, but it is livable.

      Oh and when I was is school many moons ago, I did ace remedial pre-algebra. And programming is a piece of cake.

  65. Hard by Anonymous Coward · · Score: 0

    Hardest thing for a programmer?

    On Windows: Getting other people's shit to actually compile without spending hours fixing things.

    Everywhere: Keeping things organized well. Even if you think you've planned ahead, there will be roadblocks that cause you to either rewrite huge chunks or slap something in wherever you can fit it.

  66. Hardest thing a programer has to do... by umask077 · · Score: 1

    Please a Marketing department.

    --
    --- Always remember. 99.36% of all statistics are inaccurate.
  67. The should hire someone by Anonymous Coward · · Score: 0

    Who can talk to the customers /and/ the developers!

    And get someone who can install a working printer.

  68. Focus. by whatthef*ck · · Score: 1

    And not waste time on Slashdot all day.

  69. Are you kidding? by wilder_card · · Score: 1

    The technical stuff is all doable. Politics, management, etc. -- those are hard. Best part of the job is getting that stuff out of the way and designing/coding.

  70. Testing, testing, testing by JazzHarper · · Score: 3, Insightful

    I would rather write documentation all day long than write tests. Developing a good test suite is hard. (Putting together a crappy set of tests is easy, but of no value). As much as I hate developing a test suite, though, I love having it when it's time to make a release.

    1. Re:Testing, testing, testing by Anonymous Coward · · Score: 0

      It takes to most time of all. About 95% of my unit test that fail are because of a bug in the unit test, not the actual code it is testing. Somehow I tent to write the original code quite well, but unit test, very difficult to get right.

  71. working with management by loufoque · · Score: 1

    The hardest part of being a Software Engineer is making management understand how valuable you are and making them assign to you interesting work.

  72. Debugging?? by Tough+Love · · Score: 4, Insightful

    Because debugging did not even make the list, I must assume that the author is only an armchair programmer, or only writes toy programs. And why is "choosing names" rated harder than "designing"? This opinion could only come from someone who is often required to choose names, but never to design.

    --
    When all you have is a hammer, every problem starts to look like a thumb.
    1. Re:Debugging?? by Anonymous Coward · · Score: 0

      Perhaps he's a java script developer who doesn't even know what a real programming language actually is. This is based on the obviousness of each point listed, the utterly stupid comments from fellow devs: "ugh, I don't wanna do this waa" and finally the nasty ass site with 11 ad filled pages that could have been compressed into a single read - what self respecting programmer would publish anything to something so awful?

      There is simply nothing in this ad whoring shit stain of a story that should not be obvious to an actual programmer, and none of the points should be in the top 10 of hardest things for a developer to actually do, because a developer should be perfectly capable of performing each of them or they're NOT a developer in the first place! What's that? Programming is hard? Oh poor baby!

    2. Re:Debugging?? by Anonymous Coward · · Score: 0

      Debugging is hard if you can't reproduce the bug. Otherwise it's just a matter of research, time, and thought - exactly like programming.

    3. Re:Debugging?? by Krokus · · Score: 1

      While there are clear-cut steps to diagnosing and fixing bugs, the hard ones are the interrupt- or thread-related bugs that only happen when you are running the release version and that magically hide whenever you make a debug build or try to add code to log information. You're pretty much left with just intuition at that point.

    4. Re:Debugging?? by phantomfive · · Score: 1

      Modern programmers don't debug their code, because after all, bugs are no big deal.

      That might see strange, but most bugs can be covered up by restarting every time something goes wrong. Which is what most web servers do, they restart on every single request.

      --
      "First they came for the slanderers and i said nothing."
    5. Re:Debugging?? by Requiem18th · · Score: 1

      No longer is this writen by an armchair programmer, it was written ofr a shitty site that can't layout a list without using 21 trackers. Damned slideshow won't load until every single webbug has been enabled. I'd rather not bother with it.

      --
      But... the future refused to change.
    6. Re:Debugging?? by Anonymous Coward · · Score: 0

      First: Debugging is easy if you know the secret: "describe what's not working correctly to a five year old." Once you can do that, the rest is easy. Try it. It works 100% of the time. (Most people that suck at debugging actually suck at understanding / describing what's wrong; explaining it to a five year old requires you to simplify the problem to a degree that will cause the solution to be completely obvious.)

      Second: You're forgetting the dependency: if designing may be harder than choosing names, but you have to be good at choosing names to be good at designing. Think of it like an RPG: If you don't put enough points into naming, then you won't be able to unlock designing. Most programmers fail at design because they fail at naming. It would be unfair to list a skill for which half of the group fails a prereq.

      p.s. Note that I'm not advocating a double standard here. I think the vast majority of programmers have the necessary problem solving skills to be competent debuggers, but I think the vast majority (not the same set) lack the naming skill to be competent designers.

    7. Re:Debugging?? by Anonymous Coward · · Score: 0

      Oh, my. Let's just pick the first sentence:

      Perhaps he's a java script developer who doesn't even know what a real programming language actually is.

      First: It's Javascript.

      Second: Javascript is a real programming language. You not knowing and/or understanding that it is, and why it is, is humorous.

      The rest of your post is juvenile, and that's being kind. I do agree about the site of the story being crap, though. But that's it. You need to grow up.

  73. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  74. Hardest thing by sugar+and+acid · · Score: 3, Insightful

    From my experience, the hardest thing for a programmer that because code may look weird or ugly is NOT a reason by itself to change it. The only reason to change it is if it is buggy, or does not meet the current requirements.

    But some programmers just can't help themselves, dig in with both hands rip the guts out end up breaking everything because they have failed to understand why it was written in that weird ugly way. On the other hands I'm glad they are programmers and not surgeons:)

    1. Re:Hardest thing by DdJ · · Score: 1

      From my experience, the hardest thing for a programmer that because code may look weird or ugly is NOT a reason by itself to change it. The only reason to change it is if it is buggy, or does not meet the current requirements.

      I don't really agree 100%.

      Often, code looking weird or ugly is a hint that the code is less easy to maintain than it might be. Changing code so that it's more easy to maintain can be a very big win in the long run.

      If it's going to be weird or ugly, and there's a good reason for that, document it.

    2. Re:Hardest thing by Krokus · · Score: 1

      I agree. On large projects, my priorities lead me to write something that works first and then optimise it later if necessary. When there are other people on the project, some of them just can't help but rewrite this function or that function because they were bored and thought of a better way to implement it. This can happen regardless of where the project stands in relation to the shipping date. It's made even worse when some junior programmer does it and fails to actually tell anyone about their changes.

    3. Re:Hardest thing by sugar+and+acid · · Score: 1

      It is usually well documented! Well it was before it was "fixed". Just some programmers have this real aesthetic hang-up, and specific pet "hates" in styles of programming. They make terrible maintainers of code, and also are quite inefficient in that context as they tend to reinvent the wheel for no good reason.

      Also sorry for the first sentence in my original post. Wrote that on a phone on the train home.

    4. Re:Hardest thing by swillden · · Score: 1

      Depends on what the changes are. Simple refactoring that doesn't change how the code works but makes it clean and readable is well worth doing.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    5. Re:Hardest thing by Anonymous Coward · · Score: 0

      > the hardest thing for a programmer that because code may look weird or ugly is NOT a reason by itself to change it.

      It is a reason to change it. Ugly code usually means one of the two things: A lot of dependencies or long/complicated/unreadable code. There is one reason why you might want to change the code even if there are no found bugs. When you cleanup the code, you
      - Might discover or fix bugs that were there, but were not yet found.
      - Make it easier to re-use the code.
      - Make it easier to fix bugs once they are found. This is an advantage if there is often a hurry to fix a bug.
      - Make it easier to let someone else maintain the code.
      - Make testing more easy.

      Note that refactoring is often done wrong. I would estimate that about 4% of the developers can actually improve the code quality significantly, while large majority will actually make it just worse. I have not done any big studies to back these numbers up, so just take it or leave it. But I think this is the reason why people feel so negative about refactoring. But when it is done correctly, the code becomes so beautiful that everyone understands why it is worth doing.

  75. Depends on the kind of programmer. by DdJ · · Score: 2

    For me, I think the hardest part is often "figuring out what to build in the first place". Sometimes that starts from a product idea. Sometimes it starts from an imperfect requirements document. (I have never seen a perfect requirements document.) Going from that to "what do I build?" is the hardest part.

    If you are the sort of programmer who works on big projects and is handed a clear and unambiguous spec... then sorry, I have absolutely no idea what your hardest problem might be.

  76. Its nothing to do with programming! by polyp2000 · · Score: 1

    I think i speak for many, the hardest thing about my job is the expectation that i will work late or overtime without extra pay or work over family holidays such as christmas and the like.

    --
    Electronic Music Made Using Linux http://soundcloud.com/polyp
    1. Re:Its nothing to do with programming! by PRMan · · Score: 1

      That's why I don't do it and I am very upfront about this in interviews ("no regular overtime"). At my current job, when it got out of control, I just told the boss that I was looking elsewhere because of it. He immediately moved me to a project with no overtime and now I work 40 hours every week.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
  77. non-technical issues by mspring · · Score: 2

    Dealing with established cultures working with outdated technologies and trying to drive change.

  78. Lots of things. My list: by coder111 · · Score: 1
    • Keeping things simple
    • Time estimates
    • Dealing with changing and unclear requirements
    • Dealing with clueless management- especially getting enough time/resources to do things right
    • Legacy systems- especially when management doesn't want to invest into cleaning them up and fix long existing problems.
    • Bad design- especially when due to political reasons you cannot change bad design, or you don't have enough time/resources to do it.

    These things are not hard as in O(e^N) hard, and you won't learn about them in your CS class. But you have to deal with them every day in real world

    1. Re:Lots of things. My list: by Anonymous Coward · · Score: 1

      Odd, my list would be something like this:

      1. Go outside
      2. Log out of WoW
      3. Talk to a girl
    2. Re:Lots of things. My list: by cowdung · · Score: 2

      My List:

      1. Estimates
      2. Legacy code / huge uncommented code
      3. Designing the features correctly
      4. Over/under designing the code
      5. Estimates

    3. Re:Lots of things. My list: by Anonymous Coward · · Score: 0

      Where the hell are my mod points today!

  79. Not using a slideshow by Anonymous Coward · · Score: 0

    Add "not using a slideshow" to that list.

  80. Using the new TPS reports by Anonymous Coward · · Score: 0

    Using the new TPS reports, this is by far the hardest task a programmer must do.

    1. Re:Using the new TPS reports by CQDX · · Score: 1

      That's because you're doing it wrong. Didn't you get the memo?

  81. Spending 6-8 weeks developing systems by WillAffleckUW · · Score: 1

    The hardest part is spending 6 to 8 weeks developing systems that someone decided were urgent and good to go, only to have them say "burn all the documentation we're redoing this from scratch".

    When the issues were ones I pointed out were going to be there before this whole thing started.

    After a while though, my Army days come back, and I remember nobody's shooting at me, so it's all good.

    --
    -- Tigger warning: This post may contain tiggers! --
  82. Easy enough to refactor/rename these days by barlevg · · Score: 1

    I agree that this used to be a big problem for me. Then I got a job outside of academia, and they made me learn to use an IDE (oh how I miss the days of doing everything in gedit and command-line gcc...), so now renaming a variable (and getting all its references) is a matter of one right-click. What this means is that if I can't figure out what to name something, I can just name it "blah," "stuff" or "temp" and then refactor when the inspiration strikes.

  83. Talk to girls. by capitalj · · Score: 1

    Having a conversation with a female is the most difficult thing your average programmer will ever have to do.

  84. Reading the list by quietwalker · · Score: 1

    ... was the hardest thing for me today. Is there any reason that Ghostery finds 16 various advertising and tracking widgets to block that apparently are required for the page to load? Also, why would you put a list of 16 items in a slideshow? Just to buck up advertising revenue for multiple page views?

    I'll just guess what's on the list, and say it's 80% right, but that the hardest thing altogether for me is getting decent requirements from end users. Right after that it's explaining why is not only not Agile, but often not helpful by itself.

    Last, and this is an ever present distraction for me, is to explain to some folks the definition of "priority" and why the phrase becomes meaningless once you have two or more #1 priorities for an individual.

    (Btw, I did find a 'deslider' site, for example, this article can be 'deslided' here: http://deslide.clusterfake.net/?o=html_table&u=http%3A%2F%2Fwww.itworld.com%2Fslideshow%2F124383%2Farg-9-hardest-things-programmers-have-do-378834 )

  85. focusing on work by Nadaka · · Score: 1

    Hence this post.

  86. Dealing with low truth level in real world by Anonymous Coward · · Score: 0

    As a programmer, I've learned by long experience debugging to know exactly what I do and I do not actually know about the problem. And refreshingly but frustratingly, there is absolutely no bullshitting a computer. There is a distinct moment where you understand the issue well enough to solve it, and before that, you are just guessing or testing to find more facts about the situation. It's like doing science, properly.

    It dismays me how little of real world human communication and problem solving is like this. Most people think and state that they know what's what about situations or problems, when most times, they simply haven't put the cognitive work in, and they actually don't know what they're talking about or they're chasing a red herring.

    Diagnosing the content and likely better path in for example political debates, using debugging-quality logic and investigative method, is truly, truly painful. We're basically usually like a pack of chittering chimpanzees on these sorts of things.

    So it's hard that programming has made me cast a baleful and profoundly skeptical eye on most other stuff I hear people discussing or asserting.
    Do you know that? Are you sure? How confident are you, rationally? How good is your overall model of the situation? Then why the hell are you talking?

  87. Read Slashdot by ddfire · · Score: 1

    And answer this silly questions! also understand the client needs and make them look like what he wants....

  88. Wondering why the hell anyone uses Quora by Tridus · · Score: 1

    So click that link, and it wants me to sign in to view answers? With my Facebook account? Holy shit, Experts Exchange came back from the dead! (And if you happen to do it on mobile, they'll also nag you to install their app.)

    It's like someone took Stack Overflow and decided to add 100% more crap.

    --
    -- "So they told me that using the download page to download something was not something they anticipated." - Bill Gates
  89. User Manuals by ZeroSerenity · · Score: 1

    I'm a developer and I would put this up as the hardest thing I have to do. Since I know the guts of why and how something works, I tend to have a really hard time writing particularly helpful User Manuals to other people. There is no group within us that spends time writing manuals (so I have to do my own) and it does require me throwing the manual at somebody somewhat unsuspecting and hoping it makes sense to them.

    --
    For those who seek perfection there can be no rest on this side of the grave.
    1. Re:User Manuals by PRMan · · Score: 1

      I never understand why companies want developers to write documentation when a good tech writer could do it better at 2/3 the salary.

      --
      Peter predicted that you would "deliberately forget" creation 2000 years ago...
  90. Staying Focused,Docs,Race Bugs,Clients by Anonymous Coward · · Score: 0

    Staying Focused. Anyone after years of programming is going to start getting pretty bored if your doing the same thing everyday. I think working bits on tons of projects and being able to stop and goto a new project when your bored would be more productive than having to sit there day after day staring at the same blocks of code.

    Good Documentation is a bitch for any large project. As a developer things are frequently changing and being upgraded, you can usually add a bunch of features faster than you can write good descriptive documentation for the features explaining them in a way the average person will understand.

    Race bugs are a nightmare, like ones where no matter what you do you cant seem to reproduce a bug that someone insists is there, or the ones where its some client thats running a setup nobody else does (or a really old setup) and you have to get the same features working.

    Interpreting Client feedback/bugs/tickets/etc into something useful , most people are actually as stupid as humanly possible when it comes to using software they are not familiar with (despite most software all having common structures and layouts that should allow anybody to sit down and instantly know how to at least navigate a program and figure things out on your own)

    Replacing or Removing features you spent a ton of time working on. For example spending a months working on a new feature Boss A requested, getting all the bugs worked out, tweaking that interface so it just screams sexy, and then Boss B tells you to remove it he doesnt like it or to replace it or redesign it his way , UGH

    1. Re:Staying Focused,Docs,Race Bugs,Clients by detain · · Score: 1

      ^^ oops didnt mean to post as AC.

      --
      http://interserver.net/
  91. You mine by tepples · · Score: 1

    What's more real: the Bitcoins that you mine or the unicorns that you claim to raise?

  92. Communicating with people by Tomster · · Score: 1

    People are the best part of my job...and the worst. Technical challenges can be a real PITA but they don't even come close to comparing to the difficulty of people challenges. And of those challenges, communicating clearly with people is perhaps the most difficult part of my job on a daily basis. (The second is dealing with "problem people", who have some kind of personality issue that makes them difficult to work with.)

    How many times have you heard someone start a sentence with "I thought what you meant was..." or "I thought you knew..." or something similar. Or said the same yourself. Communication is hard, and if you think otherwise you probably don't realize how many assumptions are being made on both sides when you talk to people.

    The other hardest thing is getting a story (requirement) to "done done". Writing unit tests and getting them to pass is easy. The hard part is making sure I update the design document, project wiki, and deployment doc; that I check the license agreement for the library/framework I just downloaded; that I don't have SQL injection problems; that I've added system tests; .... Of course having a checklist helps.

  93. No one answer by Tony+Isaac · · Score: 1

    It all depends on the specific programmer. Some are good a design, some are good at coding, some are good at testing, some are good at debugging, and so on. Rarely is a single person good at everything. Everyone has they own unique strengths and weaknesses.

  94. Nobody by Anonymous Coward · · Score: 1

    expects the Spanish inquisition

  95. hardest thing by Anonymous Coward · · Score: 0

    if i had to pick one it would be dealing with clueless managers.

  96. cybernetics by globaljustin · · Score: 2

    it makes me happy to see this:

    If you have a design, you will know what call things.
    If you have names for everything, you will be able to build a design from there.

    words are our tools...well alpha/numberic symbols arranged in groups to form instructions for a machine to execute

    typing a word is the same as 'naming' the thing you are creating when you type...ha! this certainly gets us into a Mobius Strip of language after awhile

    as I've learned programming, I've found that 2nd Order Cybernetics concepts to be incredibly helpful

    you start with the 'Social Construction of Reality' which has become a convention almost like the Big Bang more than a theory from any one scientist...it is broadly accepted across the Social Sciences

    essentially, they idea is: humans communicate meaning and construct our individual brain's concept of the 'universe' based on language

    to see what I mean, now dig in to some Cybernetics theory to see how theorists define 'cybernetics'...Norbert Weiner is my favorite

    notice the parallels the author draws between controlled and autonomous systems in machines and in nature on the definitions table on page 1

    I believe we can push computing languages further by applying these concepts to coding, precisely because they are founded upon and grounded in the truth that you hit upon when you say this:

    9. Designing a solution
    1. Naming things

    are pretty much two sides of the same coin

    if we *start* there and continue with a 'cybernetic' approach programming becomes more inviting to noobs, new languages are easier to learn for experience programmers, skills transfer across any system or domain in programming better, and coding starts to resemble network topology

    I'm not doing the best job explaining things, cybernetics is a tough concept to just bat around in conversation...but if this interests you have a look at the paper I linked above...the first thing they do is discuss what cybernetics is and why it is useful

    its kind of my mission to push computing towards a more cyberntic model and away from a Turing model

    --
    Thank you Dave Raggett
  97. Managing complexity by Anonymous Coward · · Score: 0

    You can only keeping a system maintainable by managing complexity. You can only manage complexity by laying solid foundations. Solid foundations require a solid architecture. A solid architecture anticipates future functionality. It's difficult to make predictions - especially about the future.

  98. The four biggest issues by allo · · Score: 1

    1) Naming things
    2) Cache invalidation
    3) off by one errors

  99. Working with other Developers by Anonymous Coward · · Score: 0

    Convince fellow programmers that it does not mean that if they can't do it, it is impossible. Then once I proved them wrong, they go and find faults with every little detail of the code like :

    The naming convention is not correct
    The code is not self explanatory
    Add more Factories
    Connection pool that thing etc

    So I just showed you how to save a lot of hours by doing it my way, the least you can do is to help me improve it and not find faults. Just because I proved you wrong does not make you stupid and me smarter, it's just that for that particular module I have a better idea than you.

  100. Revision/Release Integration by Anonymous Coward · · Score: 0

    Not just revision control... that's not terrible. But trying to stage features/check-ins, etc so that they all line up with the release planning goo, etc.

  101. Hungarian Notation Considered Harmful by pigiron · · Score: 1

    I simply don't use it unless absolutely necessary because some fool did in a linked runtime library library; but only then to identify it as foreign cruft.

    Fuck Charles Simonyi. Anyone who does use it is a shit-for-brains M$ droid. And I ALWAYS use integer variables i,j,k,and l for loop counters in the traditional Fortran way.

  102. Naming difficulty is a symptom by juancn · · Score: 1
    Naming things is hard, because to give something a good, meaningful name, you must understand the thing you're naming deeply.

    Maybe that's where the notion of a true name comes from.

    Whenever I find myself having trouble naming a class or a method/function, it's typically a sign that something in my understanding of the problem (or the framing of the solution) is wrong. And I need to revisit the thought process that took me there. Usually, once I do so, names fall in place without much friction.

  103. What's "hard"? by pseudorand · · Score: 1

    First off, let's define "hard". You could mean
    a) absolutely hard: it takes lots of effort to make this work at all
    b) hard to do well: it takes lots of effort to do this well even though I can do this somewhat acceptably with minimal effort
    c) time consuming: this takes a lot of f-ing time, and it's unclear that the effort justifies the benefit

    a) seems like the most appropriate definition, but judging by the list they seem to mean either b or c.

    9. Designing a solution :
        b. I can make you some working software based on your off-the-cuff requirements pretty easily. Anticipating what you really meant, what you will ask for next, and writing code that can be easily leveraged to do those things would be 'a'.

    8. Writing tests
        c. For small projects, automated testing way more time than it's worth. For large projects writing tests is the only way to make it work at all. Of course, all those medium sized projects and those projects that start small but may become large are a challenge. And weather or not the software lends itself and the programming team knows how to use a testing suites make a difference.

    7. Writing documentation
      c. No one /ever/ reads documentation because we all learn the hard way that it's perpetually out of date. The UI and API /are/ the documentation. If, by "writing documentation" you mean "designing a good UI/API" that makes it obvious to the user what's going on, then this becomes 'a'.

    6. Implementing functionality you disagree with
      WTF - If you're getting paid, do what you're told. If not, tell 'em to do it themselves. This is only "hard" in any sense if you're a pedantic a-hole. Oh, wait. This is /., so I guess that's all of us.

    5. Working with someone else’s code
        b - But if they instead had "writing code that isn't a PITA for others to work with", then it's an 'a'.

    4. Dealing with other people
        That's only because: http://www.dilbert.com/2013-10-10/
        But I guess if we spent any time developing our social skills, we wouldn't have had time to learn how to program.

    3. Estimating time to complete tasks
        Okay, this one really is 'a'. On the other hand, you just shouldn't do this. Instead, you need to get good at getting customers/users on board with iterative development where they wait/pay a bit and get some incremental functionality as you work towards some end goal that neither of you can really predict up front.

    2. Explaining what I do (or don’t do)
        See #3.

    1. Naming things
        See #5. Naming things is easy. And my names make perfect sense to me.

    Also, queue the penis jokes based on my use of the word "hard" in the subject.

  104. Reality by RabidReindeer · · Score: 1

    The deadliest words ever spoken in IT: "All You Have To Do Is..."

    It's compounded by the fact that they're not only spoken by clueless users and pointy-haired bosses, but by the software people themselves. Who should have learned better at some point.

    One of the most perverse things I've discovered over the years is the parts of the project that incur the bulk of the time, pain, and suffering aren't the arcane complex gnarly things. They're almost always easier and less trouble than expected. But entire days can be lost on something as simple as a misplaced comma.

  105. Years ago. by Anonymous Coward · · Score: 0

    Years ago I was on a embeded proj for a process control instrument that would handle a variety of parameters, pH, temperature, etc depending on what the customer wanted. Each parameter would have its own module. I remember sitting in a meeting when our boss, a genius no less, told us each module should take about a week to code. 6 months later the first one was done. And it was a tough, nose to the grindstone 6 months.

  106. Hardest part? by elgholm · · Score: 1

    People.

  107. Language/cultural barriers by ebh · · Score: 2

    I'm surprised nobody's mentioned this. I work on a project that's spread across eight countries. The lingua franca is English, which makes me one of the lucky ones as a native English speaker. As you might guess, it's a pretty big project, so things like push-button refactoring aren't any use when someone misspells a variable name, or inadvertently names something after a swear word or a racial slur. (Or, more to the point, did so in acquired code that's now 12 years old and really shouldn't be touched if it's been working fine, and there's no staff for cosmetic changes anyway.)

    People have talked about commenting and documentation. It's that much worse when someone's writing in their third language, or they write in their native language and you hope you can translate it well enough to get what they're really trying to say.

    And then you've got all the cultural issues surrounding hierarchy, face and the loss thereof, egos, power, seniority, communication formats, and all that.

    I'd love to have the luxury of being the lone cowboy, even if the PHBs were constantly jerking me around about what I'm supposed to be doing.

  108. Bugs by michaelmalak · · Score: 1

    If I had to deal with fleshy bugs, I would think programming were especially hard too.

    Also, missing from the list: managing multiple projects. The "one interruption costs 20 minutes" is BS. Brief interruptions have little effect. The problem is the weeks-long "interruption" to work on a temporary emergency priority, and then afterward going back to the first project having to rebuild all the mental structures in your mind. Compounding the problem is that during the mental rebuild process, interruptions do hamper it during that time. Interruptions are like wind. The stronger and more established the mental structures, the more resilient they are against the wind. Even though mental rebuilds are a fragile time, still the fragility is overestimated and so it becomes the fear of interruption (interruptions are more painful than destructive) that leads to procrastination and delay -- worse than the interruptions themselves.

    And that's not getting into the multiple project issue of dealing with multiple bosses in a non-linear org chart. I suppose that might fall under the overly broad "4. Dealing with other people."

  109. Scope Creep and Scope Creeps by manlygeek · · Score: 1

    I've been a programmer/aka software engineer/aka web developer/aka IT Director for 39 years and the hardest thing that programmers have to deal with are changing expectations which manifest themselves in scope creep and scope creeps (i.e. users who don't really know what they want or need but they need it like yesterday). I think Agile techniques have helped to channel this quite a bit but that requires the right corporate culture to be successful. The truth is that computational tools are still "magic boxes" to users and it's a rare project manager/agile team that can bridge the gap between the effort required in implementation and the user's perception of what they really need.

    --
    Be More, Be Manly, The Manly Geek Ubergeek Extraordinaire Blogger: www.manlygeek.com/blog Podcaster: podcast.man
  110. Adam by Anonymous Coward · · Score: 0

    It's naming things. Trying to keep in line with naming conventions that often conflict since you use multiple languages all with their own idea of how to capitalize, plurality / singularity, and libraries that pay heed to no man. Fuck yeh, naming is the hardest part.

  111. Hardest thing to do? Simple by Anonymous Coward · · Score: 0

    Shut up and do your job.

  112. I disagree slightly on the documentation by s7uar7 · · Score: 3, Insightful

    Don't document what your code does, I can (usually) tell that from reading it. Document why it does what it does.

  113. Clearcase. by Dastardly · · Score: 1

    End of message.

    1. Re:Clearcase. by mendax · · Score: 1

      Heh... I agree with you there. I'm learning how to use it now...or how not to use it.

      --
      It's really quite a simple choice: Life, Death, or Los Angeles.
  114. Talking to a girl by Anonymous Coward · · Score: 0

    apparently

  115. Interact With Non-Coders by turgid · · Score: 1

    Constantly educate them how much work something will be every time they request a new feature. Sometimes they are surprised at how easy things can be done and vice versa.

    Explain that the software hasn't changed, so it's not likely to be a software problem.

    No, writing a new device driver will not fix a broken input device sending thousands of spurious signals per second and no I will not write one 10 minutes before the device is due to be put on a van to be sent to the customer.

    No, it's not "just typing." It has to be designed, implemented and tested. Just because it compiles I will not ship it to the customer.

    Use Windows for real work. It's broken. Things that take minutes on a real OS take days or weeks on Windows, and 50% of that is getting fighting with license servers, virus checkers, broken user permissions and missing packages.

    Using SAP for configuration control. It's broken by design. Why does it take weeks to do anything with SAP? Why does it go out to lunch for several minutes when you type a value in a box? Why does it randomly forget things you've entered? Why is the UI so crazy?

    Fight with documentation in PowerPoint, Excel and Word formats. We have cross-platform tools and open documents for that sort of thing. Why should I have to go hunting on the Windows network for a file in a proprietary format to tell me what versions of things go into a package? Why isn't it in a plain text file in git or on a wiki?

    No, I will not fix your broken Windows. Stop it. Buy a real computer and learn to use it.

    No, it doesn't run on Windows. Life's too short.

    Fight with libraries written in C++ and build scripts written in DOS batch files. Seriously, get with the 1990s.

    Visual Basic, C# and .NET applications for configuring kit which can only be developed on WIndows and run under Windows. Oh, what do you mean that version of the development platform and evironment isn't supported any more? Do we have a license for it? Oh, it doesn't run? The environment, the platform or the app? Oh all of them? How much for a new license? Oh you can't get one any more? Right.

  116. Starting a new job by mendax · · Score: 3, Interesting

    Hands down, the most difficult thing I've had to do is start a new job. New technologies, new software, new people, new environment, new policies, I'm two weeks into a new job and the anxiety is driving me bonkers. It's more stressful than the worst deadline crunch I've ever experienced... and here there is no deadline here!

    --
    It's really quite a simple choice: Life, Death, or Los Angeles.
  117. Keeping my job on-shore by Anonymous Coward · · Score: 0

    Number 1 hardest thing to do... Keeping my job from going to Indians or Chinese that are advertising that they can do it for a fraction of the price. Well, once they get back to their native country after they have been here on their H1-B and stolen my job. Doesn't matter that the quality will be lower. It's cheaper.

  118. Corporate douchebags by jbrandv · · Score: 1

    The hardest thing is keeping myself from choking the living shit out of some corporate manager who desparately needs it due to changing the requirements every other day or so.

  119. Been there, seen that. by gr8_phk · · Score: 2

    I name all of my classes and variables "George." Problem solved.

    We were coding with Simulink (diagram based thing). When things get complex you take a group of blocks and group them into a subsystem so you get a hierarchy of block diagrams. Each subsystem displays a name under the box, and everyone tries to give each block a name. People choose names of varying quality, but we had one guy leave the default name on every block "subsystem". To avoid name collisions it adds a counter as a suffix. I expanded the tree-view on the left side of the screen once and was able to fill it top to bottom with "subsystem2" "subsystem3" nested 5 levels deep. There is no way to navigate the code except by looking at the diagrams, but those consist of basic blocks (mostly math operators) and bigger boxes named subsystem. Fortunately some of the signals are labeled.

    And of course the guy quit right after delivering this piece of shit to production.

  120. Dealing with non programmers by erp_consultant · · Score: 1

    In my experience the most difficult thing to do is to deal with people that have no idea about programming. Many of these so called "business users" are constantly changing their minds. The functional design documents (the documents that describe what the business need is for the program you are being asked to write) are almost universally incomplete. As I read through them I am forced to go back for clarification. The missing details are often critical to the programming approach taken so they must be resolved, otherwise I will have to rewrite sections later on.

    I used to think these business people were just stupid. Now I think they are just lazy. They don't do the necessary research and just kick the can down the road to the developer. Unfortunately, these people are often in charge so it becomes a fact of life.

  121. There are no perfect requirements documents by gr8_phk · · Score: 1

    Nobody has requirements. What they have is problems, and it's the engineers job to build something that solves those problems. They may be able to offer some requirements or offer an idea what they want it to look like. The only way they have complete knowledge of what they want is when they already have it - when it's complete. It drives me insane when people put together a development process that shows requirements being complete at the start, or they show the "V" model of development and forget that a big circular arrow goes in the middle showing iteration (this is never accounted for in the schedule because it can't be).

    If you expect complete requirements you don't fully understand your job.

  122. If in English you call it "The last straw...", by Anonymous Coward · · Score: 0

    when asking "What's the hardest part of your job?", I suppose that's the origin of the "Jeepers Creepers" movies. If they want, give the scarecrows good wireless and at least they could be playing all day, instead of not doing what you want.

  123. Do it right vs get it working by Anonymous Coward · · Score: 0

    No one will ever see this comment, I'm too late and it will be buried, but as a PROFESSIONAL software developer, I want to do things right, and build a solid code base. The trend now is to slop any kind of mess together as long as it works and just let it rot, as long as it it CHEAP. All that matters is cheap. Developers are "resources" who can't even have a career any more because the only jobs left are lowball paying jobs. I take great pride in my ability to construct robust, working, maintainable code - and it's something no one wants any longer. The downfall of civilization will be the rotting mess of code we're going to have in 10 years when people making $32k/year slop things together that barely work - all this code is going to collapse. We've already seen a hint of it with the Obamacare web site - that web site is like the software version of a bridge collapsing telling you your physical infrastructure is rotting.

  124. Making the User happy by sahuxley · · Score: 1

    For me, the hardest thing has been making users actually like and enjoy using your code. There is a lot of psychological science that goes into a program's usability, and my computer science degree didn't touch that topic.

  125. Hardest part is forced to ruin your code by Anonymous Coward · · Score: 1

    NO the hardest thing to do is watch non-techy business TWATS overrule you on naming things, misapply standards and turn a perfectly good piece of code into something you're ashamed to have your name attached to. But hey they own the business so it's their decision. What other fucking industry do we do this in? You don't let the patient decide which surgical cut or stitch to use in a heart operation. You don't let someone who wants to build a home decide actually you to tell an architect or builder "actually we didn't want that fucking foundation, let's just leave it out".

  126. OMG - No Obligatory xkcd link by Anonymous Coward · · Score: 0

    This must be the end of the world.
    This does not compute.
    Hardest thing to do - not knowing what to do when you don't see a xkcd link after 300 comments in slashdot.

  127. Code commenting. by SensitiveMale · · Score: 1

    followed by documentation

  128. legacy software by Anonymous Coward · · Score: 0

    Hardest part is running 16 bit software on Windows 7. Had to use a virtual machine to install Dos 6, Windows 3.1 and Windows 98. I'm not kidding. Visual C++ 1 and Visual Basic 4 to write old software.

    i must be the only person who still uses old 16 bit software that runs on old versions of Dos and Windows. lol

    Please don't tell me to download Visual Studio 2012 express or Mono. :p just kidding.

  129. Duh by Anonymous Coward · · Score: 0

    Talk to girls.

  130. Too general a question... by Anonymous Coward · · Score: 0

    I 1st read that and thought:

    "What Are the Hardest Things Programmers Have To Do? "

    Hmmm... get a date?

  131. ... get a date ... by Anonymous Coward · · Score: 0

    Some would say: "Get a date."

  132. non standard answer by schlachter · · Score: 2

    one of the hardest things i do is sit in front of a computer most of the day.
    would prefer to be more out and about

    --
    My God can beat up your God. Just kidding...don't take offense. I know there's no God.
    1. Re:non standard answer by fatphil · · Score: 1

      I just had a 6 month software engineering job, where, in simple terms, I didn't write a single line of code. Or design anything. Or review anything. Or test anything. Good money, but I just ran away as it was clearly a waste of my life, which is the single most limited resource I posess.

      Oh - got an interesting challenge for a programmer? Contact me, I'm mobile...

      --
      Also FatPhil on SoylentNews, id 863
  133. Managing Expectations by Tablizer · · Score: 1

    Some hard things seem easy to outsiders, and some easy things seem hard. When reality doesn't match up to preconceived notions, then tensions can often build and trust ruined. Us geeks often are not well adapted to deal with the potential frictions caused by the interaction of people with technology.

    For example, some add-on feature requests are quite easy to write mostly independently and just "tack on" to the existing code set. Other "add-ons" require changing fundamental architecture, making them time-consuming and risky. End users and managers don't know which is which, and so judge it based on superficial estimations.

    Even many semi-tech-savvy managers don't realize that you may have designed it different from how they would do it such that a particular change is a royal PITA, but they think you are fibbing, and seemingly don't have the time to listen to a fuller explanation.

  134. get a girlfriend by Anonymous Coward · · Score: 0

    just saying

  135. Bad Interfaces by Anonymous Coward · · Score: 0

    Spending 80% of my time writing code to get data instead of writing application logic.

  136. Changing someone elses code by bhspencer · · Score: 1

    Not only do you have to understand the problem in hand, you have to understand how the prior programmer understood the problem.

  137. Easy by ArcadeMan · · Score: 1

    Taking showers.

  138. Hardest thing... by Anonymous Coward · · Score: 0

    is walking to the kitchen to grab another Dew. Each desk should have its own Dew dispenser.

  139. Well, let's see... by VortexCortex · · Score: 1

    "What are the hardest things programmers have to do?"

    Find some scrap of motivation to will our insufficiently caffeinated carcases back into the code monkey meat grinder.
    That and giving a damn about documenting a single arg function that's literally 10 lines long (binary). Soul sucking imbecilic totalitarianist managerial scum.

    I take it all back; The hardest thing is not becoming a felon.

  140. Delivery to production by abies · · Score: 1

    I know that not all programmers have to worry about that - some stop at some test environment and it is later client's problem to do actual implementation in final environment. But some programmers are working in companies where stuff is created and delivered for in-house needs - and what I have found the hardest in entire equation is to actually deliver the final result. Sometimes, there are so many dependencies, rules, noise introduced by other systems etc that it is really really hard to do the last step and to deliver the actual, tested solution to destination. Preparing the deployment scripts, overviewing that all db dumps were done at correct time in case rollback is needed, guiding hand of some poor chap from offshore location who sees your application first time in his life but has to do installation because you are not allowed to touch production machines - these things often take more effort and sweat than the coding.

  141. Ouch by Anonymous Coward · · Score: 0

    Take responsibility for uncommented code.

  142. reality by Anonymous Coward · · Score: 0

    deal with the fact that we aren't actually as exceptional as the people who pay us
    keep saying

    if we were we wouldn't be sitting in little boxes working every waking hour working
    on ridiculously bad ideas to make someone else a whole lot of money.

  143. Two hardest things in my job by CapOblivious2010 · · Score: 1

    1) Resist urge to kill coworkers
    2) Wait for slow-ass software on slow-ass hardware connected by slow-ass networks to slow-ass databases

  144. OS Vendor by fyngyrz · · Score: 5, Interesting

    The most difficult thing *always* turns out to be programming to some API that the manufacturer says does X, but either really does Y, or simply crashes -- and then finding out that they're not going to fix it, except or unless in some later version of the OS, thereby doing all the current, stable customers out of whatever it was I was trying to accomplish. I mostly program for OSX these days, so my examples are all Apple-centric.

    1) I was writing a POS application for a Chinese restaurant owned by friends. I had an old mini core 2 running 10.6.8 I wasn't using, and I wanted to make the app around this unit. So I spent a couple of days writing it, using UTF-8 for the Chinese parts, and everything was going swimmingly. I ordered some receipt printers (one for the counter, one for the kitchen to print orders, and one for the to-go/delivery table.) English? No problem. Everything worked. Put characters -- I mean actual Chinese -- in the file to be printed via CUPS, and the print process would crash. The problem? CPU-specific bug in a CUPS filter (Apple owns CUPS now.) They have no intention of fixing it in 10.6.8. They told me, "Upgrade the mini to Lion." So I ordered Lion on a stick and stuffed it in there, and the Lion installer informed me "CPU not supported. Core 2 duo or above required." So the fix is in, but I can't run the fix. So I ended up buying a new mini. Yeah, that "fixed" it. At a cost of $600. Thanks a whole f'ing lot, Apple.

    2) Qt 4.x: Full of bugs. Fixes? Sure. In 5.x. But 5.x is full of new problems. I'll spare you the details, other than to point out that if they'd just bloody fix the stuff they claimed as working in the first place, rather than constantly surf forward and expect you to follow them, I'd a darn sight happier.

    I feel that if the manufacturer says "here's an OS, and here are the features it offers you (API list, UI operations, etc.), then they are obligated (because I have invested time and/or money based on what they claimed) to make it happen. I accept that first out the door, there may be things that are not working right. What I don't accept as "ok" is this attitude that it's ok to leave it that way. You get a straight up bug report you can verify (print high UTF-8 characters crashes your printer filters) by Ada, you should fix the thing YESTERDAY. It's more important than your new OS, because it's about the reliability and honor and ethics of what you do. You don't fix it -- Apple -- and you go from respected vendor to the opposite (both lose respect and that much less likely to vend anything to me.)

    Same thing goes for apps. You sell a paint program that is supposed to draw rects and circles, but won't draw circles, you bloody well need to FIX it so it DOES, and make sure that fix is available to every poor bastard who bought your paint program WITHOUT requiring them to change anything else.

    It's NOT acceptable to say "You must upgrade to the next OS" or "That's fixed in the latest version, but that only runs on a 4 core CPU so you're screwed" When you say stuff like that, some people, somewhere, are getting red faced, ramping up blood pressure, and contemplating ways to deliver a clutch of rabid wolverines to your development team in a box marked "live strippers, schedule party immediately."

    Related to that, I've learned to stay well clear of other people's frameworks and libraries. If I wrote it, I can almost certainly fix it. There's nothing more disheartening than writing in about a bug and hearing back that it's been upon some list, while your stuff remains broken, etc. Might as well have written it yourself anyway. Assuming you have time, of course.

    Everybody's in such a damn rush to move forward, they're unwilling to see to it that current efforts are made to represent fine craftsmanship instead of a harried dash to ship at any cost in reliability and honor.

    I've got a lot of older software because my reaction to "you gotta upgrade to get that fix" is "you're not getting more of my money until what you sold me in the first place works as you told me it would." I can't always stick to that rule, but I assure you, I try.

    --
    I've fallen off your lawn, and I can't get up.
    1. Re:OS Vendor by Anonymous Coward · · Score: 0

      This. Bro, you fuckin' nailed it. Posted anon so I can give you well-deserved mod points.

    2. Re: OS Vendor by GigaplexNZ · · Score: 1

      Amen. I'm in the same boat although on Microsoft platforms. The number of times I've filed a ticket only to have it closed as "won't fix", even for newer versions of Windows or Visual Studio... I cry myself to sleep at night

    3. Re: OS Vendor by Anonymous Coward · · Score: 0

      Just upgrade. It's not that hard.

      Backwards compat is not an advertised feature of apple.

      If you MUST have backwards compat then run windows. It's very back-compat.

      Further, maybe the reason u find so many bugs is because you refuse to update your systems.

      Programming is evolution in silicon. Supporting old hardware is a pain in the ass.

    4. Re: OS Vendor by fyngyrz · · Score: 1

      I'm not talking about backwards compatibility. Read again, then, if you like, respond to what I actually SAID.

      --
      I've fallen off your lawn, and I can't get up.
    5. Re: OS Vendor by Anonymous Coward · · Score: 0

      I get the same with embarcadero. Delphi ide has had crashing bugs in it since the release of 2010 (eg. press a full stop and there's a good chance the ui will hard lock). Duly reported it 3 years ago.. Each time their response is 'upgrade' and each time it doesn't fix it (in fact xe4 is so bad we now edit in notepad++ - it's simply unusable). Add APIs that don't work as advertised and apparently haven't since Delphi 7.. It's hell (but alas my job otherwise I'd ditch it tomorrow)

      Meanwhike They're all about pressing on with firemonkey, mobile, etc. and no longer give a shit about the fact their existing stuff is broken... It's all about the latest whizz bang feature.

  145. Idiot management by non-e-moose · · Score: 1

    In no particular order - dealing with management not interested in product quality - dealing with management who is biased towards their local site over product quality (Tel Aviv is full of ass-hats in this regard) - dealing with management that interprets "Agile" as being 30-45 minute "standups" every day that are nothing more than "I worked on Bug X today" rehashes. - dealing with management wherein the people hired by a particular manager are automatically given more credibility than people who are forcibly transferred in. Yes, I refer to AMD from direct experience.

  146. Stupid 10 page click-thru articles by Anonymous Coward · · Score: 0

    What a waste of my effin time and bandwidth.

  147. Getting by Anonymous Coward · · Score: 0

    laid.

  148. score balancing by Joe_Dragon · · Score: 1

    score balancing in games can be hard to get right to make fair so people can just do the same move over and move to build score with small risk.

  149. Interface to poorly documented hardware by CO_gun_toter · · Score: 1

    'nuff said

  150. Naming Things? by Anonymous Coward · · Score: 0

    If by naming things, you mean naming variables, classes, functions, etc... I could almost see that as a valid point. If you mean naming a product, that is silly, since software engineers rarely get to name a product. Way more often that not, marketing folks will provide the name.

    However, how you name your classes and functions equates to how your document your code. This can be extremely tricky. Often naming those things is an integral part of your design as the name should imply what it does.

    To me the hardest thing is working with people that don't understand basic concepts and are unwilling to learn them. Simple things like the single responsibility principle. It's a great pleasure when you work with people that know how to write good code and an absolute horror when you work with people who don't. I love teaching people, but programmers tend to be arrogant and unwilling to admit when they don't know things. I'm not sure why, but I have noticed this to be extremely common in the software engineering field.

  151. Some more items they left off?... by Anonymous Coward · · Score: 0

    I would add debugging to their list - especially 'fixing code that should work, that does work in theory and prototypes, but not in the finalized product or target platform'
    That is probably their 'testing phase' item, but this is a bit different. There is nothing worse than thinking you are done and suddenly the requirements change, it doesn't work on the client's pc even though it worked on all the QA systems on the rack, or they want extra features the day before deadline.

  152. simple by Anonymous Coward · · Score: 0

    Exercise

  153. Deal with bullying managers by Beliskner · · Score: 1

    Deal with bullying managers that impose tight immovable deadlines in front of senior management, and then when I tell them to reset the client's expectation and blue sky renegotiate the entire contract with the client because the deadline is unachievable in front of senior management they get upset and then start bullying you and physically attacking you and I walked into a Police station and the Police officers refused to take my official report of a harassment incident. I wouldn't get any witnesses anyway because they were junior management and everyone's scared of their careers - they all have families to feed. That was in my old company, now in my new company my predecessor's predecessor had a breakdown and tried to commit suicide, but these get covered up by corporate management.

    --
    A caveman dreams of being us, the incalculable power and riches. We dream of being Q, then what?
  154. Research and de-maintenance by Anonymous Coward · · Score: 0

    Hello developer. We hired you because your résumé said you wanted to do research and development. What we have here is a half-developed app that was developed by a guy we gave loose requirements to, but didn't do what we want. Your job is to research what he did, use as much of his code as possible, and develop the rest, in a better way, using the same loose requirements.

  155. Estimates, balance, juggling by mnemotronic · · Score: 1

    (excuse funky format. Slashdot fnorks up my Android kbd) For me... #1 is accurate time estimates. I can usually guess the time to write the code. What I fail to take into account is time for emails, meetings, documentation and training. New rule is best estimate +40%. #2 work/life balance. Putting in more than the basic 40/wk for any company is stoopid. The company *does* care if i work myself to death on their behalf -- it saves them the effort of RIFfing me. #3 juggling, aka task switching. all the studies indicate this is a time sink for jobs requiring concentration. I'm poster child (ok, poster geez) for multitasking deficiency syndrome.

    --
    The Russians have won. They have made the world a cesspool of distrust, greed, fear and hate.
  156. hardest thing web readers do by doom · · Score: 1

    Is dealing with articles split up into 11 pages to try to sleaze more "pageviews" out of you. Presuming you bother to read them at all.

  157. Externalities by Anonymous Coward · · Score: 0

    Having to answer the phone, being in an open plan office, with lots of noise and interruptions.

  158. lmao signal by Anonymous Coward · · Score: 0

    can trigger brain stroke

  159. Very hard by Anonymous Coward · · Score: 0

    work with fins and not get as mad.

  160. Hardest thing by Anonymous Coward · · Score: 0

    By far, the hardest thing is dealing with utterly unhelpful error messages.

    "Error: an error occurred."

  161. Re:The hardest thing is not posting snarky comment by Anonymous Coward · · Score: 0

    relax dude, it's all javascript

  162. Job Security by Anonymous Coward · · Score: 0

    Change orders are job security. On a consulting gig, the customer was willing to fund changes and updates, but never willing to upgrade and port their old application to a standard database. Year end involved a good chunk of hours. I got over being annoyed and took the money. Eventually I got bored and left.

  163. people by Mirar · · Score: 1

    The hardest part of a programmers job is working with people that
    1) don't understand programming
    but
    2) forces the programmers to work a certain way that doesn't fit the mindset or workflow of programmers and/or programming

    with
    1b) think they understand programming
    as a worst case.

    Or wasn't that was what meant?

  164. bear their boss by Anonymous Coward · · Score: 0

    bear their boss.

  165. Some anecdotes from experience. by Anonymous Coward · · Score: 0

    6. Implementing functionality you disagree with

    Particularly difficult when the boss makes a decision like, 'I want it so you type one number into the program and it splits it into what the dealer needs to sell for commercial and passenger cars.'
    Me: And you want this to split along the percentages of what they sold last year?
    Boss: No, because they may not sell the same percentage this year. Just make it so you type in one number and it tells us exactly what they're going to sell!

    I explained to him why it wouldn't work without some sort of way to split the numbers, such as the percentage, but he still didn't understand. He kept insisting it magically split it into exactly what they were going to sell. So I went and made it so the program split it along percentage lines anyway. Have no idea if it accurately predicted the 'exact' sales like the manager wanted, as I left a few months later.

    5. Working with someone else’s code

    One task I was given was when a guy who was not a programmer wrote macros in an excel spreadsheet for his Business Degree. He apparently got full marks at Uni, but his code lacked logic (no loops, everything written out to increment by the Cell numbers actually being typed in line after line etc). No documentation at all. I was then handed it at work to re-write to make it work and to maintain it, and just to make it more fun when I asked the guy to explain what his macros did, he told me I was a programmer and should be able to read the code and work it out myself. The guy also left shortly after. I rewrote it completely, so it was all my own code. Documented it, added features to it, and got it to work as the managers wanted it to. About a year later the guy returned and was pretty annoyed with what I'd done. He claimed two things, 1. that I was some sort of pretender, as he'd written the original program, so therefore my name shouldn't be in the code ( in the documentation I had myself down as the writer of Version 2.0 plus every time I made a change I listed myself as the programmer who made the change), and 2. I ruined his program, as he could no longer understand or debug it (note: there was never a need for him to debug it, but he liked to f*ck around with it every now and then; plus it was now completely documented all the way through so it actually told him what it was doing).

    4. Dealing with other people

    See above Plus, some of my favourites - manager who wanted me to press a button and have the database spew a report exactly the way he wanted it formatted without me writing a program to put it in that format (back in the 80' before GUI's). He claimed there was a magic button that I needed to press, and that I knew which button it was, but was being deliberately difficult. Another manager who claimed the internet was free and I knew the secret location where you could plug a computer network into it. A group of managers who think the internet was some sort of 'secret' network, and that anything they plugged into it didn't need a firewall or virus software, because no one knew their computer was attached to it if they didn't actively tell anyone.

    3. Estimating time to complete tasks

    I knew a planner who was given the job of implementing a similar sort of scheduling plan that they use in engineering, but for the developers at a large oil/gas mining company. His major complaint was he couldn't do it, as every time he asked a developer how long it would take to do a task, they never knew, not even a guestimate, and whenever he asked how far through a task percentage-wise they were, they never knew that either. I had to explain to him, it wasn't like a normal engineering problem, where if you knew how long it takes to erect 10 scaffolds and just doubled it if you had to erect 20, or if you knew it takes 1 day to dig X amount of metres of ditch to lay a pipe you could triple it for three times X amount of ditch. Two programs that are both 100 lines long might take different amounts of time based on the complexit

  166. My list by naoursla · · Score: 1

    1. Figuring out the right problem to solve. Or the best problem (which problem will have the most impact when solved).
    2. Explaining why something took longer than I expected it to.
    3. Estimating the time to fix some random bug before I understand the bug.
    4. Explaining why the work I've done over the past year is more important/difficult/better than the work done by a co-worker over the past year.
    5. Balancing staying focused on task versus expanding the breadth of my knowledge about the system I'm working on (I naturally bias towards the former).
    6. Understanding the forest when I spend all day looking at individual trees (related to 5).
    7. Knowing when to ask a co-worker a question to get past an obstacle in five minutes versus spending an hour figuring it out on my own.

    Most of the things the article describe sound like the easy parts.

    Most of my challenges seem to revolve around communication.

  167. Hardest things for a programmer by Anonymous Coward · · Score: 0

    Hardest things, ok, hardest things.. let's see:

    1. Show up.
    2. Show up on time.
    3. Wear pants.
    4. Shitchat with coworkers
    5. Attend physical meetings to rehash shit everybody already knows
    6. Avoid staring at HR tits
    7. Avoid staring at HR ass
    8. Not overcaffeinate
    9. Not undercaffeinate
    10. Schedule shits for off-hours
    11. Allow time for others to catch up
    12. Answer the same question over and over and over again

  168. Face the same preventable failures over and over.. by Anonymous Coward · · Score: 0

    The hardest thing is dealing with the same avoidable process failures over and over and over again which make work take substantially longer, make delivery dates unpredictable (which risks death marches), and otherwise makes life unpleasant.

    Other types of engineers know that feedback produces the highest fidelity with the least effort. It takes less energy to make adjustments near where an error is made which requires detecting it as soon as possible.

    You fire a rocket at the moon and it takes just a little fuel to correct a fraction of a degree worth of error leaving earth orbit, but you'll be out of luck when you wait until the moon passes the cockpit window.

    The big feedback implementation in software is achieving good automated test coverage early in the process, ideally via test driven development where tests of fine-grained functionality precede the code they test thus influencing its APIs and other design aspects to favor ease of testability and making thorough coverage likely.

    Developers run the relevant automated test suites following small work increments, the problems detected must be in constrained code area, the context is usually still in their minds, and the fixes relatively easy.

    You also automatically run those tests plus longer running ones including system tests from QA engineers whenever the head of the branch is untested and the tests aren't currently running so you catch it when people screw up and do even better.

    In practice that's usually not what happens - we get poor test coverage late in the game at which point problems are slow and difficult to fix and a series of release candidates pushes back release dates and ramps up the stress level as fixes introduce new regressions and let the process go farther uncovering others.

    At one company I dealt with a CEO who insisted that software developers writing unit tests early in the process and hardware guys validating their designs was a waste of time and that must be done by an off-shore group months after everything was built.

    I presented papers and personal anecdotes to no effect. I got other executives on my side making their own arguments. The CEO didn't change his mind and most of the group did what he wanted. The software was late. The VP of engineering got demoted. The hardware never worked and was abandoned. The company went out of business after a lot of pain.

    At another I dealt with a director who abandoned the existing unit test and automation practices when a pivot was necessary. Logic didn't work there either so I escalated to the VP level. That got everyone a book on the subject but didn't change anything. We had quality issues and had to abandon schedules in order to avoid killing our friendly beta customers and the company with them. While that sucked less than the usual panic it was still painful.

    At another engineers carried pagers 24x7 with a 15 minute response time to deal with the software quality which exists when you don't have good test coverage up front.

    I'm far enough along in my career that when system test which isn't automated for years finds a bug in my code months after I make it (100X more automated test cases more than your co-workers make such failures much less likely for you than them, although they still happen) I can get away with telling the team if they find the version which introduced the regression I'll fix it but I would really prefer not to need that coping mechanism.

    Being able to make aggressive realistic schedules is also a lot better for business than when people need to fall back on software engineering estimation rules of thumb like

    1. Estimate
    2. Double
    3. Increase the units one notch

    where 1 day becomes 2 weeks, 2 weeks becomes 4 months, etc.

    This can be done right. I personally ran a software group which did the right things and it was awesome. Unfortunately that's the exception not the rule.

    Recurrent similar horror stories from other developers let me know I'm not alone, but I want a fix not people who share my pain to commiserate with.