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
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…As we explained in last class, high competence in programming has the three (relatively) independent dimensions technology, science and perspective
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
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'
egs.
- 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
- 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.
- Corollary: Defaults are not optimal. Follows from
- Democracy ≡ Masses decide the good
- Law: Identification is needed
- 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
- GTD (Organizing your life) followed by Note Taking Refiling etc
- Babel (Last 7 minutes)
- Org PowerUser (dont spend too much time here — Just a teaser!!)
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
When tolerably proficient try magit. Too soon will confuse you
Here's a screencast anyways…
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
Screencast
Screencast
4.5 elisp as Turing complete
5 Shell
6 Make
7 Git
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)
No comments:
Post a Comment