PCS JS Immersion

JavaScript Immersion Syllabus

Version 1.2

Portland Code School

Course Description

This comprehensive course gives you everything you need to begin a career as a JavaScript developer. In this fast-paced, project-based 13-week course, you will be introduced to all the skills necessary for web application development.

Not a contract

For definitive contractual agreements, see the "Portland Code School Student Enrollment Agreement" that you signed. Nothing in this syllabus is intended to supersede or replace terms agreed to in that document. Where a conflict exists, that document will apply.

Meeting hours:

Monday-Friday 9:00AM to 5:00PM

Location

PCS Classroom, 735 SW 20th Place, Suite 230 Portland, OR 97209

Instructors:

Dan Bauer

Email: dbauer@portlandcodeschool.com

Tom McCluskey

Email: tmccluskey@portlandcodeschool.com

Prerequisites

This class continues your education in software development. You should be able to do the following:

  • Create a web site with HTML and CSS
  • Use the Git version control tool from the command line
  • Explain the difference between front end and back end development
  • Define a variable in one programming language (JavaScript or any other language)

If you have questions about these prerequisites, contact your instructor.

Learning Objectives & Core Outcomes

Core Abilities

The core abilities for students in our program are as follows. They are designed to be the overarching goals for everything you do. Each of them have been specifically requested by the employer network and we believe that they are good goals for all developers to aspire to and flesh out.

  1. Create code quickly and efficiently
  2. Create high quality code
  3. Collaborate with teammates effectively
  4. Understand and apply current technologies
  5. Learn new technologies and techniques easily
  6. Understand and apply computer science concepts
  7. Understand and apply business and product development concepts
  8. Speak effectively about technology in interviews and while networking
  9. Utilize the technical and functional aspects of each lesson topic

Technical abilities

Technical abilities are skills needed to succeed in web development.

  1. Understanding the core principles of programming, in JavaScript and in general
  2. Creating full-stack websites encompassing both front-end and back-end technologies
  3. Using test driven development and understanding its benefits
  4. Understanding various modules like Express and Angular.js
  5. Building applications following design patterns such as Model View Controller
  6. Collaborating with development teams using GitHub

Career abilities

Career abilities are skills needed to have a successful development career.

  1. Understanding time management and effective teamwork to complete projects on time
  2. Learning to read and work in another code base
  3. Understanding how to succeed in the job market
  4. Creating & cultivating peer and professional networks
  5. Developing life-long learning strategies - identifying information sources, reading code, developing mentoring relationships
  6. Communicating your skills - portfolio development, presenting your work, making business connections, interviewing

Educational Expectations

Student Time Commitment

Class hours: Monday-Friday 9am - 5pm

You must attend all classes. Class begins promptly at 9am. Late arrivals and missing team members are very disruptive. If you are going to miss class or even be as little as 10 minutes late, please email Erin prior to 9am.

This course requires 40 hours each week for classroom time. In addition, successful students devote approximately 10-20 outside hours of their own time each week. In effect, think of this as a demanding full time job where 40 hours each week are required, but you still need to put in a little extra if you want to impress your boss and get a raise.

Goal setting and deadlines

A core skill of professional work is being able to estimate when you will complete a task. This requires being aware of your own skills and your own productivity. Unlike classes at other schools, this course may not always break down projects into small pieces with specific deadlines. Instead, it requires you to estimate completion times for all assignments, to measure both your effort and your productivity, and to learn time management techniques that work for you.

While setting your own assignment deadlines, you will asked to cultivate a bias towards action and to complete assignments as fast as possible while maintaining a high level of quality. Since most of our work is project-based teamwork, rapid completion of assignments will require learning how to motivate other members of your team as well as meeting your own commitments. This is all part of a professional skill set.

Use of External Resources

The web is full of places where you can learn to program. You will read blogs, follow tutorials, watch screencasts during the course. Everybody has different learning styles: some people learn well through these resources. However, realistically, the density of information is very low. Realize that some topics will be difficult, and while these resources can make some subjects more accessible, there is no substitution for studying them in depth and then applying your knowledge by programming. Some people have a natural inclination to seek out other textbooks or resources when the one they are using becomes difficult to understand. However, this is just a delaying tactic, a form of avoidance. If you are having difficulty learning using one method of learning, the best technique is to use an entirely different method of learning.

In our case, the best alternative when you think you don't understand how to code is to start coding. Stop reading and try it yourself. Turn a normally passive activity, watching TV, into an active learning experience by programming while you watch.

There is no better way to learn coding then to do it, to fail, and to puzzle out what is going on. It will be a waste of time for you to switch textbooks or switch screencasts if you find that the offered resources are not giving you immediate understanding.

Computer

You need to provide your own computer running Mac OS X 10.9 (or later) for this class (or rent one from the school).

Portland Code School highly recommends MacBooks Pro or MacBooks Air running OSX 10.9 or later. Most of the best coding tools are developed on that operating system first. The important aspect of OSX is the underlying UNIX-like operating system. We place an emphasis at being able to work on a Unix/Linux command line level, down in the guts of the operating system as well as the entire group learning the same set of tools.

Other Tools

You are encouraged to learn and use Atom (http://www.atom.io).

Git is a distributed version control system. It is complicated, arcane, and difficult to learn. Yet, it is one of the most commonly used and essential to any developer. We will start using git in the first week and emphasize its use throughout. You will be required to be able to use git from the command line, but we will also explore graphical user interfaces to make your use of git more transparent and powerful.

There will be more tools introduced as the class goes on, but these are good places to start.

How to succeed at this class

Our ultimate goal is to be able to give a shining recommendation about you to any and all possible employers. Over the years, Erin has worked with and hired many software engineers at both a junior and senior level. Our goal for you is that we would want to hire you ourselves.

Along the way, we will be asking ourselves the same questions about you that all hiring managers will be asking about you:

  1. Can you work in a team?
  2. Can you handle jobs on your own?
  3. Can you communicate in such a way that the people you deal with find you reliable?
  4. Can you find effective decisions, not just the "right" ones?
  5. Can you follow instructions and finish assignments ahead of schedule?
  6. Can you extrapolate from vague inputs and take the initiative to resolve any missing information?
  7. Do you have a bias towards action and taking risks?
  8. Can you manage your use of your own time?
  9. Can you deliver in a team context?
  10. Do you have effective learning strategies?
  11. Can you use testing techniques?
  12. Do you write valid code?
  13. Can you effectively code a full-stack web application?

Assessment Methods

Your progress will be assessed using a variety of methods:

  • Attendance - You need to show up and do the work
  • Completion of assignments - we will keep track of whether you do what we ask you to do
  • Code reviews - we will read and assess your code
  • Quizzes - we will ask you questions and evaluate your answers
  • Instructor reviews - your instructor will observe your work and take notes
  • Peer reviews - we'll talk to everybody in the class to see how folks are doing on teamwork and partnering
  • Participation in the community - we will ask you to hang out with your peers, meet people, and report back
  • Projects - we will help you design and build a portfolio web site where you can show off projects you work on

We will keep records of your progress. Your records are private to you and your instructor. However, at the end of the session, employers ask us for recommendations—the names of particularly talented and hard-working students. We use student scores and evaluations to identify students for these recommendations.

We will check-in 1-on-1 with you every two weeks. You will get early notice if you need to step up your game in any particular area. After that, if in our judgment we think you still aren't able to complete the demands of the course and become a viable developer, we will discuss alternatives with you that may include termination of your contract with Portland Code School. For your part, if you feel you are not getting your money's worth, you can terminate your contract at any time. Check your student contract for details.

Don't worry: every two weeks, you also get to evaluate us. Fair is fair, after all. We practice agile methods here, which means we do regular retrospectives and make improvements.

Student Effort

This class is project- and collaboration-driven. Students are expected to keep pace with the group and invest extra time if they feel they are falling behind. Students should communicate with their peers and collaborate with them to schedule extra review time outside of class. They are expected to come prepared to build on top of the skills that they learned in prior days' classes or with appropriate questions to solidify their understanding.

Group work will be emphasized throughout the course and it is important that students help each other keep to the same pace by extending help when concepts click more quickly and asking for help when required.

Mutual Respect

This class depends upon an atmosphere of mutual respect among students and staff. Together, we create a safe place to listen, learn, speak candidly, and fail safely. This is not a typical college class, it's a team effort producing a final product: jobs for everyone. You have the opportunity to make deep connections here that you will enjoy the rest of your career.

Students are expected to act at their highest capacity and with mutual respect for each other regardless of age, race, gender identity and expression, sexual orientation, or prior experience. Instructors are expected to lead in this regard by example.

In a related vein, this class requires work in close proximity to others as we code and debug in pairs and small groups. Good hygiene is mandatory and an additional sign of respect for your colleagues.

Grievances Procedure

Students who observe or experience any behavior on the part of instructors, staff, or students at Portland Code School that does not meet the school's Code of Conduct should take action. If you experience or perceive a problem, attempt to work it out on your own, if possible, but do not hesitate to bring it privately to the attention of your instructor. If this is unsatisfactory, bring it to the attention of the school Director (Cris Kelly) or Head Instructor (Al Zimmerman).

Additional Expectations

Each term, students may collaboratively establish other norms and expectations specific to that cohort. There will be discussions at the beginning of the term and at regular intervals to make sure these are understood by all.

Teaching method

This course relies on the following cycle to teach each new concept:

  1. Learn & discuss
  2. Play & fail
  3. Collaborate with others
  4. Challenge yourself
  5. Teach

Learn and discuss: New concepts are introduced by the instructor. Questions and discussion are encouraged at any point in the process. The idea is to create an active environment and move through to actually writing code as quickly as possible.

Play and fail: Children learn faster than adults because they play and they don't care about failing. We encourage a playful, safe learning environment. We use interactive coding tools and encourage students to try every new idea out for themselves. We encourage test-driven development, where the first step is failure (and the last step is triumph!).

Collaborate with others: Employers tell us that the most important skill is working on teams. Students work together in pairs and small groups to understand problems, design solutions, and construct code. They use test-driven design to verify that their solutions work. They perform code walk-throughs to compare their work with the rest of the class. The point is to make sure that everybody in the class arrives at a working solution, not to find out which students are capable of finding a solution on their own and which are not.

This class puts an emphasis on participating in community. We require students to attend local community events in the beginning, then we expect them to volunteer at and eventually lead community events. Like experienced developers, we use the community as our primary means for building a business network and finding employment.

Challenge yourself: Studies have shown that you learn the most when you have the most to lose - right after failure. For some people, it feels bad to feel stupid. For us, confusion is the first sign that we're learning and the first taste of fun times ahead.

This course teaches students how to become self-learners, how to challenge themselves to learn new skills through experimentation and trial and error. To that end, many exercises and quizzes are taken from around the web through a meticulous process to make sure the carefully curated work is relevant and high quality. The answers are all available to students if they look for them. None of these are tests in the traditional sense. If they wanted to, students could easily find, copy, and claim these answers for their own. However, this would all but guarantee that they do not acquire the skills necessary for employment. By participating in this course, students agree not to use Google, StackOverflow, or similar methods to simply find, copy, and claim answers to exercises and quizzes for their own work.

Teach: You don't fully understand something until you teach it to others. This class requires students to teach each other and gives them frequent practice in small, easy doses to help them become comfortable.

This also includes blogging and contributing to online fora like mailing lists and StackOverflow. Helping others in the community by relating what you know is an excellent way to earn a good reputation and build a personal brand. The reason this is such a wonderful time to be learning software development is because people are so willing to help each other. Students learn how to pay this forward.

Student capstone projects

After getting some basics under their collective belts, students will be requested to identify one or two potential capstone projects that they can accomplish in small teams. These projects should provide meaning or value on a topic the students find interesting. If they can't identify a project, Portland Code School and its network of partners and employers may have several to choose from.

Students will pitch these projects to the PCS staff and will collaborate with staff to scale the scope so that students have a good chance of success by the end of term (including some failures along the way!).

Students will present their completed projects to their fellow students, staff, and members of our employer network.

General schedule

Details will be provided as the class proceeds.

  1. Month 1 - JavaScript fundamentals, Git, test driven development, modules, functional programming, Node.js, introductory projects
  2. Month 2 - web architecture, advanced programming tools, career guidance: portfolios sites, self-directed-learning
  3. Month 3 - capstone projects & intense collaborative work, career guidance: mock interviews

Course Overview

We will cover material on three major themes: Code, Communication, and Career.

Code

  • JavaScript
    • Node.js
    • Express.js
    • Angular.js
    • Debugging
    • jQuery
    • JSON
    • Object Oriented Design
  • Web
    • AJAX
    • HTML
    • CSS & Sass
  • Databases
    • Postgresql
    • ORMs
    • NoSql databases
  • Version Control
    • Git
    • GitHub
  • Test Driven Development
  • Tools
    • Heroku
    • Gulp

Communication

  • Code Quality
  • Brainstorming
  • Teamwork
    • Solving problems as a team
    • Pair programming
    • Breaking down large projects
    • Effectively working on individual components
  • Working in others' code bases

Career

  • Joining the community
    • Developer culture
    • Local developer resources
    • Online communities
  • Collaborating within teams
  • Understanding different types of work and their roles
  • Time management
  • Learning while working
  • Interviewing

Instructional ADA statement

Students who have a documented disability and require a classroom adjustment or accommodation should expect to receive it. Please contact the instructor and/or the PCS Director.

Course content and calendar subject to change

The instructor reserves the right to modify course content and/or substitute assignments and learning activities in response to institutional, weather or class situations.

We adjust the class each session to the needs of the current students. We may slow the pace or add additional work, as needed. We also carefully incorporate new technologies as they become significant to your employability. As a result, we often are creating class materials as we go. You will always get advance notice of classwork.

You should all have access to a Google calendar called "PCS" and should have received an email to this effect. If you haven't, please contact Kristina, Cris, Dan, or Tom and we will make sure the class calendar is available to you. We will try to make sure this calendar is always up-to-date.