Skip to content

Latest commit

 

History

History
115 lines (77 loc) · 7.69 KB

README.md

File metadata and controls

115 lines (77 loc) · 7.69 KB

Carriot-learning resources

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.

Prerequisites

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:

  1. Git
  2. Go (you can also use snap to install it)
  3. Your desired IDE or code editor(GoLand or Visual studio code are recommended)
  4. Protocol buffer
  5. GRPC
  6. PostgreSQL

Golang

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:

Protocol buffers and GRPC

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:

Databases

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:

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

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:

Clean code & Coding style

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

Software & System architecture

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:

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.

Testing

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,