Code Monkey home page Code Monkey logo

acn-syllabus's Introduction

ACN syllabus

We are on a mission to support as many code schools as we can. Learn more here:

Learn more about the African Coding Network here:African coding Network

This syllabus is a Hugo based static site (for now). But on top of that, it is the configuration of our Tilde learning platform. You can see Tilde for more.

I'm sure you've heard of infrastructure-as-code, pipeline-as-code and other x-as-code things? Well, this is a syllabus-as-code. Our learning platform eats this up and generates a bunch of trello-like cards that move across the personal Kanban boards of students using the platform.

In order to make this work, we need to be strict on the shape of the syllabus files. We have very specific naming and metadata conventions that contributors need to follow. We'll talk more about that later. But let's start by getting you set up :)

This video will walk you trough the whole process. Or you can just read the docs.

To contribute

We are honoured by any contributions you may want to make. There are lots of ways to contribute. You can improve the instructions on a specific project, add extra info to some metadata, or spin up a whole new curriculum, if interested, take a minute to read our contribution guidelines and instructions document for any information about contributing to the project.

running locally

This is a Hugo based application.

initial setup

Make sure your global Github details like your username and email is set up correctly. Run the following commands in your terminal.

git config --global user.name "Your username on Github"
git config --global user.email "[email protected]"

to clone this repo

Don't try to 'git clone --recursive [email protected]:Umuzi-org/ACN-syllabus.git' if you don't have a public SSH key in your Github account. If you are unsure, rather use:

git clone --recursive https://github.com/UserName_on_Github/ACN-syllabus.git

If you do have a public SSH key in your Github account then you can do the following, there is a submodule in here so clone recursively:

Eg:

git clone --recursive [email protected]:Umuzi-org/ACN-syllabus.git

to get yourself set up on a Debian based machine (linux ubuntu/mint)

sudo apt install golang
./install_hugo.sh

MAC

Add this in your bash file e.g .zshrc or .bashrc

# Go development
export GOPATH="${HOME}/.go"
export GOROOT="$(brew --prefix golang)/libexec"
export PATH="$PATH:${GOPATH}/bin:${GOROOT}/bin"

Run these installs in your terminal using Homebrew

brew install go
brew install hugo

to run the development server, once it is installed

hugo serve -b "http://localhost:1313/"

That's it :) now you'll be able to poke around the main site

setting up and running the linter

Make sure you have Python3 installed. This wont work with legacy Python (python2.7 == legacy == dangerzone). We use Pipenv for dependency management, to install run

pip install pipenv

Once installed Pipenv will create a virtual environment and install all required packages, just run

pipenv install

To activate the environment run

pipenv shell

You should now be all set to run the linter

python lint.py

If you want to run the linter again, there's no need to do the whole setup again. Do this:

# activate pipenv environment
pipenv shell

# and run the linter
python lint.py

The linter starts off by looking over all the frontmatter and making sure that's fine. Then it builds the site and looks for trouble.

Some error messages are a bit funny looking. If you see something like this:

content/projects/django-airbnb-clone/users-can-crud-properties/_index.md has unrecognized frontmatter: reatdy

Then it means that there is a typo in the given file.

And then if you get a message like this:

public/syllabuses/data-eng-boot/index.html:  <span class="contentlink-missing" data="topics/intro-to-tilde"

Then that means there is a contentlink that is pointing to a file that doesn't exist. Did the file move? Was it deleted? Is something misspelled?

Windows 10

Ensure you have a compatible Linux terminal for windows, if not, checkout: https://ubuntu.com/tutorials/ubuntu-on-windows#1-overview

After cloning recursively from the repo and setting up your global github email and username you can run the following two commands, the correct Hugo version should be installed after running the second command.

sudo apt install golang
./install_hugo.sh

Installing pipenv will probably be different depending on which Python you have, you must have nothing less than Python 3.

pip3 install pipenv
pipenv install

If you get the error 'virtualenv.seed.via_app_data' after running pipenv install then you need to first do the following

pip3 uninstall virtualenv
pip3 install pipenv
pipenv install
pipenv shell

It is the 'pipenv install' command which ensures that the correct dependencies are installed from the Pipfile in the repository. Do not install 'frontmatter' by yourself, run the 'pipenv install' command which will ensure that the correct frontmatter library is installed. Now you can run lint.py

python3 lint.py

You can also do all of this from the terminal of an IDE like Pycharm, again you will have to ensure that you install any dependencies from the Pipfile. You will probably run into trouble when you try to run hugo, make sure to set the path to hugo, eg. C:\Users\UserName\Hugo\ in your system and user path variables. See https://www.youtube.com/watch?v=C04dlR1Ufj4\ for details. Also, when running lint.py the 'grep' command won't work as it is not a known Windows terminal command. Go to the lint.py file, you will need to comment out the line with the 'grep' command and rewrite using the 'findstr' command

#os.system('grep -r "contentlink-missing" public')
 os.system('findstr "contentlink-missing" public')

DO NOT commit the changes you made to the lint.py file as this will have a massive adverse effect on everyone else who is running lint.py from a non Windows platform.

Syllabus Content

Look inside the content directory. The documentation is composed of a bunch of markdown files (all named _index.md) with a lil metadata. Ok, a lot of metadata.

acn-syllabus's People

Contributors

albert-l10 avatar andy-nkumane avatar antselley avatar asradebe avatar axelbankuna avatar babalwa01 avatar cortanav1 avatar eckardberry avatar faancy avatar faithmo avatar jacobumuzi avatar jonatasbaldin avatar kaleem99 avatar kate-bit-dev avatar liezelvorster avatar lisa1400 avatar minat-hub avatar mondeanna avatar ngoakor12 avatar nkululek0 avatar rethabilethulo avatar rivoningom avatar rokhuda avatar ruddy-m avatar ry-oc avatar samantha-hampton avatar sbonelo01 avatar sheenarbw avatar theabstract avatar themaja avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

acn-syllabus's Issues

projects/redux-saga-intro create a project

There is already a file for this.

Fill it in with a nice project that students can to get their heads around the basic concepts. Please try to focus on redux saga by itself, dont rely on react or anything else

Create "##Instructions for reviewer" for project OOP

Please add a section to the bottom of this project's _index.md file.
The section heading should be EXACTLY "## Instructions for reviewer"

Basically we have to set reviewers up for success by telling them what success looks like and what to pay attention to when reviewing this project submission.

Description:

  • Look at a bunch of old reviews for this project for each cohort

  • Find the common feedback [This should help you get an idea of what instructions to create]

  • Write them out clearly

  • The section heading should be EXACTLY "## Instructions for reviewer"

Add sql TOPIC about schema design

Once a student knows how to create a table with the CREATE TABLE statement, they should be able to move onto this.

We need to make sure our bases are covered. We dont need to get people to know about the normal forms or star schemas or anything like that., Rather focus on foundational concepts.

In this topic cover:

  1. sensible naming conventions

eg:

table name = users  (plural)
primary key = id   

table name = tickets (plural)
primary key = id (consistent)
foreign key to user table = user_id (dead obvious what we are referring to. We are referring to a single user therefore singular)   
  1. One to many relationships
  2. One to one relationships
  3. Many to many relationships
  4. DRY data (which is the same as normalisation - by default we would want to have one piece of info represented once)

Make a new project that gets people to practice unit testing and error checking

The Password checker project is a little bit annoying and arbitrary

https://github.com/Umuzi-org/ACN-syllabus/tree/develop/content/projects/tdd/password-checker

Create a new project that covers the following basic stuff:

  • TDD
  • testing code that is supposed to throw/raise errors/exceptions
  • catching and handling errors
  • something tricky and algorithmic. Currently the password checker project expects people to be able to count the number of errors raised, if three errors were raised and/or specific errors were raised then then the password is not ok. We need people to be able to practice problem solving and algorithmic thinking

update the `contentlink` shortcode so that it prints the content type mentioned in the frontmatter

There is a chortcode that we use for internal linking

The problem is that this shortcode expects all projects to be nested under 'content/projects' and all topics to be nested under content/topics etc.

We've upgraded our frontmatter so that this is no longer the case.

Pease make sure that the content type gets printed out correctly even if the directory hierarchy is arbitrary.

See #47 to see a demonstration of why this is needed

topics/django/understanding-migrations: needs content

Add the necessary content

Make sure you cover some of the dangers of migrations and git. People like to add migrations to their PRs. Those migrations were made against their dev db, and are often in contradiction to those on the prod db

Create "##Instructions for reviewer" for project Assertive Programming Kata

Please add a section to the bottom of this project's _index.md file.
The section heading should be EXACTLY "## Instructions for reviewer"

Basically we have to set reviewers up for success by telling them what success looks like and what to pay attention to when reviewing this project submission.

Description:

  • Look at a bunch of old reviews for this project for each cohort

  • Find the common feedback [This should help you get an idea of what instructions to create]

  • Write them out clearly

  • The section heading should be EXACTLY "## Instructions for reviewer"

topics/js-and-node-specific/dotenv

Delete this and make sure the linter passes

Make a new topic about environmental variables and node.

The students should know about how to make use of environmental variables. And why that is important for deployment stuff. You can refer to 12factor apps.

Talk about developing with node and some tricks to set up your dev environment variabes.

  • One can use dotenv as a development tool, but it's better not to commit these files to the repo
  • One can also just use source/path/to/dev/config.sh
  • stress gitignore and never ever committing your secrets

Sql schema design project

Think of an interesting schema design project that covers the concepts from #49

Things to note:

  • dont hold their hands too much! We are dealing with juniors, BUT they need to learn to solve problems themselves.
  • some of the people using this are not first language english speakers. So please keep your language simple

workshops/intro-to-linux turn this into a useful topic

We use and recommend linux Ubuntu or mint. Many students have no idea how either of these work and wont know about terminology or anything.

I'd suggest making a video and linking to it.

There are a few things that tend to make the lives of students quite anoying and looooow

  • Get them to understand that using the mouse is slow and limited, and that the command line is awesome. That's quite important.
  • And get them to install and understant terminator so that they dont have to open a million terminals
  • get them to understand workspaces and navigation with that
  • show them that they can set up keyboard shortcts

Try to inspire them to actually practice using the tools at their disposal so that they dont waste 30% of their time arguing with the mouse.

Level up pure sql content

Currently we get people to a point where they can basically connect to psql, create tables, and do some queries with joins but there is a lot more worth knowing as a junior developer.

Note:

The Internet is a wonderful place. It is full of really amazing learning resources that are created and maintained by passionate and knowledgeable people. It’s a hell of a job, and we are grateful that someone is doing it.

We try to leverage other people’s good work as much as possible. We provide you with the best resources we can find and we supplement those resources with our own projects and explanations where needed.

Update level 1 kata

update projects/basic-flow-control-katas/ with the changes below

Github recently changed some of their language so we need to update the exercises to match. Change all refrences to master to main

revise topics/web-frontend/intro-to-web-design

  • check that all the links go to the best material they can and are under the right headings
  • possibly spit this into multiple topics so that we can have fine grain control over how the content is referenced

projects/django-airbnb-clone/property-owner-dashboard-ui

Add a little bit of spec here. What might a property owner want to see?

Dont be too fancy, but take the content prerequisites into account. Note that this needs to be developed by junior devs in order to upskill so seriously dont go overboard. Focus on demonstrating foundational skills.

Create "##Instructions for reviewer" for project Password_Checker part 1

Please add a section to the bottom of this project's _index.md file.
The section heading should be EXACTLY "## Instructions for reviewer"

Basically we have to set reviewers up for success by telling them what success looks like and what to pay attention to when reviewing this project submission.

Description:

  • Look at a bunch of old reviews for this project for each cohort

  • Find the common feedback [This should help you get an idea of what instructions to create]

  • Write them out clearly

  • The section heading should be EXACTLY "## Instructions for reviewer"

Upgrade linter so it uses pipenv

Pipenv is just great.

Right now our linter requires the user to get a python venv up and running.

Use pipenv and the latest python instead

Make a TOPIC about different kinds of sql queries

We use postgres.

At this point the learners hould know about joins.

What follows below are a few concepts that are important, but that a lot of people wouldn't find intuitive.

  • They need to understand GROUP_BY and aggrigations
  • They need to understand how to make views
  • They need to know that they can select from select statements: Eg:
select CustomerName from (SELECT CustomerName,City FROM Customers);

This example is silly ☝️ but this technique can be hella useful

Links to wonderful resopurces that cover other topics in case they need to go deeper.

We do want to teach people how to find their own resources instead of spelling everything out.

SQL schema design project

Think of an interesting schema design project that covers the concepts from #49

Things to note:

  • dont hold their hands too much! We are dealing with juniors, BUT they need to learn to solve problems themselves.
  • some of the people using this are not first language english speakers. So please keep your language simple

Update git basic exercises

update projects/git-exercises/ with the changes below

  1. Github recently changed some of their language so we need to update the exercises th match. Change all refrences to master to main
  2. Many recruits fail to push the gitignore section and thus cannot be competent on the first submission. Update the gitignore section to add commit and push to the end of them.
  3. Our syllabus has grown drastically in size, this is a problem for some recruits when they get to the section about cloning our repo, change the referances from https://github.com/Umuzi-org/tech-department to https://github.com/Umuzi-org/a-repo-to-clone

Create "##Instructions for reviewer" for project: Animals Part 2. Adding Tests

Please add a section to the bottom of this project's _index.md file.
The section heading should be EXACTLY "## Instructions for reviewer"

Basically we have to set reviewers up for success by telling them what success looks like and what to pay attention to when reviewing this project submission.

Description:

  • Look at a bunch of old reviews for this project for each cohort

  • Find the common feedback [This should help you get an idea of what instructions to create]

  • Write them out clearly

  • The section heading should be EXACTLY "## Instructions for reviewer"

Create "##Instructions for reviewer" Exploring the Evolution of Linux Visualisation

Please add a section to the bottom of this project's _index.md file.
The section heading should be EXACTLY "## Instructions for reviewer"

Basically we have to set reviewers up for success by telling them what success looks like and what to pay attention to when reviewing this project submission.

Description:

  • Look at a bunch of old reviews for this project for each cohort

  • Find the common feedback [This should help you get an idea of what instructions to create]

  • Write them out clearly

  • The section heading should be EXACTLY "## Instructions for reviewer"

Consolidate all agile content

This is very similar to issue #54

Basically, find all the content that has anything to do with Agile and move it into a folder called /content/agile
Once that is done run the linter. Movint things probably would have broken a few links.
Once all the links and things are fixed, you're done :)

Consolidate sql folder structure

Back in the day, the way to categorise different pieces of content as different things was to put them into differet folders. You'll see that there are folders for "topics", "projects" and "workshops". Ths worked fine fora long time, but our syllabus offerings became way more complex, and frontmatter is awesome and versatile.

In an effort to make our syllabus easier to navigate, we'd like to have the content directory hierarchy less about the content type and more about what the content is about.

Please do the followin:

  1. Make a new directory called content/sql
  2. Make a markdown file in there called _index.md. For now that can just contain:
---
title: SQL
---

This will then show up in the navigation side bar.

  1. Find all the things that are specific to pure sql and arrange them sensibly in this folder. There is a whole bunch of cnotent about Python+sql, node+sql, kotlin+sql etc. For now please leave those things as they are. This is about plain simple sql only.

  2. Run the linter. It's explained in the README. There are likely a bunch of links that need to be updated

  3. Give yourself a pat on the back

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.