# Backend

This specialism course is focused on setting you up to land a Backend Developer job. We go deeper into building backend services, into APIs, databases and popular tools you'll come across during your career, such as Node.js.

## Modules

| Name                                                                                                                                                      | Weeks |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| [Collaboration via GitHub](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/collaboration-via-github)     | 1     |
| [Using AI in Development](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/using-ai-in-development)       | 1     |
| [Advanced JavaScript](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/advanced-javascript)                      | 4     |
| [Databases](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/databases)                                          | 2     |
| [Node.js](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/node)                                                 | 2     |
| [Specialist Career Training](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/specialist-career-training) | 2     |
| [Agile Teamwork](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/agile-teamwork)                         | 1     |
| [Final Project](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/final-project)                                  | 5     |

Total: 18 weeks

## Learning Goals Overview

### [Collaboration via GitHub](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/collaboration-via-github)

* [ ] How to write a good commit message and submit easy to understand PRs
* [ ] Understand why we use branches and the different types
* [ ] Practice using branches and handling changes between local and remote
* [ ] Understand what a merge conflict is and how to resolve them
* [ ] How to save temporary changes without committing them (ie. git stash)
* [ ] How to "remove" commits using reset (soft vs hard), revert, cherry-pick and rebase
* [ ] Be prepared to collaborate successfully using GitHub on your final project

### [Using AI in Development](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/using-ai-in-development)

* [ ] Use AI to support your development tasks such as refactoring and reviewing code.
* [ ] Explore prompting techniques to understand complex code, code snippets and tough technical concepts.
* [ ] Evaluate AI-generated code for correctness, expected outcomes, security and maintainability.
* [ ] Use AI to support learning new programming languages, frameworks and tools.
* [ ] Identify and integrate AI into appropriate parts of the software development workflow.
* [ ] Describe ethical, legal and risk considerations of using AI in professional software development.
* [ ] Explore the possible futures of how AI is changing the role and expectations of developers in the industry.

### [Advanced JavaScript](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/advanced-javascript)

> ⚠️ "Learning goals" section is empty in `courses/backend/advanced-javascript`

### [Databases](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/databases)

* [ ] Explain the purpose of databases in web applications
* [ ] Perform basic CRUD operations using SQL
* [ ] Understand and implement relationships between tables in SQL
* [ ] Write more complex SQL queries involving joins and aggregations
* [ ] Understand the use cases for different types of databases (SQL, NoSQL, Key-Value, Graph)
* [ ] Communicate the importance of database security
* [ ] Understand the most common security threats and how to mitigate them with best practices

### [Node](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/node)

* [ ] Build web servers with Express.js
* [ ] Design and implement APIs using HTTP methods following REST principles
* [ ] Use middlewares for authentication, logging, and validation
* [ ] Use logging and debugging tools to monitor and troubleshoot applications
* [ ] Connect to databases and implement CRUD operations
* [ ] Test APIs using Postman

### [Specialist Career Training](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/specialist-career-training)

> ⚠️ "Learning goals" section is empty in `shared-modules/specialist-career-training`

### [Agile Teamwork](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/shared-modules/agile-teamwork)

* [ ] Understand conceptual differences between Agile, Scrum & Kanban
* [ ] Understand what Scrum looks like in day to day life as a developer
* [ ] Understand how to interact with Scrum ceremonies (e.g. standup, planning, estimating/prioritising, retrospectives)
* [ ] Practice skills used by developers such as understanding requirements, breaking down technical tasks, and common workflows for reviewing, testing and deploying.
* [ ] Understand how these skills and practices impact and support agility
* [ ] Be able to organise a very well structured project in collaboration with other developers for the final project

### [Final Project](https://program.hackyourfuture.dk/~/revisions/rMM91C8UFbw9ic3maCrL/course-content/backend/final-project)

* [ ] Collaborate effectively in a team setting
  * [ ] Read and extend/improve other peoples code
  * [ ] Give and receive constructive PR feedback
  * [ ] Plan, communicate and coordinate technical tasks / solutions upfront before implementation
* [ ] Develop self-guided learning skills (e.g. learn to read documetation for a new tool or API)
* [ ] Interpret a problem statement and specs/wireframes/prototypes into buildable requirements
* [ ] Break down bigger problems into smaller, actionable written tasks
* [ ] Work in iterative sprints and achieve deadlines
* [ ] Ask for help effectively and at the right time (e.g. describing problems to mentors, asking online, and knowing the power *and* limitations of using AI)
* [ ] Deploy a completed project you are proud to showcase on your portfolio
