Starting in late 2003, I began to formulate a web site framework in PHP for MCR, Inc in Mayfield Village, Ohio. MCR is (Marketing Communication Resource) a company who gets your information where you want it, ie. they have Xerox production laser printers, envelope sutffers, folders, they work with mail houses and send emails.
Part of their business is collecting, editing, and composing client data. This is where the web comes in. MCR also runs hundreds of concurent but separate customer jobs whose starting and ending dates are not related. The web had been used, in a copy and edit way, to create custom web sites for jobs that needed public facing web pages as well as internal data control facilities.
Because of the copy and edit process, features were strewn across the landscape with little hope of coming back together in a concerted way to enhance the "copy base". So the original goal of the framework was to clean up the "copy base" ideas in to a real framework that was reused rather than customized. The challenge was to take the concepts from the old PHP, the needs of the business and to create a new thing which would provide what was needed in a single place, where customization was performed because the shape of the job was different, not because a new feature was needed. That is to say customization equals configuration.
Tuesday, May 23, 2006
Tuesday, May 16, 2006
New tools make the jobs dumber
I make software tools for a very specialized industry, putting data on paper.
People (companies) want all kinds of things, we have lots of clients, hence we have lots of different programs to write.
The 'programmers' who deal with the "production" work of marshalling, composing, and printing the data are just kids, they could not write or understand the code in any of the tools they use: web servers, web site frameworks, databases, scripting languages, font makers, composers, printers. Yet they regularly use them all and pull off amazing things.
When I write a new tool, am I making those kids dumber? or enabling them to raise to loftier heights?
Clearly the level of abstraction and depth of understanding are inversely propotional when it comes to these kids. They soak up techniques for using the higher levels of abstractions, occasionally, learning a new trick with something one level down from where they are used to working and are generally totall unaware of any new potential levels of abstraction above them, which might be created to give them even more power.
This is a model of 'intellegence' described in the Baha'i Faith. Abdu'l-Baha, explains that although mankind is one, all men and women are equal in the sight of God, there are different degrees among people and further more there is limited awareness between these degree levels. People will gravitate to their own degree and stay there. This applies to many environments and capacities and is not a merit measure. But it does explain many things we see and struggle with in our daily lives.
So should I feel bad about kids who understand less complex computer issues than I? No, should I feel good that I understand more than they? No, also. We are of different degrees! But there should be a great compassion, humility, and exhiliration that can be felt by all in our interactions. They can learn from me forever, I can never understand my own limitations, and together we can do wonders.
People (companies) want all kinds of things, we have lots of clients, hence we have lots of different programs to write.
The 'programmers' who deal with the "production" work of marshalling, composing, and printing the data are just kids, they could not write or understand the code in any of the tools they use: web servers, web site frameworks, databases, scripting languages, font makers, composers, printers. Yet they regularly use them all and pull off amazing things.
When I write a new tool, am I making those kids dumber? or enabling them to raise to loftier heights?
Clearly the level of abstraction and depth of understanding are inversely propotional when it comes to these kids. They soak up techniques for using the higher levels of abstractions, occasionally, learning a new trick with something one level down from where they are used to working and are generally totall unaware of any new potential levels of abstraction above them, which might be created to give them even more power.
This is a model of 'intellegence' described in the Baha'i Faith. Abdu'l-Baha, explains that although mankind is one, all men and women are equal in the sight of God, there are different degrees among people and further more there is limited awareness between these degree levels. People will gravitate to their own degree and stay there. This applies to many environments and capacities and is not a merit measure. But it does explain many things we see and struggle with in our daily lives.
So should I feel bad about kids who understand less complex computer issues than I? No, should I feel good that I understand more than they? No, also. We are of different degrees! But there should be a great compassion, humility, and exhiliration that can be felt by all in our interactions. They can learn from me forever, I can never understand my own limitations, and together we can do wonders.
Tuesday, May 09, 2006
What's LISP got to do with it?
One of the strengths of lisp is the fact the control structure uses the same syntax as the data structure -- a notion similar to the relationship between binary computer instructions and data (the same set of bits can be either one.)
If all non-lisp programmers continued to program in machine language, they would enjoy the same benefits as lisp programmers.
So, the question arises, "What would a Java-like language have to be like in order to enjoy this strength of lisp?"
First an analysis of this code/data relationship in lisp. There is a direct relationship between the written form of the language and its "stored program structure" that matches the relationship between the written form of data structures and their "stored data structure". This illusion is created by the reader, that translates both code and data into its internal format. It represents a universal abstraction because indeed the internal stored formats do not have to be what they appear, but it is true that the car of a program is just as well understood as the car of a list.
Now, consider, what is there in a language like Java and its data structures that can be in such an equivalence as lisp's code and data? Well, perhaps it would be easier to answer if we first removed the veil of compliation and viewed the languages as being interpreted, with no underlying bytecodes to make us wonder if bytecodes can be manipulated like numbers.
Done. What is left? When the text of the language creates "code", it is making classes. Well there are also interfaces, but let's leave that be for now. When the text of the language creates "data" it should also be able to make classes!
If all non-lisp programmers continued to program in machine language, they would enjoy the same benefits as lisp programmers.
So, the question arises, "What would a Java-like language have to be like in order to enjoy this strength of lisp?"
First an analysis of this code/data relationship in lisp. There is a direct relationship between the written form of the language and its "stored program structure" that matches the relationship between the written form of data structures and their "stored data structure". This illusion is created by the reader, that translates both code and data into its internal format. It represents a universal abstraction because indeed the internal stored formats do not have to be what they appear, but it is true that the car of a program is just as well understood as the car of a list.
Now, consider, what is there in a language like Java and its data structures that can be in such an equivalence as lisp's code and data? Well, perhaps it would be easier to answer if we first removed the veil of compliation and viewed the languages as being interpreted, with no underlying bytecodes to make us wonder if bytecodes can be manipulated like numbers.
Done. What is left? When the text of the language creates "code", it is making classes. Well there are also interfaces, but let's leave that be for now. When the text of the language creates "data" it should also be able to make classes!
Subscribe to:
Posts (Atom)