This page provides a documentation of my journey in the fourth fortnight. The fortnight's reflection highlights my growth in communicating abstract concepts to diverse audience through conscious team strategizing and ideating, to developing tic tac toe algorithms and translating the algorithms to programs that teach tic tac toe to computer agents. Prior to this fortnight, I had always played tic tac toe but had never really thought of explaining the strategy to agents with no experience and some language barriers. The activities helped me reflect on and built my documentation and communication skills, especially to groups with absolutely different backgrounds from mine.
For this activity, I was paired with Ned. This activity involved playing tic tac toe repeatedly with Ned while consciously noting his and my moves and deciphering our strategies for winning the game. We took turns in playing first and paid attention to the moves we make as the first player, as the second player, and how we try to win the games and prevent the opponent from winning. Tic Tac Toe is a game I have been playing since I was a child, and this activity was rather an interesting one. In trying to formalize my best winning strategy against my opponent, I studied our playing patterns, tried to infer our thoughts process and how our moves influenced each other's decisions. Trying to represent/document to how I reason, strategize and restrategize based on my opponent's move, and how I figure out his strategies and predict his next move was an eye-opener on just how much processes go "unnoticed" when we do things intuitively.
At the end of this activity, we both had our strategies defined and we discussed and compared what we had individually documented based on our observation as we played the game. It made us reflect on what we might want to think about when we document or communicate abstract concepts.
For us to codify the defined strategy, we needed it to be in a more explicit and logical form. In this activity, we redefined the strategy using algorithms and flowcharts. Unlike what we previously had, algorithms and flowcharts represents solutions as step-by-step processes - our strategy didn't fully capture the steps
.
To achieve this, we simulated every possible scenario, observing our decision processes, now paying attention to our moves as we progress (steps). Our attempt to represent it in a flowchart made us realize the complexity and dynamics of the decision process; flowchart was quite limiting in representing that. Unlike other step-by-step processes, an agent can take many different decisions given the same condition, having this in a flowchart was tricky. Pseudocode was more flexible in capturing these as shown in the image below.
Before representing our strategy in a flowchart, we tried redefining the strategy for audiences with no experience or intuition for playing tic tac toe; it was interesting to see how much assumptions we had about our audience prior knowledge. Just when I think my strategy is explicit enough, iterating over it exposes some implicitness in it based on some assumptions I had (but didn't know I did). The key lesson here is, our audiences shape the language we use in communicating.
Building on a provided sample code, we are now to codify our algorithm in python to create a tic tac toe agent. Coding the tic tac toe agent involved:
My thoughts on this activity is best described by the quote "If you can't explain it simply, you don't understand it well enough."
For this activity, I was grouped with Ned and Rachel to collaboratively build a tic tac toe agent over git. Our group was made of people with entirely different career backgrounds, which made it quite interesting. The experience made me realize how difficult it can be to collaborate with people with diverse background remotely. Before now, I had assumed working collaboratively remotely especially on git is usually smooth, which was mostly because I had only used git collaboratively with programmers who are also familiar with git.
Additionally, I learned to be a better communicator, especially with my code documentation. I usually don't write detailed comments or description in my code because I and my teammates have just enough knowledge of the code-base to understand what is going on. Now, I document my code not just for me and my teammates, but for anyone interested in understanding what the code does.
Communicating in the Right Language: working on the tic tac toe agent made me understand just how much effort one need to put when describing a process to an audience with no or little background knowledge. It took a lot of efforts for me to be able to describe these abstract ideas in really simple terms. It made me think of my past works and how little I had thought about my audience when documenting (I used to think I had no assumptions and it was simple enough).
Solution: I realized I need to pay more attention to my audience and understand their language. I also iterated my communication strategy over and over until the level I believe is simple enough for my audience (there might still be some assumptions I won’t notice I made because of my level of familiarity with the concepts I am communicating).
Influence from my Experience: Initially, my codes documentations were not so detailed which I think is due to the fact that I assume most of my codes will only be seen or revisited by me or my team (for group projects). My past audience are people that have the necessary knowledge needed to understand my codes, hence I grew the habit of documenting just few tips in my codes that is enough for them to understand what a code section does.
Solution: Documenting not just what a code session is doing, but also why it is there - my thoughts and decisions as I code.