
How to Quickly Achieve Computing and Robotics Literacy
Our objective on this page is to provide a concise guide to the (relatively) rapid acquisition of computing and robotics literacy at home. Fortunately, there has never been a better time, and there have never before been better tools, for undertaking this task.
Computer science is a very broad field, including everything from the development of problem-solving algorithms to programming language theory. Our focus here will be much narrower: we will lay out a complete self-study course for acquiring programming skills that will also include the use of the Python programming language to provide a foundation in beginning robotics.
Our emphasis here is on acquiring programming literacy for the benefits it confers on understanding and utilizing other 'STEM' disciplines (Science, Technology, Engineering and Math) . For a high-level overview of each of these disciplines the reader is invited to go here. We also greatly value programming for its contribution to the acquisition of problem-solving skills and logical thinking.
A fundamental tenet of the "maker" ethos is the belief that we learn best by doing things hands-on. To this we would also add the following tenet: we tend to learn better when the relevance and importance of the subject we are learning is clear from the very outset. For this reason, we prefer a project-oriented approach to the learning of programming skills.
Our preference for project based learning sets us rather sharply apart from otherwise excellent resources for learning how to program at home, such as Harvard University's free computer science curriculum and Free Code Camp.
An inexpensive hardware and software platform, the Arduino microcontroller, was developed for this very purpose. For beginners without any knowledge of computing or electronics at all, there is now an ideal first introduction to both topics available from Maker Media: Learn Electronics With Arduino, by Jody Culkin and Eric Hagan. If you want to get anywhere with robots or with computing, you need a foundational understanding of both topics, and this is the place to get it.
For a variety of reasons, Arduino microcomputers aren't as functional for many project purposes as its competitor, the Raspberry Pi. The RPI, a complete computer, featuring a version of the Linux operating system, was developed from the outset for the purpose of teaching computer science in schools and developing countries, and it has become more useful than ever for this purpose, as well as being extremely affordable.
In order to learn how to program, you will need to learn a programming languagethat is more capable than the one that comes with Arudino, and the best one to begin with for our purposes is, without a doubt, Python (which can be used on the RPI). The syntax, or rules of use, though definitely not ideally simple and intuitive, can nevertheless be taught to children. (If this is desired, see Adrienne Tacke's Coding for Kids: Python: Learn to Code with 50 Awesome Games and Activities.) While Tacke's book is also a good starting point even for adults, particularly those who feel they may be programming-phobic, we recommend Python Crash Course, 2nd Edition: A Hands-On, Project-Based Introduction to Programming, by Eric Matthes. Here you will learn how to program by developing a game, and a data visualization project. In addition, and crucially, you'll learn how to set up an entire development environment of the kind that professional programmers use, which will go a long way toward preparing you for a programming career.
Matthes walks you through setting up that sort of environment in Windows, Linux, and macOS, all of which costs nothing. However, we suggest that in addition to such a set-up, the student purchase a Raspberry Pi, complete with a keyboard, mouse, and display (found here, or here). This environment costs much less than most computers, and acquiring an RPI will then also open the door to a wide variety of fascinating projects that can be coded in Python.
To go the RPI route, you may purchase the RPI 4 Model B at this link, and learn how to set it up at this link. To learn more about the Raspberry Pi operating system, go here. The operating system commands are different from Windows (though quite similar to macOS commands), and you'll need some basic familiarity with them to navigate your new computer. An RPI OS command-line cheat-sheet can be found here.
We suggest that, after completing the projects in Matthes' book, the student go on to purchase the G1 tank and Dofbot. These are programmable in Python, and will teach students the elements of both robotics and artificial intelligence, as well as the elements of physical computing.
Other terrific projects abound for the student equipped with this new-found knowledge. Some of the best of these can be found in Donald Norris's Raspberry Pi Projects for the Evil Genius.
Where the student goes after acquiring this level of expertise has much to do with his or her personal objectives. The following is a quick breakdown of some of the main directions possible. Overall, we would recommend Java as the next language, followed by SQL.
Web design: HTML/CSS/JavaScript/PHP
The MySQL Workbench is available for free here, and can be used in conjunction with the rest of the "LAMP" software bundle to learn both database administration concepts and data modeling. The Linux operating system, part of this bundle, is useful for learning system administration concepts and skills. For an introduction to LAMP, we recommend How to Do Everything with PHP & MySQL by Vikram Vaswani, which provides three projects. To set up the bundle on Windows, foregoing Linux (WAMP), go here.
For Java we recommend Java How to Program, Early Objects, by Deitel and Deitel. This massive book is not without flaws, but the topic is a large and difficult one, and no ideal book has yet been written.
C++, and all other versions of C, are perversely difficult to learn and use, and should be allowed (indeed, urged) to die painful deaths. Fortunately, for many purposes it is possible to substitute the use of Java instead. However, if you absolutely, positively wish to inflict C++ upon yourself, Bjarne Stroustrup, who is responsible for this abomination, has written A Tour of C++. (The nominally "classic" intro, Kernighan and Ritchie's C Programming Language is suitable for use as scratchy toilet paper, but not much else.) As with any book concerning this subject, take your aspirin first.
Artificial Intelligence: Python, C++, Java, LISP
For LISP, we suggest Practical Common Lisp by Peter Seibel. For resources for setting up a LISP environment, go here and here.
Data management, utilization, and reporting: SQL, R, PHP
For SQL, we suggest Practical SQL: A Beginner's Guide to Storytelling with Data by Anthony DeBarros. It uses the PostgreSQL database for its examples, where we would have instead preferred MySQL, but nevertheless does a good job.
Getting Started With R: An Introduction for Biologists by Beckerman, Childs, and Petchey is probably the single best introduction available for R at this time. For R itself (for Windows) go here. R is all about statistical analysis and programming. For more concerning those topics, see our Mathematics resource.
The Editor / Everything Progressive