The Absurdity of Memorization

“Never memorize something you can look up.” — Albert Einstein

My fourth grade math curriculum was comprised of mainly one thing: multiplication tables. Essentially all of the math-allocated portion of the day was dedicated to drilling a set of seemingly arbitrary sets of numbers into our skulls. After a couple months of training, one of my peers asked our teacher why it was necessary to memorize our multiplication tables. Our teacher responded with, “Well, it’s not like you’re going to keep a laminated reference sheet with you at all times!”

So that’s exactly what he did.

To my knowledge, twelve years later, he still has a laminated multiplication table reference sheet folded up in his wallet. This serves no practical utility (especially given the fact he was still required to memorize his multiplication tables), but he did it to make a point: you can always look it up.

My fellow fourth grader laminated in defiance around 2004, but his point stands even stronger today. We each carry with us a pseudo-infinitely large “multiplication table” in our pockets at all times, leaving the modern need for memorization the smallest it’s ever been. Phone numbers, directions, conversion units, the air-speed velocity of an African swallow, you name it. Anything we can Google, we also efficiently eliminate from our brains.

Of course, some things are still crucial to memorize, namely in the case of an emergency where an internet-connected device is unavailable. A few important phone numbers, your social, stuff along those lines. And sometimes it’s wildly efficient to memorize something you use on a daily basis. For example, it would be prudent for a scientist who works frequently with a certain chemical compound to memorize its molar mass, or other commonly needed characteristics. But 99.5% of information can be cleanly purged without ill-effects.

I think this is fantastic. Intelligence isn’t a measurement of how well you can regurgitate information. Intelligence is a measure of what you DO with that information, and your creative solutions from a unique outlook. If we’ve built machines that are wildly efficient at organizing and indexing data, why bother trying to do the same? We should reserve our brain capacity for something only we humans can do: think critically. The information age isn’t making us stupid, it’s making it easier to be smart.

The State of Prototyping — The Best Tools to Help You Build and Fail Fast

The surge in at-home manufacturing over the past five to ten years has been extreme, with everyone and their mother attempting to miniaturize and simplify industrial manufacturing machines for home use. MakerBot famously spurred on the wave of consumer-grade 3D printers, resulting in hundreds of Kickstarter projects populating the early-adopter market. Anyone that wants a 3D printer can purchase a solid, reliable machine for only a couple hundred bucks nowadays. Other companies such as Inventables, Glowforge, and Wazer are finding ways to produce CNCs, laser cutters, and water jets respectively at a more economical and accessible price.

A similar trend in accessibility is notable with hobbiest electronics as well. Companies such as Adafruit and Sparkfun are “modulizing” electronic functions. Instead of having to create an entire circuit from scratch to develop a proof of concept, $19.95 and next-day shipping will get you a module that takes care of the hard stuff. Just wire into your microcontroller with I2C, use the provided library, and you’re off to the races.

And that’s just the hardware side of things! The nigh unlimited number of open-source software projects saves prototypers years of software development. OpenCV is one of my favorite examples of this. There exists a fully-featured machine vision framework that anyone with a moderate understanding of programming can dive into and give their widget intelligent sight.

And this is something everyone is jumping in on. Google with the TensorFlow machine learning library, Facebook’s React Javascript library for developing web applications; the list goes on.

In some ways, I believe this is arguably a step in the wrong direction. It promotes a shallower understanding of the technology being used in pursuit of simplicity and ease of use. The more plug and play it is, the less you understand what’s going on under the hood. But if your job is to test quickly, identify what is feasible, and make it look and feel gorgeous, you don’t want to get into the nitty-gritty. You just want to make a proof of concept. A production level of specialized knowledge in every relevant engineering topic is not reasonable to expect from one single person.

Handling and understanding the nitty-gritty is the job of a developer that specializes in one engineering practice. A quick hack job of a minimum viable product is passable for testing, but for a production unit, true engineering practices must be implemented. Designing a custom PCB, creating parts designed for injection molding — these things all require specialized knowledge in each of their fields. This is not to say that prototyping techniques don’t help developers. Many products in production utilize open-source libraries, or borrow circuit design from an Adafruit module. But ultimately, it’s the developers that need to know what’s going on under the hood, not the prototypers.

Throughout my time building proof of concept units, a few prototyping tools have stood out to me as being critical to my success:

1. 3D Printing / Excellent CAD Software

This one’s a no-brainer. And the real hero of this pair is CAD. Having solid 3D design software that you’re comfortable using and won’t get in the way of your design process is crucial. When you’re trying to build quickly, the last thing you want is a lack of good software design being your bottleneck. The job of these tools is to hinder the creative process in as few ways as possible.

I recommend Autodesk Fusion 360, for a multitude of reasons. It runs on PC and Mac, and stores designs in the cloud so collaboration is all in real time and trivially easy across platforms. The user interface is clean and understandable, especially for beginners, but also has many complex features for advanced users. The built-in rendering isn’t the best, but really convenient for getting a quick, pretty image of a part. Fusion also has built-in toolpath generation, and temperature and stress simulations, which I haven’t personally used, but have heard are fantastic features. Updates are released regularly with many new features, almost always sourced from interactions with users in the Autodesk forums. It’s a quick moving, fully-functional CAD suite that’s free for students.

Of course the other half of this marriage is the printer itself. Most on the market today will give exceptional results if tuned properly, but printers from Lulzbot and Prusa Research are sure-fire wins. I’ve had a Lulzbot Taz 5for a year and a half now, and I have only good things to say about it.

2. Module-Based Electronics

The central nervous system of your widget, silicon is getting increasingly more accessible due to the aforementioned modulization movement. Standardized communication protocols such as I2C, SPI, USB, and Serial in conjunction with libraries provided by the manufacturer help make modules easier to interface with each other, especially with an Arduino-style microcontroller at the core.

These modules can do just about anything you could expect from your widget. They act as the interface to the outside world, gathering data or displaying it. They act as Human Machine Interfaces (HMIs) and allow different kinds of interaction with the user.

3. Python

This could arguably be another similar language, but I think Python really nails the essence of prototyping. The first argument for this is Python’s syntax. In many situations, Python can read very close to plain english. This lowers the bar for entry in terms of comprehension by a significant degree. When even a beginner can look at some code and immediately understand what it does, you’re removing barriers to creativity and getting out of the way of the prototyping process. Plus, being cross-platform doesn’t hurt.

The truly significant reason why I believe Python is critical to prototyping is the absurdly large number of libraries available to help you accomplish almost anything you could imagine with the language. The excellent documentation that goes along with most of these repositories makes them simple to implement, and keeps you moving. The vibrant community constantly developing tools for anyone to implement with Python make it an incredible tool for any prototyper to utilize.

4. Wait, why not ___?

CNCs? Laser cutters? Hell, sewing machines? The reason I picked what I picked is because all of those tools move an aspect of prototyping from “prohibitive” to “accessible.” I can still sew with a needle and thread. It might take me longer than it would with a sewing machine, but it’s still doable. Same goes for a CNC and laser cutter. They are tools that just make an already accessible task a bit easier. But if I didn’t have a 3D printer, the only way I could make the part I needed was to get it injection molded, or custom-machined, which is prohibitively expensive. Module-based electronics are similar, but with time as opposed to money. Understanding enough about electronics to design the functionality of all the required modules and combine them would take a prohibitively long amount of time, especially in a prototyping setting. Not the difference between 20 minutes of using a CNC versus an hour with a jigsaw, but the difference between an afternoon of connecting modules versus years and years of studying and learning about the fundamentals of electrical engineering. And in the same vein, python (and its all-encompassing array of libraries) reduces the development time of software from a prohibitive amount of time, to an accessible one. These three are game-changers, not time-savers.

Keeping a Skill Index

I was recently asked, “What was the first thing you built that you were truly proud of?” My answer was an RSS feed aggregator I build in high school to get my feet wet with php, database management, cookies, etc. But as I was explaining the technical details of the project, I was surprised recalling what skills I had used to complete it. Granted, it had been four or five years since I had worked on the site, but this was slightly jarring to me. How many times had I neglected to consider that I had the ability to develop in some way, and altered my development stack because of it? I felt like this was unlikely; who actually forgets they have a skill? But I had clearly done it to some degree.

This got me thinking about all the projects I had worked on. What went into them? What did I have to learn in order to complete each project? What are all the skills I’ve collected over the years? And most importantly, what are all the features I could incorporate into a hardware and/or software widget?

So I counted.

I opened a new note in Evernote and started listing. Software, hardware. App development, data storage and management, programming languages, libraries, APIs, methods of automation, bluetooth and wifi connectivity, development boards, all of it. After an hour or so, I felt like I had summarized my smattering of technical capabilities into a neat, hierarchal format.

My first reaction was satisfaction. This document had become my “maker resumé.” All of my “just-for-fun” projects suddenly had a very practical result by adding a skill-set to my development toolbox.

The second was potential. Patterns emerged while scanning this collection of seemingly non-related capabilities. And they were definitely not USEFUL patterns, but it got the gears turning. I started picking three random topics and trying to see how I could combine them. A script that tweets the first hit on Google Images of the word you’ve said most that day. A heads-up display that constantly shows you how many steps away you are from Reno, Nevada. A thermostat system that changes the temperature in accordance with the NASDAQ. Again, not tremendously useful, but a fascinating exercise in creativity. Seeing the possibilities of what you can create is an empowering feeling of possibility.

If someone asks you if you’ve read Stranger in a Strange Land by Robert Heinlein, you know immediately if you have or haven’t. But if they ask you to tell them all the science fiction books you’ve ever read, that is a MUCH more difficult task. So, the point of this exercise wasn’t to help me remember what I’ve done. If someone asks me to build a web scraping app, I can tell them immediately if I can or can’t; my memory wasn’t the issue. The point of this exercise was instead to be able to see all the “science fiction books” I’ve ever read in one place for easy reference. To get the juices flowing. To see how any combination of these techniques could be used together. To keep possibility on the front of my mind.

This becomes the most useful when brainstorming solutions. If a solution is simple, it becomes a “Have I read this book?” scenario. But if you’re attempting to solve a complex problem, looking at everything on the table gives you more context and perspective on ways to build a solution.