I want to rewrite almost everything I use. I suspect lots of programmers do.
I know it's a delusion. Software is hard. There's no way I could rewrite common tools to be better than they are. Firstly I'm not a good enough programmer. Secondly, even if I were good enough it would take many decades to do them all. In my eagerness to solve the problems that frustrate me I would omit basic functionality that everyone else relies on. When it was brought to my attention I'm sure I would find that part so boring to implement that I would probably quit. Rewriting is both the only way to save many software packages and an impossible dream.
How do our tools get into such a frustrating state?
The Peter Principle is a special case of a ubiquitous observation: anything that works will be used in progressively more challenging applications until it fails. This is "The Generalized Peter Principle."
The "failure" I notice in tools isn't necessarily application-crashing stuff - it's something less measurable: inflexibility... unmaintainability... inconsistency
Inconsistent commands or options tick me off. I want to categorise them and rename them logically. Git and Vim - I'm looking at you. When git branch -a lists all branches but git tag -l lists all tags I get annoyed. When using Vim and zC closes all folds recursively, zf creates a fold, zO opens the folds but zG is a spell checking command... I get annoyed. These differences might seem minor to you (and they are used as small examples off the top of my head) but they reflect an underlying problem with the structure of features in software. As soon as little differences like this exist then it means you have to spend time learning each command by itself rather than being able to generalise your knowledge about one command over to another using the same syntax.
That being said, I love the power of both those tools. But when I start thinking about changing the command syntax it snowballs into changing the operation of those commands and eventually into adding/removing major sections such that it becomes a romantic idea to rewrite the whole thing.
Couldn't I just get involved in the open source project and submit my changes there? I could if I didn't want to rip out old functionality and totally rename things. Projects tend to be against that sort of thing because that would break thousands of shell scripts that rely on them. Introducing new features is fine - GNU is always doing it to improve the old Unix standards (awk -> gawk etc) - but it's very rare to see anyone breaking backwards compatibility. It makes sense not to. So here we are, back with the notion of the rewrite... the kind of rewrite where you call your new tool something completely different and push it into the cloud hoping for its adoption.
Rewrites are a very romantic idea. They appeal to the programmers mind because:
Not Invented Here is another name for the ego motivation behind some people's rewrite-fantasy.
I don't have any answers for the problem of wanting to rewrite everything... you can ignore the nagging voices and just get your job done with the tools you have but your creative energy will drain! Continually denying yourself the rewrite fantasy will cause you to become a hollow shell of a coder... a yes-man who always simply accepts the rubbish software around you... your drive to be a good programmer will fade and you will find yourself working for a marketing company writing email software for Windows.
Just joking... but you get my point.
I guess you need to find a balance. Sometimes (most of the time) you need to use what you've got to GET THINGS DONE. Every now and then you need to indulge yourself though... and rewrite the shit out of something.
Django Python 960.gs Git Vim NetBSD Nginx
The author is a software engineer living in Australia. He sux at guitar, loves camping, doesn't like cake, does like coffee and is a lazy home brewer.
Help
Latest entries
*BSD Agile Apache Apple Athletics Beer Best-Practice Censorship Comedy Cool Crosswords Deployment Django English Exim Firefox Git Hardcore Health Interface irssi Javascript Jira Languages Linux Makefile Markdown Mathematics Mobile Broadband MySQL NetBSD nginx Nokia OSX Perl Photo Privacy Python Rant Requirements rsync Ruby Shell Slackware SQL SQLite SSH Standards Subversion Testing ThisBlog Vim VMWare (Fusion) VPN WDTEM X Yum zsh
Perldoc Output
Yum
Possum
Git's Index
Jira Project Keys
The Coffee Shop
Git GUI
It is more important...
Questioning Unix (and Other) File Times
The Frog King Photo
Rain Cloud Photo
rsync
Timezone
utf8 in your Perl
Theatre Ceiling Photo
Some problems are so complex...
Colours in your PAGER
zsh vared
zsh magic-equals and double-star
Funny Tweets
ChoppingBoard, Project365, RageQuit