Live data from Hacker News

Ask HN: Language-agnostic concepts a Backend Engineer should know?

news.ycombinator.com

21–30 of 60 posts

Re: Ask HN: Language-agnostic concepts a Backend Engineer should know?

#21
- HTTP: REST/HATEOAS, headers, transport layer caching, rate limiting, load balancing

- Authentication: OAuth2 is probably the most widely used

- Authorization: RBAC

- Some rudimentary statistics: know how to read metrics, write metrics, etc

- Learn one RDBMS inside and out. Other database systems have their place but you’ll almost always encounter a Postgres, MySQL, MSSQL. Learn how to read EXPLAIN output, cursor based pagination, and indices.

Re: Ask HN: Language-agnostic concepts a Backend Engineer should know?

#22
I have found that the most important bit as a backend engineer is modelling the application domain precisely. A taste for making good APIs helps and knowing how to measure performance.

These days most backend engineers also tend to manage data sources so understanding them is also a plus

Re: Ask HN: Language-agnostic concepts a Backend Engineer should know?

#25
Besides all of the excellent suggestions others have said, I would add:

- the OSI model, DNS, TCP/UDP, TLS, and networking in general

- CPU flame graphs and other low-level performance/debugging tools

- the Knightmare devops story

- anger management

Re: Ask HN: Language-agnostic concepts a Backend Engineer should know?

#26

I think it's important to know about different data storage options and their trade-offs. Managing state is one of the hardest parts of backend development, particularly at scale, so an understanding of the trade-offs in databases/caches/blob-storage/queues, and when each is useful is important. I'd pay close attention to speed and "correctness". What's the consistency model of a system? Can we lose data and if so ho…

Absolutely this.

Also, I’ve had to explain this to so many other engineers, both junior and senior to me: most data is inherently relational. This next statement is a bit opinionated: 9 times out of 10 you probably want an RDBMS. I’ve seen so many attempts to shoehorn some ElasticSearch/Mongo/Neo4j/whatever database into a design because the developer wanted to work on CoolDatabaseTech. Then you’re stuck dealing with joins in CoolDatabase that it wasn’t really designed to do and frustrated at CoolDatabase’s lack of drivers in X language. Later on you’re dealing with stability and scalability issues you would never see with BattleTestedRDBMS.

The amount of capability a well designed Postgres instance can output is insane. I’ve seen a single vertically scaled Postgres instance compete with 100+ node Spark clusters on computations.

Re: Ask HN: Language-agnostic concepts a Backend Engineer should know?

#27
post #18
post #11

C and how to debug it. If you understand the system a layer of abstraction or two below the layer you work in, you will be able to debug deeper. Learn system calls, Various ways how to examine processes. I learnt a lot of this back in the day by completing war games on a site called digital evolution (dievo). Those are antiquated now but still a really fun way to learn it.

sounds very niche from an employability PoV.

These skills have helped me at every single job I've had, including my current one, where I've employed the skill a couple of times to discover bugs or unintended side-effects in third-party library code. For context I've worked in the industry for about 15 years now, in roles ranging from low-level programming on real-time systems to (currently) high level machine learning work.

It might be niche, but it can also be a differentiator--even if I'm not the fastest coder or the best architect I have these other skills that make me valuable at critical times. That's worth something anywhere.

And it's not even knowledge of C or C++, or syscalls or whatever: it's just basic "use a debugger" (not merely pantomime the commands, but understand what's going on) skills that can be the real game changer.

Re: Ask HN: Language-agnostic concepts a Backend Engineer should know?

#28
post #18
post #11

C and how to debug it. If you understand the system a layer of abstraction or two below the layer you work in, you will be able to debug deeper. Learn system calls, Various ways how to examine processes. I learnt a lot of this back in the day by completing war games on a site called digital evolution (dievo). Those are antiquated now but still a really fun way to learn it.

sounds very niche from an employability PoV.

You are by all means welcome to remain ignorant of how computers and frameworks and libraries all work, incapable of tracking down and fixing bugs in your application stack that affect you. Build a career filling in the boilerplate that Spring or Rails or whatever generates, and when the system doesn't perform as you expected it to, throw up your hands and say "I don't know what it's doing," and end the matter there. This is, presumably, a quite ordinary and common approach to software development.

But if you do so, then I must ask: what are you doing on this site? What can you possibly get out of it?

Re: Ask HN: Language-agnostic concepts a Backend Engineer should know?

#30
post #11

C and how to debug it. If you understand the system a layer of abstraction or two below the layer you work in, you will be able to debug deeper. Learn system calls, Various ways how to examine processes. I learnt a lot of this back in the day by completing war games on a site called digital evolution (dievo). Those are antiquated now but still a really fun way to learn it.

Also, learn Javascript and browser tech in general. One of the keys to high-performance systems is figuring out how to make the layer above and the layer below talk to each other while removing yourself from the process as much as possible.
Post reply on HN