## proliferation → consolidation.. beware of churn

This is an extension of my 2015 blog post https://bintanvictor.wordpress.com/2015/03/31/some-of-the-worst-technology-churns-letter-to-tanko/

Imagine you spent months of serious personal effort [1] learning to use, debug, and tune, say, MongoDB but after this project you only find projects that need just superficial Mongo knowledge. Developer time-investment has no recurring return. I think this is widespread in tech: A domain heats up attracting too many players creating competing products with varying degrees of similarity. We wish these products are mostly similar so we developers’ time investment can help us more than once, rather than learn-n-forget like 狗熊掰棒子. Often it takes decades to see some consolidation among the competitors, when most of them drop out of the race and we one player emerges dominant, or a common standard [2] is adopted with limited vendor extensions.

Therefore I see two phases : Proliferation -> Consolidation. The churn in the early phase represents a hazardous pitfall.

If we invest too much learning effort there we get burned.

  • Javascript packages
  • JVM languages — javascript, Scala, Groovy, jython
    • I don’t even know which company uses them
  • ORM and database access “frameworks”–ADO.net, LINQ, EntityFramework, SpringJDBC,  iBatis,
  • Data Grid and NoSQL — Terracotta, Hazelcast, Gigaspace, Gemfire, Coherence, …
  • MOM — tibco, solace, 29west, Tervela, zeroc
  • machine learning?
  • web app languages
    • php, perl and the LAMP stack
    • Javascript MEAN stack
    • ASP and the Microsoft stack
    • Java stack

[1] You could have spent the time on personal investment, or something else if not required by the project.

[2] Some positive examples of standardization —

  1. RDBMS vendors
  2. Unix vendors
  3. c++ vendors — mostly GCC vs Microsoft VC++
  4. Java IDEs; c++/java/c# debuggers
  5. cvs, svn, git

A few development technologies “free” of proliferation pains —

  1. socket and system programming — complexities are low level and in C not c++
  2. core java
  3. SQL
  4. c/c++
  5. Unix know-how for testing, investigation, devops and process management
    1. shell scripting,
    2. regular expressions
    3. searching
Advertisements

y employers prefers younger workers, a revisit

My neighbor Julius (of Indonesia) said

* younger employees mean lower cost
* more energy
* can map out a 10Y career plan for him

–Below are my own observations and reading.

The younger guys often have more spare time available. Granted, many choose to spend it outside work, but a small percentage (30%?) of the ambitious, dedicated or hard-working individuals would *regularly* and voluntarily spend some of that at work.

For managerial roles, I feel a 30-something can be very effective. The relative short experience may not mean a lot.

For technical roles, the long experience of a 40-something is even less valuable. My own experience is most convincing. At 25 I was more formidable than many of my older colleagues. I was sharp, fast-learning, self-driven, knowledgeable, possibly more experienced than them in a given technology.

In my early 30’s, my capabilities were seen as more formidable more outstanding , like 90 marks.

As I grow older, even if I don’t grow weaker, there are many younger guys at 90 marks. Even if we ask the same salary, 90 marks is no longer so outstanding.  Given two 90-mark candidates at 35 vs 45, I think most employers would prefer the younger since he is seen as “more promising” and rising star.

##some of the memorable technology churns #tanko

Tanko

Here’s my expanded list of “worst” tech domains in terms of technology churn. Nothing but personal bias. For every IT professional, it’s his or her personal responsibility to identify these domains, and perhaps avoid investing (too much) into them.

  • —- not ranked
  • java generics QQ knowledge is a fad compared to c++ TMP
  • Object-oriented perl
  • javascript toolkits
  • GWT
  • silverlight
  • Gemfire, Coherence …
  • ADO.net
  • EJB, Weblogic
  • struts, spring integration
  • functional programming
  • Windowing GUI technologies – X-windows, PowerBuilder, Delphi, Borland c++, …
  • perl — is slowly being displaced by python, though bash scripting is robust
  • Javascript libraries like node.js, angular, jquery, GWT
  • ORM — product proliferation
  • MOM products — products proliferation like tibco, solace, 29west, Tervela, zeroc …
  • datagrid and noSQL — products proliferation
  • high-level integration
    • SOA, microservices?
    • web services, REST
    • EJB, RMI, RPC
    • JMS
  • anything to do with big data —
    • Map reduce? I hope Hadoop remains the standard
    • cloud?
    • machine learning — product proliferation
  • Web app development in general —
    • java web development including struts
    • Microsoft web development
    • PHP? I hope this is a bit more stable, but there are definitely new packages gaining popularity
  • anything on Windows
    • Powershell seems to challenge vbscript.
    • Windows administration – there seem to be many new utilities added every 5 years, replacing the old
  • anything on mobile
    • WAP
    • SMS based apps — used to be so popular in zed’s heydays
    • WindowsPhone, Symbian

–churn-resistant, robust techonologies

  • C/C++
  • C++ key libraries — STL, boost
  • socket, tcp/udp
  • Unix admin (relative to Windows admin) and scripting
  • core java i.e. at the core layer
  • SQL complex queries
  • DBA
  • Messaging architecture?
  • FIX
  • async architecture
  • http

 

labels: cope^pain^threat^GTD

I would say choose one among

gzCope, gzPain, gzThreat, GTD

In rare cases, use simultaneous categories.

Also, the relevant posts in the pripri/open blogs, I feel better move to this blog and mark them private. Easier to manage in one place.

GTD is more specific than Cope. In a sense, all GTD posts are also part of Cope but actually Cope is more about job market, moving up, choosing specializations.

oldest programmer in a team, briefly

I’m unafraid of being the oldest programmer in a team, for example in China or Singapore, as long as I’m competent. If my foundation is strong and I know the local system well, then I will be up to the challenge. It takes an amount of effort to gain the local system knowledge though. Consider GS, Citi, OC, Stirt and CFM.

More than half the times, contractors aren’t required to  gain that much local system knowledge.

Actually, Can be fun and stimulating to work with young programmers. Keeps me young. My experience might add unique value, if it’s relevant.

I can think of many Wall St consultants in this category.

[14]technology churn: c#/c++/java #letter2many

(Sharing my thoughts again)

I have invested in building up c/c++, java and c# skills over the last 15 years. On a scale of 1 to 100%, what are the stability/shell-life or “churn-resistance” of each tech skill? By “churn”, i mean value-retention i.e. how much market value would my current skill retain over 10 years on the job market? By default current skill loses value over time. My perl skill is heavily devalued (by the merciless force of job market) because perl was far more needed 10 years ago. I also specialized in DomainNameSystem, and in Apache server administration. Though they are still used everywhere (80% of web sites?) behind the scene, there’s no job to get based on these skills — these system simply works without any skillful management. I specialized in mysql DBA too, but except some web shops mysql is not used in big companies where I find decent salary to support my kids and the mortgage.

In a nutshell, Perl and these other technologies didn’t suffer “churn”, but they suffered loss of “appetite” i.e. loss of demand.

Back to the “technology churn” question. C# suffers technology churn. The C# skills we accumulate tend to lose value when new features are added to replaced the old. I would say dotnet remoting, winforms and linq-to-sql are some of the once-hot technologies that have since fell out of favor. Overall, I give c# a low score of 50%.

On the other extreme I give C a score of 100%. I don’t know any “new” skill demanded by C programmer employers. I feel the language and the libraries have endured the test of time for 20 to 30 years. Your investment in C language lasts forever. Incidentally, SQL is another low-churn language, but let’s focus on c#/c++/java.

I give C++ a score of 90%. Multiple-inheritance is the only Churn feature I can identify. Template is arguably another Churn feature — extremely powerful and complex but not needed by employers. STL was the last major skill that we must acquire to get jobs. After that, we have smart pointers but they seem to be adopted by many not all employers. All other Boost of ACE libraries enjoyed much lower industry adoption rate. Many job specs ask for Boost expertise, but beyond shared_ptr, I don’t see another Boost library consistently featured in job interviews. In the core language, until c++11 no new syntax was added. Contrast c#.

I give java a score of 70%. I still rely on my old core java skills for job interviews — OO design (+patterns), threading, collections, generics, JDBC. There’s a lot of new development beyond the core language layer, but so far I didn’t have to learn a lot of spring/hibernate/testing tools to get decent java jobs. There is a lot of new stuff in the web-app space. As a web app language, Java competes with fast-moving (churning) technologies like ASP.net, ROR, PHP …, all of which churn out new stuff every year, replacing the old.

For me, one recent focus (among many) is C#. Most interesting jobs I see demand WPF. This is high-churn — WPF replaced winforms which replaced COM/ActiveX (which replaced MFC?)… I hope to focus on the core subset of WPF technologies, hopefully low-churn. Now what is the core subset? In a typical GUI tool kit, a lot of look-and-feel and usability “features” are superstructures while a small subset of the toolkit forms the core infrastructure. I feel the items below are in the core subset. This list sounds like a lot, but is actually a tiny subset of the WPF technology stack.
– MVVM (separation of concern),
– data binding,
– threading
– asynchronous event handling,
– dependency property
– property change notification,
– routed events, command infrastructure
– code-behind, xaml compilation,
– runtime data flow – analysis, debugging etc

An illuminating comparison to WPF is java swing. Low-churn, very stable. It looks dated, but it gets the job done. Most usability features are supported (though WPF offers undoubtedly nicer look and feel), making swing a Capable contender for virtually all GUI projects I have seen. When I go for swing interviews, I feel the core skills in demand remain unchanged. Due to the low-churn, your swing skills don’t lose value, but swing does lose demand. Nevertheless I see a healthy, sustained level of demand for swing developers, perhaps accounting for 15% to 30% of the GUI jobs in finance. Outside finance, wpf or swing are seldom used IMO.

skill devaluation in IT^finance

I experienced/witnessed a few waves of skill devaluation in IT sector, but I feel financial skill is different.

– web master, apache admin
– microsoft certified, cisco certified
– unix admin winnt admin, exchange admin
– perl hackers
– ASP, cold fusion
– network security professionals
– EJB
– structs

I think these skills either fell out of fashion or devalued to commodity skill. I feel any young or old techie can pick up each of these in a few months. In-depth knowledge is usually not required on the job.

Now compare with

– complex SQL against lots of tables
– socket
– time-series database
– low latency
– market data
– quant library
– bond math, option greeks, IRS pricing
– monte carlo
– stress test, scenario test
– VaR
– trade booking
– PnL

finance tech is non-mainstream in techland (elite)

Update – Si-Valley also need elites – small number of expert developers.

Financial (esp. trading) IT feels like an elite sector – small number of specialists
– with multi-skilled track record
– familiar with rare, specialized tools — JNI, KDB, FIX, tibrv, sockets, sybase
– Also, Many mainstream tools used in finance IT are used to an advanced level — threading, memory, SQL tuning, large complex SQL

If you compare the track record and skills of a finance IT guy with a “mainstream” tech MNC consultant, the finance guy probably appears too specialized.

That’s one psychological resistance facing a strong techie contemplating a move into finance. It appears risky to move from mainstream into a specialized field.

#1 evidence managers seek when keeping/terminating a consultant

update — Shuo (and others) suggests that boss relationship overrides all other performance metrics including productivity, but I feel Wall St is slightly different in terms of Salary and time-to-market.  If you get things done on time it really helps boss’s promotion.

I think boss relationship means the non-objective, non-measurable, non-quantitative evaluations of a consultant.
—-
Q1: What do managers look at when keeping/terminating a consultant?
A: Note Some consultants are hired on prod support budget, but majority of consultants are hired on project budgets, so let’s focus on the latter. The key question in this case is

Q2: Can this guy implement required *functionalities* on time, so business can use them on time? Note it’s all about *business-value* [1]. Requires a, b, g but not c, d, f below

a) Familiar with current codebase in the system. You need to spend enough time in a given system. Every site is different. No portable knowledge.
b) practical java/sql/unix know-how. also eclipse, javascript, cvs, html practical know-how.
c) code quality — code smells like “copy-paste”. Managers don’t care about this.
d) test coverage
f) advanced knowledge of java/sql/threading/GC/collections …. — completely irrelevant to Q2 above. Managers don’t care about this.
g) code readability, if team lead worries about taking it over personally

[1] When managers ask (or present) progress updates, they prefers high level terms, so they could estimate 40% (or whatever) of the required “business value” are now achieved. The higher you hit the management rank, the more you need to communicate in terms of business value, time left, time spent, additional manpower needed …

When a critical project needs to be done on time, many managers prefer consultants because consultants don’t take fake sick leaves or “family leaves”, don’t go to trainings, and are generally experienced.

Managers generally feel FTE are here to stay. Consultants and FTE are equally mobile job hoppers, but consultants are more subject to budget cuts. This factor has a profound influence. I have seen or experienced budget cuts affecting consultants in Verizon, GS, and other companies.

young, productive developers #GS

Regarding my young GS colleague … He learns the production codebase very fast, so

* he can understand, in-depth, how and where all those complicated logic is implemented in production system
* he can understand what users mean, which is usually condensed in very terse emails, or quick phone calls
* he can quickly come up with quick solutions
* he knows what test scenarios are extremely unlikely so we need not handle them or test them
* he is faster navigating the code base from java to perl/shell scripts, to stored proc and big queries, to autosys and javascript, where business logic lives.

(I was weaker on all these aspects, for a long time.)

He’s more confident fixing existing codebase than architecting a rewrite. Limited experience. In this aspect, employer would see limited value in him.

##feeling like 滥竽充数 among trading developers #letter to friends

(another blog post. No need to reply.)

Working in trading system [1], every now and then i feel like 滥竽充数. If i ask myself

Q: if i benchmark myself among java developers with 5+ year experience in trading, are the majority higher than me?

i can’t categorically say YES. A lot of them are not obviously better than me. For one thing, I feel most of them aren’t battle-tested in demanding places like Goldman Sachs;) However, some of the trading developers I see are more experienced than me on several technical fronts below, and are faster [2]. However, as stated in my post on “perl defensible turf”, 5 years in trading doesn’t mean you know threads or MOM (for eg) inside out.

* threading — idioms and implementation techniques, and to a lesser extent, design techniques. Devil in the details. Compared to other developers, i place more emphasis on low-level implementation skill. If you want a competent and productive[2] threading developer, test her implementation skill, not architecture.
* MOM ie messaging
* data grid
* trouble-shooting MOM, serialization, Spring
* trouble-shooting eclipse. I single out this one as the most frequent weakness and most neglected area.
*** (For a balanced perspective, I should point out I rate myself above average on Unix, SQL and scripting. In fact i had a recent “debate” with a younger java developer with narrower experience than me. He is less comfortable putting complex biz logic into queries and procs.)

Bottom line ==> If i were to lead a team in S’pore, I had better catch up.

[1] I feel lucky this is a mainstream wall street trading system rather than a no-name trading house with a cheap, home-made system.
[2] trading systems are more fast-paced than anywhere i know including telecom, media, manufacturing, dotcom, e-government, healthcare… Managers really do benchmark developer productivity.

competition from the young and foreigners

可能你觉得比同龄同行同学更动荡, 但他们有一天面对挑战可能没你表现得好, 因为他们没经历过风风雨雨.

当然也可能有的人没经历过却也能应付自如, 判断比你还准.

也有可能他们运气好, 不会被裁退. 我本人不想运气,我不能允许自己依靠公司提供一个铁饭碗.

高屋见/嶙/?, 总的来说, 面对外来者的挑战, “迎”比”避”有一些益处.