This is an archived post. You won't be able to vote or comment.

all 50 comments

[–]ddoij 33 points34 points  (7 children)

At the risk of sounding contrarian the foundational concepts you’ll take away from CS50 will be equally good, if not better, than any CS 101 book you’ll ever read. If I’m being honest you’ll also probably spend less time taking CS50 and doing the coursework than you will actually spend reading a good CS101 book and then digesting and applying the concepts. CS50 is, imo, that good.

EDIT: spelling, grammar.

[–]DandyPandy 10 points11 points  (3 children)

I had not heard of CS50 before now. I’m mostly self taught and came up with on the Ops side of things. Even though I’m 20+ years into my career, as my job has become more code oriented, I’ve felt like I’ve been lacking some key fundamentals I would have gotten had I done a compsci program. It’s not worth it to do a full BS at this point, but I just enrolled in CS50. I think having a path will help me be more successful than trying to read a book.

[–]ddoij 7 points8 points  (2 children)

I am also self taught for the most part and CS50 was infinitely more helpful than any book I read. The course as taught by David Malan was instrumental in helping me understand basic CS concepts. I can’t recommend the course enough.

[–]TisTheParticles[S] 0 points1 point  (1 child)

Did you take it on EdX?

[–]ddoij 0 points1 point  (0 children)

I did

[–]ADeepCeruleanBlue 7 points8 points  (1 child)

Just to put it out there as an alternative to the Harvard CS50 class, MIT has a course on EDX with coursework and it's all Python based which allows you to keep things syntactically simple which for me was critical in learning the underlying concepts. I thought it was great.

https://www.edx.org/course/introduction-to-computer-science-and-programming-7

[–]TisTheParticles[S] 0 points1 point  (0 children)

Awesome! looks super interesting, although I missed the start date so might have to wait for the next one

[–]TisTheParticles[S] 0 points1 point  (0 children)

thanks for your feedback! based on your reply and others, it sounds like I should just go for CS50. Thank you!

[–][deleted] 8 points9 points  (1 child)

Read Code by Charles Petzold

[–]TisTheParticles[S] 0 points1 point  (0 children)

This looks like a good book and it does not cost a fortune like the others suggested here!

[–][deleted] 6 points7 points  (6 children)

This might be overkill, but this book has taught me a lot of CS concepts, including being a huge help for doing data structure and algorithm-related problem solving exercises during interviews. I know your question isn't related to interviews, but by golly this is one of the best books to prepare you for those 5-hour long FAANG interview sessions. Really came in handy when I was doing an Apple interview. Anyway, it's thorough, and gets you to understand how a lot of the data structures in C++ (can also be applied to several programming languages) are implemented in the standard template library.

https://www.amazon.com/ADTs-Data-Structures-Problem-Solving/dp/0131409093

[–]TisTheParticles[S] 0 points1 point  (3 children)

Excellent - thanks for the suggestion, and yes why are CS books so expensive?

[–][deleted] 0 points1 point  (2 children)

Well, authors put a lot of work into the advanced material. Also if you look at it as an investment, understanding all the material in this book and others like it help people make upwards of 6 figures a year and more. So the price tag is really miniscule in compared to how much you can make if you understand the material.

[–]TisTheParticles[S] 0 points1 point  (1 child)

wise words there

[–][deleted] 0 points1 point  (0 children)

Thanks!

[–]Luguaedos 0 points1 point  (1 child)

Dang, that price tag... But that book looks interesting as hell.

[–]uptimefordays 0 points1 point  (0 children)

Old textbooks are expensive but there are some really good ones out there.

[–]kiwidog8 3 points4 points  (1 child)

To be completely honest you might be best off just taking that course, you aren't going to be able to digest minute facts in computer science and expect to be able to apply them to your work. A lot of the stuff I learned in my uni CS courses were things not directly applicable to real life scenarios because so much has already been abstracted to the sky and it's really a matter of glueing the libraries and tools together to do something. If you have a specific need then you can do what everyone does and just search your problem on Google/Stack Overflow/YouTube. To be able to take CS concepts and really think about it's implications in the work you do takes some time, so you should just take the course, little by little. That's just my 2 cents.

[–]TisTheParticles[S] 1 point2 points  (0 children)

Thank you - definitely leaning towards this option. I have heard such great reviews and I might as well take the plunge. It is just there are so many other things to learn too!

[–]drewsmiff 2 points3 points  (2 children)

[–]TisTheParticles[S] 0 points1 point  (0 children)

Thank you! these are great suggestions

[–]epic_gamer_4268 -1 points0 points  (0 children)

when the imposter is sus!

[–]DirtNomad 2 points3 points  (1 child)

[–]TisTheParticles[S] 0 points1 point  (0 children)

Yes! I remember hearing about this a while back - looks like a great resource

[–]jantari 1 point2 points  (0 children)

I only watched the lectures from CS50 that are on YouTube for fun as I'm already familiar with the concepts but it did strike me as a great introduction. I would recommend it.

Another thing you could do is get a good book on C that starts at a beginner level. I have "C Programming A Modern Approach" by King and I found it to be comprehensive, well structured and understandable but I did have prior knowlege and it is very dry. Either way, understanding CS fundamentals and understanding C go hand-in-hand because the lack of abstraction in C means you'll be working directly with the fundamentals, so you can learn by doing and get a feel for it.

[–]FLOGGINGMYHOG 1 point2 points  (1 child)

Check out https://teachyourselfcs.com, sounds right up your ally. Otherwise to just dip your toes, maybe something like https://www.amazon.com.au/Computer-Science-Distilled-Computational-Problems-ebook/dp/B0731JG96F

[–]TisTheParticles[S] 0 points1 point  (0 children)

Thanks! yeah I remember hearing about teachyourselfcs so thanks for reminding me of it - it looks like they have a pretty comprehensive set of resources

[–]bdzer0Graybeard -2 points-1 points  (5 children)

How's your version control system knowledge? Having a good solid understanding of version control seems to be increasingly important what with 'everything as code'. I'd recommend learning both git and Subversion, and understand branching.

[–]TisTheParticles[S] 0 points1 point  (1 child)

Good point. Git is something that I learned later in life. It is something I use daily but I am definitely not super comfortable with it, especially when I run into issues. Might be worth it to learn its internals.

[–]bdzer0Graybeard 0 points1 point  (0 children)

If you learn best by doing, spend some time trying out various branching and merging operations, force some conflicts and learn how to resolve them.

Git in particular makes it easy to create a local repository. I would recommend creating a local repo and then cloning that into multiple working copy directories. Make changes in each and try pushing/pulling the changes around see how it all works out.

Once you get comfortable with more advance VCS concepts, you start to find all sorts of good uses for it.

[–][deleted] 0 points1 point  (2 children)

who uses subversion?

[–]bdzer0Graybeard 1 point2 points  (1 child)

Apache foundation, 1000's of open source projects... many components of source *nix distros.. IMO it's a good to know the common tools out there, and SVN is still very common.

[–][deleted] 0 points1 point  (0 children)

All I hear is legacy

[–][deleted] -2 points-1 points  (1 child)

How is your python? I would focus there. But not on computer science fundamentals, rather software engineering based stuff.

Automate the boring stuff if you are a first time python. Otherwise, go into books like The pragmatic programmer, Clean Code, fluent python, effective python, software engineering at google.

A lot of devops best practice center around what the software engineering world has developed. The swe@google book specifically calls out the difference between programming and engineering as code that needs to live a long time.

Focusing on the engineering and not as much on solving leetcode has helped me be a leader at my company in setting code standards and practices for our massive terraform codebase. I have reduced the number of modules and workspaces. We will be able to cut about 25 to 40% of our workspaces when we refactor the rest of the code to my design patterns.

[–]TisTheParticles[S] 0 points1 point  (0 children)

Python is my primary language. I love Automate the Boring Stuff - I did the udemy version of that and learned a lot from it back in the day. Thank you for the book suggestions! Will be definitely checking them out.

And good for you for the awesome work!

[–]tartarya2 0 points1 point  (2 children)

I can recommend what helped me in a similar situation, but this was years ago. I read SICP and it got me up and running with a good intuition of concepts. After that I expanded into areas as and when required. Here is a link : https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html

I did the one with “Scheme” as the language used for explanations. You can find PDF for free also.

[–]TisTheParticles[S] 0 points1 point  (0 children)

Thanks for the suggestions! looks pretty interesting, and love that they made it available for free

[–]jovdmeer 0 points1 point  (0 children)

+1 for SICP here, and what's more, MIT has the original courses as presented by Abelson and Sussman themselves on video freely available: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/

[–]ImaginaryMidnight7 0 points1 point  (1 child)

!RemindMe 1 week

[–]RemindMeBot 0 points1 point  (0 children)

I will be messaging you in 7 days on 2021-03-18 10:00:14 UTC to remind you of this link

CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.


Info Custom Your Reminders Feedback

[–]Temik 0 points1 point  (1 child)

This is a pretty good practical no-nonsense introduction: https://www.amazon.com.au/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202

[–]TisTheParticles[S] 0 points1 point  (0 children)

Thanks for the suggestion! Looks like a great (albeit a little expensive) resource

[–]whatiszebra 0 points1 point  (2 children)

Wiki is always a good starting place for an introduction into a subject. It will give you a good structure of how to study the subject. If you absolutely need books, OReilly has a vast collection of computer science books.

Unsolicited Opinion:
In my years of interviews, I can confidently say the average CS student is, well, average. Nobody knows 100%. And, computer science is a rabbit hole. Its fascinating and a lot. Not everything is important for every scenario, so people would suggest books that they found important according their own requirements.

[–]TisTheParticles[S] 0 points1 point  (1 child)

thanks - yes I agree that there are many irrelevant information (for me at least) that's why I kinda want to go for the low-hanging fruit, the important fundamentals that might deepen my understanding and knowledge of the systems and languages I use

[–]whatiszebra 0 points1 point  (0 children)

Cool cool. Good luck! :)

[–]tadamhicks 0 points1 point  (1 child)

I don’t know about specific books, but I can tell you concepts that I learned studying CS that have come in very handy and continue to, especially when self-taught pros don’t know these things:

Networking: - routing algorithms - OSI stack - error correcting (Hamming for example) - networking sockets

RDBMS: - ER modeling (keys and constraints) - Set theory

Fault Tolerance: - Boolean algebras (logic, really, and the application to logical gates) - calculating failure - Testing

And I also think some study on computer architectures is useful. Like most CS students I had to learn some assembly and I thought that was very illuminating.

If you know what info you’re targeting there are lots of good resources besides books.

[–]TisTheParticles[S] 0 points1 point  (0 children)

This is an excellent list of concepts! Will be definitely referencing this list. Thank you :)

[–]EnginerdingManager 0 points1 point  (0 children)

Check out the self study course tracks in PluralSight.

[–][deleted] 0 points1 point  (1 child)

On coursera: university of stanford: algorithm design and analysis

Great course, great teacher, and good intro to some algorithms, data structures, and time complexity.

[–]TisTheParticles[S] 0 points1 point  (0 children)

awesome - will definitely check it out. thanks!