Archive for category Interdisciplinary learning
In politically correct America, Intergenerational Learning has become a euphemism for teaching grandpa how to work his AOL account. I’m not talking about that.
In social animal species, there is evidence that it benefits a population to have lifespans far in excess of the age when individuals can reproduce. For non-social species, those of us past our sexual primes are just consuming valuable resources in a limited ecosystem. But we social animals tend to continue to add skills, memories and mental abilities to our libraries, which can then be transmitted to youngsters much more quickly than they could be acquired through experience. That’s the theory anyway. Try it on your teenager.
It seems to me that in the world of tech – particularly software – great opportunities exist for improved cross-generational learning. This is apparent in our history of programming languages and development tools. Much of my history with software involves the C language and its offspring. I’ll draw an example from that experience.
I’ve always had an uneasy relationship with C (I started with Fortran). C seemed in many ways to be the perfectly wrong combination of a high and low level language. Pointer math is indeed fun, but there is danger. In my aerospace days, I was able to get an exemption from the US Air Force on their requirement that certain C-17 avionics be programmed in a “high level” programming language such as C. I opted for Assembly instead, the reason being that Assembly compiled much smaller, allowing us to get everything on a single 87C196 Intel chip. I didn’t think that “high level” of C significantly reduced the risk of bugs that would sneak through functional testing. The Air Force bought it, and history bears me out.
But C proved to be a bit too “low level” for enterprise software development. Higher-level languages (easier to code) like PowerBuilder and Visual Basic (early 90s) and then Java and C# (early 2000s) greatly improved rapid software development while reducing the skill level required for coders to be productive. But not without impact. The C guys were on the street, along with their vast experience in good design. It is far easier to learn to code in high level languages than to design good software (what we call “architecture” in an era of terminological inflation).
Eventually, after gross cost overruns and some clumsy architecture, the new coders grew into their jobs, right about at the time when “social” became a noun and drove the creation of new software tools, database engines, and programming languages. Ruby and Python gave newbie coders a lot of rope. Maybe not enough to hang themselves, but enough to lock some large firms into maintenance-nightmare codebases that will keep on costing until they’re retired. Rapid shifts in technology that inadvertently discard tribal knowledge are well documented in other fields, e.g., energy and heavy manufacturing.
We see an absence of cross-generational learning not only in programmers, but in those who create programming languages, tools, and development frameworks. VB’s syntax was a complete mess and its object orientation was an afterthought. Java cured all that, and we were glad to be done with VB’s type-promiscuity. But a generation later (in programmer years) Python repeated many of VB’s sins, along with being a scoping-rule disaster.
This problem in the world of software is exacerbated by cultural factors and the geek mystique. It extends beyond the technical realm. As Silicon Valley critic Vivek Wadhwa points out, the tech press and investors can’t get enough of the 20-year-old white male supergeek CEO myth. Incumbent in this myth is the notion that experience has negative value.
So how do we fix this? We can’t blame short-sighted downsizing and retirement for this loss of tribal knowledge. We seem to need broader knowledge, a dose of maturity or both. The problem is cultural, sociological or psychological; but the affected community is tech – not an area known for multidisciplinarity. How to fix it? Perhaps it will have to wait for the next generation. Maybe we can find some old farts who know how to do this.
Hack: withstand or manage (“I can’t just can’t hack that.”)
Hack: write code (e.g., TechCrunch NY 2013 Disrupt Hackathon)