# Backend Technology ## Factors - Maintainability - How complex is the code? - What about edge cases? Easy or hard to catch? - How much benchmarking and profiling is required? - Programmers - What happens if the main programmer leaves? - Who has experience with the language? - How easy/expensive is it to hire someone? - Ecosystem - How much do we have to build ourselves? - Do there already exist frameworks? - Performance - Is it fast when having many customers? (< 1.000.000) - Is it single threaded? - Does it have a garbage collector? - Compiled to native language? - How is the tooling? - IDE - Linter - Package manager - Debugging - Testing - Documentation - Can documentation be generated? Useful when working with clients. - Testing - How easy/hard is it to test source code? - Database - Network - General --- # Analysis of the languages ## Rust ### Advantages - Fast & memory safe - No garbage collector - Meta-programming (macros) - Documentation / Support - We can ask for help on the community discord. - Crates / Bindings for almost everything ### Disadvantages - Ownership / Borrow Checker -> Increased development time - Slower compile times ### Example - Web Server: - We can either use [Rocket](https://rocket.rs/) or [Actix](https://actix.rs/) for the web server. - Serialization: - Really easy with [serde](https://crates.io/crates/serde) and [bincode](https://github.com/servo/bincode). - [Crypto libraries](https://github.com/RustCrypto) for pretty much everything - [ORM](https://github.com/diesel-rs/diesel) that supports Postgres --- ## Go ### Advantages - Fast - Large ecosystem ### Disadvantages - Garbage collector (probably not a problem until we get **really** big) ### Example --- ## C# ### Advantages - OpenAPI/Swagger - Entity Framework - Code First or Database First? ### Disadvantages - Virtualized ### Example --- ## Node.js ### Advantages - Ecosystem massive - OpenAPI/Swagger, TypeORM, bindings for every db - Boilerplate best practice frameworks like NestJS - Can run native code through node-gyp bindings ### Disadvantages - Need to handle memory well (GC) - Need typescript to be safe - Threading (solution is just cluster processes and load balance) - Can be complex tooling depending on transpilation etc ### Example [Using Redis as pub/sub transport in NestJS](https://docs.nestjs.com/microservices/redis)