The course teaches students comprehensive and specialized subjects in computer science; it develops skills in critical thinking and strategic planning for changing and fast-paced environments, including technological and operational analysis; and it develops competences in leadership, including autonomous decision-making, and communication with team members, stakeholders, and other members of a business.
The course helps students 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, tuples, etc. to write complex programs. Over the course of the term, students will learn and apply basic data structures and algorithmic thinking. Finally, the course will explore design and implementation of web apps in Python using the Flask framework.
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 and presentation during which students demonstrate and reflect on their learning.
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 an on-site supervisor. Internships must entail significant, substantial computer science. 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 weekly 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. They also submit a final report which describes the problem statement, approaches/methods used, deliverables, and skills gained. Industry Experience culminates in a final presentation which is shared as a public blog post.
Optimizing Your Learning aims to transform incoming first year students into effective and empowered self-directed learners. In the modern world, long-term academic, professional, and personal success is driven by the ability of individuals to take control of their learning. Therefore, this course helps students to develop the knowledge, skills, and mindsets necessary to take ownership of their learning and build their self-efficacy. 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. The course culminates in the creation of a personal learning charter that will help guide students in their learning throughout their undergraduate studies, which can also be applied to their learning activities in other realms of their lives.
This course helps students develop the ability to think logically and mathematically. It prepares students for more advanced courses in algorithms and discrete mathematics. An emphasis is placed on the ability to reason logically, and effectively communicate mathematical arguments. The course begins with a brief review of number systems, and their relevance to digital computers. Students review the algebraic operations necessary to perform programming functions. 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 (truth tables, proofs, Venn Diagrams). Students learn to decompose problems using recursion and induction, and how these methods are used in real-world computational problems. The final unit is an introduction to counting and probability. Topics covered include principles of counting, permutations, combinations, random variables, and probability theory. Throughout the course, students apply their knowledge by solving logic puzzles and creating programs in Python.
Communicating for Success supports students in developing communication skills that are essential for success in their personal and professional lives. The course will focus on close reading, written communication, verbal communication, and non-verbal communication skills. An emphasis will be placed on weekly submissions, and peer and instructor feedback, to allow students to practice and improve their skills. Students will learn how to effectively read and analyze texts as a precursor to developing their own written communication skills. They will then practice crafting clear communications by learning about topics such as writing structure and organization, grammar, audience awareness, and the iterative writing process. Next, students move on to verbal communication, and will learn how to confidently and skillfully deliver effective oral presentations. Finally, students will learn about the impact of non-verbal communication on how their messages are received. The course will culminate in a project that will require students to develop and implement a strategy for communicating a technical topic to a non-technical audience.
This course builds on Web Foundations, and provides a comprehensive introduction to client and server-side development for the web. In this project-based course, students will work independently to build a web application, and progressively apply new knowledge to their application. 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.
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 modelled on the popular, project based “Nand to Tetris” textbook, which walks learners through building a computer from scratch. 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.
Students will learn how to build a computer system using progressive steps. The course starts with a brief review of Boolean algebra, and an introduction to logic gates. Students design a set of elementary logic gates using a Hardware Description Language. They then build chips to perform arithmetic and logical operations and build the computer’s main memory unit. Subsequently, students learn to write low-level machine language, and build a CPU to create a fully functional computer system. Finally, students implement a virtual machine, compiler, and basic operating system. Projects are spread out evenly throughout the course, and are completed in pairs.
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.
The module's primary learning outcomes are for students to classify different types of operating systems, including Windows, macOS, and Linux, and to describe the functions of an operating system, such as process and memory management.Through the course, students will learn about the architecture and components of operating systems, including user interfaces, device drivers, and file systems. They will also gain an understanding of system calls and APIs, and how to use them to interact with an operating system. By the end of the module, students will have gained a comprehensive understanding of operating systems, their functions, and their importance in computer science and AI. They will be able to identify the different types of operating systems and describe their functions and features. This knowledge will prepare them for more advanced courses in the curriculum that involve developing AI and ML applications on different operating systems.
The module's primary learning outcomes are for students to identify different types of database management systems, describe their components, and explain the importance of database normalization. Through the course, students will learn about database design, normalization, and optimization. They will also learn how to use SQL to manipulate and retrieve data from databases. The module emphasizes hands-on learning through database design and development projects. By the end of the module, students will have gained a comprehensive understanding of database management systems and their importance in AI and ML applications. They will be able to identify different types of database management systems and their components, and apply the concepts of database normalization to design and develop efficient databases. This knowledge will prepare them for more advanced courses in the curriculum and for database management roles in the industry.
This module introduces the fundamentals of Artificial Intelligence (AI) and Machine Learning (ML). Students will learn the definition of AI and ML, their evolution, and their applications in various fields. They will also explore the different types of machine learning algorithms, including supervised, unsupervised, and reinforcement learning. Through hands-on exercises and case studies, students will gain practical knowledge and experience in applying machine learning algorithms to real-world problems.Moreover, this module covers the principles of selecting the appropriate machine learning algorithm for a given problem. Students will learn about the factors that influence algorithm selection, such as data type, problem complexity, and performance requirements. They will also explore the principles of model training, validation, and testing, and gain practical knowledge and experience in evaluating machine learning models. By the end of this module, students will have a thorough understanding of AI and ML, be able to identify different types of machine learning algorithms, and select the appropriate algorithm for a given problem.
Through the course, students will recognize emerging technologies in AI, describe their potential impact on society and industry, and discuss their ethical and social implications. By the end of the module, students will have gained a comprehensive understanding of emerging technologies in AI and their impact, preparing them to make informed decisions about the adoption and development of AI technologies in their future roles.