How did I become interested in programming?
In a past career I was a linguist, working with Middle Eastern languages and dialects. One thing I learned from that experience is that languages are very really similar. Sure, they each have their own rules, but their rules manipulate the same conventions: subjects, objects, verbs and adjectives. In that, all languages are literally the same thing, but arranged in different patterns.
This is my experience with programming as well. If you can learn one programming language, you can learn any of them. That’s because programming has these same linguistic conventions and patterns as human language.
In the classrooms I’ve been in (usually weekend lectures on some campus or other, coding bootcamp, workshops and other places where computer languages are taught), this pattern is strangely missing from every lesson. The closest I’ve seen a tech course get to really discussing the universalities of computer language was an online course at Coursera on computer science. I expected coders to somehow understand that the very patterns they worship to define what good code looks like, would be very obvious places to start when teaching students how to program. It’s funny how this sort of thing works out, but basically no course I’ve taken in programming seems to borrow on these conventions at all for teaching.
There are many concepts in programming that are universally practiced, but which it doesn’t seem we’re taking advantage of to produce more (and better) developers. Industry knows there’s a vast demand for more of us, but I think we’re missing something our educational approach. Let’s get to some examples.
I like apples.
I like bananas.
I like oranges.
Only students of English write like this. If I were to arm a child with a subject object and verb, then tell them to google how to create a sentence, they might come back with something like this (if they find a solution at all). Even still, they might find tutorials on how to structure sentences, but still struggle to understand how this actually works. Anyone can recognize a pattern, but not everyone can reproduce it (let alone reproduce it efficiently). Yet this is the expectation in the developer community when it comes to education, where self-education seems to be prized above proper training.
The principle in this example is DRYness (or Don’t Repeat Yourself). If you code, you probably immediately recognized all the repetition. These three sentences can be typed as follows:
I like apples, bananas and oranges.
One need not know a single line of code to understand this principle and apply it. But this isn’t usually how coding problems are presented to beginners. It’s typically expected that any of a dozen random tutorials should be sufficient to training a good programmer. That may be true for people who know a programming language already, but not for those who don’t.
Language learning is ideal for abstracting teaching concepts for an immersive course, such as developer bootcamps. A very short list of lessons can apply to a wide array of programming subjects. Figuring out those patterns of abstraction can help instructors fit a wide range of topics into a relatively short course without sacrificing depth. Just like the concept of DRY. Other concepts include:
- RESTful routing
- Debugging/Learning errors
This is the beginning of a sort of blueprint for creating an API for tech education. How are we teaching the vast wealth of knowledge about coding and introducing interested students to it? How are we connecting with them?
I’ll be putting more research into this in the coming weeks, so if you’re interested in the answers to these questions then stick around (via RSS or email).