• C++ Programming for Financial Engineering
    Highly recommended by thousands of MFE students. Covers essential C++ topics with applications to financial engineering. Learn more Join!
    Python for Finance with Intro to Data Science
    Gain practical understanding of Python to read, understand, and write professional Python code for your first day on the job. Learn more Join!
    An Intuition-Based Options Primer for FE
    Ideal for entry level positions interviews and graduate studies, specializing in options trading arbitrage and options valuation models. Learn more Join!

Dominic to Java developers: Quit NOW

I think that you are probably wrong on this one. Java is an incredibly robust and versatile platform for development. The technologies are changing rapidly to the new environment with Spring, Hibernate, Struts. Companies like Oracle and Google are investing huge sums of money in open-source development. GWT is a superb library and getting inceasingly popular. Most importantly, everything is FREE. You do not have a company like Microsoft trying to milk the Windows O/S or .NET platform for all it is worth.
The FREE factor and the rapidly changing open-source technologies linked to Java will probably result in Java becoming the dominant language of devclopment in the decades to come.
I can hardly see any performance difference between C++ and Java. C++ is much more difficult to code and maintain.

This is not very correct Joe. Java is "everything in one language" meaning that it provides all the possibilities out of the box-database connection, web application development, has good libraries available but the most harmful drawback is that it gives little hope for language integration. There are rich libraries floating around today which can fit into your needs but unlike other languages Java makes this task problematic. You can get C/C++ ATLs for free as well so to be free is not a huge advantage for Java.
 
..but the most harmful drawback is that it gives little hope for language integration. There are rich libraries floating around today which can fit into your needs but unlike other languages Java makes this task problematic.

How so? I don't know what you mean.
 
How so? I don't know what you mean.

As Joe mentioned Java's strengths can go far away than platform independence and cleans up many unsavory syntactical aspects of C++. It provides developers with a large number of predefined packages that contain various type definitions which can be found and deployed easily. With these types, Java programmers are able to build “100% Pure Java” applications complete with database connectivity, messaging support, web-enabled front ends, and a rich desktop user interface and many other services. One potential problem with this language is that using Java typically means that you must use Java front to back during the development cycle. In effect, it is highly problematic to use other unmanaged codes in Java, as this goes against the grain of Java’s primary goal—a single programming language for every need. In reality, however, there are millions of lines of existing code out there in the
world that would ideally like to commingle with newer Java code. Sadly, Java makes this task problematic. While Java does provide a limited ability to access non-Java APIs, there is little support for true cross-language integration. That's what I meant
 
As Joe mentioned Java's strengths can go far away than platform independence and cleans up many unsavory syntactical aspects of C++. It provides developers with a large number of predefined packages that contain various type definitions which can be found and deployed easily. With these types, Java programmers are able to build “100% Pure Java” applications complete with database connectivity, messaging support, web-enabled front ends, and a rich desktop user interface and many other services. One potential problem with this language is that using Java typically means that you must use Java front to back during the development cycle. In effect, it is highly problematic to use other unmanaged codes in Java, as this goes against the grain of Java’s primary goal—a single programming language for every need. In reality, however, there are millions of lines of existing code out there in the
world that would ideally like to commingle with newer Java code. Sadly, Java makes this task problematic. While Java does provide a limited ability to access non-Java APIs, there is little support for true cross-language integration. That's what I meant
That is not only java's problem. Almost all languages have this sort of issue. They solve them using a lot of different mechanisms. Java might have issues but what you said is as much a java problem as it is any other programming language problem.
 
That is not only java's problem. Almost all languages have this sort of issue. They solve them using a lot of different mechanisms. Java might have issues but what you said is as much a java problem as it is any other programming language problem.

.NET solution over COM ugly cross language integration ;) This leaves Java amongst those languages which cannot survive this kind of problems while others escape - C#, C++, Python based Boo, F# in functionals, VB.NET.
 
.NET solution over COM ugly cross language integration ;) This leaves Java amongst those languages which cannot survive this kind of problems while others escape - C#, C++, Python based Boo, F# in functionals, VB.NET.
These are all .Net languages. They share a common base. There is no cross language integration whatsoever.

From what you say, I can claim the same easy of integration between Java, Scala, Clojure, Jython and any other language that runs on the JVM. Oh, and I can do this sort of integration in multiple Operating Systems. With .Net, I'm royally screwed.
 
These are all .Net languages. They share a common base. There is no cross language integration whatsoever.

From what you say, I can claim the same easy of integration between Java, Scala, Clojure, Jython and any other language that runs on the JVM. Oh, and I can do this sort of integration in multiple Operating Systems. With .Net, I'm royally screwed.

You mean Java platform. Right. I can bet we can find million times more C++ libraries out there which can be reused by C/VB/Python/etc. and cannot be used by Java via common object model platform. For example if you define an array according to the rules COM you end up with reusable binary blob which can be reused by dropping down to low level API calls via SAFEARRAY which although requires dozens of lines of code in best case but Java in most cases would have no clue what to do with it. The problem you mentioned with "other languages have the same problem" is that native codes can hardly (if ever) be understood by other languages. For instance, if C++ developer made a native C++ array, VB6 developer simply cannot do anything to it. As for Scala, Clojure, Jython, I don't think there are wide variety of opportunity of free (or not) libraries made in these languages.
 
You mean Java platform. Right. I can bet we can find million times more C++ libraries out there which can be reused by C/VB/Python/etc. and cannot be used by Java via common object model platform. For example if you define an array according to the rules COM you end up with reusable binary blob which can be reused by dropping down to low level API calls via SAFEARRAY which although requires dozens of lines of code in best case but Java in most cases would have no clue what to do with it. The problem you mentioned with "other languages have the same problem" is that native codes can hardly (if ever) be understood by other languages. For instance, if C++ developer made a native C++ array, VB6 developer simply cannot do anything to it. As for Scala, Clojure, Jython, I don't think there are wide variety of opportunity of free (or not) libraries made in these languages.

If I were you I wouldn't bet. Reusable libraries on the Windows platform are usually not free. Java has a way to deal with foreign libraries and it comes to writing wrappers. That's the same with C and C++. Even if you want to call C APIs in C++ you have to jump some hoops. It's never that straightforward.

Also, I wouldn't include Python on the same sentence. Again there are mechanisms to achieve integration between the different languages. The best tool I have found to integrate things is SWIG but it has shortcomings.

COM is a disaster and it doesn't work on UNIX so I wouldn't even bring it into the conversation.
 
You also need to look at the cost of deployment. If you are doing development in .NET and then deploying to 10,000 users, you must install .NET on all 10,000 computers and pay license fees every year to Microsoft both for .NET development platform as well as .NET installation on all 10,000 user computers.
With Java, development as well as deployment on all computers is completely FREE. Development and maintenance is much easier, large number of skilled developers are available, and performance is actually as good as native C++ code and much better than the code which runs on .NET platform. Also, the application can be run on many different OS (Windows, Unix, Linux, etc.) with very minor modifications.
 
You don't like windows. That's why COM is a disaster and everybody agrees. Same can be said about JVM. Can you achieve cross language integration straight away with this platform? No. Nor you can do with COM but if I mentioned .NET which is capable of cross language inheritance and exception handling you would discard the choice because of your attitude to windows. But the thing is that you cannot name a platform which even simplifies reusing codes made on multiple languages even on different operating systems. That's quite a future story. As for calling C API in C++ I believe it is much safer and straightforward and I have done that many times than calling Jython in Scala(although I haven't tried one).

If I were you I wouldn't bet. Reusable libraries on the Windows platform are usually not free.
That's completely right and I mentioned it as a disadvantage but the number of existing libraries is to be bet on.

Java has a way to deal with foreign libraries and it comes to writing wrappers.
This is right as well but can you name the ease with which you can achieve that effect? Have you reused non JVM aware code in Java?
I won't believe it is easier than as you mentioned dropping down to C API in C++.
 
You don't like windows. That's why COM is a disaster and everybody agrees. Same can be said about JVM. Can you achieve cross language integration straight away with this platform? No. Nor you can do with COM but if I mentioned .NET which is capable of cross language inheritance and exception handling you would discard the choice because of your attitude to windows. But the thing is that you cannot name a platform which even simplifies reusing codes made on multiple languages even on different operating systems. That's quite a future story. As for calling C API in C++ I believe it is much safer and straightforward and I have done that many times than calling Jython in Scala(although I haven't tried one).

Calling C API in C++ is harder than calling Jython in Scala. JVM language behave sort of the same way as .Net languages. Calling APIs between .Net languages is very straightforward.

Now, Calling C API in C++ safer? That's a pipe dream!!
 
Well I cannot comment on using JVM aware languages since I haven't tried them. As for C/C++, you made a correct note it cannot be regarded as safe but in not that limited scenarios one can use C algorithm in C++ with no problem. BTW, I was talking about the ease of reuse of non JVM aware language code in Java.
 
Well I cannot comment on using JVM aware languages since I haven't tried them. As for C/C++, you made a correct note it cannot be regarded as safe but in not that limited scenarios one can use C algorithm in C++ with no problem.
Algorithms? Sure. I reuses the same algorithms in any other language with some tweaking. Using libraries could be a little more complicated.
BTW, I was talking about the ease of reuse of non JVM aware language code in Java.
Again, you can write wrappers and make them work with Java. My point is that what you say about the JVM applies in almost exactly the same way to .NET. So, don't think that .NET is that much better.
 
One issue that has not gone away in the last 50 years (has anyone read Mythical Man Month by Fred Brooks) is the complexity of writing maintainable s/w systems. Sure, you have OOP and GUI and all that stuff but s/w design has imo been neglected because most people have not learned it. In the past you had 1 chance to get it right because if you made a mistake you had to wait 2 days before your punch cards were put into the card reader.

With instant response on a laptop, you are in constant prototyping mode; It's like building your own brick house without having access to the architect's drawing.

One of the features of the QN C++ course is that I have included some UML notation that shows how parts of the software developed, especially in Module VI.
 
Learn C before graduating
At the risk of promoting QN course too much, I deliberately created a complete module on C. I think it is vital.

There are still lots of industries that use C.
 
Learn C before graduating
At the risk of promoting QN course too much, I deliberately created a complete module on C. I think it is vital.

There are still lots of industries that use C.

I just started reading your book: C++ for Financial Engineering.

'Will give you a feedback when I finish it :)
 
Back
Top