One of the first concepts I show when teaching Model-driven engineering is the MDE equation (Models + Transformations = Software ) which obviously revisits the well-known Niklaus Wirth‘s equation: Algorithms + Data Structures = Programs.
I thought that by linking the two, it would be easier for the students to grasp the main aspects of MDE but I was wrong. Relating the two doesn’t work because it turns out none of my students ever heard about Wirth equation, nor about Wirth himself and most of them have no idea what Pascal is (happened already three times with both undergrad and master students).
Frankly, I’m puzzled. I’m not saying they should learn Pascal (though which language should be used to teach programming to first-year students is an interesting controversy) but I do believe that some context about the languages they learn is needed. Students should know the basics of the main programming paradigms (structured, object-oriented, functional,…) and get a basic feeling of the strengths of each one, their representative languages, the reasons that motivated their creation, etc. Given the quickly evolving language landscape, students must understand the relationships between the different languages and how they complement each other. Otherwise, it won’t be obvious to them that the programming skills they learn can be applied to a variety of languages.
A quick search shows that “history of programming languages” is not a common course (we do have a lot of “history of computer science” courses, but they tend to focus more on the hardware part). Hope you agree with me that this should be changed in a near future. You know, “those that don’t know programming history are condemned to repeat it”.
And, of course, we could follow a similar reasoning to justify the need to also start teaching history of modeling languages, which is also quite rich already.
FNR Pearl Chair. Head of the Software Engineering RDI Unit at LIST. Affiliate Professor at University of Luxembourg. More about me.
Follow also the discussion around this post on reddit http://www.reddit.com/r/programming/comments/17xc50/young_cs_students_do_not_know_who_was_n_wirth_nor/
Interesting post Jordi. Your equation (“Models + Transformations = Software) resonates very strongly with me. I also agree that students should learn the different categories of language and how they relate. A colleague once drew a nice graph with 3 dimensions – data, control and processing – and plotted various languages according to their ethos. I found it very useful.
However those are abstractions. They make sense – for me at least – because I’ve spent time (lots!) ‘down and dirty’, learning from doing. It was only through experiencing concrete exemplars that I came to understand and appreciate the higher level abstractions.
There’s undoubtedly huge value in learning from one’s predecessors’ hard-won experience. The challenge is how to make it accessible. For me that’s always been about setting carefully-chosen problems, and then illustrating how some technique can solve it elegantly. Case in point: the first time I ever saw transitive closure on a graph written in prolog. I could barely believe the solution could be so simple!
From my days at university when I studied physics, and discovered that philosophy of science and history of science were not prescribed courses, I am stunned. I was one of a few students who took these courses. How can you understand any profession if the philosophical consequences are not studied in tandem? How can you reap the benefits of its evolution when you are hardly aware of its history?