# Full Stack Immersive
# Graduation Requirements
Throughout the 16-week program, students will be evaluated on their progression and career readiness. Students will undergo at least 2 performance reviews throughout the program to ensure each student is progressing steadily throughout the course and to identify areas of strengths and weaknesses. In order to receive a certificate of completion, students must meet the follow criteria by the end of their cohort.
- Miss no more than 7 days of class – Students who miss more than 7 days (excused or unexcused) will not receive a certificate of completion, career support or be able to participate in student graduation. Students who miss more than 20% of the program or 10 consecutive days will be removed from the program.
- Demonstrate an understanding of key concepts – Students must demonstrate their understanding of the key concepts covered throughout the program in their Capstone Project. Key concepts include Programming Fundamentals, Front End Development, Back End Development, Programming Best Practices, and Git.
- Develop key assets needed for the job search – Students must develop and receive a "pass" for their resume and portfolio before completion of their cohort.
- Students who accept a software development-related job offer prior to the completion of class will automatically meet all the graduation criteria and receive a certificate of completion.
# 1. Developer Fundamentals
In your first week, you will gain core coding skills using the Python programming language.
In addition, you will know how to manage your project code by using a variety of tools, such as the command line, git, and Github.
# Learning Objectives
- Command line
- Run basic commands
- Navigate the file system
- Version control
- Create Git repositories
- Create, merge and rebase branches
- Clone, push, pull and make pull request to and from GitHub
- Resolve merge conflicts
# Technologies
- Unix Terminal
- Bash Shell
- Git
- GitHub
- Python 3
# Lessons
# 2. Solving Problems Using Code
You will work through a number of coding challenges by building solutions in Python. Along the way, you will learn how and when to use data structures like dictionaries, objects, and classes.
You will tackle your first programming project and create a 2D game. By the end of the week, you will have plenty of experience reading, understanding, and debugging coding errors.
# Learning Objectives
- Create, edit, run, and debug command line programs
- Imperative Programming
- Implement simple algorithms with variables, loops, and conditionals
- Use lists and dictionaries
- Modular Programming
- Organize code into functions and modules
- Import modules from the standard 👻️ library and third-party libraries
- Object-Oriented Programming
- Create classes and instantiate objects
- Reuse code via inheritance
# Technologies
- Python 3
# Lessons
# 3. Front-End Foundations
You will build your front-end web skills starting with HTML and CSS. You will learn how to create web pages, format their contents, and finely control the layout. To do that, you will recreate several popular web page designs (such as medium.com's look and feel).
Then, you will learn techniques to make your layouts auto-adjust to the screen size of whatever device is used to view your web pages. Finally, you will learn to use Bootstrap, a popular and flexible styling framework.
# Learning Objectives
- How to use Google Chrome’s Developer Tools
- HTML
- Create tags and elements
- Write a valid HTML document
- Construct hierarchy
- Embed Images
- Create Links
- Understand how to read and write CSS
- Style HTML elements with selectors
- CSS specificity and how to use it
- Color
- Fonts
- Box model
- Positioning
- Viewports and media queries
- Introduction to CSS naming conventions
- Creating web layout with flexbox
- Basics of web accessibility
# Technologies
- HTML
- CSS
- Google Chrome Developer Tools
- Flexbox Layout
- Bootstrap 4
# Lessons
- HTML 101
- HTML Forms
- CSS 101
- CSS Floats
- Media Queries
- CSS Position
- Flexbox
- Grid Layout
- Github Pages Hosting
- Bootstrap
- Chrome DevTools
# 4. Handling User Input
Now that you can present information to your users, it is time for them to talk back! To provide this kind of interactivity on your web pages, you will begin mastering the basics of JavaScript - the language of the web. Using the same programming fundamentals you learned with Python, you will build a series of interactive games.
And, to make sure your friends and family can play these games, you will learn how to deploy your web-based games to Linux servers running on Amazon's AWS platform. This will be an intense week, but extremely rewarding!
# Learning Objectives
- JavaScript gotchas
- Avoid common pitfalls related to scoping and hoisting
- Take advantage of implicit and explicit type coercion
- Asynchronous Programming
- Understand JavaScript’s Event Loop
- Use callbacks to add interactivity to web pages
- ES6
- Effectively use arrow functions, enhanced object literals, the spread operator, default parameters, destructuring, block scoping, iterators, and template literals
# Technologies
- ES6
- AWS
# Lessons
# 5. Building Interactive UIs
jQuery is the most widely used JavaScript library in the world, and for good reason. You will learn how to use the power of jQuery to quickly develop highly interactive web pages. You will build more games this week, but using animations and transitions to provide visual feedback to your users.
There will be times you will need some, but not all, of jQuery's capabilities. You will learn how and when to use CSS for animation, as well as how to use Bootstrap's built-in visual feedback features.
# Learning Objectives
- The jQuery library
- Use jQuery for quickly traversing and manipulating the DOM
- Add visual effects like simple transitions and animations
- Handle browser events with jQuery
- CSS transitions and animations
- Create transitions and animations using native browser code
- Ajax and RESTful Web APIs
- Use jQuery and Axios to work with data from remote web services
- Process data asynchronously using Promises
- Functional Programming
- Use map, filter, and reduce to work with arrays of objects, DOM elements, and Promises
# Technologies
- Promises
- jQuery 3
- Axios
- RESTful Web APIs
# Lessons
# 6. Group Project with Intro to Agile
# Learning Objectives
- Sprint Planning
- Create a regular cadence with team stand-ups and reviews
- Write user stories that describe features
- Use a kanban board to prioritize and manage tasks
- Collaboration
- Use branching, merging, and pull requests to distribute work among team members
- Resolve code conflicts
- Build features and fix bugs through pair programming
# Technologies
- Github Projects (simple kanban board)
# Lessons
- Introduction to Agile
# 7. Backend Foundations
Up to now, you've only worked with half of the web - the half that works in the browser. To create web pages that allow for collaboration between users (multiplayer games, social media sites, etc.), you will need to write code that runs on the server. This week you will create a simple web server (yes, a web server!) using Node.js.
Just like JavaScript on the browser, there are a number of handy libraries that you can use. You will learn to install and manage those using the npm command that comes with Node.js.
One of these libraries will let you use WebSockets for building real-time applications. As an exercise, you'll build the backend and front-end of a chat application.
# Learning Objectives
- Node JS
- Use npm to install packages and write scripts
- Creating modules
- Use built-in modules
- Import third-party modules
- Express JS
- Learn the Model View Controller (MVC) architectural pattern
- Use routing and middleware
- Secure HTTP headers with Helmet
- Create views with the Pug templating language
- Authenticate users with Passport and JSON Web Tokens (JWT)
- Use WebSockets for data streams
# Technologies
- Node.js
- Express 4
- Helmet (for security)
- Pug (for templating)
- Passport (for authentication)
- Express 4
# Lessons
# 8. Databases
At the heart of any blog, a social media site, or collaborative web app is its database. Often, your data will have complex relationships ("a blog post has an author and one or more comments from a registered user"). Dealing with this data is straightforward, as long as you can speak the language. This week, you will learn how to "talk" to a database using SQL (Structured Query Language).
As your backend code gets larger and more complex, you will need ways to store data, organize your code, and develop quickly. This week you'll be using the Express.js framework, a minimalist backend framework that will help you write backend code. You'll learn how to take advantage of Express.js's routing, templating, and session management.
# Learning Objectives
- Data modeling
- Create tables that describe a problem domain
- Apply database normalization when creating tables
- Use primary keys, foreign keys, and linking tables to model relationships between tables
- Querying
- Modify the contents of database tables by inserting, updating, and deleting
- Efficiently retrieve data by selecting, filtering, grouping, and joining data from tables
- Database management
- Modify the structure of tables
- Optimize databases with indexes
- Export and import data
# Technologies
- PostgreSQL 11
- Sequelize.js
- bcrypt
# Lessons
# 9. Full Stack Project
- Solo or in groups
# 10. Career Prep
Career Prep consists of two or three class days dedicated to preparing your career assets, particularly your resume and portfolio, which will be due to the Student Success team at the end of Career Prep for review. During this time there will be presentations from guest speakers on career related topics. There will be no technical aspect of class as led by your instructor. Your DiRs will be available to help with technical aspects of creating and hosting your portfolio, and the Student Success team will be there for anything else.
# Getting Started
If this is your first time composing a resume or a portfolio, or you simply want to cut to the chase and see what DigitalCrafts recommends as best practice for your career assets, check out our Career Toolkit. This 55-page document outlines our recommendations for your resume and portfolio, as well as your LinkedIn and GitHub profiles. Our Career Toolkit also covers many frequently asked questions, such as:
- Q: Should I use a template for my portfolio?
- A: Yes, don’t spend all your energy worrying about the design when the main idea is to highlight your software developer projects.
- Q: Should I put my whole address on my resume?
- A: No, just your city.
# Graduation Requirement
Your resume and portfolio are evaluated on the check system with ✓- ✓ ✓+ indicating:
- ✓- Does not meet expectations
- ✓ Meets expectations
- ✓+ Exceeds expectations The successful completion of your resume and portfolio is a graduation requirement. A passing mark is a ✓ or ✓+ and the Student Success team welcomes multiple submissions to help you perfect your career assets. Time is allotted in class for the completion of the first draft of your resume and portfolio so that the final drafts can be reviewed and approved well before Demo Day.
# Mock Interviews
During Career Prep you will receive a token to redeem via Skilled for a live online technical interview in the language of your choice. Prior to redeeming this token, which will be emailed out to you, we recommend that you start practicing interview skills by using the free site Pramp, which pairs you with a peer job seeker, each person taking turns acting as interviewer. You will also want to study common data structures and algorithms for the technical aspect of the interview.
# Ongoing Support from Student Success
The Student Success team provides ongoing career support throughout your time at DigitalCrafts and beyond. Check the city-specific jobs channels on a weekly basis or more frequently to keep abreast of job and internship opportunities that the Student Success team has set up for you. Be sure to update your Student Success Advisor when you get a job so we can celebrate it in the #global channel on Slack and update our records!
# 11. Intro to React
React is a small but flexible front-end library that helps you create UIs. It is especially well-suited for UIs that need to display data that updates frequently. This week, you will learn the basics of building React applications, relying primarily on your understanding of JavaScript fundamentals.
You will start with simple functions that draw data to the page and build up your React knowledge. By the end of the week, you will be creating and (re)using highly-performant React components.
# Learning Objectives
- Create complex, front-end applications, with a JavaScript framework
- React
- Using create-react-app to project creation
- JSX
- React Dev Tools
- Elements
- Components and Props
- State and Lifecycle
- Events
- React Design Patterns
- Lists and Keys
- Forms
- React Router
- Hooks
- Context API
# Technologies
- React 16
# Lessons
- Intro to React
- Building stateful components
- Design patterns with React
- Intro to React Router
- Additional state management techniques
# 12. Advanced React Topics
React has made a lot of friends in its first few years of life. To write fluent React code that takes advantage of battle-tested libraries, you will want to be friends with React's friends.
This week involves learning the basics of a lot of different tools that help you write high-quality React code.
# 13. Redux
Learn about advanced concepts.
# Learning Objectives
- Understand data immutability & application state
- Redux
- Create State
- Actions
- Reducers
- Redux store
- Using Redux with React using the react-redux library
# Technologies
- Redux 4
# Lessons
- Intro to Redux
- Integrating Redux with React
# 14. Individual React Project
# Learning Objectives
- Create an individual project using all the the skills taught in the bootcamp