If you get confused by a register dump, then you’ll just have to accept that some of my postings won’t make any sense


This Web site is not for beginners. I try to write for advanced programmers, and if you're not an advanced programmer, then you'll just have to accept that there will be times you are baffled by what I write. Often I dial the geek back a notch, explaining some things which should be "obvious" to an advanced programmer, such as why storing a constant pointer into a stack location from dynamically-generated code is a clear indicator of a framework thunk. But I will dial it back only so far, and eventually you may just be forced to (horrors!) do your own background research to get yourself up to speed or simply give up and see if you have better luck with the next entry.

There are some topics I have sitting in my ideas folder which I will probably never actually post about because they are so advanced that even Don Box, COM guru extraordinaire, admitted in email to me that they're too advanced even for his super-advanced book on COM. At the PDC, talks used to be categorized as 100, 200, 300, or 400-level, mimicking the categorization of classes at most U.S. universities, with 100-level classes being introductory, and 400-classes being college senior seminar type stuff. COM weak QueryInterface would be somewhere at the graduate research level. Stuff so esoteric, nobody would actually need to know it.

To be honest, I don't think I've written anything truly advanced in a long time. It's all been fairly intermediate for the past few years. People don't seem to mind too much, so I'll just keep it going.

Comments (29)
  1. John says:

    Does anyone else find it humorous that a book titled "Essential COM" is actually super-advanced?

  2. Leo Davidson says:

    If they’re already written you could always post them in bulk here or somewhere else, or drip-feed them once a week/month/whenever. You could schedule them for "Super-Advanced Saturdays/Sundays." :)

    If someone finds them interesting/useful then it’s better than nobody finding them at all, unless they need work editing/finishing and it doesn’t seem worth it, which is fair enough.

    FWIW, I don’t think there’s a single technical blog I read where I am interested in every post. Some of them go weeks or months without anything that interests me but that’s cool because someone else probably likes those posts and it only takes me second to skip them in an RSS reader.

    So I am just one reader but I say mix in as much esoteric/advanced stuff as you like.

  3. Leo Davidson says:

    @John: Maybe "Fundamental COM" would be a better title, though then all the Developmentor books would have had to be renamed :).

    I really liked the way the book explained things at a low-level as it meant I actually understood what was going on and why. Frameworks, and books which assume them, can really obfuscate things sometimes, as much as they abstract things in a good way at other times.

    There were also chapters of Essential COM that I only skimmed as I didn’t think I’d need to know about some things, or I hadn’t used COM enough at the time to understand some of the concepts. It’s good to know they’re there if needed, though… I still find myself wishing I hadn’t lent my copy to someone every so often.

    FWIW I had the pleasure of meeting Don Box when he trained our team in C# in London about 8 years ago. He’s a great guy. I still use the coffee mug that was part of the course pack, too. :-)

  4. laonianren says:

    You’re taunting us!

    "I could tell you these interesting things but you don’t need to know so I won’t."

    Please do.

  5. Paul M. Parks says:

    In 19 years of professional programming, I’ve never acquired knowledge that I wished I hadn’t had. Even the stuff that I really didn’t think I would ever need tends to be surprisingly useful.

    Consider, also, that blog posts live forever. If you post something today that’s over my head, a year or two down the road I might remember it and come back to it when I have the necessary context to grasp it and apply it.

    So, please, feel free to share the super-advanced stuff. There are more of us out here waiting to soak it up than there are people waiting to gripe about it being too hard to understand.

    [Part of the danger (which I realized only after I had started blogging) is that if you post something super-advanced, the non-experts will see it and say “That’s cool, I’m going to use that technique!” even though it’s way over their head and completely wrong. Ironically, then, the more advanced you get, the less likely you are to use advanced techniques. -Raymond]
  6. Tom says:

    It’s a shame you feel you can’t put the super-advanced stuff in, because after nearly 15 years of programming it’s only the super-advanced stuff that I typically find interesting.

    Of course, I recognize that not everyone has that level of interest.  There are often times when I’ll be debugging an issue by looking at disassembly and a hex dump when someone will come to my desk and give me the old "Oh no!  He’s gone off the deep end again."

  7. DWalker says:

    People seem to enjoy this blog so muc, that they seem to get annoyed when they can’t understand something.  I claim that people have no right to complain that Raymond sometimes includes topics that don’t interest them!  

    I suppose that if the blog weren’t so popular and entertaining, then Raymond wouldn’t be criticized for including advanced stuff, or beginner stuff, or non-programming stuff, or whatever.

    Post whatever you want, Raymond!  And thanks.

  8. Toddsa says:

    I believe it is called "Essential COM" because if you do not read that book and start off into the COM world in about 3 months you will realize that you really don’t understand what you are doing and you will go insane. ATL and VS wizards are great if you are coding in a simple environment and want to generate code quickly. I think Don Box said something similar… When starting out as a COM developer you believe after a short time you understand everything you need but after about 6 months you come to the understanding that you don’t and most likely never will. I though after buying my first house I wouldn’t have to deal with apartments anymore, ugh…

  9. Mark (The other Mark) says:

    My favorite articles are the ones where I am baffled by what you write. As a mid-level developer working on primarily non-Win32 items, when you say "Instantly", I usually at least take a few minutes to work out. Better yet, I’m often forced to do my own background research in order to completely understand the topic at hand on the advanced topics. It’s not within my typical problem domain, and you’ve got a few years of experience on me, so I don’t feel especially stupid when you say "Obviously".

    They are also, however, the posts I am least likely to comment on. By the time I read the entry, think about it, do some background research, etc., even if I have something of value to post, it’s probably already been posted, or it’s late enough in the day that I consider the topic "stale".

  10. Paul M. Parks says:

    "Ironically, then, the more advanced you get, the less likely you are to use advanced techniques."

    I hadn’t considered that. I guess you have to be careful what you throw out there.

    This reminds me of that famous psychology paper, "Unskilled and Unaware of It: How Difficulties in Recognizing One’s Own Incompetence Lead to Inflated Self-Assessments". You don’t know what you don’t know until you know it.

  11. Ken Hagan says:

    "COM weak QueryInterface would be somewhere at the graduate research level. Stuff so esoteric, nobody would actually need to know it."

    If you’re referring to weak references (rather than strong ones) then I beg to differ. You shouldn’t be allowed to write COM code unless you know when (and how) to use a weak reference. If you have something else in mind, then it’s gone over my head. Sorry. :)

  12. tsilb says:

    IMHO, getting thrown into the mix of stuff you don’t understand is THE most effective way to learn it; Especially in the context of a blog where nobody’s career is on the line and we can take the time to look it up.

  13. Jim says:

    Please keep your super advanced technique for yourself, because we do not want to build another WMD. Like Warren Buffet said: "Beware of the geeks" you guys are goona to blow us away. Please Please keep those super advanced staff off the limit!!!!!!!

  14. quotemstr says:

    I’m reminded of the old Brian Kernighan quote:

    “Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.”

  15. Ryan Phelps says:

    It’s also possible that the stuff you consider "intermediate" is actually pretty hard and the stuff you consider "advanced" is actually impossible.  It’s like taking classes from a Ph.D.  The professor thinks the test is super easy, the students are dying.

  16. acq says:

    Raymond: ‘(…) if you post something super-advanced, the non-experts will see it and say: "That’s cool, I’m going to use that technique!" even though it’s way over their head and completely wrong.

    Ironically, then, the more advanced you get, the less likely you are to use advanced techniques.’

    That’s really brilliant observation. The examples I know of:

    1) There is a lot of books and articles about the Windows programming and a lot of the code examples from Microsoft think that when they demonstrate API usage they don’t have to demonstrate the "good programming" but the sequence of API calls. Still, a lot of people think that exactly these code examples are that what should be copied and used in their own programs, and even imitated in the rest of the code.

    Some time ago I told one young programmer that the Win32 documentation and code examples are 99% NOT written by the people who really do any REAL development. He was surprised.

    A lot of book authors only write books. They often don’t even have an idea what’s really important in practice. But they write books with titles "advanced this, super advanced that, exceptional this, excellent that, effective this…" And readers mistakenly believe that by using "advanced anything" they increase the value of their product.

    On even another side, a lot of people who make "standards" only sit at the meetings — there’s big chance that by the time they got there they didn’t do real development for years.

    2) If I’d get money for every time I see some misuse of "advanced C++ features" in the C++ code written by others… Come to think of it, MOST of the C++ language features are misused in most of the code. It can be even claimed that it started among the very authors of C++:

    1956: Fortran

        PRINT 1, X

     1  FORMAT (F10.2)

    1978: C

        printf("%10.2f", x);

    1988: C++

        cout << setw(10) << setprecision(2) << showpoint << x;

    1956 was 53 years ago. Fortran was developed by the team lead by John Backus, a genius, and the first I/O for the first implementation by another obvious genius, Roy Nutt. The number before the format was there because of the possibility to reuse the same format specification by more statements in the program.

  17. Lukas Beeler says:

    I’m a sysadmin, have little clue on programming, but i still consider most postings here very interesting.

    So don’t let yourself get bothered by stupid comments.

  18. aaawww says:

    yes, pleaso go ahead and keep posting advanced stuff. I can fully grasp only half of your posts, and of those only half of the content, but that’s because I don’t know so much of the windows api. but your posts are a continuous source of amazement and guidance for me

  19. SRS says:

    @Paul M. Parks: "In 19 years of professional programming, I’ve never acquired knowledge that I wished I hadn’t had" – I used to feel the same until I came across VB6.

  20. hexatron says:

    I’ve been using COM for years. I had no idea what apartment threading meant, but thanks to this blog I think it has something to do with a the message loop. I have not used this information.

    For me, they joy comes in tidbits like the /a switch on the SET command. Since HELP lists 70 or so commands, most obsolete, totally boring, or very well known, I never thought to try HELP SET to see what magic powers it has. And it has more: /P.

    CMD documentation is tantalizing and unfulfilling. There are special characters. The documentation says they must be escaped. Some (angle-brackets, vertical bar) are well-known. Others not so much. And just try putting an open-paren into a google search…

  21. anonimuss says:

    I have never considered this to be an advanced programming blog. I think what you mean is an "experienced/intricate/detailed" Win32 programming blog.

    This blog is more about extra tidbits of information rather than something truly advanced. Being able to read register contents is something almost anyone with an undergraduate computer engg degree can do. The blog is always a source of new information, but not a source of a new way of thinking.

    When I hear advanced, I expect stuff like this.

    http://okmij.org/ftp

    or something less advanced is here

    http://blog.sigfpe.com/

    Knowledge of intricacies of a particular software stack is IMO not worth getting too excited about. The information is most probably narrow in applicability, very likely to get stale in a few years time and might just get completely encapsulated by better abstractions.

    For example your pleasure at being able to map IP_ON_HEAP to DEP and your knowledge of DEP problems with older version of ATL may help you with psychic debugging and impressing newer Win32 stack software engineers, but 10 years from now it will just be a useless nugget of information on an older version of an old piece of technology – ATL which very few people would manipulate directly.

    However take a look at any paper on Oleg’s site, 10 years or older, it is still interesting and useful. When someone says advanced, one expects stuff like these and not an information dump on esoteric edge cases in a software stack. But maybe thats just me. Quicksort from the 1950s is still relevant. Intricate details of JCL on IBM mainframes – not so much.

  22. anonipus says:

    wats a com…is that short for computer?

  23. Cletus says:

    It’s a shame that you don’t post advanced stuff.  It’s the only stuff I’m interested in.

    I have 3 days of programming experience, and have already learned 3 languages (thanks to Learn c# in 24h, learn BASIC in 24h, and learn machine code in 24h).  

    To challenge my commanding intellect, I’m currently re-implementing the algorithms in Paradigms of AI Programming using MS BASIC and 6809 assembler.

  24. juancn says:

    Mhhh… I’m not sure it’s that advanced. It’s mostly poorly documented stuff.

  25. nianqingren says:

    Aaawww… come on Mr Chen. What if Einstein decided "Relativity is too advance. No one will like it or understand it. They’ll just ignore me or  criticize me. Besides, it’s all theoretical thought process stuffs and nobody need to know it. "

  26. steve.thresher says:

    Please publish the advanced entries.

  27. Joshua Boyce says:

    I personally would love to see some more of the advanced topics. Not really because of any practical use but rather because I just love to read about and play with that kind of stuff. :P

  28. I think you should write about the more complex stuff once in a while.

  29. Devlin Bentley says:

    I love being confused.

    It just means I need to learn some more, come back, and try to understand again after a bit of time has passed!

    There have been posts of yours that I have not understood until I have read them 3 or 4 times over the course of 2+ years.  Realistically though, that is how I expect most learning to be done.

    Advanced is fun.  :)

Comments are closed.

Skip to main content