Career Center Jobs and Career Management in the Financial Markets, Banking & Finance Career Center
  Job Seeker Sign-in / Register Recruiter Home

TOP STORIES

So You Want To Be A Wall Street Programmer


The financial industry is a big playing field. As domains go, the type of specific work varies greatly, and what is applicable to some IT professionals may not be applicable to others. Here's a primer.

In order to put things in perspective: I write code for distributed enterprise trading systems. From the perspective of a techie, this amounts to writing tons of highly multi-threaded client-server code. While the code ranges from dealing with incoming market data and prices, to managing load-balanced engine processes that calculate the optimal prices for outgoing quotes, in the end it all comes down to necessarily efficient client-server code.

That said, there are plenty of jobs in the financial industry targeting database administrators, system administrators, quantitative analysts, maintenance script coders, QA personnel, and GUI developers. If your niche is one of these, much of the advice presented here still applies though your mileage may vary. So what's expected from an experienced developer looking to join the ranks of trading systems programmers? Well…here it is, in a nutshell.

C/C++

C is heavily used, not only as part of maintaining legacy code, but also as a way of dealing with APIs distributed by electronic exchanges and data feed providers. The ‘extern “C” {…}’ statement is a common occurrence, so it’s important for a developer to not only be comfortable with cross-language linking semantics, but also with concepts such as memory alignment and padding (dealing with complex structures on the stack and otherwise), as well as void and function pointers (a well accepted mechanism for calling C++ methods from within C callbacks).

C++ is the predominant language on Wall Street for the work that I do. While Java, and to a lesser extent C#, are slowly gaining in popularity, trading systems prioritize speed over stability. The quote going out to the exchange can pass through your brilliant, well-designed, object-oriented, design-pattern-supported system with no exceptions, but if it hits the market a few milliseconds late because the garbage collector decided it was time to clean up the place a bit, you lose money.

At the same time, there's no concern regarding the extreme outskirts of the C++ language. As an example, there is no business or technical motive to explore the techniques of template meta-programming. Silly template tricks are the stuff of computer journals, not enterprise systems. You are however, expected to be comfortable with the nuances of general template programming, some common design patterns (nothing more complicated than Singleton), common issues arising from static instantiation dependencies, proper order of object instantiation in an inheritance chain (virtual and otherwise), problems arising from object copy semantics (especially with pointer members and copy-on-write implementations), and virtual table concepts.

Client-Server Concepts

By definition, Wall Street trading systems are distributed systems. Almost all firms, from tiny market makers to international investment banks, build their systems on top of some framework abstracting UDP. At a higher level, inter-module communication is done with some combination of TCP and UDP. UDP (or rather layers on top of UDP which guarantee packet delivery) are used heavily since the systems are built with parallelism in mind (once again, speed over stability). As such, you should be comfortable with C level socket concepts such as socket(), bind(), poll(), and select(). In all likelihood, you will never use these directly, since these things will have already been abstracted away into socket libraries by the time you arrive on the scene. However, you will be expected to know these concepts, as they are the building blocks of any system you’ll be working on.

Threading

Client-server code and threading go hand-in-hand. In fact, you will often encounter this combination in the work you'll be doing. Issues come up dealing with typical TCP server design, load-balanced server design, and high-throughput server design. At the very least, you should be comfortable with the typical academic reasoning: "Fork a process once a request comes in and let it deal with the client, so that the server is free to listen for subsequent requests." You also need to be comfortable with pthreads(), fork(), mutexes (and semaphore concepts in general), as well as higher level things such as Java methods synchronization.

Databases

Note that the topic is Databases, not SQL. Aside from knowing how to do simple select statements, you should have an understanding of the useful properties and limitations of stored procedures, the concepts behind database indexes (clustered and otherwise), and the distinction between table-level, page-level, and row-level locking.

UNIX

UNIX (primarily Solaris and Linux) is still the platform of choice for trading systems. While you will have a Windows machine under your desk, you’ll mostly use it for e-mail. Everything from checking log files to debugging core dumps is done in a UNIX environment, and so you really should be comfortable with commands such as tail, sed, grep, awk, tr, and top. It also helps greatly if you are comfortable with either vi, vim or emacs, and have enough experience to not be surprised at the kind of problems that stem from an incorrectly configured $LD_LIBRARY_PATH.

Debugging Skills

I'm not referring to the integrated debugger built into Visual Studio. At this point in your career, you're expected to be able to analyze a core file with dbx, or gdb (from the command line - there won’t always be an X-server available). While you won’t be spending the majority of your time doing this, when a situation calls for a debugger, it pretty much cannot be addressed with anything else but - so know your stuff.

On a final note, let me ease what I know to be the primary concern of developers looking to make the transition into the financial field. No one expects you to have a deep understanding of the financial markets or specific knowledge of financial instruments. This is domain specific knowledge, and you will attain it almost through osmosis, if not explicit training, as you progress through your career. When applying for subsequent jobs, the interviews will involve financial domain discussions, but at your first interview on Wall Street, if you let it be known that your current experience does not cover topics in the financial arena, no one will hold it against you (assuming that you are not applying for a job where such knowledge is of utmost importance).

What's your experience with IT on Wall Street? Post your comments below.

COMMENTS

Suzi, Consulting,  Wed May 23 2007

I was a programmer/analyst for a trading environment back in the mainframe days with COBOL and DB2 usage popular. How would one re-enter the market at a later vantage point? What skill base should be sharpened and added to my skillset?

Add your comment »

dfc, Quantitative Analytics,  Wed May 23 2007

I agree with Andrey that small shops are trouble sometimes. I joined a small women-owned consulting firm run by women who used to work for KPMG and wanted to reduce their travel. They do not communicate with each other well. One principle said that she wanted someone who is more junior during the interview - so I figure I will not hear back from them. But they called me in again! I met with the other woman who asked me to come in as a trainee. She did not talk about salary. After I joined, the principle fired me after 23 days indicating that she did not want someone who had to be trained. She does not have any time to train people. She offered to pay my salary for the rest of the month and not contest my unemployment compensation filing. Talk about women who really do not communicate well. Really, don't want to work for a small company! How do I explain to the potential employer that these two women are a confused mess. Other people working for them are trying to find other jobs also. Don't work for these messed up females! Get a real job! It will take me more than a year to do it!

Add your comment »

Suzi, Consulting,  Thu May 24 2007

I tend to agree with you. Move on! Happily...

Add your comment »

ss, Capital Markets,  Tue May 29 2007

Andrey knows what he's talking about. Pay attention to the type of systems-level coding he's talking about.



I would add the following:



- Your Struts/J2EE/Tomcat/Rails/"N-tier web architecture" experience is irrelevant. Stop talking about it in the interview.



- You need to understand the appropriateness of different concurrency methods. Sometimes you should thread, sometimes you should go event-based. At least have a general idea of the trade-offs involved.



- I would add a necessary debugging skill of analyzing packet dumps to detect network problems or sub-optimal communications patterns. Switches do drop frames, messaging layers aren't perfect, and sometimes you just have to look at the packets to find out where those 3 missing milliseconds went.



- You'll be dealing with a lot of data in a lot of ugly formats. You should have good command of either Perl, Python, or Ruby to transform the data, load it into the DB, publish it onto the market data system, turn it into a .csv file, etc...

Add your comment »

da, Hedge Funds,  Tue May 29 2007

I've been doing IT/programming in financial services for 15 years now, the last 7 of which have been at hedge funds. Each one tends to be different: if you are at a stat arb shop, much of what Andrey says applies. But at a distressed fund, none of this real-time, distributed stuff really matters so it's more about simplicity and productivity. At my current job, we use Python, MySQL and develop mostly web applications.

Add your comment »

Peter Kim, Information Technology,  Wed May 30 2007

Hi, I've been looking for opportunities as a Database Administrator/SQL Programmer in Wall Street. I've been to 6 to 7 interviews, even landed some good interviews. But, they never call to give me reasons why I'm not qualified for those position, for which I know that I am. I'm a Oracle Certified Associates and Professional. I know shore procedures, indexes, and etc. I just need a opportunity. Can you please help me?

Add your comment »

WP, Equities,  Sun Jun 03 2007

I am working myself in finance as dba. Having been in 6 to 7 interviews not having found a job I think is fairly ok in finance field: competition is high. normally in finance not only your certifications matter, but a general logic approach to solve problems. Focusing too much on technology stuff is no good; you need to be able to demonstrate that you are or can be a generalist.

Add your comment »

Andrew Orme, Information Technology,  Fri Jun 08 2007

Hi, I've been looking for opportunities as a Quantitative Analyst/Programmer. My situation is very similar to Peter's experience. I've been to a few interviews, had a very positive experience but they did not get back to me. I know that I am qualified for those positions. I wonder whether those positions really exist - perhaps competition is not as high as we think. There are so many jobs available through the recruitment agencies and only very few we can apply directly. Does anyone know any companies or banks I could apply directly? Could you please help?

Add your comment »

WallStYouth, Equities,  Mon Jul 02 2007

Wow this article is dead on I work at one of the top 3 Brokerage houses on the street and this article basically sums up our environment. If you want to work on Wall St. just dont be dumb that's the only advise I can give the huge firms like Goldman, Lehman, and Morgan and very picky and will only pick the best you should really knock every question out the ballpark when asked if you plan on passing the interview phase.

Good luck :)

Add your comment »

venkat, Equities,  Wed Jul 11 2007

I don't agree with Andrey  completely. Templates are used extensively. Lot of equity trading systems use Boost and ACE.  You can do realtime programming using Java also. http://java.sun.com/javase/technologies/realtime/index.jsp

Add your comment »

ADD YOUR COMMENT

* Mandatory fields
Your name
Your field
Your Comment*
You have 1200 characters left
Image verification* ( What is this? )
Enter the code shown below or Sign-in / Register to skip this step.
Disclaimer: All comments must adhere to eFinancialCareers Ltd’s Add your comment rules.
To complain about a comment, please e-mail editor@efinancialcareers.com.
Incisive Media Investments Ltd. 2008 | Media jobs | Terms and conditions | Privacy policy
Incisive Media Limited, Haymarket House, 28-29 Haymarket, London SW1Y 4RX, is a company registered in the United Kingdom with company registration number 04038503