General Primary Learning Resources
- Books with strong focus on foundations, principles, and theory (avoiding "cookbook" style books, which tend to gloss over theory and depth too heavily)
- Official documentation
- Personal projects. Smaller daily work as I study, then larger projects with the completion of major topics
- Experience from employment and working with other developers
- Web courses & coding challenges for more practical work
I. Basic Dev Environment <-- Completed
- OS: Debian, OS X
- Text Editors & IDE: Atom, PHPStorm
- Database Visualization: MySQL Workbench, DBeaver
- Image Editing: Gimp, Photoshop
- Deployment Tools: Github w/ webhooks, Docker, SSH <-- In Progress
- Version Control: Git, Github
- VPS: Digital Ocean w/ Nginx
II. Front End I <-- Completed
HTML5
- Primary learning resource: MDN Web Docs: HTML
- The basics of the DOM & how to write basic semantic HTML
- Dividing pages into sections/components and how to structure the DOM properly
- Multimedia & Embedding: images, video, iframes, vector graphics, etc.
- Tables
- Forms: structure, sending form data, validation, styling, etc.
- Make at least 5 HTML pages - focus on structure, not making them pretty
CSS3
- Primary learning resource: MDN Web Docs: CSS
- The basics of CSS & The Box Model: selectors, cascade, sizing, units, etc.
- Styling Text: lists, links, fonts, etc.
- CSS basic layout: normal, absolute, relative, sticky, float, etc.
- Flex and Grid layouts + media queries
- Responsive web design to ensure proper styling for smartphones, tablets, etc.
- Make at least 5 pages - focus on structure and making them pretty
JavaScript
- Learning Resources:
-
- The basics of JS: data types, objects, functions, conditionals, loops, etc.
- DOM manipulation and events
- Object oriented paradigm (both classes and prototypes)
- ES2015+: template literals, arrow functions, fetch, let, const, map, filter, reduce, etc.
- Basics of JSON and interaction with HTTP requests
- Functional programming w/ component based design
- Asynch JS: promises, event queue, call stack, etc.
- Scope: this, bind, hoisting, etc.
- Client-side web APIs
Additional
- Set up web server for hosting site and projects: Digital Ocean, Nginx, SSH, DNS, SSL, firewall, etc.
- Github in detail + SSH
III. Dev Job - Full Stack Developer II - March 2019 to April 2020 <-- Departed
- Stack: HTML, CSS, JS, Bootstrap, jQuery, DataTables, PHP, MySQL
- Web Server: Nginx
- Automation: Crontab
- Dev environment: OS X, Debian, PHPStorm, Atom, MySQLWorkbench, Github
IV. Software Architecture - OOP <-- In Progress
A bulk of this will be review of already learned design patterns and principles, as learned from college and personal studies after school, but since first dev job has largely been procedural PHP, with only scant OOP mixed in, will be useful to do some large reviews and expansion on software design and architecture knowledge. Will then do personal project work, back-end in object-oriented and front-end in functional for a bit, to get more architecture/design practice in both paradigms.
Also re-doing the existing API for one of our main software at work. Old API is a hodge podge of largely procedural code, pieced together by a variety of devs over time, with little design considerations, resulting slew of problems, like conflicting data being returned, and very high coupling. New API will be in OO design, focusing on DRY and SOLID principles, with proper single responsibility classes, separation of interface and implementation, strong extensibility, high readability, greater flexibility and re-usability etc.
- Learning Resources:
- The Object Oriented Thought Process , Matt Weisfeld (2019, 5th ed.) - Review of OOP concepts and foundations, such as interfaces, abstract classes, polymorphism, inheritance, encapsulation, composition, aggregation, proper decoupling, SOLID principles, etc. <-- completed
- Clean Architecture: A Craftsman's Guide to Software Structure and Design, Robert Martin (2017) - paradigms, design principles & patterns, component principles & patterns, layered architecture design, testing, etc. <-- 1/3rd complete
- Head First Design Patterns, multiple authors (2004) - creational patterns, structural patterns, behavioral patterns, foundation classes, SOLID, DRY, etc.
^^ read first 117 pages, then dropped...too drawn out and, "tech by example," for my preferred, "teach by foundation," learning style
- Dive Into Design Patterns, Alexander Shvets (2019) - replacement for Head First Design Patterns, covering same topics
- Refactoring: Improving the Design of Existing Code, Martin Fowler (1999) - principles of refactoring, bad code, building tests, composing methods, re-organizing features, organizing data, simplification, de-generalizing, re-usability, etc.
- Agile Software Development, Principles, Patterns, and Practices, Robert Martin (2002) - foundations of Agile, Agile design & SOLID, case studies, UML notation, etc.
- Applying UML and Patterns: An Intro to Object-Oriented Analysis and Design and Iterative Development, Craig Larman (2004, 3rd ed.) - OO analysis & design, iterative & evolutionary design, inception, elaborate iteration, case studies, etc.
- Clean Code: A Handbook of Agile Software Craftsmanship, Robert Martin (2008) - bad code, clean functions, formatting, data structures & abstraction, error handling, testing, class organization, system organization, concurrency, etc.
V. Front End II <-- In Progress
React
- Learning Resources:
- NPM
- JSX
- Rendering
- Components
- State & Props
- Event handling
- Conditional rendering
- Lists & keys
- Forms
- Stateful vs stateless components <-- I am here
- Hooks: useState, useEffect, useRoutes, hook rules, building hooks, hooks API
- Redux - additional state management, as some companies may not be using Hooks yet
- React Router - additional routing, as some companies may not be using Hooks useRoutes yet
Functional JavaScript
- Declarative programming
- Immutable data structures
- First class functions
- Pure functions
- Partial application
- Currying
- Composition <-- I am here
- Hindley-Milner
- Monads
- Functors
- Natural transformations
- Traversals
Front End Libraries I
- Bootstrap 4 - significant changes from Bootstrap 3
- Sass - CSS Pre-processor
- Moment.js - a lightweight date library for parsing, validating, manipulating, and formatting dates
VI. Back End II <-- In Progress
Python + Django
- Learning Resources:
-
- The basics: variables, data types & structures, operators, conditionals, dictionaries, functions & methods, etc.
- Scope
- Command line tools
- Error handling and exceptions
- Modules and packages
- Package distribution
- File handling <-- I am here
- OOP in Python
- Testing
- Concurrency
- Database interaction
- Rest API interaction
- CRUD with Python
- OWASP guidelines
- Basics of use in automation, machine learning, web scraping
- Django
Improved PHP
- Learning Resources:
- First: Modern PHP (2015) - namespaces, generators, closures, standards, components, best practices, deployment, provisioning, hosting, etc. <-- Just started
- Then: PHP Objects, Patterns, and Practice (2016, 5th) - OOP design in PHP, Object tools in PHP, patterns in PHP, DB patterns, best practice, PHPUnit, Vagrant, etc.
Laravel
- Learning Resources:
-
- Basic installation, config, homestead, deployment, etc.
- Architecture concepts
- Basics of framework: routing, controllers, requests/responses, views, etc. <-- I am here
- Front-end: Blade templates, localization, scaffolding, etc.
- Security: auth, API auth, encryption, hashing, etc.
- DB: query builder, pagination, migrations, etc.
- Eloquent ORM: relationships, collections, mutators, etc.
- Testing: unit testing, http tests, console tests, DB tests, etc.
- Additional: Artisan, cache, events, helpers, queues, mail, etc.
- Official packages: Cashie, Dusk, Envoy, Scout, etc.
VII. NoSQL & GraphQL
- MongoDB - NoSQL DB
- GraphQL - REST alternative language
VII. Extra
- Auth - OAth, Basic Auth, Token Auth, JWT, OpenIDRabbitMQ
- Elastisearch - search engine
- Docker - separates app from underlying system, for local dev environments, rapid deployment, sandboxing, simplified testing, load balancing <-- In Progress
- Kubernetes - automates deployment, scaling, and management of containerized applications
- Redis - caching
- RabbitMQ - message broker
- Web sockets - Define an API establishing "socket" connections between a web browser and a server; a persistent connection between the client and the server for data transfer
- Mobile Apps - React Native
- Advanced Unix Shell & BASH
- NPM Script - task runner
- underscore.js - utility library useful for functional programming for iteration, chaining, immutability, composite function creation, etc.
- Ramda.js - another functional library, but w/ all functions auto-curried, no side effects allowed, point-free code favored, and some additional useful utilities
- Chart.js - "simple, clean and engaging HTML5 based JavaScript charts"