Ask HN: What skills to acquire in 2019?

218 points by miguelrochefort ↗ HN
I quit my software development job 4 months ago to take some time to travel, develop some ideas, and improve myself. I have a very flexible schedule, and I'm eager to make the most out of 2019.

What are some skills (technical or not) you think someone in my situation (or anyone else) should consider acquiring in 2019?

193 comments

[ 1.4 ms ] story [ 1445 ms ] thread
Ideally gain skills that will weather the potential recession that should start mid-year? Not sure what those will be exactly, but perhaps others have an idea...
That's something we should all have already, regardless of when a recession hits.
Networking and interpersonal skills. I was around when the .COM bubble burst and all your technical skills that made you easy signup bonuses a year earlier were worth nothing. But knowing somebody who trusted you would give you the job.
Leadership skills.

Whether or not you need them today or not, whether you want to be in a leadership role soon or not, they are essential for anyone seeking to progress and you can’t start too soon.

There are many many ways to approach this and I’ll just offer two book titles that I believe would be beneficial.

1. Start with Why 2. Extreme Ownership

A much faster way to understand the central message of "Start with Why" would be to watch the TEDx talk:

https://www.youtube.com/watch?v=u4ZoJKF_VuA

Is the book worth reading, in addition? I see very mixed reviews.

Don't waste your time with the book—it's complete fluff: unoriginal, rambling, repetitious, with faulty reasoning…
A little on the noes perhaps but try learning how to teach. I took some time to learn how to teach English many years ago and it was a great perception changer.
I would love for us tech folk to dip our toes in idea history, hermeneutics and rhetoric.

We need to think about the way we think and talk about the way we talk. I mean reflect on the state of things, instead of blindly increasing shareholder value. We glorify engagement, but we’re arguably glorifying how addictive our creations are.

What if apps maximized for less time spent, like help users just do their work and get on with living life?

When I work on web sites that deliver services I often picture users being in a hurry. People just want to get on with life, not live their lives within my server side rendered single page web app. :)

I say dive in, don't be shy. There is so much that these specific intellectual paths lead to.
What if apps maximized for less time spent

Today I used an automated delivery booth. At the end it reported in big letters: "you took your order in 2 minutes 12 seconds". Made me vividly remember the end-of-level screen in classic Doom. Maybe that's a good idea: make the session time prominently visible, to have an urge to optimize.

Like a package locker? Why did it take two minutes?
Well, I liked the end-of-level screen, but the rest of UI was not so new-user-friendly, especially not sleepy-new-user-friendly.

About half the time I was staring at the instruction "the box will unlock now" with the box in question still behind a closed door before trying to pull the door harder.

Can you recommend a few resources on idea history, hermeneutics and rhetoric?
Two things I want to focus on are Kubernetes and Golang.

I've played with them in the past, but not spent enough time with them to be confident using them in production.

I've been using K8's for over a year and have built some golang apps. But would like to take a deeper dive into understanding parts of the k8's source, build my own controllers, etc. If anyone else is interested let me know maybe we can start a niche community.
I'm about to start a role using Kubernetes and been trying to kickstart golang. I'm mildly interested, are you part of the golang slack?
Go is undeniably very useful, just feels like such drudgery actually working with it.
Just my 0.02, but I started my primary project in Golang this year (a first for me) and have genuinely enjoyed getting deeper into using the language. Great tools, great community, and a clever language -- what more could you want?
In my limited experience so far, I just keep finding out how to do something then wondering why it's so complicated.

Things I could do in Python in ~10 lines, seem to require at least double in Go.

I'll keep learning it though, I'm sure I'll start to see the benefits soon!

Absolutely, the language is well designed with good tools but it isn’t very eloquent. I find other languages much more enjoyable to work with Ruby, Typescript, Kotlin or even Java.
You don't state your programming background but you mentioned C# in previous comments.

I would recommend machine learning as a very useful skill to acquire.

I have to be more specific because "machine learning", "artificial intelligence", and "data science" are really large topics that can encompass difficult math and PhD research.

For application programmers, I think a very realistic subset is using an existing "machine learning toolkit or API" (e.g. Keras in Python) to analyze data and solve problems. You use the machine learning algorithms but don't necessarily write them from scratch. This level of proficiency only requires high-school math. The analogy would be knowing SQL even though one doesn't write b-tree algorithms from scratch or using the "=PMT()" function in MS Excel without deriving the annuity equation from first principles.

I think machine learning concepts (classification, clustering, etc) will become an expected baseline of programmer knowledge just like SQL was 25 years ago. Its usage will become more pervasive and will be utilized by more people that don't have "data scientist" in their job title.

> ...just like SQL was 25 years ago.

Oh boy have I got news for you :)

What’s the news?
That SQL is still relevant after 25 years.
Original comment never mentioned that SQL wasn't a baseline for programmers anymore.
There appears to be a “10” situation here, some see through the hype, others don’t.
I would say the baseline is a little higher now, maybe that is what he meant? But yeah, SQL is required knowledge for any programmer.
I don't mean to imply it's impossible, or throw out some appeal to authority, but dabbling in ML is not going to open doors for you. I worked in and around the field for more than a decade. Companies who are serious about this stuff can sniff a beginner out and they tend to want credentials. It's a deep subject, so that's not terribly uncalled for, and knowing how to throw a classifier together does not in any way mean you're competent and able to solve hard problems.

Not trying to be a downer, just my $0.02. For fun? Sure, go for. For career development? You had better be serious and ready to devote the next 5-10 years. I do not at all agree that ML is going to become a baseline skill.

I don't mean to imply it's impossible, or throw out some appeal to authority, but dabbling in ML is not going to open doors for you. I worked in and around the field for more than a decade. Companies who are serious about this stuff can sniff a beginner out and they tend to want credentials.

What I think you're missing is that ML is becomeing accessible to organizations WAY outside the sphere you're referring to. In the not-too-distant future, "Bob's Small Engine Repair and Screen Doors" will want to take advantage of ML / Data Science / AI. And it may well be the case that all they need is somebody that can implement Linear Regression or K-Means using SK-Learn, or using a cloud ML API.

And larger organizations will always have room for people with varying levels of skill, especially as demand for the most highly skilled people outstrips the available supply.

and knowing how to throw a classifier together does not in any way mean you're competent and able to solve hard problems.

Not everybody is solving a "hard problem". By way of analogy... if your car has a broken connecting rod, you need to take it to a mechanic who knows how to pull an engine, tear it down, rebuild it from scratch and put everything back together. If you have a bad O2 sensor, that work can be done by somebody much less knowledgeable. If you need the oil changed, that can be done by somebody even less knowledgeable still. Or to use a different analogy, you don't need a neurosurgeon to cut out an ingrown toenail. Use the right person for the job at hand.

> Companies who are serious about this stuff

What about companies who are not serious about this stuff? There are tons of companies who are not actually trying to solve a hard ML problem. They just want their own recommendation or prediction engines. That doesn't require any deep understanding or 5-10 years in this field.

A ML puritan might say that is not real or serious stuff and this is all fad. That might be true. But I think that is one of the ways someone can start off their 5-10 years journey - working on simpler problems and getting paid.

I think the electronics and electronics fabrication industry is ripe for major disruption in 2019. The end of copper clad fiberglass boards are in sight, and that will change the way we think about electronics in fabrication.

Electronics is also kind of exciting right now in particular. The open hardware community while in it's infancy still, is growing rapidly. Notably, the ESP32 platform has allowed home brew IoT technology to grow very rapidly as it brings a processor and Wi-fi to a chip for less than $5.

>The end of copper clad fiberglass boards are in sight, and that will change the way we think about electronics in fabrication.

That's an interesting thought. But where would this lead us?

> The end of copper clad fiberglass boards are in sight

Where can I read more about that? My google searches have not been fruitful.

interesting. Thanks!
The other approach is through a copper ink such as this one: http://copprint.com/
This looks cool and could be a much easier solution than the aforementioned laser/printing setup. Judging from the website though it doesn’t look like they have a product ready to go, is that true, and are there any alternatives? It would be nice if there was a filament I could just plug into my 3D printer and start using :p
I think googling "conductive" plus one of "3d filaments" or "t-shirt ink" or "epoxy" or "resin" or "nail polish" or "paint" is a good place to start.

I believe that company will probably sell the ink by the barrel full for industrial fabricators.

Clairvoyance will become increasingly important in 2019.
Any hands-on MOOC for that out there? ;-)
Find a TV show where the protagonist is always right, like House. It will teach you all you need to know, and provide a healthy role model.
I've been learning Elixir, which is really good for creating concurrent and scalable systems. Concurrency has always been something that has fascinated me and I see in Elixir a chance to make very concurrent code without having to deal with locks, race conditions, and all the other icky low-level stuff. Elixir is also a functional language, making this is the first functional language I've learned, which is another reason I'm enjoying it.

Over the past couple years, I've heard from developers who were very satisfied with Elixir, so I finally sat down and started to learn it.

As I've been learning Elixir, I've been writing a series called "Learn with Me: Elixir" at https://inquisitivedeveloper.com. The idea is that anyone else who's also interested in Elixir can follow along as I learn it and learn it for themselves as well.

Of course, playing around with it has also helped me learn far more than just reading about it. Writing about it has helped me learn a lot better, and my hope is that someone else will also find my writing useful.

I love Elixir. There are very few things that it leaves me wanting from other languages, and I am happy for having added it to my professional tool belt a few years ago. I recommend it for beginners and experienced folk alike. The community is pleasant, industrious, and I feel like I get to code in a sane environment every day with escape hatches in just about every spot I would expect them to exist (due mostly to the macros + BEAM). Though I do not take advantage of this as often as I would like, being able to drop down to native Erlang trivially basically doubles the ecosystem size.
I use Rails for my web programming needs, and I've heard a lot of people talk about switching from Ruby/Rails to Elixir/Phoenix because of "concurrency", but I'm going to be honest and say I don't know what that means. I'm not a CS grad and I'm not super familiar with all of the terminology.

Can someone help me with two things? Really trying to understand the benefit.

1. When you say "concurrency" do you just mean "handles more users at the same time" or is there something more to concurrency? I keep seeing web chat applications in tutorials for Elixir but chat is such a small application of a technology that I find it hard to believe the majority of Elixir users are building chat systems. What are you using the concurrency for? Why isn't Rails sufficient for that application?

2. Given that most web apps are CRUD, are there any benefits to using Elixir for a typical CRUD website (other than less-than-tangible things like "it's functional")?

Much appreciated!

I'm a single core server, and I have a queue of tasks. I can process them one at a time. But say I don't want to work on one task at a time. I might decide to do some database operation and while I'm waiting for the response to come back, I might decide to do some work on a separate thread so I'm not idling. We now have concurrency. If I add more cores, and my program is coded to be able to take advantage of that, I have more workers to execute that queue and now we have parallelism! If I then go and add separate computers (nodes) and connect them over a network, we have created a distributed system which itself may be a concurrent, parallel system.

What Erlang and therefore Elixir gives you is a very sound mental model whereby your communication between nodes and separate workers is done via message passing between Erlang processes (read: not OS processes), and the receiving process may or may not be on the same computer as the sender. Those messages may also be synchronous or asynchronous, depending on what you're doing.

It also gives you a nice mental model for failure. Imagine I'm doing some super big indexing of some alphabetized data. It may make sense to subdivide that work along letter bounds, where some worker does A, another does B, ... etc. Suppose the worker for Q failed. What do you do? You may have to kill the entire job, but you might be able to get away with just repeating Q, or maybe even some subset of Q. But you as the worker that just failed are not in the best position to make that decision, so you fail and let your supervisor know, just like in a large organizational structure. That supervisor may decide the whole job is unrecoverable and fail and let ITS supervisor decide what to do. Erlang/Elixir gives you a toolkit to describe these operations via constructs called GenServers and Supervisors that you organize into what are called "supervision trees".

It also guarantees "fairness" between your jobs. Say you have the letter example, and whatever you're doing, the letter L s taking WAY more time than anyone else. To preserve overall system integrity, the Erlang VM will decide to say "hey man, you're gonna get a chance to finish but I'm gonna let M get some time for a bit and I'll come back to you." This is called "preemptive scheduling". This gives Erlang its "soft real time" properties.

All this to say, you're really setting yourself up to build more complicated systems if you need to. But even if you're not, and you have a typical CRUD app, things like preemptive scheduling are super powerful. Consider a web server. It may make sense to give each request its own process. If you have one that's taking too much time, the system will make sure you're not backing up completely by making sure the next request can run, for at least a little bit.

I'm kind of handwaving details here, but this is the general idea behind these types of systems. Erlang as originally designed was to handle telephony switches and such, and therefore had to handle many different callers all at the same time, on systems with not as much parallelism, and therefore being able to process jobs literally simultaneously, but they needed to ensure that the calls waiting to be connected could connect eventually.

They also designed around being able to hot upgrade your system. If I'm a telephone pole computer, there's no way they're gonna send a guy out to me to upgrade my system, and I want to make sure I can update the computer while it's still servicing the calls coming through it.

I enjoyed this explanation, thank you.

Curious to know what the differences are vis-a-vis big data tools like Hadoop or Spark; as a user of those tools I recognized a lot of common failure patterns in the example above. Thanks!

I'm unfamiliar with Hadoop/Spark beyond knowing what they are and vaguely where they'd be used, but I imagine they tend on the "well we can just recalculate sub-jobs" failure models, instead optimizing developer speed over computational speed. Though that is wild speculation.

You wouldn't use Erlang/Elixir for doing calculation because that's just not what it's good at. But you might use it as something to manage jobs in a larger distributed system perhaps. Though my suspicion there is you may run into tooling impedance mismatches as you get deeper into the failure modes.

Sorry I can't speak more knowledgeably about that. I'm curious if any WhatsApp folks are around and can comment on if they ever made their Erlang systems talk with their Hadoop/Spark stuff and what that all looked like.

If you have a single core/threaded computer you can only schedule one task at a time and concurrency is an illusion.

What this functional language does is mask the complexity involved in SMP systems where state and data are subject to races via concurrent access. It also allows you to subscribe to the doomed philosophy of fail once, try again, try harder while ignoring the underlying cause. Trying the same thing over and over while failing has a name associated with it.

It implements a separate scheduler which superimposes it's rules over what ever OS kernel scheduling is in place. Sometimes you don't want that complexity.

It's functional. Who cares about functional as the _only_ model for a programming language?

Elixir sounds like an awesome combination of the advantages of Golang and immutable + functional-first languages, nice!
Empathy.

The tech giants are having massive scandals because they lack it. Whatever you do, be here for the end user. Think about their lives and make it no worse.

Hah I was gonna say Empathy as well!
(comment deleted)
That seems similar to the concept of "ruinous empathy". In other words, don't waste your feelings on others, especially if you may have to fire them.

Having been on both sides of that coin, being fired and having to fire others, it's clear to me that reducing the amount of pain is important, even if such an act must be done.

How I understand empathy in our context: in addition to privacy and security, have empathy for your real user, who chances are is not the middle class educated fashionable 20-something from the Google commercial. Your real user might be elderly, or poor, or uneducated, or a kid, or a harried parent.

If you convinced them to pay you, maybe that money wasn't just pocket change to them. Maybe you sold them a hope for an honest well earned diversion, or something that could make their lives a bit easier or more streamlined or fulfilling. Don't sell out that hope with nagging, annoying up/cross-sells, attempts to addict, or by making the user feel unsafe and paranoid, or by tripping them up with unasked for "innovative" features/UI overhauls or confusing ux.

Given the scale at which our work is deployed, any one of us has the power to unwittingly cause, in aggregate, huge amounts of stress, as if people need any more of that these days.

Excuse the rant, this year my cynicism with a big chunk of our industry has reached a high I couldn't have imagined.

Alternatively, not responding to mass media scandals as if they're indicative of real life.
Agree.

It's sad how dependent the business models of Big Tech are on keeping users ensnared in the services they've simulated digitally. My plumber, my ISP, not even my bank demonstrate the engagement thirst of these megaliths.

Brown-nosing
While that could be stated better, Organizational Theory 101 is that there are three levers of power - relationship, expert, and role in that order. After ignoring relationship power for years, that has helped me get ahead more than anything.
The 48 Rules of Power should be on your bookshelf as well. (This not entirely in jest.)
Financial literacy. I find many of my smart, technology friends don't really have a solid grasp of finances and economics. Something as simple as a six-month cash flow spreadsheet would do wonders for most people. I am trying to instill this in my older children.
> I find many of my smart, technology friends don't really have a solid grasp of finances and economics.

This describes me, unfortunately. I consider myself fairly smart, did well in college, tons of technical skills, but I am -terrible- with money. I keep a 12-month spreadsheet showing income and expenses for every pay period and one showing current debt, but beyond that I know I’m awful about it. A lot of it comes from my parents also being terrible with money and never teaching me saving vs. spending, investing, etc,. I’ve figured out some of it on my own but I still struggle.

I’m glad to hear you’re trying to teach your children better.

> I keep a 12-month spreadsheet showing income and expenses for every pay period and one showing current debt

This means that you are not terrible with money. 90% of practical personal finance can be expressed as follows: expenses < income. The rest is implementation details.

That's fair. When I say I'm terrible with money I mean more in the realm of saving vs. spending. I have a small amount in savings for emergencies/cash flow safety but I definitely do not have 6 months worth of expenses set aside or hundreds of thousands of dollars in my 401(k) as some of my peers seem to. Also, if I'm being totally honest my retirement plan is basically to never retire, partly for financial reasons but also because I like working in my current industry and staying busy and don't see that changing.

Part of that comes from being in a high cost-of-living area with a child and student loan debt, but I also know that a part of it is due to the fact that I buy things I don't need way too often.

Savers are often finding ways to make inertia work for them. Every penny in my 401k was directed there by my employer. I never saw it in the paycheck, I don't think of it as something I have available to spend. Others might use a bank account they don't have a debit card attached to. Or for debts, might set up an automatic transfer to eventually pay it off, and bury their credit cards in a filing cabinet somewhere.

Some people find luck with budgets. Don't tyrannize yourself - it's OK to carve out some of your budget for buying things you don't need - but you can balance that with letting yourself save some. And budgets don't have to be 100% set in stone - when my friend wanted some replacement computer parts, he cut back on his food budget (by cooking more instead of eating out) for a bit to "afford" it.

I realize this is easier said than done, though!

Even if you never plan to retire, having a rainy day fund / a long runway will help take the stress out of layoffs, and give you more time to find the job you want vs the job you need to pay the bills, etc. - hopefully helping ensure you keep enjoying working in your current industry :)

Is there any benefit to doing this in a sheet rather than something like Mint?

I just check it occasionally to make sure my net worth increases month-over-month. Any financial decision like buying a car I take the net income average over time as potential spending bound.

For those who still live somewhat paycheck-to-paycheck (or who manage their money that way as I do), Mint can be a bit challenging to use because it only allows budgeting at a monthly resolution and things like pending charges, etc., can be tricky to manage.

For me it's easier to see "I have A amount coming on B date with C expenses due and D left over for saving or spending" than it is to try and budget monthly and deal with all of the expense carry-over, etc., that Mint tends to do. Maybe I'm doing it wrong but it's a system that, so far, has worked for me for a little over a decade.

I didn't consider resolution under a month. I can see that angle. I know some of the graphics are not detailed enough so I will occasionally dump the CSV data from it and make a graph in excel.
Funny, but I still use a 6-month cash-flow spreadsheet broken down bi-weekly. I teach my children about other tools, and what they should learn about to do it better, but if you dutifully keep a 6-month to 1-year cash flow spreadsheet, you are leagues ahead of the average person. It was the first tool (started in my thirties, and in my mid-fifties now) that made me avoid waking up to a negative balance, because I couldn't foresee expenses coming in right before my paycheck. I admit I haven't done much beyond this, however, compared to my parents, I am doing much, much better. I can only hope my children can write the same twenty years from now!
Investing is a great skill to have. Starting with understanding different asset types, their histories, modern portfolio theory, diversification, tail risks of all assets, how central banks and other banks work. I believe the market can be beaten, but you have to have more financial knowledge than the average retail investor.
While this might be true, I think a more reasonable skill to acquire would be a better grasp of financial literacy.

People spend an incredible amount of time accumulating capital, but many spend hardly any time learning to properly manage it, relying instead on financial advisers selling commission driven products.

I think that it is often the mentality of trying to "beat the markets" that lead people to make poor financial decisions, when in fact the majority of the population would benefit from taking the time to obtain a fundamental understanding of their own personal finances.

We can say both are important skillsets (two sides of the same coin), so I won't argue with you :)

Also maybe beating the market is not that important, but I was making a mistake of accumulating cash without investing it when I was younger. I didn't have spending problems though as I was frugal in my life (though being too frugal was a problem in itself as well).

+1 to this. Reading The Bogelheads' Guide to Investing was a game-changer for me.
I would recommend Robert Shiller's course at Yale (available on youtube) which covers all those subjects + some.
(comment deleted)
(comment deleted)
(comment deleted)
Meditation. Being able to direct your attention, to be present in difficult situations, to care about others when it's easier to worry about oneself, and to be willing to see truths that contradict one's self-image. There is much to be gained from this simple practice, and much to be lost from foregoing it.

"the faculty of voluntarily bringing back a wandering attention over and over again is the very root of judgment, character, and will. [...] An education which should improve this faculty would be the education par excellence." - William James

Organizing.

Not necessarily in your workplace, but sure, that too if you're into it.

Mostly I mean community groups of like-minded folks who stay in touch, remain active and do meaningful things together, like speaking up against bad uses of technology in government and law enforcement. Or training people how to get started in tech. Or hacking something together that could be meaningful for the lives of people in a city.

This has been the most satisfying tech-related thing I’ve done in the last few years.

It’s how I’ve felt most useful outside of my day-job, and also how I’ve gained a broader perspective on the culture, values, and practices at other companies.

Public speaking. It's a skill I developed later in life, and could have used very frequently had I had previously. The power of oration to influence people is quite amazing.
I am in the middle of a technology pivot - moving away from the on-prem/Microsoft stack to AWS development/Devops/networking and the $cool_kids JavaScript full stack along with Python.

Also adding on Docker/Kubernetes and ElasticSearch.

Finally, I’ve railed against the need for LeetCode style studying and I haven’t had an interview in almost 20 years that has required it, but I guess I will get back to basics and start working through it.

Do something that would be orthogonal to the current sum of your life experiences.
This!

If you have time off, do something risky that you wouldn't do normally. Why? Because soon enough you'll likely be back in the normal swing of things and unable to take that risk.

Examples:

Work on a farm

Do the Appalachian trail (or similar)

Take the train across Australia

Learn to ride a motorcycle

Learn to play guitar

Etc Etc

I worked on an organic farm this past year for two weeks (through WWOOF) and it was probably the best two weeks of the year for me. It really opened my eyes to how food is produced and just how much humans have changed the landscape of the planet - well worth the effort
I spent 6 months at home and abroad travelling and WWOOFed for 3 weeks of it. Those 3 weeks had the biggest impact and resonate through my life even today, years later.
Take the train across Australia

Learn to ride a motorcycle

Learn to play guitar

Are these risky endeavors?

I take your point. Maybe "difficult" or "alien" would have been better adjectives.
a personal skill which improves life over time, e.g. take up meditation, tai chi, yoga, regular fitness or similar

If planning on going freelance/solo develop presentation skills. (reading up on stuff like https://www.amazon.com/gp/product/0321668790?ie=UTF8&tag=gar...)

For technical skills, really depends on where your interest and skills are ... look for longterm trends and learn stuff that matches your personality/interests/skills

Sales. You will have a different job every day and meet different people until the end of this world.
I've just begun my dive into games programming (coming from a web dev background) which has taught me to think about problems from a data-driven perspective, and how to write performant code.

It's also a great way to learn how complex programs are structured and iterated upon. Games have so many layers of abstractions which are fun to explore :) I'm following the Handmade Hero series which aims to create a production-quality game from scratch - https://handmadehero.org/ - building and engine and all.

Cloud, machine learning, AI. If you haven't gotten your Ph.D. in machine learning by now, you're at considerable risk of being replaced by an offshore dev who can do your job for pennies on the dollar. As for languages, the future of computing is JavaScript (except for the lowest and most performance-sensitive layers, over which the Rust Evangelism Strike Force has an unshakable claim).

Nontechnical skills: practice vipassana and observe a strict, austere hipster diet (preferably plant-based) if you want to not die. Learn how to sustainably live off-grid with zero emissions if you want to not kill the planet. And for God's sake, delete your FANG accounts. All of them.

"As for languages, the future of computing is JavaScript (except for the lowest and most performance-sensitive layers, over which the Rust Evangelism Strike Force has an unshakable claim". You mentioned AI/ML both of which are deeply embedded in Python ecosystem though R is still the choice of academia. JS is and will continue to be a client only Tech stack for ML because of it's lack of a NUMPy like Math library. Between friends you should also add Python to your arsenal of languages to learn.
I have a feeling that will all change once the data community gets wind of TypeScript.
The skill I am working on the hardest for 2019 is being able to put down my phone. Or more generally to stop the cycle of mindless addictive loops, checking for comments and upvotes on social media, endlessly refreshing forums, and so on.

I’ve tried a few times over the past year to make headway on this and haven’t felt successful, so I’m redoubling and trying to deconstruct the concept a little, figure out some rules and habits to impose on myself, and so on.

I don’t feel confident of success at all, it feels like the defining characteristic of our time is that we’re all walking around with the equivalent of a gram of cocaine in our pockets 24/7.

My working theory is that drastic abstinence oriented solutions are the only way forward.

Any success stories welcome.

For putting down your phone, for me one thing that has been very helpful was not getting data. This basically prevents me from using my phone anywhere but work, school, and home. I live in a city that allows me to connect to many hotspots if needed, but oftentimes I just don't bother. Helps a lot not to have notification streams or timesinks available to you.
I've had a lot of success via Ulysses contracts: https://en.wikipedia.org/wiki/Ulysses_pact

You're stuck in these loops through little fault of your own. Our environments are engineered to be very addicting; tech products train our brains to crave a quick hit of stimulus at the slightest hint of boredom.

Trying to fight against this with just willpower alone is an uphill battle. Willpower fluctuates throughout the day, and (supposedly) it is a finite resource per unit of time. You may win a few battles, but the strong cues in your environment remain, and will likely snare you next time around.

It's hard to resist the temptations because they are pleasurable and salient rewards in the here and now, in a way that longer-term, more abstract goals (read a book, stop wasting time on junk info-snacking, etc) can never be.

Ulysses contracts bridge this gap by pulling the longer-term, more abstract goals into the here and now, endowing them with an immediate saliency of their own. Now your new habits can fight on the same ground as your old habits.

Examples: the person who, in trying to quit smoking, gave a friend a check for $5k and promised that if she smoked again, she'd have to report herself to her friend, who would then donate that money to the KKK.

Examples of my own: - I jettisoned caffeine by promising my spouse that for every caffeinated drink I took, I had to give up in proportion something I love dearly (e.g. skip a day of meditation) - I cut down on online boardgaming by promising a friend that I would only play with him -- and should I play with an online stranger, my friend would receive $5k and proceed to squander it at the poker table. (Making the resulting outcome of your contract breach, something that stings, that is visceral and has an emotional valence to it, it key to making the contracts successful).

It also helps to engineer your environment. Remove the cues and temptations. I've had more mixed success with this. But quitting FB, Linkedin, definitely removed strong loops. (My brain fought like hell against their absence, then after the three week mark, never a peep again. Goes to show the arbitrariness of our cravings)

I've been working on this over the holidays, since it's a chance to spend time with people I don't see too often. I have had some success with the Android app Cold Turkey. Every time I catch myself using the phone in an undesirable way, I can lock it for 15 minutes or so. Instead of putting it away and then absently picking it up again 30 seconds later.

EDIT: I know it's cliched to give technical tricks as answers to comments like this, but these tricks are actually IMHO the best solution to these problems. Trying to enforce through willpower alone seems a losing battle. Eventually the habit fades and you don't need the tricks anymore.

One tool I have found useful is the app Freedom. Another I’ve found useful in thd past is Forest.
The easiest way to put down your phone is to not have it around. If you go to work, leave your phone in your jacket pocket in the wardrobe. You can check on it once per [interval of your choice], other than that it won't even be around. Out of sight, out of mind.

It's worked great for me and doing it in the office has also drastically reduced the amount I use my phone outside of it.

Hey! I've been fighting the same battle, mainly with facebook and smartphone usage.

With facebook, I unfollowed all the people and groups and pages, rendering my wall totally empty. Now I can still use it as an actual SOCIAL network - messaging friends on messenger and taking part in/creating events.

With smartphone - I highly recommend turning your display into grayscale. On android, it can be found in developer settings (google how to enable it). Together with high contrast settings, everything is perfectly readable, you can still call and text, take pictures, whatever. But looking at the grey display just doesn't give the satisfaction nice colors do. Try it. Also wristwatch helps, since you don't need to look at the phone to check time.

The section about news in The 4 Hour Work Week helped me the most in this respect. Once you try it, it is easy to translate to social media.