# Computational thinking
* "Computational thinking is a pattern of problem solving that involves organizing and analyzing data, abstracting in search of patterns, and breaking complex problems into discrete, solvable parts." [Jeannette Wing, 2006, doi: 10.1145/1118178.1118215](https://dl.acm.org/doi/10.1145/1118178.1118215) 
* "It enables humanities researchers to formulate new questions and to think through how to leverage both data and computational processes to explore those questions. While these skills may be taught in the context of a particular programming language, in our case Python, the patterns of thought are transferable to any language or computational process."
[Lessons Learned from “Bridging the Gap: Women, Code, and the Digital Humanities” Reflection on 2014 ACH Microgrant by Celeste Sharpe and Jeri Wieringa](http://ach.org/blog/2015/05/06/bridging-the-gap/)

[![tasks](https://imgs.xkcd.com/comics/tasks.png)](https://xkcd.com/1425/)

*[Explain xkcd 1425](https://www.explainxkcd.com/wiki/index.php/1425:_Tasks)

[![tasks](https://imgs.xkcd.com/comics/scientist_tech_help.png)](https://xkcd.com/2341/)

*[Explain xkcd 2341](https://www.explainxkcd.com/wiki/index.php/2341:_Scientist_Tech_Help)

# Coding 
* **To learn to code is learn about structure of computers, text editors and their logic.** 
* If you research involves "organizing and analyzing data, abstracting in search of patterns, and breaking complex problems into discrete, solvable parts" then it may be useful to learn to code.  
* Understanding the affordances and limitations of a computational approach for your project will also help you better imagine, plan manage your project. Even if you are not directly involved in the coding aspect, this will give you the tools to better collaborate with those who will.

    * Introduces conceptualization/helps to understand directory structure. 
    * Helps understand how scripts work, so when you set up tools in the future, you can set them up to be useful for what you are trying to do. 
    * Getting started: learn how to use the command line, how to read technical documentation, use libraries, how to look up and resolve error messages,



## Understanding computing
This session is to familiarize you with important foundational concepts and to give you a framework for understanding the types of computational methods you can use on a projects, including: minimal computing, tool choice or coding.  Finally, this session aims to give you language to conceptualize what is possible and to communicate more effectively with partners. 

* Understanding the affordances and limitations of a computational approach for your project will help you better imagine, plan manage your project. Even if you are not directly involved in the coding aspect, this will give you the tools to better collaborate with those who will.

# Computers & The Internet
## What is a computer?  
* How do you make the computer do stuff? What is a GUI? 
* These videos will introduce terms such as: input, output, storage, CPU, hardware, software, bits, circuits, and the operating system, as well as wired, cables, WiFi, packets, DNS, IP addresses, packets and routing, HTTP and HTML, encryption, public keys, and how search works: [Code.org. Introducing How Computers Work.YouTube  at Kahn Academy](https://www.khanacademy.org/computing/code-org)

## What computational skills are necessary for your goals?
* Keep in mind: What coding language do I need to learn *or* do I need to learn to code is *not the right question,* the question is how much do I need to learn for my specific goal?
* You may have multifaceted goals, some are learning related and some are productivity related.
* They may not be mutually exclusive, but you will likely still need to make choices based on your circumstances.  


# Coding 
 Why teach coding?
“...any instructor—-in the humanities or otherwise-—must first ask herself what she hopes her students will accomplish by learning to code. *Is it an understanding of how to think algorithmically, so as to better comprehend how certain tasks can be abstracted into a series of steps? Is it a familiarity with the basic components of programming languages, so as to be able to understand how code is structured and produced? Is it the knowledge of a specialized programming language, one with specific applications in a particular field? Or is it the more experiential knowledge of what it feels like to move from defining functions and assigning variables to running executable code?"*
[Digital Pedagogy in the Humanities: Concepts, Models, and Experiments: Code by Lauren Klein](https://digitalpedagogy.mla.hcommons.org/keywords/code/) 

* Do you need to learn code?
* You don't need to be become fluent if it's not the focus of your interest, but it is helpful to have reading fluency, like any other language that is an important part of your research. Also, like any other language, use will help you retain and gain knowledge. 

## Learning some coding will help you see what is technically feasible  
* "I started to notice that the way people talk about technology is out of sync with what digital technology actually can do. Ultimately, everything we do with computers comes down to math, and there are fundamental limits to what we can (and should) do with it." [Hello Reader](https://direct.mit.edu/books/book/3671/chapter-abstract/122354/Hello-Reader)

## What is coding? Is it the same as programming?
"Put simply, programming is giving a set of instructions to a computer to execute. ...*While sometimes used interchangeably, programming and coding actually have different definitions."*
* "*Programming* is the mental process of thinking up instructions to give to a machine (like a computer)."
    * We have also referred to this as **computational thinking.** 
    * "If you’ve ever cooked using a recipe before, you can think of yourself as the computer and the recipe’s author as a programmer. The recipe author provides you with a set of instructions which you read and then follow. The more complex the instructions, the more complex the result!" 
    * [What is Programming?](https://www.codecademy.com/articles/what-is-programming)
* "*Coding* is the process of transforming those ideas into a written language that a computer can understand." 
  * Coding would be taking that recipe and laying out step by step what needs to be done,with no assumption of specific knowledge. Without coding, the program (recipe) cannot be run by the computer.  


# Hello World
**To better understand how computers make sense of the world, please read:** [Chapter 2 Hello World](https://ebookcentral-proquest-com.proxy.libraries.smu.edu/lib/southernmethodist/reader.action?docID=5355856&ppg=23) 
  * From [Broussard, Meredith. Artificial Unintelligence: How Computers Misunderstand the World. Cambridge, Massachusetts: The MIT Press, 2018.](https://merbroussard.github.io/book/)
* She talks about the three ways to do something (write Hello World): asking a person to do it, using a tool (Word or some other word processor) to do it, and using coding to do it. 
  * For your "hello world" which is your project, which of the three choices makes the most sense for you? 
     * What are the affordances and limitations of doing computational analysis for your humanities questions? 
* How do you interpret the statements that "data is socially constructed" and  "Ultimately, data always comes down to people counting things"? 
* Computers are literal: Can you describe a time in which a computer. tool or program behaved in way that was confusing to you and after reading this article, do you have explanation as to why? 

* What can computers actually do?   
  * "The gap between what we imagine and what computers can actually do is really vast... Often, we talk about computers as being able to do anything, and that’s just rhetoric because ultimately they’re machines, and what they do is they compute, they calculate, and so anything you can turn into math, a computer can do." [Interview with Meredith Broussard](https://www.theverge.com/2018/5/23/17384324/meredith-broussard-artifical-unintelligence-technology-criticism-technochauvinism) 

* Can you think of something that a human is better at doing then a computer?   

# Humanities HPC

Now that we have discussing computing, what are some of the challenges in coding for humanities projects?

*What do we mean by computing in the humanities?*

* What can be quantified?

"It's not surprising, then, that some of the first humanities projects were indexes and concordances, since the location of a word could be given a numerical value... In 1966, the first issue of *Computers and the Humanities* was published by Queens College, with support from IBM and the United States Steel Foundation." 
* [The Rise of the Machines: How to turn language, the core operating system of the humanities, into numbers](https://www.neh.gov/humanities/2013/julyaugust/feature/the-rise-the-machines)

### Complicating “Great Man” narrative of digital history 
*Edward Ayers, Stephen Brier, Joshua Brown, Daniel Cohen, Roy Rosenzweig, William Thomas*

"These are the names that spring to mind when many people think of the individuals who pioneered the theories and methods of digital history. The oft-repeated narratives about the origins of the field are almost totally devoid of women." -[Returning Women to the History of Digital History](https://www.6floors.org/bracket/2016/03/07/returning-women-to-the-history-of-digital-history/)

### What do we mean by "Humanities High-Performance Computing"?

* The term "high performance computing" (HPC) is often used interchangeably with "supercomputing." It refers to very fast computers, capable of performing calculations many times faster than standard desktop machines. High Performance Computing is used mainly by scientific disciplines for processing huge amounts of data, data mining, and simulation. 

* [Humanities High-Performance Computing (HHPC)](https://www.neh.gov/divisions/odh/resource-library/humanities-high-performance-computing-resource) refers to the use of high-performance machines for humanities and social science projects. Humanities scholars often deal with large sets of unstructured data. This might take the form of historical newspapers, books, election data, archaeological fragments, audio or video contents, or a host of others.

### Complicating computational humanities research

* What is elided in the process of computational work when using the HPC/HPRC? 

- "...valorizations of “the cloud” take  it  as  an  unquestioned  good  that  researchers will be able to turn on the spigot without talking to a plumber &#8212; the point is that researchers should just be able to get on with their work and scale it in a relatively unregulated way. It is important to ask why that is held up as a necessary good" - [Digital Humanities Application Development in the Cloud](https://dl.acm.org/doi/pdf/10.1145/3355738.3355753?download=true)


# Should you learn coding or just use a tool?
* The answer to this depends on your immediate and long term goals. 
* What are you trying to do? What are the affordances or limitations of each approach? 
* Learning programming is like learning [carpentry](https://software-carpentry.org/about/) as it is a whole suite of skills.
  * However, if you just need a specific piece of furniture, then learning carpentry (coding) may be overkill. 
  * Instead, you may just buy something that already exists (get an already existing program/tool like Omeka or Arc-GIS). If your need to common, there may already be a tool. 
    * For example, many people want a tool to do word precessing, there are many various tools that help wth that task. 
* If you sill require a custom solution you can  hire a carpenter (hire a developer/programer) to either modify an already existing tool to fit your specfic parameters or make something custom to fit your needs.

## Some questions to consider: 
* Do you see yourself using this skill in multiple contexts? 
* Do you have the time and interest to invest the time to learn the required skills?
* Have you done a search (or conducted an environmental scan) on your topic and goals? *Imagine the tool that you wished existed and search to see it exists.*
  * Contact your librarians for help with this. 

 
-----
### Attribution 

Session Leaders: [Rafia Mirza](http://guides.smu.edu/prf.php?account_id=142826/) Written by Rafia Mirza. 

Our curriculum is based on the [Digital Research Institute (DRI) Curriculum](http://purl.org/dc/terms/) by [Graduate Center Digital Initiatives.](https://gcdi.commons.gc.cuny.edu/) It is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). When sharing this material or derivative works, preserve this paragraph, changing only the title of the derivative work, or provide comparable attribution.

[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/)






-----
#### Attribution 

Session Leaders:  [Rafia Mirza](http://guides.smu.edu/prf.php?account_id=142826/) 
* Written by Rafia Mirza. 

[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/)
When sharing this material or derivative works, preserve this paragraph, changing only the title of the derivative work, or provide comparable attribution.


