Hacker News new | past | comments | ask | show | jobs | submit login
Top Programming Fonts (hivelogic.com)
68 points by danbenjamin on May 18, 2009 | hide | past | favorite | 49 comments



By my reckoning, six of the ten have major flaws that make them completely unacceptable for use as a programming font. Courier, Profont, Consolas, and Incosolata all have insufficient distinctions between 'l' (lowercase L) and '1' (one). Droid Sans Mono has an 'O' (uppercase O) that can pass for '0' (zero). Perhaps by virtue of the font size, Proggy has a lowercase L that can pass for a vertical bar at a glimpse. If you look closely, Proggy's lowercase L looks like a one -- this is less of an issue because it is visually distinct from Proggy's one glyph, but I still don't like it.


For reference, http://img.skitch.com/20090519-g7c293n9nf94ipisbw1u4xew4i.pn... — the six fonts listed with characters @spoondan has issues with.

Personally, Proggy is the only font that I can agree with @ spoondan's complaints about. But I wouldn't use it for other reasons. Too narrow for my liking. However, I have to flat out disagree with his assessment of ProFont and Droid Sans Mono having confusing O and 0's. The slash through the middle really drives the point that it's a 0..


Thanks for taking the time to put that together. Please note, however, that I complained about Profont's lowercase L looking like a one, not about its zero. Also, the original article's rendering of Droid Sans Mono does not have a slashed zero. Is the original article in error or did you perhaps accidentally reuse Profont for the Droid Sans Mono sample?


I forgot to swap them, sorry. Image in original post fixed.

However, I still don't find them too hard to distinguish, even without the / through the middle for Droid Sans or the 1 vs l in 11 or 12pt Profont.


It's possible that you just have sharper eyes than I do; I have been getting older (a deadly habit I keep meaning to break, but the withdrawals seem prohibitive). However, just to clarify, my point is not that these glyphs are indistinguishable when directly compared, but that they can mislead you while reading code. I can certainly tell them apart when I compare them. But can I immediately see that "e1" is "e-one", or that "42l" is the long integer 42? If not, having wasted hours on such stupid things, I would disqualify the font.


For day-to-day programming, why does l/1, O/0 matter? I usually don't see them in contexts where they could be confused.


A few cases that have occurred over the years:

1. Working with inherited code, one of the original programmers had an identifier I believed was "el" (short for "element") but that was actually "e1" (presumably short for "element 1"). You don't know frustration until your compiler tells you "undefined identifier 'el'" when, by all appearances, there's nothing wrong with your code. Not only did I waste a couple of hours on this, but the stress probably shortened my life by a few hours, too.

2. Embarrassingly enough: For reasons that I don't understand, I have on a couple of occasions typed a zero where I meant to type an uppercase 'O'. I shipped Python code that had a bug in it because I assigned a value to "box0ffset" instead of "boxOffset". The bug was thankfully minor, and I obviously must have been smoking crack to make this typo, but it has happened and could have been avoided if I'd been using a good font.

3. I've seen C code (I think in an open source project) where the programmer typed something along the lines of "100l". He probably meant to type "100L" and just missed the SHIFT key. By this time, I'd switched to a font that had an "l" that was clearly distinct from a "1", but I imagine that I would have otherwise been utterly perplexed.

These are probably not everyday examples. The circumstances in which confusion is possible are rare. But they do happen and are (in some sense) expensive. At the very least, it's a whole class of errors that's easily and cheaply avoided by choosing an attractive font that minimizes the opportunities for confusion. Why risk the frustration?


I always thought it was amusing that the 3 is right above the 3, and the 0 above the o. I've made a few "leet-speak" errors in the past just due to finger-slips.


Typos like these are some of the hardest to debug. More than once I've been at the point of pulling my hair out on some nonsensical error message that is fixed by simply retyping the line. Trust me, you don't want to waste your time on this one.


I love 'Bitstream Vera Sans Mono'. I've tried tons of fonts, but always fall back on that. I use Ruby a lot, and it complements the language nicely…


Indeed, I've been using this font since watching the railscasts by Ryan Bates and it's great. I was using the standard Monaco before.

I don't know why but switching to a new font made me a happier programmer!


I forgot to mention, I use it on OSX, where the anti-aliasing makes a big difference; when I tried it on Windows, it didn't look that great!


For whatever reason, I can't stand how Windows or FreeType anti-alias Inconsolata. But on a Mac, it's dreamy.

It is, however, somewhat annoying when I exuberantly recommend a typeface, only to see it become rather unusable when rendered by another system.


if you like inconsolata on the mac, try consolas which is very similar but in my opinion just a little bit more aesthetically pleasing.


Terminus is by far my favorite. I am disappointed it was not mentioned.

http://fractal.csie.org/~eric/wiki/Terminus_font

apt-get install xfonts-terminus


The only real alternative to Terminus is LispM font:

http://www.eurogaran.com/downloads/lispmfont/

A similar appearance! The CADR was dreamy in many ways, even its screen font.

Downside: only one size...


I recently switched to Terminus, and I've really been enjoying it.

None of the versions I could find worked well on OS X though, so I converted the BDF sources to dfont. If anyone is interested, I just tossed the file on github, http://github.com/deactivated/dfonts/tree.


Dedicated terminus user too!


In the past, we’ve had to decide between tiny monospace fonts or jagged edges. But today, modern operating systems do a great job of anti-aliasing, making monospace fonts look great at any size. It’s not 1990 anymore. Give your tired eyes a break and bump up that font size.

No, thanks. All the anti-aliased screenshots in his post look blurry and some make me outright cringe.

Also he missed my personal favorite: http://www.netalive.org/tinkering/triskweline/


I concur about the blurriness. It'll be a good day indeed when everyone has a 300dpi display and we can get rid of anti-aliased text for good. Anti-aliasing looks great for headlines at large point sizes, but for bulk text, that blurry look is bad for my reading speed, and a continual distraction, as well. I hate that about Linux, how hard it is to find a free font that looks good when hammered into the pixel grid, and it's nice to see some new ones from time to time.


That's a good-looking font, but I personally need a big visual distinction, like a slash or a dot, between O's and 0's. (I do like the distinction between l's and 1's, though - lots of fonts screw that up.)


Well, I think I would prefer a slashed zero for confidence, too, but can't say this has ever been an issue in my years of real world use.


That's why I said "I personally". :)


That font makes me cringe. It reminds me of when the screen resolution is too narrow, widening all text.


Same here. The letter-forms themselves look good, though. Maybe if the spacing between the letters were narrower? The kerning (that's what it's called, right?) seems unusually large, particularly for a fixed-width font.


Well, trisk is very legible for me at normal reading distance where e.g. proggy or profont feel too squeezed and slightly too small. But ultimately it's also a matter of taste, ofcourse.

Generally screenshots can hardly do programming fonts justice. You have to load them into your editor and try them out on familar code.

Most of the fonts showcased on that page look perfectly fine to me from the images. I only learned that I can't bear an anti-aliased font and about my various gripes with the other fixed contenders because I once went and tried all of them for at least a few hours each.


Agreed. Aside from a few major variables (fixed-width or variable-width, anti-aliased or no, weight), and ruling out fonts with obvious flaws like making 0 and O look too similar, it's largely a matter of taste.

I've found that some fonts look much better as light text on dark backgrounds, or vice-versa. I use terminus (http://shenani.gen.nz/~scott/img/terminus-sample.png), but something about it doesn't look right to me on a light background.


Indeed. I found the choice of font less critical on light backgrounds but that might be because I'm a white-on-black fanatic and can't bear a light background for long anyways - regardless of font.

But I, too, noticed the difference and I don't think it's just subjective. Black-on-white is generally easier on my eye in the short-term but for the long-term (e.g. coding sessions) I strongly prefer white-on-black because staring at a mostly white screen for extended periods of time makes me dizzy.


Yeah, I know some font rendering technology specifically draws dark-on-light-bkgnd differently from light-on-dark-bkgnd, though I can't recall where I've seen it, or the details ...


Colsolas was the best thing to come out of Vista. In fact, it's the only thing I kept when I switched back to XP, and later, to OS X.


I used Consolas for ages, but now switched back to DejaVu Mono, mostly because it's thinner horizontally.


No mention of Dina? That's a shame. I love Proggy, but Dina is much more readable IMO. (It's on the Proggy site as well)


I like Consolas, but when I first tried it I thought it was rubbish.

It turns out the problem was my Windows box had Clear Type font smoothing disabled.

So make sure you have Clear Type enabled:

http://www.zeusedit.com/forum/viewtopic.php?p=4449#4449


ProFont - what other font is easily readable down to 6pt?


Deja Vu - my personal favorite.


Why would you make code that small? I personally like to be able to read code, not show lots of it on screen that's illegible.


Andale Mono not only works great at small sizes, but also at bigger ones (14 & up) which ProFont does not (I have ProFontWindows which looks deformed at size 10, and annoyingly appears bolded at any bigger size than that).


upvoted because profont is simply lovely, but i can't get it to work reasonably on the mac.

switched first to inconsolata, but i like consolas a little bit better.


I haven't tried it on the Mac yet only because I don't have a way to unstuff it w/o enduring that horrible stuffit website...


Pragmata is absolutely wonderful on OS X IMHO (http://www.fsd.it/fonts/pragma.htm)

It's kinda pricey, but so beautiful when sized and anti-aliased right.



I used to use Bitstream Vera Sana Mono but I switched to using Liberation Mono, it was released for free by the red hat guys. https://fedorahosted.org/liberation-fonts/

I'd recommend both, but I like Liberation Mono more.


Also in the category of improved Vera family fonts is Espresso, which ships with the web editor of the same name (http://macrabbit.com/espresso/).


I used Anonymous for a while, but then I switched to Consolas. I'm not sure if Anonymous is free or not. One site wants to charge you for it, and another has it for free(no, not the Pirate Bay!).


Call me ancient, but I really miss the 3278, with its distinctive 6's and 9's. I never could find its original bitmaps, much less a vector font like it.


I've been using Panic Sans for a while. It ships with Coda and you can grab it out of the application package.


I am a big fan of Envy Type R.


You probably mean Envy Code R? And yes, it's a great font. I wouldn't use any other.


haha, yeah, that is an embarrassing mixup. i even use it under linux and os x these days.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: