-
Notifications
You must be signed in to change notification settings - Fork 166
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4772df7
commit f3001e2
Showing
1 changed file
with
117 additions
and
0 deletions.
There are no files selected for viewing
117 changes: 117 additions & 0 deletions
117
Roadmaps/Getting started with Software Engineering/Start_from_Scratch.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
# Build a Software from Scratch | ||
## Software Engineering Fundamental Activities | ||
|
||
The Development of any software contains the following fundamental activities despite the size of the software: | ||
- **Specification**: The software engineers and customers define the software that is to be produced and the constraints on its operation. | ||
- **Development**: The software engineers develop the software. | ||
- **Validation**: The software engineers check that the software is what the customer requires. | ||
- **Evolution**: The software engineers modify the software in response to changing customer needs or problems discovered when the software is used. | ||
|
||
According to the Model you are using to develop your software, the activities may be performed in different orders or may be overlapped. | ||
|
||
## Pre-requisites | ||
|
||
Before starting to develop a software there are some basics and tools that are needed to start developing a software. These are: | ||
|
||
### 1. Programming Language | ||
|
||
It is a must that you at least know one programming language. Understanding the basics of programming make it very easy to learn other programming languages and other concepts related to computing. Once you learn programming you will have a basic understanding in the back of your mind of how a software is built. | ||
|
||
I recommend CS50x which is the best online course ever: | ||
|
||
- [CS50x](https://cs50.harvard.edu/x/2023/) | ||
- [CS50x on YouTube](https://www.youtube.com/user/cs50tv) | ||
|
||
### 2. Version Control System | ||
|
||
You can't be a real developer without using a Version Control System like Git. It is a must that you know how to use Git and GitHub. You can learn Git and GitHub from the following resources: | ||
|
||
- [Git and GitHub for Beginners](https://www.atlassian.com/git) | ||
- [Git Cheat Sheet](https://education.github.com/git-cheat-sheet-education.pdf) | ||
|
||
|
||
### 3. Text Editor | ||
|
||
You need an environment to write your code and build your software. You can use any text editor you want. I recommend using [Visual Studio Code](https://code.visualstudio.com/) which is a free and open source text editor developed by Microsoft. | ||
|
||
For geeks who want to use the terminal to write their code, I recommend using [Vim](https://www.vim.org/). | ||
|
||
### 4. Terminal | ||
|
||
Learn basic commands of your operating system terminal. You can learn the basic commands of the terminal from the following resources: | ||
|
||
- [Command Line Crash Course](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line) | ||
- [Linux Command Line Cheat Sheet](https://cheatography.com/davechild/cheat-sheets/linux-command-line/) | ||
|
||
Now you are a developer | ||
|
||
|
||
## Software Development Life Cycle | ||
|
||
According to the Atlassian, the software development life cycle (SDLC) is a process used by the software industry to design, develop and test high quality softwares. The SDLC aims to produce a high-quality software that meets or exceeds customer expectations, reaches completion within times and cost estimates. | ||
|
||
Here are the phases of the SDLC: | ||
|
||
### 1. Discovery and Planning | ||
|
||
In this phase, you need to discover the problem that you want to solve and plan how you are going to solve it. You need to ask yourself the following questions: | ||
|
||
- What is the problem that I want to solve? | ||
- What is the solution that I want to build? | ||
- What are the features that I want to include in my software? | ||
- What are the technologies that I need to use to build my software? | ||
- What are the tools that I need to use to build my software? | ||
|
||
|
||
Tools used in this phase: | ||
- [Trello](https://trello.com/) | ||
- [Jira](https://www.atlassian.com/software/jira) | ||
- [Asana](https://asana.com/) | ||
|
||
### 2. Build and Test | ||
|
||
In this phase, you need to build your software and test it. Later on when we introduce the different Models of Software Development, we will see that there are different ways to build and test your software. | ||
|
||
Tools used in this phase: | ||
- [Visual Studio Code](https://code.visualstudio.com/) | ||
- [Vim](https://www.vim.org/) | ||
- [Git](https://git-scm.com/) | ||
- [GitLab](https://about.gitlab.com/) | ||
|
||
|
||
### 3. Release and Maintenance (Deployment) | ||
|
||
In this phase, the release of your software is deployed to the customers. After the release, you need to maintain your software by fixing bugs and adding new features. You can use the feedback of your customers to improve your software. | ||
|
||
These are the main phases of the SDLC. Later on when we introduce the different Models of Software Development, we will see that there are different ways to implement the SDLC. | ||
|
||
Tools used in this phase: | ||
- [Jenkins](https://www.jenkins.io/) | ||
- [Docker](https://www.docker.com/) | ||
- [Kubernetes](https://kubernetes.io/) | ||
- [AWS](https://aws.amazon.com/) | ||
|
||
## Software Development Models | ||
|
||
In modern software development, the most popular model that is used among most of the developers is Agile Methodology and along with it the DevOps practices. We will disscuss the different tools and concepts used in the world of software development in the next section. | ||
|
||
### Agile Methodology | ||
|
||
The Agile methodology is a project management approach that involves breaking the project into phases and emphasizes continuous collaboration and improvement. Teams follow a cycle of planning, executing, and evaluating. | ||
|
||
The following are important tools and concepts used for software development and the order doesn't matter: | ||
|
||
#### Scrum | ||
|
||
Scrum is a framework that helps teams work together. Much like a rugby team (where it gets its name) training for the big game, scrum encourages teams to learn through experiences, self-organize while working on a problem, and reflect on their wins and losses to continuously improve. here are the main roles in Scrum: | ||
|
||
- **Product Owner**: The Product Owner is responsible for maximizing the value of the product and the work of the Development Team. How this is done may vary widely across organizations, Scrum Teams, and individuals. | ||
- **Scrum Master**: The Scrum Master is responsible for promoting and supporting Scrum as defined in the Scrum Guide. Scrum Masters do this by helping everyone understand Scrum theory, practices, rules, and values. | ||
- **Development Team**: The Development Team consists of professionals who do the work of delivering a potentially releasable Increment of “Done” product at the end of each Sprint. Only members of the Development Team create the Increment. | ||
- **Stakeholders**: Stakeholders are the people that are outside the Scrum Team but have an interest in the project. They are the ones who will use the product that is being developed. | ||
- **Sprint**: A Sprint is a time-box of one month or less during which a “Done”, useable, and potentially releasable product Increment is created. Sprints have consistent durations throughout a development effort. A new Sprint starts immediately after the conclusion of the previous Sprint. | ||
- **Daily Scrum**: The Daily Scrum is a 15-minute time-boxed event for the Development Team to synchronize activities and create a plan for the next 24 hours. This is done by inspecting the work since the last Daily Scrum and forecasting the work that could be done before the next one. | ||
|
||
Learn more about Scrum and similar frameworks from the following resources: | ||
- [Scrum Guide](https://scrumguides.org/scrum-guide.html) | ||
- [Software Development](https://www.atlassian.com/software-development) |