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.