“I'm not a great programmer; I'm just a good programmer with great habits.”
Learn the skills required to work a software project using only Markdown. Limiting your projects to Markdown lets you focus on the big picture without getting distracted by more challenging code.
Priorities: 🥚, 🐣, 🐥, 🐔 (click to learn more)
There is a lot to learn in this repository. If you can't master all the material at once, that's expected! Anything you don't master now will always be waiting for you to review when you need it. These 4 emoji's will help you prioritize your study time and to measure your progress:
- 🥚: Understanding this material is required, it covers the base skills you'll need for this module and the next. You do not need to finish all of them but should feel comfortable that you could with enough time.
- 🐣: You have started all of these exercises and feel you could complete them all if you just had more time. It may not be easy for you but with effort you can make it through.
- 🐥: You have studied the examples and started some exercises if you had time. You should have a big-picture understanding of these concepts/skills, but may not be confident completing the exercises.
- 🐔: These concepts or skills are not necessary but are related to this module. If you are finished with 🥚, 🐣 and 🐥 you can use the 🐔 exercises to push yourself without getting distracted from the module's main objectives.
Practice the foundational workflows of software development by learning to write Markdown locally on your own computer using Visual Studio Code (VSCode), the Command Line Interface (CLI) to automate your code's quality (formatting, linting and spell checking).
- 🥚 Folder Structures: You can explain how files and folders are stored in your computer and can find, open or create files in your computer without using the Command Line Interface.
- 🥚 Command Line Interface (CLI): In a Unix shell you can ...
- Open a new terminal window
- Navigate up and down directories using
cd - List the contents of a directory using
ls - View the contents of a file using
cat - Create new files using
touch - Create new folders using
mkdir
- 🥚 READMEs: You can write a README file that describes the project you are working on, why it's helpful, and how someone can use it.
- 🥚 Formatting Markdown: You can use Prettier to make sure all the code in your project is well-formatted:
- 🥚 Linting Folder and File Names: You can ...
- Use
ls-lintto check all folder and file names in your project - You can fix all linting mistakes reported by
ls-lint
- Use
- 🥚 Linting Markdown: You can use the MarkdownLint VSCode extension to find
and fix linting errors in markdown documents.
- 🥚 Spell Check: You can use the Code Spell Checker VSCode extension to correct spelling mistakes in your Markdown documents while you are writing
- 🥚 File and Folder Naming Conventions: You can use snake_case to name all files and folders in your project.
- 🐣 File Extensions: You can identify all of the languages covered at HYF and give the correct file extension. You don't need to know the languages, just recognize them.
- 🐣 Touch Typing: You can write a Markdown file without looking at your keyboard to find any letters, numbers or special characters. (slowly is ok!)
Practice using Git to save and organize your development process. You will learn how you can use Git to go back to previous versions of your project, and to work on different changes in parallel.
- 🥚 Git: Using the CLI you can ...
- Initialize a new git repository with
git init - Stage changes using
git add <path> - Check what is staged with
git status - Commit changes using
git commit -m <message> - Display your repository's git history using
git log - Create a new branch using
git branch <branch-name> - Check out a branch using
git checkout <branch-name> - Create a new branch and check it out using
git checkout -b <branch-name> - Merge changes from one branch to another using
git merge <branch-name> - Update current branch (your branch) from main branch:
- Check out to main branch using
git checkout main - Pull changes from remote repository using
git pull - Check out to your branch using
git checkout <branch-name> - Merge changes from main branch to your branch using
git merge main
- Check out to main branch using
- Merge changes from main branch to current branch in one step using
git pull origin main - Return to a previous version of your project with
git logandgit checkout <commit-hash> - Stash and retrieve uncommitted changes with
git stashandgit pop - Display list of existing remote URLs using
git remote -v - Add a new remote repository URL using
git remote add <shortname> <remote-url> - Update a remote repository URL using
git remote set-url <exsit-shortname> <new-remote-url> - Rename a remote repository URL using
git remote rename <old-shortname> <new-shortname> - Remove a remote repository URL using
git remote rm <exsit-shortname>
- Initialize a new git repository with
- 🥚
.gitignore: You can use a.gitignorefile to describe which files you don't want included in your git history. - 🥚 VSCode: You can ...
- Use the Git Graph extension to to visualize your repo's commit history
- Use the Git Lens extension to investigate your repository's commit history
- Explain how the file tree in VSCode can show you which files have uncommitted changes
- 🥚 Atomic Commits: You can save your development progress using small commits with clear and helpful message.
- 🐣 Feature Branches: You can organize your development process using
branches. You can create a new branch for each part of your project and
merge those changes to
mainwhen they are finished.
Learn how you can connect your local Git repositories with a GitHub repository to add more structure to your development process and to share your projects.
- 🥚 Licenses: You can ...
- Explain why it's important to include a license for your code on GitHub
- Choose a license for your projects that matches how you want others to use your code
- 🥚 Contributor Guidelines: You can explain why contributor guidelines are important for a public repository.
- 🥚 Code of Conduct: You can explain why a code of conduct is important for a public repository.
- 🥚 GitHub SSH Key: You can connect your computer to your GitHub account using an SSH key, clone using the SSH link, and push/pull using your SSH connection.
- 🥚 GitHub Repositories: You can ...
- Create new repository on GitHub
- Write a description for your repository
- Turn on GitHub Pages
- Configure your repository to block pushing to
main - Configure your repository to block merging to
mainuntil Continuous Integration (CI) checks have passed
- 🥚 Git Remote/Local Connection: You can ...
- Clone a remote repository to your computer using
git clone <remote-url> - initialize a new repository locally and connect it to an empty remote repository
-
git pushcommand is used to upload local repository content to a remote repository -
git fetcha primary command used to download contents from a remote repository -
git pullcommand downloads the changes directly and then applies those changes to the current working files -
pushandpullchanges between remote & local branches - You can distinguish between
git fetchandgit pull
- Clone a remote repository to your computer using
- 🥚 Pull Requests: You can create a pull request between two branches in your repository and merge changes without causing any conflicts.
- 🥚 PR templates: You can use a PR template to add a checklist to all
of your PRs so you are sure the code is great before merging to
main. - 🥚 Continuous Integration: You can use GitHub Actions to check your
code's quality before merging a pull request to the
mainbranch. - 🐣 Local/Remote Branching Workflow: You can use a branching workflow
that keeps mistakes away from the
mainbranch and prevents conflicts from happening in GitHub. For each contribution to the project you can ...- Check out a new local branch and write your code
- Check out
mainon your local machine - Pull changes from remote
mainto localmain - Merge changes locally from
mainto your new branch- Fix any conflicts on your new branch before pushing!
- Format and lint your code
- Push your new local branch to your remote repository
- Open a Pull Request from the new branch to
main- Go through the PR's checklist to make sure everything is correct
- Make sure all CI checks pass!
- Merge your new remote branch to
main- You can delete the branch after it's merged if you want to