3 ms·
I highly recommend "An Introduction to General Systems Thinking, by Gerald Weinberg. An orthogonal piece of advice that I got from a different book of Gerald W
by lcuff 5y ago
I highly recommend "An Introduction to General Systems Thinking, by Gerald Weinberg. An orthogonal piece of advice that I got from a different book of Gerald Weinbergs' is to learn 3 or 4 Very Different languages simultaneously, to grasp the enormous difference between them all. In 2021 I'd recommend C (lowest level other than assembler: 1st caveat, I haven't looked at Rust) and then at least one Lisp-family language that has Lots of Insane Silly Parentheses, which Paul Graham argues is the most powerful language (by far). I'd also choose Smalltalk and Python. Caveat 2: Every programmer will have an opinion on this list, but the main point is to get exposed to the diversity of languages. Also, I'd recommend listening to a lot of talks by Alan Kay. There is lots of fun and interesting stuff to learn from lots of different people, but Alan Kay has focussed on how do we develop stuff that is radically simple, radically powerful, and completely accessible to children as a tool for learning and exploration. His notion of 'object-oriented' (a term he invented) is completely different from how the term is used today.
- bmitc 5y agoI would personally de-recommend Python. It essentially has no unique paradigm or even one that it does really well. I'd replace the Python suggestion with an ML-dialect such as F# or Ocaml. I agree with you though. I think everyone needs a bit of experience with a Lisp/Scheme, an ML dialect, a Smalltalk, Elixir/Erlang, Prolog, and Forth. And I think it's better to think in paradigms rather than languages in that you choose a new language to learn a new paradigm.
- lcuff 5y agoThe main thing I was thinking (I don't use Python myself) was that it's super-popular right now, and fits in the realm of 'a scripting language'. I'm loathe to recommend bash for what I hope are obvious reasons, and I have worked in and detested Perl. I prefer Ruby for small bits of scripting this and that, but chose Python because of it's popularity.
- kazinator 5y agoPython contains CS clusterfumbles like calling evaluated expressions "literals", failing to distinguish between variable initialization and assignment, and evaluating the default expressions of optional arguments at function definition time, rather than call time. Someone learning CS who already knows Python has to unlearn and relearn material in the area of programming language semantics. Python is fine for introducing complete beginners to algorithmic thinking. Almost anything is.
- pjmorris 5y agoFirst, I want to support any mention of any Gerald Weinberg book. Every one is gold. IMO, Intro to GST is great for developing a scientific mindset, something broader than computer science itself. I would suggest a grain of salt to go with the three-four languages at a time recommendation. I'd have to dig up a stored book to find the reference, but Weinberg typically suggests learning two different languages, at least at the beginning. He advocates for the benefits of recognizing it's possible to say the same thing in different ways. My knee-jerk reaction, knowing him, is that he picked two rather than three or four to make things manageable for people getting started. If programming becomes a hobby, vocation, and/or avocation you'll likely wind up learning most of those languages eventually.
- lcuff 5y agoI agree, 3 or 4 at a time is probably too much, I may have misremembered (I can't find the recommendation in any Weinberg book at my fingertips). But six months of solid work on 2, then six months of work on another two is an idea.