Designing Data-Intensive Applications seems to be the industry standard, although it's not Go specific.
i've been reading Designing Data-Intensive Applications by Martin Kleppman and i would recommend to all backend developers out there that want to step up their game.
(i also love that it's a language agnostic book)
Backend->Distributed is a logical progression.
They may be out there, but I’m unaware of “Junior Distributed Systems” roles as a category. Alternatively you could look at DevOps roles. I strongly recommend Designing Data Intensive Applications, although you are going to need experience prior to diving in.
Anyone interested in the above should read Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppman
I would recommend BIWS for someone without direct experience that has an Excel modelling test in a week.
If you're trying to generally get better at your Excel / modelling skills then I'd recommend this book off Amazon:
https://www.amazon.com/Modeling-Structured-Finance-Flows-Microsoft%C3%82-Excel/dp/0470042907
Te lanzo algunas ideas:
*Paginación con SQL sin usar Skip limit o similar. *Función que comprueba si una página está online o no cada X tiempo. Emite una alerta si pasa más de Y caída, que esta alerta sea emitida como recordatorio cada cierto tiempo, otra alerta cuando se recupere, etc. * Alguna función que haga uso de una estructura de datos probabilística. P.e usa un Bloom filter para tener un contador que admita ciertos falsos positivos a cambio de consumir menos memoria.
Te recomiendo este libro https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Mentoring is great fun, you can't easily fail at that since it's always playing to your strengths. If it's something way out of your comfort zone, start and lead a reading group of e.g. DDIA and you can learn and teach at the same time. Beyond that, asking here for experience with specific systems will usually net you some good advice of what pitfalls there are and what tools would pair beautifully with your needs.
As a fellow europoor, I'm also in need of a salary correction.
I suggest you to make it a separate question (but describe your situation again), so you can see multiple opinions.
For a quick start, look into books talking about System Design aka design of high-load systems. Kleppman is the most famous one: https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Practical CS topics - databases, PL concepts (OOP, FP, type system...), CPU architecture, parallel and distributed programming.
There are also a few areas of Math useful for programer - statistics, linear algebra, a bit of discrete math and analysis.
I interview people related to distributed systems and also work in a big company as backend. From my perspective what I see in a candidate is not how they come up with a perfect solution but how they reason about different solutions and how they find problems in them. For example, let's consider you have to decide what database to use for an application. You could start with deciding SQL or nosql, you should consider number of updates per second and maybe if the content is not big you could go with a postgres db. If number per requests grow after some time, and you start having connection problem you can always increase your db size but still keep only one instance and one source of truth. What if this is not enough. Well now, if you are using AWS, you can use aurora and maybe have more that one replica... So, basically you have to think of problems. Scale, concurrency and consistency. This unfortunately it is something that I learned by working on it, and I sucked so much on my interview on this when I did not have any experience.
If you want, I'm in EU timezone, we can have a chat sometime:)
This is a very good book https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Distributed systems is one of the hardest CS courses you can take because distributed systems is freakin hard. One of the projects is implementing some of PAXOS. LOL, freakin PAXOS??? LOL!
You really want to prep for that class? Read this book: https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Also, go read some DS papers like Dynamo, memcache, zookeeper, google file system, etc etc.
​
You're welcome. And prepare to lose your mental health.
Mie mi-a recomandat fostul meu CTO cartea asta:
https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Nu regret ca am citit-o. E una din cele mai utile carti pentru orice programator care vrea sa capete o intelegere cat mai avansata asupra elementelor cheie a aplicatiilor web moderne.
Hey! Read this book: Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems - https://www.amazon.com/-/es/Martin-Kleppmann/dp/1449373321
This is THE BOOK for data engineering. It will help you to understand more about what's going on under the hood and a lot more. You can then ask questions about the system of your company and maybe even identify opportunities for improvement.
The word you're looking for is infrastructure.
I strongly recommend you read Designing Data Intensive Applications to get a better idea of what using microservices actually implies.
> Designing Data Intensive Applications
I've looked title, checked book description - it has nothing to do with DE. "This book is for software engineers, software architects, and technical managers who love to code."
Honestly, read the book "Designing data-intensive applications" which will help you understand the use cases between this and so much more. I genuinely think this book is the best foundational resource for anyone wanting to grasp the options available, the tradeoffs between them and the appropriate use cases to apply them in.
Do you have any resources you can recommend to people who wanna get into distributed systems?
I'm thinking of picking up DDIA at some point although some people say it's not for beginners.
I disagree completely, almost everyone just vastly underestimates the software engineering challenges to keep a global used service like Twitter always available and performant. It is almost seen as the canonical example service for distributed system design and frequently referenced in that book. I recommend it if you want to grasp even just a bit of how challenging this can be.
Also, in my experience, they are viewed highly in the tech world too. It's not uncommon for Big N folks to have had an internship at Twitter. Go on any given train-for-a-prestigious-tech-job side like LeetCode, and they will have sections dedicated to Twitter just like Google, Microsoft, Facebook, and Netflix.
My guess is Twitter fails at the level of the C-suite. When the high-level decisions are bad, no technical innovation can save you.
I remember this feeling! Here’s a great book if you want to feel even more seen:
Free version: https://github.com/ms2ag16/Books/blob/master/Designing%20Data-Intensive%20Applications%20-%20Martin%20Kleppmann.pdf
Not free version: https://www.amazon.co.uk/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321/ref=nodl_
>Designing Data Intensive Applications
I guess you mean the book by Martin Kleppmann ?
Leetcode has database / SQL challenges for practice, I haven’t seen them used often in interviews though.
https://leetcode.com/problemset/database/
Strongly recommend you throw this on your reading list. It will give you all the language you need to talk about data systems in interviews.
https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
>For example, understand why you'd use Postgres (sql) as opposed to DynamoDB (nosql)
I worked only with SQL databases my entire career and I have no idea how many reads and writes these things can do. I try to write the queries in a sane manner and keep my fingers crossed. I feel like an imposter for not knowing these numbers.
I did read this book and it helped me understand different use cases for the four types of NoSQL databases.
My favorite blog on this topic:
And my favorite book:
Designing Data-Intensive Applications
As every design decision involves tradeoffs, it’s better to make deliberate, informed decisions.
The age difference can be weird at first, but you’ll get over it. You’ll find a lot of the younger people are clueless too haha. You probably have life skills that you’ve acquired at your age that they lack, take advantage of them.
There are an insane amount of resources available online to hone your craft, take advantage of them!!
Check out these books too
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems https://www.amazon.com/dp/1449373321/ref=cm_sw_r_awdo_navT_a_X8RF7DCNYKNGJX9XN84E
Web Scalability for Startup Engineers https://www.amazon.com/dp/0071843655/ref=cm_sw_r_cp_api_glt_i_T6X9ADF6HSSQ4N7GJ5Z4?_encoding=UTF8&psc=1
There’s probably many, many ways to answer this question. But it sounds like you’re trying to get a handle on scaling out an architecture.
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems https://www.amazon.com/dp/1449373321/ref=cm_sw_r_cp_api_glt_i_YJ0JH4AT7CX0HCPWVZF5 has been super helpful in this regard. It won’t give you all of the answers, but will have enough information to get you thinking about how to scale.
I am in the middle of reading through the commonly referenced Martin Kleppmann's [Designing Data-Intensive Applications](https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321). I had just gotten through the Graph-Like Data models portion which feels like it could be a great solution to your problem. Perhaps looking up the Cypher Query Language for the Neo4j graph database could be helpful and an opportunity for you to implement a new solution adding it to your toolbelt.
I can't speak to if this is even used anymore or worth while. The book was published in 2017 and I haven't ever used this type of database before myself.
If you are committed to the SQL route I am guessing you will need to have a comment table which can reference other comments in the table. From there you can do a self-join to build up your data set.
I trade ABS bond at a fund and I used to spend time for modeling at sell at buy side as well. I would say that fresh out of school there is big potential there. It is true, structured products require some numbers crunching, but it is nothing similar to rocket scientist. One book I would mention is the step by step guide: https://www.amazon.com/Modeling-Structured-Finance-Flows-Microsoft-Excel/dp/0470042907. that definitely is enough to get you equipped with the numbers technique. also Fabozzi's fixed income book (just 2-3 chapters) can get you some solid background for the whole sector.
​
Dont think you need to worry about fancy models at this moment; the hiring manager wont expect you know those. just simple amortization model, prepay, default concept, and asset/liability, and leverage solid understanding. Those should be enough.
​
Good luck
Can you recommend resources to improve my knowledge about designing data intensive systems? It can be paid content, I have a training budget.
I've already found this book:
https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Is it any good?
My previous client had a similar problem in the financial sector. We encountered the same problems of keeping the transactions in sync.
Fully writing down the methodologies takes a lot of time. But this is an exercise to learn, I can recommend picking up a book. This book has helped me in the mentioned project and will surely help you as well.