On to another point I tried to make at the Node forum, perhaps not too well.. That perhaps that the usual conception of “real programming” is misconceived. (I have a nagging feeling that I’m going to regret writing this post, but here goes..)
Programming is generally conceived in terms of professional programmers, implementing software for other people to use. Good professional programmers design software that users really enjoy, works within well-defined parameters, and that doesn’t crash. This is what this kind of programming looks like:
The guy on the bottom is the user, having a great time as you can see. He’s safe because the programmer up top knows what he’s doing, and is in control of where the user goes, making sure no-one ends up somewhere undesirable or unexpected. The user can totally forget about the programmer, who is out of sight, despite being in control of the whole thing.
Of course there’s a whole bunch of other metaphors we could use, which would cast this relationship in very different terms, but I’m trying to make a simple argument, that real programming is where you program for yourself, and with those around you. Furthermore this is likely the most common case of programming – how many people are twiddling with spreadsheets right now, compared to the number of people developing enterprise Java software?
People who are “real programmers” are unlikely to call themselves programmers at all, and in fact might object strongly to be called a programmer. In my view this reflects the closed-minded, limited terms in which we consider the very human activity of programming, and the long way we have to go before we have decent programming languages, which allow us to better relate to the cultures in which software operates. Real programming should be about free exploration using linguistic technology, experimenting beyond the limits of well-trodden paths, establishing your own creative constraints within otherwise open systems.
We are in an unfortunate situation then, where the programmers who have the skills to design and make programming languages are on the whole not real programmers, but dyed-in-the-wool professionals. It is therefore essential that we call for advanced compiler design to be immediately introduced to all cultural studies, fine art, bioinformatics, campanology and accountancy degree programmes, so that we can create a new generation of programming languages for the rest of us. Who’s with me?
Yep that’s exactly what I’m talking about Ash, not sure how I managed to avoid using the proper term in my post!
I am not with you. I think to participate in programming no matter if professional or “real”, you need to have substantial knowledge in performing the programming language. To become a “real” programmer, you need to have the background of a professional. Otherwise you’ll be frustrated about your limited abilities to perform free ideas. I think there is a problem, if you want to manage a complex idea, you cannot use a simple “preformed” tool (by professionals). You have to use a structural rich program with a lot of single commands – and therefore you have to be a “normal” programmer!!
I’m with you, Alex. I intend to make sure my daughter learns programming as a basic life skill (regardless of what she wants to do with her life). It certainly makes a lot more sense than requiring everyone to learn algebra.
It is no question that we have an incredible need for so called programmers that are able to tell all these machines what to do. . this need is mainly because we believe a machine is a reliable extension to our abilities. in realtime or not. and for me there is also no question that a machine can only be a reliable extension if the chain of programmers involved are aware of what they are doing. the more machines, the more “programmers” we need. there have been massive developments to hide complex abstraction layers from the “programmer” to so we can all get to the state of beeing a ‘real programmer’ who can enjoy a free exploration. Julian oliver e.g. was pointing out in his talk that design is always hiding something significant. software and language design does the same.
I believe in our culture programming will be something so absolutely common like writing letters in a row to encode information. So maybe we call a programmer just a ‘real person’. thanks alex for your talk and thoughts. big input!
I’m with you. Have been for quite a while. I consider programming just another tool in the arsenal to express ideas and occasionally do ‘useful’ work. Well, it’s a pity that I have to earn my living expressing boring and sometimes outright bad ideas, but the bills are there for paying.
I’m trying to educate people around me in general and users, if they are up to it, into what is programming and why it is a very close relative to common sense.
I must admit, I’m a bit sceptical, the idea of programming as engineering can be easily misunderstood. In a way I love the idea that everyone needs to understand the way machines work, to faccilitate the technological framework of our society. Is engineering really the right answer? At the end of the last century the belief in technological progress and the advancements of engineering to create a better world almost dissolved, and now this strong belief n technology, especially computer technology has a great comeback. But how can we find the right balance between technological progress and human progress? There might not always be a technical solution for our problems. To cite an old spanishphiosopher: “I wish it would dawn upon engineers that, in order to be an engineer, it is not enough to be an engineer.” (José Ortega y Gasset, 1939)
Now I lost my point, to make it even more drastic our fate depends on engineers, how can we then differentiate between critical engineers and normal engineers? Do engineers have to care about the consequences of their projects to be critical?