Live data from Hacker News

Ask HN: How do I choose the right resource to learn CS fundamentals?

news.ycombinator.com

61–70 of 93 posts

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#61
Given the vastness of the field my advice would be to narrow your focus. And specifically, focus on an area that will hold your interest and seek out the best resources in that area. When I was younger I really wanted to make computer games and picked up Andre LaMothe's Teach Yourself Game Programming. I wound up reading it cover to cover and experimenting with many of the concepts. My career wound up going in a completely different direction but I learned more from that stint of sustained interest in a good book, than many of my university classes.

Second advice is that once you've done a rote exercise find some way to push the boundaries of it. I've found that anything I can do to extend or customize the example helps engage my brain with the material and often leads to learning new things.

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#62
post #53

Earlier quoted context omitted.

TAoCP is a terrible resource for a beginner.

Plus, Knuth, despite his accomplishments, is a terrible computer scientist and programmer in some capacities. TeX must be the most odious language not designed as a deliberate joke.

TeX is not a "language"; it's just a tool for typesetting when you want to go the last mile of achieving book-quality printing. The fact that it turns out to be possible to (ab)use its macros (originally designed merely to save the user some typing effort) to do "programming" shows only that it's easy for things to become "accidentally Turing complete" [1], and the cleverness/perversity of its user community.

> TeX was designed for typesetting, not for programming; so it is at best “weird” when considered as a programming language. — DEK, Digital Typography, page 235

> In some sense I put in many of TeX's programming features only after kicking and screaming. — DEK, Digital Typography, page 648

> So TeX is a programming language but I had to put in those features kicking and screaming. […] In a way I resent having every language be universal because they’ll be universal in a different way. […] I was really thinking of TeX as something that the more programming it had in it, the less it was doing its real mission of typesetting. When I put in the calculation of prime numbers into the TeX manual I was not thinking of this as the way to use TeX. I was thinking, “Oh, by the way, look at this: dogs can stand on their hind legs and TeX can calculate prime numbers.” — DEK, interviewed in Peter Seibel's Coders at Work

> Michael Plass, who was Don's student and worked with Don on TeX, told me once that "Don tried very hard not to make TeX a programming language. Unfortunately, he didn't succeed." — Norman Ramsey

I've written more about this verbosely elsewhere [2], but in any case even if TeX had been intentionally designed from the start for public consumption (rather than for just him and his secretary, as was his original intention), it hardly justifies something like "terrible computer scientist" — TeX/MF/CM was just his side-project; the computer science is different.

[1]: (Accidentally Turing-complete) https://www.gwern.net/Turing-complete http://beza1e1.tuxen.de/articles/accidentally_turing_complet... https://aphyr.com/posts/342-typing-the-technical-interview https://www.youtube.com/watch?v=uNjxe8ShM-8

[2]: https://tex.stackexchange.com/a/384881/48 , https://cstheory.stackexchange.com/a/40282/115

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#63
I had the exact same problem as you — and really, it’s not a problem at all! It’s one of the greatest things the internet’s given us.

Just remember that material is material. Fundamentally, all of these courses are pointing you towards the same basic core of knowledge, with only minor stylistic differences. I like using multiple sources, like you do. Just stick with one good one at first, and then once you finish it you’ll be able to go through five more in the same time, because of the overlap.

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#64
It is valuable to get to know different approaches for the same algorithm from different sources. In general if you could learn about the same topic from 5 different sources it would be awesome.

That said, how much time do you want to spend on it? If you don't have all life to do it, pick 2 and stick to it. Just random ... MIT and Stanford, or Princeton and CMU, in the end there should be no fundamental difference. Stuff that you listed in any way will get you far enough, two approaches will be great.

In the end if you want to be realistic about your time, role the dice for one of those... I did not do any of those, I did small technical university in eastern Europe. I have well paying job in western Europe and have seen people who finished better universities that know less than me.

You know that 80% of the effects come from 20% of causes? Don't try to over optimize... No one will give a damn if you are self learning and you did MIT course over the internet. You are not getting MIT degree anyway. That said, I skimmed through some of MIT and Princeton lectures as well, and you know what? Those were not magically better than the ones from my small uni in eastern Europe... But you know if you have MIT degree it is still worth more just like Adidas shoes you walk with them the same as other sneakers...

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#65

Earlier quoted context omitted.

I wouldn't argue against your experience. Or that people don't use Knuth much or at all in their work. Most people don't use textbooks much or at all in their work. Per the question, the context of my answer is learning CS and in particular self-directed learning. If the question was about resources for work, I'd probably say "StackOverflow" and be done with it.

I would argue that Knuth is particularly bad for _learning_ CS. (Based on my experience as CS undergrad and grad student later)

Knuth being impenetrable after six year or so years of formal study using other materials, doesn't seem like a strong case for those other materials. It smells more like six hours in the lab saving an hour in the library.

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#66
You might want to look at Scott Young's MIT Challenge page. He set himself the task of working through "the entire 4-year MIT curriculum for computer science" in 12 months using only online resources. He completed the challenge in 2012 and then wrote a book titled "Ultralearning", which describes methods of learning valuable skills without spending a fortune at an expensive University.

His MIT Challenge page: https://www.scotthyoung.com/blog/myprojects/mit-challenge-2/

His Ultralearning page: https://www.scotthyoung.com/blog/ultralearning/

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#67
post #2

I really recommend Lynda ( now linkedin learning) not free (but remaking accounts works ofcourse), unless you signup via new york or LA library. also khan academy: information theory is really great: https://www.khanacademy.org/computing/computer-science

Any specific courses that you'd recommend on LinkedIn Learning?

I'd recommend their course Programming foundations: Fundamentals. They update this one yearly I believe

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#68
You need to narrow down what your goal is.

Trying to learn computer science is like trying to learn sports. Swimming and tennis have very little in common and you can spend years trying every sport and never becoming good at any of them (what traditional cs education does)

If your goal is to get a job, your best bet is web development or mobile dev.

The big picture is we have CPUs that have instructions. Instructions boil down to moving data to/from someplace and manipulation of data.

Moving is how monitors display stuff, data gets stored on disk etc. Moving is how a program gets loaded and executed.

Manipulation is how you get math operations. Programming boils down to math operations and conditionals (if this, then that, else something else)

Math operations have a few basic types for performance reasons - floats, ints, etc.

Because math operations on the CPU have types, programming languages have types. Because CPUs have conditional operations, programming languages have operations. See the pattern? Programming languages are just conveniences on top of the language the CPU provides (called assembly).

The most popular 'low level' language is C. C gives you functions and the smallest set of data types you can get away with. The big deal here is organizing code into functions. Functions allow re-use and programming is all about doing the least amount of work possible by the programmer to achieve a task, in the shortest amount of time and memory use possible.

The study of shortest amount of code to achieve the fastest result with the least amount of memory use is algorithms.

To achieve fast results with least memory used, you want a language that gives you access to memory manipulation directly. This is why C is still king for anything performance critical.

If you don't care for performance much, Java the language is king of corporate software and all Android software too. It handles memory for you and your types are clever - you don't need to say how big an array you want when creating it, you just create one and it gets magically re-sized behind the scenes for you as you add elements in. All modern languages have clever types and ways of helping manage memory for you. This is to make programming more newbie-friendly and theoretically to lower the number of bugs, at the cost of performance and memory use.

Phew, so we have CPUs, C and Java. Now where do we typically store data and how do we display it?

Data is stored in databases. Databases mere mortals use are all SQL databases - the most popular and robust being Postgres. Learn what an index is and why it helps stuff run faster. Learn joins and one-to-many and many-to-many. Build a photo-sharing site with user registration - this'll cover needing to know all the basics.

Oh, to build the site, you'll need to display it. You have 3 options - web, ios or android. I'd recommend web because it's the easiest of the 3 and there are tons of excellent resources to learn from.

It is extremely easy to get bogged down in libraries such as 'react' and all the rest. It is extremely easy to get bogged down in new Javascript features. Stick with the basics! Stick with simple html/css and flexbox for layout. Use node with the most popular and simple web framework as a web server. Use the simplest library to talk to the database and write SQL, don't use ORM because you need to learn SQL and'll be around for the next 50 years - your ORM won't.

Phew, you've spent about 6 months and have built a photo sharing site. You know html/css, some javascript, a web server framework, how to store stuff in a database.

You're another 3-6 months away from getting a job as a web developer. You'll need to learn react or whatever other junk framework of the year is most popular these days. You'll then be plunged into a world of mediocre software and writing code for projects that make no sense, with deadlines that make even less sense. There'll be a lot of meetings, incompetence and your posture will suffer.

The pay is good however, and it should double within the first 2-5 years if not triple. Switch jobs every year and try to do contract work as soon as possible - it pays way better.

This is the outline for going from 0 to hero, if getting a job is your goal. If you don't want to end up working on projects of questionable importance for the rest of your career and you want to build software that will drive the next car, operate the next robot, help us go to Mars etc - you should simply attend a good University. There is no shortcut and you'll avoid wasting hundreds if not thousands of hours chasing your own tail reading tutorials written by people who learned programming 2 years ago themselves.

You'll meet other smart people and you may even want to get a Masters and a PhD. Oh, you may get hired by a top company if you're good and the pay there is great, and that's where you'll get to do great work. They care about degrees and which University you went to, don't believe anyone who says otherwise.

Self-learning CS is only for the crazy ones, or those who want a high paying job quickly, are smart and don't care what they work on.

My 2 cents of course, having gone the self-learning route myself many years ago :)

Oh, one last thing - if you go the self-learning route, you need a friend who's a good established programmer to answer your questions for 5-10 min everyday. I don't know if there are services online that do this or if you know somebody but this is absolutely critical to avoid wasting your time without knowing it, which is inevitable but you want to minimize it.

Now that I think of it, if you go to University, you absolutely want a real programmer too, to know which courses to simply get a passing grade on, and which to focus on, depending on your ambitions.

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#69
post #57

Earlier quoted context omitted.

+10 for this. I will elaborate further, hoping this gives you a good starting template. - Programming: Learn two languages: Python and C - Algorithms and Data Structures: Implement each data structure in the two languages above and implement a few algorithms of each type. - Computer Architecture: For the referred excellent book, implement all assignments in any one language. Go head and burn the design on an FPGA, ge…

How would you compare Database Internals to Designing Data Intensive Applications? [1] https://www.amazon.com/Designing-Data-Intensive-Applications...

The book you refer to is really kind of system design for applications which handle large data volumes. OTOH, the book I refer to talks about how database software can be developed from ground up thus helping you understand the internals.

Re: Ask HN: How do I choose the right resource to learn CS fundamentals?

#70
post #56
post #3

Check out https://www.teachyourselfcs.com

How important is the programming section for a professional developer?

The most important to simply get started, the others make you a better developer.
Post reply on HN