Tutoring · 2024 – 2025
ClassBro
Tutoring and mentoring across computer science
Active · 2024 – 2025
Learning by building ↓Tutoring through ClassBro
Since 2024, I have tutored and mentored university students across computer science subjects through ClassBro. The work spans programming fundamentals and advanced topics: from introduction to programming and data structures, through machine learning and AI, to databases, systems and cloud computing. I work one-on-one with learners to bridge concepts and code, building confidence and independence in problem-solving.
Subjects by area
Programming and software engineering
- Introduction to Programming
- Introduction to Programming and Problem Solving
- Introduction to Python
- Principles of Programming
- Programming Fundamentals
- Programming III
- Computational Thinking and Problem Solving
- Introduction to Computer Science
- Computer Science Fundamentals I
- Foundations of C Programming
- C++ Programming
- Algorithms and Programming in C and R
- Programming and Computation II: Data Structures
- Imperative and Functional Programming
- Machine Organisation and Programming
- Introduction to Software Development
- Software Engineering Fundamentals
- Web Science
Data science and analytics
- Foundations of Data Science
- Elements of Data Processing
- Data Taming
- Computational Data Analysis
- Statistical Programming for Data Science
- Quantitative and Data Analysis in Python
- Data Analysis for Semi-structured Data
- Graphical Data Analysis
- Data Visualisation
- Visual Analytics
- Insights Through Data
- Data Analytics for Business
- Data Driven Web Technology
- Data Methods for Health Research
- Introduction to Data Science and Systems
AI and machine learning
- Introduction to Artificial Intelligence and Data Analytics
- Artificial Intelligence
- Fundamentals of AI, Data and Algorithms
- Fundamentals of Machine Learning
- Machine Learning
- Statistical Machine Learning
- Statistical Learning for Data Science
- Multivariate Statistics for Data Science
- Pattern Recognition
- Data Mining
- Generative Artificial Intelligence
- LLM project work
- Introduction to Robotics
- Game Design and Development
- Foundations of Computing 2
Computer systems, networks and cloud
- Introduction to Computer Systems
- Introduction to Computer Systems, Networks and Security
- Computer Systems
- Fundamentals of Computer Architecture
- Logic and Computer Architecture
- Systems Programming
- Internet Programming
- Internet Technologies
- High Performance Computing
- Cluster and Cloud Computing
- Social Computing Techniques
Databases and data engineering
- Introduction to Databases
- Understanding Databases
- Relational Databases
- Database Principles
- Advanced Database Systems
- Big Data Systems, Programming and Management
- Data Programming Workshop
- Data Cleansing
- Understanding Data and their Environment
Mathematics and statistics
- Engineering Mathematics I
- Quantitative Methods for Engineers
- Introduction to Optimisation
- Optimisation
- Intermediate Statistical Methods
- Statistical and Design Considerations in Policy Research
- Theory and Practice in Science
Business and information systems
- Business Decision Making
- Computer Applications for Business
- Transforming Business with Information Systems
- Information Technology Management
- Computing and IT Professionalism
Social science and humanities
- Text as Data
- Spatial Planning Analytics
- Research Methods and Project Preparation
- Journalism Practicum I
Research and dissertation support
- Dissertations
- Project proposals
Career and interview coaching
- Interview coaching
- AI engineer interview coaching
Run the lesson: minimax, then alpha-beta
Below is a concept lesson from my teaching work: learning by building, not by watching.
Pick a starting position or play a few moves, then compare the two searches. They always agree on how the game ends with best play. Alpha-beta gets there by visiting fewer positions, and the rows below show where it saves the most.
01
Minimax
Try every move until the game ends. A finished game scores +1 if X wins, −1 if O wins and 0 for a draw. X takes the highest score, O takes the lowest, and the scores pass back up the tree.
02
Alpha-beta
Carry two numbers down the tree. Alpha is the best score X can already count on, and beta is the best score O can already count on. Once alpha reaches beta, nothing left in that branch can change the answer, so the search stops there.
03
Order
Pruning cuts deepest when strong moves are tried first. Switch the search order and watch the alpha-beta count change while the outcome stays the same.
Synthetic positions · written from scratch · runs in your browser
O to move
Choose an empty square to play the next mark. Arrow keys move between squares, and Enter or Space plays.
Best move
Positions visited from here
- Minimax
- 55,505
- Alpha-beta
- 2,316
- Fewer
- 96%
- Branches cut
- 1,014
Best moveTop left. With best play from here, it is a draw.
Move by move
Each row is one move from this position, in search order, with what it leads to under best play. The top bar is minimax and the bottom bar is alpha-beta, on the same scale.
Top leftDraw
Minimax6,812Alpha-beta703New best so far
Top middleX wins
Minimax7,064Alpha-beta166Cannot beat top left. Alpha-beta stopped once it knew.
Top rightDraw
Minimax6,812Alpha-beta254Cannot beat top left. Alpha-beta stopped once it knew.
Middle leftX wins
Minimax7,064Alpha-beta106Cannot beat top left. Alpha-beta stopped once it knew.
Middle rightX wins
Minimax7,064Alpha-beta174Cannot beat top left. Alpha-beta stopped once it knew.
Bottom leftDraw
Minimax6,812Alpha-beta282Cannot beat top left. Alpha-beta stopped once it knew.
Bottom middleX wins
Minimax7,064Alpha-beta311Cannot beat top left. Alpha-beta stopped once it knew.
Bottom rightDraw
Minimax6,812Alpha-beta319Cannot beat top left. Alpha-beta stopped once it knew.
O to move. Best move: top left, and with best play it is a draw. Minimax visited 55,505 positions and alpha-beta visited 2,316, 96% fewer.
The code
function minimax(board, player, order, stats) { stats.nodes += 1; const score = finalScore(board); if (score !== null) return score; let best = player === "X" ? -Infinity : Infinity; for (const cell of order) { if (board[cell]) continue; board[cell] = player; const value = minimax(board, other(player), order, stats); board[cell] = null; best = player === "X" ? Math.max(best, value) : Math.min(best, value); } return best;}Marked lines are where alpha-beta differs from minimax.
Names, cohorts, universities and organisations are withheld. The lesson below is synthetic and written from scratch for this page.
Back