Coding guide for newbs

Everyone who has been around me regularly for the past (???) amount of time knows that I’ve been all about learning to code as much as possible, and I’ve been roping a few of my friends into doing the same. So, a question that I get a lot is “Where do I begin?” There are plenty of good guides on the internet, but I wanted to write up my own guide, particularly targeted to archivists and librarians coming out of library and information science programs. I think programming basics should be a mandatory component of ALA-accredited programs, but I’ve found that at least in my MLIS experience (and anecdotally from many others), there is a severe lack, even in basic technical knowledge of computers.

Please note that I am a novice speaking to people that are even greener than me, but here are some of the web resources I recommend for figuring out if you even like programming and want to consider diving deeper, like I have. This is basically an extended form of an email I would otherwise be writing to my friend Marleigh.

I’m going to first talk about some more general, theoretical strategies and then go into a guide of some of the learning resources I’ve used and recommend.

Generally

The following resources I am going to mention are great and learning how to program has never, ever been easier than now, with a nearly endless supply of videos, podcasts, blog posts, MOOCs, books, and Stack Overflow answers. But the most important thing to realize that if you want to learn how to code, you are gonna have to do a lot of coding and problem-solving all by yourself. The best way to learn things is to try to make them, fail, and try again. That being said, sometimes it’s good to just get your feet wet before diving right in.

The second big thing is thinking about what you want to learn. If you are an absolute newbie and have never used the less-than or greater-than sign for anything other than emoticons, I recommend working on HTML/CSS first. Some people might argue that they are not technically programming languages, but it really doesn’t matter and that is a stupid argument. After that, I recommend a few others: JavaScript, Python, and Ruby. All-in-all though, don’t sweat too hard over which language to pick, because you are working on just learning the fundamentals, which are similar across all programming languages.

Ruby: I deliberated between Python and Ruby for a long time, but eventually settled on Ruby. They are both extremely popular “first language” choices because they are easy to use and learn, and they are very similar. If you are just trying to get a feel for what you like, it really doesn’t matter which one you choose. My reasons for choosing Ruby are personal. 1. As a moving image archivist, I see a lot of work needing to be done with access to digital content, and a lot of that work is done in Ruby. So it is favored by my community. 2. The Ruby community strives to be very welcoming and open, and seeks to increase diversity. 3. A lot of the coding bootcamps I was looking at were Ruby-based, so that made my decision easier (as I now will be attending Flatiron School). 4. I’m interested in web development, particularly with video on the web, and I feel like the Ruby/Rails framework suits my interests there.

Python: I started off learning Python, because that’s what Codecademy teaches in its Code Year track. I loved it, I still love it, and I like how elegant it looks just based on the “meaningful white space” component of the language. I really think Python is probably the “best” first language to learn because of its “zen”-like methodology that pushes for code to be clean, concise, well-written, but most of all, easy to read and understand by all. If you intend to work in academia or on the science side of things, Python is a definite winner here. For general automation work in your personal life, Python is great. If you are interested in hardware hacking or think you might be, Python is also great.

JavaScript: If you are digging HTML/CSS and like web development stuff, JavaScript is a good language to pick. The web is sorta being taken over by JavaScript and JS libraries. If you are into design, knowing more about JavaScript will only help you in the future.

When learning, it’s good to generally stay away from Rails (Ruby), Django (Python), and JQuery (Javascript) and try to focus on learning the actual language itself, not just the frameworks. The fundamentals are important. Even if things are harder, you are learning more by doing it “the hard way.” At least, that’s what I tell myself. Don’t avoid these things like the plague, I just recommend focusing on the basics of programming.

Flatiron School and Makersquare pre-work

Both of these coding bootcamps require 100-150 hours of pre-work from their students before the start of their classes. Fortunately for the rest of us, their learning materials are free and available online, so they can be used as guides for people just starting out.

CS50x

I took this at-your-own-pace online MOOC based on Harvard’s CS50 intro to computer science course when I started my graduate program, a bit over two years ago. I hands-down recommend it to anyone that wants a strong starting foundation in computer science, and I think it really sets someone’s mind up for a better understanding of programming language syntax and structure. I pretty much just watched all of the lectures and didn’t do the homework, but I still feel like I got a lot out of the class. If a class like this had been taught in my first semester as an undergraduate, it would have changed my life completely.

Codecademy

In conjunction with CS50 lectures, I worked through the Code Year track on Codecademy, which doesn’t seem to be (easily) available anymore. Anyway, Codecademy is maybe the most popular “learn to code” resource, and for good reasons. (One of the reasons being that it’s free, so there’s a very low barrier to entry). If you are absolutely brand new to programming, I recommend churning through the entire HTML/CSS track (or projects, as they seem to be now). It may be familiar, it’s easy to understand, and even if you absolutely hate programming and never want to do it again for the rest of your life, you will at least know how to link to a website without using an enriched web editor.

Treehouse

After hitting up a full track of resources on Codecademy, or even before, I recommend Team Treehouse. Their teaching style is through videos followed by quizzes (either questions or coding exercies), which I find to be a nice, relaxing way to learn or refresh skills when I want to still feel productive but not work too hard.

Code School

Code School is great! But definitely much more challenging than Treehouse, which is why I recommend cruising through Treehouse first. Once you are feeling like a coding whiz styling up a few websites on Treehouse, Code School is there to firmly put you back into your incredibly novice place. Code School looks easier than Treehouse, but some of the training wheels are off. Even with things I felt comfortable with, like CSS or MySQL, I would sometimes have to review the materials several times before I could solve the code exercises.

Just Doing It

I mentioned this earlier, but I really want to drive home this point. The above resources are great for getting your feet wet, but the only real way to really learn something is to just do it yourself, and frequently. You can do a million web exercises and read a redwood tree’s worth of books and bootstrap up to your neck, but it’s not gonna stick until you’ve spent a few hours really trying to tackle a problem. The above materials are training wheels, and the sooner you take them off and try to ride/write, the better. If you get unstuckably stuck, you can always put them back on, or try a smaller/easier project. The main thing is to try, try, try. You will fail a thousand times, but keep trying.

Other stuff

There are so many other online resources and essential guides, MOOCs, but I just wanted to highlight a few. Maybe I will do a follow-up post with some other resources that I consider to be super-duper-helpful or essential to my learning. In the meantime, enjoy these and don’t hesitate to get in touch with any questions.