Serving the Quantitative Finance Community

 
User avatar
billyx524
Topic Author
Posts: 32
Joined: February 12th, 2016, 4:48 pm

Projects to Improve Programming Skills

February 14th, 2016, 10:28 pm

Hi,I have been rejected by a few quant places lately because of weakness in my programming skills. So I am looking for projects to work on myself as a side hobby to improve on this area. Does anyone have any recommendations of where to look?Thanks
 
User avatar
Alan
Posts: 2958
Joined: December 19th, 2001, 4:01 am
Location: California
Contact:

Projects to Improve Programming Skills

February 14th, 2016, 11:08 pm

Forum member Daniel Duffy teaches this online class for C/C++, offered in association with the Baruch College MFE program.Something to consider. I'm sure there are many accompanying projects.You should also browse the Numerical Methods forum.
Last edited by Alan on February 14th, 2016, 11:00 pm, edited 1 time in total.
 
User avatar
wannabe2
Posts: 0
Joined: July 5th, 2013, 7:09 pm

Projects to Improve Programming Skills

February 15th, 2016, 1:12 am

I highly doubt that attending an online class can improve programming skills by much.As with any skill you want to improve/master -- practice! ( http://www.joeydevilla.com/wordpress/wp ... actice.jpg )Highly recommended:HackerRank: https://hackerrank.com/LeetCode: https://leetcode.com/
Last edited by wannabe2 on February 14th, 2016, 11:00 pm, edited 1 time in total.
 
User avatar
Cuchulainn
Posts: 20254
Joined: July 16th, 2004, 7:38 am
Location: 20, 000

Projects to Improve Programming Skills

February 16th, 2016, 11:52 am

QuoteOriginally posted by: billyx524Hi,I have been rejected by a few quant places lately because of weakness in my programming skills. So I am looking for projects to work on myself as a side hobby to improve on this area. Does anyone have any recommendations of where to look?ThanksWhich programming language did they ask about? There's a related point; a number of colleges (e.g. Baruch, CMU) will only accept students if they have passed a certified C++ course like Quantnet/Baruch. And you do learn to program because TAs grade your work on a course that thousands of students (from various areas) have done with me down the years.So, you will be competing with graduates with C++ know-now.// like becoming a black belt in judo, you have to beat 10 brown belts :)
Last edited by Cuchulainn on February 15th, 2016, 11:00 pm, edited 1 time in total.
 
User avatar
billyx524
Topic Author
Posts: 32
Joined: February 12th, 2016, 4:48 pm

Projects to Improve Programming Skills

February 18th, 2016, 12:41 am

mostly c++. Some banks have more programming skill requirements than others for quants. At some places, programming is handed over to IT, others are done entirely quants
 
User avatar
Cuchulainn
Posts: 20254
Joined: July 16th, 2004, 7:38 am
Location: 20, 000

Projects to Improve Programming Skills

February 18th, 2016, 11:29 am

Maybe Python and/or C# which are popular as well. The learning curve is not as steep as that of C++11 or even C++03. Some evidence suggests that C++ legacy code is wrapped in Python/C# or not used in cases where these languages are more suitable.
Last edited by Cuchulainn on February 17th, 2016, 11:00 pm, edited 1 time in total.
 
User avatar
liam
Posts: 4
Joined: November 16th, 2004, 11:51 am

Projects to Improve Programming Skills

February 20th, 2016, 2:48 pm

Certainly in data science, which is what some people call "quant" these days, R and Python are popular. In finance they probably are too, as is Matlab. Certainly in my experience it is 'whatever is most convenient' and if a spreadsheet and VBA will do, then that is what you produce.Going back to the original question, I suspect the OP is being criticised by financial firms on their algorithm design rather than knowledge of a language. I know some investment houses require passing C++ tests, but if several have said the same thing then they probably need to be able to design algorithms easily.Generally I would say to the OP to start off by simulating any process they learnt in mechanics, physics etc. Simulate anything in real life - e.g. if you are at the doctor you might think 'how can I simulate a queuing system that attempts to estimate patient throughput?'. Think about how you would use such a model to make money if, for instance, you bet on the value of the throughput, or another quantity dependent on that etc etc. You will find these examples everywhere in life. Also hackathons would help aswell as you will be put through your paces and cover areas of languages and libraries courses don't. It doesn't all have to be finance related, as long as it gets you to think like a programmer.I remember programming courses in TCD. One course on simulation the lecturer wrote the solutions on the board. That was 40% of the course for successfully typing it in and debugging. And most courses scratch the surface anyway. A classic was when a friend was telling me about his uncle trying a FÁS course in Java, where his cousin kept saying "by the time he starts the course, the content will be out of date". My guess is that the course Daniel offers (if memory serves me he is Cuchullainn) is probably an exception to this and there's gotta be other courses out there that are designed in a way that is actually useful. I also loved Mark Joshi's book on design patterns. You might never use C++, never use the STL library or may never even use any of the solutions in the book as a quant, but his general approach is the business oriented one programmers need. While clever tricks to make your model run in milliseconds are useful for RMs or traders, I find that wannabee quants sometimes forget to also cut down on coding time, and his approach shows how to build code that can easily be adapted to changes in specifications. One final thing, although this is more of a tip to teens/college students beginning is to start off with something like Python, then work on C++, as Cuchulainn says. A few years back I gave a brief course to kids in Scratch. It reminded me of doing VB where by the time I tackled C and C++ my head was well above water so I was only learning to code a new language and OO, not learning algorithms aswell.Scratch is similar - for instance one thing I taught the kids (and which many got) was how the objects in the program can communicate with each other. This is very, very useful when you tackle serious programming languages and work as a quant and, even if just for a bit of laugh it is worth looking at Scratch.
Last edited by liam on February 19th, 2016, 11:00 pm, edited 1 time in total.
 
User avatar
Cuchulainn
Posts: 20254
Joined: July 16th, 2004, 7:38 am
Location: 20, 000

Projects to Improve Programming Skills

February 21st, 2016, 10:41 am

QuoteOne course on simulation the lecturer wrote the solutions on the board. That was 40% of the course for successfully typing it in and debugging. And most courses scratch the surface anyway. I am pretty sure why these courses are set up the way they are and what the consequences are e.g. trainers need to be trained themselves (and I don't care if they have a PhD in computational geometry or group theory:)), they probably don't put in the legwork and the end result is a glorified code monkey to be honest.What is happening is that students have to reverse engineer the solution back to the problem. The ideal mix IMO is slide shows, quizzes and exercises for each section in a course. And the interplay between this triad reinforces the learning experience.One approach that lets students use their intelligence and insight is to formulate exercises as follows (BTW exercise that I an making for a forthcoming C++11/14 for NYC) takes ~ 2 hours (NB!! the trainer must have a working solution before embarking on the exercise):1. Define/describe the problem (by trainer)2. Describe how to design it3. Design it4. Do it (C++)5. Meditate, generalize it, extend itIt's the George Polya method, but then applied to programming.Example (question 2 continued from1)Quote1. (Basic Improvements in Classes)a) Modify class C so that 1) its default constructor is absent and 2) copy constructor and assignment are private. To this end, use keyword default to explicitly tell the compiler to explicitly generate a default constructor. Furthermore, use the keyword delete to mark the copy constructor and assignment operator as deleted functions. Deleted functions may not be used in any way, even by friends. Test your code again, including calling the defaulted and deleted functions. What is the resulting behavior?b) Use the explicit keyword in the constructors to disallow implicit type conversion.c) Use constexpr keyword for those functions in which input arguments are known at compile-time (for example, constructors and setters). Then the data members will also be known at compile-time.d) Use the keyword noexcept for those member functions which you know will not throw an exception.Run and test your code. ...Quote3. (Improvements in Classes, Part II)We now return to class C in exercise 1. Answer the following questions:a) Create move constructor and move assignment operator for class C.b) Test these new functions. How can you ensure that a move constructor is called instead of a copy constructor?c) What happens if you use an lvalue as the source of a move operation? And before jumping into exercise, do yer quizzes!!Quote3. What is the noexcept specifier?a) It performs a compile-time check that returns true if an expression is declared to not throw any exceptionb) It specifies whether a function will throw exceptionsc) It is a way to suppress exceptions being thrown to clientsd) It ensures that all exceptions will be thrown from a function4. Which of the following statements regarding the noexcept specifier are true?a) If used, it guarantees that client functions will not throw exceptionsb) The C++98 exception specification is still supported in C++11 but it is deprecatedc) The stack is unwound when using the C++11 exception specificationd) It is part of a function?s specification5. What is the noexcept operator?a) It performs a compile-time check that returns true if an expression is declared to not throw any exceptionb) It serves the same objectives as the noexcept specifierc) It is not supported in C++11d) It specifies whether a function will throw exceptionsIt's just like judo with regard to preparation and execution.
Last edited by Cuchulainn on February 20th, 2016, 11:00 pm, edited 1 time in total.
 
User avatar
dweeb
Posts: 11
Joined: July 11th, 2009, 8:10 pm

Projects to Improve Programming Skills

February 29th, 2016, 1:03 pm

QuoteOriginally posted by: liamCertainly in data science, which is what some people call "quant" these days, R and Python are popular. In finance they probably are too, as is Matlab. Certainly in my experience it is 'whatever is most convenient' and if a spreadsheet and VBA will do, then that is what you produce.A lot of coding these days seems to be prototyping or rapid development. Something can initially start out small, and before you know it, it's operational, poorly documented and with no development standards.Once a coding language achieves scale, it's embedded everywhere. There are software developments that can envelope any shortcomings, like containers and Aster that scales up R. QuoteOriginally posted by: liamGoing back to the original question, I suspect the OP is being criticised by financial firms on their algorithm design rather than knowledge of a language. I know some investment houses require passing C++ tests, but if several have said the same thing then they probably need to be able to design algorithms easily.Reading through a paper with the theory/notation and then the code that implements the paper/model can help.
Last edited by dweeb on February 28th, 2016, 11:00 pm, edited 1 time in total.
 
User avatar
liam
Posts: 4
Joined: November 16th, 2004, 11:51 am

Projects to Improve Programming Skills

February 29th, 2016, 4:18 pm

QuoteOriginally posted by: dweebQuoteOriginally posted by: liamReading through a paper with the theory/notation and then the code that implements the paper/model can help.That is a good idea - what I did as a quant was read through papers to find the best and fastest implementations of pricing methods, so this is a good place to go.
 
User avatar
dweeb
Posts: 11
Joined: July 11th, 2009, 8:10 pm

Projects to Improve Programming Skills

February 29th, 2016, 5:34 pm

Haug's Derivatives book has the VBA code. Maybe translate to C++ or Python. Plenty of equity factor model papers around. Implement using R or Python.
 
User avatar
Cuchulainn
Posts: 20254
Joined: July 16th, 2004, 7:38 am
Location: 20, 000

Projects to Improve Programming Skills

March 1st, 2016, 7:21 am

QuoteOriginally posted by: dweebHaug's Derivatives book has the VBA code. Maybe translate to C++ or Python. Plenty of equity factor model papers around. Implement using R or Python.That's a good idea. If OP does in C++ then it's a good idea to use Boost libraries (Math Toolkit) and C++11 new libraries (random, tuple, lambdas etc.) to reduce the amount of code to be written. The focus could be on the algorithmic features of this project. Python would be cool for this.===Taking specific examples as in Collector's book means that you always have working code that can be improved upon (if you have motivation and time). And taking liam's advice on implementing a well-known model.
Last edited by Cuchulainn on February 29th, 2016, 11:00 pm, edited 1 time in total.