Skip to content

Learning Objectives

Virtualization

Processes

CPU Scheduling

Memory Management

Paging

Swapping

Concurrency

Threads

Locks

Semaphores

Persistence

Input/Output Devices

File Systems

Network File Systems

Security

Authentication

Authorization

Access Control

Cryptography

Advanced Programming

A person who is learning the fundamentals of operating systems should demonstrate mastery of the following programming skills in myriad of necessary programming languages:

Programming

  • Write short programs up to five hundred lines that have the following characteristics for the chosen programming language:
    • Has function and variable names that adhere to an industry-standard coding style for the chosen programming language.
    • Has descriptive comments for all program components that adhere to an industry-standard coding style.
    • Features a source code format that adheres to an industry-standard coding style for the chosen language.
    • Passes an automated test suite, written with an industry-standard framework for the chosen language, showing that it correctly implements the specification for the function.
    • Performs the specified operation in an efficient fashion, as determined through experiments that evaluate the a components's performance in minutes, seconds, or milliseconds.
    • Correctly uses assignment statements, iteration constructs, conditional logic, function invocation, and function recursion in a way that passes the function's test suite, works efficiently, and conveys the intended function's purpose.
    • Correctly performs file and console input and output, ensuring that all input and output is displayed and stored correctly, is not corrupted, and is processed efficiently.
    • Correctly simulates aspects of an operating system (e.g., process scheduling) through the use of a program.

Programming Tools

  • Use a Docker and/or operating system-based programming environment that supports a recent version of the C, Go, and Python programming languages to complete these tasks while implementing a program up to five hundred lines of code:
    • Install, upgrade, and use a recent version of the Python programming language environment to create, run, and debug a Python program with a terminal window, a text editor, and the Poetry package manager.
    • Install, upgrade, and use a recent version of the C programming language toolchain to create, run, test, and debug a C program through a terminal window and/or a text editor.
    • Install, upgrade, and use a recent version of the Go programming language environment to create, run, test, debug, and format a C program through a terminal window and/or a text editor.
    • Use a text editor like VS Code to implement, test, debug, document, and manage the source code of a Python program, leveraging plugins for workflow enhancement.

Version Control

  • Use the GitHub platform and the Git version control system in the following fashion:
    • Clone a GitHub repository without error using either a command in a terminal window or an extension for Git integration in a text editor like VS Code.
    • Write short and descriptive commit messages that use the Conventional Commits standard explain the specific way in which a commit changes the source code and documentation in the GitHub repository.
    • Navigate reports produced by GitHub Actions so as to determine which aspects of a GitHub repository do and do not adhere to a project's specification.
    • In either a team-based on individual context, use the GitHub Flow model to implement specific features in a branch of a GitHub repository and then merge that branch to the main one only after all the checks run by GitHub Actions pass as required and code reviews confirm the code's correctness.
    • Create and discuss programming and technical writing issues with the GitHub Issue Tracker and the GitHub Discussion Forum, furnishing descriptive titles and problem descriptions that adhere to industry best practices and project templates.
    • Submit completed projects that pass all of the instructor-provided and industry-standard checks, as evidenced through the report of a passing build by GitHub Actions.

Effective Learning

A person learning about operating systems will demonstrate mastery of the following technology-mediated learning skills:

  • Follow a systematic process when using resources to implement C, Go, and Python programs:

    • After detecting an error in a program through the use of either automated or manual debugging, develop a satisfactory understanding of the problem's likely root cause and then search sites like Stack Overflow for potential solutions.
    • After evaluating suggested solutions to a programming problem that originate from sites like Stack Overflow, develop a way to fix an error in a program, try that approach, and then incrementally improve it.
    • Independently develop solutions to programming problems even if the specifical technical challenge that you face was not previously covered in a course session or as part of your prior review of technical content.
  • Use Discord to effectively communicate about technology in the following fashion:

    • In the correct public channel, post a question that includes source code segments, screenshots, and a description of the steps taken in an attempt to solve a problem.
    • Answer questions that were posted in a public channel, responding with source code segments, screenshots, and links to external references, pointing the proactive programmer who asked the question in the right direction without solving the problem for them and limiting their opportunity to learn more about the topic in question.
    • Proactively offer to help others who may need to learn scientific, mathematical, or technical knowledge and skills that a learner has already mastered by sharing the acquired knowledge or skill, how you can be contacted, and how you can help.

Improving Objectives

As Robert Talbert explains, a learning objective is clear when it is "clear from the students' perspective" and measurable when there is "some way to know whether the objective has been met" or "how far away the learner is from meeting it".1 Do you see a way in which we can improve the learning objectives for data abstraction? If you do, then please participate in the OS Sketch community by sharing your ideas for improving them!


  1. See Robert Talbert's article entitled How to Write Learning Objectives for more details about how to design learning objectives for an academic course. From your perspective what does it mean to write learning objectives that are both clear and measurable for an advanced course on the topic of operating systems? 


Updated: 2022-08-29   Created: 2022-08-29
Create a new issue to share feedback on "Learning Objectives"
Check out all the exciting topics covered on this site
Recent Author: Gregory M. Kapfhammer