My take on the question for what its worth is that there is no one  
"tool" you need to learn, but rather a skill set.

Specifically, learn "meta" programming, i.e., code generation. Both  
Java and the CLR have rich support for two features that make meta  
programming relatively easy: reflection and metadata (attributes  
in .NET; annotations in Java). Also, fluidity with generics will take  
your design capabilities to a whole new level.

To do this you need to learn at least one of the two really deeply,  
if not both (I find it easier to learn things in pairs, so that the  
similarities and differences between them "clarify" what they're both  
really trying to do), and become familiar with such concepts as  
Domain Engineering and Domain Specific Languages. You need to step  
outside the box of one database tool and familiarize yourself with  
the ORM problem. Both ADO and JDBC allow you to a certain degree to  
treat databases agnostically. But the real power lies in knowing how  
to interact with database metadata to solve the "object-relational  
impedance mismatch" which is a fancy way of saying the basic  
incompatibility between the structural aspects of object-oriented  
object models and their entity-relational counterparts in SQL. You  
can argue FoxPro dealt with that in pioneering ways, but the truth is  
its architecture is all wrong for the kind of "next step" directions  
that need to be taken to make programming a higher-order task. Or in  
any case, there are better alternatives.

I'm sure some level of metaprogramming is possible in FoxPro, but  
AFAIK it pales in comparison to what you can do in the JVM and the  
CLR environments. I've personally found the language frustrating in  
terms of all the baggage it carries around (the infernal SYS()  
function for instance is really a big turn off, and the file-system  
based architecture is really a relic). I can never keep any  
enthusiasm up for plowing through FoxPro when other tools are so much  
more powerful and their capabilities are growing by leaps an bounds  
every year, unrestricted and unencumbered by platform or  
interoperability issues.

C++ is another option. Static meta programming using templates at  
compile-time is another powerful approach to code generation.  
Combined with "Policy Based Design", it's amazing what you can do in  
native C++. But improvements in the performance of VMs and in  
particular with the optimizing just-in-time compilers are making it  
harder to justify C++ on performance alone, and most people are so  
terrified of managing their own memory that the lure of garbage  
collection (trusting the nanny runtime to clean up after you) is  
almost invincible.

On the other hand, VMs are written in C and C++; so if you want to be  
REALLY employable in the future, where code generation/automation  
will throw even the Indians out of work, learn to write your own VM.  
(The Russians and the Chinese are much more of a threat at this level  
of competency than the Indians, on my experience. The Indians seem  
content to build giant "sweat shops" of programmers in Bangalore and  
suck our corporate capital from us based on the lure of cheap labor,  
most of whom are quite mediocre, judging by the outsourced code I've  
seen at two completely different companies that thought outsourcing  
to India would solve their problems.)

Here is an example of a fellow (who is actually French I believe) who  
is doing just that:

http://www.nekovm.org

And here is an example of what a small group of bad-ass Russians in  
Ekaterinburg did with .NET to solve the ORM problem, and then some.  
What's remarkable is that such small library (only 2MB in size) can  
do so much. I bought the pro version of the product and have access  
to the source, and it's something to learn from!

http://www.x-tensive.com/products/DataObjects.NET

Check out the product manual here: http://resources.x-tensive.com/

The power of this approach -- which is really a thoughtful refinement  
of the DTO (Data Transfer Object) pattern pioneered by EJB -- should  
be immediately obvious: Simply "declare" your data model in OO terms  
with abstract classes using attributes, and let the library build  
your entire business and data tier transparently for you, including  
Remoting and offline proxies. All you need to do is point it at a SQL  
Server, Oracle, Firebird, or Postgres instance (someone wrote a third  
party postgres driver), and it builds, updates, modifies your schema  
automatically.

EJB3 actually takes a similar approach: Now "entity beans" are just  
POJOs (Plain Old Java Objects) that are heavily annotated to tell the  
runtime how to manage it.

- Bob

On Nov 27, 2006, at 5:02 AM, Alan Bourke wrote:

>
> On Fri, 24 Nov 2006 14:45:01 -0500, "Kevin Cully"
>
>> My question is what new tool should I add to my toolbox that will  
>> keep
>> CULLY Technologies rolling along for years to come?
>
> C#
> -- 
>   Alan Bourke
>   [EMAIL PROTECTED]
>
> -- 
> http://www.fastmail.fm - Or how I learned to stop worrying and
>                           love email again
>
>
>
[excessive quoting removed by server]

_______________________________________________
Post Messages to: ProFox@leafe.com
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to