How to become a server-side ninja (thread)

1. Try different programming paradigms

My personal recommendation

- PHP - simplest, traditional
- Python - more generic, traditional
- JavaScript - enter the async world!
- Go - learn goroutines
- Scala/Clojure - functional
2. Try different server-side frameworks

Don't try to learn all ins and outs. Instead, learn what's common for all frameworks.

- Request handling - processes, threads, coroutines
- Request routing - how to bind code to requests attrs
- Templating
- ORM integrations
3. Learn your platform

Linux basics - sockets, i/o, filesystem
Network basics - Ethernet, IP, TCP, HTTP
DNS - hostnames are only for humans
TLS, HTTPS - how X.509 certificates work

Learn SysAdmin craft - how to install packages, configure servers, troubleshoot perf issues.
4. Learn the fallacies of distributed systems

Network IS NOT reliable.
Latency IS NOT zero.
CAP theorem always works.

Everything is distributed nowadays. And everything fails eventually. So in your designs, you either choose between strong consistency or availability.
5. Always start from fundamentals

The knowledge is like a semantic tree. Start learning from the trunk, then move to big branches, and only then to the leaves.

Learn

TCP/IP before HTTP
HTTP before gRPC
Linux before Containers
Containers before Docker
Docker before Kubernetes

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Ivan Velichko

Ivan Velichko Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @iximiuz

9 Aug
The idea of Kubernetes Operators is simple and attractive.

But as it usually happens, the devil is in the details. I've been working on an operator for the past few weeks, and the learning curve is quite steep, actually.

Here are some projects that may help 🔽
1. kubernetes-sigs/kubebuilder

GitHub says it's an "SDK for building Kubernetes APIs using CRDs."

But you can scaffold an operator project with it.
2. operator-framework/operator-sdk

Much like kubebuilder, this project allows you to scaffold an operator real quick.

The difference is that it comes with batteries included:

- support of Ansible and Helm operators
- simplifies releasing operators (OLM)
- e2e testing
- linting
Read 7 tweets
7 Aug
How to grasp Containers and Docker (Mega Thread)

When I started using containers back in 2015, I thought they were tiny virtual machines with a subsecond startup time.

It was easy to follow tutorials from the Internet on how to put your Python or Node.js app into a container...
But thinking of containers as of VMs is an extremely leaking abstraction. It doesn't allow you to judge:

- what's doable and what's not
- what's idiomatic and what's not
- what's safe enough and what's not

So, I started looking for the Docker implementation details.
Docker is a behemoth doing many different things. There is plenty of materials on Docker but:

- it's either shallow and introductory container tutorials
- it's something deeply technical and hard to follow for a newbie

So, it took me a while to structure things in my head.
Read 22 tweets
31 Jul
DevOps, SRE, and Platform Engineering (thread)

Sharing my understanding of things after working in this domain for about two years.

Starting from the clearest one.

Dev - this is about application development, aka business logic. The only one that makes money for a company.
Ops - this is about the efficient deployment of the stuff created by Dev.

How to ship code - CI/CD, GitOps, etc. Plus, other things improving the Dev velocity but not concerned with the actual application business logic.
SRE - this is about keeping the deployed service alive.

All things observability. Defining SLO and tracking error budget. Monitoring and alerting. Incident response and postmortems.

Read 9 tweets
15 Jun
I spend a lot of time in the terminal. But I never touch Enter or arrow keys. Here is what makes me productive:

Command history navigation

ctrl + p - previous command
ctrl + n - next command
ctrl + r - history search
ctrl + m - enter

Can't imagine my life without these hotkeys
Line navigation

ctrl + a - jump to the beginning
ctrl + e - jump to the end
ctrl + u - del from cursor till the beginning
ctrl + k - del from cursor till the end
Work navigation (slightly more exotic, but I got used to it already)

alt + f - jump one word forward
alt + b - jump one word backward
alt + d - del a word in front of cursor
ctrl + f - jump one char forward
ctrl + b - jump one char backward
ctrl + d - del a symbol under cursor
Read 6 tweets
14 Jun
Algorithms and Data Structures at work

Long story short: I solved hundreds of LeetCode and HackerRank problems, and I do find this experience useful for my day job.

Here is why (thread)
Sometimes, a developer may stumble upon a purely algorithmic task.

In my very first company, I wrote a GUI framework for SmartTV devices. These sets were quite slow back in 2011, so I needed to make the framework really lightweight and fast because even jQuery would be too heavy
The framework had a virtual DOM tree (react wasn't a thing yet). And the element rendering and navigation were all about tree traversals.

This framework essentially saved the project from failure.
Read 17 tweets
10 May
Prometheus Data & Query Model (thread)

Basics first, bear with me.

Everything starts from a METRIC.

Metric is a certain measurement of a system one wants to track. Metric names are identifiers.

Ex: http_requests_total, gc_duration_seconds, etc.
Every metric is measured at a certain TIME and has a certain VALUE.

Time is always with milliseconds precision.

Value is always float64, even if it looks like an integer.

Metric value, aka sample, is a pair (value, timestamp).
A metric can be LABEL-ed to allow more fine-grained control over measurements.

Label names are identifiers too (in a common programming sense).

Label values are always strings.

Ex: http_requests_total{method="GET", status="200"}
Read 16 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(