Correct Backend Learning Path

Correct Backend Learning Path

You just have started a development career or you may have years of experience in backend development but still struggling to answer if have enough skills under your belt to outshine in the backend world?

No alt text provided for this image

1. Language

It's your first primary weapon and you should choose it very carefully, some languages are easy and have a fast development cycle but the industry pays you less. Some languages with mid-level difficulty might be highly paid. The main thing is to choose the one you like and that pays more.

PHP is really easy and its development cycle is so fast. you make the change and refresh the browser. Boom you see your changes.

PHP is first-love, fast and easy to learn

Java is considered an enterprise language, its JVM based used mostly in enterprise solutions with heavy transactions, like banking, booking, and other mission-critical applications. If you choose Java then knowing the language is not enough, its a whole ecosystem that you have to learn and that's what will be expected from you. Just go through the tools and technologies mentioned in the cover photo.

JavaScript is booming these days, nowadays highly paid, high demand in Europe there are 2 different paths one is JavaScript and TypeScript. It's the best language for the client-side but on the service side in my personal experience is less mature. Its ecosystem is less mature, specifically TypeScript, which can be used as a replacement for PHP-Small-Application. ORM is poorly written, with a lot of bugs, NextJS framework is a beginner-level framework. If you have millions of users with complex application logic and relatively bigger applications, you will notice how many things are just missing or require a "workaround" to functions.

Must learn 3 lanaguges from different backgrounds and build same production-grade application. you will know which one to choose for what type of application.

2. Dependency Management

We want to transfer our code faster, especially working as a team, want to separate dependencies (800 MB) from our source code (1.5 MB), want to update the version of the dependencies with minimum effort.

Dependencies are freely available and can be automatically downloaded and plugged into the project quickly on the first code build.

You do not need to download it again if it has already been downloaded by the same project or another that depends on the same version. Its kept in the local repository.

3. Git

It's caring like your wife keeps track of everything for you ??

Versioning your source code, maintaining history, keeping track of evolution. Go through the following image start from the bottom and go up. you will see how the code was evolved and we can also check what changes were committed in each history point.

No alt text provided for this image

for the above source code check out "Microservices Example with Blog application"

4. Language-specific best practices

At this point, you have to master all the skills of your primary weapon: That is your choice of programming language. You must know in and out of that language, including its bugs and drawbacks.

Let's say your choice is Java Programming Language, then you must acquire expertise in following

  • Multithreading: Synchronization, Locking, plan deadlock, Concurrency
  • Java Memory Model (Eden space, Survivor space, Long-lived objects, Minor GC, Major GC) - comment below if you want me to write on this.
  • Generics with practical usage not just experience with Collection APIs.
  • Reflection API and Dynamic Proxy
  • Lambda expressions, Method references, Functional Interfaces, Default methods, Static methods in interface,
  • Stream API: It would be great if you can covert all the sorting algorithms to Java streams
  • Master exception handling - Connect with me for code review
  • Date & Time APIs
  • etc

2. Design Patterns

Start with the SOLID design principle, if you are not an expert in that, you should not claim you want to become the best engineer.

  1. Singleton - Its the father of patterns and mother of the interview questions
  2. Facade, Adapter, Bridge, Composite, Decorator, Flyweight and Proxy
  3. Factory, Builder, Prototype, Object pool
  4. Command, Chain of responsibility, Observer, State, Strategy, Template method, Visitor?
  5. more coming soon

Architectural Patterns

  1. Layered pattern
  2. Client-server pattern
  3. Pipe-filter pattern
  4. Broker pattern
  5. Event-bus pattern
  6. MVC pattern
  7. Interpreter pattern
  8. etc

Anti Patterns

We have a fix cost and hard-deadline project, lets do it agile way - The blunder of the worlds

This requires a separate detailed article and is very important for you to learn, what not to do.

3. Testing

You must implement the following types of testing in your projects. I can understand the cry for the shortage of time, at least do it for critical business cases. Once you are hands-on I am sure you will do it for the test of the use-cases :D

  • Unit testing
  • Integration testing
  • System testing
  • End to End Testing

For detailed video series on "Delivering Quality"

Master-level testing include

  • UI interface automation with Selenium web driver (Java)
  • API test automation with RestAssured or similar
  • APM for mobile automated testing
  • JMeter for performance testing

4. RDBMS

Relational database with good and bad normalization

5. Framework

Spring Framework for Java, Zend, or similar framework for PHP and Express or NextJs for NodeJs (Javascript)

Spring is so powerful there is no match for it to this date (18.03.2022)

  • Transaction Management: What you have to do manually in other frameworks. Spring provides an out-of-the-box solution - automatic transaction start and end.?
  • Bean Container: Manage the lifecycle of the objects.
  • Dependency Injection: It helps in low coupling and config based and runtime substitution
  • Reactive Programming Model
  • Testing: Capability to test microservices with support for unit and integration tests.
  • AOP: Aspect-oriented Programming (Interceptors) [Logging, Caching, Authentication, TM]
  • MVC: Out of the box support
  • Instrumentation, Aspects, Messaging
  • Spring Security: Authentication, Authorization, and ACL (Access Control List) with multiple schemes.
  • Data Access & Integration: JDBC, ORM, OXM, JMS, Transaction
  • Web: WebSocket, Servlet, Web, Portlet

Spring Boot high level features


6. REST API

How to write REST APIs correctly, a proper understanding of each and every HTTP method and their usage, Naming convention of the URLs. APIs maturity level and why European companies reject in HR interview if you use "/pet" instead of "/pets"

No alt text provided for this image

7. NoSQL

Why NoSQL? what RDBMS is lacking that we have to loo for NoSQL solutions? Why RDBMS cannot provide schemaless support?

Whats special about VVV? Velocity, Variety and Volume?
No alt text provided for this image


8 . Cache

9. InMemory Database

10. Security

11. CI/CD Pipeline

12. Docker

Containerize your application to manage the concerns of different environments. Isolate compile environment across the operating systems and different versions. Provide the same environment to your application no matter where it runs.

No alt text provided for this image


13. Kubernetes

Orchestrate your containers for complex applications, just imagine you have 5 microservices and each microservice might scale 2 to 3 instances at any given time, a load balancer would be required to distribute traffic among containers of the same service.

No alt text provided for this image

Checkout a detailed example of Kubernete here. Go through readme file to understand the concepts

14. Queues/Topics

15. Event Sourcing

16. Elastic Stack

  • filebeat
  • Logstash
  • ElasticSearch
  • Kibana

No alt text provided for this image


17. GraphQL

18. Elastic Search

19. Monitoring?

  • Elastic stack
  • Distributed Tracing
  • Application Performance monitoring
  • Prometheus
  • Grafana

20. Architecture & Design (DDD)

As an engineer, you need to learn what architecture is and how it's different from the design, and why it's important before starting the development.

You should learn about Domain-Driven Design.

21. Kafka & Spark

22. Cloud Computing

Stay tuned

Qindeel Riaz

AWS Certified, specialises in System Design & Architect | Instrumental in building efficient & profitable engineering function

2 年

Mazhar Hassan you are great teacher and an excellent mentor. Keep writing all this great stuff to help and build passionate engineers.

回复

要查看或添加评论,请登录

Mazhar Hassan的更多文章

社区洞察

其他会员也浏览了