Understanding DSA & Learning Computer Science Concepts
We went more into this in the previous section, but Data Structures and Algorithms (DSA) are one of the most important concepts you should know if you want to enter the SWE sphere. A strong understanding of DSA helps you write efficient code, reason about performance, and solve technical interview problems. Do not wait until CS344 to start learning algorithms. Spending just 30 minutes a day solving a DSA problem will prepare you extremely well for any SWE role or internship alongside strong project experience.
Here are some helpful resources to help learn DSA:
- Algorithms Illuminated - a set of algorithms textbooks and corresponding videos and lecture slides. While the textbook is paid, the slides and videos are an excellent free resource.
- Abdul Bari - a popular computer science teacher on YouTube, Abdul Bari has a full youtube series covering an equivalent undergraduate Algorithms or DS&A course. His clear, step-by-step teaching style has gained him a reputation of being a go-to resource for learning DSA.
- CLRS - This is the go-to textbook for DSA, and is a great resource.
- Harvard CS50: An introductory computer science course from Harvard that covers programming fundamentals, algorithms, and data structures while building strong problem solving skills.
For learning new skills or for additional notes/resources on your classwork, check out the massive open online course (MOOC) platforms below. Many offer certificates, which you can put on your LinkedIn:
- Coursera: A platform offering many university level courses on algorithms, data structures, and software engineering concepts from institutions like Stanford and Princeton.
- edX: Another platform with structured computer science courses, including full sequences on algorithms, data structures, and systems taught by universities.
- Use professor’s websites who post their notes online, like this Rutgers professor
- MIT OpenCourseWare
- Leetcode for practice
Linux
Knowing your way around linux environments is essential to staying afloat in dev/production environments. Even as an app developer, you need to know how to set up systems properly and manage your apps on linux servers. Having fluency in the terminal is a must , so here are some resources to help get your foot in the door:
- Essential Linux Commands that are commonly used
- A video outlining the fundamentals of Linux
- The Linux System Administrator's Guide - Textbook resource. Chapters 2, 3, 7, and 11 are all you need to read to get you familiar with how Linux OS generally works at a high level.
- A student’s notes on Linux (bunch of material, don’t start here if you have no experience in Linux);
Learning New Coding Languages
Learning how to code is best done through building projects. Once you take Intro to Computer Science and Data Structures, you’ll understand basic concepts that are implemented in some way by all similar languages. For instance, all general purpose coding languages share loops, conditionals, variables, and more. As an aside, if you take Principles of Programming Languages (CS 314), you’ll learn about the types of languages that exist, but the point is building projects and looking up concepts as you need them is the best way to learn a new language, as you already know fundamental concepts and are just learning how different languages implement these concepts. Here are some resources to get started with new languages:
C
- The C Programming Language - The original C book written by its creators - Dennis Ritche and Brian Kernighan
- Modern C - Another helpful textbook to learn C
Python
- Codecademy Python course - A fantastic place to first learn programming, and an excellent introduction to Python. Completing this free course will give you a wonderful foundation and prepare you for so many CS opportunities!
C++
- TutorialsPoint C++ - C++ is a challenging language to learn. TutorialsPoint has thorough and easy-to-understand explanations for C++ beginners.
- cplusplus reference - Detailed list of all functions, objects, and libraries in the native c++ library. Provides specific information on function/object behavior in multiple versions of c++.
- The C++ programming Language - the original C++ book written by it’s creator, Bjarne Stroustrup.
Web Applications
Web applications are a great way to implement (and learn) software engineering skills on your own.
Make a Github account and build your own personal website as a first step. It’s like creating your own project and experience hub on the Internet. You can use it as a marketplace, a collection of your own resources, a way to advertise/showcase your skills, etc. Regardless, it is helpful to have all your projects and CS-related resources in one digital place. From there, build your skills by creating more complicated projects which include a frontend, backend and database.
Here are some resources to help you get started to learn concepts as well as tutorials to build projects. Be creative with your project ideas by thinking of problems you have that you can solve. You can also use LLMs to brainstorm some ideas as well:
Learning Concepts
- The Odin Project
- Full beginner friendly path that teaches HTML, CSS, JavaScript, Git, and full stack development through projects.
- MDN Web Docs
- Trusted documentation for understanding how HTML, CSS, and JavaScript work at a deeper level.
- javascript.info
- Structured and thorough guide to modern JavaScript from basics to advanced topics.
- react.dev
- React’s own learning resources are fantastic for getting started with this popular frontend library.
Project Tutorials and Practice
- Project-Based Learning Github
- An extensive list of projects in a plethora of different programming languages, each with tutorials.
- App Ideas
- List of project ideas with feature requirements to help you build non-trivial apps.
- JavaScript Expense Tracker (Traversy Media)
- Step by step project that teaches DOM manipulation, state management, and local storage through a useful app.
- Traversy Media’s channel has a bunch of other end-to-end project tutorials worth checking out as well.
- Frontend Mentor
- Provides real UI designs so you can practice building clean, responsive front ends
- FreeCodeCamp
- An awesome compilation of free resources to earn certificates in different coding languages and technical concepts.
AI/ML
Understanding data and basic machine learning is becoming a core skill for software engineers. Even if you do not plan to work directly in AI, you will still deal with data in almost every role. You will likely read logs, track user behavior, measure performance, and make decisions based on metrics. Knowing how to clean, visualize, analyze, and draw conclusions from data will allow you to justify technical decisions with evidence.
AI and machine learning are also becoming common across all products. Features like recommendations, search ranking, and automation are all applications of these two concepts. Large language models, or LLMs, are also a major part of this shift. They are the basis for chatbots, code assistants, and many modern tools used in industry. You do not need to build models from scratch (though it is highly recommended to understand how they work! Do this!), but you should understand how they work at a high level, and should know how to use common LLM APIs.
Start by learning basic concepts using a youtube tutorial or Google’s machine learning crash course, then build small projects using data from kaggle with simple models via sci-kit learn, or build your own model using PyTorch or TensorFlow.
Here are some resources to help you get started:
- Google ML Crash Course - Google’s ML Crash Course. It is a great starting place if you are brand new to Machine Learning.
- ML Visualizer - Nice way to visualize ML concepts.
- ML Book - A highly rated 100 page Machine Learning textbook.
- Dive Into Deep Learning - A textbook on Deep Learning if you want to take a deep dive into Neural Networks.
- Stat Learning - An excellent, free textbook on statistical learning in both R and Python.
- deeplearning.ai - deeplearning.ai is the de facto place to go for excellent machine learning and AI courses. Led by famous researcher and Stanford Professor Andrew Ng.
- scikit-learn - Very popular machine learning library that implements common machine learning models for you, so you just need to call functions to build your model.
- PyTorch Course - A 25-hour long course on PyTorch. It starts from the fundamentals of linear algebra in Python all the way to building complex ML models, and is really worth learning!
- PyTorch Tutorial - Using the FashionMNIST dataset to learn the full machine learning workflow in PyTorch, including tensors, data loading, model training, and basic classification.
- In Depth PyTorch Course - A “Zero to Mastery” Guide to learning PyTorch
- TensorFlow - Some basics to Tensorflow.
General CS Knowledge:
-
Awesome Lists - Open Sourced / Community Curated list of the best lists for learning various technologies/languages. I recommend consulting it before diving into any new language to find the best resources
-
Learn X in Y Minutes - A great way to refresh your knowledge on a language, or if you need to quickly learn the syntax or design of a language. Also has some good explanations of various topics in CS.
-
Devto - Programming blogs, might be looking at if you run out of content on HN
-
Tech Dev Guide - A collection of material from many sources, including Google, that you can use to supplement your classwork or direct your own learning.
-
Open Source Society University - A complete education in computer science utilizing only online resources. More expansive than Rutgers coursework, but can't replace actual classes. Use it to supplement classwork
-
TechYacks - Best tech talks, scraped from Hacker News
Please let us know if anything is broken, needs to be updated, or if you have any feedback here.