Additional profile information on Alfred Thompson at Google+
Mark Hendrickson from O'Reilly has an interesting review of the market for computer books in a four part series. The fourth part examines the programming language book market. I have no doubt that it is a valuable discussion for people who are thinking about what sort of programming language book to write but I'd be careful about extrapolating it too far for other things.
I'm particularly interested in some of the languages that make the list as "Irrelevant Programming Languages". Specifically Ada, Alice, LabView and FORTRAN. Relevance is a relative term in this case. I think there are markets, parts of the computer industry, where Ada, LabView and FORTRAN are still important and highly relevant. Do they have the sort of market share that the .NET languages, Java or C++ have? No, but in the markets where they are important they are critically important.
I suspect that for some military and aerospace contractors having Ada on ones resume is going to open a lot of doors. Likewise, LabView is being used in a lot of embedded and robotics applications. FORTRAN still seems to be the language of choice for a lot of mathematical and scientific programming especially where parallel processors are involved. But no, there is not a huge market for books that teach those languages. National Instruments has a lot of training materials for LabView. And the shelves of companies that use FORTRAN and Ada are no doubt heavily loaded with all the reference and learning materials for those languages that one could possibly want. In fact my own bookshelves in my home office are fairly well equipped with older FORTRAN books.
And Alice (and Squeak which is on the list and Scratch which isn't) are not industry languages as much as they are teaching languages. learning them is not an end in themselves but a tool or stepping stone to other things. Does that make them irrelevant? It depends on your definition of relevant.
In the long run deciding what languages one learns is more complicated than just looking at what programming language books are selling the most copies. All software development is not created equal in the sense that they use the same programming languages. One needs to take a holistic approach. What sort of development do you want to do?
If you want to do systems programming (operating systems, compilers, etc) then C/C++/C# are where you want to focus. Are you a math/science person? You'll want at least some familiarity with FORTRAN even if it isn't your main thing. Likewise if you are thinking that finance/banking/insurance/accounting are your thing you should know COBOL if only to understand existing systems. Are you thinking your life is all about the user interface? Best learn some Visual Basic. I wouldn't avoid Expression either - that is where UI is going in my opinion. I think you get the picture.
And of course one thing you'll really want to do if you hope for a long career is to learn as much about different programming structures and paradigms as possible. I highly recommend a course or two in Programming Languages as a topic. Learn the things you need to learn to learn what ever comes next. because the future is coming quicker than you think.
The computer doesn't know what you mean, it only knows what you tell it. How often do we tell people that? Pretty often if I am any indication. And yet people do assume all the time. They assume that variables will be cleared out by the system before being used. In some languages they are and in some they are not. Should you really take the chance? I think not.
does the computer assume you want an expression evaluated in one direction? It's going to do it in one direction but you can't assume that it assumes you want this one done differently. That is what parentheses are for.
The computer is not going to assume that just because you declare and array of objects that you want an object instantiated for each element. If you want and element you need to say so.
I used to describe the computer as an annoying little sibling that takes everything you say literally and will go out of its way to ignore assumptions and translate any ambiguity incorrectly. It may not be strictly true but it is a safer attitude to have then assuming it knows what you want and wants to help.
This is the seventeenth of a series of posts based on the book Programming Proverbs by Henry Ledgard. The index for the series is an earlier post and discussion of the list as a whole is taking place in the comments there. Comments on this "proverb" are of course very welcome here.
The first computer I ever programmed was the IBM 1130 and initially input meant using a card reader. Output meant using a line printer. Now if you were really lucky, which means you were in an advanced course and had permission to use the computer after hours you might be allowed to use the console keyboard or even signal the computer using the toggle switches on the CPU's front panel. Pretty heady stuff back in the early 1970s.
Later of course came light pens on early CRTs and then the mouse. Ah, the mouse. I still remember the first time a mouse made sense to me. I tried out a drawing program on an early Apple Macintosh. Wow! What control; what power; what else would you use it for though? Of course I learned what else as more and more applications took advantage of the mouse's capabilities.
Recently I really started discovering the benefits of using the Xbox 360 Controller as an input device. While I initially got my 360 controller to play games, and create my own using XNA Game Studio Express, I soon found out that I could use it for other things. I have used the 360 controller to mover simulated robots around in Microsoft Robotics Studio's simulator.
Even more fun though has been using the controller to "fly" thorough the virtual world on Virtual Earth. They've just added a lot of 3-D views of New York City and several other metropolitan areas BTW. In any case using the 360 controller lets me move around the world, zoom in and out and generally navigate in a very natural way. I'm just waiting for creative people to come up with more applications that use this device in innovative new ways. Oh and since the controller vibrates I can see "output" possibilities as well.
What's new today? The Surface Computer that lets you use your hands to directly interact with a computer. There is a great video demo at On10. The demo starts with a paint program. Where have we seen that before? There are some interesting sample applications - wait until you see the video puzzle in the last two minutes of the demo. But for me the interesting thing there will be to see what new applications or more specifically new and interesting ways to do things this technology will bring in the future.