While teaching my beginning Java class this morning, I again realized how important it is to learn from students. For a student, transitioning from thinking about procedural programs to developing code using Object-Oriented design is a tremendous paradigm shift. It is not always an easy one. I am always looking for better ways to explain this shift.
In class, the students are learning about inheritance, with a super (parent) class and a sub (child) class. One student was having some difficulties grasping this change, but he asks great questions. Questions are an important part of learning. As a side note, I always tell my students that the only dumb question is the question that is not asked. From my experience, a student will be thinking about that question until it is answered. This hinders understanding what is being discussed in the class. So it is better for my students to ask a question when they have it instead of waiting for an “appropriate” time to ask that question.
On the concept of inheritance, sub classes, and super classes, one student came up with the idea that a sub class is a mutation of the super class, and called it a mutant. This is an interesting concept, in that the subclass can be considered an altered version of the super class. For example, if you think of a rectangle it has two sets of parallel sides, each pair having a specific length. A square is a rectangle with all sides the same length. Most of the functions or methods in the rectangle can be used by the square sub class. The only restriction for the square is that all sides have to be the same length. A square is just a changed or mutated version of a rectangle. Once this student saw this, he better understood the concepts of inheritance, super classes, and sub classes. A sub class is just a mutant of a super class. This is a little different way to think of inheritance, but if it works that is great.
There are sometimes tough questions, to which I do not immediately know the answer. If I can help the student create methods to find the answer, we both learn and benefit. Students will not be in my class forever, so learning the tools to find the answer is important. In helping the students do this, I continue to learn new techniques and facts myself. We all benefit. When you have a question, then A.S.K.
In education, learning is important for all involved. To teach well, I need to learn from my students. This is just as important as my students learning from me.
I taught Physics at George Washington High School on Guam. I gave the students the choice of either using the Imperial System (what we use in the United States) and the Metric System, which is used in the rest of the world. This article will make a short comparison of Metric System vs. Imperial System.
At first, they usually wanted to use our usual measurement system because that is to what they were accustomed. I then gave them a simple set of questions. On the Imperial System (I will just call it the English System from here out), I asked them the units we use for measuring distance. Their usual response was inches, feet, yards, and miles. I then asked, how may inches in a foot, how many feet in a yard, and how many yards in a mile. They knew the answers until they came to the yards in a mile question. A few could tell how many feet are in a mile (probably something much easier for my current students in Colorado), but they struggled on how many yards were in a mile. I then gave them a brief chart:
Name
Multiplier
kilo
1000
hecto
100
deka
10
–
1
deci
0.1
centi
0.01
milli
0.001
Metric Conversion
Then I told them that this applies to distance with meters, liquid volume with liters, and mass with grams. Then I told them that the United States of America officially adopted the Metric System in 1865, but never implemented it because the businesses at the time thought that it would be too expensive to convert.
In addition, the French defined one cubic centimeter of distilled water too have the mass of 1 gram and the liquid volume of 1 milliliter. They always decided that the math would be much easier using the Metric System.
Working in science most of my life, I would love to see the Metric System used commonly in the United States. Besides TUMS, the second phrase I had written down from my Guam days was: Relief Of Learning Ambiguities In the Deplorable (English/Imperial) System (ROLAIDS).
Sometimes a class will seem tough, especially at first, especially when there has been a summer to forget everything you have learned. Do not give up too easily, because this is when each of us learn the most. Strive to remember and strive to learn what is not remembered. It will be remember if we try. Remembering then learning something new each day is the best use of our time.
We all need to stretch and do something we have never done before. That is the beauty of taking difficult classes. I am working to remember to jot down something I have learned each day. Our age makes no difference, we can each learn something new. I know that what may seem like the most difficult tasks, those objective that seem like they are almost impossible to achieve, are the tasks in our lives that are the most rewarding. Have you ever accomplished something that you were thrilled that you were able to do. There are many times in my life, in both career and family, that have been difficult challenges but the rewards are well worth the effort. Giving up is not really a good first option. There are often many different ways to solve a difficult problem. We each need to look for the way that serves us best.
At times we all fail, that is normal. It is what we do with those failures. One saying I have developed over the years is that there are usually two types of events that we remember the most, great successes and learning opportunities. Notice that failure is not included here. Sometimes we fall, but as Denzel Washington says, when we fall we need to fall forward so that we can see what is in front of us:
Fall forward, try something new each day. Love life and live it fully. Learn to help others and help them succeed. You will receive more successes in your life than you can ever imagine. We each need to be our best and that will make the world around us a much better place.
At both Tektronix and Hewlett-Packard, I would sometimes see a quote from R. Buckminster Fuller. It probably is not his most famous quote, but it is one that engineers often quoted when given a really difficult assignment. This was especially true when the assignment came with a tight schedule. I found out that the attitude I took into the assignment made all the difference. If I embraced the new challenge, I usually succeeded.
And this can be good
Think about how boring it would be if you were given the same assignment to do over and over. You could get really good at it, or you could start getting sloppy and not do as well at the task as you did the first time. I teach Community College level Computer Science classes. The first assignment given is always “Hello World” no matter what the language is. This teaches the students the basics in how to use a development environment for the language and create a very simple program that prints out the phrase “Hello World!” Students are usually excited when they complete this first assignment. Now imagine being given that same assignment week after week. There is no challenge and the class will no longer be useful. This is why people who do well with one assignment are given harder assignments. It is a benefit both to the person and to the organization.
Imagine a world where you have to do the same series of tasks repetitively. Would that interest you? Do people on assembly lines who do their very best but also look for ways to be more efficient enjoy their work (and do better at the job) than people who just go through the repetitive motions? The key is to do a good job and look for ways that you can contribute to your organization even more. This may lead to harder assignments, but for me that is more interesting than just doing the same thing repetitively.
Be your best, do your best, and grow with new and exciting challenges.
How many times do we start a project and then leave it incomplete and move on to other tasks? This is something that is the bane of most people, including me. This is one reason agile processes, including the Scrum Methodology were created. Breaking up any task into “bite size” (or for computer aficionados, “byte size”) subtasks is key to success. One philosophy that describes this is attempting to eat an elephant. The elephant is too big to eat all at once, as if anyone would ever really want to eat an elephant. The main point is to break up any task into manageable enough chucks to get each chunk completed in a reasonable length of time. An interesting article was written by Cory Miller from a student’s point of view, entitled “How to Eat an Elephant (Or Tackle Most Any Big, Huge, Enormous Project).” Since there will be many assignments in my classes, it is best to keep up with the calendar and complete each assignment by the due date. Some assignments will be divided into smaller assignments by me. Later assignments become more difficult and need to be divided up by you. I will give some grace period for each assignment, but I will put down an “M” for missing as an incentive to get the assignment submitted. Completing an assignment on time is best, Turning it in late has some penalties, but is far better that leaving it as missing.
For the CIS118 class, the lessons are divided up enough that just completing the assigned lessons by the due date is sufficient. If you struggle with any assignment, please reach out to me. I have done most of the lessons and will do any lesson that causes students problems. Communication is a key to success in this class.
For my programming classes, I supply a short Sample Scrum Form with the list of tasks that need to be performed and the priority of each task. Mark off the tasks as they are completed. If you have problems with any aspect of an assignment, please contact me through Teams. I will ask guided questions to see if I can help you develop your own answer, which is very important in the education process. The most learning (and joy) comes from realizing that you can succeed with knowledge you are learning in class and adding in your own insights and ideas. Listen with your “inner ear” to fully understand something. Often insights come by inspiration, hearing what has not been said.
Have you ever thought about everything that has been invented in your lifetime. For me, I remember when the IBM Personal Computer was introduced. When I bought my first, it was quite expensive and came with no hard drive. Think about how new products are created. The inventor(s) had the same information as any other person but was able to put the appropriate knowledge together, through inspiration, to develop something no one had conceptualized before. Learning is a lot like this. In class you will be given basic information about how to accomplish specific tasks. It is how you use that knowledge and how you combine it with knowledge you have gained outside of this class that helps you create the best possible product. To learn the most, challenge yourself. Don’t go with just the basic design for any assignment. Make it something unique to you. Challenge yourself to be and do your best. Doing the hard work now will prepare you for a good career in the field of your choice.
All tasks have a beginning and an end, including any class you are taking. Make the most of it. Learn skills that can be transferred to solving other life experiences. The more you take on tasks that may seem impossible now and break those up into smaller and doable tasks, the more you will be prepared for tougher challenges in the future. We can all gain the intellectual knowledge, it is when we include inspiration that we succeed. Find a quiet place to work, divide up your work into doable tasks, listen carefully and you will find the ability to complete any assignment in this class (or in life). Take the time to read inspirational books and talks. Believe it or not, that will help you solve any problem in this class. Integrate all of your knowledge and experiences together. Everything you have done can be a guide to everything you are trying to do. Plan well, work hard, and look for the needed inspiration.
Careers in Computer Science are quite rewarding and can be quite lucrative. Please explore your options and obtain a good foundation. A past article I wrote on Choosing a Career might be of interest to you. Find a career where you are enthused to come to work each day. Time passes quickly, so explore careers and try out different opportunities. Apply for internships, there are several opportunities through the high school. If you find one you might enjoy, then start searching out good colleges that have the reputation to help further your career. One such opportunity was posted on the Front Range Community College Website. There are other opportunities available. Search for them. This article was posted for students earning a Bachelors degree and wanting further education. It is just one example of what is available locally.
Bridge Program – Colorado School of Mines
Posted Mar 30, 2021 8:27 AM
It’s never been a better time to take your bachelor’s degree and pursue a graduate degree at Colorado School of Mines in computer science! CS@Mines M.S. graduates have outstanding career opportunities, with an average starting salary of $98,730.
CS@Mines has launched a new Bridge program designed for students without a CS undergraduate degree to prepare for and complete a CS M.S. in just four semesters of full-time enrollment. Limited scholarships are also available. Women and students from underrepresented groups are especially encouraged to apply.
Attend our upcoming virtual information session to learn more about CS@Mines Bridge, or visit our website for more details: https://cs.mines.edu/csbridge/
I teach Computer Science at the college level for high school students. Teaching can be a challenge, but it is very rewarding. What got me to thinking about “Keeping It Simple” was helping students with C++ and Java homework. I recently assigned a challenging problem in each class. Both languages use dividing code into subsections called classes to allow related code to be put together into single modules. Those modules are then put together to create a program that a user can run. What I have found in each class is that too often students try to over-think the problem. They sometimes produce a good but very complex solution. Complex solutions are hard to maintain both for the original programmer and anyone else who takes over the code. The most elegant code is the opposite, it is as simple and as straight forward as possible. One common phrase used where I have worked is “Keep it Simple, Stupid!” I prefer to rearrange that to “Keep it Stupid Simple!” In companies, it is important to ship a good, usable product as quickly as possible. Look at what the product (or for students, assignment) is supposed to do and then do that well. “Bells and Whistles” can be added later, but do the best simple design first. Customers really appreciate products that can solve their needs and have that quickly. Keeping it simple does not mean compromising your standards and rushing the product, but making the best product possible.
An example that shows both the advantages of keeping it simple and rushing the product to market is illustrated by the competition between McDonald-Douglas, with its DC-10 and Lockheed with its L-1011. In the 1970s, they competed in the market for planes larger than Boeing 707s and DC-8s and smaller than Boeing 747s. MD focused on keeping the design simple and safe enough. Lockheed was producing military aircraft and so was more concerned with making the best possible design as safe as possible. MD was able to come out with their plane first and even airlines, like Delta who wanted to buy L-1011s, bought DC-10s as a stopgap. Overall, they both had good safety records and the first one to market received the lions share of orders.
The C++ students have already taken one semester of programming the language and so have the basics mastered. The purpose of their exercise was to work in a group using GitHub as the repository for their code. They were assigned to work in groups of two to three and divide up the code accordingly. The actual assignment was to build a generic Account class with most of the storage of information and routines to do the main functions of an account. They then were assigned to create a checking account, savings account, CD account, and mortgage account. In Java and C++, an Account class can have what are called subclasses which can use the variables and functions from the Account class and only add or modify what is needed to make the Account class perform the functionality for each of these specific account types. Keeping it simple means knowing who is doing what and tracking each person’s progress as well as writing simple code that does the job well. Some examples of added complexity to a problem are:
Not following through on what was promised and causing one person to do the majority of the work.
Reprogramming the code from the Account class in each of the subclasses.
Using complex algorithms when more direct methods could be used.
In the Java class are all students with very little to no programming experience. The students have been doing well with the assignments so far, so I decided to give them a more challenging assignment. They were to create a Mancala board. I presented an example of the code to the class and some followed it exactly. But there were some interesting variants. One was quite good where the user decided on a different format for presenting the board and that solution presented the information for the board well. There were others, though, that tried to make the problem more complex than it really is. I showed the students several one-dimensional arrays to solve the problem. Since the students are new, a few struggle to implement a solution and made the code more complex than was needed. One created a giant two-dimensional array to try to handle everything. After working with this person, s/he was able to reduce about 15-lines of code down to about three lines, which was much easier to understand and did the needed job.
Remember to “Keep it Stupid Simple” when doing something important. This is actually an old philosophy for many things beside programming. It was first attributed to a Franciscan monk, William of Ockham. Occam Razor states that the simplest explanation is usually the correct answer. “Keep it Stupid Simple” and you will do well.
I am into my fifth decade of teaching in various forms. The one constant in all of that time is that each student is an individual with unique needs and learning styles. It is impossible to meet all the needs of all the students all of the time, but it is possible to make slight adjustments to teaching style to accommodate the needs of each student. Each student has their own special needs and talents. Those who may seem slow in one area will have other areas in which they excel. The key to teaching, for me, is to find out what it takes to have each student get to that “aha” moment where specific concepts make sense. If I can do that with individual students, I feel I have achieved one of my main goals in each of my classes. Finding each student’s motivation is sometimes difficult. Helping a person to succeed starts with helping a person to want to succeed.
I have recently rediscovered Ralph Waldo Emerson quotes when I was thinking about writing this article. I am using two of them in this article as they match my thoughts.
Be Yourself and Achieve What is Important in Your Life!
There is an old saying. “Be yourself, everyone else is taken.” We each are born with talents, that may take some effort to discover, but they are there. Some talents are easier to spot than others. I am sure we each know some great athletes or musicians who shine early in life. However, unless those talents are developed, others can become better through hard work and lots of practice. In baseball and basketball, it is often said that the best coaches are the ones who worked hard honing their skills, without all of the natural gifts of others. They know what it takes to be great, where a person who has many natural gifts that hey do use may not know how to explain how to become excellent. We each need to decide what we love and see what it would take to achieve our goals. We may not succeed in reaching the level of success we would like, but we know we tried and are grateful for the opportunities. The effort may lead to finding something that we like even more. We must not compare ourselves to other people, but must put our effort into improving ourselves. John Wooden went with the philosophy that we must “Make Each Day Our Masterpiece.” He probably is the coach with the best winning percentage of any basketball coach. He taught his players to each strive to do their best. He did not design any offence or defense around an opponent, instead he got each person to go out and do his (her) best. If we each do this, we may surprise ourselves on the success we could have.
After improving ourselves, we need to go out and make the most difference we can. Rejoice in doing “good.” The RWE quote I choice for this is:
Happiness is often achieved through personal effort. It is not something we can expect someone else to give to us. It is important to surround ourselves with good people, but true happiness comes from our own efforts to do well in all that we do. Sometimes doing what is right is not always popular, but it is what brings internal happiness. Go out and make a difference.
Each person is an individual with individual talents and needs. We each need to develop our talents wisely and find ways to share those talents with others. As we serve each other, we will be presented with opportunities for great success and happiness. We must never sell ourselves short or compromise our standards. Sometimes growth is hard, but it is well worth it. Live well and prosper!
This information is probably not as thorough as I would like. It is based off of notes I wrote on the back of a business card since I did not have any other writing material available. So, I hope I captured the major points. The purpose of the meeting was to hear from members of our community who work with technology and want the best education for our high school and middle school students.
Steve gave an overview of his Computer Fundamentals class, which he is developing and taught for the first time this semester. The course is designed to cover what computers are, what they do, how they are physically built and maintained, and what goes into making them useful. The last part includes descriptions of peripherals, operating systems, systems software, application software, and computer language. A short introduction to Python occurs during the last two weeks of the course. Many of his students would like a little longer section on computer programming. Steve then explained the two follow-on course sequences that the students could take. His sections include how to build and maintain computers, networks of computers, and security issues. My follow-up courses include an introduction to Microsoft Office and two two-semester sequences on computer programming. The two sequences are for Java and C++. The reaction of the board on the last two was interesting. They think that Python and Java are taught as introductory languages more, but C++ is more tightly coupled to the hardware and produces much faster executables. As a side note, CSU expects students to know Java, while CU and the School of Mines expect students to know C++. If we teach both, it gives students a chose that could be helpful depending on which school they would like to attend.
One phrase that was given that intrigues me is that “All Data Has Bias!” From what I could gather by some follow-up questions and remarks is that data is usually presented in some organized form. The organizer has internal biases and even though most try to be fair those biases do come through in the presentation of the data. The alternative is to do what data analytics had to do in the past and go through all the data (like the programmers of the Saturn V rocket computers analyzing the output of a data dump from a Saturn V flight. Eve a straight data dump has the prejudice of the person who gathered the data.
Some of the areas that they would like to make sure we cover in technical classes are:
Independent Research
Machine Learning
Ethics and Artificial Intelligence
Introduction to Data Science
Weapons of Math Destruction
GitHub
Project Organization (like Scrum/Agile)
Functional Programming as well as Object Oriented Programming (OOP)
Desire to Learn and Innovate
Tools like Slack, IDEs, – I would like to talk with them more on this subject.
One last thing I heard was someone mention the importance of students having a mentor to help guide them and answer questions in such a way that helps them to develop solutions on their own.
Additional Information
Here are some comments made on the meeting that might be helpful.
Diego Krapf
I received some very useful links from an undergraduate student that is working on a machine learning project. She said these were some of the best resources she used to learn about machine learning concepts. I was browsing through them and found that some are really useful and very enjoyable to watch.
“Hands-on Machine Learning with Scikit-Learn, Keras, & TensorFlow” by Aurélien Géron
Stephen Hurst
Computer Science Foundations and Office 365/2019 are probably the best way to introduce students to the field and it is why I’m leery about them, as they will soon begin to attract a lot of students, overwhelming us! I’m at 3 sections next semester and won’t be able to do that in the Fall.
I’m also concerned about our only being able to offer every-other-day certification classes. The students would learn so much more and be even more ready for the tests I could teach them every day and provide much more consistency. Note: I am also concerned about classes that are less than five days per week (or at least four) in programming. There is too much that students forget from class to class if we do not meet on a daily basis.
Data science intrigues me, and I will spend more time on it this upcoming semester as well as machine learning and a more formal approach to programming in Python. Website creation will decrease, as the students are able to achieve good website results with the free software already available to them. Unfortunately, if they want more in-depth WWW development, they’ll need to get it at college. I don’t think we have the staff or resources to add a 3rd Computer Science track.
It is important that students maintain interest in the sequence of courses. The hardware, networking, and security sequence requires the students to build on the previous course and maintain interest in the topics being covered. If students lose interest, it becomes difficult to justify teaching the more advanced courses. Note: The software language courses are only a two semester sequence and for the last few offerings have had good retention between the two classes.
Each of my Computer Science classes require a final project of complexity commensurate with what is learned in the class. The computer language used is the language studied during the semester. Currently, that is either Java or C++. This document is divided into the following areas. Deciding on a project and selecting team members should be performed simultaneously.
With whom would you like to work? Choose one to two other members of your team wisely. Each person should contribute to the project. Decide on your team at the same time your are selecting your project (step 2). Send either a chat message on Teams or an e-mail to [email protected].
Select a Project
What project would your team like to develop. Choose wisely. It should be related to what you have developed so far. Examples are Mancala in CSC160 C++ and Connect Four in CSC161 Java using JavaFX. Make it complex enough to make it interesting, but not so complex that it cannot be done within the time left in the semester.
Create and/or Open a GitHub Account
Repositories are vital to creating a large project. It allows code to be saved in an easily accessible location that saves the code as it is revised and allows the user to access any revision that might be needed for any purpose. The preferred Revision Control System is GitHub. Please go to this location and either login or create an account and then login. Be sure your name is unique and easy to remember. GitHub is connected to all Development Environments like Visual Studio for C++ and IntelliJ Idea for Java. GitHub uses Git on your local system as the interface. Be sure to download Git to your system.
Integrate GitHub with Microsoft Visual Studio 2019
Here is how to integrate GitHub into Microsoft Visual Studio.
Create an Initial Design and Assign Sections
There are several formats for design. The main attribute is that it has enough information to be helpful. One method I would recommend is Object Oriented Design Using UML (Universal Modeling Language). An example is Rubber Ducky Corporation. Know what you want to do and then start deciding what that is. If you are using Classes, use UML Diagrams to describe their interfaces. An example of a UML follows. It has a Person Class with two classes that inherit from the person class, a Customer Class and a Personnel Class. Just for your information, the symbols are as follows:
# – Protected item, accessible by Class and all Subclasses.
– – Private item, accessible within the Class only
+ – Public item, accessible by everyone
UML Diagram for Class Person and Subclasses Customer and Personnel
The above diagram was created from Microsoft Word. There are several tools that are available that are better than Word. A list of twenty-eight is at BEST 28 UML Tools in 2020. A single one which one of my students recommended is app.diagrams.net. This last one looks interesting. It allows saving the files to one of your online repositories like Google Drive or Microsoft One Drive. This makes life easier but it also requires you to log into your storage device through their interface. When you have added the Git/GitHub integration, you can start creating the needed classes. The first example is for C++ and Visual Studio.
On the bottom of the Rubber Ducky Corporation page is a list of tasks to be done from most to least important. Go ahead and fill it out and decide how long it would take to do each task. Build a schedule based on your analysis.
Set up your GitHub account within your team. Decide which modules you will be writing in each daily scrum. Decide on the order in which your team will write these modules. The modules that are scheduled last, write interfaces that accept expected arguments and return something appropriate. The logic does not need to be written yet. But a stub needs to be written so that the modules that are being written can call the unwritten module and get something reasonable in return. The best way to show how this is completed is by example.
C++
To use a class method, both the header including the needed Prototype and the file containing the code must be written. Here is the header file:
#pragma once
/* BoardSample.h
* Wayne Cook
* 17 November 2020
* Purpose:
* Create a sample class to show how to create a stub in developing one method to use
* in your code development.
*/
#ifndef __BOARDSAMPLE__
#define __BOARDSAMPLE__
#include <random>
using namespace std;
// Set up the class in which the method will reside.
class BoardSample
{
public:
BoardSample();
~BoardSample();
/* playerMove(int &)
* Input - pointer to the player variable which indicates whose turn it is
* Output - returns in the player variable whose turn is next
* 1 - player 1
* 2 - player 2
* 0 - side empty
*/
void playerMove(int&);
private:
};
#endif
then the code must be written. In this case I use a random number generator to create the player value of 0, 1, or 2:
/* BoardSample.cpp
* Wayne Cook
* 17 November 2020
* Purpose:
* Create a sample class to show how to create a stub in developing one method to use
* in your code development.
*/
#include "BoardSample.h"
// Default constructor and destructor
BoardSample::BoardSample()
{
}
BoardSample::~BoardSample()
{
}
/* playerMove(int &player)
* Input - pointer to the player variable which indicates whose turn it is
* Output - returns in the player variable whose turn is next
* 1 - player 1
* 2 - player 2
* 0 - side empty
*/
void BoardSample::playerMove(int &player) {
/* Set player equal to 0, 1, or 2 for simulating the results of a completed method
* after code completion. A random number divided by 3 gives the desired results.
*/
player = rand() % 3;
}
Java
Java is a bit simpler. It only takes one code file.
/* BoardSample.cpp
* Wayne Cook
* 17 November 2020
* Purpose:
* Create a sample class to show how to create a stub in developing one method to
* use
in your code development.
*/
import java.util.Random;
public class BoardSample {
Random random = new Random();
/* playerMove(int player)
* Input - pointer to the player variable which indicates whose turn it is
* Output - returns in the player variable whose turn is next
* 1 - player 1
* 2 - player 2
* 0 - side empty
*/
int playerMove(int player) {
int retVal = 0;
/* Set player equal to 0, 1, or 2 for simulating the results of a completed
* method
after code completion. A random number divided by 3 gives the
* desired results.
*/
retVal = random.nextInt(3);
}
}
Daily Scrums
Scrums are usually done for two weeks sessions. They are based on the Agile Manifesto. In normal development cycles, a Scrum last two weeks. The name is based on how Rugby is played. Read the Scrum Manifesto to have a better idea of how to run your daily scrums. Each day submit a description of each task you have completed and what is scheduled to be done the following 24 hours.
Final Submittal of Code and Presentation
Be prepared for presentations on the 14th and 15th of December. Have your software ready to be submitted and demonstrated.
Posted inC++, Final Project, GitHub, Java, UML|Comments Off on Final Project Guidelines for Computer Programming Classes