Skip to content

Latest commit

 

History

History
438 lines (358 loc) · 14.5 KB

README.md

File metadata and controls

438 lines (358 loc) · 14.5 KB

Backend Roadmap

License: CC BY-SA 4.0

The roadmap is made for anyone who wants to become a modern back-end developer, focusing on the world of REST and microservice architecture. It covers everything from basic stuff to advanced technology including publicly available sources, topic-related tasks, and projects to have an idea of the full cycle of developing the backend of modern projects.

1.* Computer Science Foundation

Please visit Computer Science Foundation Roadmap to learn about those topics:

  • 1.1 Basics of CS(Computer Science)
  • 1.2 Introduction to Data Structures and Algorithms
  • 1.3 Introduction to OS(Operating System)
  • 1.4 Linux OS
  • 1.5 Terminal Commands
  • 1.6 Shell Scripting
  • 2.1 Git

3.1 HTML+CSS+JS

3.2 JS

* Project3

  • Create a simple X&O game using HTML and JS.
    Example:
    tic_tac_toe.gif

4.1 NodeJS

4.2 REST

  • Develop simple in-memory Blogpost CRUD REST APIs using NodeJS+Express.

4.3 Postman TOOL

* Project4

  • Create a simple blogpost website using NodeJS as a web server.

5.1 Golang

  • Sources

  • Practices

    • Task1: Swap 2 numbers. In this task, a user is asked to enter two numbers and the program will swap two numbers without using the third variable.
    package main
    
    import "fmt"
    
    func main() {
        var a, b int = 3, 4
    
        // fmt.Scanf("%d", &a)
        // fmt.Scanf("%d", &b)
        fmt.Printf("a = %d, b = %d\n", a, b)
        //
        // WRITE YOUR CODE HERE
        //
        fmt.Printf("a = %d, b = %d\n", a, b)
    }

    Example:

    a = 3, b = 4
    a = 4, b = 3
    
    • Task2: isOdd and isEven. Write go functions to check whether a number is even and is odd.
    package main
    
    import "fmt"
    
    func main() {
        var a, b int = 3, 4
    
        // fmt.Scanf("%d", &a)
        // fmt.Scanf("%d", &b)
        fmt.Printf("a = %d, b = %d\n", a, b)
    
        // fmt.Println(a, "is odd: ", isOdd(a))
        // fmt.Println(b, "is even: ", isEven(b))
    }
    
    // func isEven(num int) bool {
    // 	//
    // 	// WRITE YOUR CODE HERE
    // 	//
    // }
    
    // func isOdd(num int) bool {
    // 	//
    // 	// WRITE YOUR CODE HERE
    // 	//
    // }

    Example:

    a = 3, b = 4
    3 is odd:  true
    4 is even:  true
    
    • Task3: Area of a circle inscribed in a square. Find the shaded region by given R(radius of the circle).
      Task 3 Image
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var r float32 = 10.04
    
        // fmt.Scanf("%f", &r)
        fmt.Println("R =", r)
    
        fmt.Printf("Area: %0.2f\n", area(r))
    }
    
    func area(r float32) (area float32) {
        //
        // WRITE YOUR CODE HERE
        //
        return area
    }

    Example:

    R = 10.04
    Area: 86.53
    
    1. FizzBuzz
    package main
    
    func main() {
        for i := 1; i <= 100; i++ {
            FizzBuzz()
        }
    }
    
    func FizzBuzz() {
        //
        // WRITE YOUR CODE HERE
        //
    }
    1. Find a weekday from a given date
    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        dobStr := "20.04.1998" // Replace this date with your birthday
        givenDate, err := time.Parse("02.01.2006", dobStr)
        if err != nil {
            panic(err)
        }
        fmt.Printf("%s is %s", givenDate.Format("02-01-2006"), FindWeekday(givenDate))
    }
    
    func FindWeekday(date time.Time) (weekday string) {
        //
        // WRITE YOUR CODE HERE
        //
        return
    }
    1. Display numbers from 1 to 100 in reverse order using DEFER
    package main
    
    func main() {
        DisplayNumberInReverseOrderWithDefer()
    }
    
    func DisplayNumberInReverseOrderWithDefer() {
        for i := 0; i < 100; i++ {
            //
            // WRITE YOUR CODE HERE
            //
        }
    }
    1. Write a function to calculate square root. Given a positive number n and precision p, find the square root of the number up to p decimal places using binary search.
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        fmt.Println(MySquareRoot(10, 12))
    }
    
    func MySquareRoot(num, precision uint) (result float64) {
        // DO NOT USE math.Sqrt!
    
        //
        // WRITE YOUR CODE HERE
        //
    
        return
    }
    1. Find the Minimum Number. Link: https://www.hackerrank.com/contests/w30/challenges/find-the-minimum-number/problem
    package main
    
    func main() {
        n := 12
        // Read n from input
        DisplayMinimumNumberFunction(n)
    }
    
    // https://www.hackerrank.com/contests/w30/challenges/find-the-minimum-number
    func DisplayMinimumNumberFunction(n int) {
        //
        // WRITE YOUR CODE HERE
        //
    }

* Project5

  • Task1: Write a bigint package.
    • func NewInt(num string) (Bigint, error)
    • func (z *Bigint) Set(num string) error
    • func Add(a, b Bigint) Bigint
    • func Sub(a, b Bigint) Bigint
    • func Multiply(a, b Bigint) Bigint
    • func Mod(a, b Bigint) Bigint
    • func (x *Bigint) Abs() Bigint
      Example:
    a, err :=bigint.NewInt("988847123412385995937737458959")
    if err != nil {
        panic(err)
    }
    b, err :=bigint.NewInt("21231231231231231231231231233")
    if err != nil {
        panic(err)
    }
    err = b.Set("1") // b = "1"
    if err != nil {
        panic(err)
    }
    c:=bigint.Add(a, b) // c = "988847123412385995937737458960"
    d:=bigint.Sub(a, b) // d = "988847123412385995937737458958"
    e:=bigint.Multiply(a, b) // e = "988847123412385995937737458959"
    f:=bigint.Mod(a, b) // f = "0"
  • Task2: Write tests on your own bigint package.

5.2 Gin

5.3 PostgreSQL

5.4 Go + SQLX

5.5 Migrations

5.6 Go + Swaggo

* Project6

  • Develop a simple blogpost REST APIs using Golang + Gin + SQLX(PostgreSQL) + Swaggo (+Include testing).

6.1 Protocol Buffers (protobuf) and gRPC

6.2 Go + gRPC

7.1 Docker

* Project7

  • Building A Containerized Microservices for a simple blogpost project.

Loading...

8.1 MongoDB - Pending...

8.2 NodeJS + gRPC - Pending...

* Proejct8 - Pending...

9.1 DB modeling - Pending...

10.1 EDA - Pending...

11.1 Web Socket - Pending...


References

Fireship | freeCodeCamp.org | TutorialEdge | Traversy Media | CS50 | geeksforgeeks | Coding For Everybody | DoS - Domain of Science | Basics Explained, H3Vtux | LetsCode | Tren Black | OpenCanvas | Neso Academy | Techquickie | DorianDotSlash | Ksk Royal | Linux Tex | Gary Explains | Android and Tech Solutions | Colt Steel | Tech With Tim | Victor Geislinger | devdojo | Programming with Mosh | uidotdev | James Q Quick | JavaScript Mastery | Troy Amelotte | Stephane Maarek | Gopher Guides | Tech and Beyond With Moss | The Linux Foundation | Simplilearn | Amigoscode |


Backend Roadmap © 2023 by Saidamir Botirov is licensed under CC BY-SA 4.0

CC BY-SA 4.0 License