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

Best Programming languages

C is a terrible first language. Admittedly better than C++, but still awful. Start with Python. Powerful yet understandable and intuitive.


Depends on the perspective. There are many kinds of progammers out there (e.g. HTML). The missing issue here is that none of us here has defined the profile of a programmer exactly, so that the discussion tends to degenerate into a rant and faction fighting :)

start with a language that is going to make you productive.

yes and no.

Start with a language that contains the essential difficulties that you will meet in future life.
If you learn judo, it takes ~ 1 year before you can anything useful. Why should progamming be any different? And just having a degree in maths means nothing in this context.
 
Depends on the perspective. There are many kinds of progammers out there (e.g. HTML). The missing issue here is that none of us here has defined the profile of a programmer exactly, so that the discussion tends to degenerate into a rant and faction fighting :)



yes and no.

Start with a language that contains the essential difficulties that you will meet in future life.
If you learn judo, it takes ~ 1 year before you can anything useful. Why should progamming be any different? And just having a degree in maths means nothing in this context.

You display a fundamental misunderstanding of how people learn.

Learning new things is like erecting a scaffolding, you build your first layer and then build on top, adding more elaborate features as you go along.

You first need a base. In programming, that is understanding data types, loops, logical statements, functions etc. To write a simple loop in C requires the definition of a main function and the inclusion of a header file. This raises more questions than it answers to a beginning programmer. It also distracts from the real task, which is writing a loop.

In Python you can write:

counter = 0
while counter < 100:
print counter
counter = counter + 1

that is your first while loop, which is easy to understand and free from unnecessary syntax clutter.

Once you know the basics, then you can move onto more complicated things, like pointers and header files etc. These are things that C basically forces you to have an appreciation of from day 0, which is completely unnecessary and just confuses beginning programmers.

Once you have understood the basics, you can build your next layer of scaffolding. That may or may not be C, but C is certainly not the first layer. Similarly, you should learn OOP elsewhere before moving to C++. Python is also a good choice.

Finally, since programming is about DOING and practicing DOING things, you should start with a language that allows you to do the most with the least effort. That language is certainly not C or C++. The learning process should take someone as quickly as possible to the point where they can start doing something that is non-trivial. In Python that can happen in a single day.

In C it's not clear that you can do some of the string manipulation or file IO that Python can do without serious expertise. This is also why people are moving to Python from C/C++.

When you consider that people are migrating from Python to C/C++ anyway, and that the natural way to learn programming would be Python -> C/C++ then it clearly makes utter sense that one should start with learning Python. Your dogmatic love of C/C++ really taints your advice. C/C++ has its uses, but using them as a first programming language is not one of them.
 
The learning process should take someone as quickly as possible to the point where they can start doing something that is non-trivial. In Python that can happen in a single day.

Gen Y babble. :D

I would like to become a surgeon in one day. What's the best ploy, Barny?
 
I would like to become a surgeon in one day. What's the best ploy, Barny?
Bad analogy. Python would be like a machine that can automatically do surgery in the 20% of standard cases that come up 80% of the time. Learning Python would then be analogous to learning how to use that machine.

It's just that surgery has not evolved past the ASM/C stage yet.
 
Bad analogy. Python would be like a machine that can automatically do surgery in the 20% of standard cases that come up 80% of the time. Learning Python would then be analogous to learning how to use that machine.

It's just that surgery has not evolved past the ASM/C stage yet.
No, no; I want to become a surgeon in 1 day.
 
Learning new things is like erecting a scaffolding, you build your first layer and then build on top, adding more elaborate features as you go along.

I agree and it's the same in math, the same in chess. We start with the simple things, build proficiency in them, then look at more elaborate, more nuanced, more baroque things later. We don't start teaching real analysis until we already know basic calculus -- we could but we would lose all feel and motivation for what is going on and get caught in pedantic detail whose function we would have no understanding of.

Start with simple things with easy-to-learn languages like Python or Ruby, then move onto C/C++ (if needed).
 
We don't start teaching real analysis until we already know basic calculus -- we could but we would lose all feel and motivation for what is going on and get caught in pedantic detail whose function we would have no understanding of.

At some stage you get very bored with d(u/v) /dx and you need to get to Cauchy sequences asap. School maths is almost useful when you learn something like Rudin.

Before the era of easily accessible s/w and h/w people learned computing by writing assembly on Ataris and other exotic 64K machines.
 
An answer for general developers but interesting nonetheless.

Being good at code is always in demand, and it is far more important to be effective at reading code. To practice, you can take a library that does something you understand (say convert a csv into a data-structure) then strip out the comments and trace it. Extra points goes to the one that can do this under some kind of source obfuscation. I've met too many programmers who can't read code at a serious level, and I've met programmers that rely on superfluous comment; however, there is nothing except hope and trust that ensure the comment and the code are in parity.

No matter what, JavaScript is going to be the next C for the web. Everyone is going to know it. Due to its predominance, I wager there is going to be a boom in the programming language market searching for nicer languages to compile to JavaScript. See: http://en.wikipedia.org/wiki/Cof...

I further wager that the whole difference between asynchronous programming and multi-threaded programming is going to be wrapped into a neat present with a nice bow-tie. Working with node.js (or twisted or event machine) will give you a leg up on new design skills as more businesses rely on node.js. Learn Asynchronous design.

NoSQL is just getting started, and I wager there is going to be evolution in who wins the developer market. I wager CouchDB (http://blog.mathgladiator.com/20...), because I'm a betting man. I also wager someone is going to write (I've thought about it) a SQL for NoSQL. Once this is invented, I wager Oracle is going to buy that company or sue it into oblivion. Learn MapReduce.

Java/.NET wll be good for a long time, and it is the new COBOL. There are a couple of problems that may unseat them: Multiple cores with good parallelization, good asynchronous primitives, and stronger type systems (well, for the markets that need that type of stuff anyway). At least know either Java or .NET.

Java/. NET are always going to be ugly to someone, and that someone may invent something better (i.e. Ruby). It's important to jump in some bandwagons, so find something esoteric and learn it as a hobby, It could be big some day. You want to help make it big? Then build a business using it, and you will put your ass in the fire when things go wrong.

UX+Dev+Marketing is going to be key in the coming years, and I would keep abreast with those markets as you either may need it someday or you may want to sell them something.

Databases as we know them today are going to die... over the next ten years, so I would pick a NoSQL platform and start playing with the Idoms now. My picks are: CouchDB, Riak, Redis, and Cassandra.

Source: http://www.quora.com/Programming-La...rogramming-skills-for-2011-and-beyond-and-why
 
This is an interesting topic. Both have a point. I think for people like me who doesn't have any programming experience, I would like to start from python(learning it now, processing smoothly) because I actually had a hard time understanding C which is not that straightforward to me. But I am a newbie, so ignore my argument. And since C/C++ is listed as a pre-requisite by many Quant finance programs, I would like to pick up it maybe a little bit later after I got the nitty gritty of coding.
 
This is an interesting topic. Both have a point. I think for people like me who doesn't have any programming experience, I would like to start from python(learning it now, processing smoothly) because I actually had a hard time understanding C which is not that straightforward to me. But I am a newbie, so ignore my argument. And since C/C++ is listed as a pre-requisite by many Quant finance programs, I would like to pick up it maybe a little bit later after I got the nitty gritty of coding.


This is a major problem in the coding industry. People want to become experts too soon. The way you become an expert at programming is by practicing the art of programming and programming design, and pushing the boundaries of your implementations to include new things you learn over time in an efficient way.

Instead, what happens is that people read a book on C++ and learn the syntax of the language. They then say the 'know' C++ or are a C++ expert. Then they do things like modify a loop counter inside a loop (just one example) and wonder why their program has terrible performance and is impossible to read/debug. They have no idea what gdb is or what x86 assembly looks like. Yet they call themselves "programmers". The only thing these people are is a danger to an organisation that relies on their code.

Learn how to code first. Do that in a language which removes barriers to entry, makes it easy to write readable code and is powerful so that you actually use it in real projects. Once you have learnt the principles of coding, you can move to any language you like because the only thing that changes is syntax. Except of course when you have functional languages vs procedural vs OO etc. Which is why you should learn an OO language and a functional one. I recommend Python and Scheme respectively. At some point in your life you should certainly learn C/C++, but they should not be your first languages.
 
Which is why you should learn an OO language and a functional one. I recommend Python and Scheme respectively. At some point in your life you should certainly learn C/C++, but they should not be your first languages.
I learned Scheme as my first language, and I'd recommend against it. You really don't appreciate it until you've used a lower level language. It just seems pointless.
 
I do not recommend Scheme as a first language. Maybe after 1-2 years of writing procedural code.
 
Start with a language that contains the essential difficulties that you will meet in future life.
The orinal poster doesn't want to be a programmer but a quant. I guess he/she wants to do analysis using code and implement his/her own algorithms for this. This was the original question
If you wanted to start with one programming language for quants which one is best Perl, C, Matlab, Python, SQL, UNIX?

In today's world C and C++ are horrible at this. That's also why big financial institutions are moving towards programming languages that make their work force more productive. Python is a great tool to achieve this goal.
 
Before the era of easily accessible s/w and h/w people learned computing by writing assembly on Ataris and other exotic 64K machines.

Exactly, I started with Basic first on a Commodore Pet computer and then on Apple II+. But I really started developing when I began programming in machine language (6502) on the Apple. I wrote a video game with speech back in 1984 (it was in Basic with a lot of machine language subroutines); I'm not sure if that predated speech in commercial video games.

Picking up C was very easy after that.
 
The orinal poster doesn't want to be a programmer but a quant.

I think it depends on the definition of "quant". If things like execution speed and reusability are not a priority then yes something like MATLAB makes more sense.

Otherwise, I think you will need a C based language asap.
 
I think it depends on the definition of "quant". If things like execution speed and reusability are not a priority then yes something like MATLAB makes more sense.

Otherwise, I think you will need a C based language asap.

execution speed? Unless the code is profiled first there is no point on talking about execution speed... Regarding re-usability, C/C++ don't have a good track record. I'm lying, C has a sort of ok track record, C++ is a nightmare.

Again, learn a language that is going to make you really productive. Then, you can pick bits and pieces of other languages you might need to use somewhere else.
 
Exactly, I started with Basic first on a Commodore Pet computer and then on Apple II+. But I really started developing when I began programming in machine language (6502) on the Apple. I wrote a video game with speech back in 1984 (it was in Basic with a lot of machine language subroutines); I'm not sure if that predated speech in commercial video games.

Picking up C was very easy after that.

And how many people can create the C++ Monte Carlo engine that you created on Wilmott qfcl projects?

For this kind of project, deep background is needed. Cheers.
http://www.wilmott.com/messageview.cfm?catid=44&threadid=86850
 
The orinal poster doesn't want to be a programmer but a quant. I guess he/she wants to do analysis using code and implement his/her own algorithms for this. This was the original question


In today's world C and C++ are horrible at this. That's also why big financial institutions are moving towards programming languages that make their work force more productive. Python is a great tool to achieve this goal.

Can you be more specific on why C++ is not good for productivity? Some issues

1. OOP and GP and FP
2. libraries
3. Some example to prove or disprove your thesis (avoids rant that this thread is becoming).

Granted, 90's C++ was less flexible but now we have C++ 11 and Boost, for example.
Python would not be suitable for PDE, MC, algo or HFT IMO.
 
Back
Top