I can’t count the number of times I’ve heard these in the past year:
“I want help learning how to code.”
“Will I have to learn to code?”
“Do digital humanities scholars need to know how to code?”
“How much do I need to know about coding?”
In every case, I’m left scratching my head: how can I begin to answer this question? What is “coding”?
What I want to ask in these cases is simpler than you might think. I want to ask what the problem is. What is the solution that you need? Do you need to display data, to run numbers through formulas, to create a nice desktop software application with a GUI? What is the purpose? We can’t begin to answer these questions without the goal concretely in mind.
And here is the one word that has come to drive me up the wall. Coding. It’s everything and nothing. I’ve heard it used to refer to everything from HTML markup to large and complex software development projects. Coding is agnostic. It doesn’t specify what’s going on. “Learning to code” could be anywhere from “I want to learn the software development process” to learning the basics of a particular language (enough to get “Hello world?”), learning a language in depth, learning scripting languages for using databases on your Web site, or marking up text using HTML and creating CSS stylesheets to go along with them. But without saying any of these, “learning to code” has absolutely no meaning. There really is no such thing. Learning the fundamentals of good programming, possibly, but a tutorial of how to make a for loop Python is no such thing (and when I dissect the coding question, this is oddly what it ends up being much of the time).
A Little Rephrasing
Having discussed the problem with “coding,” let’s move foward and try to produce a real answer to those questions at the top.
Instead of thinking of this as a kind of mysterious and wide-ranging skill to pick up, that applies to creating things with the computer no matter what kind, I will rephrase it as this: creation. Problem solving through creating something to help you arrive at the solution. We build and create all kinds of things without a computer, without giving it any instructions. We make tools and write and draw. We give instructions to our subordinates.
Putting the two big pieces together: What is your problem, what is the goal, and what do you need to learn in order to create something that will solve the problem? Leave programming language and hardware requirements out of it. What do you need to get done?
Now this is the tough part, in my experience. You have a problem and a goal. (For example, “I have all this data, and I want to discover patterns in it. I want that to be displayed as a map.”) But you need the concrete steps in it. What exactly are we working with? What do we want to do with it? How on earth are we going to make that happen? Lay it out: step 1, step 2, and so on. How are they connected to each other? Annoyed as I was at having to diagram program flow charts when I was in college, I have really appreciated their value later on. Make a map of where you have to go in your solution, including all of the stops, in order to reach your goal.
From there, I don’t want to say that the “coding” that I think people are referring to is trivial per se, but the really difficult part has already been done once the problem is thought out and possible solutions mapped. Learning to implement the solution is orders of magnitude easier, in so many cases, than coming up with robust, quality solutions and the concrete steps needed to carry them out.
My advice to all of those with “coding” questions is this: to follow the above steps, and then go out and get a human or a book that is specialized in what you’d use to solve the problem. Google is your friend, if you don’t have an all-knowing expert at your disposal (and who does?). You are probably not the first person who has had to implement your solution concretely, using a specific technology. They may not have done it in your field, but think of the problem itself and not whether it’s processing data sets from history or from biology. Get a sense of how people approached it: visualization software? A specific programming language? None of the above?
Then go get the book or that human, and put in the time. Programming – not to mention Web design in these days of CSS (yes, I started in 1996, and never quite internalized anything after table-based layout) – has a learning curve. You are not the first one to encounter it, but you can overcome it too. Go through the examples and type them in and run them. Play around with them and modify them, then try to get why you broke it and how to fix it. Even better are books or very thorough tutorials on the Web (so few and far between) that take you through a project just like the one you’re working on.
So, do you need to know how to code? Who knows. You need to be able to do – or hire someone to do – whatever the solution to your problem requires. Unless you are looking at a career in software development, no one is expecting you to become a programmer. Do you need help “learning how to code?” I hereby order you to never use that phrase again. You need help in figuring out which technology works for your problem and some advice about where to go to learn it. Now go, and enjoy this excuse for getting to learn something new and making something exciting!
Obviously, I have some personal bias here. I have a programming background, have done quite a bit of Web design and implementation (including sites that get their information from databases), and have used about 10 programming languages over the years. I’m not an expert in any of them. And I don’t always know what technology is going to help me solve my problem. What I learned, really, is that I’m going to have more or less of a learning curve, I’m going to do a lot of research figuring out what might help me the most, and that I might end up on a forum or emailing or calling someone with what I think is an embarrassingly dumb question. It happens. In fact, I just called up my brother and asked a really stupid question 2 weeks ago, but if I didn’t, it would have taken me weeks to figure out my small mistake that was killing everything. If it’s of any comfort, the first learning curve is going to be immensely harder than any of the ones that come after. Once you first “get it” from making a project work, you are going to have problem-solving and logic skills that will vastly improve your life.
So go forth and learn some new technologies! And never use the word “coding” again.