Please Do Not Be a One Trick Pony
jacquesmattheij.com
jacquesmattheij.com
A "one trick pony" literally has only worked in one environment/technology but it doesn't imply expertise. An "expert" is someone that the rest of world looks to for guidance in a particular area.
Being the latter is quite valuable, but don't kid yourself, unless you are in the top 0.001% or at least "internet famous" for a given topic, you are not an expert. You are a "one trick pony".
As a for instance, I've spent quite a few years doing low latency JVM work. I can reasonably assume that when I meet a new JVM developer that I am more competent in this topic than they are. But that said, I'm not even the best person at this that I personally know and have worked with. I am no where near an "expert" in this. If I wanted this to be my value add, I would need to spend a lot of time and energy going from competent to expert.
Instead, it is one of many skills I have in my toolkit that helps me acquire new skills and add value to new domains.
That still isn't enough. Until you invest in the branding/marketing aspect, it doesn't matter how good you are, you will never be considered an expert by those who aren't experts themselves. That's the people who hire and pay experts.
Don't worry about being better than everyone you know. You're the expert, obviously you know people who are better. But potential clients don't. They probably don't even need someone who's better than you. You can solve their problem while a "better expert" is busy doing something else.
Most niches will gladly handle more than a single person serving that niche.
You don't need to be "in the top 0.001%" to be seen as an expert, and I think you underestimate how easy/valuable it is to become known on the internet ("internet famous"?) as an expert on a narrow topic. Let alone how easy/valuable it is to become known in specific real life professional circles.
At one point I completely accidentally and without any deliberate effort became known as an "expert" in a certain technology in a certain mid-size city, which led to a lot of work. I probably wasn't even in the 50%. I wasn't a "one trick pony" in the sense Jacques means either, I was just doing what people were paying for - I didn't even like it.
The people making money writing pure html in the early 90's who are still employed mostly didn't move on to writing systems code in C or business logic in Java, they learned css, javascript, and/or Flash and kept making web sites for clients. The ones who managed to keep charging high rates did that by always being just in front of the curve on 'hot' technologies.
"How are you different to X?"
"My company has IP that addresses all 20 areas of business, and I work as part of a team so I can ship in a specialist if need be.
"X is great at following the bouncing ball to give you a marketing plan - if you have revenue issues, they will sell you a marketing plan; if you have culture issues, they will sell you a marketing plan; if you want to exit your business for the highest valuation in 2 years, they will sell you a marketing plan.
"When you only have a hammer, every problem looks like a nail. They only have a hammer, so you'll never be able to trust them when they diagnose your problem as a nail. A nail which needs a marketing plan."
-----------------------------------
s/marketing plan/ruby on rails
s/ruby on rails/julia
s/julia/.NET
When I became a marketing consultant, I made a decision to never sell marketing plans. When I worked at an agency, I would cringe when we delivered 100-page (and more) marketing plans because I knew not a single word of it would be read, let alone implemented.
Still, people are out there selling these plans, and whatever are the generic equivalents in programming. Which is why your line is probably very effective.
Always be yourself. Unless you can be a unicorn. Then always be a unicorn.
Technology lasts a surprisingly long time and not everybody needs to keep jumping on the new hotness.
Staying still can be fine, if you know what do bet on. A fast moving target like HTML is just not a good bet. Get on board of a tech entrenched in the enterprise world and you can probably make a good living for many years to come.
I wonder whether it could be lucrative to learn COBOL (and CICS!) and work on those legacy systems that are still out there.
"While CICS has its highest profile among financial institutions such as banks and insurance companies, over 90 percent of Fortune 500 companies are reported to run CICS along with many government entities." - Wikipedia
You won't be able to work with Web/Embedded/Mobile. Your developments will probably be "new report at bank" or "fixing new bugs"
So, unless you learn other stuff, it might get you the money but it's probably something veery boring (even more boring than your corporate CRUD app)
I have interesting hobbies and am happy to do boring work in exchange for the better pay and working conditions and more free time to spend on my hobbies and family.
True. See game companies
Of course there's a whole spectrum between "boring" and "cool", and even games have some very boring parts
Though, my experience may be unique since we're an ISV, not a business apps shop.
Now I assume the folks that made it through that either through persaverance, luck or skill have a pretty good niche gig. But lots and lots of people had trouble.
Obviously he didn't mean simply knowing one language or framework and no others whatsoever but rather that for contract work companies are looking for people that are highly specialized to come in for a very short period of time.
A Full-Stack Super Ninja Developer is still a good thing to have on payroll but you're going to need some temporary guys that know one part of your stack inside out, especially at scale.
Especially when someone finds a way to automate a solution.
I think Valve described the 'T' employee: know one area very deeply and a broad range of others reasonably well. Seems to be a good approach :)
Maybe another way of looking at what your friend said is to just be specific about your skills/experience when job seeking?
Happens in soccer a lot - teams with really versatile players will usually get whipped by teams who have specialists in each position. Top teams aim for squads with 2 players for every position, not 2 positions for every player.
Hope that makes sense, it's getting late here :)
But in our industry, what is been automated away? The only things I can think of are that if you were an expert, you'd be very well placed to leverage that automation.
"I feel like getting a mysql dba job so my resume will portray me as a mysql DBA one tricky pony because I'm sick of writing Perl backends and Scala CRUD at this instant and don't feel comfortable enough with Clojure for paying work"
vs
"OMG I really am a one trick pony who only knows one thing that being mysql"
That said, being a professional Clojure developer, I was surprised by Rich Hickey's advice on mastery [0], and think he likely has a point. The happy point is probably the classic 'T' advice - lots of broad experience with different languages, paradigms, etc., with enough deep, deep experience in one or two to be incredible at reasoning and execution.
[0] Could only find this gist - https://gist.github.com/stijlist/bb932fb93e22fe6260b2
Other companies aren't comfortable enough to allow me to do backend work when I apply, even if I have had non-professional experience working with [insert tech], or they would likely come with a drastic pay cut - I believe it is because I have become uncannily good at what I do on the frontend. Instead, I have focused more on moving up the ladder with other skills since I recognize that being a one trick pony sucks - I have leveraged my expertise to become a senior/lead engineer, that way I am shielded from that problem somewhat. A part of me does wish that I would be able to get more experience using other languages, technology, and domains within web development, because I like writing code & solving problems. This is a hard problem to me, and I have been taking the time to think about how to approach this in the back of my head.
Now I think we should all keep our eyes out for new tools that make our OTP lives easier and more productive, but learning new stuff just for the sake of learning...sure, maybe, IF you don't have any other interests outside of your technical life.
For example, I play guitar and compose electronic music...there are simply no where near enough hours in a day to not only work a paying job to finance my lifestyle, but to practice and produce music.
Something has to give.
Well, OP did say you should learn a "technology as far removed as the one that you are currently using as you can stomach." Some people can only stomach so much.
In my experience you acquire those by working with the language every day for a year or so... and then you are still far away from "master".
It didn't take me long to go from Perl to Python (though they are very similar languages aside from Syntax). I knew how to do something in Perl, I would just google for the Python equivalent.
In my experience those concepts are not language-specific. More like platform (eg: web) or paradigm (OOP) specific.
> Lifetime careers no longer exist. I knew a bunch of people that were charging $200 per hour to do HTML in the early 90’s. Frontpage ate their lunch.
Ha! I know plenty of SAP people who are making $200+/hr because they are one-trick ponies. So the real question is - who's anecdote is stronger, mine or jacques's?
The "one" trick is apparently finding the right pony...
In the world of business, SAP consultants are the equivalent.
For example, I entered the tech world in the early 1990s, and shortly found myself specializing as a 'Unix Systems Administrator'[1], meaning one who was well versed in Unix OSs, related things such as shell scripting, Perl, and core infrastructure stuff like DNS, SMTP, NNTP, etc. Back then this was enough to be considered a full job spec and career.
Now it's simply the expected the price of admission for a variety of roles, and trying to find a pure old-school Systems Admin position is practically impossible; the skill set in isolation is no longer marketable.
However, this skill set is the basis of a lot of types of work, including the modern DevOps ideology. In DevOps you add a few tools, learn about real big data, configuration management, and maybe adopt a few more powerful languages to take you beyond good ol' shell. It's not the tools that separate DevOps from Systems Admin work, it's the philosophy and approach.
Those original SysAdmin foundations are at the core of any DevOps engineer. The tools are not radically different, it's the crucial paradigm difference that actually matters.
I'd agree with the basic premise of the author, but I'd add that it's as much about keeping up with evolved methodologies that's as important.
[1] Grandiose title deliberately icky!
However, I can play this to my advantage -- as more and more of my colleagues have moved on to greener pastures, I have specialized in modernizing these old system to Web-based UIs, as well as doing consulting projects to migrate the applications to new platforms or simply shut down the old systems. As time goes on, the rates for these projects are increasing. I am also old enough to have a nest egg built up, while leading a simple life with a smaller monthly "burn rate" in my personal life than most other people I know.
For me, I can ride this tech until it dies. It will be the end of my tech career. But then comes a semi-retirement where I can get by with the residual income I get from a couple of my side projects and my little hobby farm.
So the real lesson is that being a one trick pony can be a terrible thing... or you can be aware of your situation, and be prepared for it. If I had no nest egg, no residual income, and no plan to change my lifestyle when the meteor hits, I'd be in trouble. Instead, I'm actually kind of looking forward to it.
As a unemployed person, that see lots of job openings for one trick ponies, I wish I was a one trick pony, I am not, and I am already without my lunch (in the literal sense, I've been eating mostly potatoes for the last weeks, my parents don't have money to buy even chicken daily).
I am mainly a Lua, C and C++ coder.
Most job openings I see are for Java EE specialists, or people that know the entire database stack (ie: Oracle + some server side coding tech)
Or it is for .NET specialists, and so on.
I am willing to work with that stuff, but people want to hire only extremely experienced people in those fields, my years of coding C# for fun to makes games with XNA and RunUO does not count, I don't have a huge stack of Java certifications, and so on.
But the people I know that are coding Java since its existance, and don't know anything else (example, cannot grasp pointers or some other basic concepts that are not used directly in Java) have a job.
I wish I went with that boring route instead... (I know lots of random languages, Lua, C and C++ are my favourite, but I know C#, J2ME, BASIC, MushCODE, Linoleum, PHP, and some others, all because I am curious and learn for the sake of learning).
Things like games(or game engines), trading, embedded systems, operating systems should still be running mostly on that...
As for trading, there are few brazillian traders, and I don't found a opening in them yet, there are lots of traders in US, but I have zero experience, they won't pay relocation.
The same is also true for operating systems, embedded, etc...
Everyone likes C and C++ coders, but only when those are secondary skills (ie: I see lots of openings where Java + Oracle are mandatory skills, and C++ is a "plus", I apply to those anyway, but never got an interview)
no thanks, i'll stick to being an expert (and getting paid accordingly) in one field, and adjust when needed.
you don't get brick layers randomly learning carpet fitting and welding "just incase"
The point is that you spend the time to truly become an expert in an area, most of the skills will be easily transferrable to an orthogonal position. Dabbling in a bunch of crap on the side doesn't really get you anything except for a false sense of confidence that gets blown away when an interviewer asks you any reasonably hard question about it.
A jack of all trades
Master of none
Is still better
Than a master of one
Worth keeping in mind when looking for a metaphor.I think the best place to be in is right in the middle: the "T" engineer (or "T" marketer, "T" designer, etc). It means you have deep knowledge of one vertical, and a shallow knowledge of many related verticles. (Get it? It's a T shape.)
This type of person is damn good at solving anything within their vertical (and gets paid accordingly), but knows enough about related fields that they're not blinded by their own expertise.
As a technical marketer who also knows some code, some design, some B2B sales, etc, I've found those "shallow" skills to be tremendously valuable. Not because I can promise clients to debug their app (I don't), but because I can communicate with the development team, the design team, the inbound marketing team, ... without hitting a language barrier.
So don't be a one-trick pony and don't be a jack-of-all-trades. Be a T.
Trust me, if Mozilla were merely trying to exploit the depressing SV hype cycle, they'd have built a pretty-looking dynamic language rather than anything with semicolons. :P
The fact that it's also attracting the interests of Ruby and Python devs (who may have found C/C++ scary) is a bonus.
I believe a cleaner language will replace C and C++ for new projects some day, but it will still present the same fundamental environment to the programmer: manual memory management, raw OS threading, ability to bit bash and do unsafe stuff if you need to. This language will not radically change the C/C++ programming model. Rather, it will add semantic power to reason about safeness, purity, concurrency, memory layout, etc. as part of the language. (I think Rust might be this language.)
IMO, active C/C++ programmers should be learning more about stuff like OOO and superscalar CPU architectures, caches, NUMA, hardware atomic operations, drivers, etc. I think "C/C++ programmer" really means "close to the metal programmer working on a mainstream project," and that category will remain strong through language changes. On the other hand, if you have never found the need to learn anything from that list of topics, you are probably using C/C++ in a domain where it is ripe for replacement.
That language is C++14.
Your time would be better served learning more programming paradigms than languages; the languages are the easy part, knowing how to best solve a problem with that language is the hard part.
And I don't see what the age has to do with it; most paradigms are hardly new.
My real value is being able to solve a problem in a timely manner. Or even recognize it. With internet so wide and vast there will be people that are better than me at anything.
This is the key. In one way or another, we are all "problem solvers". Hell, that should be my official title at work. Whether it's a network issue, a workstation not booting, a security camera outage, one of our websites down, or even a busted pipe in the break room, I'm the one they call because I can figure out what's wrong and fix it.
Granted, it's a small company so I have no choice but to diversify. They initially hired me part-time for "internet and social media marketing" only, and four years later I'm the full time company problem solver and sole IT staff.
Sometimes it does pay off to step outside your box.
But, being an expert is where its at. Companies will pay a premium for an expert over an enthusiastic amateur, because its less risky.
Any time you see a problem approached from a new angle, it deepens your understanding of that domain. You learn what patterns are common and what tradeoffs are made.
I gueninely believe learning Python or Erlang makes you a better Ruby programmer. You don't have to cross over to reap the benefits.
My trick: satisfying my customer's requirements, whatever they are, with whatever tools I need. Some of the tools I used in the past year are less that 5 years old, some more than 30 years old, and some much older than that (pencil & paper on a clipboard on a loading dock).
Figuring out what your customer needs, then what you need, and coming up to speed on that is much more important that any keyword on your resume.
Consider that some are incapable of sensing the customer, much less their requirements, whatever they are.
And consider that some are trapped mooning certain tools over others.
I'm reminded of Cory Booker's "Conspiracy of Love". Cory's dad
was born to a single mother who could not take care of him. He then was raised by his grandparents, like many children in my community, but then his grandma could not take care of him.
And then he was out in the community but it was that conspiracy of love –people whose names I do not know in a small, segregated, North Carolina town – that rallied around this boy, would not let him fail, got him to school, put a roof over his head, put food on the table, taught him discipline and respect, and he made his way.
HN is that conspiracy of love for many lurkers.