​Technical Curriculum

Persever8's curriculum will begin with the following foundation languages:

           * JavaScript

        *  HTML and CSS

        *  Python

        *  Java


​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


Continuous Integration:
        * 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)


PyPI:
        * https://pypi.python.org/pypi
             * 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.


Regexs:
        * 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.


Web Development:
       * 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
       * Add Javascript for enhanced controls, form validation, etc.
       * 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
       * Authentication/Authorization
             
* Basic http password auth
           
  * Simple concept of roles, ‘admin’ versus ‘user’
       * Introduce cookies and sessions


Database:
       * 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:

                * Sqlite

                * 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