Among technical factors, C and C++ benefited from their closeness to machine and absence of artificial restrictions on what can be expressed. That allows low-level systems work to be done in these languages and for the full performance of a machine to be delivered to its users. Java benefited from running in its own virtual machine and from coming with a large set of libraries that decrease the time needed for a programmer to become productive. Unix gave a similar boost to C. In contrast, the C++ world suffers from fragmentation of its huge base of libraries, many of which are proprietary and supplied by competing vendors.
For me, the big thing that's going on is that the complexity of the systems that we all build is getting larger and larger every day. Certainly all the hardware that we build this stuff on is being driven by some flavor or derivative of Moore's Law. The software systems we build aren't following a curve anything like that, but they're definitely getting more complex -- and quite quickly. How do you build big, complex systems? There are lots of things that we don't understand really well, and I think that actually a lot of these are beyond the realm of what people would largely think of as the programming language.
I think that the languages themselves, for general applicability, are actually pretty complete. I think the interesting areas are as things get more specialized, and that has two forks: One is specialization in terms of building more libraries, and there are more libraries being built for Java today that anybody could list. The other is language features for particular communities. I actually think of operator overloading that's very much essential for people doing numerical work. People in the business end of things can actually make a reasonably strong argument for features that kind of look a little COBOL-ish, ones that have to do with database queries for example. If you construct database queries using the JDBC API, it's a little clumsy, the same way that constructing arithmetic expressions gets a little clumsy. In some sense to make it un-clumsy the system in a much deeper way has to understand the notation for databases and math.
If you look at the RFE logs for Java, there are really only two features that people ask for that show up with any frequency at all: One is assertions, and there's actually a group working on adding assertions to Java right now. The other is type polymorphism, something like templates, and Java actually has something like a poor man's template system right now in that the type hierarchy has a common root for anything and everything, namely Object, but there's also a group working on doing a proper job of type polymorphism in Java. It turns out to be a really hard problem. One of the reasons I left out type polymorphism in Java, even though I think it's a good idea, is that there's been a lot of argument in academic circles about the right way to do it. You'll find lots of individuals who have very strong opinions, and it's very hard to find anything like a consensus. Other issues are clearer: garbage collection is a good idea; goto is a bad idea.
On the negative side of the 2, nervous energy is a trait often observed in the 2. Because of this, you may be seen as an extremist who is sometimes the zealot in expressing likes and dislikes. Nervous tension can bring the normally easygoing 2 into a state of emotional outrage, which to those around you, may seem so out of character. Indeed, the 2 can sometimes become oversensitive. In some instances, the strength of the 2 can also become its weakness. You may find it hard to decide what to do at times. Twos often struggle against indecisiveness. Making decisions and getting your life in gear, so to speak, may be a challenge. There is a tendency for the many 2s to harbor feelings of uneasiness, and dissatisfaction with accomplishments and personal progress in life. The biggest obstacle and difficulty you may face is that of passivity and a state of apathy and lethargy. The negative 2 can be very pessimistic. When this sets in to any degree, you are able to accomplishes very little. If living on the negative side of the 2, you may lack common sense, and you are quite often unable to distinguish between fantasy and reality.
The Life Path 3 indicates that you entered this plane with a strong sense of creativity and with wonderful communication skills. Achievement for you most likely comes through engaging your ingenious expression. A truly gifted 3 possesses the most exceptional innovative skills, normally in the verbal realm, writing, speaking, acting, or similar endeavors. Here we are apt to find the entertainers of the world, bright, effervescent, sparkling people with very optimistic attitudes. The bright side of this path stresses harmony, beauty and pleasures; of sharing your inventive talents with the world. Capturing your capability in creative self-expression is the highest level of attainment for this life path.
A Life Path 7 person is a peaceful and affectionate soul. But you guard your connection to people carefully. It's easy for you to detect deception and recognize insincere people, and you avoid them. You aren't one to have a wide circle of friends, but once you accept someone as a friend, it's for life. It's as if you must get to know someone a lot better before you allow the wall surrounding you to be penetrated. Chances are you are a very charming and refined individual with great poise and a quick wit. Nonetheless, there is an exclusiveness about you. You probably aren't a very social person. Your reserve is often taken to be aloofness, but actually, it's not that at all. It is merely a cover up for your basic feeling of insecurity. There's no rush, It takes time for you to warm up to new friends. Clubs and organizations hold little interest for you; you are not a joiner.
The Life Path 5 suggests that you entered this plane with a highly progressive mindset, with the attitude and skills to make the world a better place. The key word for your Life Path is freedom. In the pursuit of freedom, you are naturally versatile, adventurous, and advanced in your thinking. You are one of those people who is always striving to find answers to the many questions that life poses. The byword for the positive Life Path 5 is constant change and improvement. You want to be totally unrestrained, as this is the number most often associated with the productive use of freedom.