Jach's personal blog

(Largely containing a mind-dump to myselves: past, present, and future)
Current favorite quote: "Supposedly smart people are weirdly ignorant of Bayes' Rule." William B Vogt, 2010

Depression from inadequate tooling

This isn't a new phenomenon among programmers, not at all. But it's been striking at me annoyingly heavily over the past few months. When I work on some programming project, if my mind strays to how annoying some of the tools I'm working with are then such thoughts can paralyze me into not working! I'll acquire a moping attitude that with the right tools a task that takes an hour could be done in ten minutes. I'll curse the language for its verbosity, or lack of features from other languages and platforms. This applies to my favorite languages too. I sometimes get sad when I can no longer "feel the hardware" beneath a language -- part of me doesn't want to know, but part of me does, for knowing your hardware is the surest path to optimization. The programs I use daily are annoying slow, and it makes me think whenever I'm writing a program "Does this have to be annoying slow? Is there anything I can do to speed it up?" Sometimes there isn't -- even something that should be as simple and fast as rendering a new tab in Flex is, by nature of Flash, annoying slow. Just what the hell is going on down there? I also get this feeling when I use my Nexus 10 tablet and it does strange and slow things from time to time. How hard can rotating the screen smoothly be? (I've seen apps that clearly do it themselves instead of letting the OS do it and they do it so much better...)

I'm finding it difficult to come up with and use a coping strategy for this. I feel like the best I can do is just to accept my lot at living in such an uncouth age. Sometimes I'll be inspired to make something better, but then I'll get in that same paralysis once I realize that in order to make something better I first have to do it with things that are horrible.

My primary desktop computer has two OSes on it: Gentoo Linux, my primary, and Windows 7, which I use when I want to play certain games, mine litecoins (bitcoins I do on Gentoo), build an EXE for some python program, or something else that requires me to use Windows. Thinking about trying to do productive work on Windows makes me metaphorically sick; I don't understand how millions of people do it. But I do understand somewhat why I find it so distasteful, and I can imagine that people who don't find it so distasteful aren't as phased by it.

In the 90s the great war between text interfaces and GUI interfaces was won decisively by GUI interfaces. This is unfortunate for me, because I heavily prefer text interfaces. I love bash, and I love the gnome-terminal wrapper around it that makes it pleasant to use that text interface within a GUI environment. I can barely stand to use Windows cmd.exe, which is unfortunate, because that's the GUI wrapper around cygwin's bash. It's awful. No tabs, no sensible copy/paste, no resizing to anything I want, a poor selection of fonts, and so on and so on.... Every time I use cygwin, then later go back to the warm comfort of gnome-terminal, I feel joy.

My first programming language was PHP. I sometimes wonder if this has damaged me permanently in the same way learning BASIC or COBOL first might damage another. See, I love not having to deal with modules at the language level. Everything the language provides is always available in the global scope. I love this. I'm saddened that the PHP project seems to be moving away from this, albeit slowly. I'm sad when frameworks require a huge stack of 'require_once' directives just to get anything done. It reminds me of the huge stack of corresponding directives that you have to have in Python, in Java, in Clojure, in C, to get anything done. And I realize that there are good reasons not to do what PHP does, but there are good reasons to do it. A bad reason not to do what PHP does is namespace collisions -- it just doesn't happen that often and when it does it's trivial to fix. In fact it's more likely you get namespace collisions with other code written by developers rather than what the language provides itself.

Why are Clojure's debug functions like 'pprint' not available by default except in a REPL? That modularization is annoying to me, and I'd rather see work in the form of code analysis to not bother with what isn't used in the source code. This would allow for some slim binary distributables that have only a subset of the language within them. This gets rid of nice features like hot patching but those should be optional and not included by default... Why aren't there more things like ProGuard, and how can ProGuard be made better?

Could languages support a "god mode" directive where any modularity on the language level is gone? That would make me happy. Or even something more fine-grained, i.e. "super-modules", like "from everything_you_could_ever_want_to_help_with_web_programming import *". Such a module would essentially be "PHP mode" for that language, giving you global access to functions like base64 encoding, cryptographic hashes, emailing, connecting to databases, encoding/decoding json, xml, or edn, access to curl, file I/O, image manipulation, output buffering, etc. But such a module might not include things that would help with game programming, like a physics engine or GUI framework -- such things would belong in their own super-module.

Why are IDEs so ugly, slow, and big? I can't stand Visual Studio and can only barely stand Eclipse. I enjoyed Flash Builder (a fork of Eclipse) because it let me do work in Flex, but that's mostly because it saved me from some of the pains inherent in MXML and ActionScript rather than because it was just a good IDE. I prefer to use vim whenever I can, but in Windows, without gnome-terminal, I'm reduced to using gvim, which isn't as flexible to me as vim in gnome-terminal.

Whatever. Back to work, because that's what it's become -- it's hard to have fun anymore. :(

Posted on 2013-07-13 by Jach

Tags: personal, programming, rant, thought


Trackback URL:

Back to the top

Back to the first comment

Comment using the form below

(Only if you want to be notified of further responses, never displayed.)

Your Comment:

LaTeX allowed in comments, use $$\$\$...\$\$$$ to wrap inline and $$[math]...[/math]$$ to wrap blocks.