tl;dr - You are setting yourself up for failure. Read SICP, widely considered one of the best books ever written on the topic of computers. Used as the programming textbook at MIT, Berkeley, Yale and dozens of other respected schools, primarily in the '90s and still regularly places in "Top 10 Best Book" lists for professional programmers. It maintains a spot among the top 8 "most mentioned" books on StackOverflow as well as StackOverflow's community wiki of "Greatest Programming Books".
Use Racket or Guile scheme if you want to be old-school, use a setup guide and take a look at Eli's answers when you're stuck.
Forget Rust & C for now.
Mark, is that you!?
Your story fits the profile of someone I met on a long plane ride not just vaguely, but exactly. Up to and including chaining excel if
functions and Feynman's on Computing.
His name was Mark, he was a consultant at McKinsey. By telling you this I've told you a lot of what you'd need to know about him, in fact I might just be repeating myself if I told you he went to an Ivy. A very smart guy.
I saw he was watching a lecture on programming in C, from Coursera I think, we got to talking about why he was learning to program.
He wanted to write real, super duper programs. He didn't like programming in Excel and he sensed a better way. I talked to him a little bit about it and we ultimately decided to keep in touch.
I recently contacted him (unrelated to your post) and was not surprised to find out that he'd ultimately given up. A driven and intelligent man by any measure, ultimately failed to write meaningful programs of his own design. He got to that stage where nearly everyone bails on programming: "I understand the constructs, just not how they can make useful work". C exacerbates this problem, perhaps more so than any other commonly used language except perhaps it's cousin + daughter C++.
If you think this isn't your problem, think on this -- you've read Feynmann, you already know what a while
, if
and basic operators do which can both theoretically and practically construct all / nearly all programs (respectively). Things like volatile
, buffer overflows, stdio.h
, the Unix Philosophy, CHAR_BIT != 8
- these are all details, many programmers get by well without these individual morsels of knowledge -- so why aren't you already an expert programmer?
I submit to you it's because you don't know how to "assemble" these parts.
So why pick the language with the most opaque insights, the toughest to detect issues, the most features reflecting long-gone eras in computing, the most "raw" experience? This isn't an issue of "no pain no gain" - that concept doesn't really apply in programming.
C programmers like to think that because they've written C, they basically understand how the system works. I don't want this post to turn into a Tolstoy novel so I'll leave this at "not true" and move on.
I'll admit that I've been scarred by C and therefore have a sour view -- after writing wireless device drivers, rootkits, a Lisp implementation, tiling window manager and a hundred other just barely working programs in C, I cannot tell you how much starting with it has held back my development as a programmer. Heck, I've formally verified software written in C and I still got the feeling that it was "barely working"!
Rust is considerably better, both for novices and veteran programmers, but still far away from emphasizing the basic concepts of programming.
A quick note on Feynmann. I got the book after this plane ride (Feynmann Lecture on Computation), I haven't seen any video lectures of his, but at least that books provides a greater focus on the theoretical considerations of computing: information theory, physical limits of computation, quantum computing, etc. If you can learn to program this way, great, but I'd be surprised if it gave you a good review of what it takes to program well.