|
|
- Is that English?
- ```
- private boolean canCompressBlock(Coordinate start, int size){
- return size == (int)Arrays.stream(this.rawImage, start.getRow(), start.getRow() + size)
- .filter(r-> size == (int)Arrays.stream(r, start.getCol(), start.getCol() + size)
- .filter(c-> c == this.rawImage[start.getRow()][start.getCol()])
- .count()).count();
- }
- ```
-
- After 30 minutes of brain boiling work, I finally finished crafting the most
- beautiful lambda statement in Java. What could have simply been done in two
- nested for loops, I decided to tackle the problem with the infamous lambda
- statement-- feared by most programmers. Lambda statements by no stretch makes
- code any easier to read since the same tasks can be accomplished through using
- simpler and more recognizable syntax. Yet I decided to utilize this excessive
- lambda statement. After much contemplation, I realized that I was only using
- lambda statements due to the fact that people inside of a field typically try to
- write to impress their peers. This code chunk is clearly a sophisticated use of
- functional programming and will likely impress people inside the computer
- science community; however, 95% of my computer science class would not
- understand a single word of this statement. This poses a dilemma to newer
- programmers which may have difficulty reading this “sophisticated code”. After
- years of helping students learn to program in my high school, I know that
- students struggle with making their own code legible. Their code often lacks
- sophistication and clarity. However, at the same time many of my college
- professors which are embedded in the field of computer science often write code
- that is too sophisticated and obscure for anybody to easily understand. This got
- me thinking, how can we teach students to programming in a way that yields
- legible code for everybody in the computer science field? I turned towards
- English. It turns out that programming can take a few pointers from English to
- improve its clarity. The same skills used to teach writing can be applied when
- teaching students to program because excellent code and writing contains thought
- through structure, clear phrasing and readability.
-
- The role that composition has in programming is disputed. There are people that
- gravitate towards programming in college because it is math and science
- intensive. Traditionally, programming has been viewed solely as a science. Some
- people may argue that composition does not play an influential role in
- programming. Computers are rocks that we tricked into manipulating data for us.
- However, language is inescapable and finds a way to seep into every facet of our
- lives. Once we recognize the similarities that programming and English
- composition have, we can move towards writing more comprehensible code. If you
- ignore the parallels between writing and coding, you are disconnected from
- relationships that can further enhance your code. Tom Lynch concluded in his
- article “Letters to the Machine: Why Computer Programming Belongs in the English
- Classroom”, “If English class is where our children already learn how to
- critically engage with language, adding computational languages is a natural
- complement”(96). The same skills that we have been developing for hundreds of
- years to teach English can also be applied when teaching programming.
-
- Structure is the first thing that can make or break a writing assignment or an
- extensive programming project. There is nothing more cringe inducing than
- sitting down to read an essay only to quickly realize that is just all heaped
- into one massive body paragraph. The same is true with programming, students try
- to jam all their code into a single method like an overpacked suitcase.
- Typically teachers try to prevent the slaughter of an essay by giving students a
- graphical organizer to fill out before the pens strike paper. The most notable
- essay organizers represent the introduction as an upside-down triangle and body
- paragraphs as rectangles. The triangles helps the students visualize the
- specificity of details and the partitioning forces the separation of ideas into
- paragraphs. It turns out that this technique also yields success in teaching
- students structure in computer science. In Vincent’s master thesis he noted
- “Results indicated that when students went on to their second level programming
- course, the students who were provided templates wrote better code. The code
- they wrote was more modular, used more effective parameter passing, and was
- better documented”(63). Computer science students are provided with “skeleton
- code” where the classes and method headers are provided, but, the students have
- to implement the methods. This teaches students to make both methods and classes
- homogeneous. In other words, functions should perform one task and should be
- under 30 lines long. Functions are a lot like sentences in English where they
- should convey a single message. Classes comprise both variables and functions
- and should only express one idea -- a lot like a paragraph. You might be
- wondering why students struggle with structure in writing when they are provided
- ample templates by their teachers. In his essay “Pay Attention to the Man Behind
- the Curtain: The Importance of Identity in Academic Writing” Williams states
- that “Many students are taught that using the five-paragraph essay form with any
- semblance of identity removed is the core of academic writing and will allow
- them to march triumphantly through the writing assignments of one class after
- another”(Williams 711). The truth is, writing and programming does not always
- follow strict structural guidelines. Just like always writing five paragraph
- essays is not always the optimal solution for essays, templates also fail in
- programming. As much as we love to provide students with nifty templates to
- follow, there will come a day when students have to think outside of the box and
- formulate their own structure. Programming students need more exercise where
- they learn to structure their code into methods and classes. A good example of
- such an exercise would have students separate a cluttered chunk of code into
- methods and classes. I am not suggesting that teachers should not use templates
- to teach structure to students; however, I believe that the templates used
- should not be stressed as the only or best solution.
-
- Both concise composition and programming uses clear diction. It is frustrating
- when you read an essay and it does not register because the concepts were
- inefficiently conveyed. This is a major issue in both writing and programming.
- There are simple forms of misleading phrasing that distracts the user from the
- intended message. The simple use of obscure verbs or rambling may distract the
- reader from the intended topic. Code and literature are competing for your
- finite attention when conveying a message. If you have to read a programming
- project multiple times before understanding it, its phrasing is probably poor.
- An effective way that both English major and Computer Science majors can try to
- improve phrasing is through peer reviews. In peer reviews it becomes obvious
- which parts of your projects are hard to understand. In his paper “Letters to
- the Machine: Why Computer Programming Belongs in the English Classroom” Lynch
- noticed that as students become more comfortable with the computer dialect, they
- imagined how their audience would respond to what they wrote”(96). Programs,
- although ran on the computer are meant to be read and analyzed by other people.
- People can make their programs more readable through documentation, clear
- variable, and helper methods. Most inexperienced programmers use terrible
- variable names which have no relationship to what they are storing. Take the
- following example:
- ```
- String s1;
- String s2;
- String s3;
- ```
-
- ```
- String firstName;
- String middleName;
- String lastName;
- ```
-
- Someone skimming over the code on the top you would have no clue what the
- strings stored and would have to tear apart the program to figure out. The
- example on the bottom is crystal clear on what the variables are meant to store.
- Like programming students, inexperienced writers tend to struggle with using
- sources to support their arguments in their essays. Just like programmers lack
- documentation which informs the reader about what the program is doing,
- inexperienced writers have a hard time using sources in their essay to support
- their claims. In article “I Just Turned In What I Thought” Anne Elrod Whitney
- examined a particular student as he struggled to find a balance between personal
- ideas and sources when writing an essay(188). Although programmers and writers
- may know what they are talking about, they also need to communicate those ideas
- with the reader through ample sources and documentation.
- ```
- \++++++++[\>++++[\>++\>+++\>+++\>+\<\<\<\<-]\>+\>+\>-\>\>+[\<]\<-]\>\>.\>---.+++++++..+++.\>\>.\<-.\<.+++.------.--------.\>\>+.\>++.
- ```
- Would you believe me if I told you that the segment of code above this sentence
- when ran in a Brainfuck compiler prints “Hello World”?
- ```
- print("Hello World")
- ```
- This programming segment also prints “Hello World”, but in Python. There is a
- large variation in programming languages. However, most high level programming
- languages like Python and Java are much more readable than Brainfuck. A buzz
- word in the computer science field is “abstraction”. Abstraction is the process
- of simplifying complicated processes into something more understandable. The
- example in the top of the paragraph deals with manipulating memory registers to
- become the ascii values of “Hello World”. The problem with Brainfuck is that
- whenever you program for it, you have to translate every concept into a byte
- array. Computer scientists solve this problem by making higher level programming
- languages like Python and Java which takes care of mundane tasks under the hood.
- Vincent in his master thesis noticed that “Given the similarities between spoken
- languages and object-oriented programming languages that have emerged, there is
- much encouragement that there may be possibilities for a new instructional
- paradigm”(5). Higher level programming languages are starting to share a
- shocking number of similarities with English. With these new levels of
- abstraction, programmers are able to focus less on syntax and more on
- structured, problem solving and documentation which enables larger teams of
- programmers to work together with clarity.
-
- When you start treating code as an extension of the English language rather than
- a scientific construct, you start to write more understandable code. A few days
- ago a friend of mine asked me for help on a large programming project the night
- it was due. My brain groaned as I scanned his project, the bulk of the code was
- jammed into an ugly 300-line undocumented method. The variable names were
- obscure and there were so many nested statements that the code started to tail
- off the screen. I was unable to decipher what was happening in his program. All
- I could do for him was suggest how he could clean up his code and restructure
- his project so that he can understand what is happening where. It is hard to
- solve a bug when even the author has difficulties deciphering what is happening
- in the code. Programming is another form of communication that needs to be
- treated similarly to composition. The computer does not care what you write;
- however, it is critical that your audience is able to understand what you are
- saying with clarity and precision.
-
- ![Descriptive variable name meme](media/90703af9527d8d4aecc7eefbda5f049a.png)
|