Re: objects and forth
[email protected] Wed, 28 Jan 2009 23:47:51 -0700
| Newsgroups | gmane.comp.lang.forth.colorforth |
|---|---|
| Message-ID | <[email protected]> |
Dear David J. Goehrig, Thank you for your thoughtful and effective reply. Well a lot of what you said came from a higher level of functioning than I am at in terms of programming, it was still clear and understandable. I'm grateful to anyone who exposes me to something that I don't know but that I can come to know. I need to spend some more time digesting your comments and playing them out in manifest ways so I better understand and remember the proposals you made. One last question: what are you doing with Forth? You mentioned in a prior post that you had a lot of ARM dev. kits around -- how did that come about if you don't mind me saying? I was sorry to hear that you don't find ARM to be well suited to Forth. It is my ultimate goal (desire? -- dream?) to be able to thoughtfully program in Forth for smart phones. My regards. On Tue, 27 Jan 2009 19:59:51 -0500, "David J. Goehrig" <[email protected]> said: > On Mon, Jan 26, 2009 at 04:06:14PM -0700, [email protected] wrote: > > "However, as a model for factoring code or designing components, it is > > horrible." > > > > Could you elaborate on that point a bit? > > Certainly. Quick point of reference, my formal training heavily > influences my view of this. Having been a Classicist in a former life, > I've studied more human languages than most programmers have programming > languages. And when it come to programming, I've used about 16 > programming languages in production over the years. > > The meaning of any word in any language is entirely dependent on context. > In a language like Forth, that context is the order in which that word > was defined / compiled. In a language like C, the context that > determines the meaning is the way in which the program was linked. And > in a language like Smalltalk, the meaning of the word depends both on the > Smalltalk dictionary, the definitions within a class, and any binding in > the particular BlockContext you're running. > > In all three languages any given WORD can have more than 1 meaning. The > problem of determining the meaning of any given word is dependent on the > context at a particular point in time. As you increase the amount of > indirection in the naming of these elements, the basis of object > orientation, and push the binding to later and later in the process, the > harder it is to know at the time of reading what a given word means. > > In Forth with early binding, the context is generally the same at edit, > compile, and run time. In a language like C, the context can change > depending on the scope and link time binding. A word may have different > meanings in different function definitions, but also globally depending > on the libraries linked. In an OO language like Smalltalk, the context > is only really defined at runtime, and much to the dismay of many > Smalltalkers, can often cause immense pain when trying to run older code > in newer systems. If you need an example, read the Squeak mailing list > for several months after they roll out a new release, and lots of old > software breaks. There is even a project called "Level Playing Field" > which normalizes the behavior across the past few major releases. Much > of "test driven development" is a response that tries to deal with the > problems created by this uncertainty. > > From a design point of view, treating linguistic constructs as objects, > when they are clearly not objects, is simply disingenuous. Words in any > programming language are still words. As such, they are merely symbols > that stand for things that exist within the experience of the programmer, > and the context of the program. Confusing the idiom you use to talk > about those things with the thing itself, doesn't make for good design; > merely a muddled understanding of the problem you are trying to solve. > Much like Chuck's revelation about the map is not the territory, but is a > useful representation of it. Good design recognizes the underlying > reality, as well as, the limitations of the language we use. > > A friend of mine recently sent me a beauty of a code snippet from a > project he inherited from a former employee: > > public static void setCustomerName(String customer_name) { > customerID = customer_name.toInt(); > } > > public static int getCustomerName() { > return customerID; > } > > These two accessor methods merely operate on an customer record object > that has fields customerID and customerName as entities within it. > However, the programmer in question, deep in the belly of this beast, was > at cross purposes with herself, and mixed the concepts of customerName > and the definition of these accessors. All of the tests in the test > suite worked, the application did basically what it was supposed to do, > but without reading the guts of this seemingly simple object, the meaning > of the words you read in English are contrary to the definition in the > code. This lead to hours of wasted time by later programmers extending > the code. > > This is not to say that this one example of programming invalidates the > usefulness of OO. It merely illuminates how a programer's inability to > choose the correct words is not solved by using OO techniques. Finding > the correct refactoring, and using the correct terminology to convey both > the purpose and meaning of the code, is independent of the mental model > you use to think about the relationship between code and data. That > mental model, however, can often help to confuse the issue by muddying > the contextual waters to an extent that the actual meaning at run time > and the intended meaning at edit time diverge. > > I personally feel that OO design doesn't belong within a program. If you > can't envision the complete state of memory at every stage in your code, > you've outprogramed your head. Adding additional layers of complexity to > an already complex problem merely make your program less understandable. > Where OO does apply, however, is when you are thinking of the interfaces > between programs. Commands you send to a chip over the bus are messages > in the OO sense. Commands you send between nodes on a network are > messages in the OO sense. But messages you send in a Smalltalk sense, > are actually just function calls and indirect jumps. And such a mixed > metaphor is just disingenuous design. > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > Main web page - http://www.colorforth.com >