I have to say, someday I hope that I have the coding skills that Lingjie does. Her drawing app was elegantly coded, creative, and did everything that it was supposed to.
In regards to evaluating everything that the drawing app was required to do, this program met most of these requirements. There was no printed text input, just the instructions that were written on the screen in a clear, readable font. The interface used the onclick and onkey commands to determine what type of shape would be drawn on the screen and then the color of the shape that would be drawn as well. While you could intuit the current mode that you were in by clicking on the different shape options, there was nothing on the screen that said what mode you were in. I didn’t feel like this took away from the game though, since as long as you remembered what mode you had clicked on, you still knew what keys to press to create what color and how to switch to other shapes. I was a little confused about why there was some information printed in the box below the main screen whenever the user would click on the screen to draw a shape (I think these were the coordinates used when clicked on), and I was also not entirely sure that I understood the part of the directions that said “Fill Color, Left, Right, or Up.” These could have used a little clarification, but it doesn’t actually take away from the functionality of the program. This program focused on drawing shapes and switching colors, which it did effectively. There were no instances for the user to draw lines. Lastly, the user was able to clear the drawing by pressing the “Restart” button and it did so while cycling through a variety of situations. The overall functionality of this app was amazing; it moved at a normal pace, seemed to have no glitches, and was an interesting thing to play with.
In terms of the evaluating the actual code for the drawing app, I found that this program met most of the requirements. There were three custom modules with different purposes. The main.py module contained the functions for actually interacting with the program such as the onclick and onkey functions and defined the colors that were used in each function. It was also the module that called the major function that put the program into action. I considered this one the “meat” of the program. The background.py module contained the code that was used for the setting up the screen (i.e. drawing the buttons, setting up the background, and writing the directions on the screen). The last module was drawshapes.py which contained the functions for drawing the moon, cloud, sun, and whirl. Each of these modules was divided in a sensible way that made it easy to understand the intention behind these separate modules. Custom functions were used in each of these modules and helped decrease the length of code that was written in each module. I did not feel confused while reading through the code, and it was easy to understand the intention that had gone into creating each function. There were indefinite loops (while loops) used in this code, but there were no definite (for) loops used in this program. I believe that this is partially my fault since I mentioned that integrating for loops would be a good idea on Tuesday, but I thought that while loops also fell under the definition of a definite loop. If I had understood the difference between the two then I would have given better advice in our pair programming session on Tuesday. There were also multiple turtle objects called, since there were three turtles whose names were tina, dj, and jh. Tina was the drawing turtle, jh was the turtle who drew the buttons for the screen, and dj was the one who drew the instructions on the screen. The screen object was myscreen and used for setting up the background. Also, the program runs without errors, is well commented so that I know the purpose of each function, and is well-organized and readable, especially since I wasn’t familiar with her code initially.
I remember from our pair programming session on Tuesday that Lingjie’s code was basically already done, and she could have submitted what she had for the final product. I noticed in looking over this code though that she did make some small changes to make the code run a little bit easier, and I admire this dedication to make a nearly perfect program even better. To me, this demonstrates a true desire to work with and adapt the code as well as challenge herself to improve something that is nearly perfect anyways.
Looking over the milestones for this project, I see that Lingjie was able to meet all the milestones that she set out to accomplish. Thinking of developing my own program, I can learn from Lingjie’s approach to programming and create more reasonable milestones from the outset to help myself stay focused on the final product. I also appreciate her persistence and ability to create fairly complex code but to be able to portray it in a way that is easily understandable to other people. I can work on clarifying my problems and programming strategies. One thing that I think she did really well that I wish my program had was making the program run smoothly and understandably so that all her functions and bunttons worked. It was a clean, precise program.
Overall, this was an amazing program, and I am really impressed with all that all Lingjie did. Great job!