Kibo School Logo

Kibo School Curriculum Materials Archive

Kibo was a higher education institution designed to provide young Africans with education to increase their employability and earnings. From 2021 until 2024, Kibo offered an accredited BSc in Computer Science to learners in Ghana, Kenya, and Nigeria, as well as free introductory computing classes to learners across Africa.

About

One of the things we are most proud of is creating a high-quality online learning experience. Too often, learning online is perceived as (and really often is) inferior to in-person experiences. We proved that online learning online could be as good – and often better – than in-person learning. With a diligent and thoughtful focus on learning design, we built and delivered thousands of hours of engaging asynchronous lessons and active live classes.

We’re making these materials available here with a CCO license, so that other educators can use and improve on them.

BS in Computer Science

The degree combines a foundation in computer science theory with practical skills in software development, communication and collaboration. Curriculum materials for first two years of the degree program are listed below.

Year 1


Communicating for Success - Writing View Content (Access Repository)

Communicating for Success - Writing supports students in developing communication skills that are essential for success in their personal and professional lives. The course will focus on reading and writing skills to help students improve their ability to receive and communicate ideas in written formats. Through videos, online readings, and live class activities, students will learn how to evaluate and refine their writing skills and apply them to writing projects that are important in professional contexts. An emphasis will be placed on weekly submissions and peer and instructor feedback to allow students to practice and improve their skills. To kick off the course, students will learn how to effectively read and evaluate texts as a precursor to developing their written communication skills. They will then practice crafting clear and effective communications by learning about the iterative writing process, which includes planning and audience awareness, writing structure and organization, drafting, revision, editing, and proofreading.

Optimizing Your Learning View Content (Access Repository)

Optimizing Your Learning aims to transform incoming first-year students into effective and empowered self-directed learners. During the course, students will develop competence in skills that are most critical for effective self-directed and self-regulated learning (i.e. self-management, self-monitoring, and self-modification), while also learning how to use learning strategies to maximize their overall learning efficiency and efficacy. They will also utilize the Emotional Intelligence framework to explore their identity, self-image, motivation, and self-regulation skills, to support their development as self-directed learners.

Programming 1 View Content (Access Repository)

The course helps stude develop an appreciation for programming as a problem solving tool. It teaches students how to think algorithmically and solve problems efficiently, and serves as the foundation for further computer science studies. Using a project-based approach, students will learn to manipulate variables, expressions, and statements in Python, and understand functions, loops, and iterations. Students will then dive deep into data structures such as strings, files, lists, dictionaries, and tuples to write complex programs. Over the course of the term, students will learn and apply basic data structures and algorithmic thinking. Throughout the course, students will be exposed to abstraction and will learn a systematic way of constructing solutions to problems. They will work on team projects to practice pair programming, code reviews, and other collaboration methods common to industry. The course culminates in a final group project in which students demonstrate and reflect on their learning.

Web Development Fundamentals View Content (Access Repository)

This course provides a foundation in building for the web. It helps students understand how the internet works, examines the role of the internet in their lives, and teaches them the basics of web development. The course prepares students for the advanced course in Web Application Development. The course will cover the building blocks of web technologies. Students will learn HTML, intermediate CSS, and the basic concepts and use of JavaScript. The course covers a brief history of the internet and network technologies. Students will relate what they learn about the conceptual foundations of the web to their own experience of the web, recreating common design and interaction patterns seen across countless websites. The course will focus on collaboration, communication, and sharing. Web technology is fundamentally social; students will work together and build for real audiences. The course culminates in a project in which students create a website using the tools they learned throughout the course.


Mathematical Thinking View Content (Access Repository)

This course helps students develop the ability to think logically and mathematically, with an emphasis on logical reasoning, and communicating mathematical arguments. The course includes a review of number systems, and their relevance to digital computers. Students review the algebraic operations and concepts fundamental to core ideas in Computer Science.. In the unit on logic and proofs, students learn to identify, evaluate, and make convincing mathematical arguments. They are introduced to formal logic, and methods for determining the validity of an argument. Students learn to decompose problems using recursion and induction, and explore how these methods are used in real-world computational problems. The course also includes an introduction to counting and probability. Topics covered include principles of counting, permutations, combinations, random variables, and probability theory.

Programming 2 View Content (Access Repository)

This course expands on Programming I, and deepens students' knowledge of Python with a focus on data access and management.The course reinforces previously introduced programming topics including data types, operators, variables, and control flow, this time in the context of retrieving and manipulating data. Students learn to use Regular Expressions, a powerful tool for matching patterns in text. They are introduced to modern web protocols, and learn how to retrieve data from web services, with a focus on JSON. Students learn to use Python's modules and Object Oriented programming features to organize programs. Students work on small projects throughout the course. The final project challenges students to retrieve and visualize data in Python.

Web Application Development View Content (Access Repository)

This course provides a comprehensive introduction to client and server-side development for the web. In this project-based course, students will work independently to build web applications, and progressively apply new knowledge to their projects. Students deepen their knowledge of HTML and learn advanced CSS, including how to use CSS variables and modern frameworks for motion and interaction. They learn about accessible web design, and how to create websites and apps that work well on mobile devices, and that support use of assistive technologies like screen readers.

Students will build the front-end of a web application using HTML, CSS and JavaScript then write a supporting back-end using either a JavaScript or Python framework. In doing so, they will demonstrate knowledge of the request-response structure, database management, and JSON-based APIs. Students will also apply technical communication skills by writing technical specs, drafting architecture diagrams, and documenting APIs.


Communicating for Success - Speaking View Content (Access Repository)

Communicating for Success - Speaking supports students in developing communication skills that are essential for success in their personal and professional lives. The course will focus on listening and speaking to help students improve their ability to receive and communicate ideas orally. Students will learn how to evaluate and refine their listening and speaking skills through videos, online readings, role plays, and live class activities. To kick off the course, students will learn how to utilize the listening process to improve their ability to receive, interpret, and respond to spoken messages. Next, students will learn to be more confident and effective in spontaneous speaking situations. Finally, they will learn how to confidently and skillfully deliver oral presentations while also exploring the impact of non-verbal communication on how messages are received. An emphasis will be placed on frequent submissions and peer and instructor feedback to allow students to practice and improve their skills.

Data Structures and Algorithms View Content (Access Repository)

This course teaches the fundamentals of data structures and introduces students to the implementation and analysis of algorithms.

Students start by examining the basic linear data structures: linked lists, arrays, stacks, and queues. They learn how to build these structures from scratch, represent algorithms using pseudocode, and translate algorithms into running programs. They apply these algorithms to real-life applications to understand complexity and performance tradeoffs. Students will also learn how to develop algorithms for sorting and searching, use iteration and recursion for repetition, and make tradeoffs between the approaches. They will learn to estimate the efficiency of algorithms, and practice writing and refining algorithms in Python.

This course emphasizes big-picture understanding and practical problem-solving in preparation for technical interviews and professional practice. Throughout the course, students will solve common practice problems, and participate in mock interview sessions. As part of their formative assessments, they will also deepen their understanding of these topics and practice technical communication by writing technical blog posts.

Engineering Your Career View Content (Access Repository)

This course will prepare students to apply and interview for internships and full-time positions in the software engineering industry. Students will refine their personal brand, and craft effective resumes, LinkedIn profiles and portfolios. They will learn to communicate effectively in behavioral interviews, including how to conduct company and role research, and how to succinctly answer questions and share their background. They will learn to prepare for technical interviews. Key skills include the ability to walk an interviewer through one’s thought process, craft code on a whiteboard or document, and identify opportunities for improvement in one’s work. Finally, students will learn to prepare to onboard to development job, and understand how to effectively navigate large codebases and organizations to make valuable contributions. The course emphasizes learning by doing, and the majority of assessments will be in the form of feedback received from practice interviews with industry professionals.

Team Software Project View Content (Access Repository)

In this course, students practice the skills necessary to work effectively on a professional software product team. By working in small teams to build web applications, they integrate the technical, communication, and collaboration skills built in previous courses.

Students will work together to build a multi-feature web application. Students will learn and practice modern technical collaboration tools and practices. Topics covered include using version control for shared repository management, writing technical design documents, and conducting code reviews. They also practice project management skills, including sprint planning, reviews, and retrospectives. During each milestone, team members rotate taking on various team roles. Throughout the course, students will also apply and refine the emotional intelligence, team development, and leadership frameworks previously learned. By the end of the course, students should understand and value the various roles within a software product development team, and be able to participate effectively on a product team. The course culminates in a showcase where students present their final project to the Kibo community and external stakeholders.


Industry Experience 1 View Content (Access Repository)

Industry Experience is a form of experiential learning that enables students to apply their academic knowledge in a professional context. Students work to build software that meets the needs of a professional organization by completing either (1) an approved internship, or (2) a product studio.

During the internship, students work on tasks that meet the needs of the organization, guided by a supervisor. Internships must entail significant, substantial computer science work. In the studio, external clients (e.g., businesses, non-profits) sponsor a software development project completed by students. A typical end result is a prototype of or a fully functional software system ready for use by the clients. These projects are completed by teams of 4-6 students, who meet with the client regularly to share progress and get feedback.

Students complete online modules under the supervision of a faculty advisor. Pre-work includes instruction in communication, goal-setting, and professional development. During the industry experience, students submit bi-weekly written reflections on their personal goals, challenges, and, for the studio, team feedback. At the end of the term, students obtain written feedback from their organization supervisor and submit a final report describing what they worked on and reflecting on what they learned.


Year 2


Computer Systems View Content (Access Repository)

This course explores computing beyond software. Students will go a level deeper to better understand the hardware, and see how computers are built and programmed. It is modeled on the popular “Computer Systems: A Programmer’s Perspective” textbook and associated labs. It aims to help students become better programmers by teaching the concepts underlying all computer systems. The course integrates many of the topics covered in other computer science courses, including algorithms, computer architecture, operating systems, and software engineering.

The course starts with a brief review of data representation in computers and an introduction to the C programming language. It then provides a brief introduction to boolean algebra and logic gates. Students build basic microprocessor components using logic gates and learn how a microprocessor interprets and executes machine-level code. Subsequently, students learn to write low-level machine language using x86 and develop their skills using a debugger to dive more deeply into how higher-level programming constructs (loops, decision statements, functions, etc.) are translated into assembly code. Finally, students learn about key operating system concepts, such as scheduling, virtual memory, caching, and more. By the end of the course, students will develop a strong understanding of the relationships between the architecture of computers and software that runs on them.

Front End Web Development View Content (Access Repository)

Front End Web Development builds on previous knowledge of web development, and extends students’ familiarity with modern HTML, CSS, JavaScript, and Web APIs. Students learn to develop and deploy client-side web applications with greater scope and complexity.

Students deepen their knowledge of the JavaScript language, covering topics like scope and higher order functions. Students practice using modern build tools for package management, bundling, optimization, formatting, linting, and testing. Throughout the course, students will solve practice exercises and build projects, culminating in a final project using a JavaScript framework to build a complex web application.

Students will apply technical communication skills by writing technical specs, drafting architecture diagrams, and documenting APIs. They will extend their communication practice through technical blogging on topics like tool comparisons, architecture choices, benchmarks, and frontend web design. Students will grow in independence by reading documentation to learn about novel language and browser features in order to use them in their projects.

Product Management and Design View Content (Access Repository)

This course teaches students to build products users want and love. It gives students a foundation in the tools and practices of modern product management and interaction design. Students will work in pairs to apply product development skills to real user challenges.

The course begins with a focus on user research. Students learn and apply the design thinking framework to product development. They learn to define user needs through user interviews and market analysis. They learn to translate user needs into product specifications, and define metrics to test product success. They learn to create and test design prototypes (wireframes, user journeys). The second part of the course focuses on UX/UI design. Students learn key concepts in UI/UX design including information hierarchy, and typography and color. Students will create high-fidelity UI mockups using industry-standard tools. They’ll then conduct usability tests to gauge the effectiveness of their designs.

As students work in pairs, they will practice the complementary and collaborative roles of PMs and UX designers in early product development. They’ll also practice giving design critiques to other teams, and responding to feedback on their designs. By the end of the courses, each pair will have a user-tested, refined, and development-ready design for a web or mobile application.

Introduction to Data Science View Content (Access Repository)

Data science is applicable to a myriad of professions, and analyzing large amounts of data is a common application of computer science. This course empowers students to analyze data, and produce data-driven insights. It covers the full suite of concepts needed to solve data problems, including preparation (collection and integration), presentation (information visualization), analysis (machine learning), and products (applications).

This course is a hybrid of a computing course focused on Python programming and algorithms, and a statistics course focusing on estimation and inference. Data analysis requires acquiring and cleaning data from various sources including the web, APIs, and databases. Students learn techniques for summarizing and exploring data with tools like spreadsheets, SQL, R, and Python. They also learn to create data visualizations, and practice communication and storytelling with data. Finally, students are introduced to machine learning techniques of prediction and classification, which will prepare them for advanced study of data science.

Throughout the course, students will work with real datasets and attempt to answer questions relevant to their lives and interests. They will also probe the ethical questions surrounding privacy, data sharing, and algorithmic decision making. The course culminates in a project where students build and share a data application to answer a real-world question.


Artificial Intelligence View Content (Access Repository)

Artificial Intelligence (AI) aims to teach students the techniques for building computer systems that exhibit intelligent behavior. AI is one of the most consequential applications of computer science, and is helping to solve complex real-world problems, from self-driving cars to facial recognition. This course will teach students the theory and techniques of AI, so that they understand how AI methods work under a variety of conditions.

The course begins with an exploration of the historical development of AI, and helps students understand the key problems that are studied and the key ideas that have emerged from research. Then, students learn a set of methods that cover: problem solving, search algorithms, knowledge representation and reasoning, natural language understanding, and computer vision. Throughout the course, as they apply technical methods, students will also examine pressing ethical concerns that are resulting from AI, including privacy and surveillance, transparency, bias, and more.

Course assignments will consist of short programming exercises and discussion-oriented readings. The course culminates in a final group project and accompanying paper that allows students to apply concepts to a problem of personal interest.

Discrete Mathematics View Content (Access Repository)

This course builds on Mathematical Thinking. Discrete mathematics has applications in computer science, as well as the natural and social sciences. The course focuses on core mathematical areas of logic, combinatorics and probability, set theory, graph theory, and elementary number theory. Each topic is covered with a focus on applications and real-world problem-solving. The unit on logic builds on previous knowledge, and has applications in real-world rhetoric as well as in mathematical proofs and in computing. Probability and combinatorics are foundational for statistical thinking and problem solving. In the course’s coverage of graph theory, students will explore numerous applications, such as data mining, clustering, and networking. The course also introduces number theory, beginning with fundamental results such as Euclid’s Algorithm and applications in cryptography.

Engineering for Development View Content (Access Repository)

In Engineering for Development, students learn how to analyze the root causes of development challenges so that they can build effective technology solutions. The course aims to introduce students to selected global development challenges using the United Nations Sustainable Development Goals (SDGs) as the framework for choosing the areas of focus. Each term, the course will focus on 1 to 2 subject areas (e.g. Quality Education, Affordable and Clean Energy, Climate Action), which will serve as test cases for students to develop the skills required to analyze and understand complex development issues effectively. Students examine the system-level dynamics at the root of these challenges and analyze and critique technology-related solutions that have been developed to address these challenges.


Challenge Studio 1 View Content (Access Repository)

In Challenge Studio 1, students will work in groups to design, develop, and test a solution to a development challenge of their choice. The focus of this course is to provide students with the tools and skills to create meaningful technology solutions (e.g. services, products) to a sustainable development problem. The course will utilize virtual studio time, where groups work together on the key incremental tasks that are required to allow them to create their final project output successfully. Studio time will be supported by lectures, seminars, and learning resources on useful skills such as human-centered design, end-user identification, requirements gathering, value creation, impact measurement, and creative thinking and innovation.

Data Structures and Algorithms 2 View Content (Access Repository)

This course builds on Data Structures & Algorithms 1. Students will explore non-linear data structures, and implement and analyze advanced algorithms.

The course begins with a brief review of basic data structures and algorithms. Students deepen their understanding of searching and sorting, with a focus on describing performance. They learn about advanced data structures including priority queues, hash tables and binary search trees. Students build on their knowledge of graph theory to implement graph algorithms, and explore topics like finding the shortest paths in graphs, and applications of algorithms in maps, social networks, and a host of real-life applications. Other key topics include: divide and conquer, recursion, greedy algorithms, dynamic programming, computability theory, and case studies in algorithm design.

The course emphasizes big-picture understanding and practical problem-solving in preparation for technical interviews and professional practice. Students will solve common algorithmic problems, and participate in mock interview sessions. Students will write technical blog posts to deepen their understanding of these topics and to practice technical communication.


Industry Experience 2 View Content (Access Repository)

Industry Experience is a form of experiential learning that will let you apply your academic knowledge in a professional context. You will work to build software that meets the needs of a professional organization by completing either: an approved internship, a product studio, or open-source project. During your industry experience, you will work on tasks that meet the needs of your sponsoring organization. Whether you undertake an internship, product studio or open-source collaboration, your industry experience must include significant, substantial computer science.


Try Kibo

Kibo taught 2500+ students in 32 African countries as part of Try Kibo, a program that offered free introductory courses in Python, web development, and data science.

Future Proof with Python View Content (Access Repository)

This course provides a foundation in Python programming, one of the most versatile and useful programming languages. You will learn core programming concepts such as variables, functions, conditionals and loops.

Web Foundations View Content (Access Repository)

This course provides a foundation in building for the web. It will help you understand how the internet works, help you examine the role of the internet in your life, and teach you the basics of web development. It will cover the building blocks of web technologies. You will learn HTML, CSS, and the basics of JavaScript. The course will focus on collaboration, communication, and sharing. Web technology is fundamentally social; you will work together and build for real audiences. The course culminates in a project where you'll create a website of your own design using the tools you learn throughout the course.

Introduction to Data Science View Content (Access Repository)

Data science is applicable to a myriad of professions, and analyzing large amounts of data is a common application of computer science. This course empowers students to analyze data, and produce data-driven insights. It covers the foundational suite of concepts needed to solve data problems, including preparation (collection and processing), presentation (information visualization), and analysis (machine learning).


Automation Assistants Trainee Program

Supported by GitLab Foundation, Kibo taught 100+ students to be Automation Assistants. Automation Assistants are trained to solve business problems with no-code and low-code tools like Airtable, Zapier, Make, and the software you already use.

Automation Assistants Trainee Program View Content (Access Repository)

The Automation Assistants training program is designed to equip you with the knowledge and expertise needed to master no-code/low-code tools. You will build the skills needed to excel as a no-code/low-code expert, a role that is in high demand across various industries.