Resume


Thomas Becker, Ph.D.
Lake Tahoe, Nevada
Email:
Homepage: www.thbecker.net

Education

University of Heidelberg, Germany
Master’s degree in mathematics and physics.
Ph.D. in mathematics (magna cum laude) with a dissertation in the area of algebra and logic.

Legal Status

Dual Citizenship: US and European Union

Summary

  • Scientific software engineer with an emphasis on C++ and finance
  • Proven track record of delivering high-end commercial software products
  • Respected author, speaker, and contributor in the C++ community
  • Former research mathematician in algebra, logic and symbolic computation
  • Experience in a wide range of languages including various Lisp dialects, Unix shellscripting, Perl, Java, C#, C, C++, as well as Web development using HTML, css, and javascript.
  • Commercial development experience mostly in the Windows environment, but well-versed in the "Legg" environment (Linux/emacs/gcc/gdb) as well

Experience

1997- present Scientific Software Engineer and Mathematician (C++/Finance)
to find out what company I work for.
 
 

The company I currently work for licences software for performance and style analysis of stock and bond portfolios to leading institutional investors, money managers, and financial consultants worldwide.

Prior to 1997, the company had been marketing a 16-bit windows program that had been written by contractors. In the fall of 1997 the company embarked on a complete rewrite and extension of its software in C++ for Windows NT, using its own team of staff engineers. I was the second person to be hired for the project.

My first and main responsibility within this project was the design and implementation of a backend calculation engine in C++, using design and implementation technologies such as design patterns, multithreading and STL.

At the time, design patterns were just becoming widely known and accepted. The acceptance level of the STL in applied software engineering was practically zero. It may not be an exaggeration to say that ours was the first large commercial software project that used generic programming and the STL throughout. Needless to say, we also became early adopters and heavy users of the Boost library.

Similarly, the way I used multithreading extensively in the math engine was rather ahead of its time: its immediate purpose was to enhance the user experience of the program by deferring lengthy calculations to background threads. However, the design was such that it can now be leveraged to obtain better performance on multiprocessor machines.

Implementing the math engine and the multithreaded calculation framework gave me ample opportunity to hone my unit testing skills. At one point, about one third of the way through the project, my unit test collection had more lines of code than the entire rest of the project.

The mathematics of the engine that I wrote is based on Modern Portfolio Theory. In particular, the module implements returns-based style analysis as set forth by Nobel laureate and Stanford professor William F. Sharpe.

Credit for the overall design and architecture of the software goes to our CTO/project lead and not to me. However, since our team consisted of just the two of us for several months, I was always passively and sometimes actively involved in the high level design decisions.

As the team grew from 2 to 5 developers and the project matured, my work broadened beyond the application’s back end. Firstly, there was significant collaboration with other team members on the design and implementation of the middle layer between the mathematical engine and the user interface part of the program. Later, I also performed significant work on the presentation layer, including the charting engine.

The product was shipped in December of 1999 and is now being used by more than 600 plan sponsors, money managers and financial consultants worldwide.

In the spring of 2000, the company began development of a Web-based version of the software in a team consisting of two to four people, at various times. My role in this team consisted of the following:

  • Participation in the overall design of a distributed Web server architecture, involving a load balancer running under Linux and backend servers under Windows NT.
  • Development in C++ under Windows NT for the backend servers.
  • Java Servlet development under Linux, including multithreaded programming and socket programming.
The Web product went live in early 2001 for the first client.

The completion of the first version of the Web product marked the end of the startup phase of the company. At that point in time, it would have been natural for me to seek new challenges. An important reason for my decision to stay on was the fact that I had a financial stake in the company, and the outlook was bright, not in the least because of the quality of my work. From hindsight, the decision to stay has turned out to be more than just financially advantageous. It has also provided me with the unique opportunity to experience the growing and maintaining of a large code base over an extended period of time. Conceiving of a piece of software, building it, and getting it to market in due time is one thing. Staying with it for years, seeing how early design decisions and implementation techniques stand the test of time, is quite another.

Another aspect of my work which has done a lot for my maturity as a software engineer is the fact that here, the feedback loop between the engineer and the end user is extremely short. Nothing gives a software engineer a better reality check than to work for a small company with a dedicated and demanding community of users who will let you know what they think and who will abandon you for the competition if you cannot deliver quality in a timely fashion.

The growing client base of the company has also created a role for me as staff mathematician. Besides working on the software, which still takes the majority of my time, I also tend to all things mathematical, including client support, research concerning ongoing developments in portfolio theory, and talks at user conferences.

Finally, I also serve as a mentor and instructor of more junior developers on the team, primarily on the subject of C++ and the Boost library.

 
1994-1997 Contracted Software Development and Training out of Munich, Germany
Programming languages that I worked with were, among others: C, C++, perl, AutoCAD Lisp, SQL, VBA, PL/1, and COBOL. Environments were MS-DOS, Windows NT, UNIX, OS/2, and IBM-Mainframe.

Topics of the training classes that I taught for IT professionals were: Programming in C++, Windows NT Programming (Win32, MFC, COM, ODBC), as well as Windows NT System Administration and Networking.

 
1988-1993 University of Passau, Germany, Computer Algebra Group
Assistant Professor
Duties included:
  • Research in computer algebra (see list of publications)
  • Design and implementation of mathematical algorithms in the computer algebra system Reduce
  • Teaching undergraduate and graduate level mathematics courses with an emphasis on computer algebra
  • Co-authorship of a graduate level textbook in computer algebra (see list of publications)
 
1988-1993 Department of Mathematics, University of New Orleans, New Orleans, LA
Instructor/Assistant Professor
Duties consisted of teaching and research in algebra.
 
1982-1983 Department of Mathematics, Tulane University, New Orleans, LA
Visiting Assistant Professor
Duties consisted of teaching and research in algebra.
 

Publications and Related Activities

September 2000 - August 2003 Contributing Editor of C/C++ Users Journal. Author of a bimonthly column entitled STL and Generic Programming. Titles of the column articles were:
1. Welcome to STL and Generic Programming (CUJ 18/9, September 2000).
2. The Template Compilation Model (CUJ 18/10, October 2000).
3. Introduction to the STL (CUJ 18/12, December 2000).
4. STL Containers (CUJ 19/2, February 2001).
5. STL Container Iterators (CUJ 19/4, April 2001).
6. More on Iterators (CUJ 19/6, June 2001).
7. Writing Your Own Iterators (CUJ 19/8, August 2001).
8. Traits Classes (CUJ 19/12, December 2001).
9. Policy-Driven Design (CUJ 20/2, February 2002).
10. STL Algorithms (CUJ 20/4, April 2002).
11. STL Function Objects and their Adaptors (CUJ 20/6, June 2002).
12. C++ Template Metaprogramming (CUJ 20/8, August 2002).
13. More on C++ Metaprogramming (CUJ 20/10, October 2002).
14. Typelists (CUJ 20/12, December 2002).
15. C++ Metaprogramming Applied (CUJ 21/2, February 2003).
16. Creating Efficient Code with Templates (CUJ 21/4, April 2003).
17. Expression Templates (CUJ 21/6, June 2003).
18. That's All Folks (CUJ 21/8, August 2003).
 
2000 - 2001 Member of the program committee of Scott Meyers' Workshop on C++ Template Programming. The workshop was held at Net.ObjectDays 2000 in Erfurt, Germany, and again at OOPSLA 2001 in Tampa, Florida.
 
Articles on Software Engineering
1. On the Tension between Object-Oriented Programming and Generic
Programming, and What Type Erasure Can Do about It
. Online at the C++ Source, Oct 15, 2007.
2. Java-style variable binding in C++. In: Jörg Striegnitz, Kei Davis, Yannis Smaragdakis (Eds.), Proceedings of MPOOL 2002 (Workshop on Multiparadigm-Programming with Object-Oriented Languages), held at ECOOP (European Conference on Object-Oriented Programming) in Malaga, Spain, June 2002, 97-107. Available on the web here.
3. Java-style monitors in Win32. Dr. Dobbs Journal 331, 46-54 (2001)
4. Some generic extensions to the C++ Standard Template Library. C/C++ Users Journal 18/6, 58-65 (2000)
5. With Christopher Baus: Custom iterators for the STL. In: Proceedings of the 2000 Workshop on C++ Template Programming held in Erfurt, Germany, October 2000. Available on the Web here.
6. A semaphore with priorities for Win32. C/C++ Users Journal, 17/8 (1999)
7. Smart iterators and STL. C/C++ Users Journal 16/9, 39-46 (1998)
8. Strange encounters on the second level of indirection. C++ Report 10/5, 35-41 (1998)
9. Porting server applications from UNIX to Windows NT. C/C++ Users Journal 15/10, 19-32 (1997)
10. NT programming with Visual C++ (in German). NT Magazin 10-11/96, 47-50 (1996)
11. Software development with C++: Some common pitfalls (in German). SOFTWARE Entwicklung 6/96, 10-18 (1996)
12. Two extensions to GNU Emacs that are useful when editing TeX documents. Tugboat (Journal of the TeX User Group), December 1993. Available on the Web here.
 
Portfolio Theory
1. Sharper than Sharpe? Choosing the Better of the Two K-Ratios. Automated Trader Magazine Q4 2011, 64-71
2. The Black-Litterman Model: An Introduction for the Practitioner. Investments & Wealth Monitor (Journal of IMCA, the Investment Management Consultants Association), January/February 2009, 21-24
3. Exploring the mathematical background of returns-based style analysis. In: T. Daniel Coggin and Frank J. Fabozzi, (Eds.), The Handbook of Equity Style Management, Third Edition, John Wiley & Sons, New York, 435-453 (2003)
 
Mathematics Book Thomas Becker, Volker Weispfenning, in cooperation with Heinz Kredel: Gröbner Bases. A Computational Approach to Commutative Algebra. Graduate Texts in Mathematics 149, 574 pp., Springer Verlag, Berlin, Heidelberg, New York (1993)
 
Mathematical Research Articles
1. On Groebner bases under specialization. Applicable Algebra in Engineering, Communication and Computing 5, 1-8 (1994)
2. Standard bases in power series rings: uniqueness and superfluous critical pairs. Journal of Symbolic Computation 15, 251-265 (1993)
3. With V. Weispfenning: The Chinese remainder problem, multivariate interpolation, and Grobner bases. In: Watt, S.M. (Eds.) Proc. International Symposium on Symbolic and Algebraic Computation (ISSAC '91), ACM Press, New York, 64-69 (1991)
4. Homogeneity, pseudo-homogeneity, and Gröbner basis computations. In: Mattson, H.F., Mora, T. and Rao, T.R.N. (Eds.), Applied Algebra, Algebraic Algorithms, and Error-Correcting Codes (AAECC 9), Springer Lecture Notes Computer Science 539, 65-73 (1991)
5. Stability and Buchberger criterion for standard bases in power series rings. Journal of Pure and Applied Algebra 66, 219-227 (1990)
6. Standard bases and some computations in rings of power series. Journal of Symbolic Computation 10, 165-178 (1990)
7. Valued fields with a universal embedding property and eta-alpha-structures. Communications in Algebra 18(10), 3565-3576 (1990)
8. With L. Fuchs and S. Shelah: Whitehead modules over domains. Forum Mathematicum 1, 53-68 (1989)
9. A few remarks on the Dauns-Hofmann theorems for C*-algebras. Archiv der Mathematik 43, 265-269 (1984)
10. Real closed rings and ordered valuation rings. Zeitschr. für mathematische Logik und Grundlagen der Mathematik 29, 417-425 (1983)
 
Miscellaneous My free software utilities can be found on my personal homepage. I am also a (minor) contributor the the Boost library. Together with Dave Abrahams, I contributed the zip_iterator.
 
Erdös Number: 2 Paul Erdös (1913-1996) was one of the most prolific mathematicians of all times. He published joint papers with over 500 fellow mathematicians. Paul Erdös’ own Erdös number is 0. If you have published a joint paper with him, your Erdös number is 1. If you have published a joint paper with someone whose Erdös number is 1, your Erdös number is 2, etc. For more information, see the Erdös Project. My name can be found on the Erdös list as co-author of the Erdös1-mathematician Saharon Shelah.

Favorite Quote

The world is changed not by the self-regarding, but by men and women prepared to make fools of themselves.

-- P.D. James