Feb 15, 2011 18:02
I don't typically share my correspondence with others, but I just couldn't pass this up.
I have a group project to solve a trivially simple problem. Mouse in a maze (which contains no cycles/loops) must find cheese that is placed in an arbitrary position. Due to the nature of the maze, I will note that it can be solved with the classic "one hand on the wall" algorithm (as is noted in the documentation for the Maze class).
I took no interest in leading the group because I didn't want to make a schedule or answer questions or anything like that. I assumed my group would be unskilled, but not beyond hope. After arguing with my group leader about the inane schedule he made and his total lack of understanding how to solve the problem I realized I should have stepped up and offered to lead the group... or asked to not be in a group at all.
For reference: His approach to solving the maze is to find out where the mouse is, then find out where the cheese is, then find the shortest path between the two, then travel it. I told him this was a bad way to do it and that you could simply go everywhere and check for cheese there. He challenged me with an example problem.
What would you do?
If you're trying to get to Myrtle Beach, and you don't know where you are, and you don't know where Myrtle Beach is, how would you do it?
I would be awesome, like so:
Given the prerequisite that I'm in a finite bounded space with no cycles and I can travel at infinite speed without concern for time or fuel, I'd just go EVERYWHERE and stop when I found myself in Myrtle Beach.
He sent me the following e-mail:
Michael,
Look, we, as a group, must complete this project on time. Everyone has their own way of doing a program. My way of programming is to create the simplest and most direct way to the end result. I, also, like to know all the resources available for use in the program.
I was chosen to be the team leader for our team. However, if you feel you can do a better job of leading this team, I will gladly tell Mr. Stewart that you or Heather will be the leader instead of me. I have no problem with not being the leader of the team.
If you would like me to step down as the leader, discuss this with Heather and decide who will be the leader. If you both want me to step down I will. Otherwise, I expect everyone to follow the schedule. If you disagree with schedule, let me know your concerns and we will make changes accordingly.
-[Name Withheld]
I replied:
I have no qualms with you being the leader, but your "way of doing a program" is not only impractical, but impossible. I, too, like to know all the resources available for use in a project. That's why I read the documentation. I refuse to copy/paste the relevant parts of the documentation for everyone else to read. We all have access to the same information.
I'm assuming the reason you don't see the same problems with your method as I do are because you haven't actually considered the implementation. Yes, you can find out where you are with the getAvenue and getStreet functions, but your location is irrelevant to solving the maze/finding the cheese. You also mentioned frequently that you could find out "where the cheese is" and "go there." Ignoring the fact that there are no functions to return the location of an object within a City, we won't have direct access to the Thing object itself and will therefore be unable to call functions on it or pass it as a parameter. Furthermore, even if we know the location we wish to end in, we must traverse the intervening area to find a path.
You mentioned "shortest path," but fail to realize that finding the shortest path is an NP-hard problem. The only way to do it is to traverse all paths, note their lengths and sequences, find the least value, and recall its sequence for future traversal. Again, if the path must be traversed once anyway to find it, the Robot must be doing the traversal.
You are also falling into the trap of creating more work for yourself to save the computer from it. The computer is much faster than we are; let it do the work.
The only problems I have with the schedule itself are producing psuedocode and second hand documentation.
I have a bad feeling that most everything I said will be lost on him.
Update: He is, in fact, totally clueless.
You may not agree with my view of the program, and that is your right.
As far as the the documenting of the resources available in each class, if you do not want to create a quick reference guide for yourself, that again, is your right. However, as a member of a group, you are required to share your knowledge and tools, including any research (documentation) with the group. The whole purpose of working in a group is to share information, ideas, and the workload.
As for the psuedocode, psuedocode is a simple tool to use to create a quick understanding of the procedures needed to produce the results in normal english. Example, If a is greater than b then do c. Or psuedocode can be as simple as first create city, then robot. I do not expect to see actual code or anything close to it in this document. If you choose not to create psuedocode, that is your right.
As for the statement about letting the computer do the work, I believe computer resources, like any other resource, should be used as efficiently as possible.
I know full well what this project requires. We must create a program that moves a mouse through a maze to find the cheese. In creating a solution to this, you will need to go through some steps to find the cheese. These steps will include if statements, loops, moves and turns to name a few. You can easily determine the position of the mouse and the position of the cheese, if by no other means than setting up variables that are used to input and store the coordinates of the cheese and the mouse. Instead of using the actual name of the city, the numbers for the streets and avenues and direction, variable can be used.
Whether we need to know where the mouse and cheese are is a mater of point of view. We can create the program with and without knowing the location of the mouse and cheese.
Based on our discussion in class and in the emails, I believe you would prefer to work alone without Heather's or my input on the project. However, since this is not possible, I can assign you a portion of the program for you to work on alone and leave you to it. If we do that, then you understand that specific help with your portion will not be available from Heather or myself.
If you prefer to work alone, tell me what you would prefer to do on the project.
I am done disusing the issue with you. We don't have to agree on everything. However, we must be able to come to a workable solution or we will not get a good grade on this project. I will be glad to give you the task of creating the code to find the mouse.
cpsc,
hgtc