No one has quizzed me but am curious how is the cloning done on a large container.
- c++ (and c#) is /conceding/ market share to java, partly due to the two categories above. Apparently, java is growing more dominant than before. I guess java is more proven, better supported, by a bigger ecosystem and have bigger talent pool. In contrast, c++ skill is harder to find in Singapore?
- Overall good news for me since my java arm is still stronger than c++ arm
- remote hiring — more Singapore teams are willing to hire from overseas. Lazada said “mostly over skype”
- Many non-finance companies now can pay 150k base or higher for a senior dev role. In my 2015 job search, I didn’t find any
- Many smaller fintech companies (not hedge funds) can pay 150k base or higher
- contracts becoming slightly more common
- lighter-blue-collar — programmer used to be blue-collar support staff for the revenue staff. Some of the companies listed above treat programmers as first-class citizens.
Reality warning — every time I try the SG job market, recruiters would tell me there are so many “new” employers or new markets, but invariably, i need to focus on the old guards .. mostly ibanks, as the new market is not open to me. This is similar to Deepak, Shanyou trying the wall St c++ job market.
I must stop /romanticizing/ about the “improvement” in SG job market.
- Singapore tech shops are mostly not keen about my profile. U.S.? Not sure.
- Singapore fintech shops ? zero interest shown, even when I asked 150k
- Singapore buy-sides are interested but way too selective and kinda slow.
- Note except GS I didn’t try the ibank jobs this time round.
Basically no change in the landscape since 2015. The jobs available to me are mostly ibanks. Cherish the MLP job but beware attachment. If this job goes sour, I would have to consider WallSt, rather than another perm job in SG.
As explained in 3rd effect@volatile introduced@java5 ,
- writing a volatile variable is like exiting a synchronized block, flushing all temporary writes to main memory;
- reading a volatile variable is like entering a synchronized block, reloading all cached shared mutables from main memory.
http://tutorials.jenkov.com/java-concurrency/volatile.html has more details.
https://stackoverflow.com/questions/9169232/java-volatile-and-side-effects also addresses “other writes“.
I think java could deliver similar latency numbers to c/c++, but the essential techniques are probably unnatural to java:
- STM — Really low latency systems should use single-threaded mode. STM is widely used and well proven. Concurrency is the biggest advantage of java but unfortunately not effective in low-latency.
- DAM — (dynamically allocated memory) needs strict control, but DAM usage permeates mainstream java.
- arrays — Latency engineering favors contiguous memory arrays, rather than object graphs including hash tables, lists, trees, or array of heap pointers,,. C pointers were designed based on tight integration with array, and subsequent languages have all moved away from arrays. Programming with raw arrays in java is unnatural.
- struct — Data structures in C has a second dimension beside arrays – namely structs. Like arrays, structs are very compact, wasting no memory and can live on heap or non-heap. In java, this would translate to a class with only primitive fields. Such a class is unnatural in java.
- GC — Low latency doesn’t like a garbage collector thread that can relocate objects. I don’t feel confident discussing this topic, but I feel GC is a handicap in the latency race. Suppressing GC is unnatural for a GC language like java.
My friend Qihao commented —
There are more management barriers than technical barriers towards low latency java. One common example is with “suppressing gc is unnatural”.