Coding as an Art: Method Acting
http://wrkstrm.postach.io/post/coding-as-an-art-method-acting
This might sound weird, but my experience acting is the most relevant study/project/work I've done to prepare me as a developer.
I came to this realization after I applied for a Flatiron School Fellowship position to gain more Ruby on Rails experience. Until now, wrkstrm has a completely native Objective C codebase. There is no intermediary PhoneGap or Xamarin type of framework which uses Javascript or C# in my projects. I chose not to use those frameworks for aesthetic and moral reasons rather than the simple fact they help you ship apps. After all, I am not a paid developer. When coding, I optimize fun or enjoyment rather that practically. During the application process, one question struck me as odd:
The ability to think in a structured or quantitative way to solve complex problems is an important element of being a successful developer. Can you tell us anything that demonstrates your abilities in that realm? (feel free to include anything from standardized test scores, previous areas of study, or relevant work experience)
I submitted a response which elaborated on my experience on the Student Managed Investment Fund at Bucknell University. However, at first, I wrote out a completely different response which I would like to share in elongated form.
During my senior year in high school, I learned how to act in 3 months. At the end of my 3rd year in high school, a friend convinced me to be part of a small play - 15 minutes and only 1 scene. After coming back from summer break, the head of the theatre department persuaded me to audition for a small part in an ambitious project he was concocting. The play would be about 1.5 hours long and only feature 5 actors. Although one actor would be on stage for the entirety of the show, I was auditioning for one of the male supporting roles. To everyone's surprise, I was cast to the lead role. To this day, I don't think I have had a tougher 3 months in my life. I had to memorize 25 scenes, 5 different roles and all of the acting theory from scratch. Although this might not seem like a technical or quantitative challenge, I should probably note that I was concurrently enrolled in 3 different Advanced Placement courses: Calculus, Physics and Computer Science. As unlikely as this sounds, there are many parallels between acting and programming.
First off, acting taught me to "respect the script," meaning don't deviate from the words on the page or change the playwrights intent. Aside from programming, I have not worked on a project which required as much attention to words and syntax. As Jeff Atwood recently said, "strip away the images and gradients and vectors from even the fanciest web page, and you'll find that the web is mostly words." At the most obvious level, punctuation and even inflection are paramount on the stage. While programming, a small punctuation error will not let the program compile. On a deeper level, I have found that using different frameworks or languages require you to have an understanding of recurring patterns and the developers intent (what problems was he/she trying to solve?). I actually got into a huge argument about this during TechCrunch Disrupt NY with a couple of the main contributors to Ember.js. It turns out that one of the main commiters is a huge iOS junkie while the other didn't understand the more peculiar parts of Objective C. I argued that native development was better because it allowed you to take advantage of patterns that were either not available or clumsily implemented in web languages. In response, what I got was a demo of a table view controller that was running at almost native speeds using a UIWebView - drop shadows, rotation switching and all. I just think this misses the point. If you are not coding for iOS in native Objective C, you are missing something. You are creating apps but you are missing a huge philosophical chuck of what makes iOS great. In a play, you can ad lib or change a line to say the same thing, but not mean the same thing. The playwright thought about why he chose that verb, adjective or punctuation mark in relation to dynamics of the the entire play. In that sense, when I code for iOS I "respect the script." I don't go around inventing my own patterns or use a different language.
Second, acting taught me to tackle huge problems ("memorize this script") by breaking them down into small actions. Some directors require you to be very academic about the script and request "Beat Sheets." For example, in scene 5 line 4: What am I saying? What is my character thinking? Where am I standing? The point of a beat sheet is to document the intention behind every line. Sound familiar? It's the equivalent of composing a method's documentation. Every line must be analyzed in perspective of every scene. Every scene must be a single arc within the grand story of the play. Eventually any play can be summarized into one sentence. This one sentence must be taken into account while performing every line. To me, this is the equivalent of an App Definition Statement. More over, when I first started programming I thought that being able to code huge classes and methods was a badge of honor. Just like at my first day at rehearsal, I was also very ambiguous about how I delivered my lines in a given scene. I have since learned that it is better to code small single purpose methods and to break up huge classes into smaller ones. How should methods be implemented? How should these classes be broken up? It depends on the goal of the program. Just like an actor can put his spin on a certain role, a developer can put a certain personal mark on his code. The only requirement is that you be consistent, deliberate and keep perspective of the project as a whole.
I hope this gives new meaning to the term, "Method Acting."