Blog Post

Coding skills? Who needs coding skills? A semi-IT-phobic way of learning code.

Coding skills? Who needs coding skills? A semi-IT-phobic way of learning code.
The fact of the matter is many people in the humanities are intimidated by high level programming languages. Many people know some form of coding, the more common are HTML and XML, but the high level coding such as Python, Java, and C++ seem to overwhelm those who have never needed them before. In the digital environment of scholarship I would argue that most, if not everyone, should at least be familiar with programming languages. Usage in blog setup, website design, and data analysis is something that all humanities can use.

The fact of the matter is many people in the humanities are intimidated by high level programming languages. Many people know some form of coding, the more common are HTML and XML, but the high level coding such as Python, Java, and C++ seem to overwhelm those who have never needed them before. In the digital environment of scholarship I would argue that most, if not everyone, should at least be familiar with programming languages. Usage in blog setup, website design, and data analysis is something that all humanities can use.

I was intimidated at first --I have little to no math or coding skills—but I started with baby steps. I know there are a lot of humanitarians out there that may be in the same boat so I felt the need to share my strategy. Here are the steps I took:  

1.      Know the canvas. What are you studying and what kind of analytics do you need for your research? After I found that visualizing data was a grand idea. I then discovered that most data analytics involved some programming manipulation and tools that required a rudimentary knowledge of a computer language. I then set out to research what tools I could use for my projects and what coding I would need to use them. In visualization I found there were three main languages people used, Java, Python, and C ++ with R, XML, and other languages thrown in there. So which to choose?

2.      Choose the language: I started off asking anyone I knew about what I wanted to do and which language they thought would work for me. That got me nowhere because everyone has a bias to the language they learned. This did, however, give me good context to couch the rest of my search on. I also asked these individuals (found through word of mouth, social media, school, friends) where I might find tools to accomplish what I thought I needed for my analysis. They gave me a lot of tips for tools, some open-source some not, to look into. Open-source examples include Many Eyes, D3, R suite, Google Charts etc. Some of these, I was happy to find out, did not require coding. However, I also saw that the more powerful tools were more customizable when using code so I continued on my search. Until I found a tool to use I set aside deciding what language to learn.

3.      Choose the tool. What tool to choose was difficult because there are just so many out there. I found through research that there were different components that one or more tools could help facilitate –such as gathering, sorting, and then visualizing data (by no means is this an exhaustive list). So now I was not looking for one tool but I now had the possibility of looking for multiple tools. I made a list of all the actions I needed and then found a tool that met as much criteria on that list –regardless of price and availability of the tool. I did not take into account price and access because, let’s face it, there are so many tools out there that if I found one that I liked that was not open-source, or that I did not have access to, I could find one that was close enough in the open-source world.
The tools I found were:

TaDaweb is a way to gather datasets from public data feeds without coding skills. think of it as mash-up creator that lets non-technical business personnel target public data feeds from which they want to extract very specific, but constantly changing data. There is a graphical interface to accomplish this, meaning that technical knowledge is not needed to make the mash-ups. Think of the brain-child of Pinterest and Yahoo Pipes– that is TaDaweb. The basic package is free and if you want to upgrade…well it’s so new they don’t have pricing yet for that. http://www.tadaweb.com/

Oinoi is a visual analytics tool that the basic functions are free. You can upload your dataset in tab delineated or comma delineated (I like comma better). After you upload your data you can change things around and look at the visuals produced. If you want examples before you start playing with it click on the Try it now hyperlink at the top of the screen and select one of the hyperlinks at the bottom of the screen for examples sets they have. By clicking on the Dashboard icon on the left of the data screen you can play with the visuals. This is the one I mentioned in class. http://oinoi.com/index.php

I found that I was consistently being enticed to try to use the more “fancy” visualization tools (listed in #2) but for what I am researching I needed a quick and easy way of visualizing my large data sets. Oinoi worked for me and it has an easy UI. I didn’t want to gather all the data myself because a larger set of data was better for my research and doing that by hand would be a waste of valuable time –hence TaDaweb. Choosing tools that fit your project is very important because too many bells and whistles, or not the right format, will draw resources away from the project.

4.       Plug the data into the tool(s). Finding a tool that I thought was going to work was very different from actually using the tool and the tool working the way I wanted it to. I tested these and they all work just the way I wanted them to. This is not to say there aren’t other tools out there (please post any you know of!) but these are the ones I found to my liking.

5.      Back to choosing a language. Wait a tick; these tools don’t require any programming at all! That is the moral of this story. If you are not comfortable with coding and computer languages then you are not shut out of using analytic tools. There are tools out there made just for you and your needs. Here is a very handy list of visualization tools from easiest to use (i.e. without coding or too much coding) and the harder ones that need coding: (again not an exhaustive list) http://www.netmagazine.com/features/top-20-data-visualisation-tools

6.      Wrap-up to if you DO want to code: The journey I just described is meant to give you all hope if you are semi-IT-phobic. However, I did indeed want to learn a code for future use. After using the non-code tools for the project at hand I then did an analysis on all the tools I found –looking at the functions, features, prices, access, and most of all coding. The tools I would need for my research that did involve coding came back with two main languages for visualization- Java and Python. I then looked at user manuals for each, availability for assistance and/or additional training if I wanted it and I found that, in my opinion and for my needs, Python had more support and versatility then the other languages (again I did not look at all of them). So that is the language I am learning (I can write another blog on THAT process if anyone is interested). One note is to make sure you know what your ultimate goal is and what language will support that and, therefore, have more longevity for your hard work. The other note is that some of the tools mentioned (an example is Google Chart) show you example code and the output visualization so that you can learn by trial and error. This also has helped me immensely.

A caveat to all this: Acknowledging that most information specialists can use pre-programmed tools to aid in the programming landscape I believe that in order to be fully cognizant of your platforms and the inner workings of content it is within a student’s best interest to have a cursory understanding of a language. Too often do I speak with fellow students who believe that the codification work is “messy” or “not their problem” -essentially working in blissful ignorance to what is going on around them. I encourage everyone totake the initiative. Understanding all the pieces of the whole will enable you to find better solutions to problems, where enhancements can be made, and most importantly how to work smart and not hard and bring those lessons to the rest of your academic relationships.
This not only addresses learning programing languages but also to learning any number of “messy” topics that are associated with information management. In actuality, using tools that do not require coding work first might be a great way to test the waters to see if you need to learn a full-blown language and what functionality you want to be familiar with before you learn the language. Identifying your needs early on will make sure that if you do go down the coding path you will at least know where you want to end up.

I encourage comments, tips, and more tool suggestions below!

63

23 comments

Thanks for this. I recently realized, after a friend started learning basic coding skills, that I need to learn some programming for my own research and to broaden my professional horizons. This was a helpful set of tips. The most intimidating part for me is choosing a language because deciding to learn a new language seems like a big time commitment in an already busy schedule. I want to make sure that it is time well spent. I would be very interested in hearing about your experience learning Python from a "semi-IT phobic" humanities perspective!  

One question (for anyone reading): should PhDs in the humanities be learning programming on the side to broaden our post-graduation job horizons? Or is that not a good reason to learn a language (ie because an employer is just going to hire a programmer to handle programming). I'm leaning towards the former...

69

As a humanities scholar (PhD in English) now teaching primarily humanistic approaches to thinking through and working with technology within a computer science department, I've struggled with the urge to learn to program--or, rather, the creeping sense that I had to learn to program to understand my subject and, frankly, validate my perspective. This debate never seems to lose steam within the DH/humanities computing communities. Do digital humanists--or all humanists--need to code?

I decided I would. I've attended programming-for-humanists workshops, taken a 12-week intensive web development bootcamp (bloc.io), taught myself enough JavaScript and C++ to play around with Unity, and put myself through countless online tutorials in Python. My conclusion: programming is really really hard. If you don't know any code coming in, and unless you have a natural knack for thinking mathematically/in code (I do not; some people find it dead easy from day one), turning yourself into a fully fledged, independently operating programmer is going to require countless obsessive hours--and take countless obsessive hours away from things like research and writing and grad school and teaching. So it depends on your priorities. I will never be a very good programmer. Frankly, I don't have the time or the inclination to make it happen. Someone else will always be much more skilled than I, so why not collaborate with that person and work to my own strengths and interests? Isn't collaboration one of the great pleasures of DH projects? And to Caleb's question--yes, employers who are looking for programmers will hire, well, programmers. So if you're going to become marketable as a programmer, you're very right, you'll need to put some serious hours in. Unless, as I said, you're a natural. (And even then.)

However. Knowing some code and understanding how web design and software development and text mining and visualization work--what languages are useful for what tasks, what resources are required to complete a project and what it takes to get them, basic feasibility questions, etc.--has been invaluable to my ability to work and communicate with programmers and to speak, teach, write, and learn about technology. So, like Ashleigh--and this is just what's been true for me--I do recommend that humanities scholars who work with or on digital media and tools, technocultures, etc., dive into programming: just don't feel like you have to become the programmer. (Code is also crazy fascinating on a syntactic and structural level--studying how it works has helped me think about so-called "natural language"--say, English--and natural language systems differently.) 

As Ashleigh says, there are lots of ways you can use digital tools and media without writing too much code. I'll add to the list visual code editing tools like App Inventor and Scratch, which allow you to work with and learn about the syntax and operations of code without actually writing the stuff--they're often used to teach programming concepts to young people (and non-programmers). Also, markup languages like HTML and XML, while not technically coding languages, are fairly accessible to humanities folk and have direct practical applicability in many of the digital projects we end up working on. 

Thanks for the post!

 

76

I completely agree with this. It is really hard and I have tried to learn. I have learned, but I so want that fluency. It's just way harder than learning HTML and CSS, which seemed to come naturally to me. In a JavaScript class I took in my university's CS dept., we were doing an exercise that involved a ball bouncing off "surfaces" and changing its velocity and angle randomly. Think Microsoft Windows screen-saver.  Oh, also there were multiple balls that would deflect off of each other. I got transported back to grade school where I found it so incredibly difficult to wrap my head around dividing fractions. For whatever reason I just couldn't grasp it concretely, and the more I couldn't grasp it, the more frustrated I got. I think it sounds really easy to say "OK you just break your problem into steps and figure out what code you need to write to solve it."  However, for novices who jump into the deep end, there's a point at which it stops making sense and you just have to blindly try things and test them and debug as needed. I found that hard--not fully understanding parts of the code and really being afraid that even if I tried to understand, I wouldn't understand how a particular function worked. There's an affective dimension to learning to program that is terrifying if you haven't felt like the "slow kid in class" since grade school. I'm sure a self-teaching approach would be different. I wanted to experience a CS culture/viewpoint, though.

102

I did my bachelor and master degrees in computer science and currently doing my PhD in Bioinformatics. 

As a person who spent lots of his time in coding and developing new applications, I can tell you that programming is just knowing the couple of commands but it is not what we should focus on! 

The main factor for ability to code is to the ability to design the procedure for reaching your specific goals in the papers before you try to implement it using some programing language.

Your logic will lead you to the solution and the programing language will bring it to life. We must be able to have proper amount of problem solving skills before sitting behind a computer to code! 

Coding is the last step of the whole procedure! If you could write your solving steps on the paper in a clear way, then it is time to select your appropriate programing language based on your design. The coding part becomes easy by googling for the specific commands in that specific programing language which will lead you to your defined design and objective!

If we divide the total needed time for solving a problem and developing an application for it into two part. 70% of the total time should be assigned to its problem solving and designing technique and the rest 30% should be devoted to coding.

It also worth to tell that as much as you can improve your mathematical background, your problem solving techniques will be improved and your resulting applications become more efficient.  

68

Thanks for the comment Seyedsasan! It’s nice to get a CS view. May I ask you to elaborate the processes you described –“If you could write your solving steps on the paper in a clear way, then it is time to select your appropriate programing language based on your design”? This seems like a logical, and helpful, thing for people trying to tackle a computer language (or at least understanding them). What do you mean by solving steps? Can you provide an example of what you mean?

Thanks!

 

76

I should start with my context. My first degree was in computer science (quite a while ago). Anyways, as a result of my four year degree, I learned to program pretty well in one language and passibly in a couple of others. It took a full semester to learn the very basics of one language, and a year to learn it in any depth. Moving between programming languages is very much like moving between written language - some are related so knowledge is transferable, some are not at all related so you need to start from scratch. Trying to learn to be proficient in a programming language in 12 weeks without dedicating a lot of time to practice is unrealistic. It is even more unrealistic to become proficient in multiple languages that operate under different paradigms in a short period of time.

Part of the question is why bother? It is good one. In order to be good at programming you need to use it. Everytime you step away from it for any length of time means re-learning. It is like spoken/written language, it takes years to become proficient enough to speak the language and if you don't keep practicing you'll forget. Also, programming languages have a nasty habit of changing - at a rate somewhat faster than spoken languages.

So that begs the question, do you need to learn a programming language?  I think, similar to other languages, if you plan to be immersed in the culture you need to at least learn the pleasentries. Learn how to say "hello" and "thank you" in the language you are using (in programming parlance, this is learning to program "hello world"). I think it would be very valuable if everyone in the digital humanties understood the structure of a web page, the difference between HTML, CSS, and JavaScript, and understood how to code a webpage with a hyperlink and an image. That gives you enough information to learn how to "read" code and to help you explain what you want to do in a language that a programmer/engineer can understand. 

I don't think you need to know more than the basics, unless that is stopping you from doing what you need to do. If you want to understand more than the basics, you need to be prepared to give it time - it is just like learning a new language - if you don't study and practice, you won't retain any of it.

62

Thanks for the thoughtful analysis.  I prefer to avoid coding altogether - it is a difficult discipline to master.  I spent a couple of miserable years writing a complex database application in the ‘90’s (MS Access and VB), complete with recurrent headaches that seemed to be spawned by commas that did not know their place in life.  I would dream about coding grammar, and all my most difficult problems were solved in semi-lucid states. 

Basic programming skills inform scholars about  what is possible in the digital world.  This is not merely an advantage, but a critical analytical skill.  In order to appreciate digital projects critically, we should understand how they work under the hood.  

Even if I need to rely on seasoned collaborators to create elegant solutions, I should be able manipulate data crudely myself.  To that end,  and for those who are interested - there is a Coursera course in Python programming offered by Rice University next month.  It looks really cool, they have created an online programming interface so we can do the class from practically anywhere.  I’m registered.  Anyone else game?

 

76

I agree with the sentiments that everyone is sharing: that learning an entire language if you do not need to, or will not use, is a drain on time and resources better spent on something else (like more research!). Learning a programming language doesn’t mean you will be a programmer. What it does mean is that if you put it on a resume hiring staff will know you are at least familiar with the topic and may be able to work on a team better and think critically, and creatively, about new ways of doing what you do. The same can be said for a team you will be on for research. Learning the basics so you can understand the logic and to harness the collaboration skills that many have mentioned is an absolute necessity. I will be attending the Coursera Python class and I hope I can get enough out of it to shore up the knowledge I have already gained.

Another aspect no one has mentioned, albeit not directly connected to a programming language, is the act of knowledge gathering itself. If you are subscribed to journals, magazines, blogs, etc. that talk about the new technology and practices in the humanities you will be seeing more and more technical references and jargon as more of the humanities embrace technology. If you cannot understand this language then you will be at a disadvantage to gathering more knowledge to help your research and/or job later. This is something that needs to be gained through emersion because technology is changing all the time. I subscribe to a few blogs that are a bit more “techy” then I originally understood. Through emersion over time I am much more comfortable with the lingo now and have even picked up on some wonderful tools for my research (as in the ones I mentioned in my post which were found through LinkedIn blogs).  

66

I agree with the sentiments that everyone is sharing: that learning an entire language if you do not need to, or will not use, is a drain on time and resources better spent on something else (like more research!). Learning a programming language doesn’t mean you will be a programmer. What it does mean is that if you put it on a resume hiring staff will know you are at least familiar with the topic and may be able to work on a team better and think critically, and creatively, about new ways of doing what you do. The same can be said for a team you will be on for research. Learning the basics so you can understand the logic and to harness the collaboration skills that many have mentioned is an absolute necessity. I will be attending the Coursera Python class and I hope I can get enough out of it to shore up the knowledge I have already gained.

Another aspect no one has mentioned, albeit not directly connected to a programming language, is the act of knowledge gathering itself. If you are subscribed to journals, magazines, blogs, etc. that talk about the new technology and practices in the humanities you will be seeing more and more technical references and jargon as more of the humanities embrace technology. If you cannot understand this language then you will be at a disadvantage to gathering more knowledge to help your research and/or job later. This is something that needs to be gained through emersion because technology is changing all the time. I subscribe to a few blogs that are a bit more “techy” then I originally understood. Through emersion over time I am much more comfortable with the lingo now and have even picked up on some wonderful tools for my research (as in the ones I mentioned in my post which were found through LinkedIn blogs).  

73

I have signed up. I was thinking of creating a HASTAC study group in the forum. Would that benift anyone? I will set it up if enough users inform me they will use it.

60

Go for it, Ashleigh.  Thanks for starting such a great, energetic conversation.

81

-Richard

57

A study group is a great idea!

70

Here's a short class in R (Computing for Data Analysis)  that starts tomorrow: 3 to 5 hours per week, 4 weeks...  Probably just as important as Python.  I'm taking this one, too. 

51

I will usually be "in class" for this Tuesday night if anyone wants to exchange notes.

Also, I posted a new blog with some resources on R (and other coding) that you might want to check out. It is in this group as well.

The Study Group on the Coursera class titled "Computing for Data Analysis " is called Study Group- HASTAC

64

The R course has started.  Just FYI, I have a multi-monitor setup, so I'm running R on a separate monitor and pausing the lecture to run the same procedures as the lecturer just to make sure I understand the syntax.  Could accomplish the same with multiple windows on a single monitor or maybe even better, two separate computers.  I just watched the data types and subsetting lectures.  Going to watch vectorized operations before I leave for class.

74

What is the difference between multiplying the elements of a matrix (*) and a "true" matrix multiplication (%*%)?  I don't get it, but will ask my coding buddy after lunch...

73

As a Computer Science student with a deeply ingrained love of Humanities and Art, I saw programming as a means to better communicate with people and showcase my design skills in a unique way. My degree has an application (a "built in" minor) if you will in Marketing Multimedia & HCI - my passion for the user end of the process never left.

 

I think the critical thing to remember is that, at their heart, programming languages are still languages. They wear a guise of complex math and logic, but at their heart it is communicating a problem and identifying a solution. As Seyedsasan said, much of the programming process is being able to break your problem down to the point of a clear solution that can be explained with a series of instructions. If you can explain the process and its components to a human, the process of explaining it to a computer is simply a matter of "language barrier" - but luckily, the language at least has keywords in your own native language!

 

In terms of guidance for beginning a programming language, I have the easiest time with languages such as Java. Object-Oriented programming seems to resonate more easily to those with a passion for humanities and arts, at least in my experience. The fact that you are defining items almost as though they are physical things makes it an easy language to "narrate" once you know the syntax - it is easier to approach the "problem" of making a red ball bounce across the screen if you have a 'paragraph' to define the ball and all of its features first. Java and most other object-oriented languages seem to contain a great deal more English/native wording as well, making it easier to read through code even for a non-coder.

(and if you're familiar with CSS or looking to learn, the process of defining object classes is almost identical to the CSS class structure)

 

Approaching programming as a problem-solving language rather than a math-and-logic intensive science is something I believe can really help ease the fear of programming's difficulty.

I'm curious if studies of grammar construction would be beneficial to some of those who are more proficient in humanities language and communication studies to learn code. I've taken Discrete Structures at my university and am currently enrolled in Programming Languages - both classes place an emphasis and the construction of statements in code and what is "legal" and "not" - much like grammar rules in English (sentences must contain a verb and noun, etc). The classes are actually rather high level and require someone to truly gain an understanding of programming languages, but I feel they may translate well into the humanities language sphere. Are there any humanities students who have taken similar courses that might be able to tell me their thoughts?

75

Hi Briana,

I'm a student in linguistics, and I piddle about with Python for purposes of doing corpus analysis. I think you're right that rules of generative grammar and rules of programming have some cross over. In linguistics, we sometimes talk about derivations 'crashing' if a rule is broken. However, this kind of programming metaphor will only comfort students of Chomskyan linguistics. Students in literature or rhetoric typically aren't intoduced to rules-based generative grammar, and indeed, English Studies more or less rejects the assumptions of Chomskyan linguistics, focusing instead on the semiotics and contexts of language. But the metaphor can certainly help those who are pre-disposed to view human language computationally.

(Also, in natural language processing, language is viewed in terms of statistics and probabilities of utterances, not rules, so there would be a metaphorical gap even for linguists who work with programming languages to study language!)

 

 

 

84

Briana and Seth,

I am also a traditional linguist. There is a great divide between traditional and computational linguistics. A great discussion has started on it here (this is a LinkedIn group so if you can't access it please let me know). Learning a programming language is very much like learning a new language (as others have mentioned) but I haven’t had any luck applying my linguistic training to learning a programming language. I have had a LOT of success applying my linguistic knowledge to NLP processing, machine learning, and taxonomy. If you are on the humanities side of linguistics you probably would understand a lot of the above mentioned topics because its all grounded in linguistics. In fact I would say more humanity scholars should be doing research into these areas alongside the IT and CS folks.

Yay for collaboration opportunities

62

Thanks to everyone for the great responses. You have really helped me clarify what I think I should do re: learning a programming language.

49

Where did everybody go? I'll tell you that I must have spent 6 hours on the first week, and I've already spent 6 hours this week and have not even started the programming quiz. Course description said 3 to 5 hours per week.

44

The class is a little more intense because it is in a shorter format. I think it might be better if it were 6 weeks instead. 

Here are some links to things that I am finding helpful with R:

http://www.greenbookblog.org/2013/08/04/50-new-tools-democratizing-data-analysis-visualization/

and this whole blog is great but this list was helpful:

http://www.r-statistics.com/2013/06/top-100-r-packages-for-2013-jan-may/?goback=%2Egde_2013423_member_249742001#%21

63