- sugg: go over and delist
- oq tags
- t_sticky tags
- fuxi tags
- Private posts
- Draft posts
- coding: go over github + t_algoClassicProb/t_algoQQ11/t_commonCodingQ22
Use stickers at home, on phone, ….
Example — you programmed java for 6+ months, but you scored below 50% on those (basic) java knowledge question I asked you in skype chat. You only know what to study when you attend interviews. Without interviews, you won’t encounter those topics in your projects.
Example — I used SQL for at least 3 years before I joined Goldman Sachs. Until then I used no outer join no self-join no HAVING clause, no CASE, no correlated sub-query, no index tweaking. These topics were lightly used in Goldman but needed in interviews. So without interviews, I wouldn’t not know to pay attention to these topics.
Example — I programming tcp sockets many times. The socket interview questions I got from 2010 to 2016 were fairly basic. When I came to ICE I looked a bit deeper into our socket codebase but didn’t learn anything in particular. Then my interviews started showing me the direction. Among other things, interviewers look for in-depth understanding of
· Fast/slow receivers
· Buffer overflow
How the hell can we figure out these are the high-value topics in TCP without interviews? I would say No Way even if I spend 2 years on this job.
I’d like to keep the table columns simple.
|2D coding Q||3->5||2018||2D||3|
|tail recursion||0->5||2017||x hours||1|
|big O analysis||7->8||2018||1|
|sorting algo nlg||7->8||2018||x hours||1|
|advanced recursion||3->5||2018||x Days||3|
|whiteboard best practice||6->7||2018||2 days||3|
|shared mem||2->4||2018||2 H||2||coding experiment|
|c++ for coding Q||3->8||2017||10-20 D||2||bbg|
|socket||3->6||17-18||x days||2||thanks to IV, not project|
|noexcept||0->5||2018||1 H||1||Trex IV|
|py basics 4 coding test||3->5||2|
I understand your boss could be pushing hard and you have colleagues around who may notice what you do…. Well, Not much wiggle room for self-study. A few suggestions:
- try to put some technical ideas into the code. I did manage to put in some threading, some anonymous inner classes, some memcpy(), some local byte array buffer into my project, so I get to practice using them. (I understand the constraints of a tight time line…)
- it takes a few minutes to write down new findings discovered at work. I put them in my blog. I also try to spend a little more time later on to research on the same topic, until I feel confident enough to talk about it in an interview.
- I try to identify some colleagues who are willing to discuss technical issues in my project. I try to discuss only when boss is not paying attention. Boss is likely to feel we are taking too much time on some unimportant issue.
If the learning topic is not related to work, then I feel it’s similar to checking personal investment account at work. (In the ICE office now, some employees get a cubicle with 4 walls so they get more freedom than me.) Do your colleagues check their investment accounts at lunch time? I believe they always get a bit of personal time. In GS, on average very roughly 1 out of 9 working hours is spent on personal matters, and the other companies have higher than that. We all need personal time to call insurance, immigration, repair, … The managers might need even more personal time. I would guess at least 60 minutes a day is yours. Question is how to avoid drawing attention. I don’t care that much about drawing attention, so I often print technical articles to read, or read on-line, or blog on-line.
It’s more discrete to write email to record your technical learning. I often send those emails to my blog (email-to-publish) or to my personal email address.
Personal time (be it 60 minutes or 3 hours at some banks) is never enough. We just have to try harder to squeeze a bit more out of the 9 hours. If you are serious about learning in your personal time, then I see two much bigger obstacles
1) family responsibility and distractions
2) insufficient motivation and persistent effort (三天打鱼两天晒网)
In my Singapore years (4.5 years), I felt overwhelmed not by work but family duties, so my weekends/evenings were almost never put to good use for personal learning. I can’t just blame my family members though. I do get quiet time 10.30 pm to 12.30 and many hours on weekends. Somehow, I didn’t put in persistent effort so I didn’t experience significant growth in my technical capabilities.
A very capable colleague was able to do his math research at home and make progress. His wife is probably a full time home maker and takes care of their 3 kids. He is wealthy so he may have a maid and a separate study room at home. However, I feel a more important factor is his persistent effort and focus. A rolling stone gathers no moss. By the way, this same guy runs about 5 miles at least 4 times a week. Determined and efficient. Good time management and correct priorities.
If (a big IF) we are sufficient motivated, we will find time or make time, either the 60 minutes at work, or on trains, or at home, or in Starbucks. In reality, very few individuals have that level of motivation, so I believe some external factors can help, such as (my favorite) —
* jot down some idea in a draft email and do a bit of research whenever I get time to build on the idea, until it’s complete and fairly substantial. Idea could be something I overhead, an idea I’m truly interested in. The learning is mostly in the research but also in the subsequent reviews. If I don’t review the email, I will forget most of it. When I do review it, I not only refresh my memory, but I often discover connections with other things I studied, or find new ideas to learn — 温故而知新. Learning is associative, like growing a spider web.
Action: spend enough (30?) hours revisiting my 1000+ cpp (including socket, stream..) blog posts and explore just a little beyond them.
(I blogged about exactly the same observation before …) Here’s a paradox — i spent 2 years in a full time c# job, arguably longer than my full time c++ experience. However, sometimes I feel I understand dotnet less than C++.
Reason? Many aspects of the languages are never used in-depth on work projects, so length of experience != depth of experience. We need spare time self-exploration to learn those aspects like:
– template meta programming
– custom operator new/delete
– memory tuning
– memory leak detection
– async communications
– pure virtual
– ++i vs i++
(… not a complete list by any measure.) Interviewers are notorious for testing these obscure or advanced, theoretical topics.
We talked briefly about this human nature — no one has that “perfect” will-power, perseverance and persistent motivation, therefore as a result the environment we put ourselves in can help induce a significant personal effort.
Here’s the situation we discussed — you are in a perm job, you won’t feel motivated to keep up interviewing skills. I guess our workload + family responsibilities will “crowd out” any personal study plan to keep learning and stay fit for interviews. (This looks like one example of the boiling frog — a frog won’t jump out of hot water if on a slow cooker.)
I see many examples of this human nature:
- I mention my blog and my github in my resume, so I sometimes worry that prospective interviewers may spot mistakes. That fear keeps me motivated to improve my “published” work. When
I review my work, I often learn something, and I often feel excited that I’m slowly building up a positive “public” profile.
- Without taking my current c++ job, how many (spare time) hours would I be able to put into
c++ self-study? I think average 2hr/week is achievable but not easy. Nowadays I actually put in about 5 to 10 hours outside 9-6 work hours, on my c++ projects.
- In Singapore, my wife can put in some effort to improve English but she doesn’t have time or energy. She finds it difficult to put in the effort. In the U.S. she WOULD indeed put in more effort learning English. On the other hand, many students in China could build a formidable English vocab simply by reading — they have a persistent motivation.
- 30 minutes moderate exercise 5 times a week — is a basic guideline, but I know very few adults actually doing that consistently. I bet when one’s health condition requires that much exercise, there will be more motivation and more effort.
- Once I paid course fees, I routinely put in 30 hours a week on my financial math studies. In theory I could self-study the same, but how many hours would I put in on average over a year? Perhaps 30 minutes/week!
(Most of my examples are about self-improvement and self-motivation. )
NY vs NJ — cost is basically the same my friend, in terms of rent, transportation, food … Most of my friends probably live in New York city suburbs. (I know no one who choose to live in NYC, paying 4% city tax.) My cost estimate is always based on my experience living in NYC suburbs.
The “relief” factor you identified is psychological, subtle but fundamental. It resonates in my bones. It’s a movie playing in my head every day.
In the present-day reality, at my age I probably can still find jobs at this salary in Singapore or Hongkong, with growing difficulties. How about in 10 years? Huge uncertainty. If you were me, you have to take a long, hard look into yourself and benchmark yourself against the competing (younger) job seekers. You would find negative evidence regarding your competitiveness on the Asia financial IT job market. That’s the get-the-job aspect. The 2nd aspect is keep-the-job and even tougher for me. Therefore in the U.S. I make myself a free-wheeling contractor!
As I age, I take the growing job market competition as a fact of life. I accept I’m past my prime. I keep working on my fitness.
On both [get|keep ]-the-job, U.S. offers huge psychological relief. Why? Ultimately, it boils down to long term income (and family cash flow). Since I believe U.S. employers can give me a well-paying job more easily, for longer periods, I feel financially more secure. I will hold meaningful jobs till 65 (not teaching in polytechnic, or selling insurance etc). I can plan for the family more confidently. I could plan for a new home.
There are many more pros and cons to consider. Will stick to the bare essentials.
Singapore offers security in terms of the social “safety net”, thanks to government. Even if my Singapore salary drops by half, we still enjoy subsidized healthcare, decent education, frequent reunions with grandparents, among many other benefits (I listed 20 in my blog..).
Besides, I always remind my wife and grandparents that I have overseas properties, some paying reliable rental yield. Under some assumptions, passive income can amount to $5k/mon so the “worry” my dad noticed is effectively addressed. Another huge relief.
As a sort of summary, in my mind these unrelated concerns are interlinked –
· My long-term strength/weakness on job markets
o coding practice, lifelong learning
o green card – a major weakness in me
· family cash flow
o passive incomes
· Singapore as base camp
Do you notice I didn’t include “job security” in the above list? I basically take job-Insecurity as a foregone conclusion. Most of my friends are the opposite – taking job security as an assumption. This difference defines me as a professional, shapes my outlook, and drives me to keep working on “fitness”.
If I had no kids, I would have already achieved financial freedom and completely free of cash flow concerns. As a couple, our combined burn rate is S$3k-4k/mon but our (inflation-proof) passive income has/will reach that level. Also medical and housing needs are taken care of in Singapore. In reality, kids add S$1k-2k to our monthly burn rate. We are still on our way to financial freedom. So why the “worry”?!
From: ASHISH SINGH
Sent: Thursday, 16 March 2017 8:07 AM
To: Victor Tan
Cc: ‘Bin TAN (Victor)’
Subject: Re: it takes effort to remain in financial IT
That jewish guy and avichal are exceptions . Most of developers struggle and get success by hard work, by spending time with code for atleast 1-2years in any new company. I have not met other fast learners like them. Those are rare to find.
Regarding the worry that your dad always notices , i think this is quite obvious "more money more stress" but yeah this is the right time for you to move to USA where there are plenty of tech jobs . This move will surely give you a shy of relief.
Regarding the cost if living, why would you want to stay in NY , it is indeed costly. How about NJ?
Background — The QQ/ZZ framework was first introduced in this post on c++ learning topics
Focus on tough not ordinary topics in c++ or java.
QQ: By and large, tough topics in job interviews are never needed in projects.
ZZ: By and large, tough topics in work projects (zbs) are never tested in job interviews.
Mutually exclusive =>
- effort (laser energy) I spent on textbook knowledge during job hunt basically hurts my work,
- effort I spent on tough zbs topics for a project very seldom help with job interviews.
Therefore, some optimizing candidate would make the minimum effort to get by on projects, and channel the energy to QQ knowledge or algo challenges.
Update — It would be good to have some measurable yardsticks for GTD competence. Right now the g_GTD_zbs tag includes at least 50 blogs.
XR, (letter sent in July 2010)
Here the goal is not getting the job but keeping the job. You said there’s a difference between a knowledgeable java student and an experienced java developer.
I said I only did java for 3 years.. well maybe 4. I think much of that time I was doing repetitive work, not learning. About half the time (1-2 years) I was learning, by experimenting, reading, discussing, debugging… (I actually learned a lot of java from our long phone conversations.)
I feel if a bright young guy is given a good training project, then in 6 – 24 months he might be able to reach my level of java proficiency.
I also said a lot of young coders could become faster than me with a specific java task after a few months of java learning. Well … an apprentice carpenter could become faster than his master at sawing along a line, but can’t replace the master completely. I feel the hundreds of decisions made each week by an experienced java developer are often based on more experience.
C# is probably same thing – 6 to 24 months to become effective. A very experienced c# friend told me “3 months”. I spent about 6 serious months and another 12 repetitive months on c#…
Venkat, one of the fastest-learning developers I have worked with, said (in Lau Pa Sa) “To get really competent with a new language (like java, c#, python) honestly you need at least one year.” Venkat had the strongest C++ skill I know. I witnessed how he picked up c#. He later struggled a bit with java.
The 64 million dollar question is, what are the really effective learning strategies. I don’t have good answers. Guo Qiao was an advocate of programmer online learning. Some people even suggest taking part in open source projects, to learn from practicing master programmers… I’d love to hear your input.