Symmetry investments | London OR remote (European timezone), VISA | Full time | Senior ReactJS developer
I'm Jacques. I'm a senior developer. I don't work in HR, but I'm posting this because I really want to work with talented people.
Symmetry investments is a hedge fund that deals with a wide variety of financial products, but we mostly focus on fixed income. We're building a new web team to build internal tooling. No finance experience necessary. We're a relatively flat organization with minimal bureaucracy. You'll be working with another senior ReactJS developer (myself) and a UI/UX specialist. Since it's a new team, there isn't much legacy code. Everyone is friendly and it's easy to propose new initiatives.
Relevant industry experience: TypeScript/ReactJS experience: 4+ years
Other requirements: Must be living in a timezone between England and Hong Kong OR be willing to relocate to London.
Please apply using this general link (https://jobs.lever.co/symmetryinvestments/c8a9b95e-bdf0-459c...). In the cover letter section, please answer the following question: What is the most technically challenging thing you've implemented in ReactJS and why was it technically challenging? (4 sentences maximum. Avoid buzzwords. Don't mention impact. It will be read by myself.)
Many of my former students had wildly inaccurate mental models so I built a platform that focuses on addressing that particular issue: https://wakata.io
It teaches JavaScript, but most mainstream programming languages have the same semantics. It's particularly challenging because building a good mental model of programming takes a lot of time and effort.
Hi, this is great. A few bits of feedback - let people skip lessons (those variable declarations are very tedious if you know what you're doing).
It would also be good to automatically highlight the value field after creating a new frame variable. It takes about 4 keyboard actions to enter the value which is a bit frustrating. I get the forced restart is helpful for newbies to learn but I also found it a bit frustrating coupled with the interface.
There's nothing wrong with you. Your passion for novelty and learning can be a huge asset in the right environment. There are companies who hire software engineers to quickly build proof of concept prototypes to then throw the prototypes away. You might be a good fit for that. I know Nuance in Montreal has teams that do it.
Also, you might want to consider switching to front end software development if you haven't already. There's always a new framework or library to learn in front end development and the development cycles are shorter.
Whoa, this is pretty cool. People have been trying to do this for ages. If they've been analyzing how people code, they have some valuable data to develop from. I hope they make it!
I once made a programming language with a tree editor: https://youtu.be/w5-g0Hps6bA
I had anyfix operators, so it was possible to write a program that read like english. In fact, I once got someone to write the sqrt function (inspired by the SICP) in Japanese: https://youtu.be/vwgvVpCRecE
I think this is really promising to introduce people to programming. How many times have you heard someone say "programming is so frustrating! I always misplace my semicolon." Also, not having syntax means that people can use DSLs without having the pain to learn its syntax.
Whoa, this is pretty cool. People have been trying to do this for ages. If they've been analyzing how people code, they have some valuable data to develop from. I hope they make it!
I had anyfix operators, so it was possible to write a program that read like english. In fact, I once got someone to write the sqrt function (inspired by the SICP) in Japanese:
https://youtu.be/vwgvVpCRecE
I think this is really promising to introduce people to programming. How many times have you heard someone say "programming is so frustrating! I always misplace my semicolon."
Also, not having syntax means that people can use DSLs without having the pain to learn its syntax.
At the end of the article, the author mentions how we could possibly find other designs of mathematics. Well, some people already have!
Some mathematicians did not like the law of excluded middle, which states that for any proposition A, either A is true or A is false. So they invented intuitionistic logic, which is normal logic without the excluded middle, and started rewriting mathematical proofs in this new system. Turns out there's a lot of stuff you can prove in intuitionistic logic.
Some mathematicians did not like the axiom of choice. One of the consequences of this axiom is that every subset of the real numbers has a least element according to some ordering. Think about it, what is the least element of {1/n : n >= 1} ? Who knows! So what did they do? Some people found it so weird they either replaced it with a weaker axiom or a contradictory one.
There's even syntax arguments in mathematics! What's the derivative of a function f? is it f'(x) or df/dx ? Is multiplication represented by a dot (.) or a cross (x) or by a juxtaposition of expressions?
Sometimes we use big existing proofs in the middle of a proof to save time. And sometimes we use the big proof to prove something far simpler than the big proof. This creates a big dependency and some people dislike hate these dependencies because the reader of the new proof will have trouble understanding the proof completely. It's like dropping in some magic in the middle of the proof and saying: "if you want to understand this proof completely, go read this other 50 page article" Sound familiar? Some mathematicians hate this so much they insist on proving things from the ground up whenever possible so that the proof is as comprehensible as possible. This is the mathematical equivalent of dependency management.
> One of the consequences of this axiom is that every subset of the real numbers has a least element according to some ordering.
An even weirder consequence of AC is the Banach-Tarski paradox [1].
Other examples of how mathematicians come up with alternative
perspectives are non-Euclidean geometries that replace the parallel postulate of the common Euclidean geometry, e.g. Lobachevskian [2] and Riemannian geometry [3].
> There's even syntax arguments in mathematics! What's the derivative of a function f? is it f'(x) or df/dx ? Is multiplication represented by a dot (.) or a cross (x) or by a juxtaposition of expressions?
Those aren't arguments. All of those are very standard things to do.
There's a Spiked Math comic with some good mathematics-engineering trash talk, though, with the mathematicians shooing away a hapless engineer with comments like "do you even know how to spell 'imaginary'?" and "why don't you go jmagine you have friends?" Again, I wouldn't describe this as an area of active debate.
Weirdly enough, I always struggled with advanced syntax, but I recently understood that it was a lack of focus on the abstraction. Kinda like programming languages :)
But that's something you can't really understand when too young.
The point is that there is one ordering in which every subset of real numbers has a minimum.
For the rational numbers, this is not difficult, since we can enumerate the rational numbers. As the ordering we could then pick "a <= b" if the index of "a" in the enumeration is less than the index of "b". The least element of any set of rational numbers is then the rational number with the least index in that set.
However, the real numbers are uncountable. Tricks like this cannot work.
----
The real culprit is the axiom of excluded middle, which confounds the notions of existence and embodiment. Under classical logic it may be proven that P = NP, even though no algorithm actually exists. This already happened for certain graph problems... (=> Graph minor theorem, moving from minor-closed graph property to finite set of excluded minors is essentially non-constructive.)
Without excluded middle, the axiom of choice is exactly as trivial as it sounds: Given a non-empty set, give me an element in that set. In order to show that a set is non-empty you need to give enough information to construct an element in that set. So the proof contains the information to validate the "axiom".
With excluded middle, the proof that a set is non-empty doesn't contain enough information to pick an element from that set. So adding both excluded middle and choice takes you into an axiomatic system whose connection with the real world is rather tenuous.
----
The article is spot on: Not only is mathematics a designed system, but the analogy between programming languages and logic is perfect in view of the Curry-Howard correspondence. Elevating Zermelo-Fraenkel set theory is like insisting that your software project has to be built using Turing machines. After all, everything else is just encoding. There is a huge design space in logics as well as in programming languages. For instance, you can do physics in the setting of synthetic differential geometry and work without preconditions and use theorems which are literally impossible in ZFC.
A soundness proof for a new logic is, by the way, the logical equivalent of building a compiler. :)
Careful, the axiom of choice doesn't state that non-empty sets contain an element (this is a triviality). Rather (an equivalent of) it states that the Cartesian product of non-empty sets is non-empty. If we take a product of finitely many such sets, then we can prove it, but we need the axiom of choice for the infinite case.
The reason is intuitively clear: in order to prove that the infinite product is non-empty, we need to produce an infinitely long vector. Well, since the individual sets are non-empty, we can just for each set choose an element and put it in the vector. But this takes infinitely many steps! and that's not allowed in mathematics. The axiom of choice is a way of collapsing infinitely many steps into 1 invocation of the axiom (so 1 step, so finitely many steps). Not too much to do with excluded middle.
There are many classically equivalent formulations of the axiom of choice, the one I gave is just the one I like best. :)
But you are right, the devil is in the details, so let me spell it out precisely:
The axiom states that for every set X, there is a function
\epsilon : P(X)/{\empty} -> X
If you want to restrict yourself to first-order logic, then you have to encode the function \epsilon (e.g. as a functional relation, where relations are in turn encoded as sets of ordered pairs, which are in turn encoded with Kuratowsky's construction). Set theorists like first-order logic and this encoding overhead is the reason why it's not the standard definition, even though it's arguably what the axiom is trying to express(1,2). Apart from that the statements are (classically) equivalent:
To go from the higher-order version to the cartesian product, note that the cartesian product of an I-indexed family of sets is a set of functions f from I to the union of all X_i's, such that f(i) \in X_i for all i. Let (X_i)_{i\in I} be an I-indexed family of sets, all of which are non-empty, then (i -> \epsilon(X_i)) is in the cartesian product of the X_i's, where we use \epsilon for the union of all X_i's. The reason we couldn't build that element without AC is precisely that we have no way of selecting exacly one element from each X_i, even though we know that they are non-empty.
In the other direction we can use Zermelo's well-ordering theorem to construct a well-order on X. We define \epsilon to pick out the minimum with respect to this order.
(1) This really is what the axiom of choice was meant to express. If you can read German, you can refer to Zermelo's own work:
https://eudml.org/doc/158167
Under point 2 in this paper, Zermelo assumes that there is such a choice function on a given set and from this he derives the well-ordering of that set.
(2) Another example of the drawbacks of working with a first-order axiomatization is the axiom of regularity. The idea we want to express is that there are no infinitely descending element chains ("every set is well-founded"), but expressing this in first-order logic leads to a convoluted statement which obscures the simple idea... and is also not a correct encoding of this idea in intuitionistic logic!
Yup! (I think rathereasy chose an unfortunate example.) The point is that AC implies that there is a way to put an ordering on all of R such that every nonempty subset has a smallest element.
It's easy to find such an ordering for any countable subset -- i.e., one that set-theoretically is no bigger than the integers. For instance, we can do it for all the rational numbers by saying that we order numbers p/q (p,q integers, no common factor, q positive) by converting p/q to 2^signbit(p) 3^|p| 5^|q| or something of the kind, where signbit(x)=0 is what in C you write as (x<0), and comparing the positive integers that result.
It's much harder to see how to do it for all the real numbers. In fact, you provably can't see how, in the sense that there actually is known to be no construction that does it -- no way to say explicitly which numbers to put before which.
(This is a common pattern; cases where you need AC to do something are always ones where there is no explicit construction that does it. That kinda has to be true, because there are models of set theory in which AC is false.)
I would like to add, sometimes mathematicians bring up random variables/constants without explicitly naming or explaining them before. This is very upsetting for someone with a lower level, trying to understand what's going on.
Is there a version of mathematics, somewhere, that don't give you the impression of being snarked upon by an old dude twirling his mustache?
I'm Jacques. I'm a senior developer. I don't work in HR, but I'm posting this because I really want to work with talented people.
Symmetry investments is a hedge fund that deals with a wide variety of financial products, but we mostly focus on fixed income. We're building a new web team to build internal tooling. No finance experience necessary. We're a relatively flat organization with minimal bureaucracy. You'll be working with another senior ReactJS developer (myself) and a UI/UX specialist. Since it's a new team, there isn't much legacy code. Everyone is friendly and it's easy to propose new initiatives.
Relevant industry experience: TypeScript/ReactJS experience: 4+ years
Other requirements: Must be living in a timezone between England and Hong Kong OR be willing to relocate to London.
Please apply using this general link (https://jobs.lever.co/symmetryinvestments/c8a9b95e-bdf0-459c...). In the cover letter section, please answer the following question: What is the most technically challenging thing you've implemented in ReactJS and why was it technically challenging? (4 sentences maximum. Avoid buzzwords. Don't mention impact. It will be read by myself.)