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

FAQ: Advanced C++ and Modern Design Online Course

Joined
5/2/06
Messages
11,750
Points
273
What prerequisite knowledge is required/recommended for the course?

This course is not recommended for those who do not already have a solid C++ background (either academically or professionally). Intermediate to advanced level knowledge of C++98 is required. This can be either from the C++ Programming for Financial Engineering course, college courses in C++, and/or industry experience.

Students should be intimately familiar with at least the following:
  • C++98 (syntax, classes, inheritance, polymorphism)
  • Generic programming (templates)
  • STL
  • At least some knowledge of Boost libraries (what they are, how to setup and use).
For those who do not have prior industry experience in C++, the C++ Programming for Financial Engineering course must be taken prior to this one.

Additionally, we recommend completing Advanced Level 1 prior to enrolling in the course.

Does the certificate satisfy the programming requirement of MFE programs?
The certificate exceeds the C++ pre-requirement for the Baruch MFE program. Students will be able to include in their application to any program the course syllabus and the C++ projects completed during the course to show advanced programming proficiency.

What is the learning format of the course?
The course is organized in 7 levels and a final project, with access to the next level automatically provided when finishing the current level.

Once enrolled, every student assigned a personal Teaching Assistant (TA) who will answer questions, grade the programming exercises, and proctor/grade the final exam. A private forum is available to the students taking the course for interacting with the TA and with other students.

What is the best way to study for the course?
To best benefit from the learning format of the C++ Programming Certificate, it is suggested that you study the material in the following sequence:
  • Watch all the recorded video clips for a level.
  • Read the accompanying materials.
  • Analyze and run the sample code.
  • Ask questions in the forum which can be answered by your TA or other students.
  • Complete the programming assignments (only after watching all the videos and reading all the materials for the level).
  • Take the quiz at the end of the level.
  • Proceed to the next level.
How is the final exam conducted?
The final exam consists of a major project (after Level 7). Students have a list of projects to choose from, depending on their area of interest.

Note that the final project is optional, but is weighted at 15% of your overall grade; hence, opting out of the final project can seriously affect your final grade.

What is the refund policy?
Full tuition refund is granted upon request within 14 days of enrollment. No refund is provided after that, for any reason.

What certifications do students receive upon successfully completing the course?
The Baruch MFE program will issue a Certificate of Completion to students who pass the final exam and obtain a 70% or higher average. A Certificate of Completion with Distinction will be awarded to students with 90% or higher average. The certificates are sent as a PDF.

Is there a time limit to complete the first level?
Yes, the first level must be completed within the first two weeks of enrollment. This means the exercises must be submitted and the quiz must be completed within the first 14 days.

Is there a time limit to finish the course?
While students have indefinite access to the course materials, they have a maximum of 20 weeks to earn the certificate. After the 20 week deadline has passed, students lose the ability to earn the certificate and lose TA support (can no longer submit homework for feedback/grade). There are no exceptions to this policy.

To progress to the next level, you need to finish all programming assignments of the current level and pass a quiz.

Do I have access to the materials after I complete the certificate?
You will have unlimited access to the private forum and the materials. This can be useful when you need to refresh memory and refer to the projects you have done.
 

Attachments

  • Advanced_C++_and_Modern_Design.pdf
    222.3 KB · Views: 773
Which software do I need to study for the course?
  • Microsoft Visual Studio 2022: This version (or newer) is required to ensure that students have access to the cutting-edge aspects of C++20.
2022 Community Edition (free):
The installation of Visual C++ is just downloading the installer from the Microsoft website and follow the instructions. Just accept the default settings by clicking next, next, etc. No special settings needed.​
I use a Mac; is there any way for me to install Visual Studio?
Visual Studio is required for this course. You may use a mac with a virtual machine (i.e. www.parallels.com).

What hardware do I need to study for the course?
A recent desktop/laptop and a broadband internet connection.

_____________________________________________________________

Course planner (suggested study time for each level)
Level
Video lectures
Number of exercises
Suggested time to complete (weeks)
1
7
21
2
2
8
25
2
3
6
23
3
4
3
20
3
5
13
30
3
6
12
14
2
7
3
8
2
8
N/A
Quiz 8 and Final project (optional)
3
20


Please note that the above is simply a recommended plan of study. There is no deadline to complete individual homeworks/levels -- you may work at your own pace. The only deadline is the 20-weeks to complete the entire course for the certificate.
 
Last edited by a moderator:
This doc might be useful as a background to the course
 

Attachments

  • Official_Advanced_C11_and_Multidisciplinary_Applications.docx
    23.2 KB · Views: 386
Is there Quant Finance exercises involved also?
Perhaps some similarity with Joshi's C++ DESIGN PATTERNS AND DERIVATIVES PRICING
yes, absolutely, exercises and quizzes.
We discuss not only GOF patterns but also system patterns for building larger systems.

Familiarity with Joshi is not needed, although nice to have I suppose. However, the code is pre-C+11 so it is somewhat outdated. For this reason it is not on my list.

==
What do also discuss is next-generation design patterns, i.e. doing GOF in C++11 in a multi-paradigm (OOP, templates and functional programming) setting.
 
Last edited:
I care more about the usefulness for professional work. Are the materials broadly applied in current quant programming work?
 
I care more about the usefulness for professional work. Are the materials broadly applied in current quant programming work?

Depends what is understood by this statement. Some applications are still using C++98 while others are/will be moving to C++11/14. In any case, the course is state-of-art.

What is a typical environment in this context? Then it is possible to give a concrete answer.

It is much better to use C++11 for your quant work. But there is always legacy systems which tend to lag current compiler versions.

When applications catch up the students of this course will be ready,
 
Last edited:
Interesting topics for me are regex and uBLAS. I mostly grep in Linux and RcppArmadillo in R.

Is it too late to ask if you could include Boost unit testing and some documentation tools like doxygen in the course?
 
Interesting topics for me are regex and uBLAS. I mostly grep in Linux and RcppArmadillo in R.

Is it too late to ask if you could include Boost unit testing and some documentation tools like doxygen in the course?
Hi elektor,
I actually put a lot of effort into the whole regex. There's quite a few Boost libraries that help std::regex on its way, e.g. Xpressive, Tokenizer, String Algo,boost::regex.

uBLAS is also quite useful and it is well-documented in the recommended literature.

I am both TA and originator for this course, so in all cases APalley has the last word on requests. For my part we have Boost unit testing stuff in a electronic shelf. We could dust it down and put it on a bonus folder. But the other members of the team would need to say how much effort that it. For me, no problems.

Doxygen is beyond me. It's been years since I did it.

@APalley
@Andy Nguyen
 
Last edited:
I had a quick look at RArmadillo. Not exactly sure what you want to do exactly but Boost UBLAS might be easier to use in some cases, especially with range of matrix types.

A very popular C++ library is Eigen and might do the job? AFAIR it's header-only and almost easy to use as Boost code.

Eigen (C++ library) - Wikipedia, the free encyclopedia
 
Last edited:
Interesting topics for me are regex and uBLAS. I mostly grep in Linux and RcppArmadillo in R.

Is it too late to ask if you could include Boost unit testing and some documentation tools like doxygen in the course?
If you grok RcppArmadillo, you probably can grok Armadillo itself. ublas is light years away from it.
 
If you grok RcppArmadillo, you probably can grok Armadillo itself. ublas is light years away from it.
I agree. But it depends on what you want to do with matrices. The issues with Boost uBLAS are known.

Boost uBLAS is useful as a lite-weight storage (See Boost odeint) and is STL-compatible. It does not have numerical linear algebra routines.

For real performance you probably need NAG, ATLAS, Eigen etc.

The right tool for the right job. It would seem that Eigen is popular as well.
 
Last edited:
For real performance you probably need NAG, ATLAS, Eigen etc.
Armadillo

Also, ATLAS is not really C++ but a tuned C/Fortran Linear BLAS and LAPACK to the machine. To really take advantage of ATLAS you will need to recompile it from source to your machine.

Again, if you already know RcppArmadillo, stick to Armadillo and you will be more than fine.
 
Hi elektor,
I actually put a lot of effort into the whole regex. There's quite a few Boost libraries that help std::regex on its way, e.g. Xpressive, Tokenizer, String Algo,boost::regex.

uBLAS is also quite useful and it is well-documented in the recommended literature.

I am both TA and originator for this course, so in all cases APalley has the last word on requests. For my part we have Boost unit testing stuff in a electronic shelf. We could dust it down and put it on a bonus folder. But the other members of the team would need to say how much effort that it. For me, no problems.

Doxygen is beyond me. It's been years since I did it.

@APalley
@Andy Nguyen

Appreciate the inclusion of regex and uBLAS topics in the course Daniel.
 
General remark: How does Eigen compare to Armadillo in terms of efficiency, functionality, installability on Windows (which the Armadillo docs describe as 'lower grade system' tsk tsk, not exactly a good way to win friends).

Eigen (C++ library) - Wikipedia, the free encyclopedia

==
Anyways, for this course you can use the matrix library you feel most comfortable with and that solves the problem at hand with the least amount of hassle.

@APalley
 
I will try out the Eigen library. I tried some simple STL versus Armadillo for finding max of rows in a matrix. Armadillo has a single function called max where max(x,0) for row max and max(x,1) for column max where x is the matrix. Posted on SO

Fastest way to find the index of the maximum of each row

Here is another example to test performance against; it is Boost uBLAS and STL algos. The code can be parallelised without race condition I feel since it is *loop parallel* pattern.
Am interested in your finding with regards to Eigen.
 

Attachments

  • TestMatrixMaxElements.cpp
    1.6 KB · Views: 33
Back
Top