1 00:00:04,560 --> 00:00:09,320 I like to welcome up our first speaker of the day. 2 00:00:09,320 --> 00:00:13,646 She is a senior engineer at DEV, where she builds community and 3 00:00:13,646 --> 00:00:17,490 helps improve the software careers of millions. 4 00:00:17,490 --> 00:00:20,043 She enjoys building and breaking code, 5 00:00:20,043 --> 00:00:24,610 the last creating empathetic engineering teams a whole lot more. 6 00:00:24,610 --> 00:00:29,449 She is the creator of base CS and base DS, two writing series exploring 7 00:00:29,449 --> 00:00:34,805 the fundamentals of computer science and distributed systems. 8 00:00:34,805 --> 00:00:39,070 She also co-hosts the base CS podcast, and 9 00:00:39,070 --> 00:00:44,785 is a producer of the base CS and bite size video series. 10 00:00:44,785 --> 00:00:48,054 Please welcome Vaidehi Joshi. 11 00:00:48,054 --> 00:00:49,813 Thank you. 12 00:00:49,813 --> 00:00:52,602 >> I'm so excited to be speaking at the Treehouse festival and 13 00:00:52,602 --> 00:00:54,500 to be here with all of you. 14 00:00:54,500 --> 00:00:57,934 And I'm especially excited to be sharing a little bit about one of 15 00:00:57,934 --> 00:01:00,130 my favorite topics, computer science. 16 00:01:01,450 --> 00:01:04,640 So, a little bit about me to start. 17 00:01:04,640 --> 00:01:08,710 I'm a senior software engineer at Forum, the open source software that powers DEV. 18 00:01:10,160 --> 00:01:13,901 And I also think it's worth mentioning that I did not go to school for 19 00:01:13,901 --> 00:01:16,780 computer science and I don't have a CS degree. 20 00:01:16,780 --> 00:01:19,770 In fact, my degree is in English. 21 00:01:19,770 --> 00:01:22,917 So I learned to code at a boot camp about six years ago, and 22 00:01:22,917 --> 00:01:27,760 I have been working professionally in the tech industry ever since then. 23 00:01:27,760 --> 00:01:30,001 And when I was first learning to code, 24 00:01:30,001 --> 00:01:33,310 I didn't really know what computer science was. 25 00:01:33,310 --> 00:01:37,887 It was only when I started interviewing for my second engineering role that I 26 00:01:37,887 --> 00:01:42,697 started to hear a few computer science terms and concepts being thrown around. 27 00:01:42,697 --> 00:01:44,320 And they came up in technical interviews. 28 00:01:45,350 --> 00:01:47,427 And in these technical interviews, 29 00:01:47,427 --> 00:01:51,715 I started to realize that these concepts were coming up again and again, and 30 00:01:51,715 --> 00:01:55,669 I didn't really know that much about what people were talking about. 31 00:01:55,669 --> 00:02:00,150 I didn't really know the terminology and the jargon that they were using. 32 00:02:00,150 --> 00:02:05,861 And it was that experience that made me want to learn more about computer science, 33 00:02:05,861 --> 00:02:09,770 and it made me want to fill in those gaps in my knowledge. 34 00:02:09,770 --> 00:02:12,046 I'm someone who really doesn't like being out of the loop, and 35 00:02:12,046 --> 00:02:13,670 not knowing what's going on. 36 00:02:13,670 --> 00:02:16,890 So, that was a pretty good motivating factor. 37 00:02:18,390 --> 00:02:23,316 And when I decided that I wanted to fill in those gaps in my knowledge, I decided 38 00:02:23,316 --> 00:02:28,257 that the easiest way to do that would just be to teach myself computer science. 39 00:02:28,257 --> 00:02:33,160 Which is a pretty bold idea but definitely doable, a lot of people have done it. 40 00:02:34,470 --> 00:02:40,526 And the way that I went about doing this was sort of like creating a schedule for 41 00:02:40,526 --> 00:02:41,282 myself. 42 00:02:41,282 --> 00:02:46,304 And I decided that for the whole year I was going to learn one new computer 43 00:02:46,304 --> 00:02:51,870 science concept every single week for the entire calendar year. 44 00:02:51,870 --> 00:02:56,539 And I decided that I was going to write about every new concept that I was 45 00:02:56,539 --> 00:02:58,846 learning during that year, too. 46 00:02:58,846 --> 00:03:03,118 And the culmination of this project was something called base CS, 47 00:03:03,118 --> 00:03:07,923 a year long writing series that included all of the computer science topics 48 00:03:07,923 --> 00:03:10,760 that I taught myself throughout that year. 49 00:03:11,820 --> 00:03:16,975 So, if you've ever heard CS terms or concepts being used in a conversation and 50 00:03:16,975 --> 00:03:23,130 found yourself nodding along, but you didn't really know that much about them. 51 00:03:23,130 --> 00:03:26,010 Fear not because you are not alone. 52 00:03:26,010 --> 00:03:29,750 And that is exactly the way that I started out, too. 53 00:03:30,900 --> 00:03:35,713 And my hope is that by the end of this talk, you'll have a better sense of 54 00:03:35,713 --> 00:03:40,768 what computer science is, and some of the core concepts within the field, 55 00:03:40,768 --> 00:03:43,357 and how to go about learning it, too. 56 00:03:43,357 --> 00:03:47,695 And the other thing I wanna note is that it's impossible to cover everything 57 00:03:47,695 --> 00:03:51,230 about computer science in just 25 minutes. 58 00:03:51,230 --> 00:03:55,043 It's a huge field, and 25 minutes is really not a long time. 59 00:03:55,043 --> 00:03:59,501 But hopefully this is going to be a helpful first step in your journey in 60 00:03:59,501 --> 00:04:02,080 learning more about computer science. 61 00:04:03,720 --> 00:04:05,690 So let's start with the basics. 62 00:04:07,130 --> 00:04:09,460 What on earth even is computer science? 63 00:04:10,540 --> 00:04:15,496 Well, if you look up the definition of the fields, you'll see that computer 64 00:04:15,496 --> 00:04:19,700 science is defined as the study of computation and information. 65 00:04:20,890 --> 00:04:24,102 If we look up the definition of computer science, 66 00:04:24,102 --> 00:04:29,452 we can see that it's actually not just one field, there's all these subfields and 67 00:04:29,452 --> 00:04:33,740 specific discrete topics within that field, too. 68 00:04:33,740 --> 00:04:36,784 But in my opinion, computation and information, 69 00:04:36,784 --> 00:04:41,620 those two words really do encompass the way that I think about computer science. 70 00:04:43,840 --> 00:04:49,420 If you think about it, computation really just means calculation. 71 00:04:50,930 --> 00:04:56,284 And information really just means data. 72 00:04:56,284 --> 00:05:02,940 Computer science is a combination of making calculations and dealing with data. 73 00:05:04,190 --> 00:05:08,254 If you look at CS with this lens, with this perspective. 74 00:05:08,254 --> 00:05:13,406 You start to see that understanding some fundamentals of computer 75 00:05:13,406 --> 00:05:20,222 science helps us think about and interact with, and manipulate information and data. 76 00:05:20,222 --> 00:05:24,915 And oftentimes, we're making calculations about the data, and 77 00:05:24,915 --> 00:05:28,200 figuring out how to modify it to fit our needs. 78 00:05:29,940 --> 00:05:34,870 Now, if you're learning to code, it can be hard to know how these two 79 00:05:34,870 --> 00:05:39,725 things computation and information, how they fit into your life. 80 00:05:41,746 --> 00:05:45,999 And that can make it hard to know where to start learning computer science. 81 00:05:45,999 --> 00:05:50,783 But the reality is that you've probably already thought about both of 82 00:05:50,783 --> 00:05:55,090 these concepts in some capacity whether you realize it or not. 83 00:05:56,260 --> 00:05:59,130 If you've ever thought about how to structure some data, 84 00:05:59,130 --> 00:06:01,540 you were brushing up against computer science. 85 00:06:03,630 --> 00:06:06,369 If you've ever thought about how to sort through or 86 00:06:06,369 --> 00:06:09,440 find some data, you were dabbling in computer science. 87 00:06:10,550 --> 00:06:14,479 And if you've ever thought about how you can make your code just a little 88 00:06:14,479 --> 00:06:16,836 bit faster, and a little more efficient, 89 00:06:16,836 --> 00:06:20,130 you are flexing your computer science muscles then, too. 90 00:06:22,330 --> 00:06:27,538 And it's this idea of computation, and information that maps really quite well 91 00:06:27,538 --> 00:06:32,910 to two of the core concepts in computer science, data structures and algorithms. 92 00:06:34,140 --> 00:06:39,962 Now data structures are information part of computer science, 93 00:06:39,962 --> 00:06:44,398 while algorithms are that computation aspect. 94 00:06:44,398 --> 00:06:47,652 And data structures, and algorithms were the two main 95 00:06:47,652 --> 00:06:52,620 concepts that I first started learning when I wanted to teach myself CS. 96 00:06:52,620 --> 00:06:56,139 And I found that if you start with these two topics first, 97 00:06:56,139 --> 00:06:59,820 you'll often run into other related topics along the way. 98 00:07:02,210 --> 00:07:06,490 So let's start with data structures first. 99 00:07:06,490 --> 00:07:11,650 A data structure is really just a way of organizing some data. 100 00:07:13,040 --> 00:07:14,654 If you're learning to code, 101 00:07:14,654 --> 00:07:18,540 you probably already run into data structures in some shape or format. 102 00:07:20,230 --> 00:07:26,819 For example, arrays and objects are actually both just data structures. 103 00:07:26,819 --> 00:07:29,900 So are sets and dictionaries. 104 00:07:31,310 --> 00:07:35,082 When you're learning to code, you are forced to use the data structures that 105 00:07:35,082 --> 00:07:38,810 are built into whatever programming language you're using. 106 00:07:38,810 --> 00:07:41,803 Because that's what you have to use in order to store any data that you 107 00:07:41,803 --> 00:07:42,380 care about. 108 00:07:43,450 --> 00:07:45,790 And computer science is really no different. 109 00:07:45,790 --> 00:07:47,041 When you study CS, 110 00:07:47,041 --> 00:07:52,607 you'll encounter different kinds of data structures that let you store your data. 111 00:07:52,607 --> 00:07:56,527 The only difference is that you might have not seen them in the programming language 112 00:07:56,527 --> 00:07:57,820 you're learning before. 113 00:08:00,270 --> 00:08:04,561 For example, you might have heard of and use something called an array. 114 00:08:04,561 --> 00:08:07,430 But arrays aren't the only way of organizing data. 115 00:08:08,480 --> 00:08:11,630 There's also something called a linked list, 116 00:08:11,630 --> 00:08:15,970 which is a linear data structure that orders data sequentially. 117 00:08:17,610 --> 00:08:18,430 Here's an example. 118 00:08:19,690 --> 00:08:24,630 Each element within this link list is stored within something called a node. 119 00:08:24,630 --> 00:08:26,920 And each node holds that data. 120 00:08:28,400 --> 00:08:31,770 Each node also has a pointer or reference to the next node. 121 00:08:31,770 --> 00:08:35,570 And that's sort of where the linking of the list comes from. 122 00:08:37,210 --> 00:08:41,739 Now even if you've never seen this data structure before, at the end of the day, 123 00:08:41,739 --> 00:08:44,750 all this is is just another way to organize your data. 124 00:08:46,330 --> 00:08:51,099 Learning about different data structures through the eyes of computer science can 125 00:08:51,099 --> 00:08:55,990 show us the different ways to structure information and how to hold it. 126 00:08:55,990 --> 00:09:00,883 And it can also show us scenarios when certain data structures are more useful, 127 00:09:00,883 --> 00:09:06,080 and situations when they're less useful, and maybe not the right tool for the job. 128 00:09:08,120 --> 00:09:09,041 For example, 129 00:09:09,041 --> 00:09:13,892 the Ruby programming language does have an array data structure built in. 130 00:09:13,892 --> 00:09:17,907 But what it doesn't have is a built in binary tree data structure, 131 00:09:17,907 --> 00:09:21,480 which is what's illustrated right here. 132 00:09:21,480 --> 00:09:25,147 Now, you might not have seen a binary tree data structure before, but 133 00:09:25,147 --> 00:09:29,020 keep in mind all it is is just another way of structuring and holding data. 134 00:09:30,260 --> 00:09:34,072 Immediately off the bat, even if we've never seen a binary tree before, 135 00:09:34,072 --> 00:09:38,280 we can see that they're different from arrays and linked lists. 136 00:09:38,280 --> 00:09:42,500 They're nonlinear, which means that their data is organized non sequentially. 137 00:09:43,570 --> 00:09:45,530 But they still hold data. 138 00:09:45,530 --> 00:09:47,780 They have nodes and they have pointers. 139 00:09:47,780 --> 00:09:50,730 And they're just another way of structuring information. 140 00:09:50,730 --> 00:09:55,630 And sometimes using a binary tree might be the right choice. 141 00:09:55,630 --> 00:09:58,420 And other times using an array might be the better choice. 142 00:09:59,990 --> 00:10:03,652 And as you learn about different kinds of data structures, 143 00:10:03,652 --> 00:10:07,470 you also start to see how and where they are used in computing. 144 00:10:08,660 --> 00:10:12,910 For example, binary trees like this one illustrated here, 145 00:10:12,910 --> 00:10:15,900 are used within databases. 146 00:10:15,900 --> 00:10:19,825 So in the future if you're ever dealing with databases, 147 00:10:19,825 --> 00:10:24,500 knowing what a binary tree is and how it works can be really helpful. 148 00:10:26,590 --> 00:10:31,447 Some fundamental data structures that you might encounter 149 00:10:31,447 --> 00:10:36,401 while learning computer science are linked lists, trees, 150 00:10:36,401 --> 00:10:39,231 graphs, hash tables, and sets. 151 00:10:39,231 --> 00:10:42,465 So now that we've sort of covered data structures, 152 00:10:42,465 --> 00:10:46,149 let's look at the other main concept which is algorithms. 153 00:10:48,297 --> 00:10:52,166 Now an algorithm can seem like a scary word, but 154 00:10:52,166 --> 00:10:55,564 really all it is is a set of instructions. 155 00:10:55,564 --> 00:10:59,970 And those instructions are used for deciding how to perform a calculation. 156 00:11:01,500 --> 00:11:06,109 In other words, an algorithm is basically just a function or a method. 157 00:11:06,109 --> 00:11:10,490 And we use that function or method to help us compute something. 158 00:11:11,970 --> 00:11:15,257 Algorithms actually couple pretty well with data structures. 159 00:11:15,257 --> 00:11:18,880 Because every time we have to interact with some data, 160 00:11:18,880 --> 00:11:22,281 we usually have to perform some computation on it. 161 00:11:22,281 --> 00:11:25,020 Which means that we're relying on an algorithm to do that. 162 00:11:27,370 --> 00:11:30,310 For example, remember that binary tree we just saw a minute ago? 163 00:11:31,640 --> 00:11:34,660 Here's an illustration of how to insert an element into that tree. 164 00:11:36,020 --> 00:11:41,650 Now inserting data into a data structure needs a set of instructions. 165 00:11:41,650 --> 00:11:45,121 There's no way for the computer or for a program to know how to do this. 166 00:11:45,121 --> 00:11:48,955 So we have to give it instructions to tell it how, and guess what? 167 00:11:48,955 --> 00:11:51,840 Those instructions are just an algorithm. 168 00:11:51,840 --> 00:11:56,830 So in this case, the instructions to add some data to a binary tree 169 00:11:56,830 --> 00:12:01,030 are the insertion algorithm for this data structure. 170 00:12:02,050 --> 00:12:07,110 And you can imagine how just as there's an insertion algorithm for this binary tree, 171 00:12:07,110 --> 00:12:11,900 there's also a deletion algorithm for removing some data from the binary tree. 172 00:12:13,550 --> 00:12:18,350 Anytime that we deal with inserting, deleting, searching through, 173 00:12:18,350 --> 00:12:23,790 sorting through some sort of data, we're dealing with an algorithm to do that. 174 00:12:25,010 --> 00:12:29,231 And as you learn more about data structures, you will naturally 175 00:12:29,231 --> 00:12:33,853 learn about the algorithms that are specific to that data structure. 176 00:12:33,853 --> 00:12:37,673 There are also some algorithms that are engineered to solve a very 177 00:12:37,673 --> 00:12:39,710 specific problem. 178 00:12:39,710 --> 00:12:41,822 For example, in this illustration, 179 00:12:41,822 --> 00:12:46,050 you can see a binary search algorithm that's being performed on a data set. 180 00:12:47,220 --> 00:12:51,768 And the binary search algorithm is something that's used specifically to 181 00:12:51,768 --> 00:12:55,750 search for or find an element within a sorted collection of data. 182 00:12:57,710 --> 00:13:01,878 As you learn more about different algorithms, you'll start to see that many 183 00:13:01,878 --> 00:13:05,750 algorithms build on other algorithms which is pretty cool. 184 00:13:05,750 --> 00:13:10,446 So as you grow your knowledge about how different algorithms perform, 185 00:13:10,446 --> 00:13:13,746 you'll start to see them pop up in the real world. 186 00:13:15,519 --> 00:13:17,899 As we learn the fundamentals of algorithms, 187 00:13:17,899 --> 00:13:21,666 it'll become easier to learn more complex versions of the same ideas. 188 00:13:23,538 --> 00:13:26,284 So now that we know about data structures and algorithms, 189 00:13:26,284 --> 00:13:29,036 there's a third concept which I didn't mention before. 190 00:13:29,036 --> 00:13:34,561 But I think it's pretty cool, I'm gonna throw it in there. 191 00:13:34,561 --> 00:13:37,740 There's a third concept which is big O notation. 192 00:13:37,740 --> 00:13:41,940 And to me it sort of sits right between data structures and algorithms. 193 00:13:43,380 --> 00:13:47,617 Big O notation is a way of measuring efficiency. 194 00:13:47,617 --> 00:13:52,213 And efficiency is something that actually applies to data structures, 195 00:13:52,213 --> 00:13:53,990 into algorithms. 196 00:13:53,990 --> 00:13:58,547 In fact, we think about efficiency a lot when we're writing code and 197 00:13:58,547 --> 00:14:02,960 when we're thinking about really intense forms of computation. 198 00:14:04,770 --> 00:14:06,840 Now, what is big O notation? 199 00:14:06,840 --> 00:14:10,551 It's really just a way to express the amount of time and 200 00:14:10,551 --> 00:14:12,820 space that something requires. 201 00:14:14,290 --> 00:14:20,567 In other words, we can use big O notation to talk about how efficient something is. 202 00:14:20,567 --> 00:14:23,722 Now this could mean how efficient it is in terms of space, 203 00:14:23,722 --> 00:14:26,770 it could also mean how efficient it is in terms of time. 204 00:14:28,370 --> 00:14:33,304 Something to note is that we always talk about efficiency and 205 00:14:33,304 --> 00:14:37,477 big O notation in the worst case scenario context. 206 00:14:37,477 --> 00:14:42,528 So we can use big O to talk about how well something performs and 207 00:14:42,528 --> 00:14:49,800 decide on if we can improve on that, and make it do better and perform better. 208 00:14:49,800 --> 00:14:53,740 And we can talk about Big O in terms of both data structures and algorithms. 209 00:14:55,160 --> 00:15:00,330 So, whenever we ask ourselves, how much time does it take to run this algorithm? 210 00:15:00,330 --> 00:15:07,190 What we're really asking is what's the big O time complexity of this algorithm? 211 00:15:07,190 --> 00:15:13,378 Or how will this algorithm perform in the worst case scenario? 212 00:15:13,378 --> 00:15:16,720 All three of those questions really are equivalent. 213 00:15:16,720 --> 00:15:20,290 And they're all talking about how efficient this algorithm is. 214 00:15:21,510 --> 00:15:26,024 So when we evaluate how an algorithm runs, we want to know how much time 215 00:15:26,024 --> 00:15:29,710 it will take for that algorithm to run as its input grows. 216 00:15:31,130 --> 00:15:34,237 If we give the algorithm more elements to process or 217 00:15:34,237 --> 00:15:37,645 perform computations on, what does the algorithm do? 218 00:15:37,645 --> 00:15:39,089 Does it slow down? 219 00:15:39,089 --> 00:15:40,060 Does it remain the same? 220 00:15:41,070 --> 00:15:43,140 That's how we can evaluate how it behaves. 221 00:15:45,050 --> 00:15:51,785 And amazingly efficient algorithm is one that runs in constant time or O(1). 222 00:15:51,785 --> 00:15:56,609 Now this time complexity just means that the algorithm will always take the same 223 00:15:56,609 --> 00:16:01,390 amount of time to run regardless of how its input grows in size. 224 00:16:01,390 --> 00:16:06,228 So an algorithm that is running in constant time behaves the same if you 225 00:16:06,228 --> 00:16:10,331 give a 10 elements or if you give a 10 million elements. 226 00:16:10,331 --> 00:16:13,831 It's always still just as fast, which is pretty cool, 227 00:16:13,831 --> 00:16:18,080 but these algorithms are a little bit hard to come by. 228 00:16:18,080 --> 00:16:21,072 More likely what you will see in the real world is some 229 00:16:21,072 --> 00:16:24,960 algorithm that runs in linear time, those are a bit more standard. 230 00:16:26,250 --> 00:16:29,434 And we can say that those run in O(n) time, 231 00:16:29,434 --> 00:16:34,980 where n is the variable that represents the size of the input data. 232 00:16:34,980 --> 00:16:38,070 So n could be 10, if you're passing algorithm 10 elements, or 233 00:16:38,070 --> 00:16:41,230 could be 10 million if you're passing the 10 million elements. 234 00:16:42,350 --> 00:16:44,985 And when something runs in linear time, 235 00:16:44,985 --> 00:16:48,396 what that means is that as our input data increases, 236 00:16:48,396 --> 00:16:53,530 our algorithms runtime increases linearly in proportion to that input data. 237 00:16:55,800 --> 00:17:00,598 On the other hand, a terribly slow algorithm might run in something 238 00:17:00,598 --> 00:17:04,510 called quadratic time or O(n-squared). 239 00:17:04,510 --> 00:17:08,181 Now, you can imagine if n is the input data, 240 00:17:08,181 --> 00:17:12,260 how that algorithm runs as the input data grows. 241 00:17:13,990 --> 00:17:18,197 Basically an algorithm that runs in quadratic time is one that gets extremely, 242 00:17:18,197 --> 00:17:20,600 extremely slow as its input data increases. 243 00:17:22,070 --> 00:17:28,499 Its performance is directly proportional to the square of the size of its input. 244 00:17:28,499 --> 00:17:33,392 And you can see this kind of algorithm a lot when you write code that has lots of 245 00:17:33,392 --> 00:17:35,580 nested loops within it. 246 00:17:35,580 --> 00:17:39,746 Those are often algorithms that run in quadratic time, and 247 00:17:39,746 --> 00:17:42,110 those are things to avoid. 248 00:17:42,110 --> 00:17:45,782 Now you know what they look like. 249 00:17:45,782 --> 00:17:49,380 But as I mentioned, we don't just need to be efficient when it comes to time. 250 00:17:49,380 --> 00:17:52,520 We also care about efficiency when it comes to space too. 251 00:17:54,100 --> 00:17:58,330 We usually wanna know how much space or memory an algorithm will use up. 252 00:17:58,330 --> 00:18:03,340 So if you find yourself asking, how much memory will this algorithm require? 253 00:18:03,340 --> 00:18:07,410 You're really just asking what's the big O space complexity of this algorithm? 254 00:18:08,450 --> 00:18:11,459 Another way of phrasing that same question is, 255 00:18:11,459 --> 00:18:15,532 how much memory will this algorithm require as its input grows? 256 00:18:17,613 --> 00:18:21,395 And measuring efficiency doesn't just apply to algorithms, 257 00:18:21,395 --> 00:18:23,545 it applies to data structures too. 258 00:18:23,545 --> 00:18:27,707 If you find yourself asking how much space does this data structure take up, 259 00:18:27,707 --> 00:18:32,340 then you're really asking about the big O space complexity of that data structure. 260 00:18:33,970 --> 00:18:36,658 So you can see how you can talk about and 261 00:18:36,658 --> 00:18:40,950 consider efficiency with lots of different perspectives. 262 00:18:42,210 --> 00:18:47,694 Big O notation is pretty cool because it allows us to evaluate the space and 263 00:18:47,694 --> 00:18:52,170 time complexity of data structures and of algorithms. 264 00:18:52,170 --> 00:18:57,340 And it gives us this language to help us standardize how to talk about efficiency. 265 00:18:59,430 --> 00:19:04,191 So all three of these core concepts, data structures, algorithms, big O notation, 266 00:19:04,191 --> 00:19:05,900 they all build on one another. 267 00:19:07,480 --> 00:19:11,323 And as you learn a little bit about one, you reinforce your knowledge and 268 00:19:11,323 --> 00:19:13,150 understanding about the others. 269 00:19:15,180 --> 00:19:21,835 So the question is, of course, how do you go about learning all of this stuff? 270 00:19:21,835 --> 00:19:26,026 I have to answer this question when I was teaching myself computer science and 271 00:19:26,026 --> 00:19:28,920 there's really no one right answer. 272 00:19:28,920 --> 00:19:33,180 But I do wanna share a couple of strategies that really helped me when I 273 00:19:33,180 --> 00:19:37,530 wanted to learn these concepts but I didn't really know how to start. 274 00:19:39,300 --> 00:19:44,220 So my first piece of advice is to just pick one topic and start learning. 275 00:19:45,330 --> 00:19:49,681 From there you'll stumble upon other related topics and 276 00:19:49,681 --> 00:19:52,589 you'll expand what you don't know. 277 00:19:52,589 --> 00:19:55,980 And that's okay because the first step to knowing what to learn is knowing what you 278 00:19:55,980 --> 00:19:57,441 don't know. 279 00:19:57,441 --> 00:20:01,852 So just pick one topic and focus on understanding that really well. 280 00:20:01,852 --> 00:20:06,274 And maybe that means you start with a data structure that you've always wanted to 281 00:20:06,274 --> 00:20:09,604 know about, or maybe you learn about a specific algorithm. 282 00:20:09,604 --> 00:20:13,560 Or you can do what I did, which was just to learn what binary is and 283 00:20:13,560 --> 00:20:18,324 how to count in binary, which is something I didn't even cover in this talk, 284 00:20:18,324 --> 00:20:20,111 but it's also pretty cool. 285 00:20:20,111 --> 00:20:23,641 Next, figure out how you learn and 286 00:20:23,641 --> 00:20:30,106 then find a resource that works best with your learning style. 287 00:20:30,106 --> 00:20:32,275 If you're an auditory learner, 288 00:20:32,275 --> 00:20:35,920 maybe that means you need to find a really good podcast. 289 00:20:35,920 --> 00:20:38,963 And if you're a visual learner, find those books and 290 00:20:38,963 --> 00:20:42,557 blog posts that really are gonna cater to your learning style. 291 00:20:42,557 --> 00:20:47,391 And you're somewhere in between, maybe a video would work best for you. 292 00:20:47,391 --> 00:20:52,069 Knowing how you learn is going to help you narrow down resources that best 293 00:20:52,069 --> 00:20:53,909 match your learning style, 294 00:20:53,909 --> 00:20:58,834 and then you're gonna be even more effective in your own learning journey. 295 00:20:58,834 --> 00:21:03,128 Then try to find examples of what you've learned in the wild. 296 00:21:03,128 --> 00:21:07,244 Look at different frameworks and see if they use a data structure or 297 00:21:07,244 --> 00:21:10,636 algorithm that you just learned about under the hood. 298 00:21:10,636 --> 00:21:15,135 Or find out where that concept that you just learned about actually applies in 299 00:21:15,135 --> 00:21:19,160 the real world, like that example with binary trees and databases. 300 00:21:19,160 --> 00:21:23,253 Computer science is actually just a whole lot more 301 00:21:23,253 --> 00:21:27,058 than anything I've really said today there. 302 00:21:27,058 --> 00:21:28,391 It's more than data structures, it's more than algorithms, 303 00:21:28,391 --> 00:21:29,090 it's more than big O notations. 304 00:21:29,090 --> 00:21:33,415 In fact, this field encompasses things like networks, 305 00:21:33,415 --> 00:21:38,102 computer architecture, security, distributed systems, 306 00:21:38,102 --> 00:21:42,085 operating systems, and that's just to name a few. 307 00:21:42,085 --> 00:21:44,995 This is all to say there is just so much to learn, but 308 00:21:44,995 --> 00:21:48,722 I believe that if you learn the fundamentals, you'll often find 309 00:21:48,722 --> 00:21:52,807 that you'll bump up against some of these other related CS topics too. 310 00:21:52,807 --> 00:21:57,395 And even if you don't need to know computer science 311 00:21:57,395 --> 00:22:02,304 concepts immediately when you're learning to code, 312 00:22:02,304 --> 00:22:06,045 I do think it can be helpful at some point. 313 00:22:06,045 --> 00:22:10,882 Learning CS can help you think in the context of performance and efficiency and 314 00:22:10,882 --> 00:22:16,024 it'll help you recognize pattern, and it will help you in technical interviews. 315 00:22:16,024 --> 00:22:19,347 And sometimes it will even help you in conversations 316 00:22:19,347 --> 00:22:23,738 with people who are a bit gatekeepery and like to throw around terms. 317 00:22:23,738 --> 00:22:27,098 It's pretty empowering to know what those terms mean and 318 00:22:27,098 --> 00:22:30,878 be able to engage in those conversations and feel empowered that 319 00:22:30,878 --> 00:22:34,946 you can understand these concepts even without getting a CS degree. 320 00:22:34,946 --> 00:22:38,386 And a lot of this stuff can be heard at first and it's okay not to know all of it. 321 00:22:38,386 --> 00:22:42,997 When I was teaching myself computer science, I quickly learned that 322 00:22:42,997 --> 00:22:47,698 as an industry, we need a lot more approachable learning materials. 323 00:22:47,698 --> 00:22:51,697 And that's why I wrote down everything that I learned along the way, so 324 00:22:51,697 --> 00:22:54,110 that it would be easier for everyone else. 325 00:22:54,110 --> 00:22:57,850 So the one thing that I hope you will do as you decide what to learn 326 00:22:57,850 --> 00:23:02,579 in your learning journey, whether it's computer science or something else, 327 00:23:02,579 --> 00:23:06,689 the one thing I hope you'll do is share what you learned with others. 328 00:23:06,689 --> 00:23:08,259 Help make it easier for them and for 329 00:23:08,259 --> 00:23:11,138 the next person that tries to learn the same thing that you are. 330 00:23:11,138 --> 00:23:15,558 If you'd like to check out some of the resources that I created while learning 331 00:23:15,558 --> 00:23:18,010 computer science, here are a few of them. 332 00:23:18,010 --> 00:23:21,903 There's the BassDS writing series and a BassDS podcast, 333 00:23:21,903 --> 00:23:25,247 if that's how you'd like to learn new concepts. 334 00:23:25,247 --> 00:23:29,949 And there's also BassDS writing series that I wrote a couple years ago 335 00:23:29,949 --> 00:23:31,712 on distributed systems. 336 00:23:31,712 --> 00:23:36,520 And there are a couple of links to all of these resources, including a link to 337 00:23:36,520 --> 00:23:41,028 the video series that covers a couple of the fundamental algorithms and 338 00:23:41,028 --> 00:23:43,825 data structures that I talked about today. 339 00:23:43,825 --> 00:23:48,086 Finally, I'm working on a brand new resource which I'm gonna be 340 00:23:48,086 --> 00:23:50,807 sharing on Twitter in a couple of months. 341 00:23:50,807 --> 00:23:56,106 So if you're curious to stay up to date with even more computer science resources, 342 00:23:56,106 --> 00:24:01,273 you can follow me there and keep up with all the new CS content that I'm creating. 343 00:24:01,273 --> 00:24:05,066 And that's about it, thank you so much for listening. 344 00:24:05,066 --> 00:24:11,219 I hope you all end up trying to learn computer science and enjoy it. 345 00:24:11,219 --> 00:24:13,555 And even if you decide that you wanna learn something else, 346 00:24:13,555 --> 00:24:15,621 I hope you just have fun along the way while doing it. 347 00:24:15,621 --> 00:24:17,213 Thanks.