├── software-engineering-and-tools-curriculum.md ├── web-programming-curriculum.md ├── README.md ├── computer-science-fundamentals-curriculum.md ├── who-is-this-for.md └── programming-coding-hacking-computer-science-and-software-engineering.md /software-engineering-and-tools-curriculum.md: -------------------------------------------------------------------------------- 1 | Software engineering & tools 2 | 3 | Intro 4 | - Editors 5 | - Debuggers 6 | - REPLs 7 | - Git 8 | - Bash 9 | Intermediate 10 | - Task runners 11 | - Package managers 12 | - IDEs 13 | - Unit tests 14 | - Regex 15 | 16 | -------------------------------------------------------------------------------- /web-programming-curriculum.md: -------------------------------------------------------------------------------- 1 | # Web Programming basics 2 | - HTML 3 | - CSS 4 | - JavaScript 5 | - SQL 6 | - Clients and servers 7 | 8 | # Intermediate web programming 9 | - Cloud applications / Infrastructure as a service 10 | - ORMs 11 | - Frameworks / MVC 12 | 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Full Stack 2 | This project is intended to be the definitive ramp up from programming novice to full-stack engineer. 3 | 4 | For now, this is only a place where I will consolidate my resources, develop plans, and eventually deploy articles and applications that I intend to be a part of the curriculum. In time, it may take other forms such as a blog, a book, or courses. 5 | 6 | This project is currently on the furthest back burner and may not see frequent updates. 7 | -------------------------------------------------------------------------------- /computer-science-fundamentals-curriculum.md: -------------------------------------------------------------------------------- 1 | # Intro to computer science 2 | * Commands/statements 3 | * Run a command from the command line 4 | - Echo Hello World 5 | * Run a series of commands 6 | * Save a series of commands into a file 7 | * Run commands from a saved file 8 | * Variables 9 | * Declaring a variable 10 | * Referencing a variable 11 | * Updating a variable 12 | * Scope 13 | * Types 14 | - Strings, ints, booleans, bottom/empties 15 | * Data manipulation 16 | - Math 17 | - String concatenation 18 | - Boolean math 19 | * Conditionals 20 | - if/elseif/else 21 | * Loops 22 | * Functions 23 | - Declaration 24 | - Parameters 25 | - Returns 26 | - "First class functions" 27 | * Data structures 28 | - Lists 29 | - Sets 30 | - Objects 31 | * Algorithms 32 | - Binary search 33 | # Intermediate computer science 34 | * Reference semantics, data mutability 35 | * Intermediate types 36 | - Primitives versus custom 37 | - Static vs dynamic 38 | * Functional vs OOP 39 | * Intermediate data structures 40 | * Recursion 41 | # Advanced computer science 42 | * Data Structures 43 | * Types 44 | - Strong vs weak typing 45 | - Structural / duck typing vs nominal typing 46 | - implicit typing & generics 47 | * Algorithms 48 | 49 | -------------------------------------------------------------------------------- /who-is-this-for.md: -------------------------------------------------------------------------------- 1 | # Who is this for? 2 | 3 | The field of computer science and the industry of sofware engineering are as big and broad as you would like them to be. One can spend their entire lives studying something as narrow as font rendering without ever touching even basic web development. Because of this and the sheer volume of available materials, it can be incredibly difficult to know when any one resource is what you need. 4 | 5 | One of the goals of this project is to scale better from the complete newcomer to computer programming all the way up to professional software developers. It also aspires to provide a healthy mix of academic computer science concepts along with practical software engineering skills. It will be some mix of: 6 | 7 | * Conceptual learning through reading, diagrams, and examples 8 | * Practical exercises 9 | * Reference material 10 | 11 | If you are brand new to programming, this is a fantastic place to start. If you already know how to program but would like to learn the skills of a professional full stack web developer, this is a great resource for you. If you'd just like a crash course on JavaScript, Node/NPM, and React, this will also be what you're looking for. 12 | 13 | # Who this isn't for 14 | 15 | The Full Stack is intended to be a broad and comprehensive learning resource. The sort that could start your journey into computer programming and accompany you long into your career. However, it is oriented around teaching enough of the fundamentals to give the context one needs to go deeper on their own. As such, virtually none of the topics are examined in as much detail as a typical college course. For instnace, if you're here hoping to go deep into the nuances of Postgresql, you are unlikely to find what you need, though we do cover a fair amount of SQL and postgres. 16 | -------------------------------------------------------------------------------- /programming-coding-hacking-computer-science-and-software-engineering.md: -------------------------------------------------------------------------------- 1 | # Programming, computer science, and software engineering 2 | 3 | So you've got a good idea for an app you'd like to make. You've heard about the attractive job markets and salaries for software engineers. You've had a teacher or a friend tell you that you really ought to learn to code. The only problem is, you have no clue what any of this means. Are software developers coders? Is what they do all day "programming" or "software engineering"? Does it matter? 4 | 5 | Surprisingly, this initial bit of confusion is in fact a subtle observation of distinctions that are often not acknowledged by more experienced people in the industry, often to their own detriment. Mastery of every tool requires more time and disipline than anyone has, and so a large part of what a full stack engineer does is build and maintain a broad and useful knowledge map of many different concepts. This often means knowing quite a bit about a programming language or framework that they've never even written a single line of code for. And so we will begin to build our knowledge map here by understanding some of the most fundamental concepts and terminology in software. 6 | 7 | ## Programming and coding 8 | 9 | Programming, coding, and hacking all are terms that have found their way into common usage. It's common for one to refer to their dad who works at Microsoft as a "computer programmer." Further, many of the organizations trying to bring these skills to the broader public do so under slogans like, "Anyone can code." 10 | 11 | These active verbs are best understood by first considering their noun counterparts. A program is a set of instructions, written in code, that the computer can run. While not always the case, a single instruction is often (and usuall best) written in a single line of text. As such you'll often hear the word code paird with the number of lines. A small program might be a couple hundred "lines of code," but the entire program is written in "code." 12 | 13 | And so going back to our verbs, coding and programming are simply the act of writing these instructions, and stringing them together into programs. Hollywood depictions of this process often make it seem as if the process is about furiously smashing a keyboard as fast as one can, but in reality the process is a far more pensive, iterative, and methodical. So when a person says they spent all day programming, what they probably did was write many lines of code, run them, see what happened, find mistakes, edit the code, run the code again, run the code again and watch what happens more carefully, and then edit again. The process is experimental, usually error prone, and often collaborative. 14 | 15 | ## Computer science 16 | 17 | Even if you know how to write many different lines of code, and have perhaps even strung them together into a few programs, perhaps even highly entertaining or lucrative programs --------------------------------------------------------------------------------