One of my favorites is PragmataPro [0] (with powerline glyphs) and I'm sad it's not there. I guess they can't use proprietary fonts. PragmataPro was so weird when I started using it but it has grown on me and now I have a hard time switching to a terminal that uses something else.
In any case, if you're like me and you look at the terminal screen for hours on end every single day, find some font that won't tire your eyes and is optimized for your screen. If you have to squint or double-check letters or numbers because they're unclear, increase the size or switch to a different font.
Huh. Not to sound cheap, but it really seems unnecessary to me to spend 60 Eur for a font, when I already have really good fonts like Inconsolata in my reach for free. Is font really that important, do you think? This is an honest question, please don't think I'm sarcastic.
That's an average price of a AAA game, right? And what kind of utility do you get from that?
Just did a quick check... I bought it in Sept of 2012, 2323 days ago.
$70 / (2323 day * 6 hrs/day) = $0.005/hr
Did I get my money's worth (and mind you, I paid less than that.. I'm just going by today's prices)? I think I did. It all depends on how you value things.
Not trying to make any value judgement of my own here, but I think the parent was more referring to the marginal cost/benefit of a $60 font compared to some of the free options available.
> There's nothing wrong with the original IBM VGA console font
Oh boy... Don't get me started on this. Those semi-consistent application of serifs, wide vertical traces and the overall MDA-ness of it drives me nuts. It's not like IBM didn't have anything better to choose from.
disclaimer: I make the 3270 font, which is based on the 3270 terminal font, which is the better thing I mentioned in the above paragraph.
I took a look at 3270 font, and I definitely strongly prefer IBM VGA. I don't care about semi-consistent serifs etc - I'm not a font designer. But it's very readable.
Which, again, just goes to show that this stuff is all very subjective.
It is. A lot of my strong feelings for the IBM MDA/EGA/VGA font comes from its 80's-ness and its origins. Also, at the time I first saw them (first on CGA, then on MDA) I was an active user of 3270's terminals and I wondered why would they do that if they had the choice of using something cleaner. I understand CGA dictated wide vertical stems (because NTSC) and that probably influenced the choice for MDA (it was already used in other pieces of equipment, IIRC) for consistency but...
Agreed, I don't get the ligature craze recently. They look ugly, and sometimes, they don't accurately reflect an operation most of the time, for instance when you use operator overloading.
PragmataPro does come without ligatures though, and that's what I've been using as my main font for over a year now.
I also second PragmataPro. I've been using it for 5+ years now.
The ligatures are fully optional, and the font comes in several variants for software that doesn't allow to select features.
It's a slab serif, condensed. You have to like the style. Some people prefer the opposite (wide with ample interline spacing).
It packs quite some columns on the screen while still being perfectly readable and basically every glypth is hand-tuned for small pixel sizes. There's not much else comparable designed with that amount of care.
The closest font on a stylistic basis I've seen is Iosevka.
http://programmingfonts.org/list contains licensing information for each font, but I agree that it would be nice to see on the Test Drive page as well.
Another thing I should integrate I guess. However, just as a general note, you can safely use every single font featured on app.programmingfonts.org for yourself.
Fonts seem to be a very a personal thing. There are demonstrably better and worse fonts, but at the end of the day, I would guess the there are half as many “best” (is favourite) fonts at my workplace as there are engineers.
That said, I have to check those out you mention (never heard of any of them). Thanks.
Good catch, I'll update the link. Both the Mozilla and the foundry's repo seem to have the same font, it kinda makes sense to link to the Mozilla one in this case.
I quite like IBM Plex Mono as a programming font... https://github.com/IBM/plex would be nice if the page has a way of making suggestions of fonts to add.
If you like that font, you could try out the mono version from iA Writer (a famous writing app) which they have released recently, it's based on plex but looks a bit better imo!
I like opening multiple tabs with different fonts and switching back and forth to make the differences more obvious.
I've been experimenting with a variety of fonts in Sublime Text 3 on Linux, and I keep coming back to the default, which is apparently called emilbuS Mono, and looks like Bitstream Vera Sans Mono.
I realize that most programmers use monospaced fonts, but I personally find proportional fonts to be much more readable and pleasing to my eye. I would be really interested in a similar font comparison that included proportional fonts that are suitable for programming.
Right now my favorite is Trebuchet MS. This renders beautifully on the high-DPI displays I use, and it has easily-distinguished glyphs for the common mistakables like Il|. Its tilde is not very good though, so I used a font editor to swap in a better one.
But I'm always interested to hear about other options!
When I do have to use a monospaced font (e.g. in a terminal window), Liberation Mono is my favorite. Definitely worth a look if you like monospaced fonts.
Verdana used to be my go to proportional font when I was doing Java. Helped with long variable names and long horizontal lines. My buddies thought I was nuts, but I found it very legible.
These days my eyes are dimming, so I dislike skinny fonts. Now I use DejaVu Sans Mono in _bold_ exclusively. Every now and then when HN does a programming font post, I try out different ones, but I always end up going back to DejaVu Sans Mono Bold.
Like you, I'm not as young as I used to be. So I'm with you on the skinny fonts! One of my biggest pet peeves is web designers who think font-weight: 300; is a good idea.
You might take a look at Trebuchet MS. One thing I like about it is that the strokes are nice and fat. At least on my high-DPI displays; haven't checked on a low or medium DPI display.
Coincidentally, I wonder if the license allows it to be downloaded and installed on other OSes, like the old "Microsoft core fonts" package that included Verdana.
>Coincidentally, I wonder if the license allows it to be downloaded and installed on other OSes, like the old "Microsoft core fonts" package that included Verdana.
> You may install and use an unlimited number of copies of the SOFTWARE PRODUCT.
> You may reproduce and distribute an unlimited number of copies of the SOFTWARE PRODUCT; provided that [they're verbatim, include the EULA, aren't distributed for profit]
> You may not rename, edit or create any derivative works from the SOFTWARE PRODUCT, other than subsetting when embedding them in documents.
> You may permanently transfer all of your rights under this EULA, provided the recipient agrees to the terms of this EULA.
So you can distribute and install them. You have to take some care, but you don't need to involve Microsoft, and you're not bound to the systems they were originally intended for.
Man, Verdana gives me flashbacks of late-'90s messing with html. If it hits the typical 20-years fashion rota and gets cool again, I'll feel really old. It's the flannel shirt of fonts.
I'm curious to know how you started using proportional fonts for coding. All of the tooling for writing code defaults to monospace, so what started you coding in a different style?
For me it was efficiency of reading. It is proven that proportional, serif fonts read significantly faster (17%) [1] or [2] (6.1%). Also, in my opinion, scanning is much faster.
This makes sense: our eye uses the top and bottom of words to ‘key’ the word. Use proportional and you add information to this system.
> All of the tooling for writing code defaults to monospace...
Do you have an example of such tooling? One that I'm familiar with is Google's coding standards, which are obsessed with lining things up in ways that only work in monospaced fonts. Is that the kind of thing you're thinking of, or something else? Thanks!
One of the early proponents of using proportional fonts for code was Bjarne Stroustroup - his "The C++ Programming Language" books all do that, and he briefly explains it in the intro as being more readable, and urges the readers to give it a go. I wasn't convinced, personally, but the idea was already around then.
I spent many years lining things up. I would write code like this:
foobar(firstArg,
secondArg,
thirdArg);
(For the sake of discussion, assume that those arguments were too long to just put it all on one line, so you would naturally want to use multiple lines.)
Then when I realized that 'foobar' wasn't such a good name, I had to re-align all the code:
doTheRealThing(firstArg,
secondArg,
thirdArg);
At some point, maybe 20 years ago, I got really tired of this.
So I thought, "what if I just use indentation instead of trying to line things up in columns?" Which led to this:
foobar(
firstArg,
secondArg,
thirdArg
);
And when I renamed the function, I didn't have to move everything around any more:
doTheRealThing(
firstArg,
secondArg,
thirdArg
);
Instead of every line changing, only one line changed. [1]
After I adopted this style, I noticed that the code editor I was using at the time supported proportional fonts, so I got curious and tried one - I think it was Verdana.
And sure enough, the code was just as readable as it was before.
If you don't line things up in columns but instead just use indentation, then a proportional font works just as well as monospaced.
[1] Some will say "just ignore whitespace in your VCS diffs, and this won't be a problem." But I want to know about whitespace changes, just like I want to know about any other change.
Not a fan of proportional fonts for coding, but the point about refactoring affecting indentation is well worth reiterating. If you have ever dug through source control history, you know that there's value in not touching the lines unnecessarily. Unfortunately, most common coding styles that advocate lining things up do this wrong, such that a single rename can affect several times as many lines that are completely unrelated.
This does force you into a style where lists of indented things require a new line - not necessarily bad, just an observable side effect, and can cause problems if you share a codebase that maintains a different style.
Very true, if you are working on an existing codebase, you ought to follow whatever style it uses.
Interestingly, one of the reasons sometimes cited for using alignment is that it reduces the number of lines of code needed for a statement or expression. But as often as not, I've seen that backfire because the code gets pushed farther and farther to the right, eventually resulting in more lines of text instead of fewer.
I posted an example from the Rust/Servo code in another comment:
It was about 25 years ago that I stopped using alignment, and the editors I was using didn't have that kind of auto-formatting.
But there was more to it: I realized that I didn't like column alignment any more. It didn't make the code any more readable, and in many cases it made it less readable.
A more recent example of a group that abandoned alignment is the Rust and Servo teams at Mozilla. Their code style used to look like this:
I would suggest that using elastic tabstops¹ is the only reasonable system for doing that. Sadly, the industry seems to be stuck in a local maxima where the simultaneous jump to both using proportional fonts (which would be better) and using elastic tabstops for alignment (which would be easier), constitutes too large of a distance to bridge in a single leap, and either one by itself isn’t worth the effort.
Of course, if you already have made one of these two jumps, it should be a no-brainer to make the other one as well.
I think it's even worse: the big problem with elastic tabstops is that you can't just adopt them on your own. You are requiring everyone who reads your code to use them if they want to see it formatted properly.
Proportional fonts are different. Anyone can use them without interfering with readability regardless of the fonts and editors that others use. If you look at my code, you will never know whether I wrote it in a proportional font or a monospaced font.
> You are requiring everyone who reads your code to use [elastic tabstops] if they want to see it formatted properly.
It is not quite as bad as you make it sound.
While editors which haven't yet implemented the elastic tabstops mechanism may not align some text properly in files where tabs were used with elastic tabstops, the problem isn't that bad. All leading tabs (indentation) will be okay, and the chances of text not aligning correctly diminishes as the width between tabstops increases.
Verdana and Optima are my go to fonts. Have used proportional fonts since 2010, with close to no problems, save the occasional newbie who aligns assignments or types.
I also use proportional fonts. No problem with coworkers in either JavaScript, Ruby, Python, Elixir. I'm using DejaVu Sans Book on Ubuntu in Emacs.
People are always puzzled when they learn I'm not using a monospaced font, think it's impossible but agree that it's much more readable. Then keep using their monospaced fonts.
Actually, nobody likes to read books or blog posts printed with monospaced fonts, right? There is no reason to do it with code.
Alignment like this
short = 1
much_longer = 2
is lost but it's not really important. I think it's also against Python's style guide and for sure it doesn't survive the Elixir formatter (I checked this now.)
My favourite for a few years now is a commercial font, Triplicate. It’s a true serif monospace font; every other monospace font I’ve encountered that is labelled “serif” is actually a slab serif. It has a proper italic face as well, which is a less rare, but it’s a functional italic face rather than ornamental.
It comes with some interesting variants, most notably Poly which is not fully monospaced, adjusting the widths of characters like i to be a little narrower, and W to be a little wider. I like to use that for code display.
Ah yes, I had forgotten about that one—it’s definitely the closest font I’ve found to Triplicate, and its serif style is partially slab and partially true serif (to a similar degree to Triplicate, really).
Oh yeah, I forgot to address the other point: Go Mono doesn’t really have true italics. One or two of its letter forms are adjusted (double decker a to single decker a), but apart from that it’s just sloped roman. Look at the Triplicate specimens to see the difference, if you want. The whole shape of the character changes.
Do yourself a favor and try to design a font from scratch using FontForge (free tool). Let us know what you learn from the experience, how long it took to perfect it and what was the end result.
You and I have very different definitions of beautiful and ergonomic - I don't like their table formatted pricing and I don't like that I have to scroll down to get to navigation.
Okay that one is gorgeous. It has this appearance that somehow reminds me of code examples in my old uni computer science textbooks. I'm not sure which particular ones, it just has that feel.
Even though it's a reasonable price for a commercial font, I can't really justify spending $99 on a coding font just for writing code. I might get tired of it after a few weeks. But if I were to write a programming book, I just might consider it for print.
I'm surprised that the list doesn't mention consolas. It ships default with visual studio and it's so good that I use it on arch Linux as my terminal font and with intellij. It was designed with programming in mind and has some nifty characteristics like a slash through zero. This list also misses out on 'operator mono' which is a well thought out font for programming.
Though Inconsolata was inspired by Consolas, I wouldn't consider it all that similar. For example, the digits in Inconsolata are much closer to the Franklin Gothic model. Also, Consolas has excellent hinting for Windows, while Inconsolata was originally designed with no hinting at all. They're not drop-in replacements.
Seconded, Inconsolata at small sizes looks awful on Windows.
I'm surprised that so many of these 'programming' fonts do not have dotted or slashed zeros. For a programming font, that's a must-have requirement for me. I edited Droid Sans Mono, so that its zero had a slash, and now I use it as my go-to font for all my IDEs and terminals. However after browsing this lot, I'm tempted to give Go Font a try.
Although Consolas is beautiful on Windows (and is one of my favourite monospace fonts), Inconsolata for me looks very good on Windows 10 (as I remember it didn't quite look as good on Windows 7). In fact, because the font is slightly thicker at lower font sizes, I find it easier to see and use -- so it's currently my default font in PuTTY and VS Code, for instance.
That still doesn't make it free & legal to distribute as a web font so that it displays to people who don't run Windows (or otherwise have Consolas installed), so it would be more than legally dubious to include it in this site without express permission from MS (or who-ever they licensed the work from, if it wasn't created internally).
Hi, I'm the author of programmingfonts.org.
Operator Mono certainly is pretty. I always loved consolas on Windows (honestly, it's the only thing that rendered properly on Win7). That said, I can only include fonts that are freely available, or where the owner of the font allows me to (in the case of Input Mono). I have tried for a few others, but haven't been so lucky there. So, no proprietary or otherwise commercial fonts. I do try to feature them on the blog though.
That's what I feature on the blog, but you'll notice the right-hand side of app.programmingfonts.org is interactive. That's kinda hard to do with static images ;)
I don't think the author needs to go to such lengths just to support some proprietary fonts, specially considering that there are great free and open options.
It really is beautiful. It's a variant of Deja Vu, as I recall, and its hinting is perfect on my display. The feature I really needed, though, was good Unicode coverage, especially for math and logic symbols, and Hack has that spades.
Well, there is no way to get a list of installed fonts via the browser, but I have thought about adding an input so you can try installed fonts. I just don't have enough time to tackle all the ideas I have!
Have you looked at the licensing of the Lucida family of fonts (particularly Sans Typewriter and Console)? From a quick check it looks like just the old bitmap fonts are available for redistribution, and all the scalable varieties are proprietary, but I'm also seeing some contradictory information, so I'm not 100% certain on that. If allowed it would be a great addition to the site.
I have looked at it but have not found a suitable variant. All I find are commercial versions and “The fonts are not redistributable”. Honestly, I doubt bitmap versions are useful for most people.
Some that have ligatures state it after the year they cameo out.
For fonts that don't have ligatures on their own you could use something like Ligaturizer. This adds ligatures based on the Fira Code font to any other font. These ligatures are taken verbatim from Fira Code though, so some will not match perfectly with their non-ligature counterpart.
Yeah, I was redesigning my website and decided to use system fonts. When I added the system don't for monospacw text, I was amazed at how nice Consolas came out.
Lucida Console isn't too bad either -- it's very legible at small font sizes. On some of my work and personal systems I also have Lucida Sans Typewriter[1] (IIRC it was bundled with Office), which is taller and subjectively slightly better looking than Lucida Console
I actually did a quick hack a few weeks ago to build an "elimination" style tool for making decisions. The code is here [0] and the tool is here [1]. Might be able to adapt it to something like this.
That would be neat, browsing through several dozen fonts to find the right pick is a bit overwhelming, although one can argue it's a self-imposed burden.
This is what I've been using the last year as well. At first I felt silly paying for a font but I really like it - having cursive fonts in VsCode does seem to help with my comprehension and breaks up the monotony a bit.
It's machine first, so human readability falls. Though there's the benefit that you will newer wonder what the letter is at all as they are so distinct.
Browsers tend to use their own inbuilt font rendering code, which can be different from the OS. I know for a fact that some of the fonts shown at app.programmingfonts.org do not render that well inside apps on Windows 10.
I think a lot of these fonts deserve a little blurb about their history and purpose. For example Liberation Mono (version 2+) and Cousine are fundamentally the same font available under the same SIL Open Font License https://en.wikipedia.org/wiki/Liberation_fonts#Distribution
Personally I use and recommend Liberation Mono / Cousine at 9pt / 12px. I've been using this font for years so it's just ended up what I'm the most comfortable with for both reading and writing.
That's a good point. I usually have a little blurb like that on the blog, but I have been trying to integrate more info about each font into the test drive thing. There are lot's of "family relations" like that between fonts.
I pretty much standardized on Fira Code over the past few years, although the ligatures seem to delay rendering a bit.
But overall I like that lowercase letters have nice, readable descenders and hints on HIDPI displays, and that my editor now looks exactly the same on Windows and Mac.
This is interesting, but I would like a more 'guided' tour, maybe backed up by some usage data, as well as some statistics about readability and so on.
It's hard for me to imagine that I would choose a font based on usage data and statistics: "25% more coders use Inconsolata than Verdana, and they suffer 3% less eyestrain as a result."
How would you even measure such a thing? A font that works well on a low-DPI display may not be the same one that looks great on a high-DPI display. And one person's eyes are not my eyes.
I look at a font, try using it in my work, and either I like or I don't like it. Even if I do like it, I will probably find some flaws in it and fix them in a font editor. Or maybe I don't and just live with it.
I always enjoy comparing notes with people about what fonts we like to use. But this seems like personal preference, not science.
I've been using DejaVu Sans Mono for quite some time. It's a nice font. It used to be the default monospace font in KDE, until they switched to Noto Mono. Autohinting setting for fontconfig makes it look better for me:
<!-- Making DejaVu Sans Mono more slim -->
<match target="font">
<test name="family">
<string>DejaVu Sans Mono</string>
</test>
<edit name="autohint" mode="assign">
<bool>true</bool>
</edit>
</match>
I'm in the same boat, every time one of these threads pop up I try a few different fonts recommended here but I always end up going back to DejaVu. It think it looks pretty good, it has good Unicode coverage, it's supported out of the box on most distros...
It's weird because I can be pretty snobbish and opinionated with a lot of programming-related stuff (I use a very expensive keyboard, a large 4k screen, a heavily customized editor and window manager etc...) but when it comes to fonts I really have a hard time finding a real improvement with some of the very expensive fonts people are recommending in this thread compared to good old DevaVu.
I would be very interested to read an article that would explain in details what makes certain fonts better or worse than others, especially for programming.
Had a look at iosevka - it definitely seems nicer than many of the others, but it still feels too vertical when compared to DejaVu in my opinion. Is there something that sold you on it?
Well, it certainly is more vertical. The increased x-height allows it to be readable at small sizes (and fit more horizontally) which looks great in the terminal and editor, but maybe a bit odd on the test page.
Well, a week later and I think I'm a convert. I didn't like the look at first, but after using it in my IDE and actually typing with it, it's quite nice.
I've also switched to iosevka after many years of dejavu sans mono. I really like the brackets of iosevka, and its italics. I also appreciate the customisability of it, and the fact that the font itself is in some ways built rather like Computer Modern via METAFONT (and that it uses a Lisp-like language to do so).
Yeah, I've gone through several of these programming fonts but something feels nicer about DejaVu Sans Mono, perhaps it's the visual smoothness compared to say Anonymous Pro - I wind up installing it on Windows machines even.
Same here. I always check out some new fonts when a conversation like this appears on HN, but in the end I never found real improvements. I did, however, start testing Ubuntu Mono the last time I compared fonts. Ubuntu Mono is pleasant to look at, like DejaVu, but it takes much less horizontal space, which helps a lot with dual side-to-side text editors.
Personally, I also happen to really like the weird round corner shapes of the lowercase "u", "n", "p", "q", etc in Ubuntu Mono. It's both friendly and interesting but not out of place. But I know opinions can vary greatly.
Conversely I like almost everything about Fira Code, except the weird serif-ed lowercase "r" looks so out of place to me it kind of spoils the entire thing.
But then again I think if I tried Fira for a week or two, I'd stop noticing and no longer care. It's so very subjective.
288 comments
[ 127 ms ] story [ 5248 ms ] threadStrange to be using an italic to code in, but I quite like it.
edit: someone has actually added ligatures to operator mono if that's your thing (https://github.com/kiliman/operator-mono-lig)
Though, the price for the Mono-only (bottom of sidebar) does match what you said. So I’m guessing it’s just misread/UX.
Edit: sentence clarity
In any case, if you're like me and you look at the terminal screen for hours on end every single day, find some font that won't tire your eyes and is optimized for your screen. If you have to squint or double-check letters or numbers because they're unclear, increase the size or switch to a different font.
[0] https://www.fsd.it/shop/fonts/pragmatapro/
Just did a quick check... I bought it in Sept of 2012, 2323 days ago.
$70 / (2323 day * 6 hrs/day) = $0.005/hr
Did I get my money's worth (and mind you, I paid less than that.. I'm just going by today's prices)? I think I did. It all depends on how you value things.
Is there something wrong with Hasklig, Fira Code, or Inconsolata?
Also, I think increase in screen resolution contributes somewhat. I find that I'm a lot pickier about fonts after getting a 4K display.
[1] https://www.dafont.com/nouveau-ibm.font
https://int10h.org/oldschool-pc-fonts/fontlist/
Oh boy... Don't get me started on this. Those semi-consistent application of serifs, wide vertical traces and the overall MDA-ness of it drives me nuts. It's not like IBM didn't have anything better to choose from.
disclaimer: I make the 3270 font, which is based on the 3270 terminal font, which is the better thing I mentioned in the above paragraph.
Which, again, just goes to show that this stuff is all very subjective.
Yes, it's a matter of personal taste.
For ligature fans: https://www.hanselman.com/blog/MonospacedProgrammingFontsWit...
PragmataPro does come without ligatures though, and that's what I've been using as my main font for over a year now.
It's a slab serif, condensed. You have to like the style. Some people prefer the opposite (wide with ample interline spacing).
It packs quite some columns on the screen while still being perfectly readable and basically every glypth is hand-tuned for small pixel sizes. There's not much else comparable designed with that amount of care.
The closest font on a stylistic basis I've seen is Iosevka.
It would be nice to have some flags to show what the license is for each one.
That said, I have to check those out you mention (never heard of any of them). Thanks.
My current personal favourite is Hasklig.
https://ia.net/writer/blog/a-typographic-christmas
I've been experimenting with a variety of fonts in Sublime Text 3 on Linux, and I keep coming back to the default, which is apparently called emilbuS Mono, and looks like Bitstream Vera Sans Mono.
I realize that most programmers use monospaced fonts, but I personally find proportional fonts to be much more readable and pleasing to my eye. I would be really interested in a similar font comparison that included proportional fonts that are suitable for programming.
Right now my favorite is Trebuchet MS. This renders beautifully on the high-DPI displays I use, and it has easily-distinguished glyphs for the common mistakables like Il|. Its tilde is not very good though, so I used a font editor to swap in a better one.
But I'm always interested to hear about other options!
When I do have to use a monospaced font (e.g. in a terminal window), Liberation Mono is my favorite. Definitely worth a look if you like monospaced fonts.
These days my eyes are dimming, so I dislike skinny fonts. Now I use DejaVu Sans Mono in _bold_ exclusively. Every now and then when HN does a programming font post, I try out different ones, but I always end up going back to DejaVu Sans Mono Bold.
You might take a look at Trebuchet MS. One thing I like about it is that the strokes are nice and fat. At least on my high-DPI displays; haven't checked on a low or medium DPI display.
https://www.microsoft.com/en-us/p/verdana-pro/9n8d67vhhdc2
Coincidentally, I wonder if the license allows it to be downloaded and installed on other OSes, like the old "Microsoft core fonts" package that included Verdana.
It doesn't look like it.
The Microsoft core fonts EULA (https://web.archive.org/web/20091208063245/http://www.micros...) says things like:
> You may install and use an unlimited number of copies of the SOFTWARE PRODUCT.
> You may reproduce and distribute an unlimited number of copies of the SOFTWARE PRODUCT; provided that [they're verbatim, include the EULA, aren't distributed for profit]
> You may not rename, edit or create any derivative works from the SOFTWARE PRODUCT, other than subsetting when embedding them in documents.
> You may permanently transfer all of your rights under this EULA, provided the recipient agrees to the terms of this EULA.
So you can distribute and install them. You have to take some care, but you don't need to involve Microsoft, and you're not bound to the systems they were originally intended for.
The Verdana Pro license (https://www.microsoft.com/en-us/servicesagreement/#STANDARDA...) says things like:
> You may install and use the application on Windows devices or Xbox consoles [...]
> [You may not:] Work around any technical limitations in the application.
So it's very limited.
Also, the old VGA font is surprisingly nice and legible. Can be had here:
https://int10h.org/oldschool-pc-fonts/fontlist/
This makes sense: our eye uses the top and bottom of words to ‘key’ the word. Use proportional and you add information to this system.
[1] https://blog.codinghorror.com/comparing-font-legibility/
[2] https://journals.sagepub.com/doi/pdf/10.1177/001872088302500...
(edit: add references to research)
https://news.ycombinator.com/item?id=18958335
But one thing I'm wondering about:
> All of the tooling for writing code defaults to monospace...
Do you have an example of such tooling? One that I'm familiar with is Google's coding standards, which are obsessed with lining things up in ways that only work in monospaced fonts. Is that the kind of thing you're thinking of, or something else? Thanks!
Coding using proportional fonts is easy to get used to, and it has its proponents. The key is: indent, don't align, and use TABs.
Most things line up perfectly fine i IntelliJ.
I have had someone on my team with an itch for lining up variable assignment. That was the one thing that looked off.
Nevertheless, for teams that insist, the auto code formatter makes it look ‘nice’ for them.
Personally, I think vertical alignment apart from indentation is a mistake for more than these reasons. It implies a structure where there is none.
I don't! :-)
I spent many years lining things up. I would write code like this:
(For the sake of discussion, assume that those arguments were too long to just put it all on one line, so you would naturally want to use multiple lines.)Then when I realized that 'foobar' wasn't such a good name, I had to re-align all the code:
At some point, maybe 20 years ago, I got really tired of this.So I thought, "what if I just use indentation instead of trying to line things up in columns?" Which led to this:
And when I renamed the function, I didn't have to move everything around any more: Instead of every line changing, only one line changed. [1]After I adopted this style, I noticed that the code editor I was using at the time supported proportional fonts, so I got curious and tried one - I think it was Verdana.
And sure enough, the code was just as readable as it was before.
If you don't line things up in columns but instead just use indentation, then a proportional font works just as well as monospaced.
[1] Some will say "just ignore whitespace in your VCS diffs, and this won't be a problem." But I want to know about whitespace changes, just like I want to know about any other change.
Interestingly, one of the reasons sometimes cited for using alignment is that it reduces the number of lines of code needed for a statement or expression. But as often as not, I've seen that backfire because the code gets pushed farther and farther to the right, eventually resulting in more lines of text instead of fewer.
I posted an example from the Rust/Servo code in another comment:
https://news.ycombinator.com/item?id=18962177
This code in their old column-aligned style is actually one line taller than the indentation style they recently switched to.
Cannot you just have your editor do that for you?
But there was more to it: I realized that I didn't like column alignment any more. It didn't make the code any more readable, and in many cases it made it less readable.
A more recent example of a group that abandoned alignment is the Rust and Servo teams at Mozilla. Their code style used to look like this:
A year or so ago they changed to a purely indentation-based style: They found this style to have advantages over alignment, perhaps for some of the same reasons that I prefer it.Of course, if you already have made one of these two jumps, it should be a no-brainer to make the other one as well.
1. http://nickgravgaard.com/elastic-tabstops/
Proportional fonts are different. Anyone can use them without interfering with readability regardless of the fonts and editors that others use. If you look at my code, you will never know whether I wrote it in a proportional font or a monospaced font.
It is not quite as bad as you make it sound.
While editors which haven't yet implemented the elastic tabstops mechanism may not align some text properly in files where tabs were used with elastic tabstops, the problem isn't that bad. All leading tabs (indentation) will be okay, and the chances of text not aligning correctly diminishes as the width between tabstops increases.
— http://nickgravgaard.com/elastic-tabstops/
People are always puzzled when they learn I'm not using a monospaced font, think it's impossible but agree that it's much more readable. Then keep using their monospaced fonts.
Actually, nobody likes to read books or blog posts printed with monospaced fonts, right? There is no reason to do it with code.
Alignment like this
is lost but it's not really important. I think it's also against Python's style guide and for sure it doesn't survive the Elixir formatter (I checked this now.)It comes with some interesting variants, most notably Poly which is not fully monospaced, adjusting the widths of characters like i to be a little narrower, and W to be a little wider. I like to use that for code display.
https://practicaltypography.com/triplicate.html
It has serifs and true italics. Might be an interesting free alternative.
[1]: http://docs.racket-lang.org/pollen/
Even though it's a reasonable price for a commercial font, I can't really justify spending $99 on a coding font just for writing code. I might get tired of it after a few weeks. But if I were to write a programming book, I just might consider it for print.
https://github.com/ryanoasis/nerd-fonts
Then your editor can look like this:
https://raw.githubusercontent.com/wiki/ryanoasis/vim-devicon...
It's not all just for looks. For example you get icons for file types so it's also useful. My favorite is the Nerd Font version of Droid Sans Mono.
https://news.ycombinator.com/item?id=17883833
I'm surprised that so many of these 'programming' fonts do not have dotted or slashed zeros. For a programming font, that's a must-have requirement for me. I edited Droid Sans Mono, so that its zero had a slash, and now I use it as my go-to font for all my IDEs and terminals. However after browsing this lot, I'm tempted to give Go Font a try.
Thank you for your work on Inconsolata.
Please come back and let us know what you find!
Even so, comparing each font on your site affirmed my choice (Hack ftw). I'll be back, though, and will check out your blog in the mean time.
http://b612-font.com/
A steal at $199!
[1] https://docs.microsoft.com/en-us/typography/font-list/lucida...
Identifont is a similar system. It uses a twenty-questions style format to identify an unknown font.
http://www.identifont.com/
[0]: https://github.com/weaversam8/bracket-based-decision-making
[1]: https://bracket-based-decision-making.firebaseapp.com/
Monaco or Source Code Pro
You also have to try them in your terminal or editor, because on the web isn't the same experience.
Personally I use and recommend Liberation Mono / Cousine at 9pt / 12px. I've been using this font for years so it's just ended up what I'm the most comfortable with for both reading and writing.
But overall I like that lowercase letters have nice, readable descenders and hints on HIDPI displays, and that my editor now looks exactly the same on Windows and Mac.
It's hard for me to imagine that I would choose a font based on usage data and statistics: "25% more coders use Inconsolata than Verdana, and they suffer 3% less eyestrain as a result."
How would you even measure such a thing? A font that works well on a low-DPI display may not be the same one that looks great on a high-DPI display. And one person's eyes are not my eyes.
I look at a font, try using it in my work, and either I like or I don't like it. Even if I do like it, I will probably find some flaws in it and fix them in a font editor. Or maybe I don't and just live with it.
I always enjoy comparing notes with people about what fonts we like to use. But this seems like personal preference, not science.
It's weird because I can be pretty snobbish and opinionated with a lot of programming-related stuff (I use a very expensive keyboard, a large 4k screen, a heavily customized editor and window manager etc...) but when it comes to fonts I really have a hard time finding a real improvement with some of the very expensive fonts people are recommending in this thread compared to good old DevaVu.
I would be very interested to read an article that would explain in details what makes certain fonts better or worse than others, especially for programming.
Thanks.
Conversely I like almost everything about Fira Code, except the weird serif-ed lowercase "r" looks so out of place to me it kind of spoils the entire thing.
But then again I think if I tried Fira for a week or two, I'd stop noticing and no longer care. It's so very subjective.