AKA Tech Literacy 101 / Computational Thinking / Other Unfriendly Terms
Living in a world overrun with technology can be hard. Companies like Apple and Google fight to make technology easy, to make every interaction simple and user-friendly. While convenient, this comes at a great cost: there's less incentive for a person to become exceptionally technology literate. I believe there's less chance to even accidentally accumulate the experience to become tech literate.
The people who have the ability to build complex, now-ubiquitous systems like Facebook, Google, Twitter, iOS, Windows, etc, are the ones who control the present world and will forge the algorithms that define the future. There's a strong dichotomy between the exponentially increasing population of users and the smaller subset of those users who are also hackers. We need to reexamine this dynamic and educate as many people as possible to reshape their relationship with technology so that they're not mere users, but have the capacity to be hackers.
Tech literacy seems mystical because it's so new. There's been a near-constant discourse over the last twenty years about the divide between digital natives and digital immigrants. This becomes less relevant as more children take technology for granted — they may know how to use an iPhone, but they most likely have no idea how or why it works. They may give up just as easily as their parents when faced with a technological problem they don't know how to solve. This is what we need to change if we are to help grow a new generation of creative problem solvers and innovative thinkers.
One of the biggest problems with tech literacy is the jargon. Many words are interchangeable, and in a lot of areas there is no agreed upon vocabulary. The term "hacker" itself means many things to many people and can signify very different, controversial things. However, to make tech literacy something achievable, we must establish a useful set of terms anyway.
- A user is someone who uses technology for whatever reason. We are all users.
- A hacker is someone with an interest in technology and possesses the skills (at any level) to use and manipulate technology. Examples include web developers, software programmers, hardware engineers, tech enthusiasts, your mom when she figured out how to save bookmarks in Internet Explorer, or yourself when you downloaded an app on your phone and figured out how to stop it from alerting you every five minutes.
- The terms engineer and developer are synonymous with "hacker", to keep things simple.
- A problem is something that someone wants to solve, track, or analyze. Examples include algebra proofs, finding the rate of user commenting on a social network, tracking hashtag usage over time, using unused radio frequencies to create a mesh network, or needing to add your Gmail account to your iPhone.
- Data is any set of information stored using technology. This technology could be a filing cabinet full of paper (paper is technology), a text file on your laptop, a computer database with tables and rows, an Excel spreadsheet, or a distributed key-value store.
- Information always has some kind of format; usable data or computational data is information that is stored in a consistent, reliable, computer-readable format, such as an Excel spreadsheet, a comma-separated list, JSON format, or other technology.
- Computation is the process of breaking down a problem into absolute commands and data that can be interpreted by a computer. For example, "do people like my website?" is an abstract question, but it can be computed by creating a survey on a website with the question "do you like my website?" with "yes" and "no" possible answers. An ambiguous question redefined using absolute terms and processes.
- An algorithm is a set of commands and/or computations that act upon data to produce a result or perform an analysis. For example, finding the average of a set of numbers is an algorithm. Likewise, predicting the number of people who might click on an advertisement because of their age and gender is also an algorithm.
- A system is some set of processes, applications, algorithms, or data that has been engineered. For example, Facebook is a system the consists of applications (the Facebook website, iPhone app), data (user profiles, who is friends with who), and algorithms (building your "feed", suggesting advertisements based on your activity). Your computer is a system that consists of applications (Firefox, Microsoft Word, the operating system), data (your documents, your settings), and algorithms (what operation to perform when you click your mouse, how to sort files for viewing).
- Programming and coding are the act of writing the processes that a computer will use to accomplish a certain task or solve a problem. For example, you can program a computer to check your favorite websites every day to see if they've been updated recently. You can program a computer to host a website, allow people to sign up to your website, "follow" other people who have signed up, and write 140-character-long messages. You can program a small wearable computer to track your heartbeat and produce an average over the last hour. You can program a computer to say "hello" out loud anytime someone enters a room.
- Hacking is the act of figuring out, reverse-engineering, tinkering, or otherwise playing with technology to solve problems and/or do interesting things. This usually involves programming and coding.
Becoming technologically literate is just like learning to read and write. It can be defined as a set of skills that are improved and refined with practice over time and exposure to challenging problems. Just as one learned how to read by starting with simple words and then learning to use a dictionary to look up new ones, one can learn technology by starting with simple tools and learning how to search for or write new ones. There's a relationship between the skill itself (reading, hacking) and the ability to abstract the skill so you can reach into the unknown and advance in it (dictionaries, searching, coding).
Here are the skills and knowledge areas that are a part of tech literacy:
- The confidence to not be dissuaded by unknown terms; the resilience to be able to work through difficult, ambiguous, or unknown problems.
- The ability to use search engines like Google to effectively find the answer to a question or the solution to a problem or to learn more about anything.
- The ability to distinguish what is genuine (reliable, proven, working) and what is not (spam, malware, phishing).
- The process of abstracting a complex problem into its smaller, more manageable parts.
- The ability to code and to learn how to code; the knowledge of abstract programming concepts.
- The knowledge of how a computer "thinks": the bridges between human thought processes and computational processes.
- The ability to understand raw data and the ability to reshape it or visualize it using different tools.
- The knowledge of physical computer hardware and how it works, from the smallest micro-wearable to the largest supercomputer to the most distributed network.
- The ability to communicate with others about technology, including people who do not possess the same level of technological literacy.
- The curiousity to try new things and stay active with technology.
These are just a handful of the broad skills necessary to achieve a high level of tech literacy. They're the starting points to building an aptitude and proficiency with technology at a wide scope which can afford deeper dives into specific topics, depending on the interest of the person.
Here are some examples of more specific technology skills one can learn:
- General computer usage, repair, and maintenance, via knowledge of operating systems, applications, and the foundamentals of computer hardware.
- Software development/engineering, via knowledge of programming languages like C, C++, Objective-C, Swift, .NET, and others.
- Data analysis and visualization, whether it's making interesting charts for the New York Times or predicting NASDAQ index changes for high-speed stock trading.
- Database and cache administration, via knowledge of technologies like MySQL, MongoDB, Riak, Oracle, Memcached, and others.
- Network design and administration, both physical infrastructure (wires, cables, routers, switches) and virtual infrastructure (TCP/IP, VLANs, routing, DNS, DHCP).
- Systems design and administration, both physical hardware (CPUs, power supplies, RAM, disk) and software (operating systems, Unix vs Windows, BIOS).
- Robotics and machine learning development, whether it's physical hardware prototyping (using Arduino, Edison, custom hardware) or artificial intelligence software development (including things like Amazon's recommendation engine, Netflix's prediction engine, IBM Watson bot, or chatbots from the 90s).
- Traditional "hacking", both legal (intrusion prevention, software/system/network security) and illegal (phishing, software exploits, password/encryption cracking, hardware reverse-engineering).
There's many more fields and areas of study within those, and many more I have not included here.
How to Demonstrate Tech Literacy
It's very easy to demonstrate and observe basic technological literacy. One of the easiest metrics is how long it takes a person to give up on a problem they're having with technology. Do they simply give up immediately because they "don't get this [tech] stuff"? Do they give up when the answer isn't a visible part of the application they're using? Do they give up after a single Google search of the problem? Do they give up after trying to build their own program to fix or go around the problem?
Another metric is observing what a person's immediate reaction is to a technological problem. What do they turn to? Is the immediate reaction to use the program differently to solve the problem? Do they switch to or download a different program? Do they immediately open up a browser and type something into Google? Do they call their son-in-law who's young and "knows this stuff"? Do they simply believe that the system is unreliable or finnicky and choose to do nothing at all about it?
Furthermore, what lateral steps will a person take to solve a problem? When one track of problem-solving fails, what other entirely different methods will they employ? When using the application differently doesn't fix it, will they go to Google? When going through an application's preferences/settings doesn't hold the answer, will they turn to a different application they already are familiar with that can perform a similar function? When one programming language does not have the syntax to fix the problem, will they try a different one they may have never used before? When parsing through data, trying to find correlations, what different types of visualization do they try?
One of the most difficult aspects of technology literacy is how quickly the landscape changes. Every day, new devices are added to the market, new algorithms are being developed, new programming languages are released, new database software is engineered, new computation platforms are demonstrated, new paradigms of problem solving are proposed. How does one deal with this constant churn of technological progress? One of the key tenants of tech literacy is the desire and curiousity to experience new technology, and seeing it as one's hobby (and sometimes one's job) to be abreast of technological change as it's happening.
The key to establishing technological literacy is to gather educators who are themselves hackers, and more importantly, are able to properly articulate and abstract the knowledge they possess so it can be taught. A significant portion of the successful hacker/technologically elite community are self-taught individuals, most often because their educators lacked the ability to teach them in a manner that was adequate, engaging, or both. Many computer science departments are seen as opaque, rigid, math-only institutions that have little to offer the turbulent world of practical technological literacy. This needs to change.
We can start changing the current educational landscape by making the act of teaching technological literacy more friendly, more practical, and more demonstrable to those who want to learn. The future will bring more automation, more online distributed systems that underpin our lives, and faster technological progress built upon previous quickly-iterated-upon foundations. Without the ability to adapt to and confidently understand technology at a basic level, young people will be poorly equipped to deal with the demands of an increasingly technology-driven job pool. We will continue to have a vast sea of mere users, when we could have a burgeoning tidal wave of hackers who are equipped with the tools to shape tomorrow for themselves.