News for hackers. Stuff that matters.
Re:Ask HN: Why not use variable-width fonts for programming? by lutusp on Thursday February 06, 2014 @06:34PM (#7193682)
Where indentation is present/relevant, monospaced fonts are critical for interpreting a program's logical structure at a glance. And in more than trivial programming, indentation is always present/relevant.

> Should all the programmers agree that they will not tabulate code and indentation interval will be fixed (i.e. one tab or n spaces no matter what, no alignments) ...

In indentation, never use tabs. Always use spaces. Tabs are open to reinterpretation as you change editing environments, spaces aren't. I can't tell you how many times I've heard from novice Python programmers whose programs appeared to be structurally correct but failed to run as expected, after which a more experienced programmer suggested that the embedded tabs be removed and the code reviewed and manually re-indented.

More here: https://www.google.com/search?q=python+tabs

Re:Ask HN: Why not use variable-width fonts for programming? by gkya on Thursday February 06, 2014 @07:07PM (#7193839)
I write Python, but it is only among the languages I use and the languages there are. Here is some Python displayed with Raleway font: <http://cadadr.tumblr.com/post/75836598049/here-is-some-pytho.... The code is indented with 4 spaces. I cannot see any problems with the left outline of the code (I am not arguing it is good though, I am only arguing that it functions).

Also, if each interval of indentation is n spaces, won't the indentation look aligned anyway, as the width of a space character is constant?

> In indentation, never use tabs. Always use spaces. Tabs are open to reinterpretation [...]

I take this as a good property of tabs, given that spaces aren't used for micro-alignment, that indentation is formed only of tabs. This enables different people with different tastes to easily collaborate: I personally like wide indentation, so I keep my tab width as wide as 8 space characters. But, say, if you were to read my code and liked smaller intervals of indentation, you can set your tab width to, say, two spaces, and view the code as you like it, whereas with hard spaces, this is impossible without actually changing the file.

Re:Ask HN: Why not use variable-width fonts for programming? by lutusp on Friday February 07, 2014 @02:34AM (#7195218)
Fair enough. But try this (or any of its many equivalents) with a proportional font or tabs:

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      
      s = ''
      
      for y in range(1,13):
        for x in range(1,13):
          s += '%4d' % (x*y)
        s += '\n'
        
      print(s)
      
         1   2   3   4   5   6   7   8   9  10  11  12
         2   4   6   8  10  12  14  16  18  20  22  24
         3   6   9  12  15  18  21  24  27  30  33  36
         4   8  12  16  20  24  28  32  36  40  44  48
         5  10  15  20  25  30  35  40  45  50  55  60
         6  12  18  24  30  36  42  48  54  60  66  72
         7  14  21  28  35  42  49  56  63  70  77  84
         8  16  24  32  40  48  56  64  72  80  88  96
         9  18  27  36  45  54  63  72  81  90  99 108
        10  20  30  40  50  60  70  80  90 100 110 120
        11  22  33  44  55  66  77  88  99 110 121 132
        12  24  36  48  60  72  84  96 108 120 132 144
      
Or this:

        #!/usr/bin/env python
        # -*- coding: utf-8 -*-
        
        from numpy import arange
        
        # dimensional parameters for the set
        
        yl = -1.2
        yh = 1.2
        ys = .05
        
        xl = -2.05
        xh = 0.55
        xs = 0.03
        
        def mandelbrot(c):
          z = 0
          for n in range(10):
            z = z*z + c
            if(abs(z) > 2):
              return '.'
          return '*'
          
        s = ''
        for y in arange(yl,yh,ys):
          for x in arange(xl,xh,xs):
            s += mandelbrot(complex(x,y))
          s += '\n'
          
        print(s)
        
        .......................................................................................
        .......................................................................................
        ..............................................................**.......................
        ...............................................................*.......................
        ................................................................*..**..................
        ................................................................***....................
        ...............................................................****....................
        ...........................................................***********.................
        ............................................................**********.................
        ...........................................................***********.................
        ...................................................*.......***********..........*......
        .................................................****..********************.....*......
        ................................................***********************************....
        .................................................********************************......
        ...............................................**********************************......
        .............................................************************************......
        .............................................*************************************.....
        ..........................**......*.........*****************************************..
        ............................***********.....***************************************....
        ............................********************************************************...
        ..........................*********************************************************....
        .....................*....*********************************************************....
        ......................************************************************************.....
        .....................***********************************************************.......
        ..*****************************************************************************........
        .....................***********************************************************.......
        ......................************************************************************.....
        .....................*....*********************************************************....
        ..........................*********************************************************....
        ............................********************************************************...
        ............................***********.....***************************************....
        ..........................**......*.........*****************************************..
        .............................................*************************************.....
        .............................................************************************......
        ...............................................**********************************......
        .................................................********************************......
        ................................................***********************************....
        .................................................****..********************.....*......
        ...................................................*.......***********..........*......
        ...........................................................***********.................
        ............................................................**********.................
        ...........................................................***********.................
        ...............................................................****....................
        ................................................................***....................
        ................................................................*..**..................
        ...............................................................*.......................
        ..............................................................**.......................
        .......................................................................................
Re:Ask HN: Why not use variable-width fonts for programming? by dllthomas on Friday February 07, 2014 @09:34PM (#7200053)
Mostly agreed but most importantly follow convention in the 1) code base and 2) domain/language you're working in, in that order.