My father likes to fix things. Handy with electrical equipment, a little carpentry, and having a plain willingness to just open things up, it’s likely where I got some of my hacker mentality from. He taught me to solder when one of the joysticks connected to my Atari 2600 stopped working one day. We just opened it up. He maintained airplanes while in the U.S. Army, and then got to do the same with cars. Growing up, I’d always see him do as much work on a car as possible. He made sure I knew the basics, and always helped me change oil, spark plugs, air filters, and belts. Over time, though, this became more and more difficult: cars changed.

Car engines got tighter, specialized tools were often needed for various parts, and anyone working on a car now knows that without a computer for tuning, you’re missing out. Cars went from a very open system—one where you could see how just about everything worked—to a closed system that effectively requires the manufacturer to perform any maintenance.

To anyone in the tech industry, this story may sound familiar. If you’re of a certain age, you likely remember ’large’ PC cases with parts easily accessed, replaced, and upgraded. As our tech got smaller and more proprietary, mere “end users” have become locked out. Locked out of the hardware, but not the software, right?

My first ‘real’ computer was a Commodore 64. Taking it out of the box, in addition to the machine itself, it came with a manual. That’s different than computers today. But Commodore also shipped something else with the 64: schematics. I built some of my first hardware because I could look at how it would interface with the Commodore 64. What about the software, though? The 64 was a dream: turn it on, and about 3 seconds later, you could be typing. If you had an idea, it could quickly become a proof-of-concept or more. Turn on the machine, and you’re already in a BASIC environment. Just start typing.

On a modern Macintosh, if you already have Xcode installed, it isn’t difficult to start coding, but there is certainly a greater barrier than the process I described with the (old!) Commodore 64. There are some alternatives, of course. You could fire up a Python REPL, use CodeRunner to enter, run, and debug code quickly, or just fire up Vim/Emacs and have at it. Are any of these particularly great? Not really.

I’ve found that HTML and JavaScript have a nice fast feedback loop…for simple projects. When they get larger, moving between a text editor and the browser/debug environment can get taxing, and most large projects end up moving to an IDE, getting back to the chore of having a middle layer.

When I got the Commodore 64, it wasn’t the only choice in computers. The landscape was still nascent and unsettled. Atari had the 400 and 800 computers, IBM had the 8088-based PC, Commodore themselves came out with the Amiga, and there were many others. I wanted to learn about all of them: The chips, the capabilities, the variances in programming, and how far you could push them. This was fun.

So, what’s fun today?

##Having Fun First and foremost, fun is whatever you make it. Typically, you want to “scratch a personal itch.” This isn’t something someone commanded you to do, but rather something that you want to learn and dig into. It will take up your time. Yet, you will press on, unraveling the puzzle before you, likely unpaid in any monetary equivalent. (You’re incredibly lucky if you can combine constant personal reward with your paid job. It does happen, though, so keep an eye out for those opportunities.) When you find what this is, don’t let anyone tell you otherwise. Yes, you’lol sometimes even be solving an already solved problem. Have at it, and don’t worry otherwise. So what can I recommend? ###Groups Finding a group of people with similar interests can help motivate and propel you forward. Even finding a single other person that can guide/mentor you is great—like I described with my father at the beginning of this article. Finding a group is easier and easier thanks to Google (replace NYC with your locality, of course), Meetup, local maker spaces, and even Apple. You also likely have co-workers that would love to teach and guide you on something that may or may not be work-related. Just ask, and you may be pleasantly surprised. ###Graphics Anything to do with graphics is typically inspiring in some way. Getting a graphical representation of something up on the screen has a certain magic to it. Getting it to move adds another avenue to go down. The great thing is that every platform has some mode of output and therefore some manner of graphics. From terminal-based ASCII graphics (which you can even see in a browser), up through modern very hi-res displays, you can get into graphics at any level. On the Mac, I can also recommend writing a screensaver as a fun way to start out. The screensaver framework sets up the graphic environment and animation loop for you. I have a few on my GitHub repo. ###Games Following on from graphics is gaming. Of course, you don’t necessarily need bleeding-edge graphics for every game. Infocom and others have proven that pure text games can spark the imagination as much as any graphical feature. Game programming is its own puzzle adventure, and you’ll go to incredible lengths to figure out how to give your character a new hat, or to get your car to register that it’s hitting a wall. ###Something New If you’re a Mac person, try some code on Windows or Linux. You could even fire up an older system—like a Commodore 64—under emulation and learn how to poke memory around. iOS is even different enough from macOS in some respects that it is even a “different platform”. ###System Spelunking Unlike my Commodore 64 that shipped with a manual and hardware schematic, systems today come with little to no documentation. So, what’s stopping you from doing your own detective work? There’s a universe to explore within any computer. Using a debugger like lldb or Hopper lets you see what’s going on behind the scenes. ###Raspberry Pi There are other choices in this category, like the Intel Galileo, the Arduino units, the Teensy, and others. But the Raspberry Pi is a full-featured ARM-based computer. Even better: the latest version—the Pi 3 Model B—is $39.95. Want to learn Linux? Get a Raspberry Pi. Want to learn ARM assembly? Get a Raspberry Pi. Want to build an IoT device for home? Get a Raspberry Pi. I could go on, but you get the point. If you know, or have a child interested in computers and computing, get them a Raspberry Pi. Let them beat it up, and if it gets destroyed, get them a new one. You could buy 20 of them and still be ahead compared to buying one Mac or other laptop. #Fun Fun Fun You’ll have to like to fix things and investigate. When you get into a ’this is a puzzle to solve’ mentality, you will rarely be defeated.

Writing the code for this blog has been fun…for me. It may not be your thing. Maybe it’s hacking your car. Maybe it’s writing a game. I just started writing a system utility that I’ve been thinking about for 8 years, and getting it right is really fun. Sometimes you’re told what to do by someone or something, and that’s part of the job. But I hope you find your fun in computing.