Start a free Courses trial

to watch this video

# 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 up**Related 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