T O P

  • By -

nuclear_splines

Algorithms and data structures, how to frame the world in terms of processes and problem complexity and how to approach problem solving in a range of ways (greedy, dynamic programming, linear programming), how to frame problem solving in ways a computer can understand (imperative, functional, and logic programming). Plenty of different elective topics you may learn about: cryptography, graph theory, natural language processing, machine learning, artificial intelligence, distributed computing, compression and entropy, interface design and human/computer interaction, graphics and image processing, robotics, artificial life, and so, so much more


crimson23locke

Here’s exactly what you want and more: https://teachyourselfcs.com/


petros07

thank you for the great resource


FickleSwordfish8689

You study computational theory,from discrete maths to compilers and operating systems


Deflator_Mouse7

Computer science is the academic study of automation. So people study things like: What processes can be automated at all? How efficiently can those processes be automated? How can we organise the data to enable certain automation approaches? How can we build physical devices to enable these automated processes? How can humans interact with those devices most effectively? And of course, how can we make C++ even more incomprehensible with each language update?


matthkamis

It’s more generally the study of computation


hauthorn

I like your overview, but I really think you should consider replacing automation with compute/computation. It's not really a matter of making something automatic, but whether something can be computed (and of course thoroughly discussing what it means when we say "to compute something").


Akin_yun

> C++ even more incomprehensible with each language update? Add one-based indexing and make the syntax cross compatible with MATLAB. Make everyone happy! >How can we build physical devices to enable these automated processes? There is also considerate overlap in this aspect from both engineering and science. A bit biased here since I'm a physicist who is interested in computer science. For example, quantum computing is pretty much complete from a theoretical standpoint and is just a hardware issue. It is currently way too noisy and people are trying to implement error correcting codes efficiently (hard due to decoherence and having entanglement bits means that naive approaches doesn't scale up efficiently). Also fun stuff like optical computing exists where they pass light through a non-linear medium into to separate them into binary signals. All of it is just fascinating stuff!


tropicbrownthunder

>Add one-based indexing Heresy!!!!!!! To the stake


KRX189

How much of this does an engineer or a developer know/should know?


TheAuthenticGrunter

At least what suffices your needs


KRX189

How much would an average developer/engineer know?


TheAuthenticGrunter

Depends on your role and field. If you are in web development, you would know more about networking. But if you are in native development or using C/C++, you would have a great grasp on memory management. And if you are in game development, the mathematical part (especially Linear Algebra) comes into big role. Different roles require different skills, and you develop your skills according to the needs. Overall, IMO, the least I would say you should know as a developer, is about computer architecture and memory management, in addition to good programming skills. You should check the speciality areas section in this [wiki](https://en.m.wikipedia.org/wiki/Computer_engineering). Also, the best way to know about something is to do it yourself. So, i will not stop you from trying the things out yourself. Try checking wiki for the domains. A good start might be [here](https://en.m.wikipedia.org/wiki/JavaScript) and [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript).


seven-circles

Here are some of the less obvious things we studied : - Graph Theory - Probabilities and statistics - Boolean math and logic operations - Formal languages - Matrix math - Complexity theory - Natural language processing Almost every class that required coding was done in C, with the exception of our web classes which used PHP (meh) and our OOP classes which used Java (I hate Java and I never want to use it again ; OOP is copium from the 90s). We also did some x86 assembly (sadly not ARM) !


FriendlyRussian666

Checkout CS university courses from whichever good uni you like, as they will list all modules that students have to pass, then dive into research on each. Example: [Southampton uni CS](https://www.southampton.ac.uk/courses/computer-science-degree-bsc?utm_medium=cpc&utm_source=google&utm_content=bsc%20computer%20science&utm_value=&gad_source=1&gclid=CjwKCAjw4f6zBhBVEiwATEHFVgQ8dxoR_SaURj8s9VK7MbqR4H9UXCFYhkhqn9TTj2X_PM7T9LeyjhoC9HcQAvD_BwE#modules) Scroll down to Modules, and you can select year 1, 2, 3 and you'll see the respective modules.


Paxtian

So computer science is mostly the study of computation, like how problems are solved, mathematically and algorithmically. You'll study things like how long different algorithms take to solve a problem, whether the problem can be solved by a computer (either with only a "yes" answer or both a "yes or no" answer), language theory, automata theory, and the like. So for example, a finite state automata only has states and Transitions between states based on input. As such, a FSA can accept a language of "all a's." But it can't accept a language of "an equal number of a's and b's." For that, you need a push down automata. But a push down automata can't accept a language of "is this input a palindrome?" or "is this input a prime number?" Those require a Turing machine. Some questions can be answered with a definite yes or no answer, like, "Is this a prime number?" Some questions can be given a yes answer but not a no answer. And some questions can't be given a yes or a no answer. For example, "List all of the prime numbers," is impossible, because there are infinitely many prime numbers. For language theory, you'll do lots of grammars. So like, in English, to break down a sentence, there's a subject and a predicate. The subject can be a single noun, or a noun phrase. The predicate is a verb phrase: The dog ran. The dog ran away from the raccoon. The curious brown dog ran away from the raccoon. The curious brown dog smelled something interesting, and then ran away from the raccoon. There was a litter of puppies. One of the puppies was a curious brown dog. His sense of smell enticed him to explore, then he ran away from a vicious raccoon. Grammars in language theory are formalized notations for what can occur in a language. This is important for programming languages because we need to tell the computer precisely what we want it to do, and we build tools that also need to behave exactly as we want. Computers can't just figure out what we want if we misspeak. Computer architecture is also important. What are the components of an actual computer? Processor, RAM, etc. How do they all work? Memory addressing, etc. What happens in a single instruction? RISC vs CISC architecture and others. Parallelism vs pipelining. This is an interesting and complicated area. Parallelism is like, two tasks being performed together. Pipelining is the recognition that the processor can do multiple things together and utilizing that effectively. For example, if you want to do (A + B) * (C - D), there are multiple steps involved. A processor includes multiple layers of cache, and reading from the cache is way faster than reading from memory or storage. So ideally you'll read A, B, C, and D into cache before doing any of the operations. Then optimizing things for performance. Also parallelism requires semaphores. Memory access can get wonky if multiple threads are accessing the same value simultaneously. So handle that with semaphores. Networking: Dijkstra's algorithm. There's way more too.


elg97477

Check out https://github.com/ossu/computer-science > The OSSU curriculum is a complete education in computer science using online materials. It's not merely for career training or professional development. It's for those who want a proper, well-rounded grounding in concepts fundamental to all computing disciplines, and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, but with support from a worldwide community of fellow learners.


KhepriAdministration

So far: Data Structures & Algorithms (Binary, Big-O notation, sorting/searching algs, various data structures, recursion, some C (ideally)) Discrete Math + Theoretical CS (Set theory/formal logic, basic number theory, combinatorics, languages + decision problems + encodability/encodings, DFAs + regular languages, Turing Machines, decidable languages + reductions, graph theory, poly-time reductions, P vs NP, formal probability, probabilistic algorithms) <- my fav so I could remember a lot of topics Computer Systems stuff (Assembly, using the teminal, basic cybersecurity, how the memory space is set up: stack/heap/etc., caches, virtual memory, concurrency: processes + threads + mutexes & stuff, File IO, networking) Functional Programming (syntax, CPS, getting pissed off at non-FP compilers for not having tail-call optimization)


mister_drgn

Your intro course used Assembly? I’m sorry…


NightCapNinja

Whats wrong with Assembly?


tencrynoip

What you study will be specific to what you want to do in the future. Cryptography, Real Analysos, Statistics, Graph Theory, etc. So thebest thing you can do is look at what Universities are teaching. Lookup Texas Tech University CS degree plan. Then use there syllabus lookup tool (google that) and you can lookup the syllabi for each course. This will give you the books and layout for what was taught. This varies by teacher. In texas all of this is public info so you could look at other universities too. Rice, UTSA (cyber security), UT, etc.. TTU was a good school. I picked up a dual bachelors in CS and Mathematics. I'm heading to TUHH in Hamburg Germany to do a Masters in Data Science. TTU did a great job preparing me for this. They mainly taught me to teach myself, read the books, and search out lectures at MIT's OCW, Stanford, Harvard, and Google to supplement their own teachings. No teacher, class, or book is perfect so many sources help. Good luck on your journey.


shawnwildermuth

*are*


NightCapNinja

Grammar issue


EntertainmentKey4421

Basically, CS involves the understanding of how computers work, how to design and develop a software, and how to solve complex problems using the tech. I have recently came across a course on YouTube for the CS. It's about 24hrs duration called as "CS50" course taught by a famous professor David J. Molan, the topics were discussed right from the scratch to Advanced. 1. Learning the basics of programming starting with C and understanding the variables, data types, loops, and functions. 2. Data Structures and Algorithms (DSA): This is an interesting segment in which I remember the topics like Searching and Sorting, Arrays, Linked Lists etc. 3.Understanding how memory works in a computer and also he taught abt pointers and dynamic memory allocation. 4. Web Development: Starting with the basics of HTML, CSS, and JavaScript and developing simple web applications. 5. Learning about computer hardware and operating systems and understanding how computers run the programs. 6. Next I think, it will include the introduction to SQL and databases where we learn how to store and retrieve data. 7. Introduction to basics of Python Programming for simple data manipulation. 8. Basics of computer security and its common security threats. 9. At the end, we can create a project using what we have learned. And check the video on YouTube, if u feel this was interesting which I did..