We are the ones who did that kind of stuff, so we’re a filtered audience posting on HN about tinkerable software. We likely tinkered for a lot of reasons that didn’t have much to do what tech was like - we had unfettered access to tech in some form, for instance, or we were encouraged to do so by our parents or society or our peers.
Making our tech more accessible is a fine goal, but that’s likely not the biggest blocker for the next generation of technologists. Rather, I'm starting to think that, given recent advancements in UI, social media, etc. our belief of what makes a great engineer is totally off base for what we’ll actually need in the next decade.
https://www.fastcompany.com/90859083/gen-z-tech-skills-gap-d...
Add to this console gaming, and "view source" not working as well with the prevalence of optimised web frameworks, or the centralisation of compute services (you can't resedit Tinder or Snapchat and change what others experience); tinkering via tech is much much harder.
The creative types who want to have fun are off making innovative tiktok memes.
To help fix this, we need more open source apps with a "view source" button in the about tab taking you straight to GitHub with a "code now" button, to kill the app store in favour of sideloading apks from your local sneakernet, and an absolute buttload of Easter eggs.
edit: I think I misunderstood your last paragraph to mean we'll need to keep low level skills available so we don't lose the knowledge. I think you actually meant that we don't currently understand what the next generation will need to know to be effective which is a fair point, though have we ever known what skills the future requires?
/edit
There are still companies producing lower level engineering work, and the world still needs it. If academia and industry can't maintain the skills needed, bigger corporations will be able to run their own internal programs in collaboration with universities to produce the talent and those people would be paid handsomely.
With open source operating systems out there I also see it as being a recorded knowledge. Something that can be re-learned from, what will one day be referred to as, Ancient Codebases.
It was. Another commenter mentioned ResEdit and being able to tinker with classic Mac applications. Two things were universally true back then:
1. In a pre-internet world, the entire application had to be hackable in some fashion, even if the application's creator tried to make that difficult.
2. Most parts of an application boiled down to simple text files, simple binary layouts or compiled source code. Obfuscation, encryption or even compression all cost CPU cycles which were often too previous of a resource.
As an example, Civilization stored much of its data in *.txt files you could edit in notepad to change the strength of units, etc...
The author's piece refers to the ability to inspect web documents to see how markup works. This is an order of magnitude harder to do in mobile apps often providing the same functionality.
So to any kid that is interested in technical things, there are currently 0 things holding you back: You all of the worlds information at your fingertips, can order any electronics part for cheap, can build cool things with tiny computers.
In the realm specifically of computers, I think kiddos today who do have the inclination to tinker in the ways we remember fondly doing so are going to have a lot harder time of it. I personally have spent time around Zoomers who were raised on iPads, and they love and are interested in learning more about technology, but at the same time are coming at it with what I perceive at least to be a far lower skill average than what I had at their age because all they know are iPads and smartphones, which are more and more locked down and untinkerable and who's muscle memory and general knowledge pool just isn't transferable to "real" computers, if you will. For example: a younger person once asked me where the file browser was on a Windows PC. I had to explain to them that's Explorer, but it didn't connect with them because it was configured on this machine to open their share drive on a university system which is just a drive letter, not a set of curated folders like "Documents," "Downloads," "Gallery," etc. And to be completely clear here: I am not calling this kid stupid, they weren't. They were untrained and ignorant, akin to someone who wants to learn to drive a sports car only ever being given access to the PlaySkool red and yellow pedal car.
Now that being said, there are still plenty of ways kiddos can tinker with software and electronics. 3D printers immediately come to mind. You (usually) can't just bang your sausage fingers on a capacitive screen and get good quality prints from go. There's calibration, for many there's assembly, for still others there's less computery-stuff but more things like chemistry if you're going the resin route, not to mention materials safety and of course, inevitable troubleshooting. It's not quite the same but IMO, it still promotes analytical, problem-solving, learning-to-research-and-self-teach type thinking which is critical to developing engineer brains.
That being said, if you do want your kid to go into software, if it isn't already obvious to you, take away their stupid phone and give them a proper computer. And if you don't want them necessarily going into software then just take away their stupid phone, at least sometimes, so the social media companies can't completely rot their brains out before they're even out of school.
> given recent advancements in UI
Also I have to push back on this specific point: I don't know of a single thing, except MAYBE iOS, that is consistently good with regard to UI. Windows is downright atrocious at this point, MacOS is fine (apart from Finder which is awful but it's always been awful), Android is a complete mess, every AAA game sports an interface that's even worse than the last, embedded systems are almost universally badly coded/organized and full to the brim with chinglish (is that term offensive?), web apps are slow as fuck with everything designed "mobile first" by which they mean they took out all the text and made everything stupid icons inside drawers so you end up sitting there translating some designer's idea of how hieroglyphs could work...
Or, better, give them two in one, i.e., a GNU/Linux phone.
- train hackable LLMs on a corpus targeted for younger audiences
- offer built in “escape codes” to the lower levels of gaming systems like the playdate
- offer social networking sites meant to be customized/hacked on (eg myspace)
/edit These are ideas for how to bring tinker-ability to where kids are. But I don’t think I can say with confidence what is going to make a great explorative environment for the next generation. Bringing as much useful tech into the right places in kids’ lives, wherever they are and whatever background they have, is going to be the right start though.
FOSS.
The project that currently occupies most of my time, Decker[0], is a rapid development platform that can produce standalone single-file HTML "applications". The detail I'm most proud of is that every such app still contains the entire suite of editing tools: anything made with Decker is ready to be customized and extended by end-users.
It took a while for me to understand that I could do anything with that (or might want to do anything with that), but eventually I realized that there were descriptive names for sections (function names!), and that there were patterns in the list of opaque words like "CMP" was usually followed by a "BEQ" or "BNE", and hovering over one of the latter two would pop up an arrow to another line, just like if I hovered over a "BRANCH" -- aha, "CMP" must be "compare" and then "BEQ" is branch-if-equal, and "BNE" is branch-if-not-equal!
That was approximately the first time I realized that computer programs weren't magic, that they were complicated things built out of simpler things, and that it was possible in principle to see and understand the simpler things.
Then I realized I could change how it worked, just like changing the menu bar or graphics, by changing the corresponding hex codes next to the words! First time was to find a section like "checkIfRegistrationCodeIsValid" and notice a "CMP" followed by a "BEQ", and change that to a "BRANCH"...
But how in the hell do you read that source code. I've seen some gnarly C in my time but man what even is that. How are you able to maintain this? It's beyond me. Please explain!
I use a handful of macros to abstract out repetitive patterns (EACH is a for-loop that iterates over all the elements of a lil list/dict), very short names for the most frequently-used utility functions (lin: lil-is-number? lil: lil-is-list? lmn: lil-make-number, lml: lil-make-list, etc), and typically aim for one idea/process per line, rather than one statement.
I find most C code dreadfully verbose, repetitive, and sparse. This style makes much better use of screen real estate and allows me to look at even fairly complex routines all at once, without having to scroll or jump around. Many APL-family languages use similar conventions in their implementations, though often relying much more heavily upon macros and abbreviations than I do.
The rest was an offline experience. You tinkered with the precious downloaded files. You knew how to change bytes with a hex editor, even if you knew nothing about the format.
Years later, programming in Win32, I found you could do a lot of tinkering by getting window handles to windows and UI elements of other programs and changing attributes / calling various functions. I don't think this was exploited nearly enough by the curious youth.
These days if you show a kid that if you type
javascript:document.body.contentEditable=true
in the address bar you can change the contents of a web page just by clicking and typing they'll have a great time creating fake news items, etc.
So damn handy. And set me off on the path of programming for sure.
And is this available as a desktop too? or is it web only?
There is a native version of Decker implemented in C using SDL2. It's fairly easy to build from source for Linux[0], and I offer periodic Windows and MacOS builds on itch.io[1].
Apple sounds like the kind of company that would successfully build a smalltalk device, yet they go the opposite way of locking down their devices hard.
Outcomes of this effort are powerful version control and package management. I don’t know, but it seems quite clear to me that Pharo folks start with base images, load their package dependencies on top of it, then hack away on their own code. Inevitably they create a new package with a list of dependencies for others to use.
What they don’t appear to be doing is “living” in their images. Rather they create application specific instances from source code.
Emacs users tend to “live” more within it than the SmallTalk/Pharo people do.
In the end they distribute images assembled much like a Docker image is today, made from a deterministic set of sources and then snapshot.
So don't.
Build a reproducible distribution image from a base image + fileIn source code.
https://cuis-smalltalk.github.io/TheCuisBook/Daily-Workflow....
https://www.google.com/books/edition/Mastering_ENVY_Develope...
Some of these tweaks are simple. Others are significant rewrites. But, the point is that I can approach computing on my own terms, and that's pretty neat.
In lines of code and pixels fair, Within your realm, I find solace rare. A love that's forged in binary strings, A tapestry of malleable digital things.
Oh, how you captivate my heart, With your C-programming art. Your 8001 pixels dance upon my screen, Creating worlds, both vivid & serene.
Through endless loops and if-else's rhyme, We tinker in space, one byte at a time. Together, we unravel mysteries profound, In a realm where love, math & logic are bound.
Oh, Tetris, with your falling blocks of delight, You bring joy that illuminates the night. With each line cleared, my heartbeat soars, Our Soviet connection strengthens forevermore.
And Snake, dear Snake, slithering through the maze, A dance of patterns, a captivating craze. As I guide you, pixel by pixel, with care, Our bond grows deeper, beyond compare.
And let us not forget the classic Pong, A symphony of paddles, back and forth, strong. In this simple game, our tinkering takes flight, A testament to the power of endless night.
Oh, TI-85 Calculator Games, you're my muse, With you, my heart forever chooses. In lines of C, our love shall persist, Forever entwined in digital bliss.
To the best code goes the trophy, Yours truly, BarefootJoey & my AI homie
But, as I recall, it was TI-BASIC, not C, as the programming language. Was that the AI's mistake?
Your words show your zest
for the games you hold so dear.
We can see they bring you cheer,
You even told us the names
of some of your best-loved games.
Now lets all give a cheer,
and toast your hobby with beer.
On the other hand, there are projects like https://github.com/rxi/lite Its scope and layout makes it extremely tinkerable.
What do you have against .org websites?
If you can guide, or shoehorn, people into using your service, and it's 'good enough,' you can make a lot more money than if you're doing custom one-offs for everyone, or writing a bunch of potentially buggy code for different variations, or having your team troubleshoot integrations. An important point too is that, if one person sees another person using the app, and it's a standard unified experience, that helps its spread too.
"It is difficult to get a man to understand something when his salary depends upon his not understanding it." - Upton Sinclair. I personally would vote for not locking products down, but that's what we're up against.
To a lesser extent, even being able to modify pretty much any game mechanic via the pull-down Console was amazing too. A great entryway to programming for the young enthusiast!
Always was a wonderful advantage to owning a PC over a console. That, and the accompanying utilities you could combine with the game, to create new graphics, sounds etc.
Other companies will soon follow. There's too much risk to a company's bottom line and reputation to allow or encourage modding. Mods compete with official DLC packs, and if someone streams with, say, a mod that puts a swastika on the main character or something, that harms the publisher's reputation.
I would say hang on to your old copies of Doom and Quake... but Doom and Quake are Microsoft products now, and Microsoft doubtless has ways to make the asset packs unavailable except to official ports which require a Microsoft account to play.
I think the world would be a more perfect place if everything had turbo buttons. Internet too slow? Hit the turbo link button to 10x your download speeds for 30 seconds. ChatGPT prompt sucks and just isn’t getting it? Turbo that sucker and watch it prompt you instead. Food is taking too long at the restaurant? That’s right, turbo. JVM takes too long to spin up? Probably no turbo there, that’s never gonna get solved.
Unfortunately, I had no such button on the family computer, so many games were unplayable because of our speedy 486SX33
There is a notable e-collective dedicated to soft/changeable systems, the Malleable Systems collective, https://malleable.systems
This article is very true, we have indeed lost the ability to do "naughty" things because everything has been made "safe" (illusion) but my gripe is even not that.
My gripe, the one I keep ranting about, is that the users themselves have become tamer.
They have believed that the way "Google" tells you to do things is the "right" way and you should always do only what the application suggests you to do.
Whereas I grew up in the early 2000s with a purely hacking and fun ideology for computing. Make bizarre graphics because something extra was deleted, talk to people who were into this and just have countless hours or fun tinkering.
I've long applauded the efforts of the JA2 1.13 devs and their drive to externalize basically every game parameter into xmls that can be edited rather than hardcoded inside the game's executable.
Tweakable software is the best!
I would recommend playing with simpler stuff and building it yourself from source and playing with adding things to it. It doesn't have to be useful things, try making all the menu text silly for the hell of it or whatever. It's still fun.
So I set out to write a TSR (Terminate & Stay Resident) program that would pop up extra functionality in Deluxe Paint. Using some keyboard shortcuts I could add a rectangle to the screen, and select a grid of images. The separate images would then animate on another part of the screen. Needless to say that the integration with the rest of Deluxe Paint was somewhat limited, but it was good enough for me.
Looking for what could inspire them to tinker in the same way without always wanting a YouTube video or book to follow.
How would you create a love of experimenting and trying without fear of failing or doing something wrong?
Shoutout to https://www.geekmomprojects.com/ and the others. Thank you for tinkering. Makes our world better.
I feel like the world of software can probably be divided into the same moral classes as D&D, with M$ as Chaotic Evil (sorry M$!), Google as Chaotic Good (or would it be Lawful Evil? Probably lawful evil) and GNU as Lawful Good. All have their merits, flaws and compromises.
But, tinkering neutral is a great addition to that framework.
Long before that, I’d spend hours editing random INI files in windows games in hopes of finding something.
Things got a lot more complex these days. When I was a kid I was able to hold in my mind how DOS works, how x86 works and was able to learn a bit of C and assembler to do about anything. Hack software, build my own, have fun.
Doing small games was pretty easy if you knew some graphic modes and had some undocumented source codes for drivers for various 2D graphics cards. Trying now to learn modern DirectX, Vulkan, shaders and graphics stacks is more complex.
Nobody can now hold in their heads all the important details of how operating systems work, how networks work, how graphics woks, how web apps work, how mobile apps work, how backend works, how desktop apps work, how ML and AI works.
You have to specialize in something. Get an Arduino and learn how to flip a led. Right click a popular website, paste the source code in Notepad and try to modify it.
It's not less fun tinkering, but it's going to be specialized fun if you ever want to learn something and get good at it.
As an X-Gen, I remember as a kid the first computer I ever saw was a ZX-80!
You could do 'stuff' with those early computers, and Basic was great and all, but the early days of the Web really opened up exploration for me.
As a solo developer it suddenly provided opportunities to work commercially without having to have a computer science background and be a very serious C++ developer.
These days I see my kids exploring programming through Minecraft Java Edition. They also create and make 3D printed toys and objects in software I could never have dreamed of. They also create and edit their own YouTube movies, again things I never dreamed of being able to do.
So whilst early tech opened up possibilities to explore creativity, the options were limited in many ways.
Now the entire world of creative exploration no longer has gatekeepers.
The explosion of the App Store genuinely opened up opportunities through tools like xCode and globally distribution that individuals never had before.
Similarly, you can be a movie maker, photographer, App Developer, 3D artist, and producer of 3D Printed Widgets, and you don't need to ask anyone's permission.
It's not a perfect world, but it's still good for creators. Just that maybe it doesn't all seem as exotic as it once did in the 80s and 90s!
Edit: One thing missing today is the easy ability to play with commercial software without a license. Back in the day you just needed the file and a serial number.
Many schools provide licenses to Adobe software and more, so that's good.
And I suppose lots of software has a free Cloud version, or a limited trial. So its not all bad these days.
But I can recall preparing for interviews by finding a copy of some software and then playing with it on my own computer. That's riskier these days as you may end up turning your computer into a Crypto Mining device LOL
This gives the ability for anyone to add a different front end to any pure crypto back end.