697 karma · joined February 15, 2019
And for a lot of projects today, "the bottom" ends with C for precisely this reason - while the fact that C is the chosen language for this task is completely arbitrary, as arbitrary as the status quo hardware paradigm of "x86 on desktops, ARM on mobile". I could imagine a universe where it was an extended form of Basic or Pascal that ruled the world instead.
Likewise, I was also looking into extending Lua with a small DSL interpreter that could accelerate certain byte-level tasks: copy around blocks of bytes, run some common algorithms quickly, define spaces for variables, apply some parameters. At first I thought of this language as a "VLIW" assembly language with a particular focus on having a big bag of tricks, but when I compared my semantics with actual hardware assemblers, I found that having no registers or stack manipulation and focusing only on direct memory addresses changed the character of it so much as to make it a different beast, one more like the "autocoders" of the 1950's: not quite ALGOL, and yet clearly headed in that direction.
All of which is to say - the more you are comfortable with compilers, the more the bottom just becomes the thing you happen to be leveraging to ship product. It isn't "the real stuff" until it becomes the specification language. Some things, like how numeric types are defined in hardware, force the terms of specification way up the stack so that the hardware may be used at its capacity. But that in itself is an "essential complexity" in computing, where the physical realities coincide with the desired programming model. When it's software defining the spec, as in our libc-and-Javascript-driven universe, that's more akin to social complexity, but it produces the same kinds of effects.
Specifically, I had a parent that really, really wanted me to do honors math because my older brother did well at it(and he went on to get a math PhD etc.) and math seemed like a ticket to "success" - and so, in both middle school and high school, I was tracked into the middle options, and then within a few days of starting, parent had pushed around the bureaucracy to get me in honors, where I was not completely hopeless all the time, but suffered quite a lot from pressure to succeed and cheated a few times. Finally in my sophomore HS year I managed to fail a class and got switched to the lower track because for some reason you couldn't go from honors down to the middle option...and then some time later, parent tried to make me talk the school into letting me take the AP Calculus course anyway! Which they said "no" to, of course.
Basically, HS math ended with calculus, but even that "lower" track had a strong pre-calc foundation with some trig, linear algebra, etc. At most there was always about a year of difference at stake, in fact - so the post-tracking setup did not change that much. But when I went off to college all these feelings carried over and could not be left behind: I tried taking the engineering Calc courses, hit a wall with integrals, wasted probably a year trying to prove something to myself and developed a miserable self-outlook, settling on an economics degree because it had easier calc courses. (Had I realized that there was also some executive dysfunction in play it might have all been a lot smoother - oh well.)
Basically, parental worry about math tracking created a huge, huge sideline from taking on activities that would have actually helped along my development. It started early and to some extent wouldn't have been stopped by the system, but it would have presented less of a direct obstacle in daily life.
In contrast, the option of self-study and college courses as a supplement has been the path for the truly gifted learners, especially around SF(CCSF, SFSU, USF, and you can go visit Berkeley if that's not enough). That's a way more straightforward way to go about it w/r to a lot of academic topics.
And my first inclination would be to see how things go with Msys2 before banking on WSL. You will eventually end up navigating build processes in some depth - but I don't see that as a Windows problem so much as a Unix/libc monoculture problem that gets swept under the rug by never leaving that environment. You won't have quite the same experience with a fully MS stack or with not-specifically-Unixy tools.
Now, of course, they graduate and move out and then the real world starts repeatedly smacking them over the head until they learn to coexist with the current realities. But that happens with the current success-oriented parenting styles, too. Lots of kids work hard to succeed at the achievement markers, develop some notion of entitlement and self-import, and then graduate into being burnouts, addicts, and recluses - if they didn't already become anxious messes from the workload. It's not helped by driving that lesson harder and deeper.
Balance is more important. If they experienced balance as kids, they stand a chance of finding their way out of imbalance as adults and in turn fighting to bring about the world they want to see, instead of navigating blindly from a point of despair.
Developing kindness isn't the only thing to ensure balance, for sure, but it's one reasonable starting point.
With respect to selection, selection is key to all forms of interactive editing because without it you don't have interactivity, you have a linear workflow. As such it does deserve some respect as a fundamental feature, even if it's not critical to fix every last bug. Even if you are working via screen reading and voice to text, you can still benefit from having selection tools available to you.
With a lot of hardware-only workflows, muscle memory training happens by default, which also means that they "get away with" really poor UX ideas at times. With software you can have some mixture of defaults/presets and technique. It's not worthwhile to try to customize all of it(good defaults are precious, early-binding forms are valuable) and technique usually suffices for covering the remainder. But technique is less discoverable than a settings menu, as well, and swipe-and-tap techniques are extremely so since they operate on many dimensions. Compare the new iOS gestures to chorded keystrokes - once you know that chording exists, you can learn any new one given some time.
While the Ballmer years saw the company coast along on its old crown jewels, missing nearly every opportunity, Nadella's MSFT has shaped up to be one that is building a few new kingdoms - in the cloud space, open dev tools, new consumer hardware (see the upcoming Surface lineup) - it's definitely not the Windows + Office company of old.
The more systematic approach which I've really caught onto recently is to assume it has to be atomized a bit to get any breathing room. Make distinct spaces for the narratives, spaces for basic concepts and references, spaces for formal overviews, and spaces for single tasks, features and APIs. Then have them link to each other, using the link as the leverage to let each part of the documents use the necessary vocabulary without overexplaining. While it's possible to overdo that and produce documentation that is a thicket of links, just clarifying that you have a distinct purpose to the space makes the writing process much more systematic - no confusion over what the writing needs to concentrate on.
That means that instead of everyone running alone and mudslinging each other, which gives voters little narrative to work with(which in turn tends to lead towards the incumbents and partisan votes winning) there's more time and space going towards specific issues and platforms that consensus can be built around.
As a voting system there are certainly better ones in terms of the vote itself, but having experienced the change I now think that the impact on consensus-building is an worthy criterion too.
But to get beyond that - and getting beyond playtesting, data-collection and other brute force feedback mechanisms entails doing so - one has to systematically devise original feedback signals - pass-fail checklists, writers' rubrics, dependency graphs, workout logs and so on. Once you have the framework in hand and have validated its philosophical premise to some degree, you can feed your work and ideas through it and it automatically corrects you and guides the ideas away from major fallacies.
Of course, some amount of experimental data helps, but the huge amounts we have grown accustomed to have a habit of producing a lot of busywork - a product tuned and tweaked and prodded to improve this or that short-term KPI or audience appeal metric - without striking at the critical issues that one can probe with a bit of followthrough on self-feedback.
And this goes for how we talk about and express "free speech" as well, since the era prior had just seen the Red Scare, various forms of media censorship, military drafts, and a "government man" approach to solving all sorts of problems. Everything moved in the direction of libertarian, market-driven ideology, and Facebook is an ultimate result of that.
My suspicion is that the "compete with China" narrative is actually the most powerful thing shaping this discourse. The authoritarian end of US politics will seize upon it as a way to take power, but will always suffer the handicap of their solutions being "too much like China". When combined with the free speech principle it animates arguments for allowing free speech on Facebook and throughout the Internet, while simultaneously also fueling arguments for breaking up the company and decentralizing its functionality in the "users have a right to privacy and should own their data" sense. In that sense it's like the motives that produced the Apollo missions, and a politican who approached it that way, as a "defense of our digital property rights requires the investment of our brightest minds" kind of issue would probably be very successful.
In that sense it's much more forgiving than software. Software becomes indecipherable almost as soon as nobody is looking at it and its structures are in some sense necessary for a purpose. It's not as amenable to pragmatic solutions although often, more of them are possible than we recognize.
The exceptions abound, of course, but categorically speaking, you only need some technical knowledge. It's the "how to lead your life" knowledge that is harder to glean, and one most resistant to taking a head-on approach like studying all the philosophers and then ranking their greatness in a spreadsheet.
There is a game product called "Fortnite", and it's just had a huge in-game event, so it's clearly here, alive and well, but you'll never again be able to experience Fortnite as it was 24 hours ago - ever.
And yet future culture is, as Alan Kay puts it, "the past and the present". It's our reaction to that hole, where nothing really builds on anything else, that, in turn, is motivating interest in products with longer time horizons, longer stories and histories to them.
An obvious metaphor for this is video games vs pinball:
* Fundamentally digital vs fundamentally analog
* Mostly design & marketing vs mostly manufacturing
* Trivially cloned vs scarce, unique
* Black-box artifact vs maintainable assembly
* Perpetually caught in the breathless hype cycle of tech, vs increasingly existing outside of that cycle
Pinball's days as part of the traditional amusement business ended with the 1990's, but it's found a resurgence of interest in the home market as a kind of collectable furniture - something to put in a rec room or a basement arcade, that retains decent trade value if maintained. A whole array of small manufacturers have appeared this decade to serve that market. It's much easier to understand a collector's market for it being sustained 30 years out, versus video game collecting, in which any product with a modicum of popularity will have had its primary content either already preserved through piracy(if emulated), or else impossible to reproduce(if a service). It's a much stronger version of interest in vinyl records or dead-tree books taking precedent over streaming music and e-books.
Because digital media has so little physical value, it is beholden to be entirely marketing driven, front-to-back, and to treat you as either a product marketer or as the product, and sometimes both. The true form of the medium remains always hidden behind the UI. Even your personal work, done on systems you wholly control, just disappears into a collection of files, where it is easily forgotten.
And in that sense I think we are not really asking, "Where is Flash? Where is Hypercard? Where is BASIC?" - because in different eras each of those tools did the kinds of things we wanted and expected from a beginner's tool - so much as we are asking, "Where is the actual medium? Where can I do work and preserve the original source material? Where can I send a kid to learn to play with software and not have it all break six months later, rendering the learning useless? How can I curate software when nobody can make any promises?" Tech continues its warfare for a platform monopoly, and so on this front we keep starting from zero, over and over. It's not hugely different from the space we've arrived at in professional software development, where dependency hell and code rot is an ever-increasing concern for all codebases.
A good proportion of the art-as-art world either finds new and original ways to push craft, or focuses on medium facilitating message(which in turn falls neatly into the product-marketing framework).
At the same time, this dog wasn't so cooped up and energetic that he could not control himself, and he napped a good deal of the time. He was clearly getting bored at his sleep-deprived owner still sitting around in a beanbag chair working and barked that this was not acceptable, but his interest was maintained by meeting the new people and smells in the space.
It was just a great reminder of how varied breeds and individuals are. I've met rescue wolves and they are extremely shy, requiring total stillness to get any trust; little dogs tend to be domineering yappers; show breeds are often anxious. Of the lot, the "working dogs" are probably the ones that are hardest to keep up with daily, since they need either plenty of exercise or stimulation or both.
With respect to stuckness, I have a kind of rule of thumb for everything creative now, which I can phrase as "underachieve twice over". The first time I capture somewhat less than the essentials of the thing I want to address, but require at least one; the second time(third, fourth, etc.) I plow forward and build another iteration on that, adding more of the requirements.
It's not different from estimation or calibration in any other sense, it's just that there is an element of following through on a bulk of knowable, ordinary work in order to collect the important data, instead of sitting there perplexed and avoidant when I don't instantly understand the whole of it.
It's short-termism, which is a common threat to society at large. Think of cities that build in sites vulnerable to earthquakes or floods, for example. After the event hits, everyone says, "Oh, we will never do that again," and it is true for approximately one generation. Then, unless the culture has evolved to value metrics coinciding with these kinds of long-term sustainability issues, they immediately start to relax any preventative policies.
In business, all the cycles are shorter, there's always a "new thing", and next to nobody has the kind of deep institutional experience you would see in a big topic like city planning. Thus the valuation metrics of all agents will quickly fall to current market pricing, and competition may act to hold those metrics in place - if you are the only restaurant in town that doesn't cut corners, customers will complain about how overpriced you are. Regulation, labor and consumers exercising their power all have a role in changing what a business can or can't do by raising the floors on acceptable practice.
But let's say you are exceptionally good at operating a restaurant on your own - quality everywhere - and grow to have a chain. Now you need to hire managers, and the viable hiring pool consists of the people who were cutting corners before - because there is literally nobody else out there. Good luck retraining them!
Plus, at the corporate scale, you end up with fiefdoms and power struggles leading to metrics that agree with the current internal political situation, not industry or marketplace factors, and certainly not sustainability metrics. A business is a "machinery of people" and needs periodic tune-ups and reprogramming to go in vaguely the right direction.
In a lot of ways what it all comes down to is one of my personal favorite phrases, "fix ordinary things." Most of the time, we don't. We have a habit of putting off fixing all sorts of little things in our lives, even if our intentions are good, so of course we're caught by surprise by the disasters.
Boxing, for example, is hugely restricted to avoid grappling and yet the fighters still try to clench up regularly. Actually staying on your feet, throwing punch after punch, is hugely unnatural. But boxers that learn enough grappling to escape submissions can cross over to MMA and do respectably well, because they have the skills to bring down someone at a distance.
Judo, likewise, is full of artifice these days. There are mamy restrictions on the types of holds, penalties to avoid stalling, scoring balanced heavily towards getting off an impressive throw, and a limit of up to twenty seconds to get a pin. But these restrictions also compel judo players to develop strategies for a quick, confident takedown and submission.
The styles that suffer, in contrast, are the ones that may have had relevance in the context of weapon fighting but are now mostly performance - the tai chis or aikidos of the world. Krav maga persists in part because its design works with the smaller knives that modern armed forces continue to use.
Ultimately, the point of training any named techniques is to develop muscle memory - what that memory is used for is secondary, and in that sense all popular systems succeed.
Electric is also giving ferryboat transit a new lease on life in terms of energy cost/emissions impact. The SF area fleets have ordered a few electrics already - and they've been expanding service, adding new terminals. It's a return to an older model for regional transit and it has plenty of upsides, with the big caveat of needing a viable coastline.
Between those two, I think you have the model for a lot of future transit infrastructure. Regardless I would also not claim rail is "doomed".
However part of the challenge of this would be in covering numerous combinations and identifying places where two or more parameters need to be changed simultaneously. Still basically a problem governed by combinatorial constraints.
Garbage collection emulates the intent of this method with generational collection strategies, but it has to use a heuristic to do so. And you can optimize your code to behave very similarly within a GC, but the UI to the strategy is full of workarounds. It is more invasive to your code than applying an actual manual allocator.