Article Publishing
~ understanding the abstract model vs open source
There is a common pattern or bug I see amongst programmers...

This is not understanding the difference between an abstract model (knowledge) versus the concrete implementation of some model...

An example would be reference counted strings. To understand reference counted strings, just read the source. Right? That's what open source is all about.

No.

Reference counting is a model (and a very elegant one) that can be described in precise english, possibly with the help of some diagrams (but preferably just precise english and no jpg/png diagrams even required).

This "Read the source" attitude of open source programmers is an obsession, and a disease. It's a programmer who only understands the concept of concrete source code, and has no understanding (or little) of what abstract models are.

The source code often can contain bugs, workarounds, and other hacks that have absolutely nothing to do with understanding the fundamental model that the source is based on. The model is, in my opinion, even more important than the source code itself....

One can take a general abstract reference counter model, for example, and apply it to any programming language.... as long as he has a clear description of what the reference counter is. Having access to some specific implementation (source code) of a reference counter could be handy, but it's really irrelevant and in comparison to the grand model behind it, or the theory behind it.

Same goes for garbage collectors, CapString, CapArray, linked lists, maps, dictionaries in programming languages, and well pretty much every programming topic...

This may sound like academic twiddling or theoretical bull shit, but it is not....

You don't build a house by going to the hardware store and studying the lumber. You build a architectural model or design of the house with some plans.... Indeed having some existing real world implementations of houses to study is handy.

So "Read the source" is definitely a handy thing, but it's not even as important as you might think. Read the source is often the lazy way out "I can't explain my model, so figure it out yourself because this is free software we don't charge for it..." Okay but if you write a book, about your model, say I don't know "The theory and implementation of garbage collectors" or "the theory of arrays with capacity" or "The theory of slices" then I'll support you and buy your book. Maybe it's not a book and just a PDF file... Or even a blog post, or technical article in HTML.

This obsession with source code needs to be looked into... it's a dangerous obsession because not everything is source code. Some stuff is knowledge that is explainable without a specific implementation of source.

I also like this quote from a Minix developer who ported it to ARM processor:

"Open-source is all about sharing code. Getting involved with open-source is committing yourself to share all the code you write and let everyone else use it, mostly free charge (I’m not gonna go into a license-type here). With this project I want to take that commitment one step further: sharing code is one thing, sharing knowledge something totally different. My intention is to share all the knowledge I gain with this project with the rest of the world. And with ‘all’ knowledge, I really mean ALL knowledge, including the parts that don’t seem directly relevant to the core goal of the project itself. If I learned it somehow in relation with this project, I’ll share it with you."

http://minix-to-arm.blogspot.ca/

Again, I don't mean to claim that source code is completely irrelevant and useless... I'm very fond and addicted to source code too. But abstract models and theories of computing science, that's something really powerful.

And the joke of course, is that, that quote is brilliant... but that blog author also lacked the time apparently to share the knowledge, because his blog only has a few posts.... So often we can "want" badly to share knowledge but we simply lack time, and just end up writing code (shut up and code). That's good too, as code is also knowledge, but.... but....

Many programmers make the mistake of implementing some specific programming technique, like say the Turbo Pascal/Delphi reference counted string, and they never share with the world what that string really is, from an abstract model point of view.... Or if the information is shared, it's on some mailing list hidden in one thousand posts that no one can find. Make it a PDF file and publish it for the world to see! Share the knowledge... or at least write an article about it....

Again I find the information on mailing lists astoundingly useful and there are literally thousands of abstract models and explanations kicking around on mailing lists, that are in dire need of being converted to some official computing science PDF's or articles....

This does not just apply to computing science, but all areas of life... Some guy invents a specific implementation of a tool in his house or garage to get something done, but the world has no knowledge of it because he just found it useful for a few projects and didn't share what it was, as an abstract model... to him it was just a few lathe turns, and a couple of grinder marks, and then he had a tool (that was the implementation) but never did he explain it in a PDF file what his tool really was from a model point of view because he lacked time, didn't care to share, didn't feel it was of any use to anyone but limited to his own... etc.

Indeed we have to not spend time writing pdf's and articles about models of every single thing in the universe, as we have limited time, and can only dedicate resources to certain things. Still, I've seen a lot of things in programming that are purely implementations with source and no model to describe them generally.
Copyright © War Strategists, M.G. Consequences 2009-2017    Help! Edit Page