Which first language is best for learning programming techniques?

Most people would suggest Python, which no doubt is a good language for beginners. But a lot depends on what you plan to do. If this isn’t only an academic experiment and you’re looking to seriously expand your programming ability then I’d argue for C on GNU/Linux.

C is not object-oriented and certainly more difficult. But knowing C on Linux will help you to understand the basic principles of computing architectures.

Debugging with gdb, strace, valgrind and learning about low level system calls will teach you a great deal about how a program works, where it’s resources are used and how to eliminate it’s bottlenecks. What is a heap, stack or static memory? How does memory management or garbage-collection work on a modern OS? What is IPC and how do the individual system calls function & require as input? How do you compile a program using gcc?

Later check out the sources to some of your programs you use every day (ls, more, cd, or any other command you want to know how it works …) and play with them. Why not write a simple Makefile to put things together?

This is fundamental to deeper understanding how operating systems (and other languages) work later on. Once you mastered it move on up to the user-space languages such as Python, C++, Perl, then maybe Scala, Haskell, Lisp/Scheme, Erlang, Ada.

Sure it’s much simpler to start in Python. But not learning C and instead getting too comfortable with Python or Ruby, … the risk is that you won’t ever bother with learning how the lower levels work (and hence lack a really fundamental skill).

Why I haven’t bothered to mention Java, I hear you ask? Because we’re in the year of our Lord 2014 [1][2][3].

While you wonder which language to learn first, why not start by making yourself a nice KitKat salad and then go check out these C programming resources:

  • C and C++ Programming Resources [link]
  • Resources for learning C program design [link]
  • Useful C Resources [link]
  • Modern C [link] see also discussion on HN
  • Learn C the hard way [link]

UPDATE-1: Udemy.com reached out to us asking if we could link to their site from this post. The quality of their material was rubbish in comparison to what is available freely in the public domain. Asking them if they’d return the favour and backlink to our site they only offered us a mention on twitter (they appear to have a large number of fake twitter followers so we declined).

Update-2: It seems udemy pricing logic is a bit buggy (see the java course price :-))

 udemy is a joke

UPDATE-2: Udemy is using pirated course work [link][link] – don’t use udemy!

Seriously, if you don’t mind spending money, let me suggest a timeless references on how to program on UNIX (or Linux): Richard Stevens (all of his books are awesome) [link]

Totally unrelated: Check out these classic CompSci papers for a rainy weekend session.

Valbonne Consulting provides Research & Consulting for emerging technologies in Internet/Web of Things (WoT/IoT/M2M) and Emerging-Tech. We specialise in decentralisation, security and privacy. We work across a variety of traditional industry verticals (Telecommunications, Automotive, Energy, ...). We support Open Source and technologies built on open standards.

Joachim Bauernberger

Passionate about Open Source, GNU/Linux and Security since 1996. I write about future technology and how to make R&D faster. Expatriate, Entrepreneur, Adventurer and Foodie, currently living near Nice, France.

One thought on “Which first language is best for learning programming techniques?

  1. Even though the post is a bit old, it’s relevant to me personally as I’ve just sent my son off to a UK university to study Computer Science. The first languages they will be exposed to are Java/Python, then possibly C in the second semester. I wholly agree that C helps expose the operating system depths to gain a deeper understanding of the system one is working on. Myself, I started with FORTRAN & various assembly languages (PDP, 8085), moved to Pascal, then C. I much preferred C or assembly languages to see the nuts & bolts of the system. But that was all long ago before I was seduced by the dark side of the business side. Maybe I’ll pick up a RasPi….

    Enjoyed your posts, would like to see some new ones!

Leave a Reply

Your email address will not be published. Required fields are marked *