nov13_b.indd C&RL News November 2013 522 Once of interest mostly to computer sci-entists, computer programming and Web design topics have started to percolate into the general consciousness in recent years. This newfound popularity was first noticed by many when Codecademy launched its Code Year initiative on January 1, 2012, blowing past 100,000 registrants in 48 hours and even drawing the attention of New York City’s Mayor Michael Bloomberg.1 But, this site is just one example in the rapidly developing landscape of online computer programming resources. Now, a plethora of tools exist for teach- ing oneself a wide range of programming languages and Web design skills. Whether you want to design a Web site, create a game, visualize data, or build a mobile app, there is a resource out there to help you. In fact, so many resources exist that it can be difficult to determine which tools are best suited to your goals. The first step to picking the best resource for your purpose is to decide how you hope to use your new skills. To do so, it is impor- tant to understand the difference between programming languages and HTML/CSS. HTML and CSS define the structure and style of online documents. They are important tools for designing usable and engaging Web sites, but they are not programming languages because they do not allow you to express an algorithm or tell a computer how to complete a task.2 This article will highlight a variety of re- sources that will help beginners to get started learning a range of computer programming languages and, in many cases, Web design skills. Whether you are interested in suggest- ing resources for students who are taking a computer programming class at your institu- tion, offering a guide for those who want to teach themselves these skills outside of the classroom, or simply wanting to advance your own skills for professional development purposes, this guide will offer resources tai- lored to these needs. Most of the resources mentioned here are free; those that require a subscription for full access to all aspects of the service will be noted. Organization Web sites Nonprofit organizations that are devoted to supporting those interested in learning pro- gramming skills or maintaining the languages themselves can be some of the best sources of information for those interested in learning to write code. • Code.org. This nonprofit organization is probably best known for the video it released showing famous figures, including Bill Gates and Mark Zuckerberg, talking about their experience learning to code and encouraging people to try computer pro- gramming. The organization also curates an impressive collection of resources and links for both teachers and others interested in Carli Spina Learn computer programming and Web design Choosing the best resources Carli Spina is emerging technologies and research librarian at Harvard Law School Library, e-mail: cspina@ law.harvard.edu © 2013 Carli Spina internet resources November 2013 523 C&RL News getting started with computer programming and Web design. Resources are divided by topic and include tools to learn both pro- gramming languages and Web design skills. Access: http://code.org/. • Mozilla Developer Network. This site is a wiki designed to allow anyone to access and contribute to the ever-growing collec- tion of documentation, tutorials, and other educational materials for the programming language JavaScript, as well as HTML and CSS. For those who are just getting started with JavaScript or HTML/CSS, the site offers a good combination of introductory materi- als and links to tutorials. It is a good site for users at various levels of proficiency, and especially those who are interested in getting involved with the Mozilla Developer Network community. Access: https://developer.mozilla. org/en-US/. • Python. The official site of the Python programming language is the best source for information about choosing the optimal version of Python for your needs, as well as how to install it in Windows, Mac, or other environments. It also offers access to the full documentation that is available for Python and additional introductory materi- als for those who want to move beyond the basics. In addition to these technical materials, the site is also a great source for connecting with the Python community by joining a mailing list, contributing to the wiki, or finding a local user group. Access: http:// www.python.org/. • Ruby. Much as with Python, the Ruby community has a Web site that offers access to the official documentation for the language, installation information, third-party libraries, and tutorials. This site also offers many ways to interact with and participate in the Ruby community through links to the Ruby IRC Channel, local user groups, blogs, e-mail lists, and information on conferences for those who want to meet in person with other Ruby users. Newbies will particularly appreciate the fact that the site links to several tutorials for beginners on each page, including one that helps those who are experienced in other programming languages to make the transi- tion to Ruby more easily. As of the time of writing, the content had been translated into 15 different languages. Access: https://www. ruby-lang.org/en/. Tools for visual learners For those who are completely new to com- puter programming, the idea of writing code can be a bit intimidating. These tools can make the process more accessible through their use of drag-and-drop elements and a visual approach to teaching basic program- ming concepts. • Google Blockly. Described as a “graphical programming editor,” Google Blockly makes use of blocks that are similar to the pieces found in Scratch (see below) to create programs. What sets this apart from Scratch is the fact that programs that are cre- ated using this drag-and-drop technique can then be exported as JavaScript, Python, or XML code, which can help users to make the connection between the graphical interface and these languages. All of the code is open source, making it possible for educators to use it in their own projects. Access: https:// code.google.com/p/blockly/. • MIT App Inventor. Using a similar interface to that found in Google Blockly, the MIT App Inventor lets users create apps for Android devices using a drag-and-drop interface. The entire process from idea to functional app can be done without writing a single line of code, making it more ap- proachable for beginners. The site also offers a number of tutorials and curricula for using the tool in courses at all levels, including undergraduate and graduate levels. All of the code for the MIT App Inventor is open source and available on the site. Access: http://ap- pinventor.mit.edu/. • Scratch. Scratch was created by the MIT Media Lab’s Lifelong Kindergarten Group as a tool to introduce programming concepts to children. Rather than requiring users to write code, Scratch makes use of puzzle pieces that represent different computer programming concepts, such as loops and variables. Users C&RL News November 2013 524 drag and drop the puzzle pieces to create interactive games and projects. Puzzle pieces fit together only in selected combinations to create a working program, teaching users the basic concepts that are central to program- ming in any language. Even though it was initially developed for children, Scratch can be, and is, used by people of all ages as a painless introduction to the basic concepts of computer programming. Scratch also offers a community for users and resources for educa- tors. Access: http://scratch.mit.edu/. Interactive tutorials and practice exercises Those who are ready to jump into writing their own code or are looking for addi- tional practice to supplement coursework will be happy to find that there are many interactive tutorials and practice lessons available. Each of these tools allows users to practice programming skills in a Web browser without installing any programs on their computer. • Codecademy. Perhaps best known for the Code Year initiative, which aims to teach general computer programming topics to beginners, Codecademy has since expanded to include much more. Courses are avail- able for JavaScript, JQuery, PHP, Python, and Ruby, as well as lessons that walk users through Web design, APIs, and projects that combine multiple topics. As a bonus for those interested in teaching computer programming skills, Codecademy also offers the ability to create lessons either alone or in collabora- tion with other users. The Codecademy blog includes stories about how users have applied the skills they learned on Codecademy and brief lessons on additional topics. All con- tent on the site is free. Access: http://www. codecademy.com/. • Code School. Combining videos and downloadable slides with in-browser exer- cises, Code School offers courses on a wide range of skills related to Web design and development. Tutorials cover such diverse topics as Git, R, JavaScript, Ruby, Python, HTML, CSS, and Objective-C, to name just a few. In addition to these full courses, it also offers shorter screencasts on related topics. While courses can be completed in any order and combination, Code School also specifies curricula or “Paths” for those interested in a more guided curriculum. Full access to all of the courses and screencasts requires a subscription, but Code School also offers a number of free courses. At the time of writing, these free courses covered the basics of JavaScript, JQuery, Objective- C, R, Git, and Ruby. Access: https://www. codeschool.com/. • CodingBat. Created by Nick Parlante, lecturer in computer science at Stanford University, this bare-bones site offers practice exercises for anyone learning Java or Python. The site offers a limited number of training videos and teaching information, but it is not intended as a fully featured teaching tool. Rather, it focuses on offering additional prac- tice exercises for those who already know the basics and want to complete drills to solidify their skills. For teachers, the site also offers an authoring feature that makes it possible to create customized exercises, the option to create collections of exercises tailored to a specific class, and the ability for students to share their completed exercises with their teachers. Access: http://codingbat.com/. • LearnStreet. This site offers courses in JavaScript, Python, and Ruby with extensive practice exercises. But what particularly stands out about this service is the Code Garage Projects, a section devoted to more than 90 different projects that let users build games, tools, and more with their newly de- veloped programming skills. The projects are November 2013 525 C&RL News sortable by language and proficiency level, which makes this appealing even for those who have learned to program in class or on another site. LearnStreet also offers resources for teachers to integrate the interactive con- tent into their courses. Access: http://www. learnstreet.com/. Online courses and MOOCs Some learners prefer a more traditional class structure complete with lectures, writ- ten materials, and assignments. Fortunately, there are many such options available for free online. • Google’s Python Class. Nick Parlante, creator of the CodingBat tool mentioned above, also created materials for a course that was offered at Google for employees who had some basic programming experience and were interested in learning Python. All materi- als for this course, including lecture videos, written materials, and practice exercises have been released for free online under a Creative Commons Attribution 2.5 license.3 Access: https://developers.google.com/edu/python/. • MIT OpenCourseWare. MIT maintains the MIT OpenCourseWare platform, a freely accessible repository of materials from most of MIT’s classes. As of the writing of this ar- ticle, this included materials from more than 2,000 courses4 on a wide range of subjects from the humanities to the sciences, includ- ing computer science courses at both an un- dergraduate and graduate level, listed under the topic of engineering. Languages covered include C, C++, Java, and Python, among others. While the materials available for any given class will vary, many classes include at least lecture materials and assignments, and some also offer answer keys. Access: http:// ocw.mit.edu/index.htm. Getting help and connecting with others Computer programming and Web design can often seem like solitary pursuits, but in reality there are many online communities for those looking for opportunities for collaboration, support, and community. • GitHub. Whether you are interested in reading through code to improve your un- derstanding, finding an open source project to contribute to, collaborating on a project with a friend, or simply backing up and sharing your own projects online, GitHub is a great resource. As a code repository, it is probably the best place to look for ex- amples of open source code that you can reuse in your own projects. But beyond this, GitHub offers a good way for programmers to maintain a portfolio of their work and interact with other programmers. Access: https://github.com/. • Stack Overflow. If you search for the answer to a computer programming problem in any search engine, odds are the answer will be found in Stack Overflow. The site offers a way for programmers to ask and answer questions, whether they are beginners or experts. Best of all, other users vote on the answers, so that over time, the best answers are promoted to a place of prominence on the site. It is an ideal resource for new pro- grammers, particularly since many questions have already been answered. Access: http:// stackoverflow.com/. Notes 1. Alyson Shontell, “Mike Bloomberg Pledges To Learn To Code On Codecademy This Year,” Business Insider, www.businessin- sider.com/mike-bloomberg-pledges-to-learn- to-code-on-codecademy-this-year-2012-1. 2. For more information on this distinc- tion, see Thomas A. Powell, HTML & CSS: The Complete Reference, 5th ed. (New York: McGraw-Hill, 2010), 47. 3. Google’s Python Class, https://develop- ers.google.com/edu/python/. 4. “About OCW,” MIT OpenCourseWare, http://ocw.mit.edu/about/.