Module Descriptions
Overview
In this course, you will select multiple modules to complete individually. Available modules are listed at the bottom of this page.
Each module will require you to use your current programming knowledge to learn new languages, tools, techniques, and libraries. During the first week of the course, you completed a Course Plan where you selected the modules you wanted to complete this semester. You are allowed to select different modules but you must make sure that the module you select is something that you have not previously learned (unless you plan to learn more advanced topics). Even though you can only select each module once during the semester, you can build upon software written for a previous module. For example, over three modules you could first learn Kotlin, then create an Android app with that Kotlin code, and then finally you can connect your Android app with a cloud database like Firestore.
Each module will be completed in a two week Sprint. You will need to submit a plan during the first week. The plan document describes the expectation for time spent working on the module. By the end of the second week, you will need to submit your final product for the module. Your module will be graded based on your compliance to common and unique module requirements described below.
Common Requirements for all Modules
The software you write for each module has the following common requirements:
-
You must write software of your own creation to demonstrate your understanding of the module. Submitting the code you wrote as part of a published tutorial online is not sufficient.
-
All code must exceed 100 lines (not including setup) and must be documented with useful comments.
-
The software must include a README.md file at the top folder of the project. The template for each README.md file written in Markdown Language is different for each module and is provided in the detailed table below. You must fill out the template completely. This file will be publically viewable in GitHub so make sure to use good spelling, good grammar, and maintain professionalisim.
-
A 4-5 minute video demonstrating the execution of the software and a walkthrough of the code must be created and uploaded publicly (or unlisted if desired) to a site like YouTube. A link to the video must be included in the README.md file. The video should serve as a training video for someone else to learn what you learned.
-
All the code including the README.md file must be published in a public GitHub repository. Each module must be in a separate GitHub repository. The name of the repository should reflect the software you wrote (e.g. MenuPlanner) or the technology that you used (e.g. KotlinPractice). Don't use generic names like "Module1" or "CSE310Project2".
If you are modifying software written in a previous module to support your new module, then you should reuse the same GitHub repository. However, the documentation and video need to be updated to reflect the changes made to your software by the new module. Included below is a description of each module.
NOTE: A project that was done in another course will not be accepted.
Language Modules
Module
The C++ language is an object-oriented language that is used for embedded and application development. It is based on the C language. C++ requires the use of a compiler and linker, which are operating system– and processor-specific. C++ includes the Standard Template Library (STL), which provides support for data structures and threading.
You can read more on sites such as the following:
-
C++ —Wikipedia (open collaboration site)
-
C++ Tutorial—W3Schools (tutorial site)
-
C++ STL Containers—CPlusPlus (reference site)
Unique Requirements & Stretch Challenges
Write one or more programs in C++ that demonstrates some of the following:
-
Variables
-
Expressions
-
Conditionals
-
Loops
-
Functions
-
Classes
-
Data structure from STL (such as a vector, list, or map)
Use the C++ README.md template.
Stretch Challenges (select one):
-
Modify your program to read and write to a file.
-
Modify your program to demonstrates inheritance with virtual functions.
-
Modify your program to use the
new
anddelete
operators to dynamically create objects.
Guidance
There are multiple options for getting C++, including the following:
-
Install Visual Studio (Free Community Version). This is a different tool from Visual Studio Code. Visual Studio includes C++ tools.
-
Install the MinGW Gnu Compiler Collection (GCC). You should make sure the compiler and linker tools are in your path. You can either integrate the GCC into Visual Studio Code or run the GCC tools (g++) from within the Visual Studio Code terminal window.
-
Install CLion from JetBrains which will install the MinGW compiler automatically for you.
Project Ideas
-
Calculator Application: Create a simple command-line calculator that performs basic arithmetic operations. Implement error handling for invalid inputs.
-
To-Do List Manager: Build a console-based to-do list application. Allow users to add, remove, and view tasks.
-
Simple Text Editor: Develop a basic text editor that allows users to open, edit, and save text files.
-
Basic Calculator with GUI: Build a simple graphical calculator application using a library like Qt or SFML.
-
File Reader/Analyzer: Create a program that reads a text file, counts the occurrences of each word, and displays the results.
-
Basic Inventory System: Design a program to manage a simple inventory system with items, quantities, and prices.
-
Hangman Game: Build a command-line version of the Hangman game where players guess a hidden word.
-
Simple Web Scraper: Develop a program that scrapes data from a website and stores it in a structured format.
-
Chess Game: Develop a simplified version of chess where two players can make moves and capture pieces.
-
Music Player: Develop a basic command-line music player that plays audio files.
Module
The Java language is an object-oriented language that is used for embedded and application development. Java requires the use of a compiler and a Java Virtual Machine (JVM) which can both be obtained by installing the Java Development Kit (JDK). Compiled code (often with a .class or .jar extension) will run on any computer that has a JVM. Java contains a substantial library which includes many classes for data structures (Java Collection Framework), file management, and threading. In Java, every file contains a single class. A static main function is created in one of the classes and is used to provide a starting point for the program.
You can read more on sites such as the following:
-
Java—Wikipedia (open collaboration site)
-
Java Tutorial—W3Schools (tutorial site)
-
Java Reference—Oracle (official site)
-
Java Collection Frameworks—BeginnersBook (tutorial site)
Unique Requirements & Stretch Challenges
Write one or more programs in Java that demonstrates some of the following:
-
Variables
-
Expressions
-
Conditionals
-
Loops
-
Functions
-
Classes
-
Data structure from Java Collection Framework (such as ArrayList, TreeSet, or HashMap)
Use the Java README.md template.
Stretch Challenges (select one):
-
Modify your program to read and write to a file.
-
Modify your program to demonstrate inheritance using the
extends
andabstract
keywords. -
Modify your program to create an interface and then use it with the
implements
keyword.
Guidance
To set up your development environment for Java, complete the following:
-
Install the latest version of either JDK (commercial) or OpenJDK (open source) from Oracle. In industry, there are license considerations between these two options. For your work in this course, either choice is acceptable. Make sure that the Java compiler and virtual machine tools are in your environment path.
-
You can either integrate Java into Visual Studio Code or run the Java tools (javac and java) from within the Visual Studio Code terminal window. As another option, you can use a tool like IntelliJ (free community version) to develop and run Java code.
Project Ideas
-
Expense Tracker: Create a program that helps users track their daily expenses and provides insights into spending habits.
-
Text-based RPG Game: Design a text-based role-playing game with character creation, battles, and a storyline.
-
Weather Forecast App: Create an application that retrieves weather data from an online API and displays current weather conditions and forecasts.
-
Basic Social Media Platform: Develop a simplified social media platform where users can create profiles, post updates, and follow other users.
-
Stock Portfolio Tracker: Build an application that tracks stock prices and allows users to manage their stock portfolios.
-
Task Scheduler with Calendar: Create a task scheduler with an integrated calendar that allows users to manage events and tasks.
-
Movie Recommendation System: Create a movie recommendation system that suggests movies to users based on their preferences and viewing history.
-
Guess the Number Game: Develop a number guessing game where the computer generates a random number, and the player has to guess it within a limited number of attempts.
-
Student Gradebook: Create a program to maintain a student gradebook, including adding, updating, and calculating grades.
-
Basic Paint Program: Create a simple paint program with drawing tools like brushes, shapes, and colors.
Module
The Kotlin language is an object-oriented language that is used for general application development including Android mobile app development. It is based on the Java language. Kotlin was designed to provide improvements to the Java language while still supporting the Java libraries. Library support includes data structures, file operations, and networking.
You can read more on sites such as the following:
-
Kotlin—Wikipedia (open collaboration site)
-
Kotlin Tutorial—Programiz (tutorial site)
-
Kotlin (official site)
-
Comparison to Java (official site)
Unique Requirements & Stretch Challenges
Write one or more programs in Kotlin that demonstrates some of the following:
-
Variables (mutable and immutable)
-
Expressions
-
Conditionals
-
Loops
-
Functions
-
Classes
Use the Kotlin README.md template.
Stretch Challenges (select one):
-
Modify your program to demonstrate the creation and modification of collections.
-
Modify your program to demonstrate data classes.
-
Modify your program to demonstrate the varied uses of the when keyword.
You may use this module also to learn Swift or Dart. You may need to modify some of the requirements if you learn Swift or Dart instead.
Guidance
To set up your development environment for Kotlin, complete the following:
-
The Java Development Kit (JDK) is needed since Kotlin is built on top of it. Install the latest version of either JDK (commercial) or OpenJDK (open source) from Oracle. In industry, there are license considerations between these two options. For your work in this course, either choice is acceptable.
-
Install IntelliJ Idea (Free Community Version). This is an IDE like Visual Studio Code. Kotlin support will be installed automically. When you create a project in IntelliJ, select "Kotlin" and "JVM | IDEA". When you create files, select "Kotlin File/Class" to create .kt files.
Project Ideas
-
Task Manager: Create a console-based task manager application that allows users to add, remove, and list tasks.
-
Basic Calculator: Create a basic calculator application with support for arithmetic operations and user-friendly input handling.
-
Simple Note-taking App: Design a note-taking app that lets users create, edit, and organize notes.
-
Password Manager: Build a secure password manager that stores and retrieves user passwords.
-
Blogging Platform: Design a blogging platform where users can create and publish blog posts.
-
Contact Manager: Develop a contact manager application that allows users to add, edit, and search for contacts.
-
Basic Drawing App: Create a simple drawing application that allows users to draw shapes and lines.
-
Recipe Organizer: Create an app for managing recipes, allowing users to add, search, and organize recipes by categories.
-
Basic Chess Game: Develop a simplified version of chess where two players can make moves and capture pieces.
-
Hangman Game: Build a command-line version of the Hangman game where players guess a hidden word.
Module
R is a language and environment for statistical computing and graphics. It is a GNU project which is similar to the S language and environment which was developed at Bell Laboratories (formerly AT&T, now Lucent Technologies) by John Chambers and colleagues. R can be considered as a different implementation of S. There are some important differences, but much code written for S runs unaltered under R.
R provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-series analysis, classification, clustering, …) and graphical techniques, and is highly extensible. The S language is often the vehicle of choice for research in statistical methodology, and R provides an Open Source route to participation in that activity.
One of R’s strengths is the ease with which well-designed publication-quality plots can be produced, including mathematical symbols and formulae where needed. Great care has been taken over the defaults for the minor design choices in graphics, but the user retains full control.
R is available as Free Software under the terms of the Free Software Foundation’s GNU General Public License in source code form. It compiles and runs on a wide variety of UNIX platforms and similar systems (including FreeBSD and Linux), Windows and MacOS.
You can read more on sites such as the following:
Unique Requirements & Stretch Challenges
Write multiple functions (not necessarily part of a single piece of software) in R that demonstrates some of the following:
-
Display output to the screen.
-
Use at least 5 different R datatypes in your program
-
Incorporate at least one loop that works with lists or arrays
-
Use Dataframes
Use the R README.md template.
Stretch Challenges (select one):
-
Incorporate CSV file
-
Create process and send messages to the process
-
Use the
case of
coding block
Guidance
To setup your development environment complete the following:
-
Visual Studio Code has support for R. Please review this document.
Project Ideas
-
Statistical Hypothesis Tester: Develop a program that allows users to perform statistical hypothesis tests (e.g., t-tests, chi-square tests) on data.
-
Linear Regression Model: Create a script that fits a simple linear regression model to a dataset and displays the regression equation and visualizations.
-
Data Cleaning/Preprocessor: Develop a script that cleans and preprocesses messy data, handles missing values, and prepares it for analysis.
-
Cluster Analysis Tool: Build a program that performs cluster analysis on data and visualizes the results using techniques like k-means clustering.
-
Time Series Forecasting: Create a script that fits a time series forecasting model (e.g., ARIMA) to historical data and generates future predictions.
-
Data Mining: Write a data mining script that discovers patterns and associations in large datasets using techniques like association rule mining.
-
Natural Language Processor: Create an NLP tool using R that performs tasks like text classification, sentiment analysis, and word cloud generation.
-
Web Scraping with Rvest: Develop a web scraping script using the rvest package to extract data from websites and store it in a dataframe.
-
Recommendation System: Build a recommendation system that provides personalized recommendations for users based on their preferences and behavior.
-
Basic Simulation Model: Write a simulation model in R to model a real-world process or scenario and analyze its behavior.
Module
The Erlang language is an example of functional languages like Haskell, F#, and Clojure. Functional languages (unlike the imperative languages you have learned previously) have the following characterstics:
-
Functions are designed to produce an output from the inputs.
-
Variables are immutable since functions are only tasked with producing a result. When dealing with data structures, this means that when we add or remove something we will either reuse parts of the previous structure or we will need to recreate parts of the structure.
-
Since functions are only concerned with the current task and also since variables are immutable, there are no side effects from our code. A side effect occurs when running a funciton or changing a variable affects other variables and functions. Side effects are common in object oriented programming (member functions affect member data).
The goal with functional programming is to write code with higher quality due to the strictness of the language. Like Python, the Erlang language determines variable types automatically. Other languages like Haskell are strictly typed.
You can read more on sites such as the following:
-
Erlang—Wikipedia (open collaboration site)
-
Programming Erlang (E-Book via BYU-Idaho - Start with Part 2)
-
Erlang Standard Library Reference Manual (official site)
-
Erlang by Example (tutorial site)
Unique Requirements & Stretch Challenges
Write multiple functions (not necessarily part of a single piece of software) in Erlang that demonstrates some of the following:
-
Display output to the screen using
format
. -
Pattern Matching in function parameters
-
Recursion
-
Guards
-
Lists
-
Using lambda functions with
lists:map
,lists:filter
, orlists:foldl
You can use this module to learn any Functional Programming language. If you pick a different language, you may need to modify the requirements.
Use the Erlang README.md template.
Stretch Challenges (select one):
-
Demonstrate throwing and handling exceptions
-
Create process and send messages to the process
-
Use the
case of
coding block
Guidance
To setup your development environment complete the following:
-
Install Erlang You want to make sure that
erl
shell program is in the path. -
Visual Studio Code has support for Erlang. The Erlang extension can be installed in Visual Studio Code. The
erl
shell can be executed from the terminal.
Project Ideas
-
List Manipulation: Write functions to manipulate lists, such as reversing a list, finding the length, or checking if a list is a palindrome.
-
Factorial Calculator: Write functions to calculate the factorial of a number using recursion.
-
Fibonacci Sequence Generator: Create functions that generate the Fibonacci sequence up to a given number using recursion.
-
Pattern Matching Game: Create a simple pattern matching game where the player has to guess the correct pattern.
-
Recursive File Search: Build a program that recursively searches for files with a specific extension in a directory tree.
-
Functional Tic-Tac-Toe: Build a console-based Tic-Tac-Toe game using functional programming principles.
-
Sudoku Solver: Write a Sudoku solver using functional programming techniques.
-
Natural Language Processor: Develop a program that performs basic natural language processing tasks, such as text tokenization and sentiment analysis.
-
Basic Calculator: Create a functional calculator application that performs basic arithmetic operations and displays the results.
-
Image Processor: Implement a simple image processing tool using functional programming to apply filters and transformations to images.
Module
JavaScript is a scripting or programming language that allows you to implement complex features on web pages — every time a web page does more than just sit there and display static information for you to look at — displaying timely content updates, interactive maps, animated 2D/3D graphics, scrolling video jukeboxes, etc. — you can bet that JavaScript is probably involved. It is the third layer of the layer cake of standard web technologies, two of which (HTML and CSS) we have covered in much more detail in other parts of the Learning Area.
The core client-side JavaScript language consists of some common programming features that allow you to do things like:
-
Store useful values inside variables. In the above example for instance, we ask for a new name to be entered then store that name in a variable called name.
-
Operations on pieces of text (known as "strings" in programming). In the above example we take the string "Player 1: " and join it to the name variable to create the complete text label, e.g. "Player 1: Chris".
-
Running code in response to certain events occurring on a web page. We used a click event in our example above to detect when the label is clicked and then run the code that updates the text label.
-
And much more!
What is even more exciting however is the functionality built on top of the client-side JavaScript language. So-called Application Programming Interfaces (APIs) provide you with extra superpowers to use in your JavaScript code.
APIs are ready-made sets of code building blocks that allow a developer to implement programs that would otherwise be hard or impossible to implement. They do the same thing for programming that ready-made furniture kits do for home building — it is much easier to take ready-cut panels and screw them together to make a bookshelf than it is to work out the design yourself, go and find the correct wood, cut all the panels to the right size and shape, find the correct-sized screws, and then put them together to make a bookshelf.
You can read more on sites such as the following:
-
JavaScript Documentation (Everything above came from this site)
Unique Requirements & Stretch Challenges
Write multiple functions (not necessarily part of a single piece of software) in JavaScript that demonstrates some of the following:
-
Display output to the screen. This can be done with Node.js writing to the terminal, or in a browser using html.
-
Native Array ES6 functions
-
Recursion
-
Use a JavaScript library written by someone else in your code (could be an npm package if using Node, or a cdn link for any JS library)
You can use this module to learn any Functional Programming language. If you pick a different language, you may need to modify the requirements.
Use the JavaScript README.md template.
Stretch Challenges (select one):
-
Demonstrate throwing and handling exceptions
-
Create DOM structures with CSS (if using browser), or use 2 more npm packages if using Node.js.
Guidance
To setup your development environment complete the following:
-
Client-side JavaScript code runs in the browser
-
If you want to use JavaScript as a backend language (similar to Python), you can install the Node.js runtime environment on your computer.
Project Ideas
-
To-Do List: Create a web-based to-do list application that allows users to add, remove, and mark tasks as completed.
-
Weather Forecast: Create a web app that fetches and displays weather forecasts based on user-entered locations.
-
Recipe Finder: Create a recipe finder application that allows users to search for recipes based on ingredients they have.
-
Interactive Storyteller: Build an interactive storytelling app where users can choose their own adventure by making choices in the story.
-
Currency Converter: Develop a currency converter application that converts between different currencies based on exchange rates.
-
Memory Game: Build a memory game where players need to match pairs of cards with JavaScript animations and effects.
-
Polling App: Create a real-time polling application where users can create and participate in polls.
-
URL Shortener: Build a URL shortener service that shortens long URLs and provides statistics on link usage.
-
Interactive Art Gallery: Design an interactive art gallery that allows users to explore and interact with artwork online.
-
Social Media Dashboard: Develop a dashboard that aggregates social media feeds and displays updates in real-time.
Module
C# is a modern, object-oriented programming language within the .NET framework, catering to secure and robust application development. Rooted in the C family, C# is familiar to developers acquainted with C, C++, Java, and JavaScript. It encompasses major language components and offers interactive tutorials for beginners to explore its capabilities.
It's fundamentally object-oriented and component-focused, supporting the creation and utilization of software components seamlessly. Offering features like garbage collection, nullable types, robust exception handling, lambda expressions, LINQ, asynchronous operations, a unified type system, and both reference and value types, C# promotes consistent operations across types. Moreover, it supports generic methods, iterators, and emphasizes versioning for evolution while ensuring compatibility, seen in aspects like separate virtual and override modifiers, method overload resolution rules, and explicit interface member declarations.
You can read more on sites such as the following:
-
C# Documentation (Everything above came from this site)
Unique Requirements & Stretch Challenges
Write one or more programs in C# that demonstrates some of the following:
-
Variables
-
Expressions
-
Conditionals
-
Loops
-
Functions
-
Classes
-
Structures and Unions
Use the C# README.md template.
Stretch Challenges (select one):
-
Modify your program to read and write to a file.
-
Modify your program to demonstrate inheritance using the
extends
andabstract
keywords.
Guidance
To setup your development environment complete the following:
Project Ideas
-
Text Adventure Game: Develop a text-based adventure game where players make choices to progress through the story.
-
Employee Management System: Build a console-based employee management system with features like adding, editing, and displaying employee details.
-
Library Catalog System: Design a library catalog system that allows users to search for books, check availability, and borrow or return books.
-
Basic Paint Program: Create a simple paint application that allows users to draw and manipulate shapes on a canvas.
-
Inventory Management System: Create a program that simulates an inventory management system for tracking products and quantities.
-
Stock Portfolio Tracker: Create a program for tracking stock portfolios, displaying real-time stock prices, and calculating portfolio value.
-
Recipe Management System: Design a recipe management system where users can add, search, and organize recipes.
-
File Encryption and Decryption Tool: Create a program for encrypting and decrypting files using cryptographic algorithms.
-
Tic-Tac-Toe Game: Build a UI where two players can add Xs or Os to the board.
-
Task Scheduler and Reminder: Build a task scheduler with reminders and notifications for important events and deadlines.
Module
TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.
TypeScript adds additional syntax to JavaScript to support a tighter integration with your editor. Catch errors early in your editor.
TypeScript code converts to JavaScript, which runs anywhere JavaScript runs: In a browser, on Node.js or Deno and in your apps.
TypeScript understands JavaScript and uses type inference to give you great tooling without additional code.
You can read more on sites such as the following:
-
TypeScript Documentation (Everything above came from this site)
Unique Requirements & Stretch Challenges
Write multiple functions (not necessarily part of a single piece of software) in TypeScript that demonstrates some of the following:
-
Display output to the terminal.
-
Recursion
-
Classes
-
Lists
-
Asynchronous functions
Use the TypeScript README.md template.
Stretch Challenges (select one):
-
Demonstrate throwing and handling exceptions
-
Use TS Lint
-
Incorporate Jest in your project
Guidance
To setup your developmenthenvironment complete the following:
Project Ideas
-
File Uploader and Downloader: Write a program that allows users to upload and download files from a server.
-
Basic Drawing App: Create a simple drawing application in the browser using TypeScript and HTML5 Canvas.
-
Authentication System: Build a user authentication system, including registration, login, and user profile management.
-
CRUD API: Create a simple CRUD (Create, Read, Update, Delete) API using TypeScript and Express.js.
-
Recursive Directory Scanner: Write a TypeScript script that recursively scans a directory, lists its contents, and displays the file structure.
-
List Sorting Algorithms: Implement sorting algorithms (e.g., bubble sort, quicksort) and compare their performance on large datasets.
-
Async/Await Example: Write asynchronous functions that fetch data from an API and display the results in the terminal.
-
Recursive Fibonacci: Write a program to calculate and display Fibonacci numbers using recursion.
-
Basic Note-taking App: Build a note-taking application that allows users to create, edit, and organize notes.
-
Basic Quiz or Survey Generator: Create a tool for designing and taking quizzes and surveys with customizable questions and options.
Module
The Rust language is used for embedded and application development. While similair to C or C++, it has improvements including memory management and variable ownership. Support is provided for object-oriented methodologies as well as data structures and threading. Rust comes with a build environment called Cargo which is used both for library management and building.
You can read more on sites such as the following:
-
Rust—Wikipedia (open collaboration site)
-
Rust Tutorial—TutorialsPoint (tutorial site)
-
Rust (official site)
Unique Requirements & Stretch Challenges
Write one or more programs in Rust that demonstrates some of the following:
-
Variables (mutable and unumutable)
-
Expressions
-
Conditionals
-
Loops
-
Functions (ownership or reference)
Use the Rust README.md template.
Stretch Challenges (select one):
-
Modify your program to use a data structure (e.g. Vec, LinkedList, Hashmap).
-
Modify your program to use slicing.
-
Modify your program to demonstrate object oriented techniques using both
struct
andimpl
.
Guidance
To setup your developmenthenvironment complete the following:
-
Install Rust.
-
Visual Studio Code has support for Rust. The Rust extension can be installed in Visual Studio Code. The cargo build tool can be run from the terminal.
-
Follow chapter 1 of the Rust Programming Language Book for step by step instructions for building a Hello World application using the cargo tool.
Project Ideas
-
Basic File I/O: Write a program that reads from and writes to text files, demonstrating file input/output operations.
-
Factorial Calculator: Write a program to calculate the factorial of a number using recursion.
-
Basic Web Scraper: Build a program that scrapes data from a website and displays specific information.
-
File Encryption and Decryption: Create a program for encrypting and decrypting files using cryptographic algorithms.
-
Password Manager: Build a secure password manager that allows users to store and retrieve passwords.
-
Basic API Client: Write a program that consumes data from a public API and presents it to the user.
-
Markdown to HTML Converter: Create a program that converts Markdown files to HTML, showcasing text processing.
-
Basic API Server: Develop a simple RESTful API server to handle CRUD operations.
-
Fibonacci Sequence Generator: Develop a program to generate and display Fibonacci numbers up to a specified limit.
-
Hangman Game: Build a command-line version of the Hangman game where players guess a hidden word.
Other Modules
Module
Cloud data storage is a convenient solution which removes the requirement for an individual or company to maintain their own database server. Tools like Google Firebase, Amazon DynamoDB, and MongoDB will provide you a database which you can access using an API (function calls from a library). The use of these cloud databases is frequently free for simple projects, but will cost when scaled up. Cloud databases provide a mix of various types of databases, including relational and key/value. A key/value database (which is recommended in the instructions) will store data into maps that can be queried either in whole, in parts, or in filtered parts. A key/value database is also commonly called a NoSQL database. The APIs for each database will vary and provide these capabilities.
You can read more on sites like the following:
-
Overview of Cloud Databases - MongoDB (company-sponsored site)
-
An Introduction to Cloud Databases: Chapter 1 (electronic book)
Unique Requirements & Stretch Challenges
Develop software that interacts with a cloud database. The software must have the following characteristics:
-
You must create a database using a cloud service for your program to use including at least one table to store data into.
-
Your software must demonstrate the ability to insert, modify, delete, and retrieve (or query) data.
Use the Cloud Databases README.md template.
Stretch Challenges (select one):
-
Receive notifications in your software when data in the cloud changes.
-
Create two or more tables that are related to each other.
-
Implement user authentication.
Guidance
You should consider using Python and Firestore (part of Google Firebase) for this module. Here are some useful notes when using this suggested environment:
-
Use
firebase-admin
to access a Firestore database from Python. You can use pip to install:pip install firebase-admin
-
You will need to create a free Firebase account, create a Firebase project, and create a Firestore database in the project.
-
During the process of getting your account and database set up, you will need to download a Service Account File, which is a JSON file. This file along with the project name will be needed when you initialize your connection to the Firestore database within your code. The Service Account File is secret and should not be shared in the GitHub repository.
Here is a list of websites that you might find useful when working in the suggested environment:
-
Firestore Tutorial (official site)
-
Firebase Console (official site)
-
Google Authentication—Creating a Service Account (official site)
Project Ideas
-
Customer Relationship Management: Build a CRM system for managing customer interactions and sales data stored in the cloud.
-
Health and Fitness Tracker: Develop a health and fitness tracking app that stores user activity and health data in the cloud.
-
Music Playlist Manager: Create a music playlist manager that allows users to create and share playlists, with song information stored in the cloud.
-
Language Learning App: Develop a language learning app that stores user progress and achievements in the cloud.
-
Weather Dashboard: Build a weather dashboard that fetches weather data from an API and stores user preferences in the cloud.
-
Personal Finance Manager: Develop a personal finance manager that connects to a cloud database to track income, expenses, and budgets.
-
Notes and Documents Organizer: Create a cloud-based notes and documents organizer that lets users store and manage their files securely.
-
To-Do List: Create a to-do list application that stores tasks in a cloud database. Users can add, edit, and delete tasks.
-
Event Planner: Build an event planning application that stores event details, guest lists, and RSVPs in the cloud.
-
E-Commerce Platform: Create a small-scale e-commerce platform with product listings and user accounts, all managed in the cloud.
Module
As the processing power of computers has increased, the world has become able to capture the large amounts of data that it produces. Surveys, transactions, and observations are captured every hour of every day. A data scientist has the skills to capture, organize, and analyze large amounts of data and look for patterns, trends, and statistical relevance between datasets. Since the possibilities of data analysis are endless, programming languages are used to write customized software to analyze data. Some languages, like R, were designed specifically for data analysis. Libraries like Pandas, NumPy, Matplotlib, Scrapy, BeautifulSoup, and TensorFlow provide the capabilities to do the analysis with the familar Python programming language.
You can read more from sites such as the following:
-
Data Science—Wikipedia (open collaboration site)
-
Overview of Pandas (official site)
-
R Programming Language (official site)
Unique Requirements & Stretch Challenges
Write software to analyze a set of data to answer two questions about that data as detailed below:-
Find a free dataset that interests you.
-
Identify the two questions about the dataset on your own. You might change your questions after you explore the data further.
-
Write a program in any programming language using a statistics library (e.g. R or Python Pandas) to analyze the dataset and provide an answer to your questions.
-
You must demonstrate the ability to do one or more of the following to achieve each answer: filter, sort, aggregate (sum, average, count), or data conversion.
-
While there is no right or wrong answer, your answer should be justified by your analysis.
You can also use this module to explore Machine Learning. You will need to propose a project different requirements in your project plan.
Use the Data Analysis README.md template.
Stretch Challenges (select one):
-
Update your software so it draws a graph showing some of the results.
-
Identify a third question from your dataset and write code to answer it.
Guidance
You should consider using Python and Pandas for this module. You should also consider using Kaggle to obtain a free dataset. Here are some useful notes when using this suggested environment:
-
You need to install Pandas on your computer. You can use pip to install:
pip install pandas
. -
You can download a dataset from Kaggle.com. You should look for a dataset that has good documentation, which will help you understand the data.
Here is a list of websites that you might find useful when working in the suggested environment:
-
Pandas 10 Minute Tutorial (official site)
-
Pandas Getting Started Tutorials (official site)
-
Pandas Example with Titanic Data (tutorial site)
-
Exploratory Data Analysis with Pandas (tutorial site)
Project Ideas
-
Stock Market Analysis: Analyze historical stock price data to identify trends, calculate returns, and visualize stock performance.
-
E-Commerce Sales Analysis: Analyze sales data from an online store to identify top-selling products, customer behavior, and seasonal trends.
-
Weather Data Analysis: Analyze historical weather data to identify climate trends, temperature variations, and extreme weather events.
-
Healthcare Data Analysis: Analyze healthcare data to identify patient demographics, disease patterns, and healthcare resource utilization.
-
Housing Market Analysis: Analyze housing market data to identify price trends, housing demand, and regional variations.
-
Sports Data Analysis: Analyze sports statistics to evaluate player performance, team rankings, and historical trends.
-
Restaurant Reviews Analysis: Analyze restaurant reviews to identify popular cuisines, customer preferences, and review sentiment.
-
Education Data Analysis: Analyze educational data to assess student performance, graduation rates, and educational disparities.
-
Job Market Analysis: Analyze job market data to identify in-demand skills, salary trends, and job openings.
-
Environmental Data Analysis: Analyze environmental data (e.g., air quality, pollution) to identify environmental trends and potential health impacts.
Module
Games bring entertainment and education to many people using their computers and devices. However, we frequently don't realize the software code that is running behind those games. Games have several components to them, including the following:
-
User Interface including Graphics and Sound
-
Event Processing (Keyboard, Mouse)
-
Game Logic and Story
-
Network, Database and Notifications
With so many moving components in a game, it is useful to use a game platform for development. There are several inluding Unity, Lumberyard, Unreal Engine, Cryengine, and Urho3D. Many of these platforms contain professional tools for graphics and animation. There are also several tools using Python including Arcade, PyGame, Kivy and Panda3D.
You can read more from sites such as the following:
-
Game Engines—Wikipedia (open collaboration site)
-
List of Game Engines—Wikipedia (open collaboration site)
Unique Requirements & Stretch Challenges
Write a simple game using a Python game framework (e.g. PyGame or Arcade) or a more complex platform such as Unity or Unreal. Note that if you use Unity or Unreal, you may need to plan your time more carefully.
The game must have the following characteristics:
-
The game should display graphics
-
The game should take user input from the keyboard or mouse
-
The game should have moveable objects
Use the Game Framework README.md template.
Stretch Challenges (select one):
-
Allow the user to save and load the game.
-
Add music or sound effects to the game.
-
Provide levels in your game that change the difficulty of the game.
Guidance
You should consider using Python and Arcade for this module. Here are some useful notes when using this suggested environment:
-
You need to install Arcade on your computer. You can use pip to install:
pip install arcade
. -
You should consider using Sprite classes in Arcade for any moving objects in the game.
-
If you have any picture or sound files you want to include with your game, make sure they are in the same folder as your Python code.
Here is a list of websites that you might find useful when working in the suggested environment:
-
Arcade Examples (official site)
-
Arcade Tutorial—RealPython (tutorial site)
Project Ideas
-
Classic Pong Game: Create a simple Pong game, where two players can control paddles to bounce a ball back and forth.
-
Space Invaders Copy: Build a Space Invaders-style game, featuring alien enemies and a player-controlled spaceship.
-
Flappy Bird: Create a Flappy Bird-inspired game, where players navigate a bird through obstacles.
-
Memory Matching Game: Develop a memory matching game, featuring a grid of cards that players flip to find matching pairs.
-
Tic-Tac-Toe: Implement a classic Tic-Tac-Toe game, allowing two players to take turns.
-
Snake Game: Develop a Snake game, where players control a growing snake to eat food and avoid collisions.
-
Chess Game: Design a two-player Chess game, featuring standard chess rules and gameplay.
-
Asteroids Clone: Build an Asteroids-inspired game, where players pilot a spaceship to destroy asteroids.
-
Card Game: Create a card battle game, featuring collectible cards and strategic gameplay.
-
Sudoku: Develop a Sudoku puzzle solver game, allowing players to input and solve Sudoku puzzles.
Module
Geographic Information Systems (GIS) involves the organization of information on a map. The information can be physical (cities, landmarks, mountains, trails), economic (median incomes, tax rates, employment), social (gender, ethnicity, family, religion), or event driven (earthquake, lightning, crime, activity). Using maps, decisions can be made, trends can be found, and information can be obtained. The components in GIS include user interfaces, data storage, and analysis.
You can read more from sites such as the following:
Unique Requirements & Stretch Challenges
Create a website or mobile app that generates a map using a mapping library like ArcGIS or Google Maps. The map should include markers showing useful information. The map must have the following characeterstics:
-
You must have at least 20 markers on the map
-
When the user clicks on a marker, a popup should be displayed showing information about the marker. If you are using a mobile app, you can display the information in something native to the platform (e.g. Android Toast).
Use the GIS Mapping README.md template.
Stretch Challenges (select one):
-
Obtain data automatically from a server publically available on the internet so that your map is always up to date.
-
Provide a filter in the map to allow the user to display only some of the markers.
-
Include more than one type of data on your map (with different marker graphics).
Guidance
You are required to use ArcGIS. You should consider using Javascript and HTML to create your map. ArcGIS offers many detailed tutorials for different programming languages. Here is a list of websites that you might find useful:
-
ArGIS JavaScript Tutorial—ArcGIS (official site)
-
JavaScript—W3Schools (tutorial site)
Project Ideas
-
Local Landmarks Map: Create a map that displays notable landmarks in your local area, such as parks, museums, and historical sites.
-
City Event Map: Develop an app that displays upcoming events in your city on an interactive map, allowing users to click on markers for event details.
-
Public Transportation Tracker: Build a real-time public transportation tracker that shows the locations of buses, trams, or subways on a map.
-
Weather Radar Map: Develop a weather app that displays live weather radar data on an interactive map, allowing users to track storms and precipitation.
-
Hiking Trail Finder: Create an app that helps users discover nearby hiking trails, complete with trail information and difficulty levels.
-
Environmental Pollution Map: Create a map that visualizes environmental pollution data, such as air quality and water contamination, for a specific region.
-
Restaurant Locater: Build an app that uses GIS to help users find nearby restaurants, displaying their locations and user reviews on a map.
-
Property Prices Heatmap: Build a real estate app that displays property prices as a heatmap, helping users identify areas with affordable housing.
-
National Park Guide: Build an app that serves as a guide to national parks, providing maps, trail information, and visitor centers.
-
Air Quality Index Map: Create a real-time air quality map that displays air quality index values for different locations in your city.
Module
Mobile is everywhere, and the ability to make mobile applications has never been more sought after or desirable than it is now. Android applications are typically written in Java or Kotlin using Android Studio. iOS applications are written in Swift using XCode (using a Mac).
Other platforms have been created to make it easier to port to multiple platforms. React Native uses JavaScript to create apps that will run on both platforms. Flutter uses the Dart language to achieve the same result.
You can read more from sites such as the following:
-
Android Apps - Wikipedia (reference site)
-
Android Studio (official site)
-
Develop Apps for iOS (official site)
-
React Native (official site)
-
Flutter (official site)
Unique Requirements & Stretch Challenges
Create a Mobile App using one of the following platforms:
-
Android - Java or Kotlin
-
iOS - Swift - Note that you need a Mac using XCode for this option
-
React Native - Javascript - Creates Android/iOS compatible apps
-
Flutter/Dart - Creates Web/Android/iOS compatible apps
The app should have the following characteristics:
-
Have at least one screen
-
Be interactive with the user (e.g. responds to inputs by displaying appropriate outputs)
Use the Mobile App README.md template.
Stretch Challenges (select one):
-
Integrate with a component on the phone such as the camera, microphone, sensor, or location services.
-
Incorporate two or more screens
-
Store data either in local storage so is persists even if the app closes or if the phone is turned off
Guidance
You should consider using Android Studio and either Java or Kotlin (depending on which language you know best). The app should run on an Android phone. If you don't have an Android phone, you can use the emulator provided within Android Studio. Here is a list of websites that you might find useful when creating an Android app:
The following links may be useful for some of the stretch challenges:
Project Ideas
-
Flashcard App: Develop a flashcard app for studying various subjects with user-generated flashcard sets.
-
Language Learning App: Develop an app for learning new languages, including vocabulary quizzes and pronunciation guides.
-
News Aggregator: Create an app that aggregates news articles from different sources and displays them to users.
-
Travel Journal: Build a travel journal app that lets users record their travel experiences with photos and notes.
-
Drawing and Painting App: Build an app that allows users to draw, paint, and save their artwork.
-
Online Marketplace: Create a platform for buying and selling items, similar to a classified ads website.
-
Language Translator: Develop an app that translates text or speech from one language to another.
-
Event Booking App: Develop an app for booking tickets to concerts, movies, or sporting events.
-
Health and Fitness App: Create a health and fitness app that offers workout routines, diet tracking, and health statistics.
-
Travel Planner: Build a travel planning app that helps users organize their trips, including itinerary creation and travel tips.
Module
Communication between two computers (or even two pieces of software on the same computer) can be done using the networking stack. A network is more than just physical wire (or wireless) that connects a computer to a network; it also includes the data that is transmitted through that connection. The data is organized into layers according to the Open Systems Interconnection (OSI) model. These layers include the physical, datalink, network, and transport layers. These layers are used to package, route, and transmit data between computers. Common transport layers include TCP (Transmission Control Protocol) and UDP (User Datagram Protocol). On top of all of these layers is the data that we actually want to communicate to another computer. This data is frequently organized by a message structure that both the sending computer and receiving computer understand. Defined formats like JSON, HTML, or XML are all commonly used.
Any information can be sent on a network connection. The software could be collaborative (e.g. chat), problem-solving (e.g. provide answer to question), content based (e.g. file or web server), or embedded (e.g. request data from a sensor or turn on a light).
When developing networking software, there are two types of models we can look at:
-
Client-Server: The server receives requests from many clients, processes each one, and sends the responses back to the client.
-
Peer-to-Peer: A computer (peer) communicates directly to another commputer without going through a server. In this model, there may be a server that is used by a computer to get address information for the other computer.
You can read more on sites such as the following:
-
OSI Model—Wikipedia (open collaboration site)
-
Client-Server model—Wikipedia (open collaboration site)
-
Peer-to-Peer Computing—TutorialsPoint (tutorial site)
-
What's the Difference Between TCP and UDP?—How-To Geek (tutorial site)
Unique Requirements & Stretch Challenges
Write a program that allows one computer to communicate with another computer using either of the following:
-
Client-Server Model—You will need to write one program for the client and one program for the server.
-
Peer-to-Peer Model—You will need to write one program for the peer to both send and receive.
The software should have the following characteristics:
-
The client or peer should send a request to the server or another peer. A response should be sent back and used (e.g. displayed)
-
You can use either TCP or UDP.
Use the Networking README.md template.
Stretch Challenges (select one):
-
Provide support for at least three different kinds of requests that the server or the peer can respond to.
-
Provide a graphical user interface (GUI) for your program instead of the command line.
-
Modify the server or the peer to obtain information from a local file or database in response to a request from the client or another peer.
Guidance
You should consider using Python and standard networking libraries for this module. Here are some useful notes when using this suggested environment:
-
Python already has libraries to read and write from TCP and UDP sockets and servers. See the links below for information and examples.
-
You will need to run two programs at the same time to test your software. It may be easier to run these programs on separate computers that have different IP addresses. If you don't have this option, you might consider installing a virtual machine running Linux, or configuring your software to send and receive on different ports.
Here is a list of websites that you might find useful when working in the suggested environment:
-
Python Server Libraries (official site)
-
Python Socket Libraries (official site)
Project Ideas
-
Simple Chat Application: Create a basic chat application where clients can connect to a server, send messages, and receive responses.
-
File Transfer Server: Develop a server that allows clients to upload and download files securely over the network.
-
Remote Control Application: Build a remote control app that enables clients to control a server's desktop or perform actions remotely.
-
Quiz Game Server: Build a server for hosting a multiplayer quiz game where clients can connect and compete.
-
Weather Information Server: Create a server that provides real-time weather information to clients based on their location.
-
File Sharing (Peer-to-Peer): Develop a peer-to-peer file-sharing application where users can share files directly with each other.
-
Peer Discovery Service: Create a service that helps peers discover and connect with each other on a local network.
-
Local Network Game: Build a multiplayer game that runs on a local network, allowing peers to join and play together.
-
Secure Peer Communication: Create a secure peer-to-peer communication platform with end-to-end encryption.
-
Peer-to-Peer Video Streaming: Develop a peer-to-peer video streaming application for sharing video content directly between users.
Module
Data can be stored in many different formats. An efficient method for storing information is in a database. One common type of database is a relational database, which organizes the data into tables and relates them together using keys. Libraries have been written to make it easy for the programmer to read and write to and from these databases. Most relational databases support Structured Query Language, or SQL. SQL is a language that allows the programmer to easily interact with the database. Examples of relational databases include the following: Oracle, MySQL, Microsoft SQL Server, PostgreSQL, SQLite, and IBM DB2.
You can read more about relational databases and SQL at sites including the following:
-
Relational Databases - Wikipedia (open collaboration site)
-
Relational Databases - Oracle (company sponsored site)
-
SQL - W3Schools (tutorial site)
Unique Requirements & Stretch Challenges
Write a program that intereacts with a relational database using SQL. The software must have the following characteristics:
-
You must create a database for your program to use including at least one table to store data into.
-
Your software must demonstrate the ability to insert, modify, delete, and retrieve (or query) data.
-
This module requires more than just creating the database and determining SQL commands. You must write software that builds the SQL commands, submits them, receives the results from the database, and uses the results in some way.
Use the SQL Relational Database README.md template.
Stretch Challenges (select one):
-
Add additional tables to your database and perform a join in your software between two of the tables.
-
Use at least two of the aggregate functions to summarize numerical data in your database.
-
Demonstrate the use of a column containing a date or time along with a query that demonstrates filtering within a date or time range.
Guidance
You should consider using Python and ulLite for this module. SQLite is already support in Python by importing the sqlite3 library.
Here is a list of websites that you might find useful when working in the suggested environment:
-
SQLite Tutorial (tutorial site)
-
Python sqlite3 (official site)
-
TutorialsPoint: SQLite - Python (tutorial site)
Project Ideas
-
Student Records: Develop a program to manage student records, including adding new students, updating grades, and generating reports.
-
Employee Directory: Build an employee directory application that stores employee information, such as names, contact details, and departments.
-
Inventory Management: Create an inventory management system that tracks product quantities, restocking, and sales.
-
Recipe Database: Develop a recipe database where users can store and retrieve recipes, including ingredients and instructions.
-
Social Media Analytics: Create a tool for analyzing social media data, tracking trends, and generating reports.
-
Survey and Feedback System: Build a survey and feedback collection system with customizable forms and reporting.
-
Health Tracker Dashboard: Develop a health tracking dashboard that displays and analyzes personal health data, such as fitness and dietary information.
-
Expense Tracker: Develop an expense tracker app that records daily expenses and provides spending summaries.
-
Library Catalog: Build a library catalog system to manage books, authors, and borrowing records.
-
Movie Rating Database: Build a platform where users can track movies they've watched and give ratings.
Module
This module will have you create a web app using a framework that will generate web pages dynamically on the host server. Django for Python and Node or React for JavaScript are two common examples of web app frameworks.
When a request is made to your web app, the Django framework will call the appropriate Python code (a function in your views.py
) file). The Python code will then parse the request and prepare a response. To prepare a response, your code might read a database, download some data from another web server, or perform some calculations. To produce the response, a template HTML file is populated with data created by the Python function. The response is then automatically sent back by the Django framework. Using a framework can reduce the time it takes to create web content. In the case of Django, you also have the benefit of using the Python programming language to process requests.
You can read more on sites like the following:
-
Django Documentation and Tutorial (official site)
-
Django Tutorial—TutorialsPoint (tutorial site)
-
Django Tutorial—RealPython (tutorial site)
-
Introduction to Node.js (official site)
-
Node.js Tutorial—TutorialsPoint (tutorial site)
-
React Documentation (official site)
-
React Tutorial—TutorialsPoint (tutorial site)
Unique Requirements & Stretch Challenges
Write a web app using one of the following frameworks:
-
Django - Python
-
Node - Javascript
-
React - Javascript
-
Must have at least two HTML pages populated by content determined by your Python (Django) or JavaScript (NodeJS) code. However, if you use React, then you can keep to a single page with multiple interactions.
-
Your software must be interactive meaning that the content displayed in your web app must be in some part based on user input.
-
The web app should run on your local computer using the test server provided by your framework.
Use the Web App README.md template.
Stretch Challenges (select one):
-
Integrate a database into your web app.
-
Add an additional (third) dynamically generated web page to your app.
Guidance
Django:
-
You can use pip to install Django:
pip install Django
-
Django projects have several files which do not need to be manually written. The following commands are useful:
-
django-admin startproject my_project_name
—This will create the initial project files -
python manage.py startapp my_app_name
—This will create an app in your project -
python manage.py runserver
—This will start your web app. You will need to open a web browser to open the web pages.
-
Node.js:
-
The following commands are useful:
-
Use npm to install Node.js packages and frameworks:
npm install package_name
-
Initialize a Node.js project:
npm init
-
Start your Node.js server:
node server.js
-
React:
-
The following commands are useful:
-
Create a new React app:
npx create-react-app my-app
-
Project Ideas
-
Portfolio Website: Build a portfolio website for showcasing your projects and achievements, including interactive galleries.
-
Online Forum/Discussion Board: Create a forum where users can post and discuss topics, complete with user accounts and moderation.
-
Event Booking System: Build an event booking and registration system for organizing and managing events.
-
File Upload and Storage: Build a file upload and storage service with user accounts and file management.
-
Online Learning Platform: Build an e-learning platform with features for course creation, student enrollment, and progress tracking.
-
Collaborate Code Editor: Develop a real-time collaborative code editor where multiple users can edit and code together.
-
Music Player: Build a web-based music player with features for creating playlists and streaming music from various sources.
-
Task Automation: Build a task automation tool that allows users to schedule and automate repetitive tasks.
-
E-Commerce Store: Develop an e-commerce website with product listings, shopping carts, and secure checkout.
Module
You select the programming language or the type of software to create. This can be useful if there is a language, technology, or library that aligns well with either your major or interests.
Unique Requirements & Stretch Challenges
Like other modules, you will need to write software to demonstrate your capability. It is highly recommend that you communicate with your teacher before submitting your plan to get pre-approval. In your plan you need to identify the requirements you will fulfill. If you are learning a new programming language, you should consider the requirements in the other language modules.
This module cannot be done for the first or second module in the course. You must have at least a B in the course to select this module.
Note that the module plan must be submitted ahead of time before submitting the final module (e.g you can't submit the plan and the module on the same day as the instructor won't have time to approve of the self-chosen project.)
Use the Self-Chosen Project README.md template.
You need to propose a stretch challenge in your plan if you plan on pursuing one.
Guidance
If you want to do this module, it is highly recommended to do it for one of your last modules near the end of the course. You should do initial research and communicate with your teacher at least a week before the plan submittal.