"Java Objects (Retired)" was retired on January 31, 2017. You are now viewing the recommended replacement.
Well done!
You have completed Treehouse Festival July 2020!
You have completed Treehouse Festival July 2020!
Intro to Computer Science with Vaidehi Joshi
24:22 with TreehouseComputer science is a crucial skill for developers. However, you don't need a computer science degree to work as a developer. In this video, Vaidehi introduces computer science concepts and discusses her path to tech without a computer science degree.
Presentation Slides (Right Click + Save Link As):
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upI'd like to welcome up our first speaker of the day. 0:04 She is a senior engineer at Dev, where she builds community and 0:08 helps improve the software careers of millions. 0:13 She enjoys building and breaking code, 0:17 though loves creating empathetic engineering teams a whole lot more. 0:19 She is the creator of BaseCS and BaseDS, two writing series exploring 0:24 the fundamentals of computer science and distributed systems. 0:29 She also co-hosts the BaseCS podcast, and 0:34 is the producer of the BaseCS and Byte Size video series. 0:38 Please welcome Valdehi Joshi. 0:44 Thank you. 0:47 >> I'm so excited to be speaking at the Treehouse festival and 0:49 to be here with all of you. 0:52 And I'm especially excited to be sharing a little bit about one of my 0:54 favorite topics, computer science. 0:58 So, a little bit about me to start. 1:01 I'm a senior software engineer at Forem, the open source software that powers Dev. 1:04 And I also think it's worth mentioning that I did not go to school for 1:09 computer science and I don't have a CS degree. 1:13 In fact, my degree is in English. 1:16 So I learned to code at a boot camp about six years ago, and 1:19 I have been working professionally in the tech industry ever since then. 1:22 And when I was first learning to code, 1:27 I didn't really know what computer science was. 1:29 It was only when I started interviewing for 1:33 my second engineering role that I started to hear a few computer science terms and 1:35 concepts being thrown around and they came up in technical interviews. 1:40 And in these technical interviews, 1:45 I started to realize that these concepts were coming up again and again. 1:47 And I didn't really know that much about what people were talking about. 1:51 I didn't really know the terminology and the jargon that they were using. 1:55 And it was that experience that made me want to learn more about computer science, 1:59 and it made me want to fill in those gaps in my knowledge. 2:05 I'm someone who really doesn't like being out of the loop and 2:09 not knowing what's going on. 2:11 So that was pretty good motivating factor. 2:13 And when I decided that I wanted to fill in those gaps in my knowledge, 2:17 I decided that the easiest way to do that would just be to teach myself 2:22 computer science, which is a pretty bold idea but definitely doable. 2:27 A lot of people have done it. 2:32 And the way that I went about doing this was sort of creating a schedule for 2:33 myself and I decided that for a whole year, I was going to learn 2:39 one new computer science concept every single week for the entire calendar year. 2:44 And I decided that I was going to write about every new concept that I 2:51 was learning during that year too. 2:55 And the culmination of this project was something called BaseCS, 2:58 a year long writing series that included all of the computer science 3:03 topics that I taught myself throughout that year. 3:07 So if you've ever heard CS terms or concepts being used in a conversation and 3:11 find yourself nodding along, but you didn't really know that much about them, 3:17 fear not because you're not alone. 3:23 And that is exactly the way that I started out too. 3:25 And my hope is that by the end of this talk, 3:30 you'll have a better sense of what computer science is, and some of 3:33 the core concepts within the fields and how to go about learning it too. 3:38 And the other thing I wanna note is that it's impossible 3:43 to cover everything about computer science in just 25 minutes. 3:46 It's a huge field and 25 minutes is really not a long time. 3:50 But hopefully, this is going to be a helpful first step in your 3:54 journey in learning more about computer science. 3:59 So let's start with the basics. 4:03 What on Earth even is computer science? 4:06 Well, if you look up the definition of the field, you'll see that 4:09 computer science is defined as the study of computation and information. 4:14 If we look up the definition of computer science, 4:20 we can see that it's actually not just one field, there's all these subfields and 4:24 specific discrete topics within that field too. 4:29 But in my opinion, computation and information, 4:33 those two words really do encompass the way that I think about computer science. 4:37 If you think about it, computation really just means calculation. 4:43 And information really just means data. 4:50 Computer science is a combination of making calculations and dealing with data. 4:56 If you look at CS with this lens, with this perspective, 5:03 you start to see that understanding some fundamentals of computer science helps 5:08 us think about and interact with and manipulate information and data. 5:14 And oftentimes, we're making calculations about that data and 5:19 figuring out how to modify it to fit our needs. 5:25 Now, if you're learning to code, it can be hard to know how these two things, 5:29 computation and information, how they fit into your life. 5:35 And that can make it hard to know where to start learning computer science. 5:41 But the reality is that you've probably already thought about both 5:45 of these concepts in some capacity whether you realize it or not. 5:50 If you've ever thought about how to structure some data, 5:55 you were brushing up against computer science. 5:59 If you've ever thought about how to sort through or find some data, 6:02 you were dabbling in computer science. 6:06 And if you've ever thought about how you can make your code 6:09 just a little bit faster and a little more efficient, 6:13 you're flexing your computer science muscles then, too. 6:17 And it's this idea of computation and information that maps really quite 6:22 well to two of the core concepts in computer science. 6:27 Data structures and algorithms. 6:30 Now, data structures are information part of computer science, 6:33 while algorithms are that computation aspect. 6:39 And data structures and algorithms were the two main concepts that I first 6:44 started learning when I wanted to teach myself CS. 6:49 And I found that if you start with these two topics first, 6:52 you'll often run into other related topics along the way. 6:56 So let's start with data structures first. 7:01 A data structure is really just a way of organizing some data. 7:06 If you're learning to code, 7:12 you probably already run into data structures in some shape or format. 7:14 For example, arrays and objects are actually both just 7:19 data structures, so are sets and dictionaries. 7:25 When you're learning to code, you are forced to use the data structures 7:30 that are built into whatever programming language you're using. 7:34 Because that's what you have to use in order to store any data that you 7:38 care about. 7:42 And computer science is really no different. 7:42 When you study CS, 7:45 you'll encounter different kinds of data structures that let you store your data. 7:46 The only difference is that you might have not seen them in the programming language 7:52 you're learning before. 7:56 For example, you might have heard of and use something called an array. 7:59 But arrays aren't the only way of organizing data. 8:04 There's also something called a linked list, 8:08 which is a linear data structure that orders data sequentially. 8:11 Here's an example. 8:16 Each element within this linked list is stored within something 8:19 called a node and each node holds that data. 8:24 Each node also has a pointer or reference to the next node and 8:27 that's sort of where the linking of the list comes from. 8:31 Now even if you've never seen this data structure before, 8:35 at the end of the day, all this is, is just another way to organize your data. 8:39 Learning about different data structures through the eyes of computer science 8:44 can show us the different ways to structure information and how to hold it. 8:50 And it can also show us scenarios when certain data structures are more useful 8:55 and situations when they're less useful and maybe not the right tool for the job. 9:01 For example, 9:07 the Ruby programming language does have an array data structure built in. 9:08 But what it doesn't have is a built in binary tree data structure, 9:13 which is what's illustrated right here. 9:17 Now, you might not have seen a binary tree data structure before, but 9:20 keep in mind all it is is just another way of structuring and holding data. 9:24 Immediately off the bat, even if we've never seen a binary tree before, 9:29 we can see that they're different from arrays and linked lists. 9:33 They're non linear, which means that their data is organized non sequentially. 9:37 But they still hold data, they have nodes and they have pointers and 9:43 they're just another way of structuring information. 9:47 And sometimes, using a binary tree might be the right choice. 9:50 And other times, using an array might be the better choice. 9:55 And as you learn about different kinds of data structures, 9:58 you also start to see how and where they are used in computing. 10:03 For example, binary trees, like this one illustrated here, 10:09 are used within databases. 10:13 So in the future, if you're ever dealing with databases, 10:16 knowing what a binary tree is and how it works can be really helpful. 10:21 Some fundamental data structures that you might encounter while learning 10:26 computer science are linked lists, trees, graphs, hash tables, and sets. 10:31 So now that we've sort of covered data structures, 10:39 let's look at the other main concept, which is algorithms. 10:43 Now an algorithm can seem like a scary word, but 10:47 really all it is is a set of instructions. 10:51 And those instructions are used for deciding how to perform a calculation. 10:55 In other words, an algorithm is basically just a function or a method. 11:01 And we use that function or method to help us compute something. 11:06 Algorithms actually couple pretty well with data structures. 11:11 Because every time we have to interact with some data, 11:15 we usually have to perform some computation on it, 11:19 which means that we're relying on an algorithm to do that. 11:23 For example, remember that binary tree we just saw a minute ago? 11:27 Here's an illustration of how to insert an element into that tree. 11:31 Now, inserting data into a data structure needs a set of instructions. 11:36 There's no way for the computer or for a program to know how to do this, so 11:41 we have to give it instructions to tell it how. 11:45 And guess what, those instructions are just an algorithm. 11:48 So in this case, the instructions to add some data to a binary 11:51 tree are the insertion algorithm for this data structure. 11:57 And you can imagine how, just as there's an insertion algorithm for 12:02 this binary tree, there's also a deletion algorithm for 12:06 removing some data from the binary tree. 12:10 Anytime that we deal with inserting, deleting, searching through, 12:13 sorting through some sort of data, we're dealing with an algorithm to do that. 12:19 And as you learn more about data structures, you will naturally learn about 12:25 the algorithms that are specific to that data structure. 12:29 There are also some algorithms that are engineered to solve 12:34 a very specific problem. 12:38 For example, in this illustration you can see a binary search 12:39 algorithm that's being performed on a dataset. 12:44 And the binary search algorithm is something that's used specifically 12:47 to search for or find an element within a sorted collection of data. 12:52 As you learn more about different algorithms, you'll start to see 12:57 that many algorithms build on other algorithms, which is pretty cool. 13:01 So as you grow your knowledge about how different algorithms perform, 13:05 you'll start to see them pop up in the real world. 13:11 And as you learn the fundamentals of algorithms, 13:15 it'll become easier to learn more complex versions of the same ideas. 13:19 So now that we know about data structures and algorithms, there's a third concept 13:23 which I didn't mention before, but I think it's pretty cool. 13:28 I'm gonna throw it in there, there's a third concept which is big O notation. 13:32 And to me it sort of sits right between data structures and algorithms. 13:38 Big O notation is a way of measuring efficiency. 13:43 And efficiency is something that actually applies to data structures and 13:47 to algorithms. 13:53 In fact, we think about efficiency a lot when we're writing code and 13:54 when we're thinking about really intense forms of computation. 13:59 Now, what is big O notation? 14:03 It's really just a way to express the amount of time and 14:07 space that something requires. 14:11 In other words, we can use big O notation to talk about how efficient something is. 14:14 Now this could mean how efficient it is in terms of space, 14:20 it could also mean how efficient it is in terms of time. 14:24 Something to note is that we always talk about efficiency and 14:28 big O notation in the worst case scenario context. 14:33 So we can use big O to talk about how well something performs, and 14:37 decide on if we can improve on that and make it do better and perform better. 14:43 And we can talk about big O in terms of both data structures and algorithms. 14:50 So whenever we ask ourselves, how much time does it take to run this algorithm? 14:55 What we're really asking is, what's the big O time complexity of this algorithm? 15:00 Or, how will this algorithm perform in the worst case scenario? 15:07 All three of those questions really are equivalent, and 15:13 they're all talking about how efficient this algorithm is. 15:16 So when we evaluate how an algorithm runs, we want to know how 15:20 much time it will take for that algorithm to run as its input grows. 15:25 If we give the algorithm more elements to process or 15:31 perform computations on, what does the algorithm do? 15:34 Does it slow down, does it remain the same? 15:37 That's how we can evaluate how it behaves. 15:41 An amazingly efficient algorithm is one that runs in constant time or O(1). 15:44 Now this time complexity just means that the algorithm will always take 15:52 the same amount of time to run, regardless of how its input grows in size. 15:56 So an algorithm that is running in constant time behaves the same 16:01 if you give it 10 elements or if you give it 10 million elements. 16:06 It's always still just as fast, which is pretty cool. 16:11 But these algorithms are a little bit hard to come by. 16:14 More than likely what you'll see in the real world is some 16:17 algorithm that runs in linear time, those are a bit more standard. 16:22 And we can say that those run in O(n) time, 16:27 where n is the variable that represents the size of the input data. 16:30 So n could be 10, if you're passing the algorithm 10 elements, or 16:35 it could be 10 million, if you're passing it 10 million elements. 16:38 And when something runs in linear time, 16:42 what that means is that as our input data increases, 16:45 our algorithm's runtime increases linearly in proportion to that input data. 16:49 On the other hand, a terribly slow algorithm might run in 16:55 something called quadratic time, or O(n squared). 17:00 Now, you can imagine, if n is the input data, 17:04 how that algorithm runs as the input data grows. 17:09 Basically an algorithm that runs in quadratic time is one that gets extremely, 17:13 extremely slow as its input data increases. 17:19 Its performance is directly proportional to the square of the size of its input. 17:22 And you can see this kind of algorithm a lot when you write code that has lots 17:28 of nested loops within it, they're often algorithms that run in quadratic time. 17:34 And those are things to avoid, and now you know what they look like. 17:40 But as I mentioned, we don't just need to be efficient when it comes to time, 17:45 we also care about efficiency when it comes to space too. 17:50 We usually wanna know how much space or memory an algorithm will use up. 17:53 So if you find yourself asking, how much memory will this algorithm require, 17:58 you're really just asking, what's the big O space complexity of this algorithm? 18:03 Another way of phrasing that same question is, 18:08 how much memory will this algorithm require as its input grows? 18:11 And measuring efficiency doesn't just apply to algorithms, 18:16 it applies to data structures too. 18:21 If you find yourself asking, how much space does the data structure take up? 18:24 Then you're really asking about the big O space complexity of that data structure. 18:28 So you can see how you can talk about and 18:33 consider efficiency with lots of different perspectives. 18:36 Big O notation is pretty cool, because it allows us to evaluate the space and 18:42 time complexity of data structures and of algorithms. 18:48 And it gives us this language to help us standardize how to talk about efficiency. 18:52 So all three of these core concepts, data structures, 18:58 algorithms, big O notation, they all build on one another. 19:02 And as you learn a little bit about one, 19:07 you reinforce your knowledge and understanding about the others. 19:10 So the question is, of course, how do you go about learning all of this stuff? 19:15 I had to answer this question when I was teaching myself computer science, and 19:22 there's really no one right answer. 19:26 But I do wanna share a couple of strategies that really helped me when I 19:29 wanted to learn these concepts, but I didn't really know how to start. 19:34 So my first piece of advice is to just pick one topic and start learning. 19:39 From there, you'll stumble upon other related topics, and 19:45 you'll expand what you don't know. 19:50 And that's okay, 19:52 because the first step to knowing what to learn is knowing what you don't know. 19:53 So just pick one topic and focus on understanding that really well. 19:56 And maybe that means you start with a data structure that you've always wanted to 20:01 know about, or maybe you learn about a specific algorithm. 20:06 Or you can do what I did, which was just to learn what binary is, and 20:09 how to count in binary, which is something I didn't even cover in this talk, 20:13 but is also pretty cool. 20:18 Next, figure out how you learn, and 20:22 then find a resource that works best with your learning style. 20:24 If you're an auditory learner, 20:29 maybe that means you need to find a really good podcast. 20:31 And if you're a visual learner, find those books, and 20:35 blog post that really are going to cater to your learning style. 20:38 And if you're somewhere in between, maybe a video would work best for you. 20:41 Knowing how you learn is going to help you narrow down resources that best match your 20:46 learning style, and 20:51 then you're gonna be even more effective in your own learning journey. 20:52 Then try to find examples of what you've learned in the wild. 20:58 Look at different frameworks and see if they use a data structure or 21:02 algorithm that you've just learned about under the hood. 21:06 Or find out where that concept that you've just learned about actually applies in 21:10 the real world, like that example with binary trees and databases. 21:15 Computer Science is actually just a whole 21:18 lot more than anything I've really said today. 21:21 It's more than data structures, it's more than algorithms, 21:24 it's more than bigger notations. 21:27 In fact, this field encompasses things like networks, computer architecture, 21:29 security, distributed systems, operating systems, and that's just to name a few. 21:34 This is all to say there's just so much to learn. 21:40 But I believe that if you learn the fundamentals, you'll often find, 21:44 you'll bump up against some of these other related CS topics too. 21:49 And even if you don't need to know computer science concepts immediately 21:53 when you're learning to code, I do think it can be helpful at some point. 21:59 Learning CS can help you think in a context of performance and efficiency. 22:04 And it'll help you recognize pattern, and it will help you in technical interviews. 22:10 And sometimes it'll even help you in conversations with people who are a bit 22:15 gate keepery, and like to throw around terms. 22:19 It's pretty empowering to know what those terms mean, and 22:22 be able to engage in those conversations, and feel empowered that you can understand 22:25 these concepts even without getting a CS degree. 22:30 And a lot of the stuff can be heard at first, and 22:33 it's okay not to know all of it. 22:36 When I was teaching myself computer science, I quickly learned that 22:39 as an industry, we need a lot more approachable learning materials. 22:43 And that's why I wrote down everything that I learned along the way, so 22:47 that it would be easier for everyone else. 22:51 So the one thing that I hope you will do, as you decide what 22:53 to learn in your learning journey, whether it's computer science or something else, 22:56 the one thing I hope you'll do, is share what you learn with others. 23:01 Help make it easier for them, and for 23:05 the next person that tries to learn the same thing that you are. 23:07 If you'd like to check out some of the resources that I created while learning 23:13 Computer Science, here are a few of them. 23:16 There's the base CS writing series and a base CS podcast, 23:18 if that's how you'd like to learn new concepts. 23:22 And there's also base DS, 23:25 a writing series that I wrote a couple years ago on distributed systems. 23:26 And there are a couple links to all of these resources, 23:30 including a link to the video series that covers a couple of 23:33 the fundamental algorithms and data structures that I talked about today. 23:37 Finally, I'm working on a brand new resource which I'm 23:42 gonna be sharing on Twitter in a couple of months. 23:46 So, if you're curious to stay up to date with even more computer science resources, 23:50 you can follow me there and keep up with all the new CS content that I'm creating. 23:55 And that's about it. 24:00 Thank you so much for listening. 24:03 I hope you all end up trying to learn 24:04 computer science and enjoy it. 24:09 And even if you decide that you wanna learn something else, 24:13 I hope you just have fun along the way while doing it. 24:15 Thanks. 24:16
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up