UP | HOME

Habits

Thinking and even observing others (which is a form of learning) is not a substitute for doing (the only way of learning).

Observing and copying others (which is what children do) is the way to get some insights about it and “the feel of it”, but NOT the actual skills.

One has to shot arrows, practicing punches, ride the bike.

There is no substitute for actually doing things. Especially in arts, crafts or sports.

Just like archery or using the org-mode, or writing things down.

Wishful thinking

Downloading or purchasing a book is not enough. It is not even the first step.

The first step is to begin a systematic reading with taking notes.

Reading without taking notes and practicing of what has been read is waste of time. Something will be remembered, but not much.

At most you could become a self-taught “academic”, who can teach the theory.

You think you KNOW when you learn, are more sure when you can write, even more when you can teach, but certain when you can program.Alan Perlis

The main skill for programming, however, is of abstraction, not of coding. Abstraction barriers and interfaces, protocols (sets of rules) and hierarchies of DSLs are at the core of programming. Good programming is hard.

Exercises

The ideal combo is a text, lectures and homework – actually doing exercises. Unfortunately, doing exercises is more important than just reading a book.

Doing exercises will show how bad you are. This is why I am avoiding exercises.

Norvig in 10 years

By actually writing programs. No other way. Books are no substitute, even the best ones, even the classics.

Only the best classic books must be read, because it is very slow, very hard and time consuming (Liskov, Bird, Armstong, etc).

But knowing the right principles and the ability to zoom in and out through layers of abstractions, making your own abstractions minimal and “just right” and using DSLs and interpreters will make a fundamental, qualitative difference.

Languages

Yes, that Alan Perlis quote.

A language that doesn’t affect the way you think about programming is not worth knowing.

The crucial point here is not to try to program in one language with idioms and patterns of another (especially some imperative crap). All the Great languages come with their own ways to program (idioms and patterns), for which they has been evolved (grown) for.

The quote is about understanding what is special about the language and why these great languages became the way they are – by what principles they has been guided.

CLU, Scheme, Common Lisp, Standard ML, Erlang (especially), Scala 3, Go are such great languages.

Erlang’s behaviors (generic functions which do mutual recursion with yours), Scala’s testing DSLs (both use and implementation), Ocaml’s modules are the canonical examples of seeing the actual whys of the classic languages.

And you have to understand C and C++ (and how fucked everything is).

Marginal but systematic improvements

  • better tools (the principle behind any tool)
  • better, skilled execution (require measurements)

Author: <schiptsov@gmail.com>

Email: lngnmn2@yahoo.com

Created: 2023-08-08 Tue 18:37

Emacs 29.1.50 (Org mode 9.7-pre)