7

I am actually considering learning C++. I want to become a quantitative financial analyst, and going to pursue my CFQ soon. Java is not heavily used in this field, but C++ is for its complexity. For someone who already has knowledge in HTML, CSS, JavaScript (intermediate), and PHP (intermediate), how hard would the switch be to pick up C++ over the course of a year? How long would it take to get certified in C++? And how hard is it to learn? I have built CMS websites, and some decent applications for the web.

I took a college course of beginning programming in Java as well.

Basically switching positions as a web designer to a C++ programmer and use Matlab.

I have heard the language is very complex, but easier to program than languages like Java.

2
  • 4
    certified in C++??? By whom? An university? Pay microsoft to give you a paper? Dec 22, 2011 at 9:12
  • I'm honestly not aware of any certifications for C++, but was simply stating if there were I would obtain them. I apologize for the lack of information provided. Java certifications come from Sun Microsystems, and I figured there may be some that exist.
    – user763349
    Dec 23, 2011 at 20:48

5 Answers 5

12

I disagree with all the other answers1, it's not going to be as easy as they tell you. There's quite a lot more to the shift, it's a:

  • Domain shift: Web development to quantitative financial analysis. Extremely different mindsets, approaches, etc.

  • Philosophy shift: From the easy going attitude of PHP to something that could only have come out of the darkest corners of Stroustrup's mind. A particularly disturbed individual, judging from his hellspawn2.

  • Talent shift: I've been working with PHP since version 3.0, and still loving it, and I can tell from experience that PHP does not require talent, you can be successful without it3. It's always nice when you have it, but it's not a requirement. C++ on the other hand requires talent. Real actual hardcore talent.

One good thing, though. I want to become a quantitative financial analyst is a very specific goal. From that sentence I'm deducing that:

  1. You've done your research - you know the proper lingo,
  2. You actually want this - you've done your research,
  3. You are probably in contact with people in the sector - no one really wants to be something that ugly, if they haven't had a peek inside.

I'm no Sherlock of course, but I see some hope. Technically it's possible, if you are extremely talented, extremely dedicated, somewhat lucky and go for an entry level job at the field. And if you are all those things, best ignore anyone pissing on your parade, and just go for it. Or you might regret it for a lifetime.

1 Not really, great advice, upvoted each and every one of them
2 To be fair, that was long time ago. It took an asylum of people to get to where we are today.
3 I've met more than a few people that consider themselves web developers (and who am I to say they aren't?), when what they actually do is scrap together a ready made blog platform with a ready made theme. Some of them are extremely successful, and by that I mean mostly financially. It takes a lot of other talents to get there, of course, I'm only referring to programming talents.

9
  • 3
    I've got no talents whatsoever, I'm a very boring and narrow-minded person, but still I can cope with C++ well. It needs not a talent, what it demands is a patience and an attention to details, since it is not a particularily forgiving language. Same for all the math in the quanitified analysis field - it is not too complicated, but it will require an attention to small details, a good memory and some basic calculus skills beaten hard into your spine.
    – SK-logic
    Dec 22, 2011 at 10:07
  • 1
    patience and an attention to details Those are both rare talents in my book. And I've always though of a good memory as a very important talent - Bit biased because I have a medical condition where poor memory is a symptom (nothing too serious). The "talent shift" bullet, as the whole answer really, is in comparison with PHP, I didn't intend any of this to stand as comments for C++ on their own. Its more on the shift itself, than its starting or ending point.
    – yannis
    Dec 22, 2011 at 10:19
  • why talents? These traits can be acquired with practice. Everyone can learn. Same for memory - practice tend to improve it. My memory is naturaly very fogged (and not getting any better with age), so I'm using several trivial mnemotechnics which are easy to learn. Whereas talent can't be just trained. No matter how hard you're trying, chances to become a new Dali or Mozart are tiny.
    – SK-logic
    Dec 22, 2011 at 10:27
  • why talents? These traits can be acquired with practice. Well discussing what we consider talent is off topic. I think my previous comment provides enough clarification of what I mean by talent, and how I use the word in my answer. No time for anything more, sorry. Same for memory - practice tend to improve it. Not for me. That's what the specialists tell me, practice helps my memory not degrade too fast but no chance of actually improving (which hasn't really stopped me from trying - but haven't proved them wrong still) -> biased in thinking of memory and concentration as talents.
    – yannis
    Dec 22, 2011 at 10:37
  • of course you can't improve your, say, "hardware". But you can find the hacks and tricks to get around the hardware problems. I'd recommend reading this book: shop.oreilly.com/product/9780596101534.do
    – SK-logic
    Dec 22, 2011 at 10:43
16

I had one answer in mind when I read the title of this question, and then obliterated that answer once I read your actual “question.”

If I were you, I wouldn’t even bother applying for these jobs if you don’t have a lot of experience in the things they’re looking for. I was a consultant for many high-speed trading firms and they aren’t going to have much patience with you if you don’t absolutely 100% know your stuff. To wit, they also don’t really care about programming languages… they care about latency. Yes, you technically said you were looking at jobs in quantitative finance; but if that’s the case, you should spend your time getting a degree in math, not learning C++.

And to answer your question specifically: C++ is going to be very hard for you if you only know HTML (not a programming language), CSS (not a programming language) and sundry bits of PHP and JavaScript.

Maybe try again in 5 years?

3
  • I am getting a Masters in Financial Engineering, and wanted to learn C++ or at-least MatLab as a good foundation. I have been researching into these position for over a month now, and realized the current positions require Masters at a minimum. Who were you a consultant for, and how long? I agree that PHP and JavaScript are not programming languages, especially CSS and HTML, but they were listed as intermediate for the numerous libraries that exist; like jQuery, MooTools, and various frameworks.
    – user763349
    Dec 23, 2011 at 20:33
  • JavaScript and PHP are programming languages; I never said they weren’t. I’m under NDA and cannot discuss who I worked for. Dec 23, 2011 at 22:22
  • From my understanding you can't really develop a desktop application like you can with Java or another high level language. Yes to an extent both are programming languages, but if we are talking about developing independent standalone applications I don't think you can consider them remotely in the same category as Java, C++, and etc. So as a foreground for the this conversation we are on the same page. If you don't mind answering the following question please do so: 1.) If you do know C++ how long did it take to get to your level as a consultant? I really do appreciate your time.
    – user763349
    Dec 24, 2011 at 21:32
6

C++ is substantially "harder" than Java because of explicit memory management. It's easier to program in the sense that you can do exactly what you want to in the language and you don't have to wait for the JVM's garbage collection algorithm to trigger (a non-deterministic process) in order to free up memory. C++'s explicit memory management makes it very powerful but it's also much much easier to do real damage than it is in Java or C#.

The language is hugely complex though it tends to fall into "domains" where you wind up using relevant chunks of it rather than the whole thing. Matlab doesn't require you to know C++ as it is its own environment and language and the underlying software is proprietary anyway. I've heard templates are particularly difficult but as I understand it most "quant" code is imperative numerical routines rather than complex objects and views and what not.

2
  • 2
    It is harder not because of an explicit memory management (not such a big deal after all), but because of its tendency to do lots of things implicitly - copy conctructors, overloaded operators, implicitly called destructors. Add templates specialisation and you'll get a very unpredictable language. Java behaviour is much more transparent and predictable.
    – SK-logic
    Dec 22, 2011 at 10:01
  • 2
    And then on top of that, all the Really Dumb Things inherited from C, like macros, implicit type conversions, countless undefined/unspecified/implementation-defined behaviors etc etc.
    – user29079
    Dec 22, 2011 at 11:01
5

I have been teaching C++ to a group of students. I have been quite happy with Programming: Principles and Practice Using C++ by Bjarne Stroustrup.

Bjarne Stroustrup teaches programming using C++. PPP teaches practical aspects of programming, real world problems, and how they would be approached as a programmer.

1
  • 1
    You wear snorkelling goggles and teach students c++? 8) Dec 22, 2011 at 9:20
1

C++ has been around for a long time, which means there are lots of resources (many of them free) you could use to learn it. However, it has changed a great deal over the decades. You can see that in the answers here - people calling it insane and difficult are generally referring to features inherited from C or features that modern C++ developers rarely use, like manual memory management. You would probably find modern C++ quite easy to learn even with only PHP and CSS background. However, that won't help you if quants don't use modern C++.

I just published a course called C++ Fundamentals and since Pluralsight offers a free trial, you could watch the first few hours of it free to see whether learning C++ is something you can do or not. Then you could either go and buy a book or sign up for a paid course to carry yourself further down the path. Be very careful with the book though. If the first chapter is full of char*, int[], while loops that increment pointers, and functions whose names start str, don't buy that book. Look for the first chapter using cout, string, and vector. Look for coverage of lambdas and auto, and look for a tone of simplicity and control. You can find a TON of books, blogs, web pages, FAQs, courses, and so on that teach the hard insane C++ people love to tell stories about. I don't recommend you learn that language first.

If it turns out the quants don't use modern C++, I suppose you could learn the old stuff once you were comfortable with the new. It would be hard. You would also have to learn some specific libraries that do financial calculations, and probably something for multicore and manycore work. For example as a Visual C++ user I would learn PPL and C++ AMP. But start with a foundation of knowing the syntax of the language and the philosophy of those who use it.

2
  • How long do you think it would take to be an expert in C++, and be able to apply for a position as a quantitative financial analyst. Would I be better off learning Matlab instead?
    – user763349
    Dec 23, 2011 at 20:46
  • You say you plan to spend a year on the transition; assuming you're working hard you can fit the C++-learning into that. The trick is learning idiomatic C++, not just C++ that compiles. That takes lots of exposure to lots of code. Dec 26, 2011 at 17:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.