The budding programmer vs. the IDE

In this post I’d like to take a moment to talk about integrated development environments from the view of a new programmer. The main question this post will address is whether or not a person that’s new to programming should get to know IDE:s very early on. Spoiler: I don’t think they should.

I recently started a university course in which I’m being taught Java. Although I have dabbled in things like PHP, Python and shell scripting I have never really developed my programming skills to any level worth mentioning. I understand the basic tenets and principles of programming and have an above-average grip of computers in general though, so I feel right at home and I’m excited to get the opportunity to delve into Java on study hours. Before getting on with this post I feel a need to point out the fact that my course like a good course for beginners and we also seem to have a good teacher. Thus this post is not meant to criticise the course or teacher at all, except possibly the way they’ve chosen to work with IDE:s.

Alright. So what’s an IDE?
An Integrated Development Environment is in short an application meant to provide all the basic tools a programmer needs in one single place. Usually this consists of a text-editor with some sort of syntax highlighting (for writing the code), a way to run the code (a compiler or interpreter depending on programming language) and debugging tools. A version control system isn’t that unusual either. All inside the same program, or as the standard nowadays go, all inside the same ”window”.

Why is this good?
As I only have the theoretical answers and no actual experience, I’ll hold back on this point. Although I can assume that working on bigger projects (possibly with other people) will be made easier if you all work in the same IDE, with the same routines and so on. My personal favourite so far is the fact that Eclipse, the IDE I’m using for Java in school, automatically detects errors while typing, so for example it’s harder to forget a single (but important!) character somewhere only to get trouble later. In general, IDE:s can automate a lot of time-consuming processes that the user might have to do manually otherwise.

And why is this not good?
As stated earlier I am writing this from the point of view of a new programmer. While I have no doubt about IDE:s having a reason for existing, I don’t think teaching beginners to program is one of them. In fact, I think teaching people to program in an IDE might possibly cripple them in the future. IDE:s are ”better” because they help you out with a lot of things, centralise your workflow (what does that even mean?) and let you concentrate on ”just writing code”. But sometimes, worse is better. For the same reason a budding systems administrator shouldn’t be taught the craft while logged into the latest Ubuntu Linux graphical interface, a budding programmer shouldn’t be taught that programming means using an IDE from day one. Doing things manually means getting to know them from the ground up and actually understanding what’s happening under the hood.

Let’s take a look at some examples.
The process of creating and running a Java program consists of three (or four) basic steps:

1. Write the code
2. Compile the code
3. Run the code
(4. Debug the code)

If you have been taught programming inside an IDE, chances are you don’t have a damn clue how to do this on any random computer. You will possibly feel handicapped without the specific IDE you’re used to. You probably haven’t really thought about the whole ”compile thing” your teacher is talking about because it’s all been automated (and thus taken away from the fingers of the developer) anyway. I’d like to compare it to being taught to cross bodies of water using nothing but a boat from day one. Sure, it’s probably a lot faster and easier than swimming, but if you’re never taught to swim in the first place, the day that your boat doesn’t work or simply isn’t there, you’ll be standing on the beach looking really, really stupid. This doesn’t mean that using a boat later on in your water-crossing life is a bad thing, in fact I’d say you’d be stupid if you didn’t use a boat later on. But don’t start messing around with deep waters without learning how to swim first, even if you have a cosy boat.

If you write programs in a less-fancy text editor you’ll learn syntax a lot faster (as it isn’t more or less automatically corrected for you), you’ll learn to debug manually (and thus actually getting to know code structures and whatnot) and you’ll get to know how to compile and run code manually i.e. from the command line. This will mean that you won’t be relying on a third-party program to properly produce, run and debug code (except a basic text editor, of course).

Would somebody please think of the Unix?!
One of the first things a programmer is taught is to create programs in such a way that pieces of it can be reused later, either inside the same program or other programs. Code should be written with modularity and reusability in mind. It’s a bit ironic to teach programmers this in an IDE, which in many ways is the opposite of modular.

Maybe I’m partial to this, being a GNU/Linux enthusiast and whatnot, but I wholly believe that the Unix philosophy carries a few central points that anybody who wants to become more than a regular computer user should think about. In the case of IDE:s, mainly three points apply: small is beautiful, make each program do one thing well, avoid captive user interfaces. The Eclipse IDE I’m working with currently forces itself upon the users and requires them to do things a certain way, without really knowing why. The Unix philosophy would have my class working in a basic editor (such as gedit or Notepad++) and the command line for compiling and running programs. A friend of mine teaches basic programming to kids in junior high and he does this using SSH (usually from putty), screen and nano. A part of me thinks these kids will have a lot more going for them than what my class will.

Anybody working with computers need to understand the basic tenet that it’s all about using the right tool to solve a certain problem. Spending hours learning a pretty complicated IDE (and still only knowing the basics, really) to write a hello world-program isn’t really a good example of this. I actually think that, if anything, it confuses and alienates the people who are completely new to this side of using computers.

Write a Comment

 

Saker & ting

Blogginnehåll


Ämnen