Using words and numbers, am trying to “capture” my perceptions (intuitions + observations+ a bit of insights) of the c++/java job market trends, past and future. There’s some reality out there but each person including the expert observer has only a limited view of that reality, based on limited data.
Those numbers look impressive, but actually similar to the words — they are mostly personal perceptions dressed up as objective measurements.
If you don’t use words or numbers then you can’t capture any observation of the “reality”. Your impression of that reality  remains hopelessly vague. I now believe vague is the lowest level of comprehension, usually as bad as a biased comprehension. Using words + numbers we have a chance to improve our perception.
 (without words you can’t even refer to that reality)
My perceptions shape my decisions, and my decisions affect my family’s life chances.
My perceptions shape my selective listening. Gradually, actively, my selective listening would modify my “membrane” of selective listening! All great thinkers, writers update their membrane.
Am not analyzing reality. Instead, am basically analyzing my perception of the reality, but that’s the best I could do. I’m good at analyzing myself as an object.
Refusing to plan ahead because of high uncertainty is lazy, is pessimistic, is doomed.
Based on my speculation, hypothesis, imagination and a tiny bit of observation.
Majority of the effective, efficient, productive tech professionals don’t work long hours because they already earn enough. Some of them can retire if they want to.
Some percentage of them quit a big company or a high position, sometimes to join a startup. One of the reasons — already earned enough. See my notes on envy^ffree
Most of them value work-life balance. Half of them put this value not on lips but on legs.
Many of them still choose to work hard because they love what they do, or want to achieve more, not because no-choice. See my notes on envy^ffree
Is there an oth risk? Comparable to MSFM, my perception of the whole experience shapes my outlook and future decision.
- Not much positive feedback beside ‘providing new, different viewpoints’, but Josh doesn’t give positive feedback anyway
- should be able to come back to MS unless very stringent requirement
- Josh might remember Victor as more suitable for greenfield projects.
- I think Josh likes me as a person and understands my priorities. I did give him 4W notice and he appreciated.
- I didn’t get the so-called “big picture” that Josh probably valued. Therefore I was unable to “support the floor” when team is out. The last time I achieved that was in Macq.
- work ethic — A few times I worked hard and made personal sacrifices. Josh noticed.
- In the final month, I saw myself as fairly efficient to wrap up my final projects including the “serialization” listed below
Q: I was brought in as a seasoned c++ old hand. Did I live up to that image? Note I never promised to be an expert
A: I think my language knowledge (zbs, beyond QQ) was sound
A: my tool chain GTD knowledge was as limited as other old hands.
Q: was the mvea c++ codebase too big for me?
A: No, given my projects are always localized. and there were a few old hands to help me out.
I had a few proud deliveries where I had some impetus to capture the momentum (camp out). Listed below. I think colleagues were impressed to some extent even though other people probably achieved more. Well, I don’t need to compare with those and feel belittled.
This analysis revealed that Josh is not easily impressed. Perhaps he has high standard as he never praised anyone openly.
- * I identified two stateless calc engines in pspc. Seeing the elegant simplicity in the design, I quickly zoomed in, stepped over and documented the internal logic and replicated it in spreadsheet.
- * my pspc avg price sheet successfully replicated a prod “issue”, shedding light into a hitherto murky part of the codebase
- * I quickly figure out serialization as root cause of the outage, probably within a day.
- * I had two brave attempts to introduce my QOT innovation
- * My 5.1 Brazil pspc project was the biggest config project to date. I single-handedly overcame many compilation (gm-install) and startup errors. In particular, I didn’t leave the project half-cooked, even though I had the right to do so.
- I make small contributions to python test set-up
- coding rounds — not as hard as the 2011 FB interview — regex problem
- Eric gave positive feedback to confirm my success but perhaps other candidates did even better
- No miscommunication as happened in the VersionedDict.
- 2nd Indeed interviewers failed me even though I “completed” it. Pregnant interviewer may follow suit.
- data structure is fundamental to all the problems today.
- SDI — was still my weakness but I think I did slightly better this time
- Career round — played to my advantage as I have multiple real war stories. I didn’t prepare much. The stories just came out raw and hopefully authentic
- the mini coding rounds — played to my advantage as I reacted fast, thanks to python, my leetcode practice …
So overall I feel getting much closer to passing. Now I feel One interview is all it takes to enter a new world
* higher salary than HFT
* possibly more green field
* possibly more time to research, not as pressed as in ibanks
A facebook interviewer asked me “I agree that python is great for coding interviews. When do you choose c++?” I said
- when I need to use template meta programming
- when I need a balanced tree
Now I think there are other reasons
- when I practice socket programming
- when I practice memory mgmt techniques — even java won’t give me the low-level controls
- when I parse binary data using low-level constructs like reinterpret_cast, endianness conversion
- when I practice pthreads — java is easier
I didn’t showcase c++ but I felt very confident and strong about my c++, which probably shined through in front of the last interviewer (from the architect team)
I think my c++/python combo was good combo for the FB onsite, even though only one interviewer noticed my c++ strength.
Why bother — I spend a lot of time accumulating zbs, in addition to QQ halos and localSys GTD
I have t_zbs99 and other categories/tags on my blogposts showcasing zbs (真本事/real expertise) across languages. Important to recognize the relative insignificance of zbs
- #1 QQ — goal is mobility. See the halo* tags. However, I often feel fake about these QQ halos.
- #2 GTD — localSys or external tools … goal is PIP, stigma, helping colleagues. Basic skill to Make the damn thing work. LG2 : quality, code smell, maintainability etc
- #3 zbs — goal is self-esteem, respect and “expert” status. By definition, zbs knowledge pearls are often not needed for GTD. In other words zbs is “Deeper expertise than basic GTD”. Scope is inherently vague but..
- Sometimes I can convert zbs knowledge pearls to QQ halos, but the chance is lower than I wished, so I often find myself overspending on zbs. Therefore I consider the zbs topics a distant Number 3.
- Zbs (beyond GTD) is required as architect, lead developer, decision makers.
I also have blog categories on (mostly c++) bulderQuirks + syntax tricks. These knowledge pearls fall under GTD or zbs.
–high churn high expectation is worst but I have no first hand experience
- devops – churn due to integration with automation tools
- xp: Barcap?
–low churn high expectation
- xp: Macq quant-dev domain
- xp: PWM: SQL + Perl + java
- xp: Qz
–high churn low expectation (low caliber)
- xp: dotnet at OC
- mediocre web shops
–low churn low expectation is ideal
- xp: RTS socket + mkt data
- xp: citi muni: bond math + coreJava
- xp: mvea
Q: what things can derail my work-till-75 plan. Let’s be open and include realistic and theoretical factors.
- A: I think health is unlikely to be the derailer. In contrast, IV competition, age discrimination are more likely. The ruthless march of technology also means demand for my skillset will decline..
- A: mental health? Look at GregM at RTS. See other blogposts on brain aging.
- A: On the job, my energy, absorbency and sustained focus might go down (or up) with age. I wrote more in another blogpost — As I age, brown-field localSys will become harder to absorb. I may need to stay at one system longer.
- On the other hand, if offered the chance to convert from contractor to FTE, I may need to resist and possibly move out.
- A: On interviews, I think my QQ knowledge will remain competitive for many years.
- A (pessimistic view): green field vs brown field — as I age, my capacity to handle green field may go down. My speed to learn brown field codebase may also go down but after I learn it, I may be able to retain the knowledge.
- A1: #1 derailer is demand for my skills. In fact,
beside doctors, Wall St tech might be one of the most enviable domains for work-till-70. Note “tech” also includes BAU, sysAdmin, projMgr, productMgr and other support functions.
- A1b: Based on the rumor that west coast is more competitive and age-unfriendly, then the techies there in their 40’s may have more difficulty to remain hands-on like on Wall st. I have a natural bias towards WallSt contract market. If confirmed, then Wall st is better for older programmers.
- I think the west coast salary would continue to stay high for a few years
- I may see more examples of older programmers (like me) getting nice offers on the west coast.
- I am sure to see more friends (in their 30’s) getting nice offers on the west coast.
- Even in Singapore, there are a few west coast shops including Google and facebook.
- Rich startups are always attractive to me. I was told some of them use similar coding tests.
Above are the “evidence” that I would see over the next 24 months. But how would I react to them?
Fundamentally, I feel confident I can improve on the algo and coding tests, if I work hard and keep up the effort. Internal locus of control. Self-efficacy
Fundamentally, I always want to stay relevant to the tech economy and various job markets. I never want to be sidelined.
You mentioned the lack of personal time. Big challenge. Another challenge is new job where I must work extremely hard to survive. First X months I would focus on new job and kids. Once I have some free cycles, I will try to resume coding drill.
I don’t know how, but I hope to find a bit of time each month (not each week) working on some challenging questions, or at least review some old questions.
Mithun asked me “So you are now completely pro in c++?” I replied
- On-the-job technical challenges are not very different from java
- On interviews the QQ topics are different. That’s the real challenge for a java guy moving into c++.
Now I feel a 3rd element is zbs beyond GTD and interviews. I have written many blogposts about “expert”. I also have many blogpost in the category “c++real”
Some may say c++ is overshadowed by java, and c++ QQ is overshadowed by coding IV. Well, we need sharper perception and judgment, and recognize the many facets of the competitive landscape. I won’t elaborate here, but c++ has withstood many waves and is more robust than many other technologies.
In west coast IV, I have no “unfair advantage” as the employers are open to all.
In contrast, on Wall St IV, I have an unfair advantage in the form of
- accumulated IV xp
- accumulated dnlg — mostly the architecture and best-practices
- track record .. employers prefer battle-tested
Until I left GS, I didn’t know how it feels to “conquer” a sizable, lucrative tech skill. Such a tech skill represents a specific job market with supply and demand.
- perl? not sizable not lucrative 😦 Until 2011, Perl was my only core competency 😦 How lucky am I now !
- coreJava QQ (as defined on WallSt) .. was my first conquest. After this conquest I haven been trying to replicate my success story, while many peers stayed in one firm in order to move up.
- SQL? Many interview topics not explored, but now SQL is no longer a sizable job market:(
- MOM? Not sizable
- sockets? not so sizable, not yet conquered
- bond math … was a small conquest
- c++ QQ .. was my 2nd conquest, as experienced in 2017 onward
- CIV .. was my 3rd conquest. Growing bigger, though I only rate myself B among west coast candidates.
Sunil is not the only one who tried but failed to break into java. Sunil was motivated by the huge java job market. I believe he had opportunities to work on (probably small) java projects and gained confidence, but that’s really the easy part. That GTD experience was completely insufficient to crack java interviews. He needs IV traction.
- Zhurong also tried java
- [g] Venkat actually got a java job in SCB but didn’t like it. I feel he was lacking GTD traction
- [g] XR and the Iranian java guy had some c# projects at work but didn’t gain traction.
- CSY had a lot to tell me about breaking into java.
- [gi] CSY and Deepak CM both had java projects at work but no traction
- [i=IV traction]
- [g=GTD traction]
IV/QQ traction — I experienced better IV traction in c# than c++. I think it’s because half my c++ interviews were HFT shops.
I feel mostly we as candidates are assessed on technical not domain knowledge.
Q: Among your past job interviews which one had the highest emphasis on dnlg? In the interview, which one of the 3 dnlg categories? Usually math I would assume.
I over-invested in dnlg, relying on it to stand out and differentiate. Well, it’s not “reliable” as a competitive advantage just as SQL/Unix skill isn’t such a selective screening criteria. In contrast, I would say about half of my job interviews had highly selective tech screening.
- eg: west-coast
- eg: HFT shops
- pure algo challenge — About 30% are tough, including a few west-coast challenges
- whiteboard threading — easy for me, but 60% hard for most guys
- online tests — MCQ (30%) or coding (80% hard)
- interactive coding, remote/onsite, whiteboard/IDE — 70% are tough
- core java/c++/c# knowledge — 50% are tough
Q: name the most strategic trySomethingNew domains that I have since abandoned, given up, quit. How about the new plan to take on coding drills as a lifelong hobby?
Don’t spend too much time, because the answers are nothing new even though this is a decent question.
- — ranked by surprise
- algo trading? actually very few roles spread across a number of firms
- drv pricing quant
- real time risk as in GS, Qz and Athena
- RDBMS tuning
- MOM, async, message-driven design knowhow
- distributed cache like Coherence and Gemfire
- Solaris sys admin and DBA
- perl, SQL, Unix/Linux power-user knowledge? No longer a top 10 focus
- python? Not yet abandoned
- web dev for dotcom? I did this for years then abandoned it. Many of the tech skills are still relevant like sessions, java thread safety, long-running jobs
Note cgroup is also usable beyond jvm and Docker, but i will just focus on jvm running in a Docker container..
Based on https://jaxenter.com/nobody-puts-java-container-139373.html
CPU shares are the default CPU isolation (or sharing??) and basically provide a priority weighting across all cpu time slots across all cores.
The default weight value of any process is 1024, so if you start a container as follows q[ docker run -it –rm -c 512 stress ] it will receive less CPU cycles than a default process/container.
But how many cycles exactly? That depends on the overall set of processes running at that node. Let us consider two cgroups A and B.
sudo cgcreate -g cpu:A
sudo cgcreate -g cpu:B
cgroup A: sudo cgset -r cpu.shares=768 A 75%
cgroup B: sudo cgset -r cpu.shares=256 B 25%
Cgroups A has CPU shares of 768 and the other has 256. That means that the CPU shares assume that if nothing else is running on the system, A is going to receive 75% of the CPU shares and B will receive the remaining 25%.
If we remove cgroup A, then cgroup B would end up receiving 100% of CPU shares.
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/sec-cpu has more precise details.
https://scoutapp.com/blog/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups compares q(nice), cpulimit and cgroups. It provides more precise info on cpu.shares.
cpulimit can be used on an existing PID 1234:
cpulimit -l 50 -p 1234 # limit process 1234 to 50% of cpu timeslots. The remaining cpu timeslots can go to other processes or go to waste.
see also exposure: semi-automatic(shallow)Accu #$valuable contexx and low-complexity topics #JGC..
- –(defining?) features (actually limitations) of superficial exposure
- accu — (except bash, sql) I would say very few of the items below offer any accu comparable to my core-c++ and core-java accu
- entry barrier — (except SQL) is not created since you didn’t gain some real edge
- commodity skill —
- traction — spinning the wheel
- JGC — i think most guys have only textbook knowledge, no GTD knowledge.
- lockfree — most guys have only textbook knowledge
- [e] spring, tibrv — xp: I
used it many times and read many books but no breakthrough. In-depth knowledge is never quizzed
- bash scripting — xp: i read books for years but only gained some traction by writing many non-trivial bash scripts
- SQL — xp: 5 years typical experience is less than 1Y@PWM
- –other examples (beware oth)
- [e] EJB, JPA (hibernate), JMS, Hadoop(?)
- memory profilers; leak detectors
- design patterns — really just for show.
- [e] Gemfire
- java latency tuning — is an art not a science.
- Poor portability. JVM tuning is mostly about .. GC but at application level, real problem is usually I/O like data store + serialization. Sometimes data structure + threading also matter receives disproportionate limelight.
- conclusion — superficial, textbook knowledge in this skillset probably won’t help with latency tuning.
- [e=ecosystem like add-on packages outside the core language.]
Ecosystem skills are hard to enable deep learning and traction as employers don’t need deep insight. GTD is all they need.
I won’t put on “t_gzPain” or t_stress as these factors are not stressors in my career! The opinions below are valid based on “their” personal experiences not my experience. As such, I should NOT overthink about these.
- Daniel Yan of RTS cited the effect of imposed deadline by exchange
- Several IT friends cited the fire-fighting mode
- CSDoctor said in some companies like Huawei, there was an unhealthy culture of long office hours, eroding family time, but i think this is rare nowadays.
2 heaviest work stressors provides a incisive introduction to the same topic.
I tend to believe that “high performance” teams tend to emphasize GTD, intensity (“productivity” and “efficiency”) … remember Macq’s Kevin. He is highly efficient and he feels’ I’m not productive enough even though there’s no one else to compare.
However, my Barcap workload was not so heavy but high-impact 🙂
My conclusion at beginning and end of this analysis — figure-things-out faster than team colleagues is still the primary determinant of stress/respect/stigma.
I’m biased towards java.
I feel c# concurrency is less impactful because most of the important concurrent systems use *nix servers not windows, and most concurrent programming jobs do not go to windows developers.
Outside windows, c++ concurrency is mostly based on the C library pthreads, non-OO and inconvenient compared to java/c#
The c++11 thread classes are the next generation following pthreads, but not widely used.
Java’s concurrency support is the most successful among languages, well-designed from the beginning and rather stable. It’s much simpler than c++11 thread classes, having only the Thread.java and Runnable.java data types. More than half the java interviews would ask threading, because java threading is understandable and usable by the average programmer, who can’t really understand c++ concurrency features.
Numbers are just gut feelings, not based on any measurement. I often feel “300% more complexity” but it’s nicer to say 30% 🙂
- in terms of interview questions, I have already addressed in numerous blog posts.
- see also mkt value@deep-insight: java imt c++
- — tool chain complexity in compiler+optimizer+linker… The c++ compiler is 200% to 400% (not merely 30%) more complex than java… see my blogpost on buildQiurks. Here are some examples:
- undefined behaviors … see my blogposts on iterator invalidation
- RVO — top example of optimizer frustrating anyone hoping to verify basic move-semantics.
- See my blogpost on gdb stepping through optimized code
- See my blogpost on on implicit
- — syntax — c++ >> c# > java
- java is very very clean yet powerful 😦
- C++ has too many variations, about 100% more than c# and 300% more than java
- — core language details required for GTD:
- my personal experience shows me c++ errors are more low-level.
- Java runtime problems tend to be related to the (complex) packages you adopt from the ecosystem. They often use reflection.
- JVM offers many runtime instrumentation tools, because JVM is an abstract, simplified machine.
- — opacity — c++ > c# > java
- dotnet IL bytecode is very readable. Many authors reference it.
- java is even cleaner than c#. Very few surprises.
- — more low-level — c++ > c# > java.
- JVM is an excellent abstraction, probably the best in the world. C# CLR is not as good as JVM. A thin layer above the windows OS.
## checklist@tsn #engaging provides a checklist but here’s a FRESH look, which may not be so in-depth, balanced, and comprehensive.
Q: Hypothetically, knowing what I know now, beside
c++ and python, which trySomethingNew bets would I have chosen in 2010, after GS?
- mkt data and sockets
- forex, equities, options, IRS — I like the well-defined body of dnlg as entry-barrier. I learned it fast 🙂
- trading engine dev including pricing, OMS, connectivity
- risk analytics?
- big data including hadoop, cloud etc?
- — not-so-great
- c# — heavy investment, a lot of legwork but insufficient ROTI
- MOM and Gemfire — shrinking demand
- swing? Fun but very poor job market
- quantDev? extremely disappointing job market
- HFT? entry barrier too high
You don’t need to reply. This is my periodic review of “everything in my life”.
I have recently implemented a few controversial decisions about my career, investment, family..
(As an example, the biggest is moving back to U.S. alone and starting the green card process.)
I make major decisions carefully and slowly (unless decisiveness needed), but an observer may say I’m not a good decision maker and point out my track record. Actually I don’t remember anyone pointed them out, not even my family members. The person who point a finger at my “unwise” decisions is the “judge” in my head…
Here are some of those controversial decisions
- I will not give up Singapore citizenship, and I will retire in Singapore, relying on the Singapore government for my retirement. Singapore system is much more caring and efficient than China or U.S. systems.
- I plan to work till 70 or older, perhaps for a token salary. I will keep up my interview skills.
- I feel my relationship and communication skills are not my strengths so through a series of trials-and-errors I have decided to stick to a technical career.
- I’m staying in Bayonne, planning to buy my first home here. The schools are just above average.
- I have always preferred home locations that doesn’t need a car.
- At age 44 I decided to leave my family in Singapore and come to the U.S. to start the GC process
I now feel the quant domain knowledge doesn’t change so fast, but ..
1) Quant domain is an elitist, exclusive sector with low market depth (highly specialized).
I think many intelligent/powerful developers can succeed as a quant dev, even without formal quant training, if motivated or interested enough. Abilities + effort (due to keen interest) is all I needed when I succeeded at Barcap
Not a semi-retirement domain. When you lose the mental power (Re A.Brooks) you better get out from this hot domain.
2) The high salary + analytical complexity + limelight attracts bright young people. Bright young people tend to be innovative, even when there’s no such necessity
3) see my blogpost ruthless march of technology
There are many valuable observations below, but let’s not spend too much time polishing…
- self-esteem regained — in tech IV/GTD, after 5Y bleeding self-confidence #
- coding tests — continues to spread. I improved progressively, gained traction — I even find it enjoyable.
- dnlg — all 3 domain knowledge categories are losing weight in interviews. Note half my recent interviews are outside ibanks.
- my c++ competence (esp.sockets) finally gained
traction, thanks to the interviews.
- rise of west coast salary level. U.S. tech job market didn’t lose steam. U.S. geek economy continues to grow
- Tristate housing — school-district housing is more expensive than I thought, but Edison/Bayonne can be quite affordable
- ! java remains robust and dominant in ibanks. c++ is robust too. There are still many c++ roles in U.S.
- [c] concentration window — proved to be extremely important to my learning, career planning and reflections. Parenting and household chores are real drags.
- [c] my peers didn’t “leave me in the slow track”. Most of them are still regular developers. I guess they can’t move up unless they were already in a lead role by age 35
- “strategic technology bet” — is thoroughly discredited, through repeated introspection
- [c] ibanks interviews — (including coding IV) continue to play to my advantage, after 5 years
- [c] Java QQ continues to feel natural to me… I didn’t lose most of my java QQ strength…
- [c] aging developers — I see good examples in Shubin, Paul, Shanyou, Alan, Daniel, Kam, Pinsky, John etc
- U.S. high-end contract rate — has grown from $90 to $110
- start-ups — There are many interesting start-ups both in U.S. and Singapore, able to pay.
- retire — I have decided to retire in Singapore not U.S. I see my Singapore citizenship as a huge strategic advantage over my Chinese/Indian peers.
- [c] wife was competent at her job and continues to keep the kids in the current condition without deterioration
- [c] kids — my daughter didn’t become alienated; my son didn’t get out of control.
- [c] I continue to take unpaid leaves to learn from interviews
- mkt data — enjoys growing demand and I gained traction more than I gained a new defensible territory.
- quant career and math aptitude — broken dream. Disillusioned. deep pain
- U.S. investment yield is typically 6%, higher than what I observe in Singapore.
- [c] ibanks didn’t reduce IT budget or go offshore as some predicted
- [c] HFT — is robust
- c++ demographics — mostly older
- apps and coding jobs … (in the global economy) are becoming more important, more wide-spread than I anticipated.
- [c = continuation, but unexpected]
- long service, moving-up attempts failed 3 times in SG. Self-esteem damaged each time due to damagedGood.
- Next time I get into a perm job, I will not try so hard
- c++ visible progress was slow; c# visible progress was faster but abandoned
- .. minor setbacks
- MSFM poor ROI. See tabulation
- FSM and trading as a side project and new direction? Unwhelming exprience… didn’t realy bear fruits
Now I feel such failed attempts are part of life for everyone unless you don’t make any attempt. It’s irresponsible to avoid reviewing those unsuccessful attempts, but let’s not be too fixated on the negatives.
symptom — array filled up beyond limit of 1024 .. Undefined Behavior, often crashing entire process, but no guarantees.
This “m_activity” array is a process-wide singleton, holding ALL active tcp/udp socket descriptors (each an int id). Every time we close a socket we are supposed to remove its id from the array, and shift all “upper” elements down.
Sometimes a connection can drop unexpectedly.
What’s this array for? We iterate this array frequently for timer events. We don’t but could use select() to monitor a bunch of sockets.
I found that when we reconnect after an unexpected disruption, we were not following a proper sequence
* check if connected
* if disconnected, then remove the socket id from the array
* upon success, append the new socket id to the array
Due to bug, in a unstable period, usually at start of day, we could drop connection and reconnect many times, and fill up this array within the first hour (often within minutes).
Hard to reproduce.
Be careful with the assessment — perhaps I was not so productive on my past US projects
Be careful with the assessment — perhaps I was not so un-productive on the q3SG projects
Consider deleting this blogpost completely.
Pattern – Barc, ML … were java, my turf
… but Citi was java as well. My java skill did help, but I didn’t make use of my strongest java skills.
… but at GS, Perl was my turf too. My Perl experience did help but the colleagues were too strong.
Pattern – Barc, ML … not many peers to compare with me
… but Chien was a direct peer. I think Rao also.
… but later stage GS, I was benchmarked
Pattern – OC, … familiar with the codebase
… but OC codebase was rather big.
… but Stirt codebase wasn’t big.
Pattern – GS, OC … spent long time on the existing codebase. In contrast, Creating code from scratch is easier. … but Stirt was code from scratch
(I want to keep this blog in recrec, not tanbinvest. I want to be brief yet incisive.)
See 3 ffree scenarios: cashflow figures. What capabilities enabled me to achieved my current Comfortable Economic profile?
- — top 3
- by earning SGP citizenships
- by developing my own investment strategies, via trial-n-error
- by staying healthy
- — the obvious
- by high saving rate thanks to salary + low burn rate — efficiency inspired by SG gov
- by consistent body-building with in-demand skills -> job security. I think rather few of my peers have this level of job security. Most of them work in one company for years. They may be lucky when they need a new job, but they don’t have my inner confidence and level of control on that “luck”. Look at Y.W.Chen. He only developed that confidence/control after he changed job a few times.
When I say “Comfortable” I don’t mean “above-peers”, and not complete financial freedom, but rather …
easily affordable lifestyle without the modern-day pressure to work hard and make a living. In my life there are still too many pressures to cope with, but I don’t need to work so damn hard trying to earn enough to make ends meet.
A higher salary or promotion is “extremely desirable” but not needed. I’m satisfied with what I have now.
I can basically retire comfortably.
This classification helps me organize my java learning, but let’s not spend too much time on this imprecise concept —
So-called “java ecosystem” is anything outside the “core java” stack and include jxee plus ..
- GC, JIT
- swing, AWT
- ajax integration
- tools: eclipse, Maven, CI tools,
- tools: JDK bundled tools like jhat, visualvm
jxee (esp. web java) is fashionable … high growth, big job pool
- –in terms of churn resistance and shelf life .. jxee << core java
Q: Is there some jxee component with stable demand and accu? Spring? Servlet is very relevant from 1999 to 2019 but not quizzed in IV!
- –in terms of project LOE … core java =< jxee
Some developers are afraid of the unique challenges  in core java, but I’m more afraid of complexities in jxee packages esp. when combined in non-standard combinations. See my blogpost on python routine tasks and my blogpost on spring.
 threading, latency, collections .. but I don’t want to elaborate here.
- –in terms of IV body building and entry barrier, jxee < core java < cpp. I struggled with cpp IV for years but was able to crack c# IV within 2 years.
Without enough evidence, I feel jxee skills are less elite, easy to self-study, and shallow until you hit project issues.
- –In terms of salary, jxee = core java = cpp .. I was proven wrong! Even though c++ and core java IVs are arguably harder and more elitist, they don’t pay higher than jxee jobs.
- –in terms of market depth+size, cpp < core java < jxee
No need to experiment at home or read books like I did on JMS, EJB, Spring. It takes too much time but doesn’t really give me …
- best examples: temporary sickness; quarrel; deadlines; tools broken
- relocation stress
- investment foes
medium-horizon concerns (roughly 1Y++ horizon)
- PIP — mgr’s assessment; stigma vs respect from team; figure-things-out speed benchmark; coworker benchmark
- immigration issues — #1 concern of Deepak CM
- FOLB — peer comparison
- kids’ academic competitiveness
- stagnation, wasting my “potential” — no longer a major stressor
5Y++ long-horizon concerns
- retirement planning
- kids’ well-being beyond benchmarks
- employability and income stability
- competence in job^interview; beat-fronts
- Some peers at my age worry about own health but I’m free from that worry.
Combine with https://bintanvictor.wordpress.com/wp-admin/post.php?post=24064&action=edit ? no need… Don’t spend too much time! I keep this list only as motivation and reward, but I don’t want a long list. I want heavy-hitters only, non-exhaustive.
Note “Take-up/Conquest” mean … I now feel as competent as my interviewers on that topic.
Note QQ means … hard topics unneeded in any project.
- RAII+swap(), the killer combination, in the sports sense of “kill”
-  sfinae
-  crtp
- covariant return type and virtual ctor i.e. clone()
- static_assert? Non-trivial for those uninitialized with TMP
-  alternative to virtual functions
- singleton thread-safety
-  heap memory mgmt strategies
- [3d] make_shared benefits and limitations (Scott Meyers)
-  shared_ptr concurrency
- [d] Common mistakes involving shared_ptr
- weak_ptr vs raw ptr
- unique_ptr ownership transfer, reset^release
- factory returning smart pointers
- [d] emplace employing perfect forwarding
- [d] naturally occurring temp objects vs const ref and RVO
-  just when std::move() is needed .. see email to CSY
- std::move usage (outside big4)
- [d] rval objects vs rvr
-  placement new
-  MI using Abstract Base Classes
-  TCP congestion control
- TCP OOS control
- non-blocking socket functions
- — topics to be conquered
-  TCP resend
- TCP buffer sizing
[3=top-33 favorite topics among ibank interviewers]
[d=reached some depth of understanding]
See posts on time allocation. Those things I overspent time on tend to be what defined me.
Income alone is never an item. Instead, “Earning capacity due to …..” is often one of the defining features.
In This list I prefer one-word items.
- till high school, what defined me was nothing but
- simple focus and
dedication, driven by academic ambition
- NUS ( grades became mediocre even though I worked very hard towards Dean’s list )
- academic ambition -> commercial ambition
- 1999 – 2002
- wizard — salary (due to my wizardry) was high but gradually became just about average
- 2002 SCS – …
- 2007 – 2012
- IV — in java, c++, swing, dnlg … became my killer skill
- tech zbs — (“GTD”? No) zbs was my focus even though i was not really outstanding
- Aug 2012 – Apr 2017. Focus was
finally lost. I became “interested in” many other things
- wealth preservation, income maintenance — became the #1 undercurrent
- MSFM was part of “income maintenance” effort
- properties became the main part of wealth preservation and retirement planning
- (alternative income source (rental, per investment, trading) — became a temporary focus and never get big)
- I also defined myself as a dedicated and serious father to Yixin, not really hoping to produce a prodigy, but to shape his character and habits, and help him find his motivation.
- IV and tech learning
- continuous push to go deeper, further and increase zbs
- low burn rate, conserver lifestyle
Hope to regain motivation and
sharpen focus on c++, exchange conn and grow another “wing”
Q: what efforts go towards 20Y-career building?
A: instrumentation in c++(java is a bit more churn); socket programming; STL internals; JVM internals; shell scripting; pthreads; FIX; linux internal?
This question is slightly vague, but it’s subtly different from
Q2: what efforts create social value over 20Y?
Q3: what efforts are cumulative over 20Y?
I feel the key question in this write-up is about building a deep and broad “foundation”, upon which we can start to plan (possible) social value, retirement planning, parenting/family building etc.
- 😦 teaching and research —- Somehow I tend to feel research creates long-term value but I suspect most research efforts are not valuable!
- 😦 open-source software —- I tend to feel OSS projects create social value, but most of them are not successful and have no lasting influence
- 😦 Deepening your domain knowledge such as (German’s) security lending —- It does increase your value-add to some employers and help you move up to management, but I don’t call it “foundation”.
- MSFM and other formal training —- I feel this is less effective, more ivory-tower, but it does build a firm theoretical foundation.
- fitness and health .. more important than I feel (as shown by my action)
- zbs such as instrumentation skills? Yes zbs helps your KPI, and also indirectly helps you with interviews. It’s portable skill, unlike local system knowledge. Can the value last 20Y? Depends on the technology churn. c++ and java are safer.
- IV muscle building? My favorite career building effort. 20Y? 10Y yes.
- English/Chinese writing and vocab
Title is lousy. No point improving it.
I /aced / killed / thrived at/ many games. Most visible and most profitable game in this list is tech IV, including
- 1a) branching out to c# and c++
- 1b) quant self-study to impress many technology interviewers
The above topic already has many many posts in this blog. Below are other games I excelled in:
- excellent grades up to college Year 1
- paid off multiple rental properties + my own home, by age 43. All in good locations with reliable rental demand.
- Earned MSFM with flying colors at age 42 — sustained focus, self mastery
Some domains are not really competitive “games” but still I excelled visibly:
- no belly (as Nick pointed out); weight loss in late 2018, along with pull-up. Jogging habit.
- keeping burn rate very low, and achieving some form of ffree around age 30 and again at 43
It’s instructive to recognize the pattern.
- I think in each game, I had some talent, and a long-term consistent effort.
- External positive feedback is far from powerful , immediate or frequent, so internal motivation is crucial.
- All are individual games, not team games. Note promotion is not my game and I don’t need to kill this game to be comfortable and satisfied.