Keynote with Ted Neward
The renaissance in development, according to Neward, is the renaissance of programming languages. The reason the renaissance is here is that the practitioners and the academics are, finally, working towards the same goal. Historically there has been downright hostility between them. This is because the academics and the practitioners are working towards different goals. The academics want to prove a concept while the practitioners wants to get work done. When the practitioners finally get what the academics have done the academics have left the project years ago.
Three forces work together to create the renaissance.
- Virtualization – virtual machines allow programmers to ignore the low-level details and to focus on the real problem. The same is true for language designers.
- Tools – IDEs, analyzers, debuggers, profilers, etc. are used by programmers and language designers use parser generators, AST generators, grammar debuggers, etc.
- Linguistics – Functional languages introduce new ideas, at least to the common programmer. Languages become more diverse to conceptualize different constructs, not everything is an object anymore. We have functions, aspects, meta-object protocols.
Technical challenges of the next generation are for example
- Distribution and services
- User interface expression
There are more languages than ever and it is easier than ever to create your own language.
5(2) aspects you’ve never heard about by Alef Arendsen
Started with a quick introduction to AOP for logging. AOP is about the three Ws: Where?, When?, and What?.
Before, a business service, log a message.
- A pointcut is an expression for finding a number of joinpoints.
- A joinpoint is a place where you can inject an aspect.
- An advice is the code that is injected in the joinpoint.
- An aspect is the combination of a pointcut and an advice.
- Pointcuts should always be singular.
Aspect 1: Mixing Hibernate and JDBC usage
Hibernate uses transactional write-behind which will put the database and the cache out of sync. If I try to access the code via JDBC it will not get the correct data.
This can be solved with an aspect that flushes the cache to the database before a JDBC call is performed.
Before any JDBC operations flush the Hibernate session.
Aspect 2: Specific criteria should be applied based on orthogonal data.
I only want to get data from a specific location when performing a query.
Before a top level business service propagate location and after a top level business service delete location.
The advantage of this approach is again that it applies to both the Hibernate code and the JDBC code. It requires adding views to the database, but that would probably be a good idea anyway.
Dynamic Languages on .Net with J. Hartley
In five years we will look at compilation as the weakest form of unit testing.
Jim started out by saying that Ruby is not just simpler, but better :) Generics in C# is nice but it comes at a tremendous cost of obscuring the actual code.
IronPython supports Decorators to allow adding functionality through attributes. It will be supported in Visual Studio in 2009. An IronPython ScriptingEngine can be embedded into an application with a just a few lines of code.
What makes a programming language productive by Walter Bright
The D language is created by a diverse community of experts. It is a multi-paradigm language that supports c-style, OO, scripting, template metaprogramming, assembler, and functional programming. It is meant to replace C++.
The right way is the easy way. Work harder to do it the wrong way.
D supports simple template syntax. Header files are optional, type inference, foreach loops, reducing the source code with 30 percent compared to C++.
Diversity Challenges in Agile Teams by Aslam Khan
Writing software is cerebral but EQ overrides all IQ.
Leadership is taught to all, but followship is never taught.