
This course includes our updated coding exercises so you can practice your skills as you learn.
See a demo
Explore computer science topics using the open-source BAHFEN language (version 3), learning variables, memory, and code order, with libraries for databases and servers.
Explain scalar types, including integers and booleans, and real numbers approximated as floats, and show the type function returning a value’s class.
Explore how Python classifies objects into scalar types like integers, floats, and strings, and non-scalar types such as lists, dictionaries, sets, tuples, and user-defined classes.
Explore how integers and floats interact with arithmetic operators in Python 3, including addition, subtraction, multiplication, real division, integer division, the power operator, and modulo operations with examples.
Discover how variables in Python programming assign names to values, evaluate expressions before assignment, and store numbers, booleans, and other types under a variable name.
Explore operator precedence in Python: power first, then multiplication and division, then addition and subtraction, with parentheses overriding order; learn how integers and floats interact, division rules, and remainder.
Explore how and, or, and not govern truth values and how to combine comparisons with and to test if a value lies between a low and high bound, inclusive.
Compare for loops and while loops as two ways to execute a block in a loop; while loops are more general, but for loops are easier to reason about.
Explore string slicing with square brackets, including start, end (end is not inclusive), and step, plus negative indices. Learn string immutability, character iteration, and ord/chr encoding with Unicode.
Understand Python variable scope: global versus function scope, how function calls create separate locals, and how the global keyword enables an outer scope to be modified.
Functions decompose complex programs into reusable, independent units; provide a callable signature with parameters, accept input arguments, and return a value, enabling abstraction and reuse throughout the program.
Explore how functions partition programs and recursion lets a function call itself, illustrated by Fibonacci with base cases 0 and 1 to ensure termination and prevent stack overflow.
Explore the introduction of data structures to represent composite values from simpler ones, reducing complexity and expanding what we can express with tools like dictionaries and sets.
Learn how lists serve as ordered collections with square-bracket syntax, including empty lists and literals. See how slicing, concatenation, and destructive operations mutate lists and enable iteration.
Explore dictionaries, mapping unique keys to values, with hashable, immutable types; perform creation, indexing, updating, and safe access using get and in, and note that order is not guaranteed.
Explore exponential and logarithmic functions, examining how base-exponentiation drives growth and how logarithms recover exponents, with examples like 2^6=64 and digits needed to represent numbers.
Ensure program correctness while balancing performance, as timing and efficiency prevent failures in safety-critical and consumer facing systems. Explore tradeoff between conceptual complexity and computational complexity in algorithm design.
Explore Big O notation with a quadratic complexity example that intersects two lists using nested loops, a unique function, and worst-case analysis.
Explore bubble sort, a multi-pass sorting algorithm that compares adjacent elements in a sliding window, swapping out-of-order pairs to bubble the largest element to its final position.
Selection sort selects the minimum from the unsorted list and places it at the target index, repeating until array is sorted, using nested loops and swaps to illustrate quadratic-time behavior.
Explore the linked list structure, where each node stores data and a next reference, enabling traversal, insertion at the head, and removal of nodes.
Explore how stacks enforce last-in, first-out behavior with push and pop, implemented in Python via list methods, and how postfix (reverse Polish) notation uses a stack to evaluate expressions.
Explore the queue data structure, its enqueue and dequeue operations, and its first-in, first-out behavior in simulations, distributed systems, and path-finding algorithms.
Illustrates a naive priority queue that stores items in an unsorted list, assigns priority by value, and removes the maximum by scanning, highlighting inefficiency and preparation for advanced data structures.
Explore how a hash table provides constant-time access to keys and values, maps keys to buckets via a hash function, and supports add, get, and remove operations in Python.
Explore how trees organize data with nodes that can have multiple children, enabling adding, removing, and searching elements, and traversing an ordered set; binary search trees have two children.
Explore binary search trees built from nodes with left and right subtrees, where values are kept sorted. Implement recursive search, insertion, and deletion, including handling roots, parents, and successors.
Explore graphs as abstract data types that model connections between nodes via edges, using adjacency matrices and adjacency lists to represent directed or undirected relationships.
Leverage depth-first search to build candidate paths, track the current shortest path, and prune branches that cannot improve the result, demonstrated on a graph with A, B, C, and D.
Use breadth-first search to find the shortest path by expanding paths from a queue of possible routes to adjacent nodes, avoiding cycles, and returning the first shortest path found.
Master a selection of Algorithms and how to analyze their performance using complexity analysis
Understand the different data structures like LinkedLists, Stacks, Queues, Trees, Graphs (etc.) and use them to solve problems efficiently
Learn these essential topics using Python. Python is easy and quite fun!
Study groups
Study groups will be organized in Beirut, Lebanon once a week during which you'll be able to go over the material that you didn't understand, ask questions and solve problems with our experts. Schedule will be sent to all students taking this course.
Who is this course for?
Anyone who wants to learn the fundamental topics of Computer Science. A good understanding of Data Structures and Algorithms will take you a long way as a programmer
As an enthusiast you will learn the ability to evaluate your code and optimize it for greatest efficiency. Data Structures will greatly enhance how you write your code and how to effectively store and manipulate data in memory
As a former Computer Science or Software Engineering student this course will be a strong refresher
Enroll in this FREE course and you will learn:
Python (Programming Language)
Algorithms (Sort, Search, Binary Search Tree Insert/Delete/Search, Depth First Search, Breadth First Search)
Complexity Analysis (Big-O)
Data Structures (Linked List, Stack, Queue, Priority Queue, Trees, Graphs)