Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

OpenLearning

CS101: Programming and Computational Thinking

via OpenLearning

Overview

Learn fundamental programming concepts and computational thinking skills through a comprehensive 15-hour course that emphasizes both technical proficiency and professional development. Master essential programming principles including function scope, abstraction, recursion, branching, iteration, and data structures while working with arrays, lists, and abstract data types. Develop a scientific mindset for problem-solving by applying methodical approaches to algorithm design, debugging, and troubleshooting complex programming challenges. Explore how computers execute code by examining the translation from high-level programming to machine code, understanding memory allocation, data storage, and the differences between imperative and declarative programming paradigms. Cultivate professional programming practices through unit testing, test-driven development, code review processes, and adherence to style guides while learning to identify and critique code quality, design patterns, and "hacky" implementations. Build collaborative skills by working in teams to negotiate specifications, develop solutions that adhere to agreed interfaces, and provide constructive feedback through peer code reviews. Strengthen critical thinking abilities by formulating problem-solving strategies, testing assumptions, distinguishing relevant information from noise, and identifying trade-offs in software design decisions. Develop independent research skills to explore new programming concepts, curate reliable information sources, engage with programming communities, and contribute findings through experimentation and knowledge sharing. Address ethical considerations in software development while exploring creative expression through programming projects that serve both practical automation needs and artistic purposes, ultimately preparing you to write high-quality, functional software that demonstrates both technical competence and creative problem-solving abilities.

Syllabus

  • Identify and appreciate the qualities of high quality programming code: - Upholding good style and producing code of good clarity and design quality - Proposing improvements to other’s code design and clarity in code reviews - Adherence to, and refinement of a style guide - Contributing to the discussion of what good code style, and what undesirable “hacky” each look like
  • Value the writing of functional software for both its social utility and as an expression of creative skill: - Identifying opportunities to automate tasks, or solve personal or professional problems by writing programming code - Explore creative expression by building programs with a playful or artistic purpose - Critique personal and professional ethical considerations when writing software
  • Cultivate a scientific mindset for solving problems using code: - Follow a scientific approach to designing and choosing algorithms - Apply a methodical, optimistic, persistent, and resilient strategy to debugging, troubleshooting, and solving problems - Produce a strategy for exploring, questioning, and experimenting with a problem space scientifically and skeptically - Probe a problem space to prioritise exploration, and reverse-engineer “black boxes” using a scientific approach
  • Identify and appreciate good programming practices: - Appreciation for writing unit tests - Exploring the practice of writing unit tests before implementation - Identifying and critiquing the scope and contracts of functions - Cultivating an adversarial attitude toward code execution
  • Demonstrate the fundamental design principles for writing good software: - Function scope and abstraction - Recursion - Branching - Iteration - Working with Collections: Arrays and Lists - Abstract and Concrete Data Types - Mutability, direct and indirect addressing - Structural design of programs
  • Understand how computers work in order to predict how programs will be translated into machine code and executed: - Differentiate between automata, calculators, and the ability to perform universal computation - Compare how different types are stored in machines - Examine how a compiler operates and how a machine executes code - How addressing, memory allocation and data storage operate - Identify the difference between imperative and declarative programming
  • Solve novel problems by building correct and functional software programs: - Code solutions according to good software design principles - Debug and unit test effectively - Decipher error messages and interpret code syntax - Identify and rectify memory errors such as buffer overflows
  • Co-create solutions by coding in teams, coordinating on design, and reviewing each other’s code: - Negotiate, design and develop code specifications with a team - Code solutions which adhere to agreed upon interfaces and obey defined contracts - Review other’s code and identify style, functionality, and design enhancements - Design and write unit tests for other’s code
  • Develop critical thinking skills while programming: - Formulate and articulate ideas for solving problems with code - Recognise and test assumptions which have been made and their consequences - Distinguish between relevant and irrelevant information and feedback provided by automated and human sources - Identify trade-offs and secondary problems
  • Practice the skills required to independently research and explore new programming concepts - Independently perform research to seek out clarifications and related concepts - Curate and prioritise each source of information as it relates to solving a specific problem - Find and distinguish reliable communities of practice and sources of information - Build a habit for experimenting and contributing findings back to a community of practice; trying things out to see what happens and sharing

Taught by

David Collien

Reviews

Start your review of CS101: Programming and Computational Thinking

Never Stop Learning.

Get personalized course recommendations, track subjects and courses with reminders, and more.

Someone learning on their laptop while sitting on the floor.