Preface

According to CHAOS Report, more than 50% of the software projects are failing. These projects are either canceled or delivered late or over budget. The reasons of failing projects may be technical or non-technical. One of the main technical reasons of failing projects is the low quality code. Because of the low quality code, maintaining the project and adding new features to the project is very hard. Also, the project may have a lot of bugs. These bugs may cause security vulnerabilities or data loss. So, writing a high quality code is very important for the success of a software project.

The Problem

High Quality Software

Writing a high quality code is not an easy task for developers and it requires a lot of effort and time. If a project has a long life cycle and its requirements are changing frequently, high quality code is a must not an option. For this reason, developers must strengthen their coding skills and learn new technologies in order to write high quality code.

Also, implementing a software project with a team is completely different than implementing a software project alone. In a team, developers need to follow some rules and conventions in order to work together effectively. Also, they need to use some tools and technologies to communicate with each other and to manage the project. For this reason, developers need to learn some concepts, technologies and tools in order to work in a team.

This book focuses on these challenges and its main goal is writing a good quality code in a team or a personal project. I personally do not believe that if you do not understand the underlying concepts and technologies, you can not write a good quality code. Yes, you can write a code that works but it will probably not be a high quality code. So, in this book, I will try to explain the underlying concepts and technologies in detail.

Structure of the Book

First of all, in order to learn these concepts and technologies, we will invent a problem and then we will try to solve it. Because, at its core software development is about solving problems. It is not about the problem itself. The problem always come from the real world. As developers, we do not need to explore the new problems. However we must understand the problem in order to solve it. Without understanding the problem, trying to solve it is just a waste of time.

After defining the problem, we will refresh our knowledge about the underlying concepts and technologies. Then, we will try to solve these problems in a right way. We will try to write a clean code that is easy to read and understand by following the best practices and conventions.

Some recommendations

The book covers a lot of topics and reading the book like a novel is not a good idea. Instead of that, you may read the some parts of the book again and again. For this reason, you can skip the chapters that you already know, but my advice is to read them because you may learn something new or notice something that you did not notice before.

It is very important to practice what you learn. So, while reading the book you should try to implement the examples in the book by yourself. I personally believe that, just reading the book will not be enough to grasp the whole book. You need to practice what you learn in order to understand the concepts deeply.

Also you can use the book as a reference. You can search for a topic in the book and then read the related chapter. You can

If you are in a trouble, please make sure that you have understood the concepts completely. If you are not sure, you can read the related chapter again. If you are still stuck, you can just google it. Also, you can use AI tools like ChatGPT to get help. However, please do not just copy and paste the code. Try to understand the code and then try to solve the challenge by yourself. Also, you can support the book with some online courses, YouTube videos, articles, books and any other resources. In each chapter you can find additional resources that you can use to learn the topic in detail.

Also, while writing your code, ask your self these questions:

  • Is my code clean and readable?
  • May i simplify the code or the solution?
  • Is my code following the best practices and conventions?
  • Is my code well-documented? (Comments, README etc.)
  • Is my code tested? (Unit tests, integration tests etc.)
  • Is my code secure?
  • Is my code scalable?
  • Is my code maintainable?
  • Is my code consistent? (Naming conventions, code style etc.) (You can use linters and formatters to check this)

Assumptions and Requirements

First of all, in order to organize the content of the book, I need to know the audience of the book. I tried to write the book for the developers who are familiar with the programming concepts and technologies. However, I tried to explain the concepts in detail. So, if you are a beginner, you can still read the book. However, you may need to read some parts of the book again and again. For this reason, I have these assumptions about the audience of the book:

  • You know a programming language. (You do not need to be an expert but you should know variables, conditional, loops, functions etc.)
  • You know what an object oriented programming is. (You do not need to be an expert but you should know what a class, object, inheritance etc. is.)

Concepts and Technologies

Here are the concepts and technologies that we will be covered in the book:

  • Command Line Interface Basics
  • Server Side Rendering and Templating Engines
  • Basic DOM Manipulation
  • Client Side Rendering with React
  • HTML & CSS
  • Markdown Documentation
  • Typescript and JavaScript
  • Continuous Deployment (with GitHub Actions)
  • Continuous Integration (with GitHub Actions)
  • Cloud Computing (with AWS ECS, Fargate and Lambda)
  • Cloud Databases (with AWS RDS, DynamoDB)
  • Cloud Storage (with AWS S3)
  • CDN (with AWS CloudFront)
  • Authorization
  • Authentication
  • OAuth2, JWT and OpenID Connect
  • Microservices Architecture
  • RESTful API Design
  • Clean Architecture / Hexagonal Architecture / Onion Architecture / Ports and Adapters
  • Clean Code