Monday, 14 May 2018

Job openings with the strats team at Standard Chartered bank - New York, London, Singapore, Hong Kong

Key responsibilities

Development of quantitative analytics; software engineering; software design and architecture; overall design and implementation of a wide range of financial software across FX, IR, commodities and credit asset classes; team leadership.

Job description

Strats are generalist software engineers. As a Strat you will be involved in all of: software design; architecture specification; project management; implementation; requirements gathering; research engineering; devops.

You will work on the trading floor, directly with traders, building software to automate their work and improve their efficiency. The role is highly development focused and you will use Haskell for almost all tasks: data analysis, market data publishing, database access, web services, desktop GUIs, large parallel tasks, quantitative models, solvers, everything. This is a fast paced role – code you write today will be deployed within hours to hundreds of users and has to work.

We have positions available in:
  • New York, where we're building a team and have one team member so far
  • London
  • Singapore
  • Hong Kong, where we're building a strats team to work with the existing risk technology team

We prefer experienced / senior developers, but extraordinary juniors will be considered too. Demonstrated experience in typed FP (Haskell, OCaml, F# etc) is required. We have over 4 million lines of Haskell, and our own Haskell compiler. In this context we look for skill in typed functional programming to capture and abstract over complex systems.

Experience writing typed APIs to external systems such as databases, web services, pub/sub platforms is very desirable. We like working code, so if you have Hackage or github libraries, we definitely want to see them. We also like StackOverflow answers, academic papers, or other arenas where you can show broad FP ability.

You have project and client management skills — you will talk to users, understand their problems and then implement and deliver what they really need.

The role requires physical presence on the trading floor for most of the time; remote work is not an option. For most roles we offer a relocation allowance if moving from abroad, and flexible working practices are possible.

Years of Relevant Experience

MSc in Computer Science or related discipline, or equivalent 4+ years experience (PhDs welcome)

Skills Summary

Haskell or other typed functional programming language (OCaml, F#); computer science background; software design and engineering; project management and client communication; team management for senior roles.

How to apply

If this sounds exciting to you, please email the following to strats-jobs AT sc DOT com:
  • Your CV
  • A short motivation text
  • Location(s) interested in
  • Coding samples (preferably publicly available)

We are committed to building a culture that fosters a diverse and inclusive environment that’s free from bias, where everyone can realise their full potential and make a positive contribution. This is just one of our values that is expressed in our brand promise – here for good.

Friday, 28 April 2017

Four openings for Haskell developers at Standard Chartered

I'm happy to announce that the Strats team at Standard Chartered is still hiring! We currently have openings for four roles. These will typically involve direct contact with traders to automate processes, often in rapid delivery style.

The growing Strats team now consists of about 40 developers in either Singapore or London, working exclusively in Haskell. Dozens of people from other teams are also writing Haskell code, so this is a chance to join what's probably the largest Haskell dev team in the world, and work on the largest Haskell codebase (over 3 million lines of code).

We currently offer only contractor positions (with the possibility of conversion to permanent in the future) with very competitive compensation. We require demonstrated experience in typed FP (Haskell, OCaml, F# etc); no financial background is required. We also require physical presence in either Singapore or London. Flexible work arrangements are possible, but relocation to the UK or Singapore is necessary.

If this sounds exciting to you, please email your CV and a short motivation text to Feel free to also ask any questions you might have.

Saturday, 25 June 2016

Marie Curie individual fellowship application text

Back in 2014 I applied for a Marie Curie fellowship. This was towards the end of my postdoc at Oxford, and then I got my current position at Standard Chartered before I heard back from the European Commission on the results of the Marie Curie. It was accepted with a score of 96%, which is something I'm very proud of, and also very thankful to everyone who helped me prepare the submission.
However, it is now clear that I will not be taking that position, as I am settled in London and at Standard Chartered. I still quite like the proposal, though, and, when writing it, I remember having wanted to see examples of successful Marie Curie proposals to have an idea of what they would look like. As such, I'm making the text of my own Marie Curie fellowship application available online. I hope this can help others to write successful applications, and maybe some of its ideas can be taken on by other researchers. Feel free to adapt any of the ideas in the proposal (but please give credit when it is due, and remember that the European Commission uses plagiarism detection software). It's available on my website, and linked below. I made the LaTeX template for the application available before.

José Pedro Magalhães. Models of Structure in Music (MoStMusic). Marie Sklodowska-Curie Individual Fellowship application, 2014.

Sunday, 15 February 2015

Busy week: three new paper drafts!

After a busy week for me and my co-authors, I'm happy to share three new paper drafts.

Generic programming (GP) is a form of abstraction in programming languages that serves to reduce code duplication by exploiting the regular structure of algebraic datatypes. Several different approaches to GP in Haskell have surfaced, giving rise to the problem of code duplication across GP libraries. Given the original goals of GP, the is a rather unfortunate turn of events. Fortunately, we can convert between the different representations of each approach, which allows us to "borrow" generic functions from different approaches, avoiding the need to reimplement every generic function in every single GP library.

In previous work we have shown how existing GP libraries relate to each other. In this paper we go one step further and advocate "hierarchical GP": through proper design of different GP approaches, each library can fit neatly in a hierarchy, greatly minimizing the amount of supporting infrastructure necessary for each approach, and allowing each library to be specific and concise, while eliminating code duplication overall. We introduce a new library for GP in Haskell intended to sit at the top of the "GP hierarchy". This library contains a lot of structural information, and is not intended to be used directly. Instead, it is a good starting point for generating generic representations for other libraries. This approach is also suitable for being the only library with native compiler support; all other approaches can be obtained from this one by simple conversion of representations in plain Haskell code.

Applications which deal with editing of structured data over multiple iterations, such as structure editors, exercise assistants, or applications which support incremental computation, need to represent transformations between different versions of data. A general notion of "transformation" should be more informative than what is obtained by computing the difference between the old and the new term, as diff algorithms generally consider only insert, copy, and delete operations. Transformations, however, may involve swapping elements, or duplicating them, and a good representation of transformations should not involve unnecessary repetition of data, or lose shared structure between the old and new term. 

In this paper we take a detailed look at the notion of transformation on strongly-typed structures. Our transformations are datatype-generic, and thus can be applied to a large class of data structures. We focus on representing transformations in a way that maximally captures the common substructure between the old and new term. This is of particular importance to a specific class of applications: that of incremental computations which recompute information only for the parts of the tree that are affected by a transformation. 

We present a library for encoding such transformations over families of datatypes, together with an algorithm for computing a transformation from one term into another, while retaining shared common substructures. We provide practical examples of how to encode transformations, as well as a realistic application to computing transformations between different revisions of a program. 

The most widely used generic-programming system in the Haskell community, Scrap Your Boilerplate (SYB), also happens to be one of the slowest. Generic traversals in SYB are often an order of magnitude slower than equivalent handwritten, non-generic traversals. Thus while SYB allows the concise expression of many traversals, its use incurs a significant runtime cost. Existing techniques for optimizing other generic-programming systems are not able to eliminate this overhead. 

This paper presents an optimization that eliminates this cost. Essentially, it is a partial evaluation that takes advantage of domain-specific knowledge about the structure of SYB. It optimizes SYB traversals to be as fast as handwritten, non-generic code, and benchmarks show that this optimization improves the speed of SYB traversals by an order of magnitude or more. 

Tuesday, 10 February 2015

I got awarded a Marie Curie individual fellowship!

After over 5 months waiting, I heard back from the European Commission: my Marie Curie Individual Fellowship has been selected for funding! This means two years of funding for research at Utrecht University in my project. In case you're curious, here's an excerpt of the summary of my project proposal:
Music is an art form with a very long history, and continues to engage millions of people today. Music Information Retrieval (MIR), the exciting interdisciplinary science that brings together music and computer science, is a growing field of research with the potential to enrich pure computer science knowledge while creating real-world applications that the general public can benefit from. While the marriage of art and science is often troublesome, MIR has the benefit that many aspects of music are highly structural and have been subject to rigorous formalisation for a long time. Formalisation and computers go hand in hand, and MIR researchers have therefore been developing models of musical structure for many years, and putting them to use in several applications. However, such models, so far, have had limited impact; they are commonly restricted to one specific aspect of music (such as harmony or form), can be hard to implement computationally (due, for example, to the way ambiguity is handled), and are often too technical to be used directly by musicologists who are not familiar with programming language details.
However, models are valuable. Unlike machine learning approaches, model-based MIR provides a real insight about the underlying structure, and can benefit from the input of musicologist experts. Furthermore, a single model can be applied to multiple important MIR tasks (such as retrieval, analysis, and automatic composition). The research goal of this project is thus to give musical models the impact they deserve, advancing the practical embodiment of hierarchical musical structurein its various formsin computer science through the development of new, functional Models of Structure in Music (MoStMusic). Specifically, I intend to develop functional models of musical form, melody, and harmony that enable an easy, fast, and flexible way of creating model-enhanced MIR applications. Being executable, these models will pave the way for true content-based music analysis and retrieval---an underestimated and underexplored area. As a showcase of a model-enhanced application, I will create an online music analyser that automatically computes the structure present in a user-submitted piece, and displays it in an interactive interface that highlights the structural shape of music.