I'm a marketer who has become more and more technical over my career. The amount of opportunities that has unlocked have really been worth it for sure, but it also simply lets me be better at my trade than those who do not have those skills because I see connections they may not, and I can implement those things independently or with fewer resources than others.
It also frankly just makes things more interesting, because when I think I've reached the bottom of a rabbit hole and risk getting bored, suddenly there's this new tunnel branching off of it that I can explore, and before I know it, I'm delving into expert-level problems of a part of my industry I've never considered before.
I think these are the people the author is referencing. These students did amazing if measuring by GPA, but did so through hard work and a lot of thinking. Got praised for GPA related achievements which reinforced their over studying/thinking behavior, which leads to the scenarios the author describes.
The most successful people you talk about likely wouldn't have the issues the article addresses.
Browser development is the worst. Hacks and compatibility details galore. I hate the fact that to get into front end development I would have to master how to get around someone elses mess.
You're less likely to get stuck and give up because they're adjacent, and then when it comes to learning something not adjacent you're already a more experienced at learning and organising your thoughts when it comes to tackling a new problem.
I found myself having to look up syntax and idioms of languages I was productive in a decade ago.
"Solution: Try taking a 30,000-foot view of when it’s worth tolerating some boredom to collect easy wins when it comes to your overall success. Instead of attempting dramatic change, decide when tolerating short periods (a few minutes or hours) of boredom could have a very beneficial impact on your success. For instance, devoting 5 hours a week to an activity that’s monotonous but lucrative. Additionally, make sure you have enough outlets for your love of learning across the various domains of your life, including your work, hobbies, physical fitness, understanding yourself etc."
Doing work that's lucrative yet monotonous is one of the biggest struggles. I have in front of me a great strategy that I know will work, but I'm avoiding putting in the elbow grease.
Anyone know of a book that goes into this in detail? I know I'm procrastinating more by looking for a book to solve this, but at the same time, when I understand something thoroughly, I do it more often!
It's written by someone who mostly writes movies, but it applies to anyone who does anything remotely creative, where your project has a lot of uncertainty and many opportunities to stall or talk yourself into giving up.
Highly recommended.
Agree that it's a meditation/mantra-like book that can be read monthly to refocus.
Many somehow switched and started learning/working on assignment, those who didn't didn't make it.
As cheesy as it sounds, the best book I've found on this topic is Getting Things Done.
I struggle with a lot of the issues in this article, and resisted that kind of thinking for years, but learning how to break up the insane overload of ideas and things in my head and bring them into manageable chunks, living in an outside system, has really really helped.
It is showing it's age technology wise, being published in 2005, but a lot of the fundamental principles still apply.
https://www.amazon.com/Mastery-Keys-Success-Long-Term-Fulfil...
The key message that stuck with me was that the early stages of the mastery slope are exciting because of how much new knowledge we gain. However, most of life is spent in the plateaus, and learning to love the plateaus is key to finding persistence and self discipline.
From what I’ve read on it, seems to take a Zen-like approach, which I appreciate.
http://index-of.co.uk/Social-Interactions/Mastery%20-%20The%...
The "10x" developers are seductive, and can supercharge a project into getting version 1.0 off the ground in months instead of years. However, each one we've hired has left us worse off than before once they got bored and left us in the weeds trying to piece together what they had done.
Most of them suffer from "shiny ball" syndrome and are constantly dismayed by the complexities of the real world. The real world is a grind, filled with edge-cases, filled with needing to make 1-off exceptions, etc. These types of developers tend to hate that, and prefer the abstract beauty of their elegant and simple solutions....and when the real world crashes into their elegant creations, they get 'burned out' and jump ship.
I'm not blaming them, its just an observation. These 10x developers can be a godsend to a brand new startup, but past a 1.0 product, they can subtly turn into a liability fairly quickly.
Fake 10x: Turns out lots of stuff quickly but it crumples under edge cases and has non-obvious tight couplings that keep biting you. No one else can make changes to their code. None of their stuff can really be used when they leave the company, but they can fix it really fast.
Real 10x: Is able to explain what they did and why bugs happened. Easy to follow along in their code, you get the impression the job was easy. You constantly find yourself turning to their old solution, when it really matters, rather than the new way everyone's trying to migrate to. Suggests ways their existing system can handle new business use-cases with only a trivial modification. You keep trying to improve upon their work but keep concluding that there was a good reason for all their decisions.
Depending on the context, someone might be referring to one or the other.
OTOH there is a cycle I see everywhere, all the time:
* A first generation of anything is bare-bones, with multiple deficiencies and corners cut, with important parts held together by duct tape.
* A second generation of the same thing tries to fix everything, adds reams of missing features, and ends up being an over-complicated, bloated monster [second system].
* A third generation of the same thing builds on the knowledge gained so far, refines the ideas, throws away all the unneeded parts, and organizes the few necessary parts elegantly and reliably.
(I use indefinite articles before "first", "second", and "third", because each may take much more than one iteration.)
Your hyper-productive developers likely produce the first two varieties. This may still be very useful, if they allow the business to grow. They as well may introduce too many technical problems and operation costs, and thus be detrimental to the business, too.
[second system]: http://wiki.c2.com/?SecondSystemEffect
(Edited: typos.)
The dev you describe sounds like a junior who can crank out code at high velocity.
E.g. If they previously wrote compilers and you tasked them with graphics you'd see a book explaining affine transforms on their desk. Or parsing theory for the reverse transition.
A key part however is the ability to switch between fields. I've seen people I thought were 10x completely fail when tasked with something new.
Of course it is possible for one developer to be better then other, but it is not necessary fixed. It changes during lifetime of same person, depends on technology, experience, type of project and other factors.
Meanwhile the typical use is to look at some stereotype you have in head that has nothing to do with the project or position at question and then wonder why it did not worked out.
His code had major issues, but that's not to say that he couldn't write software. He could, in a manner completely different from me. Amazingly well, yet frustrating.
Above a certain level, one developer isn't universally better than another. It's not linear any more.
He's a CS professor now.
Syntactic sugar can't impress me anymore, unless it comes with significant performance gains or compress the code significantly without sacrificing readability to average Joe coder (this is important part). Actually I prefer 1 page of simple clean code to 1/2-liners that do it all, until they don't. I guess I am getting old.
You're saying their code was so good it survived 3 years of real world use and project evolution. That's extremely rare.
It's a case where the whetstone sharpening the knives also gets sharper by virtue of what they learn from the juniors they mentor.
When I build teams I usually select "builders" and "improvers." Improvers can't create new systems because they spend all day theorizing edge cases and what-ifs. Builders can't improve systems because they spend all day theorizing new systems to replace the legacy one they see as imperfect. You also have to get the right ratio of those two. Too many builders gets you a lot of brittle systems and a huge JIRA backlog; too many improvers creates stagnation.
Openers want to create new things, they love a blank canvas. Where some people are scared of this, they thrive in a place where you can lay down rules, define parameters, and create structures that are a good fit for the problem domain.
Sustainers like to work within a project that's evolving, but largely defined, where they can get a lot of things done and move the ball forward. They may create more work along the way, go on excursions, but the overall direction is roughly towards the goal. They have to make many compromises along the way.
Closers like finishing things, closing out bugs, wrapping up features, taking care of a myriad of loose ends and "TODO" type tasks. They're interested in completing work, not creating more work. This is where you have to make harsh judgement calls, implement ugly hacks, anything to wrap things up.
It's rare you'll find someone who excels at or even likes to do all three. We often have our bias.
Anyone can close if they're forced to, but some people actually like it. Clear objectives, solutions need to be focused, etc.
Almost all real jobs are mostly grind.
Even startups ... a good one, is 99% stupid, annoying details, some of which would be fun if you were not so busy.
Airtable.
What a cool app! In the news today.
"But I have to get fing xyz done fing now, so abc can ship out to Hong Kong before 5 hurry up!"
So there's not time to search, explore, try it out, it's just a very rapid short query to figure out the essential basics and move on.
Early stage is all a grind and there's nary a moment in between.
Apologies for the language.
The person who grinds through the boring stuff while thinking about how to automate it so they don't have to be bored anymore, is the person I want to hire.
The comparisons being made to washing dishes aren't realistic.
The important part is noticing and recognizing things that are ripe for automation, rather than accepting the shitty world as it is and continuing to suffer through repetitive work that could've been automated.
Nobody should claim washing dishes is inherently wasteful or pointless. Legacy code on the other hand, comes with a lot of social pressure to just layer on more debt.
1) Look for a low-stress job with manageable time. In tech this doesn't mean "low-pay" as well. I'm being paid quite well and I will never do more than 40 hours a week.
2) Treat that job as your day job to pay the bills, and learn whatever you want during your (relatively abundant) free time. Learn a new programming language, learn about any other topic of computer science or software engineering, get any skill not related to your job, get a new degree, whatever. It is up to you whether you want to learn something that will make you more money in the future or not. Beware: open source projects are nice but, unless it's a project of yours and yours only, you have less control over what you do, and in that sense it's a bit closer to a job.
It's also true that mundane tasks will make you much better at your job, but TBH, while that's helpful (and helps building a career more than most young people would think), it's not something that important to me. I'd rather be good at things that are important to me. A job is there to pay the bills and nothing more; anything else is a bonus which I won't take for granted, and this includes the social aspect of the job.
My work has millions of dollars of DNA sequencing equipment, lab experts and a states / nations worth of patients data. No side projects for 7 years and I am ok with that.
I can also take days/weeks off to read or experiment but have been grinding lately.... with a family and meetings etc running a team of 3 I basically have to take any chance I have to crank out code.
I've had some issues with depression and anxiety that I've been managing with my doctor, but there are still times where extreme stress can cut through the drugs and still give me some issues (work has been very political lately).
I started craving a cigarette, which is weird because I was only ever a cigar smoker, very infrequently at that, and gave it up (very easily, given I usually went months between cigars) years ago.
So under the guise of "if you're craving potato chips, maybe you're low on sodium", I bought a small, very low dosage, disposable e-cigarette at a convenience store. And the last two weeks have been some of my most stable, calm, consistently productive weeks in a very long time.
Now, I know Nicotine is very addictive, and I have no plans to go back to smoking. I'm planning to switch to a nicotine patch, as the vapor is irritating to my throat and there is still some concern of increased lung cancer risk. I think a patch will be easier to meter out the dosage, too, rather than puffing on a pen every time I feel like it. Sum total, I think I'm receiving a net benefit right now (it has also calmed my snack cravings and my blood pressure is now at a 5-year low).
Anyway, it's dangerous to self-medicate, but most people do anyway, whether it's with alcohol or bad relationships or the internet, and it's not my job to tell you what you can or cannot do. Just trying to relay that there might be some decision tradeoffs that might leave you with a net benefit.
Cause as someone who smokes cigars (don't inhale, do absorb nicotine via the mouth lining) I really don't find them addictive at all, that seems broadly the case with most cigar/pipe smokers we generally aren't addicted to them.
And yet cigarettes are obviously super addictive, so is it something else in cigarettes that's adding to the addictive nature? Or inhaling into the lungs, where presumably you'd get a much faster hit or higher dose?
For me, it's not addictive in the sense of "I experience withdrawal symptoms", but I have very strongly conditioned habits with specific triggers. Nicotine spikes my dopamine, and also improves my concentration and memory when I'm using it. Which makes me like it, and also chemically encourages situational cravings.
As an example, I chewed it when I was driving to work every day for a while - and now I think about it almost every time I drive anywhere. It's not really an "I need a piece right this second" kind of feeling for me, but more like a "Man, some nicotine would be awesome right now" kind of feeling.
One aspect of the addiction that I think many nicotine users would agree with - it's not an instant process. I knew I was developing the habit long before it was a full-blown addiction. I kept telling myself I wasn't going to get addicted, that I was stronger. Turns out maybe not so much.
Highlight: "Wikipedia summarizes Guillem et al 2005 as "Technically, nicotine is not significantly addictive, as nicotine administered alone does not produce significant reinforcing properties" - the addictiveness coming from MAOIs (eg. Khalil et al 2000, Khalil et al 2006) & possibly other compounds present in tobacco"
So I'd expect cigars and pipe smoking to be addictive. My personal experience is smoking cigarettes occasionally (average less than one a day), and I wouldn't say I was addicted either.
My current hypothesis for why cigarettes seem more addictive is frequency. Searching "cigarettes per day average" turns up estimates mostly around 15 per day; most cigar/pipe smokers aren't anywhere near that.
(Disclaimer: I am not a doctor or scientist.)
The practice of medicine is not actually that hard. It's all about risk profiles and benefit tradeoffs. The Lexapro I have been prescribed for my anxiety and the Advair for my asthma could very well be more dangerous for me than any trans-dermal Nicotine patch might be.
Our Food and Drug Administration has decided that it's relatively safe for me to buy Nicotine in whatever amounts I want without any more restriction than me being more than 18 years old. They've decided that Advair and Lexapro have risk profiles worth forcing me to go through my doctor before allowing me to have any.
We have thousands of years of data that shows Nicotine doesn't just randomly make you want to kill yourself. We have a lot of evidence that smoking tobacco can increase risk of cancer, and that the additives in commercial cigarettes can increase that risk a lot, but that doesn't apply to Nicotine specifically. There is some evidence that any sort of lung irritant can increase the risk of lung cancer, so even vaping might not be completely safe, but neither do we know the magnitude of that risk, especially separate from the many other irritants we're exposed to on a regular basis.
I'm not trying to advocate for using Nicotine. There is a risk of smokers pointing to information like this and saying "see, my disgusting habit is not that bad". That's not at all what I'm saying. But just because I don't have MD after my name doesn't mean I can't make informed decisions on my own about my own treatment. I'm just sick of this infantilizing concept that intelligent adults can't figure out a few things on their own.
But I feel like after working on enough legacy systems you come to appreciate how crippling technical debt and over-complexity can become to an organization. What was an exciting and fun project for the creators is now the daily hell for a whole department of people.
The downside is I feel like the maturation of software as a whole is at a point now where it's diminished my ability and desire to pursue entrepreneurial ideas. There's so many powerful existing systems that can be glued together that the hassle of making something from scratch rarely seems worth it when you can get something "good enough" without custom code. On the one hand that's great for business efficiency and non-tech companies but kind of shitty for us developers who love to build stuff from scratch.
there are many types of humour one can appreciate: https://www.huffingtonpost.com.au/2017/07/19/there-are-nine-...
If someone can't lighten up and find humour in life, i'd say they are mature enough to graduate life and go on to the next realm lol.
I agree with this to the point that I seek out the stupidest, most concrete, least automated solution as a point of reference before I build anything smart.
After got a job designing in Mechanical Engineering, got another job in a different product, finally I'm in Electrical Engineering.
Being a self taught programmer for 10 years, I've found this variety in experience allows me to engineer pretty much everything from embedded to packaging.
I might have been very talented at making airbags, but I would not be controlling electricity if I stayed in that one job.
Regarding boring. I have found that sometime if we zoom out too much things are boring. Life is boring if we think everyday we just wakeup, work, sleep. When we zoom in and look at the variety and try to understand life becomes more interesting.
Zooming in too much also can cause boredom. Zoom into the coding too much and think I am just typing another ifThenElse or while loop or some keystrokes it can be boring too.
Usually I have found, for management work zooming out makes it interesting for me. Technical work usually is interesting at the level I see it.
Like some people mentioned listening to music, doing something else when the work look boredom can also keep one going with passion.
The other challenge is once the work becomes routine, one starts feeling anyone can do it. One starts feeling am I justifying the money I get for it?
- Getting credentials to some external system with which we need to integrate
- Learning how their authentication scheme (Kerberos etc.) works
- Finding workarounds to not having admin rights on my laptop
- Finding workarounds to bank's firewall (a lot of package repos were blacklisted)
- (the biggest one) Having to deploy the app into dozens of separate unix accounts, because, according to security "no one account should have access to all this data"
As an example, I recently had a project where most of the drudgery was changing one line, testing the whole thing (including manual tests), realizing another one-liner was needed, doing it all again, etc.
Automating testing wasn't a good idea at the time (high risk code, so you don't want to pile a refactor on top of a risky change), but I figured out approximately how long the builds would take, so I started setting timers on my phone. Kick off a build, switch tracks, come back when the alarm hit. By doing that I was able to context switch more efficiently to an unrelated project rather than twiddling my thumbs for twenty minutes every time I needed to wait for the build.
Previously I had no balance - always was at one extreme or the other.
In my experience the people who actually focus on shipping are the real rockstars.
I suspect there are some wins to be had by thinking on how to automate or otherwise delegate well-understood repeated behaviors, while still collecting the proceeds from them.
This is something that could interest a smart and curious person for some time, and actually benefit from the intellect and curiosity expended on it. The person can also reframe the "repetitious monotonous task" as "learning the best way to execute and then automate the task". But learning with any confidence takes a lot sampling for any statistical significance!
Maybe the problem is that this kind of personality should be working in R&D instead of regular code-for-money types of work.
Here are two tips:
1. get sleep
2. drink coffee
I've been wrestling with this for most of my career so far. I think it's all about striking the right balance. If you're not constantly learning you will stagnate. At the same time, jumping continuously from learning one new thing to another (esp. if the things are not very inter-related) can spread yourself too thin: you need to "go deep" on some things to become an effective/valuable contributor.
I sometimes feel resentful of the amount of time I've spent as a software engineer dealing with what I often feel is boring or pure B.S. (e.g. almost everything other than designing/building some novel complex system from scratch). But in reality looking back I see that a lot of that sh*t-shoveling has actually made me much better and wiser at my profession, despite how mind-numbing and boring it often was. So I'm trying to keep that perspective to get me through those really dull days when I want to just rage-quit and move to a rural commune :)