Live data from Hacker News

Beej's Guide to Learning Computer Science

beej.us

21–30 of 150 posts

Re: Beej's Guide to Learning Computer Science

#21
post #15

Well done but is this a guide to Computer Science or to Software Engineering? In a Guide to CS I expected to find information theory, computability, complexity, finite state automa, language grammars etc. Anyway, the audience is > Undergrad students just getting into programming so it's naturally biased toward the engineering part of the subject.

> 1 Foreword

> Are you getting into Computer Science, or thinking about it? Or maybe you’re in it already. This super-high-level guide is for you!

> I’m not going to talk about how to write code (much). I’ll I’m going to talk about in these roughly 40 pages is more about how to learn when you’re a nascent software developer.

Page 1

Re: Beej's Guide to Learning Computer Science

#22
post #5

Most reputable CS courses will have one or two math subjects (often called "Discrete Mathematics" or some variation). Does anyone have any advice on tackling subjects like these for someone who hasn't done any math since high school more than a decade ago (and has forgotten it)?

My advice is to (re-)learn elementary algebra to a proficient level before attempting any other branch of math. That is a core prerequisite for absolutely everything. By elementary algebra I mean roughly everything in classes called “Algebra” or “pre-calculus” that you learn in an American high school before calculus. Geometry and trigonometry can’t hurt either but algebra is more central.

For as much as I've learned in the last 10 years of being a software engineer, I've frankly forgotten at least half of the maths I once knew.

Of course, I could take the time to re-learn it all if need be, but I'm definitely thankful to have went straight from high school into college. Having to re-learn everything just to be at baseline would make the whole experience far less enjoyable. Kudos to those that have done so.

Re: Beej's Guide to Learning Computer Science

#23

I feel stupid saying this over and over each time one of his guides pop up, and I know he lurks here, but thanks Beej. All of his material is absolutely top notch. His guide to network programming was instrumental to both my understanding and career. It often feels like thanks isn't quite enough.

Yea agree, free educational content is worth so much. Especially in a world where everyone wants to make a quick coin by selling courses or whatever. Would never have looked into C if it wasn't for beejs guide, as that other book that's often recommended is as dry as math books...

Re: Beej's Guide to Learning Computer Science

#25

> So, while it’s clearly possible to have a career in a lucrative field you dislike, it’s (a) going to be harder for you than for people who like it and (b) maybe you should consider a field that you do like? > You gotta want it. Do you want it enough to go through the tremendous amount of effort it takes to learn it? Maybe you hate programming, but you want the money enough. Maybe you don’t care about the money, but…

There's also a huge difference between liking to program and liking to work as a programmer. I despise the latter as business programming takes the joy out of everything. Trying to educate management about the current boundaries of the product or having to work extra hard because a product manager promised features that dont yet exist is exhausting. Not being allowed to work on fixing tech debt while having to build on top of it is pain. Doesn't help being a solo dev in a start up either so maybe that's the issue.

Re: Beej's Guide to Learning Computer Science

#26
post #5

Most reputable CS courses will have one or two math subjects (often called "Discrete Mathematics" or some variation). Does anyone have any advice on tackling subjects like these for someone who hasn't done any math since high school more than a decade ago (and has forgotten it)?

> one or two math subjects

Only one or two? :)

It's not easy as an adult but it's definitely doable, don't get discouraged. The main hurdle isn't knowledge of specific topics, most undergraduate courses assume little to no previous baggage, i'd say it's more the lack of "mathematical maturity"[0], or the ability to "bridge" between the formal language of math and the intuitive "what we're doing here".

When you're writing code, you probably don't stop to think "I need to do this operation for each element of this vector, a for loop is what I need", you instead have a high level idea of what you're trying to accomplish and "make the code happen", filling in the formalities as needed. Trying to go line by line is how beginners operate, and that's why they never get anything done. I'd never get anything done either if I had to work like that!

The reason why many people get stuck in math is similar. You read a definition that goes "for all ε>0 there exists δ such that for all ..." and you immediately get confused, trying to keep the entire "abstract syntax tree" of what you just read in memory. Like in the code example, the "mature" way to see it is that we're trying to capture an idea, and the formalism is instrumental in that. What are the variables "morally" doing? (At a certain point you'll realize the formalism is actually working for you rather than against you, but that's a rant for another time...)

The conceptually easier but more time-consuming thing to do is to practice symbol pushing if you lost that since high school. For example: is it immediately obvious to you what (a+b)^n is if you expand it? Do you remember how to factor (a^3 + b^3)? Do not despair if you don't. Many more people than you think can't do that off the top of their heads, but it's the kind of "mechanical" skills that's probably blocking you at this point.

Another important aspect to learn is a bit of notation, the "standard library" of math, as it were. Understand "for all" and "exists" as quantifiers, and how they interact with negation and logical operators. It should be eventually obvious to you that negation "inverts" quantifiers. Learn at least a little bit how to work with naive set theory: union, intersection, etc. Look up what the "common" sets (integers, rationals, reals, complex) are and how they relate with each other.

And finally, try to get a feel for how proofs work. That's going to be important, even for the type of math you need for computer science.

Good luck!

--- [0] https://en.wikipedia.org/wiki/Mathematical_maturity

Re: Beej's Guide to Learning Computer Science

#27
post #26
post #5

Most reputable CS courses will have one or two math subjects (often called "Discrete Mathematics" or some variation). Does anyone have any advice on tackling subjects like these for someone who hasn't done any math since high school more than a decade ago (and has forgotten it)?

> one or two math subjects Only one or two? :) It's not easy as an adult but it's definitely doable, don't get discouraged. The main hurdle isn't knowledge of specific topics, most undergraduate courses assume little to no previous baggage, i'd say it's more the lack of "mathematical maturity"[0], or the ability to "bridge" between the formal language of math and the intuitive "what we're doing here". When you're wri…

My university offered the math classes in either CS or Math departments. I always chose the math department. Better teachers and far more interesting professors (as people)

Re: Beej's Guide to Learning Computer Science

#28
post #5

Most reputable CS courses will have one or two math subjects (often called "Discrete Mathematics" or some variation). Does anyone have any advice on tackling subjects like these for someone who hasn't done any math since high school more than a decade ago (and has forgotten it)?

https://www.mathacademy.com/ is a great combination of structured learning across an incremental skill tree with practise problems to prove to yourself that you understand. It’s a big commitment but helped me go from “hasn’t done any math for a while and probably missed some basics” to much more comfortable. You can do the self-test to pick a starting level and work up from there.

As with many things you basically have to sit down and do the work, though, you’re not going to get better just by inhaling books and videos. MA isn’t a fun/gamified learning platform like Duolingo, the ‘fun’ comes from putting the work in and seeing yourself improve. For me it went from a grind initially to something I enjoyed doing.

https://www.geogebra.org/ is also worth exploring for its novel visual approach, but is much more rudimentary, less challenging, and less deep than MA.

Re: Beej's Guide to Learning Computer Science

#29
I did Beej's Guide to Network Programming and it was fantastic, I learnt a lot, and it was easy enough that I was able to do it in Rust. I'm sure this one is as good as all the others.

Point 7.5 of this guide reminds me of the Einstellung effect, I built my own "pomodoro" timer with notifications saying "go stretch" or "go drink water" (https://github.com/reciperium/temporis in case someone is interested)

Re: Beej's Guide to Learning Computer Science

#30
post #26

Earlier quoted context omitted.

> one or two math subjects Only one or two? :) It's not easy as an adult but it's definitely doable, don't get discouraged. The main hurdle isn't knowledge of specific topics, most undergraduate courses assume little to no previous baggage, i'd say it's more the lack of "mathematical maturity"[0], or the ability to "bridge" between the formal language of math and the intuitive "what we're doing here". When you're wri…

My university offered the math classes in either CS or Math departments. I always chose the math department. Better teachers and far more interesting professors (as people)

I have a degree in CS and I got a lot from it, so I'm absolutely not going to bad mouth CS, but I have the feeling that it's possible to just get a piece of paper having learned little to nothing in a way that couldn't happen with Math or Physics.

Obviously lots of great people have CS backgrounds, but it also feels like "how did this idiot get a degree" happens far more frequently for CS than Math. It's not like everyone coming out of a Math degree is automatically a genius, but they set the bar higher and as a result math classes "feel" better.

Post reply on HN