Re: [dev] Suckless Way to Learn How To Program

From: Marc Weber <marco-oweber_AT_gmx.de>
Date: Sat, 14 Aug 2010 03:10:09 +0200

Excerpts from Brandon LaRocque's message of Sat Aug 14 00:20:17 +0200 2010:
> This is a pretty easy question to ask, though I'm not sure how hard it
> would be to answer. My question to those at Suckless is this:
>
> My son is interested in computer programming, and given the way that
> programming is being taught, I don't think it's the right way to go
> about learning.What would you guys here suggest for a self-learning
> curriculum that I could set up for him? By this, I mean languages,
> ideas, projects. I would really appreciate any help in the matter.
> It'd be interesting to know what you guys consider a 'suckless
> programming 101' course would consist of, for self-learners.

Tell him that mailinglists and chatrooms do exist.

Whatever "programming" means today: There are various different use
cases and ways to write programs.

PHP, Ruby, Haskell, Scala, JavaScript, C, VB.net .. all have their use
case - and implementations differ. An easy way to categories languages
is by
a) laziness
b) compile time type checker.

So you can create a small chart:

                     | strict | lazy
                     | |
strongi type | Java, HaXe | Haskell
system veriified | Scala, Ocaml |
at compile time | |
                     | |
more runtime errors | RUBY,PHP,JS | Nix (www.nixos.org)
                     ...

Because you should pick the best tool for a given task I propose having
a look at different tools. This list is very incomplete.
Also there are various DSLs.

Maybe HaXe, Ruby and C are nice languages to start with.

Ruby because it can be used for almost everything
  and because the community also wrote code for advanced concepts such
  as "change my code and watch what breaks" like tests..
  (of course Perl, Python etc can teach much as well)

C because it shows how to work with bits and bytes - and because its
  widely used

HaXe illustrates advantages of a stronger type system,
  and it targets different languages.

(Java:) Advanced IDES. Learning about refactoring tools and such which
  exist in Java can be an interesting experience.

Of course your son can't learn them all at once. I think you should ask
him what he's most interested in - and start there.

Maybe even DSLs such as csound can be interesting.

If your son likes gaming maybe even MARS is a challange:
http://en.wikipedia.org/wiki/Redcode.

If you want to tell your son that everything possible will be or has
been done by a human -> brainfuck.

Last but not least: The perfect programmer doesn't program. He reuses
existing code :) So don't miss github, sourceforge, gitorious etc.

It also depends on what you know best. The better you know a language
- the easier it is for you to help if there is a question or a problem.

Whatever the result will be: You should know at least one scripting
language today. Also knowing a fast versatile editor such as Emacs or
Vim (maybe JEdit?) which provides macro recording features and such can
be of value.

Watch your son. If he's interested in robotics.. There are many nice
projects as well - with or without DSL.

Maybe even scripting Blender can be much fun - and teach a lot.

There is no easy answer to your question. Different people have
different perceptions - so they call different styles suckless.

Maybe a simple Ruby tutorial like this:
http://pine.fm/LearnToProgram/?Chapter=00
is a good start. Of course it only covers the very basics.

Marc Weber
Received on Sat Aug 14 2010 - 03:10:09 CEST

This archive was generated by hypermail 2.2.0 : Sat Aug 14 2010 - 03:24:02 CEST