Netbeans crashed. Again. For the last time.
I'm normally a patient man, but an IDE has only one thing it has to do. It has to allow me to edit text files. An IDE that crashes is worse at facilitating coding than a piece of paper. I've used them and I'm done with them: Visual Studio, Code Warrior, Eclipse, Delphi, NetBeans and a few others.
Somewhere in the last 13 or so years of fooling about with Linux, I found myself editing text files with a strange, and at first confusing tool known as Vim. Now, I'm not a gun nut, but when I reached a certain age, my father decided it was time for me to learn how to fire a real gun. The first time I held it in my hand, I was immediately frightened by the terrible weight of the device. It was a revolver with a long barrel like something out of a Western. I nearly dropped it. It took quite a bit of effort to hold steady at arm's length.
Vim is a grown-up text editing tool. It's no cap-gun, or BB rifle. It's dense and dangerous and powerful. Vim is keyboard driven and minimalistic, allowing the maximal editing power with the fewest keystrokes. As a programmer, it's all I need. Vim has never crashed on me. Not once. It has some of the sugar that the big IDE's have, like syntax highlighting, but it's lightning fast and stable and powerful. Some IDE's have code folding where you can hide parts of the code and expand them with clicks of the mouse. Why?
Click click click is for surfing the web. The keyboard is a much more powerful input tool than the mouse. The mouse is for lazy consumers. Now, I can be a lazy consumer at times. I watch the television. I click and read, click and read, click and watch. But when I'm working, the only click and clack you here is from the keys on the keyboard.
I don't like being a code generator. I don't like typing up boilerplate. I hate copying and pasting. I like small code files, with long names, and a handful of short, declarative functions. I don't like wasting time. Here's the typical way to complete a piece of web functionality in PHP. Create a script, write some SQL code to extract some data from a database, blast some HTML out to the browser. Lather, rinse, repeat. It's boring. It's inane. It begs for a higher level of abstraction.
IDE's are made for human code generators. Oh, you need to write a class that implements some Java interface? Well clickity click here, type a class name, clickity clack there and the IDE has generated a bunch boilerplate: a class definition with a bunch of stubbed methods, curly braces, semicolons. Don't want to look at all that ugly boilerplate? Just hide it by clicking on the code folding mechanism. Now you don't have to look at it anymore. What the hell? Java sucks. IDE's suck.
The job of a software developer is to solve problems where a computer be used to provide the solution. The solution almost always involves the internet and a little thing called HTTP. The goal is the solution, not the journey. The journey should be short, and never should the same path taken more than once.
Everything changes when you take one step back from the human as code-generator and apply your programming skill to solve the problem of having to generate a lot of boilerplate code. I did this at my current job. I saw that I basically did the same thing every time I wrote code to pull some rows out of a database, or update values in a database, or delete rows. So, I wrote a bunch of code that would generate the SQL on the fly and encapsulate all the database calling mechanisms. All it needed was a succinct definition of a database table to generate all that repetitive SQL and perform all the repetitive data munging.
That was a good step for me to take. It instantly made me a more efficient programmer than all my coworkers. There were some limitations to this meta-level programming. I had created a tool to create functionality quicker, but it had some warts. So, I wrote a better version of that code. It became a better tool for rapid development.
After some time, I realized that I was still doing double duty. I would write a database table definition for the database engine in SQL and then another definition in PHP that my other code would use to automate retrieving and storing data in the database. So, I wrote a piece of code that queries the database and generates the PHP table definition.
So when I write code, I can treat arbitrary rows in the database like native PHP objects. Of course, anyone using a framework like Rails or Django already does this, so it's nothing new, but it was for me.
So, back to NetBeans crashing. It crashed. I did a quick analysis in brain of what I got from the IDE in exchange for random instability, and the price was too high. IDE's help you generate code the slow way, by hand. IDE's constantly remind you about the names of classes and functions and help generate scaffolding that you can later populate with meaningful code. What a terrible waste.
I've decided to write as little code as possible from here on out. If I have to do anything more than once, I will generalize it. If some API is difficult and complex, and requires IDE hints to use properly, I don't want to program against it directly. I will wrap it up in a simple, memorable class that has the absolute simplest interface possible to solve the problem.
In the past couple weeks I've written code to make the creation of administrative interfaces with a few lines of declarative code. I wrote an HTML form class to encapsulate, standardize, and simplify form generation, validation, and security. I realized that rock-star coders like the people behind Rails and Django were just coders who didn't allow themselves to become code generators. Instead, they kept building higher and higher level abstractions until they were no longer repeating themselves. With Ruby on Rails, you can create a complete, functional web application by typing in a few lines in the terminal.
In this context, code becomes rarefied and powerful. It is no longer soupy gibberish or half-man, half-machine generated blub. So I don't need the IDE any more. I build abstractions that are easily understandable. I could go sit in the park and design code in a notebook, then go sit down and type it out, carefully, with unit tests and finish in a fraction of the time. Big, ugly languages like PHP, Java, C++ and C# coupled with big, gaudy IDE's do not encourage this style of development. Most of this realization came from spending about a month trying earnestly to learn Common LISP and then a couple weeks messing about with Django.

