
The Self-Taught Computer Scientist
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
Fresh out of college and with just a year of self-study behind him, Cory Althoff was offered a dream first job as a software engineer for a well-known tech company, but he quickly found himself overwhelmed by the amount of things he needed to know, but hadn't learned yet. This experience combined with his personal journey learning to program inspired his widely praised guide, The Self-Taught Programmer. Now Cory's back with another guide for the self-taught community of learners focusing on the foundations of computer science.
The Self-Taught Computer Scientist introduces beginner and self-taught programmers to computer science fundamentals that are essential for success in programming and software engineering fields. Computer science is a massive subject that could cover an entire lifetime of learning. This book does not aim to cover everything you would learn about if you went to school to get a computer science degree. Instead, Cory's goal is to give you an introduction to some of the most important concepts in computer science that apply to a programming career. With a focus on data structures and algorithms, The Self-Taught Computer Scientist helps you fill gaps in your knowledge, prepare for a technical interview, feel knowledgeable and confident on the job, and ultimately, become a better programmer.
* Learn different algorithms including linear and binary search and test your knowledge with feedback loops
* Understand what a data structure is and study arrays, linked lists, stacks, queues, hash tables, binary trees, binary heaps, and graphs
* Prepare for technical interviews and feel comfortable working with more experienced colleagues
* Discover additional resources and tools to expand your skillset and continue your learning journey
It's as simple as this: You have to study computer science if you want to become a successful programmer, and if you don't understand computer science, you won't get hired. Ready for a career in programming, coding, or software engineering and willing to embrace an "always be learning" mindset? The Self-Taught Computer Scientist is for you.
More details
Other editions
Additional editions

Person
Content
I Introduction to Algorithms 1
1 What Is an Algorithm? 3
Analyzing Algorithms 4
Constant Time 8
Logarithmic Time 9
Linear Time 10
Log-Linear Time 11
Quadratic Time 11
Cubic Time 13
Exponential Time 14
Best- Case vs. Worst-Case Complexity 15
Space Complexity 15
Why Is This Important? 16
Vocabulary 17
Challenge 18
2 Recursion 19
When to Use Recursion 23
Vocabulary 23
Challenge 23
3 Search Algorithms 25
Linear Search 25
When to Use a Linear Search 27
Binary Search 27
When to Use a Binary Search 30
Searching for Characters 32
Vocabulary 34
Challenge 35
4 Sorting Algorithms 37
Bubble Sort 37
When to Use Bubble Sort 41
Insertion Sort 42
When to Use Insertion Sort 45
Merge Sort 45
When to Use Merge Sort 52
Sorting Algorithms in Python 53
Vocabulary 54
Challenge 54
5 String Algorithms 55
Anagram Detection 55
Palindrome Detection 56
Last Digit 57
Caesar Cipher 58
Vocabulary 61
Challenge 61
6 Math 63
Binary 63
Bitwise Operators 66
FizzBuzz 70
Greatest Common Factor 72
Euclid's Algorithm 74
Primes 75
Vocabulary 77
Challenge 78
7 Self- Taught Inspiration: Margaret Hamilton 79
II Data Structures. 81
8 What Is a Data Structure? 83
Vocabulary 85
Challenge 86
9 Arrays 87
Array Performance 88
Creating an Array 90
Moving Zeros 91
Combining Two Lists 94
Finding the Duplicates in a List 95
Finding the Intersection of Two Lists 98
Vocabulary 99
Challenge 100
10 Linked Lists 101
Linked List Performance 103
Create a Linked List 104
Search a Linked List 107
Removing a Node from a Linked List 108
Reverse a Linked List 109
Finding a Linked List Cycle 110
Vocabulary 111
Challenges 112
11 Stacks 113
When to Use Stacks 114
Creating a Stack 115
Using Stacks to Reverse Strings 119
Min Stack 120
Stacked Parentheses 123
Vocabulary 125
Challenges 125
12 Queues 127
When to Use Queues 128
Creating a Queue 129
Python's Built- In Queue Class 134
Create a Queue Using Two Stacks 134
Vocabulary 136
Challenge 136
13 Hash Tables 137
When to Use Hash Tables 140
Characters in a String 141
Two Sum 143
Vocabulary 144
Challenge 145
14 Binary Trees 147
When to Use Trees 150
Creating a Binary Tree 153
Breadth- First Tree Traversal 155
More Tree Traversals 157
Invert a Binary Tree 160
Vocabulary 162
Challenges 162
15 Binary Heaps 163
When to Use Heaps 167
Creating a Heap 167
Connecting Ropes with Minimal Cost 169
Vocabulary 171
Challenge 171
16 Graphs 173
When to Use Graphs 177
Creating a Graph 178
Dijkstra's Algorithm 180
Vocabulary 186
Challenge 187
17 Self- Taught Inspiration: Elon Musk 189
18 Next Steps 191
What's Next? 191
Climbing the Freelance Ladder 192
How to Get an Interview 192
How to Prepare for a Technical Interview 193
Additional Resources 194
Final Thoughts 194
Index 195
Introduction
My journey learning to code started when I graduated from college with a political science degree. After I left school, I struggled to get a job. I didn't have the skills employers were looking for, and I watched as my friends who studied more practical subjects went on to get high-paying jobs. Meanwhile, I was stuck applying for jobs and not getting them, making no money, and feeling like a failure. So, living in Silicon Valley and being surrounded by coders, I decided to try to learn to program. Little did I know that I was about to start the craziest and most fulfilling journey of my life.
This attempt wasn't my first shot at learning to code: I had tried to learn to program in the past without success. During my freshman year of college, I took a programming class, found it impossible to understand, and quickly dropped it. Unfortunately, most schools teach Java as a first programming language, which is challenging for beginners to understand. Instead of Java, I decided to teach myself Python, one of the easiest languages for beginners to learn. Despite learning an easy-to-understand language, I still almost gave up. I had to piece together information from many different sources, which was frustrating. It also didn't help that I felt like I was on my journey alone. I didn't have a class full of students I could study with and lean on for support.
I was close to giving up when I started spending more time in online programming communities like Stack Overflow. Joining a community kept me motivated, and I began to gain momentum again. There were many ups and downs, and at times I felt like quitting, but less than a year after I made my fateful decision to learn to program, I was working as a software engineer at eBay. A year earlier, I would have been lucky to get a customer support job. Now, I was getting paid $50 an hour to program for a well-known tech company. I couldn't believe it! The best part wasn't the money, though. Once I became a software engineer, my confidence increased tenfold. After learning to code, I felt like I could accomplish anything.
After eBay, I started working at a startup in Palo Alto. Eventually, I decided to take some time off work and go on a backpacking trip to Southeast Asia. I was in the backseat of a taxi driving through the narrow streets of Seminyak, Bali, in the rain when I had an idea. Back home, people were always asking me about my experience as a software engineer. Working as a software engineer in Silicon Valley is not unusual, but I was different from many of my peers because I do not have a computer science degree.
My idea was to write a book called The Self-Taught Programmer: not only about programming but about everything I learned to get hired as a software engineer. In other words, I wanted to help people take the same journey I did. So I set out to create a roadmap for aspiring self-taught programmers. I spent a year writing The Self-Taught Programmer and self-published it. I wasn't sure if anyone would read it, and I thought most likely no one would, but I wanted to share my experience anyway. To my surprise, it sold thousands of copies in the first few months. With those sales came messages from people from around the world who were either self-taught programmers or wanted to become one.
These messages inspired me, so I decided to help solve another problem I faced learning to program: feeling alone on the journey. My solution was to create a Facebook group called Self-Taught Programmers, a place for programmers to support one another. It now has more than 60,000 members and has evolved into a supportive community filled with self-taught programmers helping each other by answering questions, trading knowledge, and sharing success stories. If you want to become part of our community, you can join at https://facebook.com/groups/selftaughtprogrammers. You can also subscribe to my newsletter at theselftaughtprogrammer.io.
When I used to post things online about working as a software engineer without a computer science degree, I would always get at least a few negative comments that it is impossible to work as a programmer without a degree. Some people would cry, "What do you self-taught programmers think you are doing? You need a degree! No company is going to take you seriously!" These days, the comments are few and far between. When they do come, I point the commenter to the Self-Taught Programmers group. We have self-taught programmers working at companies worldwide in every position, from junior software engineers to principal software engineers.
Meanwhile, my book continued to sell better than I ever thought possible and is even a popular Udemy course as well. Interacting with so many wonderful people learning to program has been an amazing and humbling experience, and I am excited to continue my journey with this book. This book is my follow-up to my first book, The Self-Taught Programmer, so if you haven't already read it, you should go back and read that first, unless you already understand programming basics. This book assumes you can program in Python, so if you can't, you can either go back and read my first book, take my Udemy course, or learn Python using whatever resource works best for you.
What You Will Learn
While my first book, The Self-Taught Programmer, introduces programming and the skills you need to learn to program professionally, this book is an introduction to computer science. Specifically, it is an introduction to data structures and algorithms. Computer science is the study of computers and how they work. When you go to college to become a software engineer, you don't major in programming; you major in computer science. Computer science students study math, computer architecture, compilers, operating systems, data structures and algorithms, network programming, and more.
Each of these topics is the subject of many very long books, and covering them all is way beyond the scope of this book. Computer science is a massive subject. You can study it your entire life and still have more to learn. This book does not aim to cover everything you would learn about if you went to school to get a computer science degree. Instead, my goal is to give you an introduction to some of the essential concepts in computer science so that you will excel in different situations as a self-taught programmer.
As a self-taught programmer, the two most important subjects for you to understand are data structures and algorithms, which is why I decided to focus this book on them. I divided this book into two parts. Part I is an introduction to algorithms. You will learn what an algorithm is and what makes one better than another, and you will learn different algorithms such as linear and binary search. Part II is an introduction to data structures. You will learn what a data structure is and study arrays, linked lists, stacks, queues, hash tables, binary trees, binary heaps, and graphs. Then, I wrap up by covering what to do once you've finished this book, including the next steps you can take and other resources to help you on your journey learning to program.
In my previous book, I explained how it doesn't make sense to study computer science before you learn to program. That doesn't mean you can ignore it, though. You have to study computer science if you want to become a successful programmer. It is as simple as this: if you don't understand computer science, you will not get hired. Almost every company that employs programmers makes them pass a technical interview as part of the application process, and technical interviews all focus on the same subject: computer science. Specifically, they focus on data structures and algorithms. To get hired at Facebook, Google, Airbnb, and all of today's hottest companies, big and small alike, you have to pass a technical interview focusing on data structures and algorithms. If you don't have a depth of knowledge in these two subjects, you will get crushed in your technical interviews. A technical interview is not something you can wing. Your potential employer will ask you detailed questions about data structures, algorithms, and more, and you better know the answers if you want to get hired.
On top of that, when you get hired for your first job, your employer and co-workers will expect you to know computer science basics. If they have to explain to you why an O(n**3) algorithm is not a good solution, they won't be happy with you. That is the situation I found myself in when I got my first programming job at eBay. I was on a team with incredibly talented programmers from Stanford, Berkley, and Cal Tech. They all had a deep understanding of computer science, and I felt insecure and out of place. As a self-taught programmer, studying computer science will help you avoid this fate.
Furthermore, studying data structures and algorithms will make you a better programmer. Feedback loops are the key to mastering a skill. A feedback loop is when you practice a skill and get immediate feedback on whether you did a good job. When you are practicing programming, there is no feedback loop. For example, if you create a website, the website may work, but your code could be horrible. There is no feedback loop to tell you if your code is any good or not. When you are studying algorithms, however, that is not the case. There are many famous computer science algorithms, which means you can write code to solve a problem, compare your result to the existing algorithm, and instantly know whether you wrote a decent solution. Practicing with a positive feedback loop...
System requirements
File format: ePUB
Copy protection: Adobe-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Install the free reader Adobe Digital Editions prior to download (see eBook Help).
- Tablet/smartphone (Android; iOS): Install the free app Adobe Digital Editions or the app PocketBook before downloading (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (not Kindle).
The file format ePub works well for novels and non-fiction books – i.e., „flowing” text without complex layout. On an e-reader or smartphone, line and page breaks automatically adjust to fit the small displays.
This eBook uses Adobe-DRM, a „hard” copy protection. If the necessary requirements are not met, unfortunately you will not be able to open the eBook. You will therefore need to prepare your reading hardware before downloading.
Please note: We strongly recommend that you authorise using your personal Adobe ID after installation of any reading software.
For more information, see our ebook Help page.