Search This Blog

Wednesday, December 27, 2017

The ‘User’ and Technology

1 Introduction

[This post is mostly for my students]

I had mentioned in the class that you are graded along three dimensions
By the nature of things for the most part, concepts are evaluated. And a bit of perspective.
If you have done some coding your technology is satisfactory: ie you know how to turn on your machine, log in and enter code. If thats ok with you dont bother with this post
If you want to go beyond that grade you need to read this and implement some of the suggestions

2 The Neologism called ‘User’

Thinking is our most intimate activity, and a lot of it is revealed by the way in which we use (and misuse) our language…

So I was amazed by and annoyed at the frequent appeal to the untranslated, just copied, “user” in the middle of a Dutch sentence defending some design decision. The noun “user”, is, of course, perfectly translatable into Dutch, but those guys did not do it! I got definitely suspicious when I learned that also the French —in spite of all their Anglophobia— embed the untranslated English word “user” in the middle of their French sentences! Since then I was alert, and I can now tell you that the word “user” is not only good Russian, but also perfect Japanese.
The fact that the “user” of Anglo-Saxon computing community is copied instead of translated is, therefore, for me a proof that the “user” has lost its original meaning. Subconsciously the foreign term is imported as a neologism, as a new word for a new concept.
The computer “user” isn’t a real person of flesh and blood, with passions and brains. No, he is a mythical figure, and not a very pleasant one either. A kind of mongrel with money but without taste, an ugly caricature that is very uninspiring to work for. He is, as a matter of fact, such an uninspiring idiot that his stupidity alone is a sufficient explanation for the ugliness of most computer systems. And oh! Is he uneducated! That is perhaps his most depressing characteristic. He is equally education-resistant as another equally mythical bore, “the average programmer”, whose solid stupidity is the greatest barrier to progress in programming. It is a sad thought that large sections of computing science are effectively paralyzed by the narrow-mindedness and other grotesque limitations with which a poor literature has endowed these influential mythical figures. (Computing science is not unique in inventing such paralyzing caricatures: universities all over the world are threatened by the invention of “the average student”, scientific publishing is severely hampered by the invention of “the innocent reader” and even “the poor reader”!)
E. W. Dijkstra
As we explained in last class, high competence in programming has the three (relatively) independent dimensions technology, science and perspective
Which is loosely related to the triad we started with
Now Dijkstra above is harsh and excessive, but he points to a truth –
  • Using (or user-ing) drives designing (architecting) and implementing (programming)
  • Programmers design and implement but also like others they do use computers in the process of design and implement; ie they have a recursive relation with computers.
  • And because 'User-ing' and technology are intimately related, being a good CSist ie design/implement requires effective 'Use'
I did not show much (of) technology besides emacs. This was illustrative not necessary — ie one can use another editor/ dev-environment to equally good or better effect. And ignoring this will cost way more than making a sub-optimal choice.
  1. Among vcses getting confused between git, svn, mercurial, fossil, rcs etc is to some extent understandable. Therefore not choosing any and wasting time with lost code is much more sub-optimal than choosing the less-than-best vcs
  2. Similarly stressing over whether to use emacs, vi, eclipse or sublime will gain you little. But making no choice and defaulting to using notepad (or gedit) will lose you much.
  3. Corollary: Defaults are not optimal. Follows from
  4. Democracy ≡ Masses decide the good
  5. Law: Identification is needed
  6. Law: Identification is a negative

3 In short

  • To be a good computer programmer
  • You must be a good user of computers
  • Which means you need to set up and practise

4 Emacs

Emacs and Eclipse are the only universal dev environments that I know of. Others
  • Are editors — Vi, Sublime — which must be used in combination with a(nother) shell.
  • Language specific: IDLE for python, jedit for java, Visual Studio for C# etc
  • Unfit for programmers (and default) : notepad, gedit etc

4.1 Org

4.2 gdb

Mainly for C/C++
  • Basic
  • GUI : See the accepted answer on stackoverflow
  • For python, there's M-x pdb (poor documentation!)

4.3 magit

I recommend starting without emacs; just from shell.
Then go move to vanilla VC in emacs. Main key is C-x v v Also Menu→Tools→Version Control→Check in/out
When tolerably proficient try magit. Too soon will confuse you
Here's a screencast anyways…

4.4 helm

I dont like it some people love it

6 Make

7 Git

Much programmer time goes in recovering from bugs. And good vcses make this recovery much faster. There are dozens of vcses As far as I can see git has won and I suggest you just start using it without too much ado
There's also the older more lightweight Rcs, with some advantages

8 X

9 Linux

10 VM

11 Docs

12 Net

ie google, stackoverflow, etc

13 Multi Lingual Editing

Its 2017 — all OSes today are unicode compliant. Yet many people still use computers as though ASCII was all that exists (1980s!!) And if your mother tongue is not English this is even more stupid

13.1 Output

Mostly a question of fonts… Mostly works nowadays

13.2 Input

Can be at Emacs level or Display System (X) level

13.2.1 Emacs

C-x 8 RET allows any unicode character to be entered
Try C-x 8 RET then give devanagari letter ka (tab-expansion works)

13.2.2 X

No comments:

Post a Comment