views:

2488

answers:

15

I've seen a couple of font topics on SO and it seems a majority of people use monospace fonts for programming tasks. I have been using Verdana for programming for a couple of years and I really like the enhanced readability, without missing anything monospace related.

Why do you use a monospace font?

+49  A: 

In a monospace font:

  • Equal-length string literals look equal.
  • It's easier to see thin punctuation marks like : () {}
  • Similar characters look more different: Il 0O vs Il 0O
  • You know whether or not a line will wrap on a window X characters wide. This means that your team can standardize on say 100 character lines and a line will always look like a line
Ryan
The second and third points are really not that specific to monospaced. This is more a question of which particulr font you use, not whether or not it's monospaced. Verdana does well on both points (better than most monospaced fonts, imo), which is why I use it
Rik
I don't need to answer the question ... @Ryan did it for me! +1. (My comment above is a joke, but this answer hit on why you'll take Consolas (http://en.wikipedia.org/wiki/Consolas) from me when you pry it out of my cold, dead fingers.)
John Rudy
Referring to other answers/comments by using "above" and "below" don't work to well, since the order may change...
JesperE
Above refers, in this case, to my comment on the question itself. But duly noted. (Force of habit.)
John Rudy
To correct each of these: Equivalent strings look equal width, and I question why you care about strings that are different and share only a length. Non-monowidth doesn't dictate that punctuation characters are thin; you should use a different non-mono font. "Similar" characters don't necessarily look different in monospace; SimHei for example has identical O vs 0. It's a property of the font, not the width. Finally, if your team actually does standardize, then you can pick non-mono and standardize on "don't let it flow off the screen."
bwerks
+3  A: 

Using spaces for indentation would be a problem once you got deeper than one level.

jammus
Actually, any decent IDE should be able to cope with this.
Rik
Which is only another reason to use tabs for indenting (it is the reason the good Lord gave as tabs in the first place)
James Curran
+1 for tabs (now whereabouts is that debate going on ...)
Bobby Jack
+1  A: 

I personally find the mono-spaced fonts easier to read in code editors. Of course, I'm almost blind. That might make a difference. I currently run consolas font at 15 point with a dark background with high-contrast letters.

John Kraft
Consolas actually is a mono-spaced font. A very good one, at that. I use it too.
Joel Mueller
+1 for Consolas, and Inconsolata on the Mac
the_mandrill
@Joe Mueller - I have no idea how I wrote that. I mean the opposite of what I wrote. Let me edit that.... ok. :)
John Kraft
+16  A: 

I like to line up related conditionals, to try to make it more obvious that they are grouped. For example:

if ((var1 == FOO) && ((var2 == BAR) ||
                      (var2 == FOOBAR)))

Variable width fonts make this more difficult.

DGentry
+1  A: 

I suspect monospaced fonts were a programmer's preference as a carry-over from the text-based DOS days.

On the other hand, I, myself, have tried Verdana and a couple other recommended proportional fonts, but I couldn't deal with the change. My eye is too well trained for monospace. Languages heavy on symbols, like: C/C++, C#, Perl, etc., look too different for me. The placement of symbols makes the code look completely different.

spoulson
A: 

I think, just like the issue of tab characters, the complicating factor is when something is indented for the purposes of alignment, and someone else has different preferences. Things get misaligned.

Alan Hensel
+1  A: 

By the nature of code rather than regular language, it's nicer to have it lined up correctly. Also, in code editing, sometimes you want to block select, block copy and block paste. In Visual Studio, you can do the block selection by using the ALT key while doing your mouse selection. It might be different in different editors, but I've always found that option in an editor very important in some cases, and it wouldn't work very well, unless you are using a mono-spaced font.

stephenbayer
Now there's new keystroke I never knew before. Cheers.
Kev
+7  A: 

If you work in a team then mono-spaced fonts ensure that code is clear and correctly layed out for everyone, whatever mono-spaced font they prefer to use.

Your code may look clear to you when using a variable width font but it's unlikely to look the same if a mono-spaced font user opens it.

tjrobinson
+2  A: 

I use Comic Sans MS, which looks quite reasonable as small point sizes (it only starts looking "jokey" at headline sizes). It's easy on the eyes, yet still keep the text small enough to have a reasonable amount of code visible in the text window, with several of VS's docked panels open.

You can have the Solution Explorer panel out, and still have 100 columns of text readable without horizontal scrolling. Moveover, I can have the DXCore Documentor panel (displaying formatted XMLDOCs) open wide enough to read while still being able to see enough of the text to doc the XMLdocs.

James Curran
Oh dude. Why? I'd love to hear your justification for that!
Dan
@Dan: For which part of it?
James Curran
Using comic sans for, well, *anything* :)
Dan
My justification is, well, the rest of the message.
James Curran
Your justification is "it's small"? Of all the features of Comic Sans, its "smallness" is rarely one gets it chosen often over other fonts. Plus, it makes you look like you're 12. If I worked with you, I would have definitely laughed at you for that by now :)
Dan
@Dan, no, it's *readable* WHEN it's small, which IS a frequent priority when choosing a font. And laughing at a person over their font selection makes you look 12.
James Curran
Wholly Mackerel - I just tried this and it works. James has probably discovered the only remaining reason for the existence of Comic Sans - it's clearly readable down to 7pt. Next time I have to refactor someone elses' code mess with thousand line methods, this is the font I'll use.
Bevan
It very well might be readable, but I still wouldn't go around admitting it in public :)
patricksweeney
Now THAT was a shocking experience! I am still not sure about using prop fonts, but Comic Sans IS really usable. I know it's a stupid and abused font that causes random visual terror and should have never come to existence. But it works at small scale and one can consider using it. The rest is just snobism. Thanks, James!
Dercsár
I use MS Sans Serif (another non-monospace) and even though it only goes down to 9pt, it fits the same amount of lines on the screen, at 57 lines for each font, despite having taller characters--less intra-line space. I have to admit though, I never would have given it the time of day but it didn't look bad at all.
bwerks
+1  A: 

Mostly for alignment purposes (such as when function parameter declarations span multiple lines and you want to line them up, or lining up comments, etc.).

mipadi
+29  A: 

I've never even considered coding in a proportional font before. So in the interests of science I just switched my editor over to give it a go.

Here are a few observations after fixing a couple of easy tickets:

  • Code seems extremely dense. Most of my code is around 80 columns, rarely over 100. A proportional fonts squishes it down to a tiny strip on the left hand side of my editor. Maybe useful if you're short screen space, but it seems unnecessarily compact.
  • The 'texture' of the code is lost. It's hard to tell what kind of structure I'm looking at - it's just a big slab of text that needs to be read almost character-by-character.
  • It's very easy to miss the ! operator in if (!foo). (if (!foo), see!)
  • Punctuation characters are very badly defined. Many are hard to tell apart ({}[]() vs {}[]())
  • Some punctuation characters are much larger than others, inferring emphasis where none is intended ($@% vs $@%)
  • Some characters are very narrow, and very hard to identify ('"!;:,. vs '"!;:,.)
  • Some numbers and letters are very similar (0Oo iIl vs 0Oo iIl)
  • I am extremely reliant on syntax highlighting, without it it's nearly impossible to do things like confirm quotes are balanced, etc.
  • Alignment (apart from simple indenting) is completely broken. You can sort of wing it by throwing in extra spaces, but because of the proportional nature of the fonts, the lines may not line up exactly - code looks messier.
  • Regular expressions are.. interesting!

There are some positive points, though. Admittedly I've only been using it for a little while, but there are certainly some aspects that work a little better with proportional fonts:

  • 'words' are easier to read - spelling errors (eg spelling a variable incorrectly) jump out at you.
  • I feel better about using longer, more descriptive variable names (maybe because they scan better, maybe because the horizontal size of the text is compressed)
  • It seems slightly easier to read code like this. It's easier for my brain to 'tokenise' each word and understand its meaning. Although because the punctuation characters are harder to read it's still hard going - but maybe that will change given a bit of time to get used to it

I'll update this answer again tomorrow (assuming I can make it through an entire day like this!)

Dan
Gaah! Beat me by 45 seconds.
Konrad Rudolph
Nice job! I wonder what font you used, though, since most points you have about certain characters looking too much alike don't bother me at all.
Rik
I started with Arial, moved onto Calibri. I tried a few others, but those too seemed to be the best based on 20 seconds of extremely unscientific groping through my font list, and a recommendation from Konrad Rudolph.
Dan
"I've never even considered coding in a proportional font before. So in the interests of science I just switched my editor over to give it a go." How many years have you been programming and gotten used to fixed-width? You have a decent answer here, but you don't account for your own bias (and it would be hard to do that without a lot more work), which isn't very good science.
Roger Pate
@Roger: It may not be good science (doing such a study would be nearly impossible, and very expensive!) but the reasons are plausible. And the broken indentation is a hard-to-beat argument (in current IDEs/editors; this problem is solvable by indenting smartly using tab stops that match the semantics).
Konrad Rudolph
@Konrad: Don't take my previous comment as too negative (I see now you can read my comment that way; it's hard to convey tone here), your impressions in this answer are useful. It just seemed disingenuous: for example, taking the first observation, of course code seems dense when you have X *years* of using fixed-width and Y *minutes* of using proportional.
Roger Pate
As per indentation, that's not a problem. Aligning [multiple](http://stackoverflow.com/questions/3099753/why-do-we-use-fixed-width-fonts-in-our-ides/3100026#3100026) [lines](http://stackoverflow.com/questions/218623/why-use-monospace-fonts-in-your-ide/218646#218646) is a hard-to-beat argument using current tools, but it's used less than normal indentation.
Roger Pate
+6  A: 

I've become curious by this thread because many arguments for monospaced fonts can really be rebutted easily with some tweaking. So I switched my IDE to Calibri (because it has a nice, round face and is optimized for readability on screens for UI – perfect). Now I obviously have to use tabs instead spaces for indentation (ignoring all the problems) and 4 spaces width is clearly not enough so I switched to 10.

Looks quite good now. However, there are a few obvious problems that I could spot. More might surface later, after I've tested this settings for a while.

  • As already mentioned, some characters (especially parenthesises, semi-colons) look much too thin. I want this in a continuous text but not in a source code. I think this will be the biggest problem.
  • Symbols don't align well. As an example, consider the following C# code:

    var expr = x => x + 1;
    

    The arrow (=>) looks like a unit in about any monospace font. It looks like two adjacent characters in other fonts. The same is true for operators like >> etc.

  • Spaces look tiny. I space my source codes vigorously to enhance readability. This comes to naught when switching to a proportional font. If I could control the width of spaces this would definitely help.
  • Context-sensitive indentation is completely broken: in some contexts it's not enough to indentate a fixed number of tabs. Take LINQ expressions which might be indented in the following way:

    var r = from c in "This, apparently, is a test!"
            where !char.IsPunctuation(c)
            select char.ToUpper(c);
    

    You simply can't do this with a proportional font.

All in all, characters are too narrow. Again, an additional letter-spacing might help and it's definitely necessary in the case of punctiuation. However, I've got the feeling that all this tweaking to make proportional fonts more readable would just emulate what monospaced fonts to naturally. It's certainly true for all the points mentioned so far.

Konrad Rudolph
Actually Calibri is a bit better than Arial (which is what I was testing with), although it does still exhibit similar problems
Dan
I've tried several fonts. Calibri and Lucida Sans Unicode seem to be the most likely candidates. It's no coincidence that Lucida Sans Unicode (under the alias “Lucida Grande”) is OS X's UI font.
Konrad Rudolph
Yeah those two are very similar, actually. Calibri wins for me, as it has slightly clearer punctuation.
Dan
It might just be me, but I've found Calibri's spacing to be incredibly unpredictable--some spaces seem non-existant while others seem huge. Even without regard to programming, I've disabled it on every machine I use.
bwerks
@bwerks: what do you mean – you “disable” it? Just don’t use it if you don’t like it. Furthermore, when, except in programming, do you use spacing? For formatting? *Don’t*, that’s a mortal sin. Furthermore, what you observe may just be the effect of Microsoft Word’s bad line-breaking algorithm – since Calibri’s spacing is always the same: a space has the same width, always. In particular, it’s not affected by kerning.
Konrad Rudolph
+5  A: 

All it takes is a few hours of trying to figure out why a search isn't finding something because you have 2 spaces instead of 1 in your literal, to realize you should use Monospace fonts. I had this happen to me once when trying to fix a Lotus Notes agent, when the designer wasn't using a monospace font. It wasn't until I pasted the code into CodeWright to print it out that it was obvious what the problem was.

bruceatk
+3  A: 

Monospaced fonts make it much easier to line up code.

This is especially true when working with a team; everyone in the team can use different fonts, and as long as they're all monospaced, everything will line up. Similarly, if a single person uses many different development tools, everything will line up if they're all monospaced. If they weren't all monospaced, you'd have to make sure that they all use the same font, and if you're developing on two platforms, that can be difficult.

In fact, some development tools only support monospaced fonts.

Another reason is that monospaced fonts tend to have more distinct characters. Compare lIio0 to lIio0, and you'll see what I mean. They also make it much easier to count whitespace.

SLaks
+1  A: 

One thing I keep seeing in here is discussion of "lining up code" and indentation. I would like to point the following things out:

  • eight spaces will always be twice as long as four spaces in any font.
  • two tabs will always be twice as long as one tab in any font.
  • any identifier on one line will always be the same width on the next line...in any font!
  • sure, if your teammates are using monospace and you're not, it'll look different...but you should be standardizing on something--whatever it is--and if that's true then it'll look the same for everyone...in ANY font! For laughs you could also try keeping everyone on monospace and giving half of them widescreen monitors...see how that goes.
  • If you're doing anything that relies on lining up code based on the columnar position of those characters on the screen, and not the scope of the identifiers you're using, I pose that what you're doing is a hack. Identifiers should never be constrained to a certain number of characters at the cost of the quality of their names. Aside from that...you're not still drawing ASCII boxes with asterisks for comments in your code, are you?

So drawing all of this together, if you start each line at the same place, and consistent spacing is the same width, and the identifiers don't spontaneously change width on each line, then your code actually WILL line up! ...until something is different.

for example:

identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
  • identifier.Method().Property.ToString();
  • identifier.Method().OtherGuy.ToString(); //oh no! misaligned!
  • identifier.Method().Sumthing.YouGetThePoint; //...but who cares? they're different properties!

The one point I'll concede is that non-alphanumeric characters are typically not very wide; these include )(][}{,:|";',`! and . This however could be fixed in a font editor...simply by making them wider. It's not a problem inherent with non-monospace; there just hasn't been a lot of demand for it, and so it hasn't been done yet.

In summary, personal preference is fine, but I think there's little practical reason to prefer monospace over non-monospace. You like the look of it? Sure, do monospace. You want more stuff to fit on your screen? Go non-mono. But the way people treat non-monospace like heresy is a little overblown.

bwerks