
Ask HN: What Technologies to Learn in 2020? - ghoshbishakh
It is always good to keep yourself up to date with the hottest tech stacks. So what are your suggestions for 2020?<p>For example:
Flutter &#x2F; React Native ?
ML? Tensorflow &#x2F; Keras ?
GraphQL ? 
Vue JS?<p>Go or Rust?<p>+1 if you suggest something cutting edge that very less people know about!
======
Dowwie
Learn how to _really_ use a relational database, relational data modeling, and
SQL. Not knowing of their capabilities may lead you to unnecessarily
complicating your tech stack. You can go a really long way with just this
domain of expertise. From there, do the same with whatever key-value store
interests you (for me, it's Redis). Python isn't known for high performance
but when a django web app uses a cache and relational database effectively, it
can achieve a very acceptable peformance. Case in point: the Zulip chat
platform: zulipchat.com.

Aside from the database domain, I really enjoy using Rust and recommend it as
the next language for anyone to learn, but only after taking time for in-depth
relational database training. :).

~~~
Mister_Snuggles
> Learn how to really use a relational database, relational data modeling, and
> SQL.

I have to second this. There is so much power in relational databases that is
untapped by most developers. The best part about this is that, for the most
part, this type of knowledge can apply to multiple databases.

Some specific things that I want to gain a deeper understanding of are window
functions[0] and recursive CTEs[1]. In particular, I've used window functions
to identify peaks in sensor data (e.g., finding spikes in temperature, water
level, etc), which would otherwise require iterating through rows and
maintaining a bunch of state. I've never actually written a recursive CTE, but
I'm pretty sure it would simplify virtually anything dealing with a hierarchy.

[0] [https://www.postgresql.org/docs/12/tutorial-
window.html](https://www.postgresql.org/docs/12/tutorial-window.html)

[1] [https://www.postgresql.org/docs/12/queries-
with.html](https://www.postgresql.org/docs/12/queries-with.html)

~~~
Dowwie
This post I made almost six years ago to the day on SO remains relevant:
[https://stackoverflow.com/questions/20979831/recursive-
query...](https://stackoverflow.com/questions/20979831/recursive-query-used-
for-transitive-closure)

I hope it helps you.

~~~
Mister_Snuggles
This is great - thank you!

This is almost exactly what I'd like to do with recursive CTEs in one of my
current projects.

------
Random_ernest
I know that this might be not a very popular opinion but I am learning Clojure
in 2020. I work a lot with data and in my particular job the most important
things are rapid prototyping, productivity and level of abstraction. After
getting into the basics I find it to be the most intuitive and well designed
language I came across. Last time I felt that I could do extremely complex
things in hardly any time was when I learned Python.

About the Tensorflow/Keras thing you mention: Imho Keras is dead with
Tensorflow 2.0 and the entire Clusterfuck that came along with it made me try
out Pytorch and I haven't looked back at it. I was able to convert my model
from TF to Pytorch in half a day without any prior knowledge of Pytorch and it
works like a charm.

~~~
simongray
Clojure/ClojureScript is this satisfying combination of "boring" and stable,
yet at the same time cutting edge. I think people need to get over their fear
of the parens and start paying more attention to it.

Having used Clojure exclusively in my professional life for the last 2 years,
it saddens me that we don't see more converts from JS. It's such a great
language for today's reactive frontend paradigm. Everyone in the mainstream
seems to want JS to turn into Java and are massively migrating to TypeScript.
I can't help but feel that TypeScript is just an evolutionary dead-end.

~~~
nikofeyn
> I think people need to get over their fear of the parens and start paying
> more attention to it.

i have no problem with parentheses. it’s the JVM that gives me pause. i feel
.NET and BEAM are the better choices these days with c#/f# and
elixir/erlang/lfe, respectively.

i would love to use a lisp/scheme but just don’t feel comfortable with the JVM
and how much of it comes through in clojure.

~~~
LandR
Then compile clojure to .Net?

Clojure has compilers for both jvm and .net

~~~
nikofeyn
as far as i can tell clojure clr is just a side project for a couple of people
and in no way gets the same full support as clojure on jvm, not to mention
that it lags behind clojure on jvm. and again as far as i can tell, no one
really uses clojure clr. i have never seen anyone mention it other than to
point out it exists. it isn’t like clojure purports to be a lisp on both jvm
and .net.

it is also unclear how to interop clojure clr with c# and f#. clojure clr
doesn’t address the want of a stable vm, clear usage, and supporting toolset.

------
kugelblitz
Sorry if offensive or presumptuous, I assume you are max. 30 years old?

Being a freelancer the last 5 years (previously doing webdev part-time for 15
years) and having a couple of long-term side projects, I've been "burnt"
enough that I've gotten tired of chasing shiny tech, just for it to become
abandoned (e.g. bower, grunt, AngularJS) or introduce big breaking changes
(e.g. some upgrade paths in PHP's Laravel or Symfony).

Using Python with Flask was a breath of fresh air (ironically because it's
"boring") and trying to keep setup / infrastructure overhead low in the
frontend (e.g. using good old Bootstrap, combined with Parcel.js) has reduced
debugging significantly so I can focus on developing features. Instead of
shiny new tech, I can actually present shiny new features.

It's important to know of the new tech, but I think diving deep into new tech
just because it might seem cool now can be frustrating and inefficient long-
term.

Of course it depends on what you want in your developer career. I have one
profitable side project and 2 more that I hope to make profitable this year.
Yes, it took 7 years and they use boring-ish tech (PHP / Symfony and Python /
Flask, both using PostgreSQL, and none of them a SPA) but that's ok. I have
colleagues who have started 15 side projects in the past 5 years, each using a
different stack, but none profitable and none maintained over 6 months.

~~~
elicash
What a condescending response.

Yes, this person is a student. No reason to act like this.

~~~
azangru
> No reason to act like this.

Not the author of the parent comment; but with bristling replies like this,
aren’t you dismissing the experience of those who, through years of
experience, have become weary, and disillusioned, and a bit cynical? Isn't it
also a valuable perspective (don't go for the new and shiny; stick with the
tried and true), delivered in exactly the same way many older craftsmen have
historically shared their knowledge with the younger and more enthusiastic
ones?

~~~
zinclozenge
There are plenty of reasons to learn new languages and frameworks. Dismissing
them because of 'new and shiny' is not a good reason.

~~~
tracer4201
The only reason to learn most of these frameworks is if your line of work has
a high chance you’d inherit, need to support, and/or build new features on top
of such a code base.

Otherwise, we don’t need 10 different tools for building—what is at the end of
the day—a simple website or CRUD application.

Complexity isn’t a good thing. Creating complexity is the first sign of
inexperienced coders.

~~~
SahAssar
One good reason is to learn different ways of doing things. I think the best
way to understand why something is the way it is is to look at different ways
it could be done and what are the pro/cons of it.

I've seen many times that trying and understanding a new framework leads to me
implementing something in a better way in a framework I was already using.

------
zbruhnke
I came here to tell OP to spend the time learning something like Terraform
because it is not a trend or a fad, has wide adoption by the enterprise, gets
them closer to the metal in understanding how everything works and will almost
definitely help them in their career.

I've instead found a flame war with someone presuming a person's age and
preceding to talk about how much better they are ... oh HN why does it always
come to this.

You were once a person who knew less. Someone probably helped you along the
way too. Just be a decent human and give an answer without trying to prove how
wonderful you are

~~~
morenoh149
can you use terraform with docker? should you?

~~~
pensatoio
No, you should not use terraform with Docker. Use something like microk8s or
docker-compose to spin up containers for local development, then run terraform
against k8s/ECS/your platform of choice to codify the infrastructure as code.

------
DyslexicAtheist
why not something that doesn't seem to relate to your backend work at all,
e.g.

Dennis Yurichev's Assembler book will take you all of 2020 to finish :-) (aka
"Reverse Engineering for Beginners"):
[https://beginners.re/RE4B-EN.pdf](https://beginners.re/RE4B-EN.pdf) (see also
HN discussion
[https://news.ycombinator.com/item?id=21640669](https://news.ycombinator.com/item?id=21640669))

Erlang and BEAM is incredibly cool concept:
[https://www.youtube.com/watch?v=FonRzASOkZE](https://www.youtube.com/watch?v=FonRzASOkZE)

I also really like Nim: [https://nim-lang.org/](https://nim-lang.org/)

Or something totally different: learn about BGP, BGP-sec and modern
alternatives, e.g.: SCION [https://www.scion-
architecture.net/](https://www.scion-architecture.net/) ...

Security Engineering is essential reading even (or especially?) if you're not
working in infosec:
[https://www.cl.cam.ac.uk/~rja14/book.html](https://www.cl.cam.ac.uk/~rja14/book.html)

Or/and look at which new RFC's might give you ideas for cool side-projects and
then use the new language to come up with something -u-s-e-f-u-l- FUN to
build.

~~~
madhadron
Anderson's 'Security Engineering' is a great read. It's a giant tome, but if
you have a little bit of darkness in your soul, you will spend most of it
giggling gleefully.

~~~
DyslexicAtheist
agree. I thought the Mig-in-the Middle example was sublime, (even though he
said later it was _" unfounded"_[0][1]):

 _> One case history that unfortunately turns out to be unfounded is the story
of the `Mig-in-the-middle' attack, pp 19-20. I got this story over a beer from
a chap I met at a conference who was wearing SAAF uniform, and it seemed
technically plausible. I tried to get independent verification and failed, as
I mention on page 19. I used it, with that caveat, as I've found it is a very
good way of getting students to understand the risks of middleperson attacks
on crypto protocols. However, in September 2001, I learned from a former
employee of the South African Communications Security Agency that the story is
apocryphal. As there were no South African air defence forces on the ground
inside Angola, IFF was not used there, and the SAAF did not have secure mode
IFF at the time anyway. I am also told, however, by former GCHQ / Royal Air
Force sources that similar games have been played elsewhere by other forces.
See the excellent books by R.V. Jones (references [424] and [425]), plus the
later chapter on electronic warfare, for more on air combat deception
strategies. _

[0] [https://www.dlab.ninja/2012/04/mig-in-
middle.html](https://www.dlab.ninja/2012/04/mig-in-middle.html) [1]
[https://www.cl.cam.ac.uk/~rja14/errata.html](https://www.cl.cam.ac.uk/~rja14/errata.html)

------
candu
IMHO it's a good idea to learn things at different points on the adoption
curve - learning to balance "cutting edge" with "already widespread, I just
haven't used it" helps in making good judgments about tool selection for
projects.

Reactive component frameworks: I've been quite happy with Vue. I'm interested
in learning Svelte - don't know if I would use it for production yet, but it's
definitely gaining traction and has some interesting ideas. (The compiler-
based approach makes a lot of sense, especially with wasm on the horizon and
the desirability of cross-compiling to native mobile platforms.)

Visualization / mapping: Mapbox GL is amazing, to the point where I can't
recommend Leaflet anymore; the only major hurdle is their style spec, which
makes a lot more sense if you have some exposure to LISP-like languages.
AFAICT d3 remains the gold standard for interactive visualization, and the
micro-library approach of v4 / v5 means you can take advantage of things like
webpack tree-shaking. I'd love to play around with Observable notebooks as an
alternative to Jupyter.

Databases: PostgreSQL + PostGIS. If you aren't _deeply_ familiar with the many
awesome features of this combo (vector tile generation via ST_AsMVT,
functional indices, full-featured JSON support, transactional DDL, etc.), take
the time to become familiar; there's a good reason SQL is the new NoSQL :p

Other things of personal interest, in no particular order...I'd love to learn
more about HTTP/2, GraphQL, wasm, ways of organizing CSS, and ways of
organizing ETL / automation pipelines. For languages, I'll usually run through
tutorials every now and then to get the feel, but other than that I largely
take a "just-in-time learning" approach.

------
kamranahmedse
I am the maintainer of these roadmaps
[https://roadmap.sh/roadmaps](https://roadmap.sh/roadmaps) if it may help.

We are in the middle of updating them for 2020; frontend roadmap has been
updated, backend and devops are expected to be published in the next couple of
weeks. Also, one of my goals this year is to make these roadmaps interactive
with clickable nodes, adding details for each and making them easier to follow
for beginners.

~~~
azangru
> frontend roadmap has been updated

I don’t believe CSS modules belongs in the CSS-in-JS rubric; and you really
ought to add Eleventy to the list of static-site generators; it’s on the rise
and kicking serious ass (much better for a front-end developer than Jekyll,
anyway).

~~~
kamranahmedse
For CSS modules, yes I am aware of it - that and styled JSX should not be
labeled under that. I need to publish that with a couple of other mistakes
that I overlooked.

For eleventy, this is the first time I am hearing about. While it might be a
promising item but the purpose of these graphics is not to add everything that
exists out there but to have the items that are most in demand today and the
ones that the employers might require.

~~~
azangru
> For eleventy, this is the first time I am hearing about.

Things are changing fast in the frontend world; a couple of years ago you
probably wouldn’t have heard about Gatsby :-)

Eleventy occupies a sweet spot: it is about as simple and barebones as Jekyll;
yet it is written in Javascript, which is certainly much more welcome to
frontend developers than ruby-based Jekyll or Go-based Hugo; it is very
tweakable (like Gatsby and unlike Hugo and probably Jekyll). It’s been around
for probably two years. It’s been talked about on various dev podcasts. It’s
mature enough that the page for Chrome Dev Summit was made with it.

------
scarface74
For context, I’m 45, but was an “expert beginner” staying at one company for
over a decade before I took my career seriously a little over a decade ago. I
also don’t live on the west coast where both salaries and the cost of living
are both far beyond normal.

My experience from being in the job market frequently, watching trends,
talking to people in the industry locally and recruiters, is that it doesn’t
take more than about 10 years to reach your salary peak as an individual
contributor or even as a hands on team lead/architect no matter what
“technology” you learn. Not saying that’s a bad thing. I’ll take more money if
it is given to me, but that’s not really what I am optimizing for.

What I am optimizing for is to stay current with the trends and to know enough
technology that is on the “Slope of Enlightenment” phase of the Hype Cycle.
I’m doing that by making sure that I am both working for companies that are
not using outdated or unmarketable tech and doing resume driven development.
At 45, I can’t afford to be an out of touch old guy and then start whining
about “ageism”. That’s good enough to get the “right now job”. Meaning if I
need a job _now_ I can email some recruiters and have another job within less
than a month as a bog standard Enterprise CRUD Developer/Architect.

On the other hand, if you just focus on “technology” you’re a commodity. There
are thousands of people who know “technology”. You can get a job quickly but
it won’t pay that much above median.

Focus on architecture and how to deliver business value. I know plenty of
“smart people(tm)” who can’t deliver code that makes money or saves money
worth crap. This is the key to negotiating your way out of being another
commodity developer.

Although to make a lot of money, knowing technology that is on the “Peak of
Inflated Expectation” may help you to overcharge as a high price consultant by
going after VC funded companies with no business plan and plenty of access to
money. The best way to make money during a gold rush is by selling shovels.
Right now, for me, that focus is “cloud consulting” or being a “Digital
Transformation Consultant”. When and if that starts trending to the “trough of
disillusionment”, I can always fall back to development.

~~~
bcrosby95
This makes me wonder - what do you plan to learn in 2020? What do you see as
in that phase now? As someone that is nearly 40 and has a family your goals
seem fairly in line with mine. Not enough time to follow all the new hype, but
need to keep up to stay employable.

~~~
scarface74
I spent the last two or three years learning all of the core fiddly bits of
AWS. In 2020, my goals are more about “sharpening the saw” by going deeper in
C#/.Net Core and the related frameworks, Typescript and Python.

Also focusing on documentation, architectural diagramming and communicating
more clearly with non technical people - “the business”.

I’m hedging bets between preparing for a “right now” job or contract as an
engineer if things go sideways and the “right job” when the time comes as
overpriced consultant working for a consulting company.

Most of my time studying outside of work is done by watching videos on my
AppleTV in my home gym while working out. Luckily, now part of my job is what
they call unofficially “special operations” - to do proof of concepts using a
technology and coming up with documentation and deployment strategies.

------
K0SM0S
If you're in the web sector, definitely give a try to wasm. Have a go at Rust
while you're at it — see what I did there?

I'm personally hot for GraphQL because it's a powerful paradigm to model data.

Both Go and Rust are incredibly interesting languages, in very different ways.

In some ideal world, Go fits in a scaling/efficiency vertical somewhere in-
between C and C++ (it's very specific but it basically encompasses all
middleware, many microservicing archs, and most 'simple' projects at the
edge).

Rust is more of a C++ juggernaut that does it all, if it prevails it'll be
applicable to anything and everything.

Both have extraordinary great communities, very welcoming and attracting many
great minds. Support is all but guaranteed for the next decade. You just can't
go wrong with either, imho, just pick one that fits your domain best.

I'd be happy to work in both.

~~~
zozbot234
Go competes with GC-based and scripting languages, not really with either C or
C++. Rust is "C++ like" in a broad sense, but highly simplified and offering
memory safety, so it's also competing both with C (except in deep embedded
where some platforms might not support it) and (to a lesser extent than Go,
tbh) with higher-level or scripting languages. While it's not literally
applicable to "anything and everything" it's actually pretty darn close.

~~~
K0SM0S
> scripting languages

That's what they say, but in practice people report that the lack of the more
intuitive tooling like REPL in Python is a common reason not to use Go for
scripts.

> not really with either C or C++

Well in terms of e.g. concurrency, compiling, syntax... the initial intent by
Pike and Thompson was clearly unambiguously to do better than C++, which was
the language they used at Google at the time.

They literally dug up SCP (1978) and the Oberon family to design a simpler,
more manageable approach (the Go spec really is user-centric from inception).
It was also months after the release of the first multicore CPU by Intel
(Core2Duo iirc?) which paved the way to parallelism.

Regarding C, I agree in terms of domain / purpose insofar as C goes below (not
familiar with it myself but cgo lets you inject C). I suppose I mentioned C
because that's the standard performance benchmark that people tend to aim for
(including the Go team, often), and Go is often a very valid albeit much
simpler direct alternative to writing some package in C.

About Rust, thanks a lot for the precisions. I'm not as familiar with it as
Go. I do find that Rust has incredible potential to be a really good high-
level language, much more expressive than Go will ever be (by design,
different goals).

~~~
inimino
I consider Rust a lower-level language than Go, because it's forcing the
programmer to deal with memory management. In what sense do you consider it
higher-level?

~~~
K0SM0S
Rust is lower-level than Go, but it's also higher-level (!) insofar as Go is
among the least "expressive" languages out there — has to be its #1 criticism
/ value depending on where you stand.

Go is very niche in scope, which is how it manages to be so essential.

~~~
inimino
I've heard this criticism a lot, but I don't really understand it. In
comparison to Lisps, Haskell, and other languages I love, of course Go is
inexpressive, but that's part of the point. In comparison to languages with
which Go actually competes, e.g. Java, C++, etc, (uncharitably, various
flavors of Blub) I don't see it as particularly inexpressive. In particular,
although Rust ostensibly has some very high-level features like macros, in
practice they are only used in particular very narrow domains and are
discouraged elsewhere, so I consider Rust to be a less expressive language
than Go overall. My measure for expressiveness is simply amount of code
divided by functionality. Go seems to hit the sweet spot for expressiveness
for languages in this class, without requiring programmers to learn a totally
new paradigm. In short, "blub done right". Whereas Rust seems to be aiming
very specifically at C++, trying to design a C successor as we would do it
today.

~~~
K0SM0S
As far as I'm concerned, you're preaching the choir! ;-) Very well worded, by
the way.

But I've heard enough opinions to know this is opened to preferences.

------
carapace
In a word: biotech.

Okay, yeah, that's a bit beyond the scope of your question...

Tech-wise I think the stealth silver-bullet will be "Categorical"
programming†. When this hits it might even _contract_ the job market for
programmers.

Compiling to categories" Conal Elliott [http://conal.net/papers/compiling-to-
categories/](http://conal.net/papers/compiling-to-categories/)

† As in a kind of PL paradigm:
[https://en.wikipedia.org/wiki/Programming_paradigm](https://en.wikipedia.org/wiki/Programming_paradigm)

~~~
mrosett
I realize it may have been an offhand answer, but what do you have in mind? Go
get a graduate level understanding of biochemistry? Start working with genomic
data? Etc.

~~~
sansnomme
(Assuming a CS background) To do anything useful/fun/interesting in bio you
should have a strong understanding of the Central Dogma, once you understand
that you can move on to the rest. Many here recommend building gene analytics
and other similar software/SaaS. I don't recommend it because you learn
absolutely nothing from those low hanging fruits. Genetics and its relation to
CS, at a sufficiently low level, is mostly string manipulation and search.
There is a market if you are willing to build and do sales but it's hardly
exciting. Better to get some actual wet lab experience and understanding, than
become yet another "data science" biotech startup. We have had enough of those
in healthcare already, tons of so-called "health tech" companies that were
merely performing analytics on wearables. Profitable? Maybe. Exciting and
innovative? No.

 _Some reading material_ :

Synthetic biology: A Primer

An introduction to systems biology (get the 2020 edition)

O'Reilly: Biobuilder

Molecular biology of the Gene

Campbell's Biology

 _YouTube Channels_ :

The Thought Emporium

Josiah Zayner

Khan Academy Biology

Biology Professor

Shomus Biology

(The first two deal exclusively with bioengineering)

~~~
madhadron
> Molecular biology of the Gene

I really, really wish this book would stop being recommended. It doesn't teach
any biology, just a lot of random facts disconnected from reality about a
fictional average eukaryotic cell. Nowhere in it do you build an intuition
about working with biological systems.

~~~
sansnomme
Sorry I meant Molecular Biology of the Cell. I think it's meant as a reference
more than anything else. Bio is like ML in that it moves very quickly, so
there is the need for constantly updated evergreen texts.

~~~
madhadron
Whoops, I thought you meant MBoC as well. I also wish everyone would stop
recommending that one, too. I don't think it's even a good reference. I can
safely say that I never got any useful information out if it during the course
of my graduate work in biology.

------
quelsolaar
Mathematics. Its Probably just another fad that will prove worthless next
year, but I'm jumping on the band wagon for now.

~~~
oneepic
IMO 1) it's already been a fad for a while, and 2) if you're talking about
higher-level math (Lie superalgebras, differentiable manifolds, and other big
words...) most of it has been and still seems to be impractical (read:
worthless) for general programming.

~~~
Tainnor
Differentiable manifolds seem to lie at the core of differentiable programming
which is supposed to be hot stuff in ML right now. Not sure about Lie
superalgebras, but finite fields and elliptic curves are useful in
cryptography, homotopy seems to find some application in type theory, category
theory (or at least abstract algebra) seems useful for languages with ADTs
etc.

Not saying that you need to know the theory in order to be able to use all of
that (probably most people don't, or at least only the most superficial parts
of it), but there are enough applications if you take a close look (and then
there's all the obvious stuff: graph theory, numerical analysis, optimisation,
etc.)

I would say, though, that more that the concepts themselves, it's useful to
have some modest mathematical maturity, i.e. you know how to formally prove
something (even if you don't use it often), you can read a paper, you can
digest abstract definitions, etc.

------
rvz
> +1 if you suggest something cutting edge that very less people know about!

Well I would suggest learning about The Fuchsia Operating System (a new OS by
Google) which is extremely cutting edge of OS Development and its kernel
(Zircon) brings interesting concepts to the table in terms of design and
implementation. It is bleeding edge enough that Flutter is used for the new
apps, Rust is used for the drivers and the netstack uses Go and a official
port is already on the way to upstream.

All the Flutter apps, you're making will run instantly on Fuchsia, and in this
decade, I would place a bet on Fuchsia to be the successor of both ChromeOS
and Android.

~~~
tracer4201
How is it bleeding edge? I don’t think using the latest framework or language
to solve some problem makes it cutting edge. Is it more secure or introduce
some brand new paradigm that an OS curriculum wouldn’t cover? Or is this
cutting edge in the sense that it’s one more way to learn how to solve a
problem that you could have solved in 2010, but now you have to learn these
other frameworks or languages?

------
ttraub
"It is always good to keep yourself up to date with the hottest tech stacks."

It’s good to be aware of new stuff, but it’s also a good practice to have a
firm command of some well established technologies that have strong support
and resources behind them.

It’s been my experience that I get more work done when I can easily find
sample code and multiple explanations for API calls. Experimentation and R&D
to figure out some bleeding edge stuff may be fun but it’s a lot slower and
less stable than using tried and true methods.

------
mgkimsal
It's not a 'hottest tech stack', but I would suggest people take 2020 to learn
testing. TDD/unit/browser/whatever - look to incorporate testing in to your
work more often. For me, that has meant making sure code you're writing is
_testable_ first. I don't do hardcore TDD, but often am writing tests more or
less concurrently with little bits as I'm writing those bits.

I don't do this for every single project all the time - I do work on systems,
that are, essentially, non-unit-testable. While refactoring could be done,
clients/owners refuse to give appropriate time/resources to move in that
direction. That's their choice, and they pay the productivity price (and
often, are acutely aware of the situation but solider on anyway).

However, for my own projects, testing/testable code is an increasing focus,
and has helped my own code/projects to be easier to think about up front, and
easier to modify/maintain/refactor later.

~~~
crimsonalucard
How is this something to learn? It's more of something to try. Anyone who can
write code can write tests and anyone who can write tests can writes tests
before they code. It's trivial.

Instead learn formal methods. Learn how to prove your code correct for all
cases rather then verifying your code for one test case. This is learning and
it won't be rehashing what you know like tdd. Formal methods is brutally hard.

~~~
inimino
The concept of correctness by proof, rather than by spraying tests at the code
and hoping, is a shift of perspective, but it doesn't have to be brutally hard
and doesn't require going all the way to direct application of formal methods
(which is often impractical). I encourage people to go partway in the right
direction. Instead of telling me your test coverage, tell me how you can prove
that the core algorithm of your product is correct. Or how you can prove that
it is secure. This kind of thinking is the only thing I've ever seen lead to
quality code.

~~~
crimsonalucard
I don't mean to say that it's hard in the sense that you can't learn it. I
mean it's hard in the sense that it's like you're learning programming from
scratch again.

It will be a very different and much more challenging path then learning
another framework/language which is what most people just do over and over
again.

~~~
inimino
I suppose this is true. I haven't had a chance to work with or teach anyone
who is learning to think this way, and I don't really remember what it was
like for me. However, I've noticed that when I talk to some people who are big
advocates of TDD and so on, they seem to have such a different way of looking
at things that there's almost no common ground.

~~~
crimsonalucard
The variance arises from the fact that none of it is formalized or
theoretical. It's just a bunch of opinions.

------
chrisa
It’s probably worth learning some AI so you know what “AI” really is (it’s not
magic) even if you don’t use it - it can help cut some of the hype you hear. I
recommend fast.ai for that.

If you know JavaScript and want to make mobile apps, give React Native a try!
It’s a good choice for most business apps, and even some games.

------
Areading314
I am planning to focus on Go and developing a deep understanding of computer
networking. I think with cloud, IOT, increasing importance of cybersecurity,
understanding the nitty gritty of networks is going to be increasingly
important.

~~~
debaserab2
I agree with you and also want to increase my computer network knowledge. Any
resources you're planning to start with?

~~~
metadaemon
Can't go wrong with Beej's Network Programming guide!
[https://beej.us/guide/bgnet/](https://beej.us/guide/bgnet/)

Also, the ZeroMQ Guide has some fun networking concepts.
[http://zguide.zeromq.org/page:all](http://zguide.zeromq.org/page:all)

~~~
seisvelas
Beej's guide is fantastic. I found it from the suggested reading on one of the
OverTheWire wargames. I think of it as the true sequel to K&R.

~~~
zeroc8
Off topic, but Beej's Guide is how I want my ebooks formatted. I wish other
publishers would take note. Safaribooks, Packt, Manning, Amazon - their ebook
formats all suck. Just use HTML with a little syntax highlighting, that's all
it takes.
[https://beej.us/guide/bgnet/html/#bind](https://beej.us/guide/bgnet/html/#bind)

------
cmdshiftf4
I'm an Eng Manager and half of my learning time in 2020 will be focused on
developing better management/leadership skills. It's something I've found
comes with little mentorship opportunities in tech and is also hard to find
others to reach out to / network with for mentorship opportunities.

The other half / pure tech - taking on some of the stack that has largely been
abstracted by other teams as I've worked, namely CI/CD/Ops/Monitoring for
distributed, containerized systems.

I'll probably build something with:

\- Go on the backend

\- Typescript + React (maybe Vue) on the front-end

\- Postgres (really want to master this)

\- Redis for caching

and get it built and running on AWS with Kubernetes. Don't know what I want to
do for logs/monitoring/dashboards etc. as I've experience with ELK (don't
enjoy it), Splunk, Sumo and others but it's not as important a choice to make
right now.

Depending on how well that's going I may write a mobile app with Flutter or
React Native for whatever is built to round it out.

I have to say though, and I don't know how many others here feel the same, I
am getting some sense of anxiety over having no knowledge of or practical
experience in ML/DL. Is that justified? Part of me is tempted to invest the
entire other half of my learning time into ML/DL for at least the first 6
months and I'm still talking myself down on it.

~~~
ryanmercer
>I'm an Eng Manager and half of my learning time in 2020 will be focused on
developing better management/leadership skills. It's something I've found
comes with little mentorship opportunities in tech and is also hard to find
others to reach out to / network with for mentorship opportunities.

What is your plan for this?

~~~
cmdshiftf4
There's a lot of books on leadership and team building that I'm eager to read
- Difficult Conversations, The Five Dysfunctions of a Team, Good to Great,
Simon Sinek's books, etc. I'm planning on digesting some of those and trying
to utilize what I find applicable, iterate as I learn from it.

Communications is another area I'm planning on focusing on. I've very solid
written communication skills, so I plan to mainly focus on verbal skills. I've
one or two in-person workshops/courses I'm considering for this, as well as
potentially joining toastmasters due to their great reputation.

Putting focus on the above areas plus seeking targeted feedback more
rigorously should, I believe, help me grow considerably.

Networking is difficult, I have to admit. Not because I'm unapproachable or
fear approaching others, but I've found a lot of tech meetups are either
_very_ technology specific, or where they're not they're jammed with
recruiters, people looking for jobs or people looking to simply sell you
something.

Apologies for the delayed reply. What are your thoughts, since you ask?

------
dsiegel2275
Elixir / Phoenix. Specifically: Phoenix LiveView.

I've spent the last five years building SPAs using mainly React and see
LiveView evolving as a compelling alternative.

~~~
nickjj
Do you have any apps running in production that's using LiveView?

~~~
dnautics
I have a very backend (like, orchestrating customer vms) admin panel running
in prod with liveview. the elixir backend replaced a flawed stateless django
program and has been error-free since we kicked it over a few months ago. Mind
you the scale isn't big (we have 10 or so customers at any given time) and
will be hiring a junior to build a user facing liveview. I'm confident that
elixir is footgun-proof enough to do this.

~~~
nickjj
Nice.

Do you still feel that way even with the new features of LV being developed?
It feels like how you use it is being heavily churned on with the introduction
of Live Components and now people are also building custom unofficial
abstractions on top of that. But at the same time, end user features don't
seem to be being released that often.

IMO it's starting to feel like Phoenix is becoming very fragmented even though
it's already a small community. You have people not using Live View, some
people using Live View, other people using Live View Components and others
trying to build their own custom take on what a LV component is. Combined with
the documentation being pretty sparse on LV in general makes it pretty non-
friendly to develop with and a lot of the articles you read online don't apply
to "Phoenix". The apply to whatever variant of no LV vs LV vs LV components vs
LV custom component library style you use.

It reminds me of the Node days when tj stopped working with Node and a million
other libraries and styles started to spring up to become an alternative to
Express. It took years for that to settle down and it's still pretty
fragmented.

But a lot of folks just want to go heads down and write cool applications. I
really do like Phoenix but yeah, since the introduction of LV and watching its
development pace for the last year+, I'm getting kind of uneasy with how
things are unfolding.

~~~
dnautics
I dunno, I guess i'm too busy coding to be worried? I think the biggest thing
to worry about as an elixir developer is C#/orleans, but it might be okay on
account of who the hell wants to muck with C# when you can be in easy-mode FP
land.

------
manvsmachine
From what you've mentioned, I'm focusing on Go and GraphQL professionally (I'm
a backend engineer). Flutter will definitely get looked at. Something I'd add
if you also spend time in backends is infra - choose a system (probably AWS,
GCP, or Azure in that order) and a infrastructure-as-code middleware for them
(e.g, Terraform). More and more these days, the provider is now part of the
stack.

~~~
inimino
> More and more these days, the provider is now part of the stack.

That's a mistake, which industry will eventually recognize if it hasn't
already.

------
tmlee
If you are into smart contract development on Ethereum.

A new language called Vyper as an alternative to Solidity has launched that
said to solve some of Solidity's shortcoming

[https://vyper.readthedocs.io/en/latest/](https://vyper.readthedocs.io/en/latest/)

But it's so new that there aren't that many resources and community around it
yet

------
tonit
If you are on the java platform I have an unpopular recommendation: get
familiar with OSGi. Its specs, its history and its core concepts. The learning
path you go will teach you a lot about how to build systems, how to think
about api design, modularisation and standards (compared to one-off company
owned tech). Its almost certainly makes you a better developer/thinker.

------
dvko
Your suggestions seem a little over the place. I suggest focusing on a single
language instead.

Personally I would advise you to learn Rust and learn it well. Forget wasting
your time on ”hottest tech”, Rust is here to stay and will be used for decades
to come. The official Rust (git)book is a great resource to get started.

If you want to build for the web, learn React or Vue as well (but probably not
both).

------
perceptronas
Something that will still be useful 5 or 10 years from now. Functional
programming / Low level programming and etc.

~~~
tatoalo
Completely agree. (To me useful means also not hype buzzwords)

------
mindvirus
I can't say this is what you should learn, but what I've been learning
recently and enjoying:

1\. Ionic Framework with React/Typescript
([https://ionicframework.com/blog/announcing-ionic-
react/](https://ionicframework.com/blog/announcing-ionic-react/)). I've never
done much frontend work or mobile development before, but it's a lot of fun.
Ionic makes it easy to make a PWA and access native device functions.
Typescript is one of the nicest languages I've coded in - the type inference
is wonderful and the linters catch a ton of mistakes I wouldn't have
otherwise.

2\. Flask + Python. Really enjoy the simplicity of Python. I've been getting
into type annotations with MyPy. I honestly have mixed feelings about Python -
for small projects/exploring data it's been fantastic, but I feel really
limited by the lack of type safety when things get bigger. I've also been
playing with some BDD frameworks (behave and pytest-bdd), since I really want
to get a better understanding of how to build effective testing
infrastructure.

~~~
jjice
Python has grown on me a lot, and it's now my go to language if I need to test
out a concept. If I have an idea for a relatively small project (few days
maximum development time), then Python is my clear winner (unless performance
is essential). After it's made, if I see room for improvement, I go right to a
more performant language. Recently, Python rough draft -> Rust final draft has
been a great workflow for myself.

------
parsd
Learn everything about vanilla JavaScript really well. Just vanilla.

~~~
sircastor
I think this is really valuable. More than any popular framework, knowing how
JavaScript works at its root will give you a huge advantage in any JS pursuit.

------
truebosko
Learning what's new and shiny is great, but try to spend time this year
building something, seeing it live in the wild, fixing and debugging it,
nurturing it. Build on your critical thinking.

Perhaps do that with a new technology :)

~~~
mysticmode
This is a good point.

I would suggest the same, building something and let it pass out to the public
or contributing to the existing projects that might be using the stack that
you want to work with.

You learn a lot when you share your own work to others. Good life lessons or
maybe career lessons are often learned when sharing something.

------
vmchale
I think a lot of the world hasn't heard of Dhall ([https://dhall-
lang.org/](https://dhall-lang.org/)) but could make good use of it.

It's a sensible configuration language with types. And the Haskell integration
is quite good.

------
godot
For web frontend, Svelte.

I did a year and a half of React/fullstack dev and really didn't like it.
(disclaimer: was a fullstack dev for many years but focused on backend more,
and only worked with jquery frontend before 2017).

My next (current) job is backend dev so I haven't gotten a chance to do
frontend professionally again; I briefly dabbled in Vue and liked it; and then
I discovered Svelte and like it even more. I started working on personal
projects in Svelte and hope to learn a lot more. Honestly I'm just hoping for
Vue or Svelte to take off as they seem just much more sensible than React, but
React is a giant now and doesn't seem to go away any time soon.

------
bamazizi
What's surprising is that the question is "what tech to learn?" but most
answers (also his own suggestion) are mostly about frameworks and programming
tools.

My suggestion would be to actually look into "tech" such as distributed
systems (CAP theorem), DDD/Event driven architecture, CQRS pattern, workflow
automation, etc ...

------
mechhacker
Just went from building small Vue projects to trying out Svelte and I'm really
enjoying Svelte.

It's made some things a lot easier, even though I'm now forced to use the npm
toolchain. Previously, I liked to just include the Vue files necessary.

I'm finding how Svelte does binding and lifecycle much easier to deal with.
Vue's template system was making data flow more complicated than it needed to
be, or it was just my misunderstanding that made it so. Regardless, I was able
to re-create an small app (that had some template complexity causing me
problems) much easier/quicker in Svelte.

------
lubujackson
I am really liking Quasar Framework for quick Vue development. It bundles a
bunch of things that are annoying/confusing to new Vue devs (config hell) with
a lot of niceties baked in by default: linting, hot reload, tree-shaking, etc.
And it has a strong frontend UI on par with Vuetify and has good
documentation.

~~~
gremlinsinc
Surprised you didn't mention having Cordova/Mobile baked in... that seems to
be the biggest selling point that you can have one code-base for mobile, web,
pwa, electron, spa, etc.

------
jdkee
Basic survival. Swimming, foraging, fire-starting, hunting, etc.

------
mminer
I’m personally investing time to level up my proficiency with digital content
creation tools — Houdini, Unreal Engine, Unity. They mostly only apply if you
work in games or visual effects, but they’re a blast to play with even if your
day job is in a completely different industry.

------
cobby
Some frontend framework with fine-grained DOM updates like Solid by Ryan
Carniato, Surplus or Svelte.

Why: Frameworks that use fine-grained DOM updated currently top js frameworks
benchmark [1]. Svelte lags a bit behind in performance but it offers a better
developer experience

[1]: [https://rawgit.com/krausest/js-framework-
benchmark/master/we...](https://rawgit.com/krausest/js-framework-
benchmark/master/webdriver-ts-results/table.html)

~~~
SahAssar
I thought the idea behind these were not that the DOM updates are "fine-
grained" (they are in all modern frameworks), but that they usually skip the
"VDOM with a global state" model and instead try to have smaller chunks of a
page control itself.

So they might work very well if you can contain the state to a single
component, but if you have deep shared state dependencies or changes in state
in one component that changes a lot of other parts of the site it won't work
as well.

I'd also question if (with most modern frameworks) the framework is the
primary bottleneck. I usually use hyperapp-v1 as my frontend and find that
loading less and optimizing my own code usually leads to better gains than
tinkering in the framework.

Not saying that one should ignore benchmarks, but they should also not be the
"end-all" measure of a framework.

------
vmchale
I'm currently experimenting with Futhark. It's a ML-style functional language
that targets the GPU. It has nice Python/NumPy bindings so it's pretty easy to
offload some computations.

There's also accelerate although that sort of ties you into the Haskell world.

------
scanr
Generative Adversarial Networks

~~~
ghoshbishakh
Wow

------
moksly
Is it actually always a good idea to keep yourself up-to-date with the hottest
tech stacks?

We picked up the first angular, because of the “keep up mantra”. That turned
out to be a complete waste of resources when the second version released. I’m
not saying that it can’t be valuable, but these days we build 70% of our stuff
with python, Django for web with a minimal amount of JS because it turned out
our clients actually didn’t want SPAs. The rest we build in C#. When I look at
the job market in my region of Denmark, almost every job is for JAVA, C# or
PHP. No-one is hiring for Rust, graphql, go or any of the other hipster
languages / frameworks. People are hiring for modern Angular (along with C#),
but no one is hiring for the original version. So it’s frankly entirely
possible to skip entire “hot tech stacks” without it being a disadvantage.

If you ask me, you shouldn’t pick up things until you need them. Unless it’s
for fun, but who learns a new web-dev related framework for fun?

~~~
simongray
> When I look at the job market in my region of Denmark, almost every job is
> for JAVA, C# or PHP. No-one is hiring for Rust, graphql, go or any of the
> other hipster languages / frameworks.

Udviklings- og Forenklingsstyrelsen has a huge project written in Clojure,
ClojureScript and R and they're hiring all the time.

~~~
briajens
Depends on what boards you look on. In the startup scene there are a lot of
Go, elixir and Ruby on Rails jobs. A lot of founders, myself included are
trying to get people with these new competences

Ps: I also want To find a Dane who knows vue + tailwind. Impossible to dig up
so please go learn ;-)

------
gremlinsinc
My goal for 2020 is to STOP learning new langs/frameworks/etc. Stop being
focused on the process and MORE on the outcome. What i'm building. Why I'm
building it. And fucking complete some shit. I have 10 SaaS's in dev at any
one time and haven't shipped anything.

2020's are going to be about me shipping crap instead of starting and jumping
to something else. No more wasting time.

------
aportnoy
Calculus, linear algebra, and C will be hot as fuck this year.

------
MehdiHK
NestJS. This is probably the best thing that happened to Node.js ecosystem to
write maintainable backends.

[https://nestjs.com/](https://nestjs.com/)

~~~
dns_snek
While I really hope that Nest.js eventually succeeds and provides a reliable
framework to write maintainable web applications, my experience with it has
been, in a word, frustrating. I find the integration with remaining ecosystem
(testing, databases, etc.) quite poor.

For context, these are my experiences from the last few months of using
Nest.js in a project we're working on at my company.

\- It strongly encourages you to use TypeORM, which is just not production
ready and has many (sometimes subtle) issues [1]

\- Logging is often extremely bad. I've encountered issues where I made a
mistake in my app bootstrapping code and there were no errors logged, but the
application simply didn't start. Then I had to play a very frustrating game of
commenting out pieces of code until the application would start again

\- Nest.js error classes (HttpException and those that inherit from it, such
as BadRequestException) do not properly inherit from built-in Error, which
means that when your tests fail, the only output you'll get is "Error: [Object
object]" printed to the console without a proper stack trace.

\- We used their GraphQL module and when we tried to send a few MB of data to
the client for initial state, memory usage would balloon to hundreds(!) of
megabytes from a single request.

\- Misconfiguring any part of GraphQL would again lead to an error being
thrown somewhere inside their libraries, with a message like "Cannot read
propery 'target' of undefined" with no stack trace or any indication of where
the problem might be

\- Documentation is lacking and doesn't do a proper job of documenting the
features. Usually it's just a hello-world style example without much depth

That's just my experience, maybe I was just "using it wrong". But it was
definitely far from a smooth experience and lead me to waste countless hours
trying to track down and fix obscure issues.

If you're thinking about using Nest.js, I would recommend that you ditch
TypeORM and use something else, I also wouldn't recommend using GraphQL with
Nest.

[1]
[https://github.com/typeorm/typeorm/issues/2065](https://github.com/typeorm/typeorm/issues/2065)

~~~
jrs95
I've never had a positive experience with Node.js and SQL databases in general
to be honest. I don't really see the point in using it outside of familiarity
with JavaScript. Nest + TypeORM might be as good as it gets in the Node world
right now, but pretty much every other major platform has better ORMs and
better frameworks. Node might have better performance and concurrency options
than some of the others, but it's not the best at those either. It's not
really clear to me that it's actually the best at _anything_. My preference is
honestly just to avoid it. In my experience there is always a better tool.

~~~
dns_snek
Personally I've had an ok experience with Objection.js, which is definitely
better than TypeORM. But otherwise I agree.

I'm learning Elixir right now, which has some really high quality and well
documented libraries and tooling, despite being a young language by itself.

------
dustinmoris
I would say if you have an appetite for learning something new, then pick
something which nicely complements your existing knowledge and broaden your
horizon.

For example, if you are a Java/C# corporate developer then maybe learn
something different like Go, Rust or go for a complete paradigm shift and look
at a functional language which will teach you complete new things and change
your overall thinking of software development.

If you have been mostly doing backend why not learn a frontend language? Just
pick one which you like the most from your initial gut feeling, don't
overthink it.

If you've worked with a lot of dynamically typed or interpreted languages,
then pick one which is statically typed and maybe compiled.

Basically, just learn something truly new, which will most certainly teach you
something regardless if you will continue doing it for a long time or not.

------
shpx
\- Svelte, a compiled front end JavaScript framework
[https://svelte.dev/](https://svelte.dev/)

\- Nix, a functional package manager
[https://nixos.org/nix/](https://nixos.org/nix/) basically, to install stuff,
instead of running `sudo apt install your_package` you edit
`/etc/nixos/configuration.nix` and then regenerate your OS from the config
stored in that file using `nixos-rebuild switch`. The benefit is that then you
can take that file to a new computer with a new installation of NixOS and
regenerate much of the state of your system just with that one file.

\- QUIC and HTTP/3\. I think you have to read the RFCs starting with HTTP/2 to
understand it, but really I just mean that you should be aware of them. I
think HTTP/3 should start to really exist some time this year and you should
consider enabling it in nginx once it becomes available.

\- Rust

\- A dependently typed programming language like Idris [https://www.idris-
lang.org/](https://www.idris-lang.org/) [https://www.manning.com/books/type-
driven-development-with-i...](https://www.manning.com/books/type-driven-
development-with-idris) or Lean
[https://leanprover.github.io/tutorial/](https://leanprover.github.io/tutorial/)
or one of the older ones like Coq or Agda
[https://plfa.github.io/](https://plfa.github.io/)

\- Python type hints and async

\- Deno (JS runtime by the creator of Node.js)
[https://deno.land/](https://deno.land/)

\- zstd, a relatively new compression algorithm
[https://github.com/facebook/zstd](https://github.com/facebook/zstd)
[https://quixdb.github.io/squash-benchmark/](https://quixdb.github.io/squash-
benchmark/)

\- BLAKE2b, which is the new hashing function you should be using. It's faster
than MD5 and cryptographically secure.
[https://blake2.net/](https://blake2.net/)

\- Keras

\- How to make VR applications (probably with Unity).

Not technologies:

\- Homotopy Type theory
[https://homotopytypetheory.org/book/](https://homotopytypetheory.org/book/)

\- Zero Knowledge Proofs

------
struct
I’ve recently redone our work CI setup with Typescript + Vue.JS + VueJS
Bootstrap on the frontend and Typescript + Prisma on the backend - it’s been
awesome so far. Took a little while to get the setup right, but it’s an
excellently productive combo and I’ll continue to use it in 2020.

~~~
leetrout
I’ve been stumbling over issues with Vue and TypeScript tooling playing nice.

Seems like the issues I hit either have open issues or I can’t find reasonable
solutions. Most recently I tried to convert a Vue app to TS and never could
figure out what knobs to turn (even copying over configs from a new, clean run
of vue create didn’t work).

Have you had similar troubles or have you always been able to set up a clean
project?

~~~
struct
The last time I tried, I used vue-cli to initialise the project and it “just
worked” in that sense. Converting an existing JS app might be a bit trickier
though - I guess you can specify at a per-component level what they’re
implemented in via the script lang attribute. So basically I would go with:
latest TypeScript, latest Yarn, latest Vue CLI, initialise a bank TS project,
add some basic components to check everything works, move your old app
components over one-by-one.

~~~
leetrout
If you happen to check your replies - curious why you would pick yarn over npm
or pnpm in 2020.

------
AlchemistCamp
For my own learning, I'm pursing three things:

1) Elixir: since I teach it, I pretty much need to keep digging further and
further into its ecosystem, looking for useful things to share with my
audience and looking for better ways of building things. For example, the
series I'm in the middle of is on LiveView and the next in my queue is on
Absinthe/GraphQL. I knew _nothing_ about LiveView a year ago and spent a good
amount of time last spring struggling with various Absinthe-related tasks. A
year from now there will be even more "must-learn" libraries.

2) The intersection of development and marketing: as a developer, there are
marketing systems I can build by myself that would be very difficult for most
smaller online businesses to do, but also highly valuable. I've been taking
some of Brennan Dunn's courses (working on his ConvertKit course at the
moment) and it's been one of the best investments I've made.

3) Rust: I don't have any business reason to learn Rust at the moment.
However, it's a particularly good complement to Elixir. Elixir's strengths are
stability and productivity, but it's a bit weak in brute force number
crunching. Compiling natively invoked functions in C/C++ has been a thing for
a long time, but at a terrible cost. If those functions trigger an exception,
they can take down the entire EVM, negating the famous stability of
Erlang/Elixir. Rust, on the other hand, is very good at making the most of the
CPU and memory available in a manner that guarantees safety. So NIFs written
in Rust can be used in Elixir projects without fear!

I'm also interested in using Rust with WASM, so there are multiple ways I can
see learning it paying off down the road.

For anyone out there learning Elixir: You might want to check out Alchemist
Camp. I've had overwhelmingly positive feedback from people who have used it
to learn Elixir from scratch
([https://alchemist.camp/episodes](https://alchemist.camp/episodes), scroll
down to the bottom and click Lesson 1)

~~~
solanav
I absolutely agree, Rust and Elixir are an amazing couple of languages! I
recommend reading [https://blog.discordapp.com/using-rust-to-scale-elixir-
for-1...](https://blog.discordapp.com/using-rust-to-scale-elixir-
for-11-million-concurrent-users-c6f19fc029d3)

------
mettamage
IMO go for timeless:

SQL

Write your own SQL db as an exercise

Regular expressions

Basic multivariate statistics (linear and logistic regression)

~~~
jjice
Regular expression are a good one that you can learn pretty quickly. I think
it follows that classic 80/20 rule, and that 80 percent can be an hour up
front and then regular practice for a week or two in regular workloads. You
can go extremely in depth, but to be effective, you don't need to. Learn how
they work and the syntax for the most common 'flavors'(PCRE, egrep, etc).

Try to incorporate them in places where you would normally use plain text
searching, or just practice on your current code base and see how you could
capture the name of all functions that return `int`.

Regular expressions are not always the answer. If you don't need them, usually
they're going to be slow, but they can be a quick hack in a script, an
effective way to validate input, or a fast way to find/replace in your text
editor.

------
yalogin
Can I ask you what you are trying to achieve and why you are looking for this
advice?

~~~
ghoshbishakh
I just want to know what are the new technologies that I should consider
learning. So that in my free time I can learn a few of them.

I am also interested in building tools for developers. May be I can build some
missing tooling for some exciting new technology.

~~~
rvanmil
> I am also interested in building tools for developers.

Kick current machine learning et al abstractions up a notch, making it more
accessible to the average developer.

------
cpach
A related question that I’ve been thinking about: What
technologies/languages/tools/stacks can I learn now, that will still be
relevant and useful in 2025, or 2030?

~~~
qw
Java and Spring (Boot)

I think it is unlikely that they will not still be relevant in 2025. With the
recent improvements of the Java language and looking at the roadmap ahead, the
Java language is looking more and more competitive.

Java 14 looks very promising and I think that the improvements to come will
ensure that the language will not become irrelevant, which many believed 10
years ago (myself included)

~~~
jrs95
From a job market perspective yes, but please don't actually choose to use
this bloated crap for anything if you don't have to. It takes a fast
underlying platform and turns it into something that's so much slower and is
doing so much metaprogramming that you're negating most of the safety
guarantees of static typing and not even getting a substantial performance
advantage for using a static language. There's simply no reason to use it
unless you're stuck with a bunch of devs that only know Java or you're in a
corporate environment where that's the only language you're allowed to use.

------
enos_feedler
If you value meaning over "hot", I would say the MLIR compiler framework has
the chance to accrue lots of value and meaning over the next 10 years. MLIR
builds on top of LLVM to provide a new API layer for writing modern compilers,
which will be important for languages targeting heterogeneous computing
platforms (ML workloads, HPC, etc). Lot's of the ML tooling in Tensorflow is
already being moved into MLIR.

------
motohagiography
Today, my background is 25'ish years in security design.

My near term aspirations about the ideas that will matter in 10 years from now
include more functional programming with Haskell's QIO monad for basic quantum
related concepts, understanding GANs, the gremlin stack for graphs instead of
cypher, and maybe some category theory. Solving problems in these areas is the
foundational knowledge for the next 10-20 years in tech, imo.

~~~
bostik
More than focusing on any single technology, I am willing to drive my stake to
the ground here.

If you have the background, or sufficient interest in security, add two things
to the mix: psychology and usability. The UX of security related
software/solutions are nothing if not atrocious. Fixing that would be a good
start, but I won't hold my breath. It's also going to be increasingly
important to understand why people - both individually and in aggregate -
do/choose/prefer certain things over others.

This goes way beyond blind A/B testing, btw: you can't just throw random
experiments on the wall and see what happens to produce the best incremental
ROI. You'll have to actually think about paths, not just the next fork in the
road.

~~~
motohagiography
What I've learned is they don't need problems solved, managing problems is
their job, they want data they can use as leverage to drive agendas in higher
level conversations that get them money/resources.

Security people make their livings managing a black box of uncertainty and
producing spectacles on behalf of whoever needs them as an ally for an agenda,
and when you solve a problem that reduces that uncertainty, you reduce their
leverage and value to their stakeholders.

The only valuable security products will be ones that serve that need. The
rest are science projects, imo.

I can replace security consultants with a SaaS product on a large number of
engagements, but that breaks the economics of the compliance game. Regarding
psychology, it may be a darker journey than you expect. :)

~~~
bostik
> _Regarding psychology, it may be a darker journey than you expect._

You may have a point there. Quoting our previous compliance officer: I am not
cynical enough. (My posting history probably already puts me in a pretty grim
bracket in HN, so there's a thought.)

------
maximilianburke
The next thing I can see myself playing with is Yew
([https://github.com/yewstack/yew](https://github.com/yewstack/yew)).

We've been moving to Rust in our backend, being able to share some of these
lessons (and code) with our front end would be really neat, in addition to
being able to take advantage of the new features coming down the pipe for WASM
(multithreading!)

------
gravypod
The Bazel build system. As time goes on we're going to have more languages,
more runtimes, more packaging requirements. It's pretty clear there will not
be "only one" language. Right now we don't have a build system poised to
manage complex deps while linking multiple languages, code generation for
multiple language targets, etc. Bazel is the closest thing to this yet.

It's a universal build system.

------
deepaksurti
\- Programming Language Paradigms

\- Algorithms and Data Structures

\- Digital Electronics

\- Compilers

\- OS

\- Networking

\- Math for CS

\- Distributed Systems

Why aim for hottest new stack before you solidify the foundations, then the
hottest new tech should be a smooth ramp up? Or am I old school?

------
sriharis
Haskell, and Clojure

------
dobladov
I think I will invest some time to learn Web-GL and how to make sharers. Since
it seems to be more and more important for Front-End development.

~~~
ghoshbishakh
This is nice! :)

------
JDiculous
\- [https://socket.io/](https://socket.io/)

\- [https://www.react-spring.io/](https://www.react-spring.io/)

\- [https://react-hook-form.com/](https://react-hook-form.com/) (I like the
"Library Code Comparison" section on desktop comparing the code to competing
libraries side by side)

I like any landing page that's straight to the point and gives you all the
information you need above the fold without forcing you to scroll down through
some parallax nonsense.

In general I think landing pages are overrated though, particularly for Saas
applications and ecommerce. Just show me the damn product instead of putting
me on a scavenger hunt to figure out how to demo it only to slap me with a
login wall!

On a lighter note, all the crypto ICOs had pretty impressive landing pages. I
guess when you're running an online pyramid scheme, the landing page itself is
the product.

------
Mountain_Skies
Blazor. I stopped doing development work about five years ago because
JavaScript seemed to be taking over everything. I absolutely hate JavaScript
so I ended up making a career change to not have to deal with it anymore.
Blazor (and other compile to wasm frameworks) lets you avoid 90% or more of
the JavaScript nonsense that makes up modern apps.

~~~
inimino
Do you hate JS the language or do you hate the ecosystem? JS gets a bad rap
from folks that have never had a chance to master the language and do pure JS
development, which is actually quite enjoyable.

~~~
scarface74
I hate the ecosystem. That being said, you can’t go wrong by having JS under
your belt. Because of its ubiquity and path dependency, it’s not going
anywhere.

Besides it’s the one language that can be used for any front end development -
web, mobile, and desktop.

Typescript makes it a lot less painful as a language but the ecosystem is
still a mess.

~~~
inimino
I encourage people to learn the language and avoid the ecosystem. You don't
need frameworks or build systems to write good, clean, performant web apps.
Unfortunately, arguments for simplicity often fall on deaf ears.

~~~
scarface74
It’s not about what you _need_ to get the job done. It’s about what you need
to be employable.

But any functionality from third party modules carries with it dozens of other
dependencies.

~~~
inimino
Getting the job done and being employable are more closely correlated in some
positions, industries, and markets than others. Finding those is a key to job
satisfaction if this sort of thing matters to you. From the other side, if
employment criteria is stupid and broken, we all have some professional
responsibility to push back against it.

~~~
scarface74
My responsibility starts and stops with getting a paycheck to keep a roof over
my family’s head as long as I am not working for a company that I feel is
doing something immoral.

~~~
inimino
Fair enough! You're not responsible for using organizational clout you don't
have, but can still look for opportunities to make things better as they come.

------
spicyramen
I work in ML and the trend I see is for Solutions rather than isolated
technology. MLops is used now to refer to the infrastructure to deploy a ML
pipeline end to end. This includes: VMware, Kubernetes and Docker, Apache
Spark/Apache Beam, TensorFlow/Pytorch and Pub/Ub technologies (Ignite,
Pub/Sub)

------
zikani_03
For 2020, I am looking forward to shipping a couple of products for my
"stealth mode" startup ;) - using boring stacks I know well PHP/CakePHP,
Python/Flask, Java/Dropwizard with the ever reliable Postgres, and maybe
Elasticsearch.

As for learning new skills; for the first half of the year I'm playing with
Docker more, TUS for file uploads, Apache Pulsar for Pub/Sub, Armeria for
building HTTP and RPC services (especially focusing on gRPC services), MQTT
for IOT, building USSD apps and WhatsApp bots for different applications as
they are increasingly popular around these parts (Africa).

The latter half of the year will focus on mobile development with Android,
GraphQL, ML and hopefully get back into Computer Graphics with Processing.

------
simplecto
Let's go in another direction here, away from a lot of the hype and cargo
cult. I will suggest IntercoolerJS [1] and TurboLinks [2]. These are simple
javascript libraries that let you do much of the slick in-dom updates without
all the hassle of build pipelines, JSX, or functional paradigms.

I have deployed this in production for clinical trials applications as well as
into side projects. Using this with Django means I have a lean, mean, and
simple stack without a complicated build or deployment process.

[1] -
[https://github.com/turbolinks/turbolinks](https://github.com/turbolinks/turbolinks)

[2] - [https://intercoolerjs.org](https://intercoolerjs.org)

~~~
vearwhershuh
Thanks for mentioning intercooler! I think a lot of people would benefit from
adding it to their toolbelt in 2020.

~~~
simplecto
You are welcome. I’ve been evangelizing it more on LinkedIn and twitter as
well as practicing talking points for a presentation about the Django
intercoolerjs stack

------
swayson
Instead of learning a new bespoke technology, How about learning more
fundamental, lateral concepts, that potentially could apply across
technologies. e.g. [https://brilliant.org/](https://brilliant.org/)

~~~
scarface74
Because companies never ask for “x number of years in fundamental, lateral
concepts”

------
nshung
SwiftUI. I think Apple will put a lot of effort into it to be on the same
level with UIKit. SwiftUI makes developing UI easier because it is declarative
just like React Native and it takes less time to build your typical CRUD app
on the apple platform.

~~~
nnd
Even though it’s extremely promising, I think it’s too early to start learning
it, as you won’t be able to use in production for the next couple years
because of the lack of backward compatibility.

------
rch
I'm learning about Dgraph and the variant of GraphQL it uses as a query
language.

Triple stores have always been useful in niche applications, but the scaling
capabilities and ergonomics of Dgraph could make it more broadly appealing.

------
tosh
another angle: take a look at evergreen things like relational algebra, logic,
graph theory, lisp, regular expressions, emulation, …

that said: I’m playing around with clojure, rust, k, spark ar, raspberry pi

------
gfodor
Learn 3D graphics/game engines. Learn enough Blender to be useful.

As AR/VR go mainstream, these will become important skills similar to CSS or
basic design skills for 2D applications.

------
effthisis
Quantum logic and programming. Given the demonstration of quantum supremacy,
AWS expanding into QC with their Braket service, and MS releasing Q# in 10-20
years this will be one thing you will want to have learned. All of the silly
JS frameworks can wait. The ML world gains massively due to underlying speed
gains of QM. Security considerations will have to change drastically. Having a
head start here is extremely valuable given the steep learning curve of QM/QC.

~~~
jophde
Sort of my plan. Working on math and then through an Algorithms book and an
Algorithms Course from GaTech OMCS in the summer. Planning on interviewing in
the fall. I have accepted the game.. After that Id like to use my new math
skills to dive into QM/QC. TBH its the only thing that seems like “new tech”.
I suppose web 3 is interesting haven’t had a chance to dive in.

------
theSealedTanker
C Programming

~~~
rumanator
Why C and not Rust? Not criticizing, just curious.

~~~
teunispeters
C is used in a lot of infrastructure - especially at lower levels (eg : server
operations, routers, etc)

Rust isn't. Not to say that couldn't change, but there's just no active
functioning infrastructure using it yet - or if it is, it's not very visible
yet.

Mind, I code in C daily and rarely see anything else anymore, but I work in
that infrastructure level of systems.

------
morenoh149
For me it's really learning Django with
[https://wsvincent.com/books/djangoforprofessionals](https://wsvincent.com/books/djangoforprofessionals)

really learning postgres with
[https://theartofpostgresql.com/](https://theartofpostgresql.com/)

trying out typescript on a side project

and migrating one project from heroku to docker + terraform

------
mfateev
Learn Cadence Workflow
([https://cadenceworkflow.io/](https://cadenceworkflow.io/)). It implements a
new way to build distributed systems using fault tolerant virtual memory. It
lowers the complexity bar for hardcore backend programming by eliminating the
need for managing the application state through databases and queues.

~~~
franckk
Hi, what do you mean by hardcore?

~~~
mfateev
I mean systems that have to scale to hundred of millions of users and
guarantee durability in presence of infrastructure and software failures.

Cadence is used in production by over 100 teams at Uber and multiple outside
companies. For example here is a presentation that describes how HashiCorp
relies on Cadence for the new version of its Consul product:
[https://www.hashicorp.com/resources/making-multi-
environment...](https://www.hashicorp.com/resources/making-multi-environment-
service-networking-on-microsoft-azure-easy-with-consul). The Cadence related
part starts at 17:30.

------
brylie
Invest in projects that have maturity and staying power. For example, Python,
Django, and Postgres offers a mature stack for web development.

~~~
gremlinsinc
Or PHP/Laravel/PG|MySQL Or Rails/PG Or Phoenix/Elixir/PG Or .Net...

There's lots of mature stacks not just django. Laravel being my choice because
I find django's default admin clunky to grok and kind of ugly would rather
just build my own admin or use a package that implements some basics that I
can plug into. I also like laravel migrations better, feels more like rails
which I started my career in. I know you can do that w/ django rest and what
not, but feels like an anti pattern to have a default admin panel that nobody
uses because it sucks or everybody uses but you don't want to because it's
ugly, etc... Also not a fan of the way people generally handle db models.
Eloquent is a beautiful thing, and Query builder is more beautiful when you
need raw queries ran.

I've only seriously used Rails/Laravel in dev/production and they're so
similar I can easily move back/forth and just change lang syntax. I like
laravel better simply because it has a lot more built-ins that I use a lot --
like queues, notifications, auth/oauth via passport, telescope(logging),
etc... Haven't used rails in awhile though maybe they've added those natively,
but the new ignite plugin for logs in laravel is amazing.

All my own opinions.

------
tw1010
Learning to become more creative so I don't have to chase new languages or
frameworks for intellectual stimulation.

~~~
leetrout
Any good resources you’ve found?

~~~
ellius
John Cleese videos, esp. "Creativity in Management" on YouTube

"The Creative Habit"

"Creativity: Flow and the Psychology of Discovery and Invention"

If you really take it to heart, though, the Cleese video is all you need.
Creativity in my mind falls into the category of "simple but not easy": you
only have to do a few things, but they require hard work and thought.

1\. Create time and space. Easier said than done if you have a busy life and
people who expect things from you. You need to make a quiet place you go where
you are not interrupted for a specific period of time. There you think,
imagine, focus on your goal and work.

2\. Mental clarity / confidence to play and do something not "serious."
Creativity requires a playful mindset and the confidence to overcome your
self-doubts and fears. Again easier said than done.

3\. You have to work. Creativity is a cycle of work, examine the thing you
made, and come up with more ideas / next steps. If all you do is think and you
never actually work, then you might be "creative" but you aren't "creating."
Alternatively if you just work and don't step back to think, you're creating
but probably not doing it creatively. So you have to get into a cycle of
create, observe think; create, observe, think.

~~~
leetrout
Excellent! Thank you!

------
sbmthakur
I am learning Rust and seriously considering Next.js.

The motivation behind learning Rust is that I wish to have a systems
programming language in my skillset and I generally love low-level system
stufff.

I am planning to learn Next.js because I have just started learning about
Server Side Rendering (SSR) and it Next.js seems to have a lot of traction.

------
ianai
What’s the community stance on Linux certifications? Taken as a granted for
people to take you seriously or not so much? Does HR generally require it
where you’ve worked? Etc.

Asking for myself really. I’ve been around tech and Linux/*nix since 2.4 was
the new shiny, but don’t have the RHCSA/CE. Have A+/S+, BS math.

~~~
kragen
It might not be a bad idea to do the certification, but putting it on your
résumé seems like a negative. It's like including "potty trained". Similarly
for most industry certifications except maybe the ones from cisco.

~~~
ianai
Thanks for the reply, I thought the red hat certs would be comparable to the
Cisco for resume purposes.

------
amai
Learn statistics. It will help you to understand that most people don't
understand statistics and the world is therefore full of bullshit. (See also
[https://www.callingbullshit.org/tools.html](https://www.callingbullshit.org/tools.html)
)

------
sidcool
I am focussing on Event Driven and Reactive programming models using Kotlin.
Any wise words for me?

Edit: Also GKE and Firebase.

------
corford
I'm going heavy in to a container first / cloud native workflow this year,
mixing a few existing tools I know (Consul, Terraform, Prometheus, Grafana)
with some new ones: NATS Streaming, Nomad, Vault, Loki, Drone and minio.

Also want to get good at Makefiles (and play around with jsonnet if I have
time).

------
Sunscratch
I’m going into Scala + Akka. There is a slight possibility my company will
adopt it instead of current stack.

------
ojhughes
Kubernetes - both the platform itself and the programming & extension model -
is a great area to get involved in. Some interesting things to look at include
development workflow tools such as skaffold.dev, serverless computing using
knative.dev and service mesh.

------
la_fayette
Standalone keras is at the end of life, so if you want to use deep learning
use tensorflow (api is still named keras) or pytorch.

I thinl computer vision is getting big. Many companies have problems which can
be solved with CV, however only view companies can provide solutions.

------
ex_amazon_sde
One good thing about the hiring process in Amazon is/was that the "hottest
tech stacks" in a candidate CV received zero brownie points.

I's amazing how many candidates would fail on basic reasoning skill,
programming, OS internals, security.

~~~
dominotw
> basic reasoning skill

you mean people who haven't done 2 months of leetcode before the interview ?

Amazon interview is one of the easiest to hack with some patience and basic
tips and tricks off of leetcode. Def don't need to know "os internals".

Just go to discussion forum on leetocde, __tons __of ppl who got into amazaon
doing this.

Example: [https://leetcode.com/discuss/interview-
experience/360829/ama...](https://leetcode.com/discuss/interview-
experience/360829/amazon-sde1-seattle-july-2019-offer)

Don't kid yourself into thinking amazon is seeking some deep CS knowlege when
all you have to do is

"Bought a Premium and did whatever company's tag that I will be interviewing
with."

Whole thing is quite embarrassing TBH . Funny pppl think grinding leetcode is
somehow superior to learning a tech stack .

~~~
jophde
Well the sad truth is grinding Leetcode is much more likely to get you a job
at big company where you will make 2x as much and work 1/2 as much as startup.
You are right. The only thing that matters is how well you do on the LC like
interview. If you do poorly but pass you get deleveled no matter how much
experience you have. If you do well because you practiced the same question
the night before you just massively increased your salary and rank because
obviously you are senior.

------
imedadel
I like learning things that are both trending and in demand.

So, for me, the next thing is trying to build something with React Native and
Go as they seem to be very trendy and in increasing demand.

~~~
rubyskills
Check out Flutter too. I recently dove into React Native and found myself
completely switching gears to Flutter for many many reasons.

------
Insanity
Go, I am biased towards it because it's the first language that made me love
programming outside of pure functional languages.

I also think AI/ML will become even more important.

------
RivieraKid
I just learn whatever is needed for the product I want to make. After being a
programmer for a long time it's very easy and fast to learn basically
whatever.

------
starpilot
Data structures and algorithms, because I'm transitioning from data scientist
to machine learning engineer. Better pay, more technical and less marketing.

------
masa331
learn Rails

~~~
nixpulvis
Honestly, still my favorite web framework.

------
nwsm
Docker + Kubernetes. Cutting edge:
[https://kustomize.io/](https://kustomize.io/)

------
kragen
WebAssembly seems like the most interesting thing to come out in virtual
machines in a while; in theory if you build something for wasm then you can
run it with native performance in all kinds of browsers, as well as, for
instance, in Fastly's edge nodes. Fastly released their wasm compiler and VM,
Lucet, last year; it can spawn new evaluation contexts about an order of
magnitude faster than Linux can spawn processes. For security, that's
potentially a big deal, because it means you don't have to reuse those
evaluation contexts.

Golang is very practical for building systems. But it's worthless for building
libraries except for Golang. Rust seems poised to displace C and C++ as the
standard language to write libraries you can invoke from any language, and
you'll be able to get better performance with Rust than with Golang. Maybe
it's going to be as practical as Golang for writing systems too, I don't know.
Parametric polymorphism is definitely a point on Rust's side.

Computer security in general is a really big deal. Unfortunately, 95% of the
market is fake, like, 19th-century patent-medicine fake. Sooner or later the
people who are doing real security instead of fake security will come out on
top, but possibly only after the next major war.

Observable (d3.express) looks like it's probably going to be the way people
write software in ten years. But probably not on ObservableHQ's SaaS offering,
which may mean not in Observable's language.

If you're writing stuff on the JVM, use Kotlin or Clojure, not Java. There is
literally no reason to use Java rather than Kotlin except if your cow-orkers
don't know Kotlin yet. Despite its heavy costs, the JVM is a really useful
skill to have in your utility belt, because of Android and because of all the
libraries already available on the JVM.

Embedded development is really hot, and getting more so, as computers get
smaller, cheaper, and lower power. You can get a computer now for less money
than a _transistor_ , if the computer is one of those 4¢ Padauk OTP jobbies
and the transistor is a common transistor like a 2N7000. Right now this is all
done in C, C++, and Arduino; Rust might get there soon, but the JVM won't.

By default, for embedded development, you should probably be using a BluePill
or an Espressif board (with the Arduino IDE, if that's what you like) rather
than an old AVR-based Arduino. The STM32 line used on the BluePill has an
amazing selection of chips; the GigaDevice GD32 line of STM32 clones looks
really appealing, but I don't have any yet. It looks like GigaDevice is going
to offer a RISC-V version.

That's at the low end; at the high end, we have unprecedented computing power
available, but generally no way to program it effectively, as in the days of
the 1970s "software crisis". The things we know about that do get real
benefits from this massive computing power include signal-processing
algorithms, linear algebra, and artificial neural networks. Probably learning
about numerical methods and signal-processing algorithms would be a good idea.
The software tools (Numpy, Octave, Tensorflow, GLSL, CUDA) are important but
secondary.

Provers got a lot better in the last decade; Lean, based on Coq's CoC, is good
enough that Kevin Buzzard is making real progress in formalizing mathematics
with it. People are also making real headway with HoTT-based systems. It's
becoming practical to actually do machine-checked proofs for the first time,
which means maybe we can automate a lot of the reasoning process involved in
programming.

Speaking of which, Hypothesis can get you a significant amount of that extra
reasoning power already, despite not attempting sound reasoning; if you're not
using Hypothesis or something similar for your testing, you should be. It's
worth writing a Python binding for your C or C++ project so you can test it
with Hypothesis. (Alloy and TLA+ might be similarly useful as a way to verify
higher-level models; Alloy, like Hypothesis, only looks for counterexamples,
but it evidently finds them often enough to be very useful.)

SAT/SMT solvers like Z3 can be applied to constraint satisfaction. If you're
not familiar with constraint satisfaction, basically the idea is that instead
of writing the implementation, you write the tests, and the solver figures out
the implementation for you. This is the way virtually all parametric 3-D CAD
models are done, which is itself an increasingly interesting area, precisely
because the cost of embedded computers is now low enough that we can surround
ourselves with enchanted objects.

In terms of webdev, the most interesting thing I've seen lately (other than
ObservableHQ) is Streamlit; it's a lot like React or redo, but running on the
server side to render a webpage.

Who knows what's going to happen with cryptocurrencies, but you should at
least play a bit with Bitcoin.

------
timwaagh
For Java I think Enterprise application servers remain key. This is nothing
new but knowing jboss, tomcat, websphere and friends will give you an edge.
Also certificates like OCA, OCP aren't useless and provide concrete evidence
you are what you say you are. On the front end Angular pops up frequently on
job listings and you will not likely be considered for those even if you have
frontend experience if you don't know it.

------
Legogris
Agree with other meta-comments here on the question itself. FWIW some other
random biased suggestions:

* Kubernetes * Rust * Terraform

------
nurettin
I am always at the edge with my computer science basics. Someone who doesn't
know their carnough diagrams, someone who can't make a simple computer using
logic circuits, who can't understand the math behind finite state machines or
constraint programming is never able to get ahead of me no matter what new
cutting edge tech they read on a blog or news site. So yeah, I recommend back
to basics.

~~~
inimino
[https://en.m.wikipedia.org/wiki/Karnaugh_map](https://en.m.wikipedia.org/wiki/Karnaugh_map)

I was not familiar with Karnaugh maps. For the curious, they are a visual, 2-d
representation of truth tables using Gray codes.

------
ghoshbishakh
Is investing time on VR/AR worth it?

------
bishnu
If you learn some new tech and then don't use it you'll just forget it. Learn
reactively.

------
agumonkey
rust, for high and low level (compiler, native, embedded, wasm)

beside that I'd like to get into advanced FP (PEval, effects) and advanced
combinatorics.

but right now I'm trying some vuejs (mildly suggested, it's not revolutionary
but it's a very nice thing to work with.)

------
louis8799
I would say keep an eye on Apache Arrow, it can potentially change how we
operate with data.

------
macpete
Learn Haskell to open your mind

------
bewestphal
\- terraform with Kubernetes

\- boilerplate Golang stack for productivity

\- computer vision fundamentals (for school)

------
saadalem
Just build things and you're gonna learn many technologies along the way

------
dustingetz
Clojure

------
ragebol
ROS2 is high on my list for learning this year, as well as Rust

------
KasianFranks
Unsupervised learning

~~~
jointpdf
In my experience, unsupervised learning is more broadly useful (and easier to
implement) than supervised learning. Use it for data exploration, data
validation, anomaly detection, topic modeling, recommender systems, cluster
analysis, etc.

Recommended algorithms:

\- UMAP
([https://github.com/lmcinnes/umap/blob/master/README.rst](https://github.com/lmcinnes/umap/blob/master/README.rst))

\- HDBSCAN ([https://github.com/scikit-learn-
contrib/hdbscan/blob/master/...](https://github.com/scikit-learn-
contrib/hdbscan/blob/master/README.rst))

\- MatrixProfile ([https://github.com/target/matrixprofile-
ts/blob/master/READM...](https://github.com/target/matrixprofile-
ts/blob/master/README.md))

\- NMF ([https://scikit-
learn.org/stable/modules/generated/sklearn.de...](https://scikit-
learn.org/stable/modules/generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF))

~~~
swayson
Totally agree. Such a useful set of tools. Here is an insightful talk about
the application of UMAP to learn embeddings for the folks who are interested:

[https://www.youtube.com/watch?v=OtVR_ZnXLu4](https://www.youtube.com/watch?v=OtVR_ZnXLu4)

------
eu
I would rather focus more on what I touched in the past.

------
kqr
bpftrace is coming in Ubuntu 20.04 LTS and knowing it will make bards sing
epic tales of your heroics.

~~~
psanford
bpftrace is already available in 19.04 and 19.10.

~~~
kqr
Which are not LTS releases.

------
zakokor
ML, NLP, NER

------
biolurker1
OP are you satisfied with the N answers you got? Was it better than seeing an
SO questions chart or github trends?

------
toufique
Elixir is on top of my list.

------
buboard
Pytorch

------
TomMarius
Webassembly, React Native

------
sthornington
FPGA/SoC for me.

------
narven
Any of the 100 cra... JS libraries that will show up in 2020 will be fine.

------
tutfbhuf
Category Theory

------
adamnemecek
Linear logic.

------
naeemnur
Angular

------
The_rationalist
Do you think graph databases will rise?

------
master_yoda_1
For the love of christ please learn some object oriented programming or invent
something using which you can write more than 100 lines of code which does
more than solving a leetcode problem.

------
The_rationalist
Kotlin is my new favorite language. You should give it a try. Fighting syntax
noise, clutter, boilerplate and redundant repetitive work is a big chunk of
what define a modern language, and at this, Kotlin is probably the best. It
will make you more productive AND happier. BTW using new languages that have
relatively poor ecosystem (go, rust, swift, elixir) is a far riskier choice
than people believe. Having a poor lib ecosystem is being a victim of software
poverty and you'll only measure how much you loose once it is too late. Kotlin
ability to idiomaticaly reuse the multi billions of value JVM ecosystem make
this language outclass all others "modern languages" The only other modern
language as good at reusing a complete, battle tested ecosystem is, to my
knowledge, typescript.

Others are condemned to perpetually reinvent the wheel instead of making true
progress.

~~~
pkolaczk
> Kotlin ability to idiomaticaly reuse the multi billions of value JVM
> ecosystem make this language outclass all others "modern languages

This is simply a large overstatement. There are many other modern popular
languages on JVM that have unrestricted access to the exactly same ecosystem.
To name a few: Scala, Dotty, Clojure, Groovy, Ceylon, Jython, JRuby.

> Others are condemned to perpetually reinvent the wheel instead of making
> true progress.

This is a funny statement to make when promoting a language that basically
took almost all of its features from Scala and a few minor things from the
others. There is nothing _original_ in Kotlin.

BTW: the ecosystem is not only libraries. It is also tooling. Kotlin is a
single, proprietary IDE language. Quite limited compared to the other
languages I listed.

As far as removing redundant repetitive code, while Kotlin may be slightly
better than Java in this regard mostly due to a nicer syntax, it stands no
chance compared to Clojure or Scala, which both allow extremely high level,
abstract way of coding.

Having said that, Kotlin is a fun language to write in. If I needed to write
an Android app, this would be my first choice.

~~~
blandflakes
I think your point still mostly stands, but I wouldn't really consider Dotty,
Ceylon, or Jython contenders for reasons of "not done", "not used", and "not
even close to supporting a modern version of Python", respectively.

