B. Nikolic: Software engineering
This is a summary of my skills and experience in the area of software engineering.
Skills
- Design of software that is simple, cleanly interfaced and self-documenting
- Full proficiency in C++, STL
- Low- and high-level optimisation of speed of execution of programs (including profiling on Windows and Linux)
- Boost libraries: smart_ptr, graph, multi_array, uBLAS, format, assign, bind, random, tokenizer, string_algo, etc.
- Proficiency in Python, C
- Experience of many other computer languages including Java, XML, XSLT, Lisp
- Integration of compiled and dynamic languages (mainly C++ and Python through SWIG)
- Development on UNIX (Linux, Solaris) and Windows environments
- Version control systems: CVS, subversion, perforce and fourth-generation systems (primarily bazaar)
- Automated build chains: autotools and SCons
- Working on weekly release cycles
Experience
I have ten years of experience in design and implementation of software systems in a commercial and research setting.
Design, implementation and development of the 'Out-of-focus' holography system, which is described at http://www.mrao.cam.ac.uk/~bn204/oof/index.html .
The system has a heritage of ten years of development and is implemented in a mixture of C++ and Python, with the C++ code reflected in Python through SWIG. The source of the entire system is available for download under the terms of the GPL at http://www.bnikolic.co.uk/astro/oof/software.html .
Elements in this package include:
- Computation of FFTs
- Zernike polynomials
- Bi-linear/Gaussian interpolation of data
- Model fitting using the Lavenburg-Marquant multi-dimensional minimiser
- Model analysis using Metropolis MCMC algorithm (not yet in public release)
Senior C++ developer for FX Options and Derivatives at Deutsche Bank, London
I worked on the whole system, including the analytics libraries, the pricing tool and the risk manager system, but excluding all user interface and database code. The system consisted of about a million lines of code, build on top of Microsoft C++ compiler and build tools.
Types of projects:
- Automatic structuring tool for the sales desk: for a number of pre-defined strategies generate combinations of options that match typical risk profile of clients.
- Correction of algorithms in the analytics libraries. The libraries were relatively mature so this typically involved corner cases, such as incorrect analytical approximations close to barriers, incorrect handling of fixing values, etc.
- Analysing the assumptions/models used in the analytics libraries in support of the trading desks (i.e., completing the documentation of the analytics by analysing their implementation).
In addition to above a major strand of my work was improving the speed with which the risk management system could present the details of the trading position to the desk. This involved:
- Profiling and analysing the bottlenecks in the system (in part using Intel VTune)
- Improving the performance of the analytics libraries by 40% by re-writing the partial differential solving code
- Improving the speed of calculation of risk by better ordering the perturbations to market parameters to enabling caching of results from the analytics
- Helping in the design and implementation of a 400-node distributed computing system based on DataSynapse.
Design and implementation of advanced radiometric phase correction algorithms for ALMA.
Ground-up design of an integrated research and delivery framework, implemented in a combination of C++ and Python (with the C++ reflected in Python). First public release of code expected Q4 2008, more information will be available on the ALMA pages.