1. -4

  2. 2

    C is probably one of the two languages I’m most comfortable with at the moment, and I’ve been spending a lot of time in MIPS assembly lately. Still, my introduction to programming was through the venerable AppleBASIC; it was easy to learn to program while still being able to do cool things like making simple video games. I think that the simplicity helped engage me, and when I was ready to do more with the system, I moved on to 6502 assembly.

    With C, especially on modern systems, there’s a lot of overhead to be learned. Writing C involves a lot of extra work, such as learning make(1). Today, I feel that the modern equivalent of BASIC is Python; I find the syntax is considerably cleaner than Ruby, and there’s a lot you can do with it. It’s also easier to go deeper into the system than BASIC. That being said, Ruby does have Rails, and making websites is the thing to do these days, making Ruby still a pretty solid beginner language. I think they’re good for giving people a friendly start on programming; once they’re ready to do more and dig deeper, there are other languages – like C, Haskell, Erlang, Lisp, etc…

    1. 1

      I don’t think C is the right first language. Sure, it can help you understand some computer architecture, but that can also be learned later, after you have another language down.

      The computer architecture argument just doesn’t work for me because you’re throwing a whole lot of stuff at people all at once. Going with a scripting language means you can mostly ignore the low level stuff until you’re ready to learn it.

      1. 1

        The title:

        Which first language is best for learning programming techniques? The argument: […] knowing C on Linux will help you to understand the basic principles of computing architectures.

        There’s some kind of a mismatch here.

        Unless you work with some low-level language, programming and code design has little to do with the underlying architecture.

        1. 1

          Right, but the underlying argument is that you should start with a low-level language so that you have the deal with the underlying architecture. I don’t think it’s a good argument, but it’s at least somewhat coherent.