Menu

Programming Languages Redux

April 4, 2011 - Programming

I’ve touched on this subject before. Basically, it is the polarization of programmers, and people in general to believe certain things about programming languages or platforms.

For example, Java is often said to be “slow and hard to use”; The former is a complete lie- with a JIT compiler it’s fast enough, if you really want raw speed you should develop it for a few more years in ASM. The latter was true back with 1996 but later enhancements have made it far easier to work with, as well as the addition of GUI designers for JPanel’s in most IDE environments for Java.

This same hubris is often extended to .NET; the basic thought seems to be that any language/platform that either provides a pre-defined class library or a method of automatic memory management is a “toy language”. This is patently a stupid opinion.

When I want to write an application, I want to worry about the logic of that application. I don’t want to have to worry about contention issues across thread boundaries in some offshoot List or stack implementation that I’ve already written countless times in various languages. Additionally, I fail to see what the Java Class Library or .NET BCL have that is so much different in concept then the C standard library; do these so-called experts also write their own standard library with every program? Of course not. You don’t see them re-implementing printf(). As for memory management: once you learn how to do it, and how to work with it, it just get’s in the way. No matter how much practice you get with malloc() and free() you’re still going to have bugs where you miss a malloc or you miss a free or you perform a double-free or something; the only recourse is always to create some sort of automatic tool or use a design pattern to make finding these problems easier. What something like garbage collection does is make such design patterns unnecessary since there is essentially a design pattern for memory management built in. What makes the arguments interesting is that they immediately turn around and say that the C implementation of a basic console Hello World application is shorter (on account of having to acquire various objects in the java implementation for stream writing). Well what do we want here? This just tells us that the java class library was designed differently from the C standard library. Obviously the “pure code” for a C program to write text to the screen will be at least equally as long- it’s interesting to argue that more verbosity is superior in one sentence and immediate follow it with something that amounts to “unless of course it works in my favour for this argument”.

I think the basic idea such programmers are against is that some people that use the .NET BCL and the java class library have never had to implement such classes before, and don’t know how they work. On the one hand, I agree; mostly because it feels “unfair” that they get for free what I had to work on the first time I needed them; on the other hand, they solved problems and outside of academia the only reason to re-implement a LinkedList, Stack, Queue, or other familiar data structure is for structuring data in an application; there is no reason somebody should have to take a sabbatical from working on a business application in order to learn about Red-Black binary trees; arguably they should have learned about that before ever being considered being put into a position where they are working on such an application.

I think the real reason for such arguments is basically that they don’t like programming being made easy. To hardcore ASM and C programmers, it should be hard, not something people do everyday. However, I say that’s ridiculous. Building artificial barriers is a good way to keep new ideas from flowing, and forcing people to stop and learn the details of memory management and building data structures- while a very important step- get’s in the way of whatever other important task it was they wanted to do.

Take a look at C++; that seemed to be the mindset. “well, we give you an OOP language, you are on your own for the rest, I guess”. And then you had a bunch of different implementations of Object Oriented frameworks; Borland released OWL (Object Windowing Library) Microsoft themselves released MFC, And High school teachers everywhere taught there students about strings using their custom string libraries. Eventually, there was a standard C++ library that was actually useful; but why the long wait?

Learning how to program consists equally of how to create as well as how to USE various data structures, and saying one is more important then the other is pretty conceited.

Have something to say about this post? Comment!