• 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!

What is the next programming language you want to learn ?

I only know 2 of the above :) well, actually 1.5 :)
But I would rather learn S-Plus :) than any of the above. well, maybe C# :)
 
So you know how to program using C++/Java/C#/matlab/Perl/Python/VBA/etc....
what will be the next language you want to learn and why ?

Why should we learn a new programming language unless it is totally necessary? We are not studying to be software engineers or programmers. It happens that knowing a computer language helps greatly in get our job done but, as Prof. Raynes says, we should be studying how to do deals...
 
Actually I'd finish off learning C++ rather than try to gain a new language in the time you have left to study.
> 80% of the people we see coming off masters programmes with "C++" on their CVs are not able to demonstrate basic competence in the language.

In the Guide, we are big on the fact that your CV is easily the best single predictor of what you are going to be asked at interview. It is better to get 70% at interview questions in C++, than 50% at C++ and hope they ask you something about Python.
 
>80% is pretty much
is the info correct?

c++ is not a simple language if to program in a civilized manner, but basic concepts...
sure?
 
It does of course depend upon what I mean by "competent". It is not necessary to be an ace C++ hacker, but 60% of quant work is fighting computers, and C++ is the dominant languages for good quant jobs.

To an extent any definition I use is correct because it is me as a pimp who decides whether to stake my reputation by saying you are good. Other firms have other standards.

I am a student of the questions asked by banks, and yes before you ask my Wilmott CQF students get specific lectures optimised to this end.

You must know about the classical pointer errors, without much conscious thought you should be able to think of 5 types.

You should not look confused at **

You should be able to decode the following declaration
[FONT=&quot]double *(*(*Ex1)(double const*))[42];

Similarly you should be able to declare a vector of lists in STL

You should be able to code the singleton pattern, know why it is used.

You should know about reference counting.

Virtual functions and polymorphism to at least a basic level.

Know that if a classical C style cast is given to you in an interview code to debug, that >75% the error is in that line.

You of course know the full range of modern C++ casts, and would rather watch Fox News than use C style ones.

You should be able to handle exceptions, and at least have some idea of writing exception safe code.




[/FONT]
 
C# brings comfort

but quetly steals some freedom

I was really angry when a program I have written didn't run on my boss' laptop
just because he didn't have a .net framework installed..

I fear the day when I will have to deploy some application written using MSFT technologies on a computer that does not have an internet connection and firewall properties set as Mr. Gates says:)...
 
I was really angry when a program I have written didn't run on my boss' laptop just because he didn't have a .net framework installed..
At least you found out why it didn't work. There are so many addin, component, drivers, different versions that drive people absolutely nut. It works perfectly on your computer because you tailor your code to work with your computer environment in one way or another. When you bring it to another computer, just pray :)
In our work, we don't have the luxury of a IT shop to fully test our products on different platforms. The traders couldn't care less when you tell them about a missing .NET component.

By the way, when the amount of code is similar in C# and VB.NET, what would be the reasons to choose one over the other ?
 
C# is much better for me

I started my prog practice at the age of ~15 with plenty of Java programming so Java-like C# syntax is much more comfortable for me personally.

C# fairly resembles C++ in syntax, also.
I am not a well experienced VB programmer, however..
 
I was really angry when a program I have written didn't run on my boss' laptop
just because he didn't have a .net framework installed..

You wouldn't have these problems if you developed an MSI [Windows Installer] package and a bootstrap installer exe for your program, which could have an installer pre-condition to check the requirements of the system. Of course, few builds an MSI package for deploying an application(s). It is beneficial if your IT department has a way to "push" updates to machines.

However, we live in the ClickOnce [.NET framework 2.0+] world, where you could just publish the stuff to a web site and have preconditions which can check a whole bunch of requirements. It also solves the headache of going to each users machine and updating your application, cause the process becomes seemless.

A reply of whether to use VB.NET or C#.NET. You could use any language that you find comfortable. C# is considered more of a "power" language because it can have unmanaged code and has more of the C++/Java style syntax. On the other hand, I would feel upset switching from VB6 to VB.NET. Microsoft changed and introduced a whole bunch of new concepts that are radical to the language eg. Operator Overloading, Namespaces, Multithreading, Array Indexing, etc.

Personally, I feel the jump from C++/Java to C# isn't all that big compared to the jump from VB6 to VB.NET.
 
**Personally**, some people on the street don't really work with C++.

They work with a language like C which has the ability to use encapsulation [classes] and the only object-oreinted technique of polymorphism. Most Quants and PhDs (I have tremendous respect for them) are not software engineers by training. They have taken introduction CompSci courses and are trying to build complex applications which need to behave like "soft" real-time systems. It isn't an easy task!!

You find memory leaks in programs, methods with 50+ lines of code, use of C style pointers, no use of templates, header classes including other class definitions rather than just forward declaring classes, etc. The only design patterns that one might know are the singleton and the strategy pattern. Rarely do people use libraries like the Boost libraries or ACE libraries to ease development. As a result, a lot of time is spent on things which could have been avoided by using relatively newer programming languages like Java or.NET. The argument that I receive is that C++ is faster and the other languages are slow. I shrug my shoulders and think to myself, I am glad the concern for speed hasn't been high enough to warrant resorting to Assembly.

I don't mean to flame anyone or upset anybody in particular at all. This has just been my experience. This is not to say that everyone is like this, but the basis is to make money by using building, testing and using the model(s) ... so I guess I can understand.

You have to be forgiving, but you should be a catalyst and introduce "good" change.
 
You are right

Applications should be built using high-level tools and should use well-optimized C/C++ libraries for math. computations and complicated modeling that are taking 95% of processor time.
And quants are people who know WHAT to implement (in detail) in these libraries and HOW to write fast and reliable code quickly and theoretically correct.

We are speaking about languages because life of a quant consists of tough programming and finance, and finance is not discussed in this thread;)
 
We are fortunate that there is not a lot of old code base to start with so we can develop things in newer languages to take advantage of the speed/power.
Most of the tools are off-the-shelf and custom built VBA so whenever possible we take a shot at .NET. The goal is not doing everything perfectly but to do something fast that makes money. If we leave money on the table doing so, so be it. Trying to do everything perfectly and we will miss the chance to make money altogether.

Anyway, I'm playing a bit with VB.NET last night and it looks really similar like C++ so I think people with C++ background would find it easy to move to C#, .NET

If you guys have any good example code that does something interesting, feel free to share.
 
F# does indeed show promise, but only one bank I know is using it for production work.

To me it nicely shows why I'm cynical about Java and C# for quant work.
Although they have good points, all three languages are very similar, which means to me that they are unlikely to offer the sort of quantum leap in utility that justifies a wholesale change of strategic language.

F# is different enough to offer some profound advantages, though I am not yet ready to say that it is worth the effort.
It does however look promising, although MS are seen by some as dumb and evil, having their support for a next generation language brings a lot of benefits, like a top class development environment and a critical mass of users. Even MS failed projects like J# still have more users than some products that think themselves successful.

I would like to clarify my position on C++
Although I am always ready to have an argument about the merits of different development tools and methods, I am writing here in my capacity as a headhunter to an audience most of whom are pretty close to looking for a job. Also at Baruch you get taught C++, which is by no means universal.

I have an analogy with dating....
Which distribution of views by the opposite sex of you is better ?

50% think you are a failed genetic experiment.
40% think you have a nice personality for a friend
10% think you are sex on legs.
or
70% think you are a mutant
10% don't mind talking to you
20% want you now

By focusing on C++, rather than loading up a bit of SQL, Perl, C#. Java etc you are increasing the set of jobs that will not even consider you.
But since in the time left to you, it is impossible to get good at these, it means you upgrade from "totally failing" to get a job to "just missing".

Rarely is that improvement of any value.
Putting C# on your CV might get you an interview, if backed by C++, but if you flounder in the interview questions it is a waste.
But the same effort plishing your C++ will increase the chance of getting that job, and they will usually reason that someone
who is shit hot at C++ can learn C#

Rarely will a manager think "he is mediocre at C++ and mediocre at C# therefore I want him".
 
ok

C#/.Net architecture (it is called "a framework") is 1-level-higher than that of C++, and is made for cross-platform applications, web applications, distributed applications that base on high-level objects that are well integrated into Microsoft plarforms, operating systems and DBMS-s. It's for professional software development that is mostly led by software development companies and appropriate departments inside corporations.
As for me, quants should stress on math. meaning of what they code, its performance and usability. Things coded by quants cannot be compared to the systems C#/.Net project is mostly aimed at. Financial applications made by quants are significantly less complicated in structure and business logics, though sometimes much stronger theoretically and mathematically.

My choice is some scripting language (Python for example) as a prototyping tool and C++ as a language for implementation of a final optimized algorithm (library or unit).

As for the subject of the thread ;) - S/S+ or Arthur Whitney's q/kdb+ is my actual interest. Maybe, someone has used them on practice, or does have some opinion on them?
 
However, we live in the ClickOnce [.NET framework 2.0+] world, where you could just publish the stuff to a web site and have preconditions which can check a whole bunch of requirements. It also solves the headache of going to each users machine and updating your application, cause the process becomes seemless.
You are right. I played a bit with VB.NET and ClickOnce yesterday and I think ClickOnce is a great thing for deployment. It saves the developers the nightmare of making sure client machines has all the required components. I really like the auto updating thing.
Personally, I feel the jump from C++/Java to C# isn't all that big compared to the jump from VB6 to VB.NET.
Absolutely. I feel for a VB6 user, the jump to VB.NET is quite big. VB6 is very much an Excel based language with limited form features while VB.NET is built around form. I'm really impress with all the form controls .NET has.
I'm most familiar with C++ so the OOP stuff in VB.NET does not bother me but after doing VBA a bit, I found myself thinking in term of Workbook, Sheet in term of Click, Button, etc.
And when I try to find how to use VB.NET with Excel just as I did VBA, I found that there are 2,3 different ways to go.
There is definitely a learning curve to go from vba to .net. VBA makes it so easy for any excel user to code. VB.NET is a full feature programming language and it requires learning curve just as you would C++, Java, etc

The nice thing is that C# and VB.NET syntax are almost identical. I think this is a great benefit for .NET developers.
 
Back
Top