Computer Science Teacher
Computer Science Teacher - Thoughts and Information from Alfred Thompson

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Are Programming Languages Really Languages


    Every so often someone suggests, sometimes in jest and some times in all seriousness, that programming languages “count” as a language for meeting graduation or degree requirements. According to Ian Bogost, who is not happy about it, some schools are actually doing this and others are close to it. (Computers are Systems, not Languages)

    Is this a good idea? I think it largely depends on what you see as the value in learning a language other than your own native language. As someone who struggled his whole academic career with languages (first year French twice, First year German three times) I’m not so sure that language learning the way we do it in US is much good. Very few really become fluent enough to have more than the most casual of conversations (any one have evidence to the contrary?)  One reason I often heard for learning a foreign language (the politically correct term is world language I think) is that it gives one a better understanding of the culture of the countries where it is spoken. I guess that is true to some extent. Although with our “flat world” is it as necessary as it was a generation or two ago? Arguable. Isn’t the world of computers a culture though? Perhaps learning to program helps people, especially in the humanities, some insights into that “other” culture?

    Another reason I have heard is so that one can read research and other works in the original language. Perhaps that made a lot of sense when French and German were the principal languages of some areas of study. But today people write in far too many languages to make focusing on one make for a solid argument – well unless that language is English. An awful lot is written first in English even by people whose first language is not English. On the other hand there may be some value in being able to read code in the “original” language. It’s a theory. And fortunately computer languages are often enough alike that learning one or two is enough to have a reading familiarity with others.

    Does learning a different language help one understand their own language better? That seems a stronger argument than some others. There is no close corollary to this with programming languages with the possible exception of COBOL. Smile 

    So am I arguing that programming languages should take the place of natural languages as general education requirements. Not really. I’m sort of asking why we have learning natural languages as a requirement. Sacrilege of course but why not? I do think that more people should take some programing or other real computer science course though. It is part of being a fully educated person in the 21st century.

  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Picking Programming Languages for High School - Never Ending Story


    I see that Susan Canaga is bringing her school's discussion on programming languages looking for industry opinions. This is a topic I have addressed a number of times before (most recently here) but one which never seems to be settled. In any case if you an opinionated individual and want to put in your two cents I'm sure Susan would welcome the feedback.

    As I have said more than a few times I like Visual Basic. NET as a first language. The syntax is easier than the C based languages. Literally millions of programmers use Visual Basic to develop applications with significant user interface needs. So it does scale up to full scale professional development.

    C# would be my second choice for a first language and my first choice for a second one. I like that it is a .NET language which means that you can learn and use the .NET Framework classes. And of course C# allows students and others to easily use the XNA Game Studio Express to create video games for both Windows and the Xbox 360. I happen to think that C# is an easier language to learn than Java. Yes I am biased but I came to that conclusion years before I came to work for Microsoft. I like the way built-in types are handled in C#. I also like using properties (an option in VB as well of course) and other features. LINQ and related features that are coming (also for VB) in the near future look like they have the potentially to really simplify handling data bases and other large amounts of data easily. That has huge potential.

    C++ is a language that is not going to go away any time soon. It is still the language of choice for a lot of high performance gaming, embedded systems, and anything that absolutely has to get close to the hardware. A first language? Not if up to me. On the other hand the things one can teach using C++ makes it an important language for someone who intends to be a serious student of computer science. If it were up to me I would probably have left C++ as the language of the Advanced Placement exam. C++ is not the best way to learn object oriented programming. C#, VB and even Java are better for that. On the other hand there is power, at the cost of ease and safety of course, in C++. I like that for when it is really needed.

    But of course if it were up to me no one would take AP CS as their first programming course. That's like taking AP Calculus without having Algebra and Geometry first. It can be done but it is hardly a good idea.

    The Visual Studio Express editions are available for free in C++, C#, Visual Basic and Visual Web Developer editions so teachers and students have some great free options for all of those languages. If someone wants to make the case that Java is better than either C# or VB as a first language go ahead. (I've got my flack jacket on.) I feel sorry for AP teachers who have no choice but to teach it.


    Technorati tags: , , ,
  • Computer Science Teacher - Thoughts and Information from Alfred Thompson

    Four Key Concepts of Computer Programming


    Last week Rob Miles who is taller than I am, has more hair than I do and has an English accent all of which indicate he is probably a lot smarter than I am left a comment on one of my posts that lists his idea of the four key concepts in programming. He left to comment on Do We Need A New Teaching Programming Language BTW. The post and his full comment are worth the read. Rob’s list was:

    • Process data (assignment)
    • Make decisions (if)
    • Loop (do - while, for)
    • Use indexed storage (arrays)

    Among other things he said:

    If you can do these four things you can write every program that has ever existed. Sure, the code won't be pretty, but it will solve the problem. In my course we focus on algorithms at the start because this is where we actually create behaviours  [note classy British spelling which adds credibility] that solve problems.

    In all seriousness, Rob is a great teacher who also writes some really good textbooks. He really knows his stuff. All of that not withstanding I kept trying to think of a fifth thing to add to his list.

    I thought about input/output for a long time. But I/O is such a platform dependent sort of thing. It depends not only on the language but the operating system and even available hardware. Input via a key board is different from punch cards (remember those) and still more different from input via a Kinect sensor (let’s keep in mind that there is a future). As I recall the PASCAL standard did not specify requirements for input/output and left it to the developers for individual platforms. So that probably doesn’t fit.

    I thought about variables but that is sort of covered by process data and indexed storage. Even internal data representation which I see as a key computer science concept is probably not as key for programming. I have successfully used programming languages that only stored integers and strings. Well maybe there was a Boolean but I forget. I managed to write some useful applications anyway. Some even dealing with money.

    Recursion? How often do you really need recursion? And a lot of things that recursion is used for loops will do just fine for. So while one should learn recursion and a really good programmer should know how, and more importantly when, to use it I don’t think it fits the top four or five list.

    Would you add something? Remove something? Overall what do you think of Rob’s list?

    Note:  To subscribe to this blog please use as the RSS feed source. Thanks.

Page 3 of 618 (1,853 items) 12345»