what's up guys this is teddy welcome to my youtube channel this video i am excited because today we're going to be starting data structures and algorithms and i'm excited because i've always wanted to do this course like i've been thinking about making a data structure as an algorithms course like almost since i first started programming like i've always wanted to teach data structures and algorithms because i love data structures and algorithms and um it's really like i swear to god like i just i'm not just saying that like it honestly is like a privilege to
be out here teaching data structures and algorithms and i hope you enjoy this course as much as i did making it because i honestly like i literally hop out of bed 3 a.m sometimes just so excited to work on this so um this is how this course is going to work and this is kind of like the warning you don't need to know all of this to get a junior developer role like i'm a self-taught developer and i know the struggles of a self-taught developer so i'm going to distinguish between what you need to know
as a junior developer and maybe even a mid-level mid-level developer but i'm also going to go like the full nine yards like we're gonna go do st we're going to talk about stuff that is going to get you into microsoft it's going to get you into google and i'm also going to you know teach you how to pass college like if you're a college student too but if you're a junior developer you know if you're trying to get your first job and you're self-taught i'm going to make that distinction so just be aware of that
and you don't have to learn everything i know the struggles of being self-taught so you know it's it's not a big deal all right so pre-requisite knowledge you need at least fun to if you don't know anything about programming you're going to have to take a beginner course beforehand and i think that just kind of goes without saying you're also either going to have to know c sharp or java this course is in c sharp but c sharp is so closely related to java it's pretty much the same thing so if you know java you
could probably get away with it too i'm going to be using visual studio in this and um also you're going to need to know about classes in object oriented program if like if you don't know anything about classes and you don't know anything about object-oriented programming there's nothing wrong with that but you're going to be lost a lot in this course so just prerequisite knowledge and what uh you know just be aware of that okay so enough with the introduction quick introduction we're going to go ahead we're going to dive into what every single algorithm
course in java and c sharp talks about and that is the abstract data type and it's kind of got a intimidating word like what is at like abstract data type and really there's tons of definitions for this and everywhere you look online there's going to be a different definition of what an adt or what an abstract data type is but really at the end of the day an abstract data type is just a class and a good way of thinking about this and i think this is just goes for programming in general you have to
just think like what can we really do with computers like just think like you know i think a good acronym would maybe be crud a lot of people would say crud cree you can create data you can read data and actually i'm just going to put that now that i just actually just thought of that so crud you know we can create read update delete data and i think that that would be a good way to describe like everything that we can do with computers but we could probably even go a little bit lower than
that and even lower than that would be we can store data and we can act on data and whenever you hear the word abstract data type a lot of times you get this these this quote that um i've got right here in in the powerpoint is you have representation and operation and at the end of the day list linked list queues stacks all of these data structures are really just classes that are storing data and acting on data that's literally all they are and from that point we are going to go ahead and we are
going to dive into visual studio and we are actually going to start working on an our own abstract data type and for here i'm going to go ahead i'm going to go in here i'm going to create a new project i'm going to create a console app we don't need any type of front any type of fancy framework or anything you can just create a console app uh make sure c sharp linux mac os we're going to do this in net core you could do it in.net framework but i suggest net core then we're going
to go here and i'm just going to call this algorithms data structure and you could call this literally whatever you want to you don't have to um you don't have to copy this word for word course 2022 let's see algorithm data structures course 2022 yeah call it whatever you want to it's not a big deal you could call it test project just uh main thing is is that i would like you to follow along you don't have to follow along if you don't want to but i would like you to okay so we are going
to create our own abstract data type we are going to actually we are going to represent and operate on our own data and the way that we're going to do that is i'm just going to create a folder i'm going to call this adt once again call this whatever you it's not a big deal um and i'm just going to sequentially organize these folders course by course and data structure and by algorithm and then we're going to go in here and i like to be a little bit goofy with my uh classes like i just
like to play around and i like to you know give things goofy names and one of the goofy names that i always give like my classes and a lot of my data structures is i just call them pokemon and i try to model them after pokemon types so if you could put a pokemon in a computer just think about that if you could put a pokemon in a computer what would the pokemon like how would you you know model this pokemon how would you model uh and sometimes people call it a noun or sometimes people
call these things nouns how would you model a pokemon well it really it's up to you you don't have to abide by any rules you could do anything but think about a pokemon in terms of you're storing pokemon data and you're acting on pokemon data so a pokemon is going to have a string and it's going to have a name and we're going to have an integer and then we're going to have exp which is going to be experience and i also am going to have so this is whenever you boot up a class or
whenever you create a class i don't think you're actually booting up a class but whenever you're creating a class this is very fundamental to software development and i never hear anybody explain this to people and hopefully this will blow your mind all classes have this same exact shape and this data in this representation that i'm talking about we're going to go back to it this representation and this operation is indicative of this is the representation and then down here is the um we'll just say bull is pokemon and this is the operation so that is
kind of an app that in a sense is what an abstract data type is and the reason that they call it an abstract data type is because in stack overflow they give the book to telephone book analogy and a pokemon is an abs almost like an abstraction in itself because you actually have individual pokemon you don't just uh whenever you create your pokemon you know in theory your pokemon data structure what you're going to go it what you're going to do is you're going to declare this data structure you're going to call it a specific
pokemon because the pokemon is the abstraction of the actual pokemon that you're going to create and you're going to new this pokemon up just like that and that's the reason that they call it an abstract data type is because this is the abstraction and this is the actual concrete implementation and they call it the abstraction because it's represent representative of all the pokemon and that's kind of the beauty of classes and that's the beauty of abstract data types so you may be wondering well why you know i see where you're going with this teddy but
why do why do they always have this included in the beginning of uh you know algorithm courses and that is because let's just say a stack and this is this is actually built into the microsoft language and if you look at this this stack is literally no different from the squirtle like this the stack is like the exact same thing it's representation of its representation of data and then it's operation of data and then if we go into our stack it's literally the same thing and i'm doing this by its uh clicking go to definition
and then i go into it and it's literally the same thing you have um representations of data and then you have act people actually acting on data and how can you tell like this is a constructor so don't even worry about this but how can you tell the difference these are functions you are acting on the data you're acting on the squirtle name in this one you're you know you're acting on this data you're manipulating this data within this class and it's class is logically storing data for you you could i guess in theory you
could just go in here and have all of your data just stored down in the program cs but we don't do that because classes are almost like drawers for data and a good analogy of this is when i was a a kid we had my dad had a really nice like a really nice toolbox and if you touched anything in my dad's toolbox and you didn't put any you know stuff back in my dad's toolbox he would literally come home and he would start yelling at you because that's you know that's all his all his
tools are in there and that's kind of what you want to think about as a class a class is you know where we house all of our data in logical places and we do that simply because we want to know where our properties are at just like my dad wants to know where his tools are at and we could have just variable name and we could just you know store everything in here in the actual program cs file but that would become unwieldy so that's the reason that we make classes that's the reason why we
put everything inside of abstract data types and classes is because we need a place where we can logically house the data and represent them and act on them in ways that don't get unwieldy and just having variables strewn throughout your program so that is abstract data types i hope that was that was a good explanation for you guys and the next video we're going to move on to big o notation and we're going to get this thing going and you guys are going to become algorithm masters smash that like button smash that subscribe button and
as always thank you for watching