CSE 310: Applied Programming

Modules 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.

Sample Research Pattern

Studying a new technology can seem daunting at first. However, using a methodical approach can help you get started quickly. You may find the following approach helpful. Let's say you want to learn PowerShell, the following pattern/example may be helpful.

Each module below will show this pattern, many modules have different technology options, the official site is listed for each technology option listed, you only need to research the one you will be using. Remember this is just a starting place, use your research abilities to find the resources necessary to complete your chosen module.

Common Requirements for all Modules

The software you write for each module has the following common requirements:

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.

Language Modules

C++

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.

Getting Started

Unique Module Requirements

Write one or more programs in C++ that demonstrates the following:


All of these basic requirements:
  • Variables

  • Expressions

  • Conditionals

  • Loops

  • Functions

  • Classes

  • Data structure from STL (such as a vector, list, or map)

One of these additional requirements:

  • Read and write to a file.

  • Demonstrates inheritance with virtual functions.

  • Use the new and delete operators to dynamically create objects.

Use the C++ README.md template.

Guidance

There are multiple options for getting C++, they include VSCode, Visual Studio, GNU GCC, etc. Use a search engine to find instructions how to setup a c++ compiler on your system. Since you have been using VSCode throughout the program you may want to continue with that.

Project Ideas

Java

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.

Getting Started

Unique Module Requirements

Write one or more programs in Java that demonstrates the following:


All of these basic requirements:
  • Variables

  • Expressions

  • Conditionals

  • Loops

  • Functions

  • Classes

  • Data structure from Java Collection Framework (such as ArrayList, TreeSet, or HashMap)

One of these additional requirements:

  • Read and write to a file.

  • Demonstrate inheritance using the extends and abstract keywords.

  • Create an interface and then use it with the implements keyword.

Use the Java README.md template.

Guidance

To set up your development environment for Java, complete the following:

Project Ideas

Kotlin

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.

Getting Started

Unique Module Requirements

Write one or more programs in Kotlin that demonstrates the following:


All of these basic requirements:
  • Variables (mutable and immutable)

  • Expressions

  • Conditionals

  • Loops

  • Functions

  • Classes

One of these additional requirements:

  • Demonstrate the creation and modification of collections.

  • Demonstrate data classes.

  • Demonstrate the varied uses of the when keyword.

Use the Kotlin README.md template.

Guidance

To set up your development environment for Kotlin, complete the following:

Project Ideas

R

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.

Getting Started

Unique Module Requirements

Write multiple functions (not necessarily part of a single piece of software) in R that demonstrates the following:


All of these basic requirements:
  • 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

One of these additional requirements:

  • Incorporate CSV file

  • Create process and send messages to the process

  • Use the case_when coding block

Use the R README.md template.

Guidance

Project Ideas

Erlang

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 characteristics:

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.

Getting Started

Unique Module Requirements

Write multiple functions (not necessarily part of a single piece of software) in Erlang that demonstrates the following:


All of these basic requirements:
  • Display output to the screen using format.

  • Pattern Matching in function parameters

  • Recursion

  • Guards

  • Lists

  • Using lambda functions with lists:map, lists:filter, or lists:foldl

One of these additional requirements:

  • Throwing and handling exceptions

  • Create process and send messages to the process

  • Use the case of coding block

Use the Erlang README.md template.

Guidance

To setup your development environment complete the following:

Project Ideas

JavaScript

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, including HTML and CSS.

The core client-side JavaScript language consists of some common programming features that allow you to do things like:

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.

Getting Started

Unique Module Requirements

Write multiple functions (not necessarily part of a single piece of software) in JavaScript that demonstrates the following:


All of these basic requirements:
  • 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)

One of these additional requirements:

  • Demonstrate throwing and handling exceptions

  • Create DOM structures with CSS (if using browser), or use 2 more npm packages if using Node.js.

Use the JavaScript README.md template.

Guidance

To setup your development environment complete the following:

Project Ideas

C#

C# (pronounced "See Sharp") is a modern, object-oriented, and type-safe programming language. C# enables developers to build many types of secure and robust applications that run in .NET. C# has its roots in the C family of languages and will be immediately familiar to C, C++, Java, and JavaScript programmers. This tour provides an overview of the major components of the language in C# 11 and earlier. If you want to explore the language through interactive examples, try the introduction to C# tutorials.

C# is an object-oriented, component-oriented programming language. C# provides language constructs to directly support these concepts, making C# a natural language in which to create and use software components. Since its origin, C# has added features to support new workloads and emerging software design practices. At its core, C# is an object-oriented language. You define types and their behavior.

Several C# features help create robust and durable applications. Garbage collection automatically reclaims memory occupied by unreachable unused objects. Nullable types guard against variables that don't refer to allocated objects. Exception handling provides a structured and extensible approach to error detection and recovery. Lambda expressions support functional programming techniques. Language Integrated Query (LINQ) syntax creates a common pattern for working with data from any source. Language support for asynchronous operations provides syntax for building distributed systems. C# has a unified type system. All C# types, including primitive types such as int and double, inherit from a single root object type. All types share a set of common operations. Values of any type can be stored, transported, and operated upon in a consistent manner. Furthermore, C# supports both user-defined reference types and value types. C# allows dynamic allocation of objects and in-line storage of lightweight structures. C# supports generic methods and types, which provide increased type safety and performance. C# provides iterators, which enable implementers of collection classes to define custom behaviors for client code.

C# emphasizes versioning to ensure programs and libraries can evolve over time in a compatible manner. Aspects of C#'s design that were directly influenced by versioning considerations include the separate virtual and override modifiers, the rules for method overload resolution, and support for explicit interface member declarations.

Getting Started

Unique Module Requirements

Write one or more programs in C# that demonstrates following:


All of these basic requirements:
  • Variables

  • Expressions

  • Conditionals

  • Loops

  • Functions

  • Classes

  • Structures and Unions

One of these additional requirements:

  • Read and write to a file.

  • Demonstrate inheritance using the extends and abstract keywords.

Use the C# README.md template.

Guidance

You can use either Visual Studio or VSCode to write C# programs. Visual Studio is Microsoft's full featured IDE, the community edition is free. Visual Studio requires more resources but has more features than VSCode. VSCode is lighter weight and you probably have it installed. For larger projects Visual studio is probably a better option. Use documentation or find a tutorial to setup your development environment.

Project Ideas

TypeScript

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.

Getting Started

Unique Module Requirements

Write multiple functions (not necessarily part of a single piece of software) in TypeScript that demonstrates the following:


All of these basic requirements:
  • Display output to the terminal.

  • Recursion

  • Classes

  • Lists

  • Asynchronous functions

One of these additional requirements:

  • Demonstrate throwing and handling exceptions

  • Use TS Lint

  • Incorporate Jest in your project

Use the TypeScript README.md template.

Guidance

Typescript is a library add-on to a JavaScript project, to setup your typescript project use the documentation at https://www.typescriptlang.org/download/.

Project Ideas

Rust

The Rust language is used for embedded and application development. While similar 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.

Getting Started

Unique Module Requirements

Write one or more programs in Rust that demonstrates the following:


All of these basic requirements:
  • Variables (mutable and immutable)

  • Expressions

  • Conditionals

  • Loops

  • Functions (ownership or reference)

One of these additional requirements:

  • Use a data structure (e.g. Vec, LinkedList, Hashmap).

  • Use slicing.

  • Use object oriented techniques using both struct and impl.

Use the Rust README.md template.

Guidance

To setup your development environment complete the following:

Project Ideas

Other Modules

Cloud Databases

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.

Getting Started

Unique Module Requirements

Write a program that interacts with a cloud database. The software must have the following characteristics:


All of these basic requirements:
  • 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.

One of these additional requirements:

  • 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.

Use the Cloud Databases README.md template.

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:

Project Ideas

Data Analysis

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 familiar Python programming language.

Getting Started

Unique Module Requirements

Write software to analyze a set of data to answer two questions about that data that demonstrates the following:


All of these basic requirements:
  • 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.

One of these additional requirements:

  • Draw a graph showing some of the results.

  • Identify a third question from your dataset and write code to answer it.

Use the Data Analysis README.md template.

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:

Project Ideas

Game Framework

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:

With so many moving components in a game, it is useful to use a game platform for development. There are several including 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.

Getting Started

Unique Module Requirements

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 need to use C# or C++ for scripting to meet the requirement of at least 100 lines of code. Visual scripting like Blueprint will not satisfy the 100 lines of code requirement.

The game must have the following characteristics:


All of these basic requirements:
  • The game should display graphics

  • The game should take user input from the keyboard or mouse

  • The game should have moveable objects

One of these additional requirements:

  • 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.

Use the Game Framework README.md template.

Guidance

You should consider using Python and Arcade for this module. Here are some useful notes when using this suggested environment:

Project Ideas

GIS Mapping

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.

Getting Started

Unique Module Requirements

Create a website or mobile app that generates a map using a mapping library like ArcGIS, Google Maps, or Bing maps. The map should include markers showing useful information. The map must demonstrate the following:


All of these basic requirements:
  • 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).

One of these additional requirements:

  • Obtain data automatically from a server publicly 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).

Use the GIS Mapping README.md template.

Guidance

GIS mapping services require you to create an account. ArcGIS, Google Maps, and Bing Maps all have free developer accounts you can create. You should consider using Javascript and HTML to create your map. ArcGIS offers many detailed tutorials for different programming languages.

Project Ideas

Mobile App

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.

Getting Started

Unique Module Requirements

Create a Mobile App using one of the following platforms:

The app must demonstrate the following:


All of these basic requirements:

  • Have at least one screen

  • Be interactive with the user (e.g. responds to inputs by displaying appropriate outputs)

One of these additional requirements:

  • 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

Use the Mobile App README.md template.

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:

Project Ideas

Networking

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, data link, 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:

Getting Started

Unique Module Requirements

Write a program that allows one computer to communicate with another computer using either of the following:

The software must demonstrate the following:


All of these basic requirements:

  • 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.

One of these additional requirements:

  • 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.

  • Obtain information from a local file or database in response to a request from the client or another peer.

Use the Networking README.md template.

Guidance

You should consider using Python and standard networking libraries for this module. Here are some useful notes when using this suggested environment:

Here is a list of websites that you might find useful when working in the suggested environment:

Project Ideas

SQL Relational Databases

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. There is a standard SQL language defined by ISO 7095, however each vendor has variations typically with added features.

Getting Started

Unique Module Requirements

Write a program that interacts with a relational database using SQL. The software must demonstrate the following:


All of these basic requirements:
  • 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.

One of these additional requirements:

  • 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.

Use the SQL Relational Database README.md template.

Guidance

You should consider using Python and SQLite for this module. SQLite is already supported in Python by importing the sqlite3 library.

Project Ideas

Web Apps

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, and ASP.NET are a few 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.

Getting Started

Unique Module Requirements

Write a web app using one of the following frameworks:

The web app must demonstrate the following:


All of these basic requirements:

  • Must have at least two HTML pages populated by content determined by your Python (Django), JavaScript (NodeJS), or ASP.NET 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.

One of these additional requirements:

  • Integrate a database into your web app.

  • Add an additional (third) dynamically generated web page to your app.

Use the Web App README.md template.

Guidance

You are encouraged to use Django with Python for this module. In addition to the tutorials in the overview section above, the following notes may be useful to you:

Project Ideas

Useful Links: