Computer Science Resources

What are some of the great computer science resources for someone who is fairly experienced with programming?

I have been programming for over a year and I've also read quite a lot of articles about it too. However it is getting really hard to dig one out for a long time. All I see whenever I search for resources is meant for absolute beginners.

I want resources covering certain topic in depth like

  • Programming paradigms
  • Dynamic programming
  • Theory of computation and computational science
  • Algorithm and data structures
  • Performance analysis and optimization
  • Basics of AI

and many more!

But there are limited resources available which actually cover all the topics in depth (I want very rigorous resources equivalent to actual university semester).

Please provide me some good resources which cover the topics. It can be any type of resource including websites and books.

#ComputerScience #Algorithm #Resources

Note by Arulx Z
5 years, 6 months ago

No vote yet
1 vote

  Easy Math Editor

This discussion board is a place to discuss our Daily Challenges and the math and science related to those challenges. Explanations are more than just a solution — they should explain the steps and thinking strategies that you used to obtain the solution. Comments should further the discussion of math and science.

When posting on Brilliant:

  • Use the emojis to react to an explanation, whether you're congratulating a job well done , or just really confused .
  • Ask specific questions about the challenge or the steps in somebody's explanation. Well-posed questions can add a lot to the discussion, but posting "I don't understand!" doesn't help anyone.
  • Try to contribute something new to the discussion, whether it is an extension, generalization or other idea related to the challenge.
  • Stay on topic — we're all here to learn more about math and science, not to hear about your favorite get-rich-quick scheme or current world events.

MarkdownAppears as
*italics* or _italics_ italics
**bold** or __bold__ bold

- bulleted
- list

  • bulleted
  • list

1. numbered
2. list

  1. numbered
  2. list
Note: you must add a full line of space before and after lists for them to show up correctly
paragraph 1

paragraph 2

paragraph 1

paragraph 2

[example link](https://brilliant.org)example link
> This is a quote
This is a quote
    # I indented these lines
    # 4 spaces, and now they show
    # up as a code block.

    print "hello world"
# I indented these lines
# 4 spaces, and now they show
# up as a code block.

print "hello world"
MathAppears as
Remember to wrap math in \( ... \) or \[ ... \] to ensure proper formatting.
2 \times 3 2×3 2 \times 3
2^{34} 234 2^{34}
a_{i-1} ai1 a_{i-1}
\frac{2}{3} 23 \frac{2}{3}
\sqrt{2} 2 \sqrt{2}
\sum_{i=1}^3 i=13 \sum_{i=1}^3
\sin \theta sinθ \sin \theta
\boxed{123} 123 \boxed{123}

Comments

Algorithm Design and General:

  1. Introduction to Algorithms, Cormen et al (Focus on rigour)
  2. Algorithms Unlocked, Cormen (Slightly informal)
  3. Algorithm Design Manual, Steven S Skiena (Focus on Pragmatic Examples)
  4. Competitive Programming, Halim and Felix (Focus on competitive programming)
  5. Algorithms, by S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani
  6. The Art of Computer Programming, Donald Knuth (Known for being hard)
  7. Clever Algorithms: Nature Inspired Programming Recipes (Metaheuristic Algorithms)

Theoretical Computer Science:

  1. Computational Complexity: A Modern Approach, Barak and Arora
  2. Introduction to Theoretical Computer Science, Udacity (Informal)
  3. Automata Theory, Coursera

Artificial Intelligence:

  1. Machine Learning, Coursera
  2. Artificial Intelligence: A Modern Approach, Peter Norvig

Lower Level Understanding of Programming:

  1. Intro to Parallel Programming: Using CUDA to Harness the Power of GPUs, Udacity
  2. Structure and Interpretation of Computer Programs

Information Theory and Cryptography:

  1. Information and Entropy, Penfield
  2. Disappearing Cryptography: Information Hiding : Steganography & Watermarking, by Peter Wayner
  3. Cryptography I, Coursera

Discrete Optimization:

  1. Discrete Optimization, Coursera (Focus on Theory)
  2. Modelling Discrete Optimization, Coursera (Focus on Problem Solving)

Functional Programming:

  1. Learn You a Haskell (Informal)
  2. Haskell Wikibook

List of Miscellaneous Free Programming Books: vhf/free-programming-books

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

I would like to extend your list by three very different but very useful (especially at the beginning) books:

  1. Practical Common Lisp - LISP is a perfect langugage (MIT use one of them (Scheme) as start language) for learn meta-programming

  2. "Discrete Mathematics and Combinatorics" James A. Anderson - Fundamental book about Discrete Mathematics. Starts from logic & proofs and finishs with Theory of Information and Number Theory.

  3. Mathematics for Computer Science - free book from MIT (you can easly google and download it) as a perfect guide for Mathematics that required in Computer Science. Also "Concrete Mathematics" is also very-very good.

Vladyslav Chikov - 5 years, 6 months ago

Anything for meta-programming?

Pranjal Jain - 5 years, 6 months ago

Log in to reply

Seems like I finally have to learn ((((((((((((((((((((LISP)))))))))))))))))))) [if you know what I'm saying].

Arulx Z - 5 years, 6 months ago

Log in to reply

@Arulx Z Lots of Infuriating and Silly Parantheses

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

@Agnishom Chattopadhyay Haha that makes sense. LISP.

Arulx Z - 5 years, 6 months ago

Log in to reply

@Arulx Z Why would you learn LISP?

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

@Agnishom Chattopadhyay For meta-programming. I really love the concept of meta-programming and I want to integrate it into AI.

Arulx Z - 5 years, 6 months ago

Log in to reply

@Arulx Z I am not sure why Lisp is necessy, although I have heard that it is. Haskell is another beautiful language with cleaner syntax.

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

@Agnishom Chattopadhyay Thanks for the suggestion I'll surely check out Haskell.

Arulx Z - 5 years, 6 months ago

Log in to reply

@Arulx Z You can gain more from lisp than haskell. I promise you. But you should learn both.

qin p - 5 years, 6 months ago

Log in to reply

@Qin P May I ask why?

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

@Agnishom Chattopadhyay Sure! Start with why. I just want to point out a very special thing in lisp -- the concept that CODE IS DATA.

The deeper you understand abstraction and combination, the deeper you understanding programming. Functional programming is very helpful in developing you intuition on abstraction and combination. Haskell and lisp are both functional programming language, but haskell is more pure functional than lisp. More importantly, you have to think about TYPE in haskell, which is very helpful for a deeper understanding about writing well combination program.

I point out the advantanges of haskell to support my statement "you can gain more from lisp than haskell. I promise you", which may be strange. But this is my way to recommend. I said A is better than B not because I know a lot of advantages about A, but because I know both the advantages of A and B and on your situation I prefer A than B.

You should learn both. If you have to pick one, pick lisp.

Books to start (Lisp) :

  • The Little Schemer
  • The Seasoned Schemer
  • SICP

qin p - 5 years, 6 months ago

Log in to reply

@Qin P By the 'Code is Data' motto, are you pointing out the possibility of higher order functions?

Actually, I have some knowledge of haskell and I did like the concept of type and pure functionalism. May be LISP is better in this case, I do not know.

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

@Agnishom Chattopadhyay 'Code is Data' is nothing about higher order functions. It means that lisp code is written in its data structure. In lisp, You can learn how to write a interpreter more easily.

'Code is Data' also provide a syntax level abstraction. You could search 'lisp macro' for more information.

qin p - 5 years, 6 months ago

Log in to reply

@Qin P I guess that will be valuable. Thanks!

Agnishom Chattopadhyay - 5 years, 6 months ago

I had to look that term up. I have no idea about this one.

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

@Agnishom Chattopadhyay Me too. But meta-programming seems really interesting. It might actually be great if such things are implemented in AI programs/bots.

Arulx Z - 5 years, 6 months ago

The links in "Performance Optimization #1" and "Functional Programming #1" are broken.

By the way, why no SICP in the list ?

Prasun Biswas - 5 years, 6 months ago

Log in to reply

Fixed.

Actually, I came to know about that book only half an hour ago (what a coincidence!). I added it and a several others.

Agnishom Chattopadhyay - 5 years, 6 months ago

Thanks for your reply!

Arulx Z - 5 years, 6 months ago

Log in to reply

Please check this out @Arulx Z

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

@Agnishom Chattopadhyay Whoa! Thanks for such a nice and comprehensive list! I'm sure it will help me (and other) a lot!

Arulx Z - 5 years, 6 months ago

Do u know programming on java(specifically netbeans)?

Aditya Kumar - 5 years, 6 months ago

Log in to reply

NetBeans is a IDE right? How does that matter?

Arulx Z - 5 years, 6 months ago

This thread has a lot of valuable information. Agnishom, if you don't mind, can I/you create a wiki with this info so that this is available to a wider audience?

Arulx Z - 5 years, 2 months ago

Log in to reply

Yes, that is a pretty good idea

Agnishom Chattopadhyay - 5 years, 2 months ago

Log in to reply

@Agnishom Chattopadhyay I have started a wiki here. Contact me on Slack for collaborating.

Arulx Z - 5 years, 2 months ago

Sounds like you're looking for a masters degree in cs.. try looking up university courses which post lecture material online.. then have yourself a blast (:

Arjun Achatz - 5 years, 6 months ago

What kind of performance analysis? Is this about hardware?

Agnishom Chattopadhyay - 5 years, 6 months ago

Log in to reply

I mean code optimization (like reducing complexity and memory usage etc.) by performance analysis so it's about the software rather than hardware. I'm sorry for ambiguity.

Arulx Z - 5 years, 6 months ago

@Agnishom Chattopadhyay @Arulx Z Sorry for going off topic, but I too am learning Programming (in C++) for the first time. I've studied up to Arrays and would love to go beyond on my own; my school doesn't really teach a lot in depth. I'm particularly interested in learning Dynamic Programming. Any help offered would be greatly appreciated. Thanks in advance!

User 123 - 5 years, 6 months ago

Log in to reply

There are many resources which are available online. I recommend reading them, so you are clear about the basics.

Dynamic Programming and Optimal Control by Dimitri P. Bertsekas is a nice book about dynamic programming (suggested by Abhishek Sinha in this thread). I recommend reading it and be sure to keep on practicing to improve.

Don't worry if you are being off topic. In fact, it would be nice if anyone in need of clarification / resource request (which is related CS) asks their questions here.

Arulx Z - 5 years, 6 months ago

Log in to reply

Ahh, don't you think it is too advanced to begin on DP. @Ishan Dasgupta Samarendra , i would recommend using the usual CLRS book.

Beakal Tiliksew - 5 years, 4 months ago

Log in to reply

Yeah, ofcourse that too :)

Beakal Tiliksew - 5 years, 4 months ago

Have you tried Codecademy ?

Vansh Mehta - 5 years, 6 months ago

Log in to reply

Thanks for your suggestion. However I did try Codecademy. However, it just provides resources to learn a language and provides no support on how write elegant and efficient code.

Arulx Z - 5 years, 6 months ago

Can u guys help me learning java?.I searched so many tutorials bt I didnt get me helped following those.so pls do help.

MD Sohail - 5 years, 6 months ago

Log in to reply

I'll be more than happy to help. What tutorials did you try? Can you elaborate on what problems you are having?

I suggest CodeCademy for an interactive tutorial.

Agnishom Chattopadhyay - 5 years, 6 months ago

Check out courses on MITOCW/edX too. I'm not sure if they teach java (they most probably have Python). However, the code writing skills matter not the language. Hence it would be a valuable experience.

Arulx Z - 5 years, 6 months ago

Hey @Agnishom Chattopadhyay @Arulx Z

How can I improve my algorithm writing skill?Any suggestion?Any good website or book?

In short, how can I become a good programmer?

Thanks!

PS I am a mere beginner.

Harsh Shrivastava - 5 years, 2 months ago

Log in to reply

Agnishom is a better programmer and he can definitely help you more but the key to improving is practicing, experimenting and figuring out algorithms on your own. That's how experts are made. Apart from Brilliant, also check out websites like CodeChef, HackerRank, HackerEarth, SPOJ, Project Euler etc.

Arulx Z - 5 years, 2 months ago

Log in to reply

improving is practicing, experimenting and figuring out algorithms on your own.

yess!!

I hear and I forget. I see and I remember. I do and I understand. -Confucious

Agnishom Chattopadhyay - 5 years, 2 months ago

I'll reply to the other question here too:

I did not have a lot of things to do when I was a child. I had books and a computer. I was not a very social person and did not go out to play with my neighbours because I was not very good friends with them. My dad was a scientist who used to do numerical simulations on computers. Hence, I was attracted to computers because of this attraction to the great mystery of numerical simulations. Although, I had not been good with algorithms for that long, but I have been coding since 7 or 8.

I understand that there is a lot of pressure for the average Indian teenager. This is quite frustrating to me too. I am going to college this fall.

You'll find a lot of resources in one of the highest voted comments in this thread including algorithm resources. Can you find it?

The best way to improve your algorithmic skills is to solve algorithmic problems in the Brilliant Computer Science sections, Project Euler, CodeChef, USACO training pages, sphere online Judge, codeforce, and many more. Sometimes having a nice programming project of your own also helps. Common examples include your own games, your own webapp or a website or things like that. I did that a lot too.

Of course, I still have a long way to go and improve.

Agnishom Chattopadhyay - 5 years, 2 months ago

Log in to reply

Thanks for reply, Agnishom and Arul.

BTW can knowing more programming languages help me ?

Harsh Shrivastava - 5 years, 2 months ago

Log in to reply

@Harsh Shrivastava Mostly, no. You could call a bird a bird in French, English and Hindi but it is still just a bird.

Sometimes the answer is yes though. You gain something by learning a language which makes you think differently. For example, a procedural programmer could learn something new by learning a functional language.

Agnishom Chattopadhyay - 5 years, 2 months ago

Log in to reply

@Agnishom Chattopadhyay Ohk I know python, will work first on my algorithm writing skills then head for learning new languages.

Thanks!

Harsh Shrivastava - 5 years, 2 months ago

Log in to reply

@Harsh Shrivastava Have fun!

Agnishom Chattopadhyay - 5 years, 2 months ago

Maybe you would like to give it a try at learning some binary exploitation

Daniel Lim - 3 years, 11 months ago

Log in to reply

Yes, binary exploitation is an interesting thing too. But I had very little idea about it when this note was written.

Agnishom Chattopadhyay - 3 years, 11 months ago

Log in to reply

Would be great if we have more resources about this topic here, just like all the really nice wikis about AI and algorithms.

Daniel Lim - 3 years, 11 months ago

Log in to reply

@Daniel Lim Have you been learning about Binary Analysis yourself?

Agnishom Chattopadhyay - 3 years, 11 months ago

Log in to reply

@Agnishom Chattopadhyay Well a little, but there is still a lot to learn.

Daniel Lim - 3 years, 11 months ago

Log in to reply

@Daniel Lim Same here. I had been working on something recently. Can I ask you something related over email or slack, if you do not mind?

Agnishom Chattopadhyay - 3 years, 11 months ago

Log in to reply

@Agnishom Chattopadhyay I guess you can share your email here, because I don't know where to check...

Daniel Lim - 3 years, 11 months ago

Log in to reply

@Daniel Lim Ah, my email is [email protected]. Can I have yours?

Agnishom Chattopadhyay - 3 years, 11 months ago

Log in to reply

@Agnishom Chattopadhyay Did you receive my email? My email is [email protected]

Daniel Lim - 3 years, 11 months ago

Log in to reply

@Daniel Lim yes, I received your email. I shall write back soon.

Agnishom Chattopadhyay - 3 years, 11 months ago
×

Problem Loading...

Note Loading...

Set Loading...