Designed for use with GitHub Classroom, this repository contains the starter files for a final project in a Data Abstraction introductory computer science class. GatorGrader and GitHub Actions Continuous Integration are not used for this assignment.
You can choose to work individually or in a team for this project assignment. GitHub Classroom project assignment is set up to be an individual assignment. If you are working in a team, please have one team member accept the assignment and establish the repository. Then, contact the instructor or a technical leader to add the other team members to this repository. Finally, change the name of the repository to reflect that this is a team project.
Throughout the semester, you have learned the underlying workings of the programming language design and experimented with various programming languages. The course project invites you to explore, in greater detail, specific programming language(s) design or its application.
Your project should result in a detailed report that includes all of your source code, in addition to written materials and technical diagrams that highlight the key contributions of your work. This technical report should include a description of why the chosen topic is important and discuss the implementation and/or experimentation that you undertook. The written material should be precise, formal, appropriately formatted, grammatically correct, informative, and interesting. The source code that you write must be carefully documented and tested. If you install and use existing computer software, the steps for installation and use should be clearly documented in your report. Also, the report must explain the steps to run your programs. Finally, if you work in a team, your report must detail the work completed by each member of your team; individual contributions should also be reflected in commits to the team's repository. In addition to writing the aforementioned final report in Markdown, you will also use Markdown to write and submit a project proposal and a status update at the intermediate deadlines.
To ensure that you are best prepared to complete this final project, please review all of the chapters that we have covered up to and after the release date of this assignment.
If you have not done so already, please read all of the relevant GitHub Guides that explain how to use many of the features that GitHub provides. In particular, please make sure that you have read the following GitHub guides: Mastering Markdown, Hello World, and Documenting Your Projects on GitHub. Each of these guides will help you to understand how to use both GitHub and GitHub Classroom.
Students who want to learn more about how to use Docker should review the Docker Documentation. Students are also encouraged to review the documentation for their text editor, which is available for text editors like Atom and VS Code. You should also review the Git documentation to learn more about how to use the Git command-line client. In addition to talking with the instructor and technical leader for your course, students are encouraged to search StackOverflow for answers to their technical questions.
Students are invited to pick one of the following projects. Please note that a student or a team selecting the student-designed project must first discuss the idea with the course instructor, and receive feedback and then final approval. Please note that you are fully responsible for ensuring the feasibility of the final project that is proposed.
-
New Language: Design and implement your own programming language. It can be very small but it must contain and specify all of the components pertaining to a programming language, and have some purpose/application behind it.
-
Combination: Select a realistic problem and implement a solution to it using a combination (at least two) of programming languages. The languages must interact with each other in some way. You are allowed to make use of tools that help bridge the gap between languages. You need to be able to justify how mixing languages is beneficial for the problem you have chosen.
-
Functional Programming: Select a realistic problem where a functional language implementation is beneficial, and provide a solution to the problem in a functional language (e.g., Lisp, Haskell). You need to be able to justify why a particular functional language is useful for the problem you have chosen.
-
Translation: Select two languages and write a translation program that takes a program written in one language and translates it into another language. It does not need to be very complicated or sophisticated, you may choose which aspects of programming languages you want to incorporate and which you want to avoid. Select existing programs or write your own as test cases; your translator should be able to translate at least 500 lines of code - combined from your test cases.
-
Student-Designed Project: Students will develop an idea for their own project that focuses on one or more real-world topics in the field of programming languages. After receiving the course instructor's approval for your idea, you will complete the project and report on your results.
Please note that the course instructor expects students to implement and evaluate all of the source code needed to complete their proposed project. As such, there are no provided source code files for this assignment. You must store your programs in an src
directory. You will also need to edit the three Markdown files in the writing/directory
by the stated deadline. Recall that there are no GatorGrader code checks since each final project is different.
In GatorGrader's absence, you should establish correctness checks for your source code. Importantly, you must implement test cases to assess your programs' correctness. Also, make sure to regularly commit to your GitHub repository.
This assignment invites you to submit, using GitHub, the following deliverables.
-
Completed, correct, fully commented, and properly formatted versions of all source code files.
-
A three-paragraph written proposal, saved in the file
writing/proposal.md
, with an informative title, a description of the main idea, an initial listing of the tasks that you must complete, and a plan that you will follow to complete the work. -
A two-paragraph status update, saved in the file
writing/update.md
, that explains what you have already implemented and the steps that you will take to finish your project implementation. -
Participation in a Code Walkthrough. Code Walkthrough is a peer review of the code in which an author of the code leads the review process and the reviewers ask questions and spot possible errors. The technical leader and the instructor will act as the reviewers. Each project's team members (or a single member) is considered to be an author of the code. For each written program, the author(s) will describe the written program by going through the code line by line and explaining the purpose of each line or a sequence of lines. The reviewers will provide feedback at the end of the review of each program or a complete review of programs, as appropriate. At the end of the walkthrough, the reviewers will report a list of findings and also identify high level action items, which will include the required next steps for the author(s) to take.
-
A detailed final project report, saved in the file
writing/report.md
, that documents, in a project-specific fashion, how you designed, implemented, and evaluated your system. This Markdown-based document should also explain and include the input, output, and the challenges that you confronted when implemented the project. For every challenge that you encountered, please explain your solution for it. If worked in a team, this document should also explain how your team collaborated to finish the assignment, with each team member writing their own paragraph inside of this Markdown file. Finally, your report should include information on how to compile/run your system and if there are dependencies beyond what is included in theprogator
, specify commands necessary to install these dependencies. -
A commit log in your GitHub repository that clearly shows incremental progress made on the assignment.
You must complete all of the aforementioned deliverables by the following due dates:
-
Project Proposal: Thursday, November 19, 2020: After brainstorming ideas during the lab session, pick a topic for your final project. Remember, if you select the student-designed project, you must first have your project approved by the course instructor. Next, make sure that you accept the assignment and create a GitHub repository that can be accessed by the instructor. Finally, write and submit a proposal for your project. Your proposal should have an informative title, a description of the main idea, an initial listing of the tasks that you must complete, and a plan for completing the work.
-
Status Update: Tuesday, December 1, 2020: As you continue working on your project, please write and submit a two paragraph status update through your Git repository.
-
Code Walkthrough: Tuesday, December 1, 2020: You should give a demonstration, during the laboratory session, highlighting the most important code that you have finished. Code walkthrough is an informal process where code is reviewed for technical accuracy with the objective of finding errors and improving the quality of the code. The author(s) of the code lead the code walkthrough. The main purpose of walkthrough is to help authors gain an understanding of the content of the project and identify its potential flaws. Note that the goal of a walkthrough is an error detection, not error correction. When the walkthrough is finished, the author of the output is responsible for taking the necessary actions to correct the errors.
-
Final Project Due Date: Friday, December 11, 2020 by midnight: You should submit the final version of your project through your project's GitHub repository. This submission should include all of the relevant source code and output, the written reports, and any additional materials that will demonstrate the success of your project. While you are encouraged to turn in the final project earlier, students must submit the completed assignment no later than 11:59 pm on the due date.
You can use Docker for this course project. This provides an environment with the languages that will be used in the class and ensures that everyone uses the same versions for help and grading purposes. Follow the instructions below, which can also be found at the progator
Docker image link provided below, to get started. progator
supports the following languages: Java, Python, C, C++, C#, F#, JavaScript, Go, Haskell, Perl, Rust, Fortran, Racket, Ruby, Cobol, and Lisp.
If you haven't done so already recently, please download automated build from public Docker Hub Registry:
docker pull janyljumadinova/progator
You can check that you have the progator
image by running the following command and verifying that you see progator
in the list of your Docker images:
docker image list
Now, run the docker container and mount your "project" directory as a volume by replacing your-path/local/working/directory
in the following command with the path to your "project" directory:
Mac OS:
docker run -d -p 80:80 -v /your-path/local/working/directory/:/root/environment janyljumadinova/progator
Linux OS:
May need to use sudo
as:
sudo docker run -d -p 80:80 -v /your-path/local/working/directory/:/root/environment janyljumadinova/progator
Windows OS (note the quotes in path):
docker run -d -p 80:80 -v "C:\Users\your-path/local/working/directory/":/root/environment janyljumadinova/progator
You can check that you have correctly started the Docker container:
docker container list
When you are finished working with progator
do not forget to stop progator
container by getting the container ID from the command you ran in your terminal:
docker container list
and then stopping the container by running the following command (replacing container-ID
with the actual progator
container ID in your terminal:
docker container stop container-ID
You should also remove all unused containers and images (both dangling and unreferenced) by running the following command:
docker system prune -a
Once you have localhost open in your browser, all other instructions will be completed in that window. If you close the window, just go to localhost again - you will not lose anything.
When you open localhost, you will see:
On the left side, click on the Explorer icon (2nd down). Click Open Folder and enter "/root/"
In the Explorer frame, right click, and click on Open in Integrated Terminal.
You now have a terminal in which you can run most typical Linux commands. Ubuntu 20.04 is running with VSCode. Most work will be completed in the terminal. You are encouraged to mount a directory as a volume as described in the documentation at progator Docker Image so that you can have access to your local repository files, which can be accessed from the "environment" directory in "root".
Here are some additional commands that you may need to run when using Docker:
docker info
: display information about how Docker runs on your workstationdocker images
: show the Docker images installed on your workstationdocker container list
: list the active images running on your workstationdocker system prune
: remove many types of "dangling" components from your workstationdocker image prune
: remove all "dangling" docker images from your workstationdocker container prune
: remove all stopped docker containers from your workstationdocker rmi $(docker images -q) --force
: remove all docker images from your workstation
If you are having trouble completing any part of this project, then please talk with either the course instructor or a student technical leader during the lab session. Alternatively, you may ask questions in the Slack workspace for this course. Finally, you can schedule a meeting during the course instructor's office hours.
The grade that a student receives on this assignment will have the following components:
-
Proposal [up to 10% of the project grade]: Completed proposal document satisfying requirements of the proposal document specified above.
-
Status Update [up to 10% of the project grade]: Completed status update document satisfying requirements of the status update document specified above.
-
Code Walkthrough [up to 15% of the project grade]: Participation and
-
Final Implementation and Report [up to 65% of the project grade]: As a part of this grade, the instructor will assess aspects of the project including, but not limited to, the correct and useful source code and Markdown report, its evaluation, the use of effective source code comments and Git commit messages. Your grade will be reduced if insufficient details are provided on how to run your source code or if it does not describe the necessary input to your system or does not include its sample output. Students are encouraged to ask the course instructor or a student technical leader to use the GitHub issue tracker to provide feedback on how well their work demonstrates mastery of the assignment's technical knowledge and skills.
All grades for the assignments in this course will be reported through Canvas. Feedback on project assignments will be provided through a student's GitHub repository using the comment in the "Feedback" pull request.