The only reason to change such job I can imagine is to sit out your non-compete package. But I am not in this industry so maybe I’m missing something.
> It never sat well with me. Colocated systems saw latencies no mom-and-pop investor could ever dream to achieve. That is one of the reasons why the second company I joined was a non-profit that built systems to help track human rights violations, enforce labor rights, monitor democratic elections etc. Third job was in the food industry and the last one, in housing / property management. So I'd like to think I've made sufficient amends.
Ah, nevermind. Turns out they were worshipping Memnon with C++ and renounced that cult with web tech! :p
I also worked at an HFT C++ shop that used no STL. Every data structure has a weird name and API that you get used to. The whole architecture has its own idioms, and hasn't needed much upgrading in terms of language features.
Imagine you learn the grammar of English. You learn how to pluralise nouns, when to put an s at the end of a verb, how to to use commas, and so on. You then go to work at a place where they have a different word for coffee, drink, and order. Along with every other word. You end up learning where everything is and how to talk about it, and you're productive.
How do you apply for another job? Chances are you will be asked how to order a coffee and drink it.
Very real issue btw, I still have friends there.
Getting rid of weird data structures that now have STL analogs then is a productive exercise - existing devs get to learn more STL and new devs have more familiar ground. You get to delete code too.
There's at least one in the bay area though.
I'm not sure if that's intentional humour or not.
At that level of abstraction it’s all just strings
Exactly... I worry about the masses learning of this and gaining literacy over the landed gentry.
PHP/CGI basically had it solved. I emulate PHP in .NET6 today using verbatim and interpolated string operations.
If you walk into web dev with aggressive principles and a willingness to be controversial, you can get a lot of shit done and it will feel great. Watching others struggle under the various JS framework circuses has almost an opulent/aristocratic vibe in 2023.
Then I felt like I could spend my whole career there and decided there was a whole world out there in the web, began to learn PHP in 2004 until the mythical "blog in 5 minutes" Rails demo appeared. I switched jobs in 2007 and I have never looked back.
If you have access to key systems, you can definitely reverse-Conway to understand how an organization really works.
https://en.wikipedia.org/wiki/Conway's_law
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
— Melvin E. Conway
Hard to be productive when you can't trust the language, the tools, or other developers to be correct.
Would love to know of more spaces which require this level of programming - usually I feel kinda underworked at most shops.
Though, true enlightenment is combining the urge to NIH with some, light, sensible borrowing from those smarter than us :) very much a key skill unto itself.
Join us, the pay is worse and the work is harder, but also the prestige is lower.
I tip my hat to you!
I'm very roughly estimating that you could probably have worked in the HFT job for around two-thirds the time you're going to have spent working on generic web tech, and still been better off.
For someone who had wanted to stay an IC, I don't think the move would have been quite as wise. Being in a niche, engineer-dominated environment, and being paid extremely well for it, is nirvana for many lifelong ICs. It certainly feels very different from the experience of Arthur from the linked article.
EDIT: I'll reply to my replier here because /u/Dang rate limited me (again), though I must commend him for letting me have one more comment than usual before he pushes the button ;)
> I would say the ending -- the part where you are unemployed and unable to support yourself in your old age because you invested decades of your brainpower into a highly specialised, non-transferrable skill.
I would contend that such a person, unless very reckless with finances or extremely underpaid, should have enough money saved up to make what is mentioned there very unlikely. That said, I know some high-income earners struggle to not blow their entire bank account each month
In that case, if web development is your interest, then you have many possible paths.
The primary choices are full stack, backend, or frontend.
Obviously full stack is most flexible because you can theoretically do it all. But keeping up with so many technologies simultaneously is really tiring.
Take a look at Phoenix framework. It is a fantastic way to get started, and it will grow with you into just about any future project need. Plus Elixir is an excellent language built on top of the incredibly powerful Erlang ecosystem.
Even in a bad code base you can start making things better, apply modern techniques and learn new things.
Also most of the skill you gain there is transferrable. E.g. just because you have to work with some legacy PHP project, it doesn't mean that you would suck at creating modern applications in JS. It would just take a couple of weeks to get use to it.
All th bad codebase I've seen were a result of fossils who are still with the company gatekeeping anyone from fixing their code.
A few years ago, I had one architect stubbornly refuse to use source control, rejected all PRs that didn't use his homegrown buggy C++ libs for strings, refused to let anyone do the http server bits unless they used his C++ server and so on.
If there isn't a gatekeeper, you wouldn't have the bad codebase in the first place.
I disagree; working on a legacy PHP project isn't just opportunity cost (failing to sharpen your knife), it's actively harmful (leaving the knife in salt water, accelerating the rust).
Start saving now.
I'm sure he could learn STL (standard C++ library) in a fraction of time it would take someone else to become proficient in C++ in general.
My mother was a COBOL developer and didn't work for 20 years because she stayed home. She recently returned to her old bank she worked for because they are dragging people out of retirement as they can't find anyone else. She earns more than I do now.
People are crazy to give a job like that up for generic web dev work.
I think it's fair to say this skill difference is largely from that work in the C family, where I learned a number of different paradigms for design and development in that world, with all its footguns and low-level "gotchas". It has always been easier for me to parse and understand others' code, identify subtle bugs, to use debugging tools, and to identify some optimizations by examining the code that others might spend days using profilers to find.
Some of that would come with engineering experience in general, regardless of languages used, but not all of it, but I picked these skills up faster and earlier in my career, thanks to that early work. Skill with C++ is definitely transferrable, in at least some cases.
Ouch. Should have stayed in legacy C++.
As God intended it!
Because that's what a lot of people think online. Maybe it's more nuanced. I'm curious how someone from that carreer sees it?
It is to help the super-rich who own hedge funds to frontrun the rich upper-middle-class people with significant disposable income.
When you have a market, you need someone to be there to provide liquidity. Imagine if you're a farmer and you show up to the market with your wheat, but all the bakers have gone home that day. Or the baker shows up and there's no farmer. The market maker stands around all day offering to buy and sell so that you don't have to wait for the guy you're really trading with. Of course this middle man wants to get paid for it, but your cost as an average Joe is next to nothing. This is trading in time.
Now imagine you want to cook a meal and your ideal meat is beef, but actually you're ok with pork, so long as the pork is cheap enough to make it worth it. How much cheaper should it be? Well your fellow who knows all the pork and beef people will be able to gauge where the balancing spread is, given the amount of interest. In fact he will from time to time do the trade when the spread is out of line. This is trading in space.
So why all the fancy tech? After all market makers used to stand around in a pit in a colored jacket, and they didn't have degrees. My first boss in the market was one of these guys.
Well, things have gotten very tech heavy because as soon as prices are out of line, there is money to be made. Or rather, lost. As a market maker, you are constantly out there with your prices, offering to buy or sell at a very small spread. If some news happens that affects prices in a big way, you can be sure that you will buy when it's going down and sell when it's going up. In order to both have tight prices and avoid this "adverse selection", you really want to be able to react as quickly as you can when your system decides that something's up.
Getting back on topic, being a software developer for an HFT shop can be a lot of fun: serious technical challenges and a rapid feedback loop in a role where you may be the revenue stream rather than just another cost center. But posters highlighting NIH syndrome are spot on: you risk pigeonholing yourself.
You don't have to be that old to remember how terrible the experience used to be, and how easily even sophisticated individuals were ripped off at every point of the process.
I guess I'm not old enough. What was the system like? How did sophisticated traders get ripped off?
> and it would save them billions per year.
This is not true.
HFTs do not take a cut out of the market, their cut comes 100% from other market makers. Those are the only folks who would benefit from eliminating HFTs, and unless you’re one of them, who cares?
I don’t care who buys when I am liquidating a position. That’s the whole point of a market. Therefore I don’t care about HFTs.
The aim of the game is to collect a small spread on a lot of transactions.
The scary thing for an HFT like that is being 'run over' by a big party selling or buying a lot over a day. If a pension fund is dumping 10٪ of their holdings of shell, it's hard to collect a spread because you need to find buyers for every stock you buy from them. Meanwhile the price is dropping as they sell off.
Hence you occasionally see 'front running' with price improvement. Instead of buying from the market at 1.02 a HFT gets to sell to you at 1.01, yielding you a better price. This is a good deal for the HFT, because a normal person isn't going to run the HFT over. And it's a good deal for the normal person because they get a better price.
Good for you I guess?
I can't fathom willingly entering the web mines if you've already sunk in the hours to master high perf native code, OSdev, dist systems etc. People usually enter web to avoid having to learn such things.
To discard that knowledge and instead compete with an endless stream of fresh grads, boot camp grinders and LLMs for less money? A madness if I've seen one.
Web tech is more immediately rewarding. With C++ (and especially with modern web dev agile processes), you can spend a week building enough framework and infrastructure crap to stand up the barest inkling of a demo of the solution you plan to implement, only to have the whole thing pivot out from under you and become wasted work.
More complicated languages and frameworks that manage memory and do UI and everything for you let you get to a prototype much faster, so you can see whether it'll work or whether you want to toss out the idea much sooner.
It's not hard to find feature support or implementation differences between browsers. But these days, that's not really the problem. I can go read the ES language specification, and generally find user agents/node/deno/bun have compliant implementations.
The problem is brittle "ecosystem" stuff. How are the create-react-apps going? How is module bundling going amidst the UMD/CJS/ESM war?
If you want interesting, go to HPC large scale simulation.
Even if the decision he made was a bad one, you don't know anything about why it made sense for him at the time.
People aren't algorithms running in complete isolation and silence. They live in nuanced circumstances you can't possibly understand by his short history in a comment.
I hope you can find understanding and peace in the future.
same fate
> I'd like to think I've succeeded.
possibly not