Persever8's curriculum will begin with the following foundation languages:
* HTML and CSS
The following concepts will be integrated into the curriculum throughout the nine-month program:
Basics of setting up an environment:
* Familiarity with virtual machines
* Introduce concept of virtual machine, what it is and why it’s useful
* Use of Vagrant to spin up a Linux VM and interact
* Shared file system, code changes on host shared into VM
* Concept of where code is run and how to interact with a server
* Basic Linux Command Line familiarity
* Able to ssh into the machine, run their application, scp files, interact with it through command line, web browser, etc.
* Start/Stop processes
* Understand concepts of users and file permissions
* Edit a file from command line and save it.
* Creation of a bash script
* simple script to set a variable and execute a command to make their work easier.
* How to install Python and ‘pip’ on a Linux VM
* Able to go from basic Linux machine, install python + editor, edit files, run unit tests, run code.
Test Driven Development:
* Habit of relying on unit tests to help shape development from day-1
* Examples with nose tests or a similar popular test runner
* Pylint/Pyflake for help with linting
* Usage of travis to test projects
* When a PR is submitted see travis run and comment on pass/fail of tests prior to merging
* Usage of coveralls to show code coverage (hooked up to run on PR submission in github)
* Add badges to github to show integration with the tools
Third Party Modules:
* Students need to be able to find third party modules and use them in their code
* Able to identify what functionality might be available in a 3rd party module
* How to find the module (pypi, npm, github, etc)
* How to install and use the module (read docs, look at examples, source, google examples)
* Student needs to be able to search for an existing module, install it through ‘pip’ and use it in their program.
* Must be able to look at existing documentation/examples to learn how to use modules as well as open source when needed to read through and understand.
Exposure to Algorithms/Design Patterns:
* Introduce basic algorithms: quicksort, merge sort, etc
* Instead of focusing on low level details, high level sorting by certain parameters. Also integrate data structures and sorting a dataset based on content.
* Knowledge of what a design pattern is and how to write their code to behave to some popular patterns, MVC might be a good example with a Django web app.
* Basic introduction to regexes for string manipulation
* Introduce: https://regex101.com/ for testing out regexes and then implement in Python with some examples.
* Cover used of “sed -i” for CLI updates in a script.
* Knowledge of a web framework, Django/Flask/etc? Pick one and do several projects on it.
* Introduce web application development in regard to HTTP requests/responses
* Basics of Apache, static HTML and CSS
* Interact with database to store data, use an ORM abstraction, create a model, etc
* Create HTML templates to render a response
* Add CSS for styling
* Introduce REST API concept
* Ability to create CRUD controllers to service REST API
* JSON serialization
* Interact with REST API:
* Command line with curl
* Python client
* Add AJAX ability to web app
* Basic http password auth
* Simple concept of roles, ‘admin’ versus ‘user’
* Introduce cookies and sessions
* Basics of data modeling, normal forms, join tables, etc
* Basics of SQL queries
* Basics of an ORM, how their code can be simpler and interact with an object, but under the covers it’s handling the SQL translations.
* Specific Databases:
* Postgresql or MySQL
Integration with existing services:
* Integrate with Facebook/Google/Twitter for login
* Post a tweet from their application
* Fetch weather from Yahoo/Google
* Fetch stock quotes from Yahoo/Google
* Post a photo to Instagram, Flickr, or Snapchat