Live data from Hacker News

Ask HN: What Technologies to Learn in 2020?

news.ycombinator.com

361–370 of 441 posts

Re: Ask HN: What Technologies to Learn in 2020?

#361

Earlier quoted context omitted.

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.

Writing good test plans and building testable code is actually a skill with some underlying theory. It's just not usually taught that way.

There's no theory behind testable code. Mathematical theory exists only for formal methods.

There's a bunch of made up patterns and techniques for writing testable code though. Most of these techniques are actually bad.

Dependency injection with mocks is the one I hear about the most and it is also the worst possible way to organize your code. Do not write your code using this pattern... the complexity of this pattern hides the fact that it is, in fact, not improving anything.

Re: Ask HN: What Technologies to Learn in 2020?

#362

Earlier quoted context omitted.

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.

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.

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.

Re: Ask HN: What Technologies to Learn in 2020?

#363
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.

Re: Ask HN: What Technologies to Learn in 2020?

#365
post #76

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 relati…

Python isn't known for high performance As was said by one of the original Twitter architects, defending the choice of Ruby against people who were saying that it was at the root of all of their performance problems, for any well capitalized company, the language rarely makes a difference. A stateless web server is a “embarrassingly parallelizable”. The speed or lack there of your runtime is usually not a make or bre…

That's all fine if you stay stateless. Once a well-meaning developer introduces local application state into your web app or adds a feature that locks your database, your web server is no longer "embarrassingly parallelizable". This doesn't even start to handle issues you get when you use a single-threaded langugage that cannot handle multitasking well. Sidekiq makes money purely because Ruby is single threaded, and its thread will lock if you give it a task that takes too long.

The microservices movement seems to be a misguided reaction to these self-imposed issues where instead of handling proper task management on a process level or with async/concurrency, functionality is split between servers, codebases and infrastructure. This problem was solved with Erlang decades ago with the actor model and supervision, and newer BEAM languages like Elixir and LFE are a pleasure to work in.

You even have this model and concurrency ported to JVM with Akka, C++ with CAF. Granted, the Actor model and the field of concurrency as a whole is solving the problem of enforcing statelessness in a way such that tasks can be efficiently distributed multiple cores, and that no single task locks up your machine for too long.

Re: Ask HN: What Technologies to Learn in 2020?

#367

Earlier quoted context omitted.

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.

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.

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

Re: Ask HN: What Technologies to Learn in 2020?

#368
post #70

Earlier quoted context omitted.

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 pro…

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 everyt…

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

Re: Ask HN: What Technologies to Learn in 2020?

#369
post #326

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.

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.

Re: Ask HN: What Technologies to Learn in 2020?

#370
post #111

Earlier quoted context omitted.

Good point! How about assembly (x86/Arm)? How about Rust?

Assembly and C will still be around in 20 or 50 years. Rust is way too early to say.

I don't know about 50 years.

I have a feeling the Von Neumann architecture (including SMP variant) will be superceded by then even in the mainstream, and the idea of a "sequence of machine instructions" will seem rather old-school.

Post reply on HN