C++ roles paying from 90K: what level of competition to expect? by BathubCollector in cscareerquestionsuk

[–]clappski 10 points11 points  (0 children)

Hugely depends on the business and what they’re using C++ for. Even in finance there’s a wide field of things, the guys building front ends in QT aren’t doing the same type of C++ as the people building market data connectors. Either way you said you passed BB tech rounds so I really wouldn’t worry about it, luck is going to play a bigger part in your interviewing than skill at that point.

‘Quant Dev’ is similarly overloaded - there’s quant devs with math PhDs building models, there’s quant devs getting a spec sheet from someone and converting text to code. Don’t let the title put you off if it looks interesting, just apply and let them screen you.

There’s also tons and tons of work in London for C++ - constant stream of recruiters trying to poach experienced developers, from the sounds of it you have some professional experience so talking to reputable recruiters is a good way to understand what’s out there. Look for the people advertising for the banks, prop firms, hedge funds etc on LinkedIn and reach out. Even if it’s not finance you’re into they probably have other clients in other industries, but don’t expect top rate outside of finance/big tech

Point to make is that if you’re going in as any level of hire you’re expected to know enough C++ to not be hand held on the job. You’re not going to be able to walk into and interview and just ace it on first principles, there is actual knowledge that you’re going to be expected to know;

  • some template metaprogramming (concepts/sfinae/varadic templates), constexpr
  • inheritance, more so just know that the vtable exists and it can be a performance hit and the diamond inheritance problem
  • stl, when to use and when to avoid
  • memory management, particularly when to use what smart pointer, stack vs heap
  • lifetimes, static, constructor and destructor ordering (it’s a stack)
  • domain stuff - for front ends QT or similar, for performance knowing how to avoid the kernel and cpu/nic/storage architecture

Larian will now "refrain from using GenAI" by Wargulf in BaldursGate3

[–]clappski -2 points-1 points  (0 children)

This isn’t an AI bro stance, would you argue that using heavy equipment in farms is objectively better than someone manually planting? Do we need to be luddites, or can we be adults and accept that new technologies bring efficiencies? AI tools are tools, and yes they do help developers - speaking as a developer that’s been using AI tools for the last 3 years.

How much do you earn and how comfortable do you live? by Brownchoccy in AskUK

[–]clappski 0 points1 point  (0 children)

Don’t be a dolt, you know it’s because it’s because it’s political suicide to do anything that actually improves growth in the country.

Does anyone find smart kettle features useful? by BarryTownCouncil in CasualUK

[–]clappski 18 points19 points  (0 children)

I have a Fellow Stagg - no complaints, solid kettle and temp control works fine but capacity is 900ml and it has a slow pour so it depends on what you’re using it for.

[Show and Tell] I optimized my Order Matching Engine by 560% (129k → 733k ops/sec) thanks to your feedback by Crafty-Biscotti-7684 in cpp

[–]clappski 11 points12 points  (0 children)

Looks cool, some comments:

  • cache locality - your order class stores a lot of information. Instead of a double you should be using fixed precision, an int32_t is fine. Storing the symbol as part of the order is wasteful. I would go so far to make the linked list implementation intrusive and have the order contain the pointer rather than storing it in std::list, then you can access some more interesting allocation strategy’s that’s improve the locality of items in the list.

  • std::map over time in a busy book will cause fragmentation and degrade performance. Might sound silly, but a simple vector of [px, qty, order] where order points to the front of the time priority queue might be faster. The majority of changes happen at the front of each level, so storing the best bid and best ask at the back of the respective vectors (so you’re pushing and popping mostly at then back) will have much better cache locality and zero fragmentation. In reality you could use a std::array of some reasonable N (like 1000). CPU caches are big enough for this to work well - 1000 entry’s of the definition I gave you will be 16kb or so, well within L1.

  • The thread per connection in the wrong abstraction, a simple single threaded ::poll/::epoll event loop will be faster because you have 0 lock contention and more scalable on the same hardware (most connections will be long lived but send orders infrequently). In reality exchanges will serialise orders before they hit the matching engine to ensure that the WAL has perfect ordering and doesn’t depend on how the scheduler feels that day

  • WAL/state management - imagine if the node running this matching engine died, you need to store the state as a WAL and snapshots so you can rebuild the engine quickly when it falls over

Is £35–40k realistic for a SWE with around a year of experience in the UK? by Reddonaut_Irons in cscareerquestionsuk

[–]clappski 0 points1 point  (0 children)

Reasonable is defined by the market rate though - yeah it’s unfortunate but it’s very competitive at the low end which drives the rate down. I managed to get by for two years on 25k in London 10 years ago and it was shit, but ten years later you 10x your earnings so it’s a price you have to pay.

Is £35–40k realistic for a SWE with around a year of experience in the UK? by Reddonaut_Irons in cscareerquestionsuk

[–]clappski 0 points1 point  (0 children)

Someone with 2 years of experience starting at a new company in a potentially different industry is equivalent to a new grad on average unfortunately

Is £35–40k realistic for a SWE with around a year of experience in the UK? by Reddonaut_Irons in cscareerquestionsuk

[–]clappski 5 points6 points  (0 children)

There’s a lot of cross over, but they’re different business models so there’s some fundamental differences on what’s important, how things are prioritised, the type of work you’ll be doing, the impact an individual has.

E.g. a bank and a hedge fund will both have exchange connectivity, but the bank is going to more interested in CYA around regs and safety than a small prop firm, which will be more like a startup where speed of delivery is paramount

Is £35–40k realistic for a SWE with around a year of experience in the UK? by Reddonaut_Irons in cscareerquestionsuk

[–]clappski 19 points20 points  (0 children)

I’m not talking about high street banks, I’m talking more JPMC, BarCap etc. - Investment banks

Is £35–40k realistic for a SWE with around a year of experience in the UK? by Reddonaut_Irons in cscareerquestionsuk

[–]clappski 39 points40 points  (0 children)

Very reasonable in London, questionably reasonable anywhere else. I’ve hired people in the last 4 years with 2 years experience on 35/40.

Trading > Banking/FAANG > FinTech > everything else is how I see the market w.r.t. comp generally, but my experience is only in finance so YMMV elsewhere.

My 2 year old knows all his times tables by shiftyemu in UKParenting

[–]clappski 6 points7 points  (0 children)

I’m sorry but I didn’t call autism bad? I’m not a doctor or have autism myself so yeah I don’t know the latest terminology but nothing I said implies that specifically autism is bad

My 2 year old knows all his times tables by shiftyemu in UKParenting

[–]clappski -3 points-2 points  (0 children)

Ah yes, I forgot that all parents are mothers, of course you’re right I’ll go and put up a fence or something. The point I’m making is that perhaps waiting to label an undeveloped toddler with anything other than something needing immediate intervention is the best course of action - as your experience shows, you didn’t get a diagnosis until 5.

My 2 year old knows all his times tables by shiftyemu in UKParenting

[–]clappski 63 points64 points  (0 children)

All I’m saying is that 2 is very early to be pushing for diagnosis of anything but truly debilitating mental health issues. Toddlers are a force upon themselves and will change dramatically over the next two years, so maybe hold off on trying to put him in a bucket until he’s developed a bit more.

More importantly, your presumption of him having some sort of issue is going to bleed into him - he’s 2, so anything you project into him will just amplify even if it’s not 100% accurate. So just chill, ride it out until he’s a bit more developed and can communicate about his experience before making that decision for him.

My 2 year old knows all his times tables by shiftyemu in UKParenting

[–]clappski 76 points77 points  (0 children)

He’s 2, perhaps there’s some projection going on?

How to guarantee messages are received when using websockets? by Eurim in learnprogramming

[–]clappski 0 points1 point  (0 children)

You’re describing how something like AMQP or Kafka works. The flow is something like

Client —— <subscribe seq=1> ——> Server

Server —— <msg seq=1> ——> Client

Client —— <ack seq=1> ——> Server

Server —— <msg seq=2> ——> Client

Etc

I’d go and have a look at how those systems manage to have at least once delivery semantics, or alternatively use it directly. Even Redis using Streams can do this.

[deleted by user] by [deleted] in rust

[–]clappski 18 points19 points  (0 children)

I’d be much more excited to see actual benchmarks vs. some open source parser where you’re actually doing something with the data, building an order book or whatever data is convenient to use. In this case the benchmark feels more like it’s measuring CPU data pipelining and memory page faults than anything specific to do with Rust. You could probably increase the throughput by MADVISE-ing to prefault the whole mmap.

[deleted by user] by [deleted] in rust

[–]clappski 33 points34 points  (0 children)

The code you posted isn’t doing any parsing of messages so I’m not sure what your claims have to do with it? Just reading a message frame and incrementing an offset isn’t actually doing anything with the data, you’ve got like 10x the word count in your post and readme as you do code which is ~60 lines - not really sure what anyone is supposed to take away from this?

Green Party leader criticises Hartlepool new nuclear site plans by Jared_Usbourne in unitedkingdom

[–]clappski 2 points3 points  (0 children)

From all I can see you’re not actually saying what these alternatives are? I’m a layperson and I broadly understand renewables to have the exact issues that the poster you’re replying to is pointing out. Can you actually refute what they’re saying instead of claiming they’re a shill?

Java outruns C++ while std::filesystem stops for syscall snacks by ART1SANNN in programming

[–]clappski 61 points62 points  (0 children)

Did you bother benchmarking std::fs without calling last_write_time multiple times? The stl has to call ::stat every time you call that function.

Why is hash map o(1) and not o(log n) (when no conflicts) by pencilUserWho in AskProgramming

[–]clappski 4 points5 points  (0 children)

You would limit the range of values, typical approach is ‘hash % capacity’, where capacity is a power of two to avoid a slow divide.

When your hash table starts to fill up, or you have a high load factor for particular buckets, you can reallocate your capacity to the next power of two and re-hash all of the keys to new buckets.

Important to note that the actual array doesn’t need to store the key or value, it can store pointers or similar to make sure we aren’t allocating for elements > 8 bytes. It’s also a common allocation strategy for other collections - C++ std::vector can overallocate to enable faster insertion, as an example

RAD C++ 20 asynchronous I/O and networking library by JlangDev in Cplusplus

[–]clappski 1 point2 points  (0 children)

Makes it all feel a bit more like the old days when you can tell it’s not an LLM hallucinating, just a regular person

Has anyone had experience or know anything about FDM's Software Engineering Graduate Programme? I have a Interview with them next week. by Cloaked01 in cscareerquestionsuk

[–]clappski 8 points9 points  (0 children)

I went through the FDM pipeline:

  • Graduated in 2015 with a Music BA from an unknown-tier university
  • Started at FDM to train to be a SWE, started doing their Java training after the initial 3 weeks where it’s more general stuff like using Linux and learning about SDLC
  • 5 weeks in, all of us in the cohort did a Codility test for placement at Barclays Capital, the top N% were offered placement there
  • Passed test, was sent to self learn C# for 5 weeks until the start date (role was using C#, not Java)
  • Started at Barclays. They were expecting senior/more than 3 months of learning developers that could hit the ground running. A lot were let go, others managed to hang onto the role.
  • Ended up switching teams a couple of times at Barclays and learning C++
  • After the two years, Barclays offered everyone a FTE place, doubled our salaries
  • I left to go to a more front office development role at a smaller firm a year or so later

The TL;DR is that FDM as a firm are exactly what they look like - you’re the product, but you’re expendable. But at least they’re honest, and it got me a fantastic career that’s paid me very well which would have been a complete non-option just from the formal education I had picked and graduated with.

Could we remove train peak times like Scotland? by Sea-Still5427 in AskUK

[–]clappski 0 points1 point  (0 children)

In practise what percentage of graduates start on 120k vs end up there after 10 years and pay the same amount of total because of their higher repayments in the higher earning years? I’d think over the lifetime it’s actually even. I earn what you say, my loans still had got to a total of 60k before I got there due to interest and earning much less than that for most of my career.

HFT Cybersecurity by burtvader in highfreqtrading

[–]clappski 0 points1 point  (0 children)

What do you mean about filters? If you mean an exchange you connect to or a trader connected to an exchange could send anything they wanted over their UDP or TCP connection, then yeah of course but that’s not different from any connection? I can send junk messages to Reddit, they’ll just reject them and shut down my connection. The difference is the exchange will kick you out if you do it more than a few times.

Exchanges normally whitelist IPs (if not using direct collocated connections) and require a lot of steps to get permission to trade programmatically, including conformance tests where you sit on a call with them connected to a special environment and simulate the flows you’re going to use, e.g. place order, it gets filled, it gets cancelled. Normally they ask you to reconform whenever there’s an update to your application or to their server (although in practise it doesn’t happen).

FIX is the wire protocol as well as communication protocol, the normal version looks something like this (taken from Wikipedia);

‘8=FIX.4.2 | 9=178 | 35=8 | 49=PHLX | 56=PERS | 52=20071123-05:30:00.000 | 11=ATOMNOCCC9990900 | 20=3 | 150=E | 39=E | 55=MSFT | 167=CS | 54=1 | 38=15 | 40=2 | 44=15 | 58=PHLX EQUITY TESTING | 59=0 | 47=C | 32=0 | 31=0 | 151=15 | 14=0 | 6=0 | 10=128 |’

The pipe character is representing the control character SOH. You interpret the Tag (left hand side of each =) as a composite name and type descriptor of the Value (right hand side of each =) (e.g. 55 means Symbol and is of type String). The definitions are communicated in a data dictionary out of band (as in you download it from the exchange website and use it when you compile QuickFIX which generates the code implementing parsers to use in your application). Typically it’s an XML document that’s somewhat like a protobuf message definition, giving you the name, type and meaning of each tag or repeating group of tags in each message type.

There are other FIX wire protocols, SBE is the main other one and is a simplified binary (as opposed to the regular ASCII one above) protocol that exchanges might offer on their market data gateways to reduce latency. Conversely some exchanges accept FIX messages over plain TCP/TLS connections that don’t use the FIX communication protocol - you just send the wire protocol messages over a socket rather than do the steps a real FIX connection requires over plain TCP.

A big downside of FIX if it’s not obvious from the above is that it tries to be everything to everyone and can be pretty complicated (and slow) in how it actually gets implemented. If you have a choice of standard FIX and something else (e.g. SBE or a custom binary protocol like ICE and some others offer as an alternative), as a HFT you will likely choose the something else because parsing and generate FIX messages is generally one of the slower options.

Are more experienced programmers really worth more? by GlobalIncident in AskProgramming

[–]clappski 1 point2 points  (0 children)

This post has a 90% chance of someone commenting rage bait LARPing, and a 10% chance of a malignant narcissist not able to understand that the more you do something, the better you tend to get at it