The purpose of this repo is to provide a beginner's roadmap to learn programming and computer science fundamentals. The author does not claim to be an authoritative figure on either subject, and so pull-requests are welcome.
The computer science landscape is vast. There are myriad resources on starting your CS journey. A college degree obviously comes to mind, which is certainly overkill, especially if you've already completed coursework in some other engineering field.
This is a self-study guide aimed for anyone who's a self-starter, those who could be described by the principal, "Learn and Be Curious", which I'm shamelessly stealing from Amazon's leadership principles.
One concrete goal is to provide enough "quality" knowledge to prepare a student for a software-related career. Companies cannot find new-hires fast enough. But this project is not on behalf of any commercial interest. The goal is to help you, the reader, build a knowledge base so you have the toolkit and preparation to pursue a software career.
We'll attempt to provide a balance between practical, hands-on application vs. computer science theory. The goal is not to churn out programmers but a software development engineer, a person with the ability to think critically, solve real-world problems, and continuously learn and improve their skill set. This isn't necessarily the same as Amazon, Google, or {insert company here}'s definition, and that's fine.
This section defines a grouped breakdown of topics, similar to your college course syllabus. These items should be studied at your own pace. To set yourself up for success, the main criteria is consistency. The reader should dedicate some time each week to reading and practicing these topics.
- Programming: Python Crash Course: 2nd Edition by Eric Matthes
- Data structures: Analysis of Algorithms
- Operating Systems: Operating Systems: Three Easy Pieces
- Distributed Systems: Designing Data-Intensive Applications by Martin Kleppman
In week 1, we'll focus on programming using the Python Crash Course book. This is an excellent, introductory text on the basic programming concepts in Python.
The main topics to cover are getting setup (setting up Python and an IDE), if statements, loops, lists, dictionaries, functions. These topics are covered in chapters 1-8. The chapters contain plenty of practice problems. I strongly encourage working through these problems to test your understanding.
An algorithm is a set of steps to solve some particular problem. When we write code, especially usually devise a set of steps to solve whichever task is at hand. To get your feet wet into algorithms, we'll start by understanding recursion. You want to ensure you've covered "functions" in the Python Crash Course book. Then, we'll dive into specific lectures that provide a solid foundation.
Learning sorting algorithms is a cornerstone of any CS study. In this week, we'll review bubble sort.
- A primer on recursion: Recursion in Python
- Introduction to Algorithms
- Asymptotic Notation
- Application: Bubble Sort
[1] This is just an introduction. Some concepts will not really make full sense. Take notes. We'll get more clarity in upcoming weeks. [3] Click on the "Python3" tab for source code. You are strongly encouraged to implement a Bubble sort function, based on your understanding.