Additional profile information on Alfred Thompson at Google+
Last week I was at the CSTA Computer Science & Information Technology conference in New York City. One of the great thing about events like this is the hallway conversations that just happen. When you get a lot of interesting people together the conversations are interesting by default. I had one such conversation with Dave Reed, computer science faculty at Creighton University and past Chief Reader of the Advanced Placement Computer Science exam. We started by talking about programming by people whose language is not English. The keywords they use are, for almost all languages, in English. Comments, variables, user written classes and methods though are in their own language. How confusing might that be? Dave has used a program written in German in some of his classes and asked students to explain what is going on from context. That’s an interesting exercise for sure. On the other hand why not translate the keywords?
Many years ago I heard Grace Hopper talk about an early compiler. As I recall they wrote this sample compiler and finished it before it was due. They thought about the fact that keywords are really just symbolic so why not make them in other languages. They wound up adding support for several languages into the compiler. Unfortunately the committee who reviewed the final project thought that was far to complicated to actually work and concluded the demo was faked. Ah, the early days on computers when people really didn’t understand what they could do. To this day compilers seem to only understand keywords in one language and that language is almost always English.
It is not just Americans or even other English as a first language speakers who are doing this. Niklaus Wirth who designed PASCAL among other languages was Swiss. No doubt he could have used any one of several other natural languages but he used English. Off hand I don’t know of programming languages that use non English keywords. If there are some, and there must right, they don’t appear to be common. Anyone know any?
I’m not sure why this is. Most modern computer design was done in English language countries but that should not be a limitation. The other thing I really don’t understand is why IDEs don’t support non-English keywords. I mean how hard could it be to add a parser that uses different (or additional) keywords? It’s been a long time since my graduate course in compiler design but as I recall parsing was only a small part of the whole process. Converting things to meta data should be a simple matter. Expensive perhaps but not critically so. Anyone know of IDEs that do this sort of thing? And why are people whose first languages not designing their own languages using non-English keywords? I can understand something about wanting widespread acceptance and that most experienced programmers know English keywords if not a real working knowledge of English. On the other hand having kids learn in their native language strikes me as potentially a good thing.
Just something to wonder about today.
What is the difference between Hacking and programming? One opinion I have heard expressed is that a hacker can put a lot of code together in a hurry but if a change is needed the code has to be completely rewritten. A programmer may take a little longer but if changes are needed they are more quickly and easily installed without the need for a complete rewrite. One source I heard attributed an observation like this to Maggie Johnson of Google. It rings true to me though. Hacking is usually described as “quick and dirty.” You though a bunch of code together and make it up as you go along. Some hackers are quite brilliant and can do amazing things in incredibly short periods of time. And then they move to the next thing. Or perhaps they stay with the same thing because no one else can understand it well enough to fix it, modify it or improve it. Job security? Perhaps but not a good thing for the people who use, or importantly pay for, the software.
I do a little hacking – that is to say toss something together in a short period of time without a lot of planning – from time to time. I’m not a genius though and typically this ends poorly. The performance is poor, the maintainability is poor, and no one else wants to use it. This may make be biased against this way of doing things I guess. I prefer to program – to think things out, to plan, to proceed in an organized fashion. I saw the difference made clear to me my first year of teaching (a long time ago). I was working on a little game programming of my own and decided to show it to some of my students. As I explained how I had set things up around a number of constants that is hoped would make the program more easily expandable one of the students turned to another and said “Look at that. He’s just starting and already he is planning for additions.” That is one of the real keys, in my opinion, to real programming.
I was a major in Systems Analysis in college. This was during a time when computer science majors were rare and software engineering majors rarer still. But one of the things my professors drilled into our heads was that programs had to be maintainable and extensible. We were taught from day one that programs are not finished but, in a sense, abandoned. More likely at some point you declare victory and more on. But others will maintain these programs and expand them and adapt them. Making their lives easier is a good thing. Think of the Golden Rule – program was you would want the programmers whose code you are modifying to have programmed. I think that is how it is written.
The hackers get a lot of attention these days. These are the basketball players who make the slam dunk that makes it to the highlight reel. But basketball games are won by teams of players executing on the basics – the solid play well executed, the dribble, the layup, the pass that gets the ball to the star. In the long run we need more real programmers to make solid, dependable programs that don’t have be be rewritten from scratch when a change is needed.
What does is mean to be in a post BASIC world? This is the question that comes to mine when I read about an article titled How are students learning programming in a post-Basic world? I think that for most of the people in the discussion it means that we are no longer in an era where all computers come with a programming language such as they all used to come with BASIC. It’s not so much about BASIC having gone by the wayside, although some would like to see that happen, as it is not having that excitement , that thrill, that joy of learning enough programming to create that first program to solve a real problem. (A good insight into that is a related article Midnight programming, 1979 vs. 2011) In the early days when computers came with BASIC (most often written by some guy named Gates who had a little software company selling BASIC interpreters to lots of computer companies like one in California called Apple) lots of people were teaching themselves programming.
In some sense one had to teach oneself. Oh there were books to help but computer science programs in universities were rare, in high schools rarer still and before high school pretty much nonexistent. But while the BASIC language was simple so were our aspirations of what we could accomplish with computers. I still remember learning about loops by creating a program that printed out the times tables from 1 to 12. I could impress people with the result believe it or not. Oh how times have changed! But does this really mean we are in a post BASIC world? I’m not so sure.
First off while few systems come with a good BASIC (or similar tool) installed there are plenty of good free tools that are available as a download. Event the article that kicked this off lists several of them such as Small Basic, Visual Basic 2010 Express, Scratch and Alice and more. There are command line compilers included with some open source OS distributions as well though in all honestly I don’t think a command line compiler is the best thing for an absolute beginner. That is another way things have changed – people expect GUI development tools that create GUI applications. This is one reason why Python, as great as it is for many things, is not my first choice. It’s easy enough to get all these tools but I do wish that they came standard with every operating system. That simple act of discovery or rather of not stumbling on it when playing with the OS is a stumbling block.
I also don’t think that BASIC is dead by any means. I love BASIC. Visual Basic is my personal favorite but I think for total beginners Small basic is a great way to start. It is simple and easy to use – like the BASIC interpreters so many of us stumbled upon. It is friendly, there are turtle graphics, it is easy to start with, there are samples and documentation. It is very accessible. Yet it is powerful enough to do real applications. Possibly best of all there is that “Graduate” button that creates a Visual Basic project so you can move to the next level.
I never bought the line that BASIC was somehow bad for you. I’ve said it before and I will say it again. Visual Basic is as good an OOP language as any other. Small Basic is a nice step in that direction without the professional tool complexity that stifles some beginners. Get a tool, explore programming, have fun with it. You can learn to do powerful things with BASIC without weird looking semi colons, curly braces or having to be rigid about white space. Get hooked on programming like I am so many others have. Yes, this is not your father’s BASIC and not it did not come pre-installed on your computer. But stretch a little. It may change your life.
Related posts – mostly by other people: