This is a resource that covers programming fundamentals, at roughly the level of CSU Chico's CSCI 311 course. Simply put, you will learn how to use C and C++ to solve problems. Most of these principles can be applied to other programming languages, though.
Note
Despite the name, LearnRust doesn't actually have anything to do with Rust. Sorry JQ!
Also, note that this is very much a work-in-progress. As I'm writing this, there is only one chapter. LearnRust doesn't achieve its stated goals quite yet, but it will hopefully get there eventually.
If you're struggling with solving a problem or understanding a concept, ask a Tutor, a Lab Assistant, or a Professor.
Information about drop-in department tutoring can be found at this link. I currently tutor from 2-5 on Wednesdays, and 11-1 on Fridays.
Information about appointment-based tutoring through the Student Learning Center can be found at this link.
I recommend using VSCode. More on this later.
TODO
VM setup?
FTP info?
ECC linux info?
Most chapters will have some "core problems". They aren't as hard as "bonus problems" (see below) but they're important and you need to understand them.
Important
Your goal is to eventually be comfortable enough with the core problems to do them quickly, from scratch.
You don't have to do them in order, but don't skip any. You will NOT be given pseudocode for core problems.
You can always look back at the chapter's provided examples. Also, you should always feel free to look at C and C++ documentation. If you're running into a bug you're not sure how to solve, feel free to use resources like StackOverflow to figure out what's going wrong. But try to do as much of it yourself as possible!
Important
DO NOT COPY YOUR OWN OLD CODE. Don't even look at it. Try to write the entire solution yourself, from start to finish.
Many chapters will have bonus problems. These are harder, and are meant to be done after you feel comfortable with the core problems. They may come with pseudocode and/or a skeleton to get you started.
You can look at your old code here, but I still recommend avoiding it.
Why does LearnRust do [insert stupid thing]? Are you, Max van der Veen, author of LearnRust, stupid?
I make a lot of choices that may seem weird. I'll try to justify them here.
No Skeletons: Problems generally will not come with a skeleton to plug your code into. I want you to be comfortable enough with C++ to make your own "skeleton".
No Pseudocode: You generally will not be given pseudocode, and you shouldn't go looking for it. I want you to be able to come up with a solution on your own, rather than adapting somebody else's.
Note
Writing your own pseudocode can be a great way to think through a solution before trying to implement it. Just don't rely on someone else's!
No Skipping Core Problems: If you understand a core problem well enough to skip it, you understand it well enough to write a solution from scratch in 1-3 minutes. If that's truly the case, prove it by taking 1-3 minutes to write a solution. Don't skip core problems!
No Reusing Old Code: Your goal is to understand the core problems well enough to be able to solve them quickly, from scratch. I don't care if you've solved the same exact problem in the past; you should be able to do it again. Seriously, don't copy your old code!
These restrictions may sound excessive, but they're important. I want you to be able to look at a problem and immediately have a good idea of how to program a solution to it. That kind of intuition isn't easy to learn (or to teach!), and following these guidelines will ultimately make things easier on both of us.
Finally, note that a lot of these restrictions don't apply to bonus problems, which are much more involved than core problems.
If you have any kind of feedback, constructive or otherwise, you can let me know at [pretend there's a discord link here]
.