The frustration of people who are not interested in why something works but only interested in the magic phrase they need to type


It’s frustrating when people who are presumably smart (or who are at least pretending to be) have a problem and are satisfied to receive the magic phrase they need to type with no interest at all in understanding why the magic phrase works. For example, here’s a question sent to an internal mailing list for users of something I’ll call Program Q.

From: X

Why is it that after I use program Q to create a table, nothing else works? Here’s a batch file I’ve written:

q create table newtable
pause
q create table newtable2

The pause command never executes; in fact, nothing in the batch file executes after the first line. How can I create multiple tables from a batch file?

My psychic powers didn’t need very much charging up to solve this one. Program Q is a popular one, and some teams like to create a wrapper around it for whatever reason.

My psychic powers tell me that the first “q” on the path is not q.exe.

Another person on the mailing list knew what I was getting at and picked up the ball.

From: Y

Try using call q create table newtable instead.

(Maybe you too can figure out what my psychic powers told me the problem was.)

The response:

From: X

Thanks, that did the trick. I put a call in front of the first line and now the entire batch file runs.

I replied:

Dear X. Please confirm that the first q on the path is in fact a batch file, in order to confirm that you understand the reason why you were encountering the problem, that it has nothing to do with Program Q, and that you understand why the fix works. Don’t just copy the answer from your neighbor.

I’ve already decided that I’m going to blog about people who accept an answer without bothering to understand why it works. Here’s your chance to at least look good when that blog entry comes out.

There was no response.

Update: This was a mailing list for a programmer’s tool. And if you’re a programmer, you’d better understand what you’re doing when you do it, not just cargo-cult your way through your job. Especially since this particular problem had nothing to do with Program Q in the first place. (On the other hand, I don’t blame non-programmers for being satisfied with magic phrases.)

Comments (86)
  1. PlexMan says:

    Patient: Doc it hurts when I move my arm like this.

    Doctor: Don’t move your arm like that.

  2. Mark says:

    The sad thing is that understanding (usually) requires fewer brain cells than memorising.

  3. Anonymous Coward says:

    This does beg the question: Why do batch files behave this way, or more specifically, why do you need to specify "call" to make it not terminate the caller instead of it being the other way around–no "call" continues the execution of the caller while "call" or some other keyword stops the execution?  Is there a reason and/or history behind why it is this way?

  4. Pierre B. says:

    Maybe people are so weird as to not want to fill their brains of technical trivia they have no use for daily?

    Spike:

    The things that you find easy to remember by understanding might so be because you have the technical background that makes such thing easy to remember? For non-technical people, the amount of stuff they’d have to remember to go from root cause to solution could be staggering and otherwise useless.

  5. Jason Seba says:

    Imagine if DOS did originally work the opposite way, i.e. saving the batch file call stack every time one batch file invoked another… then DOS would have to keep track of where it was in the caller for god knows how many levels, wasting valuable memory and file handles each time.  I doubt DOS even originally had the “call” function or equivalent for just this reason.

    [There are a lot of things you can’t do when your computer has only 16KB of memory, and your resident portion (the part that remains in memory when another program is running) is measured in bytes. -Raymond]
  6. Marcus says:

    @Pierre B.

    There are computer end users who indeed can not be expected to know the details, a la Raymond’s recent "I drive a car the way most people use a computer." post.

    Then there are computer professionals, employed in the industry and (supposedly) compentent in their jobs, who are expected to use their expertise on a regular basis.  

    It is the latter that we are discussing.

  7. xix says:

    My father never wanted to understand how windows worked, and I mean at a end-user level.  For him, every x at the top right corner could have a different function.  I’d often find windows minimized, several copies of the same websites.

    He had a step by step, click by click, set of instructions (that I wrote) taped to the wall for 6 years before cable internet became available in the area and he no longer needed to do anything to be online.

  8. njkayaker says:

    "This does beg the question: Why do batch files behave this way"

    I’d say this question might not be very useful since the behavior is what it is whether or not there’s a good reason for it.

  9. Mike says:

    The version of this problem that drives me crazy is programmers, upon getting a heap crash, rearrange thier code slightly in an attempt to get the crash to go away and thereby "fix" the problem.  No amount of explaining that they probably corrupted the heap and need to figure out what exactly the root cause is because otherwise it’ll just come up again somewhere else will get through to them.

    Inevitably when it does indeed come up again somewhere else they start complaining about how buggy Windows and/or MSVC is.

  10. Bryan says:

    I would not expect that my grandmother understood ( or even write! ) a "call" command in a batch file.  My grandmother doesn’t work in the IT field.

  11. henke37 says:

    This sure sounds familiar to me. Only that it’s even worse where I tend to hang around. People trying to write actionscript by copy and paste. It’s horrible.

    It is not just the magical syntax or magical trick, it is the magical fully prewritten code.

  12. DriverDude says:

    Are "internal mailing list" only accessible to Microsoft employees? If so, then I think it is perfectly reasonable to expect that person to understand technical details. Especially since this problem is a Microsoft legacy (batch files) and there are better alternatives that he should at least know about (e.g., PowerShell)

  13. Michael says:

    This post is missing the required tag "The social skills of a thermonuclear device".

  14. Mark (The other Mark) says:

    Wait- From Raymonds first comment, it sounds as though q.exe was what the batch file should be executing.

    If so, the fact that call seemed to fix the issue would be purely a matter of chance- If, indeed the "fix" worked, since all we really know is that it allowed the batch file to finish running. Depending on the contents of Q.BAT, it may or may not have executed the expected commands.

  15. microbe says:

    Blogging about it is perfectly OK. But threatening other employees that you are going to blog about their incompetence in a (internally) public mailing list? It’s gone too far.

    Look, Raymond, I know you are an expert in your area, but some of your blogs are just pure arrogance.

  16. Cooney says:

    Blogging about it is perfectly OK. But threatening other employees that you are going to blog about their incompetence in a (internally) public mailing list? It’s gone too far.

    I don’t see any names attached to these messages. Everybody knows that X is pig-ignorant, but nobody knows who they are.

  17. njkayaker says:

    I think some people’s sarcasm detectors need an overhaul.

  18. Spike says:

    Ai Carumba you’re right!  Nothing annoys me more than when somebody (usually a family member) asks me how to perform some task on their computer and then pulls out a small notebook and proceeds to write down every key press.

    It’s always a very small spiral bound notebook for some reason.  And the back few pages are always filed with user names and passwords.

    They’re so busy scribbling down everything I teach them that they’re not *listening* at all.  I always ask them not to write anything down.  "Then how will I remember what to do?" they ask.  Well, this is a simple task and if you pay attention you’ll understand and inwardly digest the process I’m describing rather than just recording a set of keys to press.

    They’ll never go for that though.

  19. dave says:

    Spike:

    You would love me, then.  I’ll sit down, pull out my notebook (it’s at least not spiral-bound), and *without watching what you’re doing* write down the steps based on you talking through them.

    "That was ‘Xyzzy’ from the Magic menu?  Which widget am I changing the value in?  What does the dialog I’m clicking ‘OK’ on say?"

  20. Davidson Corry says:

    With respect, instead of hinting that you knew what the problem was, you could have just explained how "call" works in batch files, and saved a lot of ink. No problem is elementary to someone who doesn’t know the answer. And even if your correspondent doesn’t care, someone else reading the thread might have an "aha!" moment.

    After all, in most modern languages, once you have a user-defined function, you simply invoke it by name. Languages that require "gosub" are ancient and primitive.

    Well. Batch language *is* ancient and primitive. And another .bat file is not a user-defined function — the analogy is inexact. But it’s a surprisingly subtle difference, if you think about the semantics.

    You seem to imply that not wanting to know "why" is defective thinking. Is the flaw that your student doesn’t have the proper spirit of inquiry? Perhaps that he doesn’t even consider himself a student? Or is that you missed a teaching opportunity?

    Is there in fact a flaw anywhere at all? He learned how to get his batch file working. You learned that not everyone cares about "why". We learned that there is something more to be learned even from the most trivial and fundamental issue.

    All is chaos under heaven, and the situation is excellent.

  21. DEngh says:

    @davidson Corry: He learned how to get his batch file working.

    No, he didn’t.  He *copied* a magic incantation that got *this* batch file working.  ‘Call’ will now assume a position of mysticality in re batch files, and will become one of the balls of crap he throws at the wall the next time he needs something to stick.

  22. GrumpyYoungMan says:

    "You seem to imply that not wanting to know "why" is defective thinking."

    People that do not display a desire to know the whys and hows *about their own job* are by definition defective.

  23. nickj says:

    Life is just too short to understand why every last answer works. As it happens, this question is easy for me to understand; but what we have here is a classic case of a geek who’s got too big for his boots.

  24. Igor Levicki says:

    This url:

    http://microsoft-sharepoint.simplynetdev.com/the-frustration-of-people-who-are-not-interested-in-why-something-works-but-only-interested-in-the-magic-phrase-they-need-to-type/

    Is a proof that Microsoft can overdo even the simplest things such as user and search engine friendly URL.

    [Um, that’s a scraper site. Go complain to the scraper that his URLs are not user and search engine friendly. -Raymond]
  25. Igor Levicki says:

    Scratch the Microsoft bashing remark, that is wordpress engine.

    On the other hand I wonder how is it possible that Raymond doesn’t want to know that MFC CodeWizards in VS2008 Team Edition do not work with IE8.

    [And I wonder how it is possible that Igor doesn’t want to know that season ticket holders at the old Yankee Stadium are being charged double for worse seats at the new stadium. -Raymond]
  26. Defender of X says:

    There’s a lot of hate for this person considering the only thing known is that this person did not respond to Raymond’s threats of exposure as a cheater*

    Does anyone know that this person did not look at documentation after getting the quick answer?

    OK, so Raymond got no reply. If it were me -because I rarely trust answers I get from public/internal forums – I would have looked it up myself after getting the quick answer and moved on with my life. Even if I did trust the answer completely, curiosity would make me look up some details. But, I still wouldn’t respond to that condescending and threatening note; not with anything SFW.

    Well, Raymond, maybe you know this person to be a repeat offender at taking magical answers and not caring, otherwise, I think you’re being a bit harsh.

    And, Cooney, that list probably has thousands of members and it wouldn’t take a genius to search back and find the subject of the post.

    * inferred from "Don’t just copy the answer from your neighbor"

  27. "Here’s your chance to at least look good when that blog entry comes out."

    You are my hero! Some people just deserve that! :-)

    Igor, welcome back – and join the Guild for the Comeback of the Nitpicker’s Corner ;-) .

  28. Worf says:

    Given Raymond’s known queue is around a year and a half to two years, I bet the guy mentioned here didn’t even remember. After all, he was probably playing Halo 3 at the time… or waiting for it to come out.

    As for social skills of a thermonuclear device, you guys should watch the original Red Vs. Blue and observe Andy the Bomb.

  29. Worf says:

    Actually, he could be playing Halo 2 – the PC version came out nearly 2 years ago (I think May 2007?)

  30. Jonathan says:

    I fell for this stupid "call" thing many times. It’s so unintuitive. I imagine that original DOS didn’t have call at all, lacking the memory to keep a call stack. A later version added call, but then they had to keep the original non-return syntax to preserve the holy Backwards Compatibility.

    I also saw the q.cmd phenomena at least twice. It goes like this:

    • x.exe doesn’t do what I want.
    • I know! I’ll write x.cmd that does my stuff and then calls x.exe! No one could tell the difference!

    • (runs his one command) It works! Ship it!

    The second time it was actually another x.exe, written in C# and placed in a folder earlier on the PATH. It did not work.

  31. Nathaniel says:

    I think being coy about the real problem in your original reply would annoy me more than your annoyance at someone not necessarily caring about batch file minutiae. Especially since writing batch seems to be a forgotten black art these days. I don’t see how you could expect a reasonable person to even make that kind of a connection if they weren’t familiar with batch files.

  32. Hybor says:

    After all the discussion, I still find something is missing… Can someone explain why does it work when you add the "call" command? (Or better, why doesn’t it work in the first place)

  33. Miral says:

    @Hybor: /? is your friend.

    Although as Jonathan points out the behaviour is more back-compat-necessity than intuitiveness.

  34. bahbar says:

    @Nathaniel: Raymond was not being coy. He gave the exact reason why the script was not working: q.exe (the program Q) was not first in the path (it was q.bat). Therefore, the script would not work.

    Who knows whether the guy knew about the q.bat at all ?

    I don’t see how all the moaning about "you can’t expect people to learn everything" applies when /he/ is the one writing batch files. He should be expected to learn how to use the tool that he decides to use.

    @Hybor: when executing a batch file from a batch file, the default behaviour is goto, not gosub. To get gosub, you need a "call". This is different from the behaviour when executing an exe.

  35. Anonymous Coward says:

    Hear hear. Revisiting the problem would have also taught him why wrapping programs in batch files is not a good idea, generally speaking.

    Personally, I tend to fire up a real programming language’s IDE where other people write batch files. It’s usually simpler.

  36. anon says:

    How very condescending of you. It’s a shame arrogance rises with intelligence. I’d like to think you reflect on this response in future with regret.

  37. Mike Dimmick says:

    @Igor:

    "On the other hand I wonder how is it possible that Raymond doesn’t want to know that MFC CodeWizards in VS2008 Team Edition do not work with IE8."

    Because he doesn’t work on Visual Studio, use MFC, most likely use wizards, nor does he work on IE8.

    This is of course down to Visual Studio’s stupid decision to use HTML dialogs rather than real ones, which means they get broken by all the intrusive virus scanners.

  38. /df says:

    @Anonymous Coward

    Once upon a time (<1984) it was not possible to assume that the batch processor could store more than one execution context. Invoking a batch file from another was by chaining (context of chained batch overwrites context of caller).

    The call command arrived with MS-DOS 3, by which point PCs might have as much as 128kb (so nearly wrote "Mb"!) RAM.

  39. Anon says:

    I actually wrote a command line tool, and I give it away free on my website. I explain how to download the zip file, extract the exe and CD to the directory you extracted it in and then run it from the command line.

    I get several emails a week with things like "I tried it but a black window pops up and then goes away immediately", or "I tried it but it says ‘toolname’ is not recognized as an internal or external command, operable program or batch file, often with enough information for me to work out which step they missed.

    I used to try to explain it to them, but now I just email back the missing steps or cut and paste the whole sequence from the webpage, and then the email back with thanks. Frankly if I were doing it again I’d write a GUI app and wrap it up into an installer, because it would have taken less time to develop that than to support a command line app in a zip file.

  40. Adam says:

    Tad harsh.  When I was fixing my car I had no clue how the relevant parts all interacted, I just changed the bit that I thought needed to change and was pleased when it worked.  If it went beyond my understanding, I would have found an expert who could solve the problem.

    The other way to look at it: if an expert forced his clients to understand his solutions, would he have any work left to do?

    [This isn’t an amateur mechanic asking a professional for help. This is one professional mechanic asking another professional mechanic for help. When the answer is “Replace the spark plugs” you hope that the original mechanic will try to understand why replacing the spark plugs fixes the problem. -Raymond]
  41. Adam says:

    @Cory Foy

    Understandable.  It really depends on that developer’s area though – I may have been landed on something outside my area of expertise and not give a monkey’s about learning it beyond the need to get the job done.

    I still think there are more tactful approaches to dealing with someone with a lesser standard of inquisitiveness than yourself – not caring how it works is not a crime nor, in some situations, professional misconduct.

    It may be reasonable to call them out on something they should know, buts it is never reasonable threaten to slander their name and reputation in the process.

  42. Adam says:

    @Cory Foy

    Understandable.  It really depends on that developer’s area though – I may have been landed on something outside my area of expertise and not give a monkey’s about learning it beyond the need to get the job done.

    I still think there are more tackful approaches to dealing with someone with a lesser standard of inquisitiveness than yourself – not caring how it works is not a crime nor, in some situations, professional misconduct.

    It may be reasonable to call them out on something they should know, buts it is never reasonable threaten to slander their name and reputation in the process.

  43. Adam V says:

    Oh, and I advise people to Google "Pounding a Nail: Old Shoe or Glass Bottle?" It’s another cautionary tale about people who only want the immediate answer, no matter how much trouble they’ll cause in the future because they simply don’t understand what they’re doing.

  44. MadQ says:

    It has been my experience that most people already know the answer to their technical questions. The problem is that they don’t know that they know the answer.

    Usually, just asking them a few questions will lead them to fix their own problem. For example, asking what the Q command does. Regardless of their answer, ask them if they are certain. They usually are, and then set out to prove it, and lo! they suddenly discover what went wrong.

    Granted, this example is a bit contrived, but you smell what I’m stepping in, and it usually makes the customer feel good because the solved their own problem.

  45. Mitch says:

    Why do YOU care that some people are not interested in mind numbing details of how DOS works. Maybe he was a mathematician who was just trying to get some data processed?

    I don’t get frustrated when someone asks me how to jump start their car battery, and they don’t also want to know how a car’s charging system works.

    Everyone has different strengths. And most people do not think like programmers. Which is why so many UIs stink.

  46. Adam V says:

    One thing I want to point out first is that Raymond didn’t even ask X to learn how "call" works. He told them "confirm that the first q on the path is in fact a batch file".

    @MadQ

    In many cases, you’re right – but if person X was looking for that little push, they would have taken Raymond’s bait with the "you’re calling the wrong Q" post. They instead waited for the follow-up "add this magic word" post and then decided they were done.

    @Adam

    my take on this statement is that it implies names are going to be available.

    Raymond’s ground rules for years have included "no names". That’s why he killed off all the Bob posts, because people were guessing at who Bob was. (Side note: Raymond, please bring back the Bob posts! We’ll behave this time, we promise!)

    they can focus in another relevant area and remain ignorant of areas that only prove to cost time

    But in this case, not knowing what’s going on is costing time already. Learning how to write better batch files will save time in the long run.

    Beside all of the un-answered possibilities of this situation (Is this person a developer?

    Raymond lists it as an "internal mailing list", which to me means Microsoft-only. If they’re not a developer, they’re someone who uses batch files to accomplish their daily tasks; all the more reason they should learn what their batch file is doing before they write any more.

    Has this person encountered batch files to any more complex a degree than they attempted to use in this example?

    If they haven’t, then they’re using the wrong tool to solve their problem, and I’m reminded of JWZ’s quote about regular expressions. Again, my answer is the same – if they’re going to use batch files, they have a responsibility to use them right. Teach yourself so you don’t have to ask the same question again later.

    Does working at Microsoft assume an intimate knowledge of batch files?)

    The person in question knew enough about batch files to choose them to solve the problem of "I need to create multiple tables using program Q".

    And don’t think that this is limited to batch files. Raymond would have made the exact same post if this was a C++ programmer calling an API function in a way that was technically possible, but unsupported and sure to cause future problems if the developer learned bad habits.

    Perhaps the person in question reads this blog and can fill in the gaps and realise that they are Mr. X, and that their working relationship with Mr. Chen could now potentially become unconducive.

    Raymond already warned them that he’d be posting about this kind of behavior. X could have spent those two years improving.

  47. Adam says:

    @Adam V

    "Raymond’s ground rules for years have included "no names"."

    Fair enough – I don’t know Raymond or have any clue about his ground rules.

    "But in this case, not knowing what’s going on is costing time already."

    Not necessarily true; situational.

    "they have a responsibility to use them right"

    I agree – though any gripes one person has to another about this has no right to be public; and although this isn’t directly public, the potential is there for people to infer who is involved.  It may only be a minor issue and people may laugh later, but I would rank a public ribbing as behaviour worse than not taking some time to learn something that they may not have had time for in the first place.

    "Raymond already warned them that he’d be posting about this kind of behavior. X could have spent those two years improving."

    A warning does not pardon the behaviour.  

    People are warned daily about much worse things; doesn’t make it perfectly fine when that warning comes to fruition.

  48. Anon says:

    @Mitch – I couldn’t agree more.  

    On a side note, there have been times when I’m in a new domain and can’t get something to work.  I ask simple questions like this.  Not because I just want a quick fix, but because I’m not sure what pieces of the puzzle I’m missing, so I have no idea what to ask.  After getting some of these basics down and understanding what works and what doesn’t work, I can start to piece the things together and get enough context to learn the concepts behind things.  This has pretty much been my experience with computers and programming.  Holes get filled in over time and the more exposure you have to all the pieces, the easier it is to grasp the concepts.

  49. Adam V says:

    Fair enough – I don’t know Raymond or have any clue about his ground rules.

    There’s a link on the right if you want to read them.

    Also, since you don’t read the blog much, you should know there’s a one- to two-year backlog of posts, so this person has had plenty of time to respond to Raymond and request that he not blog about this.

    Not necessarily true; situational.

    Granted – if this were me, and I were under a time crunch or something similar, I’d be mortified to find that Raymond was basing a blog entry on the one time I didn’t figure out the entire answer for myself. But I think I’d also respond to him and say "I was under a time crunch, when I get around to it I’ll look everything up". The fact that he got no response (private or otherwise) makes me think that either a) this is a person who does this on a regular basis, or b) they don’t care what Raymond thinks. In a) this blog is totally appropriate, and b) they don’t care whether he posts it or not.

    the potential is there for people to infer who is involved

    We’ve learned since the "Bob" incident. No names.

    doesn’t make it perfectly fine when that warning comes to fruition

    Doesn’t give them much cause to complain, either. "Why are you taking my driver’s license?" "You’ve been given five warnings about speeding in three months." "But this time I promise I’ll listen!" "…"

  50. Adam says:

    @Adam V

    "Doesn’t give them much cause to complain, either. "Why are you taking my driver’s license?" "You’ve been given five warnings about speeding in three months." "But this time I promise I’ll listen!" "…""

    True :) however a warning still doesn’t pardon questionable behaviour towards someone.  I would rate your situation as expected behaviour; though in this situation any gripes with employees are to be private; in no situation is it anyones right to vent publicly.

    Either way, frustrations are frustrations, and blogs are a usual outlet for them (for some reason).  The point to my replies is that I disagree with the fact that this post exists, not why it exists.  The fact that it exists is courting comeback from the employment tribunal if you ask me – even after having skirted too closely with "Bob".

    Professionalism comes in two forms: your job and your person; Mr. X has supposed lackings in his job; Mr. Chen, not for me to say…

  51. brianstewey says:

    Jesus I am glad I don’t work with this Raymond guy…..

  52. Why do so many people get caught up in specifics of the examples given and miss the actual point of the article?

    From what I read, it sounds like they just went back and changed their program to:

    call q create table newtable

    pause

    q create table newtable2

    …which would work fine.  Until they add another line:

    call q create table newtable

    pause

    q create table newtable2

    q create table newtable3

    and suddenly it’s only getting up to newtable2.  Maybe this would cause them to finally look up what ‘call’ does, but maybe they’d just add ‘call’ to the second q and call it a day, leaving yet another possibility of failure.  The point is that if they don’t understand how it works, they’re going to keep making the same mistake, and possibly introduce lots of subtle problems, and this has nothing to do with DOS, but the general concept of people not bothering to understand what they’re doing.  It works, kind of, and apparently that’s good enough?

    Another example would be InvalidateRect().  A naive user might experiment and find that passing NULL for the first two parameters always redraws their window correctly, without understanding or caring why that is a terrible idea.  Enough programming by superstition.

  53. Hamilton-Lovecraft says:

    Would it have been so very painful for Raymond or person Y to start out with something like:

    "I’m guessing that the Q getting executed is a batch file, not an .exe; if that’s the case you’ll need to use the ‘call’ prefix to get this batch file to continue afterwards."

    You can hardly blame someone for accepting a magical incantation when you’ve claimed psychic powers yourself.

  54. dude says:

    If I would have gotten douche bag responses to questions at work like that I would have complained, loudly.

  55. Cory Foy says:

    I know lots of people have said this is harsh. I’m going to make a couple of assumptions here:

    – It was an internal MSFT mailing list

    – The poster ("X") is a member of a dev team or otherwise expected to understand technical details

    There was likely a time at Microsoft where posting something like this would get you made fun of. After all, the developers are supposed to be the best and the brightest, and someone who blindly accepts a suggestion without understanding it could be seen as not caring enough about their craft to want to learn the "why".

    And for someone like Raymond, who has seen a progression of top notch people intermingled with people not wanting to learn why, or how, but merely what, this could be quite frustrating.

    I have no doubt that Raymond would not say something like that to his mother, or family member, or whatever. Those people *aren’t* software professionals, and *don’t* need to internalize what is going on.

    But if this person was a software developer at Microsoft, it’s perfectly reasonable to call them out on that.

  56. JD says:

    This is life at Microsoft; you have people who know things inside out and thousands who do not.

    Those who know don’t consider it their responsiblity to answer questions. After answering such questions repeatedly they start to decide to answer questions not asked.

    Like deciding the best way to help somone is to not answer their question, but ask another question and then berate their work ethic.

    I’m sure this happens all over; maybe when someone asks Bill Gates why their company isn’t making billions, he asks them whether they have any customers.

  57. Adam V says:

    @Adam:

    > it is never reasonable threaten to slander their name and reputation in the process.

    As Cooney said, "I don’t see any names attached to these messages. Everybody knows that X is pig-ignorant, but nobody knows who they are."

    Not to mention, Raymond’s last message was "I’m going to blog about *people* who accept an answer". Nowhere did he mention "I’m going to tell the world that you, X, Developer in the Y Group from 2002-2006, prefer to copy off your neighbor’s paper instead of figuring anything out for yourself."

    > The other way to look at it: if an expert forced his clients to understand his solutions, would he have any work left to do?

    You talk like Raymond’s telling his grandmother to learn Perl so she never bothers him again. Raymond is simply advising another *Microsoft developer* that he might want to learn how "call" works before he uses it.

  58. Adam says:

    @Adam V

    "Here’s your chance to at least look good when that blog entry comes out."

    Sorry, but my take on this statement is that it implies names are going to be available.

    "You talk like Raymond’s telling his grandmother to learn Perl so she never bothers him again. Raymond is simply advising another *Microsoft developer* that he might want to learn how "call" works before he uses it."

    Of course I do, the point is that people divide knowledge and abstract complexities in order that they can focus in another relevant area and remain ignorant of areas that only prove to cost time.  I do it all the time purely by using the .NET Framework – I don’t always understand how things work under the hood, just when and when not to use them, and I challenge you to find someone who hasn’t crossed that bridge.

    Beside all of the un-answered possibilities of this situation (Is this person a developer?  Has this person encountered batch files to any more complex a degree than they attempted to use in this example?  Does working at Microsoft assume an intimate knowledge of batch files?), the point I derive from the blog post is that people who do not bring a certain level of technical inquiry to their jobs are not fulfilling their job roles.  What message do you take away that someone has bothered to blog about the frustration of these unnamed people?  Perhaps the person in question reads this blog and can fill in the gaps and realise that they are Mr. X, and that their working relationship with Mr. Chen could now potentially become unconducive.

  59. Bryan says:

    @Dude ( and others ):

    I would complain, too: You’re wasting my time with questions you could have answered yourself.

  60. William Furr says:

    I run across this attitude all the time and it galls me.  Some people just have absolutely no desire to learn anything about the tools they use to get their jobs done, even when that knowledge will allow them to branch beyond solving *this* problem to solving *this entire class* of problems.

  61. Cooney says:

    And, Cooney, that list probably has thousands of members and it wouldn’t take a genius to search back and find the subject of the post.

    Being a certified genius, I’d like to point out that I (and many others who come here) don’t have access to the list in question.

  62. DysgraphicProgrammer says:

    The poster could have been someone who *almost* knew the answer.

    I work with batch infrequently, so I am aware of ‘call’, but it is so counter-intuitive to me that I always forget about it. If I only knew that a command named q was acting weird in a batch file, it might not occur to me that it might be a batch file itself. If I saw Raymond’s first ‘psychic’ comment, that would be enough to tickle that corner of my brain and recall enough old knowledge to solve my problem.

    I would of course write a ‘thanks that worked’ message, so every one could have closure, but a dissertation on quirks of batch files would take to long.

    I would probably ignore the jack-ass demanding that I show my work to prove I am smart enough to use his solution.  

  63. kinda like the guy who is not interested in how his car works, but just wants it to magically work

    oh wait…

  64. Jerry Hammond says:

    I am not the person in question. I say that because I want to be clear, any time you want to bust my chops for not asking why, you’re more than welcome to do so Raymond.

    Knowing why is the reason I read your blog in the first place.

  65. njkayaker says:

    "How very condescending of you. It’s a shame arrogance rises with intelligence. I’d like to think you reflect on this response in future with regret."

    This advice to a person who self-describes as having "the social skills of a thermonuclear device" seems likely not to go anywhere!

    I suspect that the blog posting really doesn’t say much about what he actually did or said in this case.

  66. Mike Caron says:

    This topic reminds me so very much about forum posts I see so often that go something like:

    X: How do I do Foo in C?

    Y: Easy! You just need something like:

    while(DoFoo()) {

      beforeFoo()

      updateFoo();

    }

    X: It doesn’t work. I get a message "Missing semicolon". Did I do something wrong?

    (Obviously, Y made a typo when banging out code from memory. The WTF is X not realizing this simple mistake, even though the computer explicitly told him!)

  67. arnshea says:

    On the positive side, the fact that so many people in IT/development don’t care why/how their solution works pretty much guarantees demand for people that *do* care why/how a given solution works.  

    These people invariably dig themselves into holes so deep that it takes understanding to get them (or more importantly, those who have come to depend on them) out.

    So hear’s to the blissfully ignorant – they may create your next paying job one day.

  68. Obivous Trool says:

    I bet you searched hundreds, or even millions, of mailing lists looking for cases like this; posting your "I’ve already decided that I’m going to blog about.." warning on all of them; and the example from this article cites the ONE poor sap who never responded . . .

  69. just4fun says:

    ‘q’ is not recognized as an internal or external command,

    operable program or batch file.

  70. Embarrassed says:

    When we ported our software from XP to Vista, the person doing it seemed to be interested only in the magic phrases to get the code to work.  The XP software mistakenly put a debug filed called "omg.txt" in the root c:.  Oops!   It just contained debug garbage, and the code that created it was something like open(fh, "c:omg.txt"); write_debug(); close(fh);

    Pretty obvious that the file wasn’t supposed to be there, and rather embarrassing that we shipped a product with that happening.  So the person porting to Vista ran into the problem of Vista not letting you install files to c:.  So rather than understand that "hmm, the code creates a hard-coded file, writes junk to it once, and never uses it again" means that it’s a bug, the person must have searched the internet for how to fix a program when Vista blocks it from writing to c:.  The solution?  Create c:product and write the file there.  Yes, change the hard-coded filename to C:productomg.txt.  Brilliant.

    (as a double whammy, I had fixed the bug already, but this person blased my changes out of source control.  They apparently didn’t understand merging either)

  71. Jules says:

    I see this kind of cargo-cult programming (which, BTW, is an excellent phrase) all over the place.  But I’ve never seen such a concentration of it anywhere more than I see on PHP and Javascript (the latter more than the former) help forums.  I think there’s something about web programming that attracts this kind of programmer.

  72. Ulric says:

    Here’s why the guy deserved that harsh response, for those who missed it:

    He replied he’s satisfied with adding ‘call’ to the first line of the batch file, to get around the problem.  There is a second call to ‘q’ later in the batch file.

    People need to have the basic reasoning, pride and professionalism to understand what they do and why and do the job well; we need to flush these people out of tech companies, they’re just creating us more work.

  73. Name **REQUIRED** says:

    X: It doesn’t work. I get a message "Missing semicolon". Did I do something wrong?

    (Obviously, Y made a typo when banging out code from memory. The WTF is X not realizing this simple mistake, even though the computer explicitly told him!)

    Usually these people don’t know that the ; is officially called a semicolon; they probably think of it as ‘That sideways moustache thing’ (Yes you read that right) or the like.

    Just kindly explain to them what semicolons are, they will probably say "Oh, I’ve used those! So that‘s what they do, huh? Wow, you’re a pretty smart guy, thanks!" and continue on their way…

  74. Dean Harding says:

    "they probably think of it as ‘That sideways moustache thing’"

    Dur, it’s half a wink not a moustache!

  75. porter says:

    There was a parable about the difference between giving fish and teaching to fish…..

  76. -dn says:

    I completely agree , you should learn and understand, it’s the only way you’ll avoid the problem in the future. So unless you are going to finish this coding job and become a bartender after, learn it.

    With that said, I also completely understand the mental state you are in when you just need someone to give you the answer, no questions asked.  It comes from banging your head on your keyboard it hopes to overcome whatever it is that won’t let you figure out why the damn code won’t work.  It’s amazing how after a while all logic goes out the window and you start coding crap that has no business working.

  77. frymaster says:

    especially since adding "call" isn’t a solution; it’s a workaround, that may or may not work depending on what the "q.bat" program does; it’s got a fairly decent chance of failing if you add arguments, for example.  Remember the original intent was to execute "q.exe" – the fact that a "q.bat" file was on the path first was a problem and the fact that "q.bat" happens to call "q.exe" doesn’t mean we should ignore the original problem

  78. Mark (The other Mark) says:

    Thank you!

    I was beginning to doubt a single person was smart enough to realize that using Call at all was not the solution, just a band-aid that happened, by pure chance, to work.

  79. Tim says:

    I agree with this article — I feel the same way when people whine about learning to drive a manual transmission.

  80. Anonymous says:

    100% agree with Raymond.  

    Programming is by nature full of stuff like this.  Not understanding why something works is pushing a problem off to someone else in the future.

    Raymond’s blog is all about how Windows grew up accomodating the problems that arose from lazy programmers that don’t research the whys and just use the hows.  He receives a lot of flak for the way Windows has turned out as a result of those lazy practices, and now he gets flak for attempting to instill a more disciplined approach… in a peer???

    The internet is amazing at exposing the ugliness that lies just below the surface of our personalities.

  81. Titus Barik says:

    The most frustrating aspect is that I’ve worked with people who hold PhDs with this type of attitude. It seriously boggles the mind.

  82. Mark (The other Mark) says:

    This isn’t learning to drive a manual transmission. They aren’t trying to do anything remotely as complicated as that.

    This is

    User: "I crash everytime I turn right on Light Street!"

    Raymond: "I suspect Light Street is one way. Check for signs saying so."

    Unnamed Developer: "Try turning left on Light Street."

    User: "Thanks! That fixed it for me!"

    Raymond: "Please post that you understand what a One Way Street is and why you crash turning right, but not when turning left."

  83. Stephen says:

    I don’t understand how you can say that learning WHY is any different than learning HOW it works.

  84. Yuhong Bao says:

    "There are a lot of things you can’t do when your computer has only 16KB of memory"

    To be more precise, I think DOS 1.x required 64KB of memory, but the point stands.

Comments are closed.