Here are some learning resources to get familiar with carriot's back-end technological stack.
Here are the general topics:
- Learn how to write code in Go in an effective manner
- Learn about RDBMS & NoSQL databases
- Learn about Git & Version control
- Learn about micro-services
- Learn about virtualization and docker
- Learn about infrastructure as a service & Linux systems & network concepts
- Learn about API end point's, RESTful services and Protocol Buffers
- Learn about software architecture ( specially DDD and clean architecture)
- Learn about clean code, TDD and best practices in software development
From the resources, books,articles, videos etc which are introduced, the ones in bold text are mandatory and the other ones are highly recommended.
It's recommended to develop all your code in a UNIX based operating system e.g. MAC OS X , Ubuntu, etc.
Install the following on your system:
- Git
- Go (you can also use snap to install it)
- Your desired IDE or code editor(GoLand or Visual studio code are recommended)
- Protocol buffer
- GRPC
- PostgreSQL
Go is a statically typed, compiled programming language designed at Google.
You can find a complete set of books here, but here are some useful resources:
- complete the tour of go
- watch this video: Learn Go Programming
- Rob Pike - Simplicity is Complicated
- read this book: Go in Action
Protocol buffers are a mechanism for serializing structured data (although it can be used with other data formats such as JSON). We use Protocol buffers in carriot because it uses less bandwidth and is much more faster than JSON based communication. GRPC uses HTTP/2 for transport, Protocol Buffers as the interface description language. With GRPC we can remotely call methods from back-end or front-end services. We use GRPC because it gives us much more flexibility, speed, etc.
Here are some resources to learn more about Protocol buffers and GRPC:
- read overview of protocol buffers
- read introduction to grpc
- read grpc core concepts
- watch this video: Introduction to grpc
- watch this video: grpc and Go
In carriot we use a wide variety of Database Management Systems (DBMS), such as:
For now we focus on PostgreSQL, you can learn about other databases later if you encountered any task that needs them.
If you're already familiar with SQL and PostgreSQL you can skip some of the task. here are these sections tasks:
- read: SQL tutorial
- watch: SQL tutorial
- read: about PostgreSQL
- watch: Learn PostgreSQL
- watch: Introducing ClickHouse -- The Fastest Data Warehouse You've Never Heard Of
- read: Redis
Also the Intro to Database systems from the CMU Database Graoup
is a great course for learning about databases in detail.
You can directly connect to the database in your code and use plain text query
, but we prefer to use an ORM like gorm..
Docker is a container and virtualization technology. We use many of docker's technologies like docker compose
, docker container
, etc. You can learn docker by following these tasks:
- watch: Docker tutorial
- read first part of : Docker in Action
Clean code and Coding style might not seem very important at first glance but over time can play a very important role in the development process.
- read the first 10 chapters of this book: Clean code
In carriot we have divided our services to multiple Micro-services. You can search more about micro-services your self, it's quite an easy concept to understand but much harder to implement. We recommend reading Micro-services in action if you want to learn more.
We try to follow an architecture called Ports & Adapters
which is closely related to the Hexagonal architecture
, Onion architecture
and Clean architecture
. This architecures are designed based on Domain Driven Design or DDD so while designing and developing our services we try to keep DDD's guidelines in mind too.
This concepts might be new to you and usually take time and practice to understand and master. Follow this tutorials and resources to get a better understanding of these concepts:
- read this article and related links : S.O.L.I.D
- watch: What is DDD?
- read: DDD, Hexagonal, Onion, Clean, CQRS
- read: Strategic Domain-Driven Design
- read: Tactical Domain-Driven Design
- read: DDD & Hexagonal
- watch: Micro-service architecture and Go
We also highly recommend to read the following books:
Learning and implementing good software architecture need knowledge, skill, time, practice, talking to your teammates, trail and error etc. so be patient.
We use TDD or Test Driven Development methodology to test our codes, you can only submit merge request when all the test are passed . Also writing Unit test, Acceptance tests, etc. are really important for new features,