SDSLabs Recommends
This is a collection of all resources on technology that we use and recommend you to read with us!
We have divided these in several categories that make them easier to digest.
Contents
- Starter Packs for Beginners
- Competitive Programming
- Database Systems
- Distributed Systems
- Game Development
- Information Security
- Language Specific
- Machine Learning
- Networking
- Web Development
- System Administration
- Android Development
- How to add stuff?
Starter Packs for Beginners
1. Web Development
- w3schools: This is generally the first site that anyone has opened to get into development. It explains various concepts related to web development effortlessly with the help of examples.
- CSS-Tricks: It is considered one of the best sites to learn about CSS concepts. Each example has code snippets with easy-to-follow explanations of the code and theory behind the specific concept. It also lists possible issues you may run into with the code that is often addressed, so you know how to tackle bugs that may pop up.
- JavaScript30: If you want to practice your js skills but do not have ideas, this playlist is for you. It contains 30 videos, all of which try to teach a new concept with its real-time implementation.
- JS Hero: This is a JavaScript tutorial with interactive exercises. On each page, you will find a lesson and an activity. You can answer the task directly on the page and see them running.
- Academind: Academind has lots of different types of development videos which would scratch quite a few itches when it comes to learning something new. Apart from some web development concepts, it contains tutorials on various other CS fields like data science, android development.
- freeCodeCamp: Freecodecamp is an open-source community as it provides many best tutorials from different instructors for Python, CSS, React, Data Science, JavaScript, etc.
2. Competitive Programming
For Practice
- Codeforces: Codeforces is an online competition platform for coding, improving your coding skills. At Codeforces, you can both practice and compete. Apart from this, there are also editorials and discussions where you can learn about new ways used by other peoples to solve a problem.
- CodeChef: It is similar to Codeforces. The long challenges are beneficial for starters as it provides a ten-day window to solve 8-10 problems, so you can easily algorithms and implement them.
- Some other platforms: AtCoder, A2oj
For Theory
- CP-Algorithms: It described many algorithms and data structures, especially popular in the field of competitive programming.
- GeeksForGeeks: The content on GeeksforGeeks has been divided into various categories to make it easily accessible for the users. Whether you want to learn algorithms, data structures, or it is the programming language on its own, which interests you, GeeksforGeeks has covered everything!
3. Mobile App Development
Android
- TheNewBoston Android Tutorial: This is a classic playlist of tutorials which teaches a lot starting from the Android fundamentals to creating super cool games. The author has explained the essential concepts lucidly.
- Android Tutorial for Beginnners: Another brilliant tutorial but recently published making it in line with the newest Android concepts and incorporating them in the tutorial.
- CSN193A - Android App Developement: A popular structured course material available freely for the ones who prefer text over videos. Really informative and hand crafted by a professon veteran in this field.
- Kotlin Development for beginners: Another popular language for Android developent. Lately, this is gaining a lot of traction and a well quite many apps are being developed using Kotlin. This video series streamlines the learning and makes it fun.
iOS
- Learn iOS Development: A good lecture series to begin with iOS app developement using Swift.
4. Information Security
Practice
- Overthewire Bandit: Probably the best set of challenges to get you started with security, covering a large number of areas ranging from using the linux shell to the fullest to network security. And the best part, it is itself aimed at absolute beginners.
- Backdoor: Armed with the basics, you can set your feet on some beginner level challenges here. The first challenges are designed to be informative and simple and gradually escalates the difficulty.
- Cryptopals: A set of challenges in increasing order of difficulty for the crypto junkies.
- PicoCTF: Another beginner level CTF to brush up your skills.
Theoretical Concepts
- Liveoverflow: Contains a lot of mini tutorials on topics such binary exploitation and security in general. Remember to look for the relevant playlists in this channel.
- x86 Crash Course: A crash course on the x86 architecture.
- Basics of Networking: An article explainng the general concepts involved in computer networks.
5. Data Science and Machine Learning
Practice
- Kaggle: Kaggle is a no-setup, customisable, Jupyter Notebooks environment by Google. With over 19,000 public datasets and 200,000 public notebooks, this platform provides one of the best places to practice data science computational problems. This cloud computational environment supports Python 3 and R and enables reproducible and collaborative analysis where one can explore and run machine learning codes seamlessly.
Theoretical Concepts
- ISLR: ISLR is a theory/math-intensive book & the codes are written in R and thus you may refer to the bookβs python conversion here.
- Probability and Statistics: Probability and statistics will help you understand the fundamentals behind Machine Learning Algorithms, hence, having good understanding is important. You can follow this blog series for getting started with probability and statistics.
- CS229 / CS109: You can follow any of the two courses β Andrew NGβs CS229 Machine Learning or Harvardβs CS109 Data Science for basic concepts of ML and DL.
- PyTorch / Tensorflow: You can go either for PyTorch Tutorials or Tensorflow Tutorials. Start and excel in one of these as it is the implementation that matters ultimately.
Competitive Programming
- CS 97SI Introduction to Competitive Programming: Fantastic repository of theory and practice problems across various topics for students who are interested to participate in ACM-ICPC.
- E-Maxx Algorithms: A tutorial website which provides descriptions of many algorithms and data structures especially popular in field of competitive programming.
- Introduction to Algorithms: It's one of the most popular textbooks for university algorithm courses. This book covered various algorithms and data structures in great detail.
Database Systems
- Database Systems Course: Database systems is a course by Andy Pavlo based on the design and implementation of database management systems. The course also includes case studies on open-source and commercial database systems to illustrate design techniques and trade-offs. There are more courses in the series by Andy Pavlo focusing of different aspects of database systems.
- awesome-database-learning: awesome-database-learning is a list of learning materials to understand databases internals, including but not limited to papers, blogs, courses and talks.
- Database Internals: Database Intenals is a book to deep dive into how distributed data system works. The book contains relevant material gleaned from numerous books, papers, blog posts, and the source code of several open source databases.
Distributed Systems
- Distributed Systems for fun and profit: Distributed systems for fun and profit is an e-book focused on distributed programming and systems concepts one will need to understand commercial systems in the data center. The book is an excellent starting point for delving into distributed systems programming with resources to dive deep into some concepts.
- Designing Data-Intensive Applications: Designing data-intensive applications is an excellent book that bridges the massive gap between distributed systems theory and practical engineering. It helps developers make smart decisions as they design and implement data infrastructure and systems.
- Designing Distributed Systems: Designing Distributed Systems is a 160 pages e-book containing an introduction to distributed system concepts along with a more in-depth explanation for building robust distributed systems.
Game Development
- r/gamedev: r/GameDev on Reddit is a community of 400K+ game developers that shares the latest techniques, tips and news, all related to the AAA and indie game development industry. You will find interesting project displays, blogs and technical help in this subreddit, all at one place.
- Game Developers Conference: The Game Developers Conference (GDC) brings the game development community together to exchange ideas, solve problems, and shape the future of the industry across five days of education, inspiration, and networking. Attendees include programmers, artists, producers, game designers, audio professionals, and business leaders. Check out the talks that happen at GDC on their YouTube channel.
- Red Blob Games: A site with great visual and interactive explanations of algorithms and data structures, mostly related to game development. A great place to learn and understand Procedural Generation/Textures.
3D graphics
- Paul Bourke: A site explaining stuff used in advanced 3D graphics, mostly procedural stuff. A specific page to get you started would be this Noise article where you'll find some creative uses of noise functions in terrain generation.
- Procedural World: This site is completely dedicated to Procedural Generation. A highly suggested read would be this page which suggests an approach to flatten bumpiness in lake-beds generated due to noise.
Information Security
- liveoverflow: liveoverflow is a member of team Alles and makes videos about CTFs, bug hunting and cool vulnerabitlies, focusing primarily on binary exploitation and reverse engineering with occasional content about web security. His binary exploitation series, though a little tough to follow at first, is a great resource for beginners looking to get started in the field of infosec
- PortSwigger academy: PortSwigger offers detailed theory and a number of accompanying practice labs for popular web app vulnerabilities
- John Hammond: A youtube channel which regularly posts videos related to information security (mostly CTF related). This channel demonstrates the use of tools used in CTFs.
- Null Byte: The official Null Byte channel for video content! They focus on creating videos for aspiring ethical hackers, computer scientists, and the InfoSec community.
- Introduction to Cryptography by Christof Paar: This is a complete basic to intermediate level course on Cryptography by Professor Christof Paar. You would love how this course has completely nil (or maybe very minimum) prerequisites. The accompanying book for this course is available here
- Matasano Cryptopals: This is a set of challenges on Cryptography, covering all the classical topics in Cryptology, this acts as a cherry on top of the above course.
- Cryptohack: CryptoHack is a fun platform for learning cryptography. The emphasis is on breaking bad implementations of "modern" crypto, such as AES, RSA, and Elliptic-curve.
Language Specific
C++
- TheChernoProject: TheCherno has been a quite valuable resource while developing our game engines, viz. Rubeus and Rootex (ongoing). This YouTube channel dives into advanced topics of C++ (although his earlier videos taught Java) occasionally while keeping a solid foundation based on just one thing: Building good C++ software. You will not find any random videos on things you will probably never use.
Python
- Sentdex: Sentdex makes beginner friendly videos about everything python. From basic python, to Flask and Django, to Deep learning and sentiment analysis. Sentdex has got it all covered and is a great resource for anyone looking to familiarize themselves with python
- Automate the Boring Stuff with Python: Well, let's say you are py newbie. But you have a fire within to 'Build Things'. And you are to lazy to go down the long way. Then here's the place for you. An application based approach to learn one of the most popular programming languages.
- Practical Python Programming: Learn python practically with this course.
Go
- Go by Example: Wondering where to start learning Go? The tutorials bore you as hell? Why not learn by implementing mini examples that will keep engrossed till the end. This website covers all the important topics from the classic Hello World to Goroutines to HTTP servers using annotated example programs.
- justforfunc: Programming in Go: This Youtube channel features some popular as well as some unconventional takes on Go programming. From trying out Tensorflow Go to gRPC, it unfolds the potential of Go in an interesting way.
- Go Tour: It's a concise introduction to the Go programming language. Teaches all the basic concepts of the language by writing short examples of code. If you're familiar with some other programming language, it's a nice way to dive into Go.
Rust
- The Rust Programming Language - Book: This is a book that explains Rust concepts, including Ownership and Borrowing, the key concepts of the language, and is hosted by the official rust-lang.org website.
- Learn Rust With Entirely Too Many Linked Lists: Teaches you Rust by creating, as evident by the title, many linked lists. From explaining the basic syntax to how memory is managed by Rust, this unofficial book covers everything. Beware, this does require some prior understanding of programming and data-structures like linked lists and stacks.
Machine Learning
- Stanford CS231n β Convolutional Neural Networks for Visual Recognition: This course is a deep dive into details of the deep learning architectures with a focus on learning end-to-end models for these tasks, particularly image classification.
- Stanford CS224n β Natural Language Processing with Deep Learning: This lecture series provides a thorough introduction to the cutting-edge research in deep learning applied to NLP, an approach that has recently obtained very high performance across many different NLP tasks including question answering and machine translation.
- Deep learning book: This textbook is a resource intended to help students and practitioners enter the field of machine learning in general and deep learning in particular.
- r/MachineLearning: r/MachineLearning on Reddit is a community of 900K+ machine learning enthusiasts that shares the latest research, discussions, projects etc, pertaining to machine learning.
- WildML: WildML is an excellent blog maintained by Denny Britz focused on Natural Language Understanding and Reinforcement Learning.
Networking
- Beej's Guide to Network Programming: Beej's Guide to Network Programming is little how-to guide on network programming using Internet sockets, or "sockets programming".
- Debian's linux networking guide: Debian's linux networking guide is a helpful resource to understand basics of linux networking along with introduction to concepts like ARP, Encapsulation, Subnetting etc.
- netdevconf: Netdevconf is a community-driven conference geared towards Linux netheads with focus on Linux kernel networking and user space network apps.
Web Development
- Mozzila Developer Network: MDN is the one stop shop for learning all kinds of open web development technologies. You will find the best resources on HTML, CSS, JS, Web APIs, etc.
System Administration
- SysAdvent: SysAdvent is a blog that posts one article about system administration for each day of December, with the goal.
- KataKoda: Katacoda is an interactive learning and training platform for software developers focusing on system administration. Each student is given access to a new environment without the need to install all the required components by themselves.
Android Development
- Android Developer Fundamentals: This is a course made by Google which covers the basics of android development such as activities, intents, lifecycles, minimal UI, broadcast receivers, services, async-tasks and storage.
- Advanced Android Development: This course also made by Google focuses on advanced android development topics like fragments, sensors, performance optimization, geo-location, animations, audio/video streaming etc.
How to add stuff?
How to add a new topic?
Open an issue/a PR and we will add it in
How to add a new resource under a new topic?
Open a PR and add it as a bullet-point.
## Previously Existing Topic
* my new resource