Curriculum Overview

Our Goal

The goal of the WeThinkCode_ Curriculum is to facilitate learning that will transform students into competent, entry-level software developers who can:

efficiency.png

Quickly add value to the software development teams and organizations they join.

self study icon.png

Be equipped with the technical and behavioural skills to self direct their learning beyond their training at WeThinkCode_.

This model is built from a holistic view of the capabilities and skills a software developer requires in order to be effective in their daily work. It is designed and regularly refreshed by leading practitioners with decades of collective experience in the field.

Pedagogy

 

We train using a peer-to-peer methodology which means there are no lecturers. Learning material is delivered digitally and students support one another in their learning.

Fundamental software development practices are embedded in the way students must interact with the Learning Management System (LMS).

building-blocks.png

In the coursework, students are introduced to concepts in bite-sized chunks and subsequently required to demonstrate their understanding by submitting exercise solutions that are functional and working at every step.

We leverage some additional constructs to supplement the coursework such as the Technical Mentor Program and Code Clinics.

The style of instruction is designed to support self-directed and peer-to-peer learning.

​Learning Management System

 

The LMS client is a command-line application used to deliver curriculum content to students and track their submissions and progress. All exercises come with a set of automated tests that must execute successfully for the student to submit. Additionally, submissions undergo peer reviews in which students are paired up by the system to review each other’s work and give feedback. Students use real industry tools used by professional software practitioners.

In Person Support

 

While there are no lecturers on campus, to augment the peer-to-peer learning environment, we also provide in-person support in the form of Technical Mentors and Code Clinics.

Code Clinics:

 

To encourage cross-pollination and peer-to-peer teaching and learning, Code Clinics are a construct where stronger students may volunteer their time to help students who are otherwise struggling.

mentorship.png

Technical Mentorship:

 

Technical Mentors are a nominated set of second year students with good performance to support groups of first year students.  Technical mentors act as the interface between WTC_ staff and first year students and in addition to being a source of technical support, they also serve as a channel to drive non-technical outcomes by facilitating activities such as daily/weekly updates, task management and reviewing presentations designed to build confidence in speaking in front of groups.

Coursework Format

Coursework is delivered in both individual and group project formats with students using real industry tools to design and deliver on the project requirements. The course is focused on the holistic learning of  programming, engineering, communication and teamwork .

First Year

101 Programming Fundamentals 

This module introduces programming constructs that are the foundation of any kind of programming. The language of instruction used is Python.

programming.png
Programming
  • Making Decisions: How to make a program do different things based on the data it receives.

  • Repeating Instructions: How to get a program to do the same thing several times over.

  • Structuring Data: How to work with more complex kinds of data structures.

  • Combining Instructions: How to combine several instructions and reuse the combined instructions as a single instruction.

  • Processing Collections of Data: How to work with lists of the same kind of data in a variety of ways.

  • Modules and Packages: How to use libraries from other developers (including open source libraries) and design a large program from smaller modules.

Untitled-1.png
Engineering

How to structure code files and package them to be run. How to write a program and test that the core program is functioning as intended.

Communication

Journaling:

Reflecting on various learnings and their application and summarizing them, in written format, in a journal. This hones the ability to describe technical concepts and summarize them in a way that can be understood by others.

The more reflective a developer is, the better they are at communicating.

 

Presentations:

Delivering short-form presentations known as Pecha Kucha to peers. This develops public speaking skills and the ability to prepare slides and use them to effectively deliver information to groups of people.

peer-to-peer.png
Team Work

Working in a small teams to build a program that, ordinarily, is too much for one person to complete on their own in the prescribed time. Students must collaborate in teams of 4 to build a program that works end-to-end. 

 

The program is built in 3 iterations of 2 weeks each. Students follow agile practices for building software, including pair programming, daily standups, showcases and retrospectives at the end of each iteration then closing off

with a final demo.

102 Object Oriented Programming

This module is an introduction to software design through the lens of Object Oriented Programming (OOP).

 

The language of instruction is Java and it's assumed that students are comfortable with fundamental programming constructs introduced in the 101 Programming Fundamentals Module. There is a heavy focus on refactoring as a coding practice.

programming.png
Programming
  • Encapsulation: How to hide the inner details of the structure and design of a program.

  • Inheritance, Composition & Polymorphism: How to design code that can be elegantly re-used in different ways. Each of these principles is introduced in their own sections.

  • Java Fundamentals: How to use the basic programming constructs in Java to mold the design of a program.

Untitled-1.png
Engineering

Build using Apache Maven, the most popular build tool for Java programs, to manage program dependencies as well as compile and test programs. Test using JUnit to reinforce existing testing techniques, including mocking.

Communication

Team Leads & Daily practices:

Team leads will be nominated to be the interface to each team. Practices such as daily/weekly updates are expected to continue and be necessary for completion of work.

peer-to-peer.png
Team Work

Working in a small team to build a program that is much bigger and more complex than before. Similar to the first semester, the program will be of a size and complexity that, ordinarily, is too much for one person to complete on their own in the prescribed time. Students must collaborate in teams of 4 to build a program that works end-to-end. The program is built in 3 iterations of 2 weeks each. Students follow agile practices for building software, including pair programming, daily standups, showcases and retrospectives at the end of each iteration with a final demo taking place at the close of the semester.

Second Year

The second year curriculum is currently under construction. 
Watch This Space!