Modern da Vincni – I sat quiet and still in a clean, worn armchair; a good balance between luxurious and cheap. The near absolute silence was a pleasant break from campus outside. Were it not for the electrodes taped to my head, I might have been comfortable. The television before me, much like the one in my apartment at the time, would have been welcome if it weren’t for the oversized words flickering in black font on a white screen.
I was sitting inside a soundproof booth at the Speech Pathology Department’s research lab at Purdue University. And, as the words flash by, it occurred to me that a group of liberal arts majors studying the effect these words had on my brain were using sophisticated computing equipment; computing equipment that might need my programming services.
Having developed software since age 12, programming computers came naturally. I took for granted the concepts taught in algorithms, databases, compilers, and other programming courses. Not that I had great grades, but I had taught myself to think in programming terms; I knew how to instruct a computer to find a solution. Show me a problem in any field that I could wrap my head around and I could find a way to help solve it faster using a computer.
Like many of my classmates, unless I was helping family (as all programmers are obligated to do from time to time), I kept these skills to myself. If you were a computer scientist, you weren’t supposed to jump into fields like biology, chemistry, or otherwise… You would go on to develop games or productivity software (all now called apps) for technology companies whose only products were computer programs.
Ultimately, I would do the same. But now, exiting the soundproof booth, I would immediately do something a bit different–help develop software in a completely unknown domain. The software for my girlfriend (later to become my wife) was to find statistical peaks and valleys in data extracted from the brains of multiple test subjects, myself included.
The programming part came easy, and I wondered briefly why they couldn’t write the software themselves. But we all assumed that it would be easier to teach me what to look for in the data than it would be to teach the speech pathologists how to program. We didn’t just take my ability to program for granted, we thought programming was for computer scientists only. But this thinking was flawed.
Given the power, flexibility, and problem solving capabilities of a computer, we should look at computer programming as a tool for nearly every discipline. Like mathematics, taught to every school-age child in their formative years, a basic understanding of computer programming concepts can be used to great effect in any number of fields. After all, every field, be it speech pathology, biology, chemistry, or art, has problems to solve… problems whose solutions might be more easily solved with the powerful processing power and flexibility of the 20th century’s’ most significant invention.
To allay any fears, it should be known that programming a computer is not just about writing code. It’s a way to experiment with your problems, fail quickly, and try multiple solutions rapidly—all the while you are discovering more pieces to the puzzle. Programming aids, even forces understanding. Just as an artist cannot draw a cross section of an engine without the help of a mechanic describing how all the components fit together, we cannot ask a computer to help us solve a problem we cannot describe and understand ourselves.
If this is so; if programming is such a powerful problem-solving tool for multiple disciplines; then why aren’t we all more versed in programming concepts? For one, the word “programming” has historically been reserved for computer scientists and software developers. Tell a typical user, who mostly uses their PC for checking email and surfing the web, that they might be able to solve problems by creating a computer program and they would immediately reject the notion and call their tech-savvy friends or family to help.
But we don’t need to dive deep into the concepts of computer science to get a massive return on a small educational investment. Many powerful automation tools exist to solve problems without having to write a single line of code. In other words, programming doesn’t have to be programming. It can be simple. It can be fun. It can solve tedious, monotonous problems for us on our schedule.
It is for these reasons that Leonardo da Vinci would have been a programmer… He would have used the computer as a tool to aid his thinking, to force his understanding of complex problems, and to help find solutions to them. He would have programmed solutions to daily, monotonous tasks, making him an even more productive inventor and prolific writer. To be a modern day renaissance man, we too should learn to program. The good news is, we don’t need to go through thick books or long college courses to do so. With some simple concepts and tools we can learn to program and use the most powerful tool of our time to our advantage.
In our previous post we looked at the power of computer programming as a fundamental tool for all disciplines. No matter our field of study, we can develop computer programs to aid our thinking and force our understanding of complex problems. We can devise automated solutions to daily, monotonous tasks, making us more productive.
The good news is, it does not take an enormous investment of time or money. In fact, many powerful automation tools exist to solve problems without having to write a single line of code, and many programming resources exist for little or no cost beyond the time it takes to learn.
Below, we will take a look first at some of these automation tools… programs that don’t require us to do anything more than think logically. After, we will look at a few introductory programming resources. Finally, we will provide a few resources for anyone interested in truly understanding programming, programming languages, and taking full advantage of your computer.
Automation and Scripting
Computers are a tremendous asset and complement to human thinking. Just as we humans can be ambitious, creative, and scrappy… we can easily become bored, procrastinate, and be lazy. While creativity and ambition aren’t something computers excel at today, they never bore and they never procrastinate. Give them a task to do and they will blindly perform it millions of times without batting an eye. This is why we are focusing on automation and scripting first. Giving the computer some of those boring tasks to perform can boost our productivity and offload monotonous tasks on a machine that would love nothing more than to dutifully perform those tasks day in and day out.
Without writing a single line of code, we can use IFTTT (which stands for IF This Then That) to automate digital tasks we do on a daily basis. Even the small tasks we perform, such as checking the weather or thanking people for following us on Twitter, take time. IFTTT can save us that time by automating the task and delivering the results directly to us (through email, notifications, notes, or many other forms as you see fit). The benefit to non-programmers starting with IFTTT is that you begin to use the most basic programming construct… the IF statement. With IFTTT, we simply tell the web app, “If THIS happens, do THAT”. IFTTT is connected to many of our favorite applications and social web tools like Twitter, Facebook, Evernote, Email, etc. Without programming a single line of code, we can tell IFTTT to post any picture we save in Facebook to Twitter, or to email any picture that gets stored in iCloud to our grandmother. There are thousands of “recipe’s” already created, many of which can be used immediately. For us, since we’re learning to program, I recommend learning what all is possible and creating a recipe of your own. Just yesterday I created a new one: “If it’s 7am, send a notification to my phone with the daily weather forecast.” Super helpful, and now I don’t have to visit my weather app to look it up every day!
The Command Line
For those old enough to remember the days before Windows, they will remember the command line. MS-DOS was a popular operating system, though not the only one used to drive computer behavior through commands typed at the terminal. Now, most popular desktop operating systems like Windows, Mac OS, and Linux variants such as Ubuntu or Red Hat have terminals. While you can navigate your applications and files using the graphical interface and mouse/trackpad, the command line allows you do some amazing automation to manipulate your files. Say, for example, you needed to rename 100 presentation files. Doing so one at a time would be time consuming and mind-numbing. With a couple of commands captured in a script however, that renaming task can be performed in a second. A great source for learning the command line basics is Code Academy (www.codeacademy.com)
Using the automation tools listed above, your computer should be performing some duties for you and you may even have a basic understanding of typical computer commands. This is good, because computer programs are nothing more than a series of commands, one after another. Throw a few commands together in a text file and you have the beginnings of a program. Of course, like humans, computers have different languages they speak. You may have heard of such languages as Java, C, C++ (pronounced see plus plus), HTML, etc. Each language has a different reason for existing and is good for different purposes. Even so, unless you have a specific task for your computer in mind (such as developing a game or programming a web page), the language you choose to learn doesn’t matter too much. Before you choose a language, you should probably start training yourself to think in terms of computer programming. This is where our first resource comes in… Robot Turtles.
Robot Turtles (http://www.robotturtles.com/)
Before you begin to actually program, you need to start thinking in terms of programming languages. Computers are VERY literal creatures. They will do exactly what you tell them to do, and nothing more. This is fantastic, since giving them a set of programming instructions means they will blindly execute those instructions without hesitation in the same way over and over. On the flip side, one wrong move and the computer will do something unexpected (also known as a software bug). Programming can be a bit of trial and error—writing code, running it, finding bugs, fixing them, running again, etc. Board games like Robot Turtles will help get you in the mindset of programming before you try your hand at your first program. If you have kids, this is a great way to teach everyone in the family the basics. Once you actually sit down in front of a computer and learn some basic programming commands, the problem you are solving will come much easier.
Google Blockly (https://developers.google.com/blockly/)
With a basic understanding of programing under your belt, take a look at Blockly by Google. It’s a way to visualize a program while still using typical programming constructs you come across when writing a program yourself. The drag-and-drop interface is extremely simple to use, and the fact that it works through your web-browser is a bonus as you can run it anywhere and everywhere. A good place to start is by looking over the demoes to get a sense for what you can do with your own programs. Anyone familiar with the wildly popular Flappy Bird video game can take a crack at programming a replica using Blockly through an extremely well done 10-step tutorial: https://studio.code.org/flappy/1. Sometimes the best way to create your own program is to begin with a demonstration and modify it to your liking.
Code Academy (www.codeacademy.com)
Once you are ready to dive into true programming using code and text files, sites like Code Academy will introduce you to some of the more popular programming languages and take you through introductory instruction to get you familiar with programming and thinking in code. Again, unless you have a specific problem in mind that you’d like to solve, which language you pick isn’t terribly important. Simply select a course and run through the basics. You’ll have the hang of it in no time, and have a bit more courage to try something beyond.
With a basic understanding of programming under your belt, it may be time to select a specific programming language based on a problem you are trying to solve. Doing so will allow you to dive deeper into computer programming, all the while you are learning new concepts and getting closer to your problems solution. The following resources will give you a deeper understanding of programming, but there are so many more. Please use the comments below to add to this list and share your own experiences with programming.
Da Vinci Coders (www.davincicoders.com)
This site uses real coders, not professors to teach you how to build programs to solve real world problems. Besides having a great company name, da Vinci coders will take you through a multi week course aimed at making you more than dangerous with a programming language. While the courses can be a bit pricey, they are nothing compared to a semester at a university and are extremely well done. By the end, you should feel quite comfortable creating a new program of your own from scratch.
Many thousands of programming resources exist in libraries and book stores around the world. Of course, having an unlimited reading resource like Oyster Books is a great way to learn something new on a minimal budget. A Netflix-like book subscription service like Oyster Books is a great way to pick up a programming resource, learn a few things, and move onto the next resource without feeling like you’re missing out or wasting money on a whole book in which you only read a single chapter. Just a quick search on programming brought up the following excellent resources, all of which played a role in my development as a programmer over the years:
- Beginning Programming For Dummies by Wallace Wang
- iPhone Application Development for Dummies by Neal Goldstein
- Python Programming for Developers by Joseph Joyner
- Beginning Java Programming by Peter Paul
- Programming for Everyone by Keith Lee
With this list of websites and resources, you’ll pick up the basic concepts of automation, scripting, and programming in a short period of time and be able to put your computer to much better use. The number of problems you can solve are endless, and the speed at which you can solve them is truly incredible. Again, please leave your comments below. We’d love to hear more about your experiences with programming, problems computer programs have helped you solve, and resources you’ve found along the way.