Programming and Me
Before I start the reflection proper, here is a bit of my programming history. I have very little coding experience. I took Java in
high school (this was almost ten years ago), and while I remember little snippets, like system.out.println(“Hello world!”) prints Hello
world!, most of it is gone from my memory. I took the information technology competency test last summer instead of taking INLS 161.
I passed, but this meant I didn’t have an in-depth understanding of HTML, password protection, trace routes, and FTPs. Still, I was
excited for this class. I put “I love puzzles and coding, to me, is like a puzzle” in my survey on the first day of class. One thing
I liked about the Java class was that all of our programs were done in pairs, which I liked – sometimes when one brain is stuck the other
brain has an idea. The only things that weren’t done in pairs were tests, and I am appreciative that we aren’t being tested in this class.
I think I will have a more in-depth understanding of Python without being tested on the nitty-gritty. On the other hand, however, this
means I often make punctuation and indentation errors while doing my homework because we are more focused on the big picture of
programming. I do like this way better, though.
Programming and Puzzles My suspicion about puzzles and coding was right. One of the highlights of my week (warning: I’m about to geek out) is doing the Sunday New York Times crossword puzzle. Usually I start, get a bit of the way through, and get stuck. Coming back to it a few hours later or the next day is very helpful, since my brain is working on it even though I’m not directly thinking about it, and then more letters are filled in quickly. The same is true for programming. I always have an open Chrome tab for each chapter exercise (in separate Trinkets), because something that trips me up on one exercise will often be solved in the next one, and I navigate back and forth a lot. I also have found it useful to come back to my code a few hours later, or the next day, and have had thoughts like, “Oh! I could use functions here!” and suddenly my options have expanded. I’ve also found it helpful to keep the “Notes” app open on my laptop to write notes for my reflection as I go. Early on in the class, I would write my program(s) and then forget the little things that tripped me up, making my reflections less detailed and less helpful to my learning.
Things That Are Going Well I have enjoyed the collaborative structure of class. The ability to see classmates’ code after pull requests have been submitted is very useful. For example, I initially couldn’t figure out how to print text and an integer from the user on the same line. So a few of my early programs were correct, but not very aesthetically pleasing:
I then looked at classmates’ versions of the same program and figured out how to do this. I also combined using integers from the user and defining them as such in the same line. I was then able to integrate this knowledge into future programs:
Relatedly, the day when everyone shared their clicky turtles programs was very helpful. I had commented in my reflection that I couldn’t figure out how to get multiple clicky functions - I wanted to define clicky1 and clicky2 and have them do different things:
Some of my classmates had thought to use the coordinate grid to specify what should be drawn where. I rewrote this part of my program such that the wand will be drawn if the user clicks on the left side of the screen, the hat if the user clicks in the middle, and the Snitch if the user clicks on the right (based on which x coordinate is clicked on). I also cleaned up the text and got rid of the congratulations animation, since it’s a bit silly, keeping the thank you text:
The other class session that was helpful was when we looked at chapter exercises on the screen and talked about problem solving strategies and ways to make our code more beautiful. I used the troubleshooting suggestions of printing integers at random places throughout the program and of printing variable types in the next homework assignment, both of which proved useful.
Things to Work On Other aspects of class have frustrated me. The idea for the flower in my first program came to me pretty naturally, and then I felt like I needed to be as creative in the next turtle assignment. I spent a fair amount of time trying to think of a theme before doing something pretty boring, which I was frustrated about. I am glad I had the idea to base everything possible on Harry Potter from now on. On the flip side, sometimes I feel nervous about experimenting because I’m worried I’ll screw things up and not be able to figure out why – I’d like to work on this going forward.
Sometimes we throw around words in class like “refactor” and “hack” that haven’t been defined – can we have a glossary or something similar? The textbook glossaries are helpful.
I think the treasure hunt was the first time we used “foreign code” – coding techniques that we hadn’t learned yet but were in the program (random numbers, while loops, and modules, for example) and these aspects confused me a lot and made this program, and future ones with to-be-learned code, a lot harder. I don’t like reading ahead to figure out more efficient ways to write my programs, simply because of information overload, but sometimes it feels necessary. I’m spending significantly more time on this class outside of class than on my other classes (for the record, Web Development (will be Mobile Web Development for the second half of the semester), 500, and 513 now, and I’ll be adding Data Sharing Among Scientists for the second half of the semester), because of the number and depth of assignments and my perfectionist brain. Maybe it would be helpful to give us a preview of the upcoming textbook chapter the class before it’s assigned.
Paired programming has been a blessing and a curse. I like the collaborative aspect – two brains are better and faster than one – and how we switch roles every so often. What frustrates me is the short amount of time we have in class and the expectation that we finish with the assignment by midnight. It’s difficult to coordinate two different schedules in the span of the twelve hours before the assignment is due. A potential solution might be to have us stop at 12:10 and make a pull request with whatever we have, and then regroup during the next class period and talk about strategies. It seems like we’re getting stuck on the same things (based on the discussions during class). Would programming as a class be too much of a mess? I really like working in groups, so I’d love to continue this activity in a slightly different format for the remainder of the semester.