Lecture

Experimenting with CMOS - Richard Buckland UNSW

This module introduces students to the exciting world of digital design using CMOS chips. Students will learn how to create simple electronic circuits at home with the help of breadboards. The content is designed for first-year computing students who are eager to explore practical applications of their studies.

Topics covered include:

  • Basic principles of CMOS technology
  • Hands-on circuit building
  • Challenges and questions in digital design

Course Lectures
  • In this module, Richard Buckland provides an overview of the Higher Computing course at UNSW, emphasizing the key components that make up the curriculum. The course is structured into three main strands: programming, systems, and general computer-science literacy. Students will explore small-scale programming in the first half and learn team-based software development in the second half. Additionally, the systems strand will delve into computer workings, focusing on microprocessors, memory, and machine code, ensuring students have a solid foundation in both theory and practical applications.

  • This module introduces first-year students to the fundamentals of computing. Richard Buckland elaborates on what the course entails, demonstrating a simple C program to illustrate basic concepts. Students will experiment with various aspects of computing and learn about essential components such as transistors, chips, and microprocessors. The session includes a practical exercise using their custom-built 4917 microprocessor to help students grasp the functioning of computers.

  • In this session, Richard Buckland revisits the concept of using transistors as switches, an essential aspect of understanding machine code. The module focuses on programming the basic 4-bit microprocessor, 4917, utilizing its machine code. Students will learn how to interact with their machine code programs through an emulator available on the course webpage, providing hands-on experience in low-level programming.

  • In this module, students gain insight into the structure and elements of a simple C program. Richard Buckland covers basic components such as strings, integers, and the layout of a C program. Key topics include using gcc for compiling, understanding comments, and utilizing functions like printf and scanf. The importance of clarity in coding is emphasized, alongside discussions about transistors and the compiling process, linking theory to practical application.

  • This module focuses on the significance of style and clarity in C programming. Richard Buckland discusses the differences between hackers and elite programmers, emphasizing the importance of writing clear, maintainable code. Students will learn about side effects, compiler options, and how to troubleshoot errors such as segmentation faults. This session aims to equip students with the skills to follow programming specifications and understand integer division and remainder operations.

  • Richard Buckland introduces students to problem-solving techniques essential for programming. This module covers human nature and the importance of testing in the software development process. Students will learn about top-down problem-solving strategies, starting from high-level understanding down to implementation. The discussion extends to topics such as magic numbers, mastering skills, and the challenges of persistence, using relatable anecdotes to convey the learning process.

  • This module delves into the concept of side effects in programming, both in machine code and C functions. Richard Buckland explains the adversarial models of computation, highlighting the challenges programmers face. Students will learn about returning values from functions, the significance of ASCII, and how to manage discussions and interactions in lectures. The module incorporates practical examples and anecdotes to illustrate these concepts effectively.

  • In this engaging module, students participate in writing a simple C program named "countdown," which calculates the remaining seconds until an assignment is due. Richard Buckland leads the session, demonstrating the coding process while making and correcting mistakes. The focus is on top-down design, function usage, and integer arithmetic. The importance of program style, clarity, and simplicity is discussed, along with strategies for overcoming challenges in programming.

  • This module provides an introduction to COMP1917, specifically designed for first-year Computer Science and Engineering students at UNSW. Richard Buckland outlines the objectives of the course and sets the stage for the learning journey ahead. Students will gain insights into the course structure, expectations, and the foundational skills necessary for success in the field of computing.

  • Following a break, this module serves as the first part of a revision session aimed at consolidating knowledge from the initial weeks of the course. Richard Buckland revisits key concepts and material covered in the first two lectures, ensuring students new to programming have a solid understanding before moving forward. The emphasis is on reinforcing learning and providing clarity on any confusing topics encountered during the course.

  • This module continues the revision session for COMP1917, focusing on consolidating the material covered in the first weeks of the course. Richard Buckland addresses students' feedback, summarizing critical topics and clarifying any areas of confusion. Despite some technical difficulties during recording, the session aims to ensure all students, particularly those new to programming, are well-prepared for the material ahead.

  • In this module, Richard Buckland explains the concept of recursion through a practical example of summing numbers from 0 to n. The session covers various methods, including using Gauss's formula and a simple recursive program. Students learn the importance of recursion in computer science and explore related topics such as style, craftsmanship, and the different types of numerical data in C programming. The module emphasizes that while C is the tool used, the focus remains on computing concepts.

  • This module focuses on the concept of functions in programming. Richard Buckland discusses what functions offer, such as abstraction, code reuse, and scope. Students will gain insight into how functions operate in C, exploring the underlying machine code view of function calls. The session introduces abstraction, explaining its advantages and application in programming practices, thereby enhancing students' understanding of function implementation.

  • In this critical module, Richard Buckland discusses strategies for addressing programming challenges and errors. The session begins with motivational insights and covers various courses of action when encountering issues in code. Students learn about assert statements for documenting assumptions, the concept of contracts, and the importance of recognizing responsibility. Topics such as typecasting and implicit type conversions are also explored, emphasizing C's flexibility with types and the implications for programming.

  • This module provides an in-depth look at how C function calls are implemented at the machine code level. Richard Buckland explains the concept of frames, detailing the roles and responsibilities of functions involved in the call process. Students will learn about saving registers, local variables, and the mechanics behind returning values. The session reinforces the importance of following safe conventions in coding and revisits key concepts of abstraction and scope to solidify understanding.

  • In this continuation of the previous module, Richard Buckland further explores the mechanics of function calls in C programming. Students will delve into how the role of the callee and the management of frames are executed at the machine code level. The session emphasizes the importance of maintaining safe coding practices and revisits the address operator. Richard concludes with a discussion on Alan Turing, highlighting his significant contributions to the field of computing, linking theoretical concepts to historical context.

  • This extension lecture by Richard Buckland is dedicated to Alan Turing, celebrating his pivotal contributions to computing. The discussion covers Turing's decryption work during WWII, the concept of the Turing Machine, and the philosophical implications of the Turing Test. Students will gain insights into Turing's impact on the field and the significance of his ideas regarding computation, intelligence, and humanity, making connections to contemporary issues in computer science.

  • In this module, Richard Buckland elaborates on the Turing Test, discussing its implications for design, computer science, and philosophical inquiries about personhood. The session includes a review of pointers in C programming, common mistakes with loops, and a discussion on intentional vs. extensional perspectives. This lecture encourages students to think critically about the nature of intelligence and the challenges of defining what it means to be human in the context of computing.

  • This module serves as an introductory lecture for COMP1917, designed specifically for first-year students at UNSW. Richard Buckland outlines the course's objectives and expectations, providing essential information for newcomers to programming. The session aims to create a solid foundation for students, ensuring they are well-prepared to engage with the course material and develop their computing skills effectively.

  • In this revision session, Richard Buckland addresses student feedback regarding common difficulties encountered with the topic of frames in machine code. The module focuses on clarifying what frames are, their usage, and the roles of both calling and called functions. Students will learn about the return address and frame pointer, enhancing their understanding of how function calls operate at a low level, which is crucial for effective programming in C.

  • This module introduces arrays in C, focusing on their application through practical examples like calculating the average of a set of numbers. Students will learn to consult the manual for functions like scanf, and develop debugging skills using printf. The module also addresses common pitfalls such as invalid input to scanf and the ease of writing infinite loops.

  • This continuation of the arrays module delves deeper into their usage in C programming. Students will explore examples such as calculating letter frequencies in a text and implementing substitution ciphers. The session also covers array initialisers, strings, and the ctype.h library, enhancing the understanding of arrays and their multifaceted applications.

  • In this module, the concept of pass by reference is explored with a focus on arrays and pointers in C. Through sample code, students will understand how arrays are passed into functions by reference, differing from other data types. This foundational knowledge is crucial for efficient programming and memory management.

  • Malcolm Ryan from UNSW presents an engaging lecture on game design, exploring the fundamental question: "What is fun?" This session offers insights into the research behind game design, providing students with a unique perspective on creating enjoyable and engaging gaming experiences.

  • Richard Buckland addresses the intricacies of pointers and indirect addressing in C programming. The module reviews pass by reference and pass by value, and delves into dynamic data structures and ADTs. Students will also explore the exponential growth concept through a thought-provoking magic trick and begin designing a Sudoku solver.

  • This module poses a challenge: can a Sudoku solver be developed in a single lecture? Students will learn about Sudoku puzzles, problem-solving approaches, and the differences between novice and master strategies. Additional topics include algorithms, data structures, and the art of estimation, accompanied by engaging anecdotes and analogies.

  • This lecture offers a review of Sudoku code, emphasizing backtrack vs brute force methods. Students will delve into stack frames, memory stacks, and buffer overflows. The module also touches on course-related resources like ENGG1000, a wiki textbook concept, and explores the mechanics of stack overflow.

  • Richard Buckland introduces extreme programming concepts, focusing on unit testing and refactoring in C. Students will learn about multi-file programs, linking, and the use of assert statements. The lecture also covers static helper functions, object files, and the importance of testing as you go.

  • This module explores the distinction between programming in the large and small, with an unexpected twist labeled as a "miracle." Students will learn about different programming scales and the importance of interfaces and standards in large-scale software development, enhancing their understanding of software engineering.

  • This module delves into the use of standards and interfaces in large-scale programming. Students will learn how to write new interface functions and C unit tests using assert. The lecture also covers the distinction between strings and arrays of chars, and the significance of static functions in programming.

  • Marking the midpoint of the course, this module addresses stress management and programming errors involving arrays. Students will learn how to write reflective diary entries and engage with intriguing puzzles. The session also introduces the concepts of structs in C, with a humorous touch involving vampires and zombies.

  • This extension lecture introduces the concept of randomness and its usefulness in computing. Students will explore deterministic processes, random number generation challenges, and Von Neumann's algorithm. The session also references Knuth's Art of Computer Programming and engages with thought-provoking magic tricks.

  • This module discusses the implications of concrete types in programming, with a focus on time management lessons from task2 diaries. Richard Buckland shares personal insights and suggestions for improvement. The session sets the stage for learning about Abstract Data Types (ADTs) and their benefits in programming.

  • This module concludes the exploration of programming concepts with a focus on Abstract Data Types (ADTs) in C. Students will learn how to implement ADTs, understand their advantages, and explore undocumented features. The session introduces a project involving a card game, enhancing practical programming skills.

  • This module discusses the major project for the year, the "Blackadder and Baldrick" card game. Students will engage in a grand final playoff to earn the title of "coolest programmer in first year 2008." The session offers an exciting opportunity to apply the programming skills acquired throughout the course.

  • This module revisits task2, focusing on converting the SudokuGrid into an Abstract Data Type (ADT). Students will learn how to access struct components using dot and arrow notation, reinforcing their understanding of ADTs and data manipulation in C programming.

  • Richard Buckland presents an extension lecture on steganography, exploring hidden messages in media, cryptography, and digital watermarking. Students will learn about security through obscurity and consider the possibility of living in a simulation. This engaging session raises intriguing questions and challenges assumptions.

  • This module offers programming insights through engaging stories and problem-solving discussions. Students will explore the Josephus problem, algorithms vs data structures, and the WAV format standard. The session includes a playful anecdote about learning to ride a unicycle and a nod to the Australian national anthem.

  • This module explores file I/O in C programming, using the Australian National Anthem as a case study. Students will learn about abstract types, infinite stacks, and memory management challenges. The session revisits linked lists and the snake puzzle, posing philosophical questions about reality and simulation.

  • This module introduces linked lists in C programming, comparing them with arrays. Students will learn how to set up and manipulate linked lists, including doubly linked lists. The session covers indirect addressing and offers engaging anecdotes from popular culture and literature.

  • This module introduces students to the exciting world of digital design using CMOS chips. Students will learn how to create simple electronic circuits at home with the help of breadboards. The content is designed for first-year computing students who are eager to explore practical applications of their studies.

    Topics covered include:

    • Basic principles of CMOS technology
    • Hands-on circuit building
    • Challenges and questions in digital design
  • This module focuses on the concepts of complexity in algorithms and data structures, particularly trees. Students will learn about:

    • Searching algorithms and their performance
    • Binary search and insertion techniques
    • Linked lists compared to arrays
    • Understanding ordered binary trees

    Additionally, students will be introduced to three thought-provoking books that relate to these concepts.

  • This module addresses common programming errors, focusing on how to persevere through challenges. Key areas of exploration include:

    • Understanding C errors and types of errors (runtime vs. compile time)
    • Using tools like gcc, valgrind, and mudflap for error detection
    • Recognizing risky behaviors in programming
    • Exploring the implications of segmentation faults and array bounds

    Students will learn to identify and mitigate programming pitfalls effectively.

  • This module gives students a glimpse into advanced graphics programming, showcasing projects from third-year students. Key highlights include:

    • A demonstration of 3D visualization techniques
    • Using Ninjas to manipulate 3D pixels
    • A flame simulator project developed by graphics students
    • Comparative analysis of DirectX and OpenGL

    This module is designed to inspire creativity in graphics programming.

  • This module examines tree structures in programming, focusing on their application in detecting fixed points in random number generators. Topics covered include:

    • Data structure revisions and tree implementations
    • Exploration of von Neumann's random number generator
    • Addressing memory limitations through CISC and RISC design
    • Using simulation to solve complex problems

    Students will also tackle puzzles to enhance their analytical skills.

  • This module explores the concept of ethics within the field of computing. Students will engage with critical questions such as:

    • What does it mean to be a good person in the tech industry?
    • The importance of whistleblowing and intellectual property
    • Understanding copyright and the public domain
    • The implications of ethical decision-making in technology

    By the end of the module, students will appreciate the significance of ethics in their professional lives.

  • This module introduces Hamming codes and error correction techniques, crucial for reliable data transmission. Key topics include:

    • Understanding parity bits and their role in error detection
    • Mechanisms for correcting errors in transmitted information
    • Applications of Hamming codes in real-world scenarios

    Students will learn how to enhance communication reliability through coding techniques.

  • This module addresses the essential qualities of professionalism within the computing industry. Topics include:

    • Defining what it means to be a professional in computing
    • Distinguishing between professional and non-professional conduct
    • Case studies of ethical dilemmas in major tech companies
    • Advice for managing projects effectively

    Students will reflect on their roles as future professionals in the tech industry.

  • This module investigates the qualities that make a good programmer. Students will explore questions such as:

    • What skills are essential for effective programming?
    • How does this course contribute to a computing degree?
    • Strategies for continuous learning and improvement
    • Insights from notable thinkers in computing

    Students will reflect on their learning journey and set goals for their future careers.

  • This module summarizes the entire semester's learning, providing students with a comprehensive overview of the topics covered. Key aspects include:

    • A recap of key concepts and skills acquired
    • Reflection on the course's relevance and impact
    • A light-hearted conclusion with memorable moments

    Students will leave with a solid understanding of their learning experience.

  • This module focuses on teaching and learning methodologies in computing education. Key points include:

    • Philosophies behind effective teaching
    • How students learn best and the importance of motivation
    • Distinctions between deep and surface learning
    • Acknowledgment of student achievements and feedback

    Students will gain insights into their own learning processes and the role of educators.

  • This module presents a unique perspective on the importance of continuous learning and practice in computing. Key themes include:

    • The significance of hands-on practice for mastering skills
    • Advice for future students to succeed in their studies
    • Encouragement for lifelong learning in computing

    Students will reflect on their journey and consider how to apply these lessons in the future.

  • This module provides live coding demonstrations in C, focusing on essential programming skills. Key aspects include:

    • Extracting digits using modulus and division
    • Understanding recursion and its applications
    • Practical coding examples to enhance learning

    Students will engage with the material through live demonstrations to solidify their understanding.

  • This module presents additional live coding demonstrations in C, emphasizing foundational programming concepts. Topics include:

    • Scope and variable management
    • Pass by copy techniques
    • Practical coding examples to reinforce learning

    Students will benefit from engaging with these concepts through live demonstrations.

  • This module features live coding samples in C, covering essential concepts for beginners. Key points include:

    • Working with header files (.h files)
    • Introduction to the Xcode environment
    • Practical coding examples from the first two weeks

    Students will engage with the foundational elements of C programming through live coding sessions.

  • This module discusses the concept of gamification in education, specifically in computing. Key themes include:

    • Understanding why students often view learning as a chore
    • The impact of marks on student motivation
    • Insights from a unique assessment experiment in a large first-year course

    Students will reflect on how gamification can enhance the joy of learning in computing.