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?"

84 of 473 comments (clear)

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

    I actually agree with that list.

    1. 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.

  2. 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 Anonymous Coward · · Score: 5, Funny

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

    3. 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.
    4. 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!

  3. 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 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."
    3. 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.

    4. 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.

    5. 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
    6. 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.
    7. Re:Estimation by wavedeform · · Score: 4, Interesting

      But this violates Hofstadter's Law

    8. 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)
    9. 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!

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

      shl ax,2

      would be slightly faster and use less memory :)

    11. 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!?

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

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

      I don't get it.

  4. 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 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...
    5. 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.

  5. 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 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.
    2. 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.

  6. 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 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. Their laundry by Anonymous Coward · · Score: 3, Funny

    Their laundry

  8. 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.

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

    Deal with clueless management.

    --
    Mod me down, my New Earth Global Warmingist friends!
  10. 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 Anonymous Coward · · Score: 2, Funny

      And your namespace is "Jungle", right?

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

      Ah, a perl user. my $my;

      --
      Give me Classic Slashdot or give me death!
  11. 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.

  12. 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 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...

    2. 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."

  13. People by CnlPepper · · Score: 2

    Deal with people....

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

      ...particularly physicists who think they can code.

  14. 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.

  15. 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.

  16. 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.
  17. 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."
  18. 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..."
  19. 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.

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

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

  21. 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!"
  22. Fight with Sales by darrellg1 · · Score: 2

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

  23. 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.
  24. 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.

  25. 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.

  26. 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.

  27. 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.

  28. Communicate effectively by thatDBA · · Score: 2

    Communicate effectively with less intelligent people

  29. 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/
  30. 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

  31. Project Managers by foistboinder · · Score: 2

    What Are the Hardest Things Programmers Have To Do?

    Dealing with incompetent project managers.

  32. 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.

  33. 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.
  34. 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:)

  35. 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.

  36. non-technical issues by mspring · · Score: 2

    Dealing with established cultures working with outdated technologies and trying to drive change.

  37. 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
  38. 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
  39. 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
  40. 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.

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

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

  42. 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.
  43. 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
  44. 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.

  45. 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.

  46. 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.
  47. 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.

  48. 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.
  49. 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

  50. 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

  51. 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.