I’ve probably used more programming languages down the years than is good for me. And like many other programmers, I mostly use Java nowadays. During my most recent product development, I made a foray back into C in order to do some Ethernet protocol analysis. Some languages are just better than others for such tasks - remember C is a system language so you can use it to dig right into the platform. Java is more constrained because of the JVM boundary. In the end, I integrated the down-to-the-metal C code right back into Java using JNI.
I have to say I was pretty impressed with JNI – it reminded me of the way it used to be important to call assembly language code from languages such as C and Pascal. The latter was generally seen as a good way of achieving performance gains at the expense of added code complexity.
So, what have I learned from using all these languages? One thing: Producing good code is still hard. The Java and C# languages feature very good compilers that block a lot of silly mistakes. This is very useful and probably indispensable given the modern context of the network-centric programming model.
Given this, wherein lies the complexity of modern day programming? I think in large part it is to be found in joining up the major components, e.g., joining the database to the GUI. By this, I mean presenting database-resident information in a GUI and allowing user modifications. This is still pretty awkward though the advent of Derby is helping to improve things a bit (see my article: http://www.informit.com/articles/article.aspx?p=1019130). So, these major components (database, GUI, middleware, etc.) are the tectonic plates of modern programming. The crosscutting concerns are then built on top of them. Getting this right is still a tough proposition.
Maybe it’s no bad thing that programming is still hard to do! It’s a little like the way you’ll probably always need electricians and plumbers. One thing is certain: the path to programming excellence remains thorny – programmers need to be more knowledgeable than ever before. The paradox is that to remain a good programmer, you must acquire new skills not least of which is the ability to learn on an ongoing basis. The path to programming excellence requires a move up the value chain: http://www.informit.com/promotions/promotion.aspx?promo=135903&rl=1.