 this thing if you're looking for this apparently it's next we're here for real specific thank you so much for having me I'm God for you can find me on the internet as chin can code and so my God I have a very exciting announcement to make you see where I'm going with this does anyone know what this is okay well this is since you will happy Friday well so the other day when I was on my flight here I realized the keynote is going to be on Friday and if you're new to the Ruby community you might not notice but there's a there's a tradition where every Friday if we're having a conference we need to do one thing it's Friday huh so if you have not done this before this is what we're gonna do so right now you're gonna stand up move to the middle and we're gonna take a selfie okay so stand up move towards the middle and raise your arms just like they did in the picture and we'll get this is my first time doing it so it might take a while but we'll get through this okay are you ready for this okay let's do it it's not working technology I guess I have to do this by hand okay there we go happy Friday um thank you for doing this with me unfortunately that took a little bit longer than I expected because it's my first time doing it and so I spent all my jokes time on that selfie and so the rest of the talk is gonna be very serious I apologize for that but there won't be any more jokes in this talk I'm very sorry but so anyway with that out of the way we can get down to serious business there is an old Chinese proverb show in you show in you so translated literally it means giving a person a fish is not as good as giving teaching a person to fish or if you prefer there's a more poetic version give a person a fish and you feed them for a day teach a person to fish and you feed them for a lifetime let's take a moment and appreciate the beauty of the Chinese language here since we're all in Taipei this proverb is written in the form of a parallel comparative structure something is not as good as something else right so if you pay if you if you look closely you realize the only difference in the two clauses is the last character the former is now meaning a fish and the letter is a verb meaning to fish or the skill of fishing what's interesting here is that these two characters are homophonic meaning that they have exactly the same pronunciation so there's actually poetic inside joke here if you haven't seen this and is written form before you literally cannot understand it just by listening to the words it's not gonna make any sense um what's equally interesting is that if you look at the first character of the two clauses they're exactly the same but even though they're exactly the same character using the first clause the character means to give but using the second clause means to teach this character also has other meanings like to grants or to gifts and it's no coincidence that they all share the same character teaching is ultimately giving up a gift in the form of a skill and the best thing a teacher could teach is the meta-skill of self-learning which is a gift that would feed the person's intellect for a lifetime all of these are pretty uncontroversial if you talk to any teacher or educator I think everyone would agree that that's ultimately what they're trying to accomplish however 21st century economy makes things pretty difficult turns out most of us are not farmers or fishermen anymore so in today's economy what is the fish and what is the skill of teaching what does it actually mean to teach someone to fish in tech the line is even more blurry let's say if we teach someone to build a rails app today is that teaching them a skill or is that just giving up giving out a fish double courage in a few years what about teaching programming many cities have announced plans to bring programming into the regular school curriculums does that count as teaching the skill of fishing or in our industry what does it really mean to learn to fish you have probably heard this before it goes like this a job as a programmer or as a software engineer is to solve problems in other words the fishing skill we want to teach in our industry is called problem-solving skills well this is a pretty noble goal it's not particularly helpful here because it's so big as far as I can tell this description is so big that it basically applies to every pretty much every discipline in today's economy for example when your client with too much money walks into your office your job as a financial adviser is to help them figure out the right investment strategy that would maximize their wealth for them so sadly this is not a problem I personally have but that definitely sounds like problem-solving to me so well I would love to think of myself as a magic magical problem-solving oracle that is not really helping us here our industry is kind of in love with the idea of disruption lately startups like Uber and Airbnb have identified some inefficiencies in existing markets and industries so they came up with a fresh approach involving technology ignored all the rules along the way and basically changed the game entirely for the industries for the most part is to change for the better as a consumer I love the products when I arrived here at the airport the other day I talked in Uber right to my hotel later this week I will be traveling a lot around Taiwan staying in a few Airbnb places along the way unfortunately while there are plenty of rules that are just creating friction and inefficiency in the market there are also plenty of rules that existed for very good reasons and very important ones as a society we have encoded decades of learning into these regulations and throwing all of them out and starting over again meaning we have to relearn all those lessons painfully along the way take the taxi industry for as an example many cities have accessibility requirements to ensure people traveling in a wheelchair can reliably hitch a ride likewise the hotel industry have important zoning fire code and insurance requirements to ensure everyone's safety in tech education we have a similar phenomenon there are some clear inefficiencies in our computer science education system programmers and software engineers are in very high demand these days as you might know you need a lot of them and we want them right now the computer science degree takes four years in most schools and that's way too long and that costs too much money besides CS programs don't even produce that many good programmers academia is pretty out of touch with the industry and what they teach in school these days are not that useful in the real world a lot of CS graduates doesn't even have the right skill to do the jobs that are actually in demand and market so what do we do well we disrupt the education system of course we came up with these new programs called co-schools and bootcamps training new entrants on exactly what we need in the industry right now in the shortest amount of time possible just like people in Airbnb I actually love that idea and my company we recently hired a new employee who came from my code background and she's a excellent fit for the role we're hiring hiring and we couldn't be happy with the result um yes just like river and Airbnb I can't help the feel that we might be throwing out the baby with a bathwater here computer science as an academic discipline have existed for much older than for much longer than you might think while the traditional system is far from perfect perhaps there are some good reasons on why it's structured the way it is today and perhaps there are some reasons why the fundamental CS classes have retained more or less the same shape in over a decade as Rex you mentioned I came from a traditional CS background myself I went to Canadian school called Simon Fraser University for a CS degree and I also spent some time at National University of Singapore as an exchange dean they both have excellent CS programs and I'm very grateful for my education there on the other hand as a CS graduate I can definitely understand a lot of the criticisms people have about CS programs just like most of you I spent most of my career working on web technology so far and my big job perhaps not unlike most of you involved writing Ruby Rails JavaScript working with the browser optimizing SQL queries scaling out servers and so on it is indeed true that I didn't learn any of those things from school I have to learn all of them myself on my own time outside of the regular school curriculum just like everyone else come to think about it I didn't even learn that much about programming at school there just weren't that many programming assignments at all and I was mostly just taught and tested on the conceptual and theoretical level two years ago VHH the creator of Rails gave a keynote at RailsConf describing out occupation as software writers that is a big part of a job is actually to write beautiful code with an emphasis on clarity by that standard my CS education were actually pretty terrible I don't think I was ever once created on the clarity of my code or even given any kind of feedback on the code quality in my programming assignments all I needed to do was to submit programs that work and that's it the words refactor and unit tests never once came up during my academic career it's like not only do they not teach me to fish all we did was basically sit in a room all day and be like given a few ways of catching fishes how do we prove that one of them is more efficient than the other ways as it turns out computer science isn't even really about programming in fact we might not have that much to do with computers after all the extra of their famous computer scientists once said this computer science is no more about computers than astronomy is about telescopes so perhaps it's not a coincidence that my school chose to name the CS department the School of Computing Science rather than computer science so if CS isn't really about programming and it isn't really about computers and I didn't learn any of the work skills I needed from school does that mean the critics were right and I basically wasted five years with my time well I can't speak for it I can't speak for everyone but personally I'm actually really glad I did it I happen to really enjoy learning about the topics they taught at school and so if nothing else I had a lot of fun learning about those things but I think there's probably more to it somehow I'm pretty sure I wouldn't be able to work on the stuff I do today with all my CS backgrounds and or at least it would have to it would have taken me much longer to get here it's not just about the knowledge either like most people will tell you I didn't end up using most of the things that learned at school in my CS program and even for those things that are actually useful later on by the time I need them I already forgotten I have already forgotten most of the details so I have to relearn them anyway but there is something magical about the experience I went through something that really changed the way I think and the way I learned in ways that really helped me later on in my career I think during my time in school I might actually have taught myself to fish now I'm not I'm certainly not saying that a four-year CS degree is the only way to acquire this magical skill of fishing during my career in the industry I have had the privilege to work with and learn from a lot of smart people who didn't go through the traditional CS patch and yes they have definitely cracked the same nuts on the other hand this is far from a skill that you automatically take up just by going through four-year of CS program I have seen plenty of CS graduates that didn't leave the school with these skills and have to struggle a lot when transitioning into industry work nevertheless since my CS education seemed to have helped me develop the magical skill of fishing maybe I could try to sit down and figure out what exactly it is and which aspects of my CS education helped me to get there if we can identify this skill then we can talk about it concretely and perhaps we could figure out ways to make that easier to pick up for people and try to replicate that and code schools even so that's what this talk is going to be about and I think I might have an answer for you again but let's come back to that a little bit later for now I would like to take you on a slightly tour when I was in school I also did minor in cognitive science for those of you who are not familiar with it cognitive science is an interdisciplinary study of the human mind in English that means a study of how human thinks sitting at the intersection between computer science and cognitive science is a field called human computer interaction also known by other related names like user experience design or user-centered design the best way to tell you what this field is all about is perhaps to show you about it and my company recently bought a new trash can in the office it's not just any trash can it's a smart trash can it has buttons it's perhaps a little bit dark but as you can see there are two physical buttons on the trash can I don't know if you can see it but the one on the left has labeled closed and the one on the right has labeled open those two buttons that's pretty much what you would expect seems to be straightforward but now there's a problem sometimes the open button doesn't actually work pressing it does nothing oh well maybe the trash can is broken no problem as you can see there's that indentation above the buttons that let's you put your finger in there and manually open the lid that works right but it kind of deheats the purpose of the smart trash can don't you think well eventually we realize something off there's an LED light in between the two buttons and sometimes the LD will turn green and it seems like that whenever this happens the open button on the trash can will stop working well as it turns out this smart trash can is very smart it's actually what you might call a state machine at any given moment it either thinks the lid is in the open or closed position naturally when the lid is open the only thing can do is to close it and when the lid is closed the only thing you can do is to open it the problem is the internal state in the trash can can go out of sync with reality when someone use the button to open the lid but decide to slam the lid down manually the trash can will incorrectly believe that it's in the open state when the lid is physically closed in this case when you try to press the button it will not do anything useful it also turns out that the LED is supposed to indicate this internal state the green LED actually means that it's in the open state and a blinking red for whatever reason means closed but there's more actually it turns out none of these things actually matter because we shouldn't even be using the buttons in the first place you probably can't see it but turns out there's a sensor between the two buttons and what you're supposed to do is you're supposed to walk up the trash can wave your hand above it and it's going to open briefly so you can put your garbage in there and a few seconds later it will automatically close itself now I see why they call it the smart trash can so surprisingly even though this example does not involve a computer at all it basically showed all the important concepts that makes the bricks a good interaction design I won't get into too much of details here but if you're interested in learning how to design a better trash can or how to design better user interfaces I strongly recommend you to read a book from Don Norman called the design of everyday things what interests me here is the process of how people in the office learn to use this trash can something Norman calls the human action cycle it's a loop involving a few steps goal formation execution and evaluation turns out when when you as a human interact with a physical object or or a user interface the first thing you do is to form a goal in this case your goal is you want to follow the garbage from your lunch into the trash can so okay now you have a goal the next step is to formulate a plan to achieve your goal and to execute that plan so in this case you might think I should probably go up to the trash can press the open button put my garbage in there and I'm done the last step though is actually the crucial part that evaluation stuff so what you do here is after executing your plan you need to observe the result of the plan and interpret the outcome that it works that the result match your expectations if not in this case the lid didn't open you need to go back to the step to the first step but this and start over again but this time you will feed what you just learned from the previous cycle into the next cycle so you would adjust your goals and your plans accordingly perhaps you would try to manually open the lid with your finger so what's happening here is that humans have a mental model of how to interact with physical objects and using faces you start over pretty simple pretty fuzzy mental model but as you go through the human action cycle you will keep learning and keep refining your mental model and eventually you will even something as bizarre as the smart trash can in our office eventually you will you will arrive at the right mental model and you will be able to use it what sets a good design apart from that design is a good design naturally guides the user to form the correct mental model so while steering away while steering them away from the incorrect mental models when a user is meant to model this in a match reality you will have you have some preset users as you can see in in the case of our trash can this is sometimes summarized as the usability iceberg on the top you have the parts that sits above water in other words those parts are the visible parts visual things like the graphic design the colors of typography and perhaps Instagram's new logo makes up about 10% of the overall experience they're very visible so people complain about them a lot but at the end of the day if you take into account of everything they're only a tiny fraction of the overall experience then there is the interaction part of the usability iceberg that includes things like does the scrolling feel smooth in your app or does the animation feel smooth right so those kind of things make up another 30% of the over experience so those are only the visible parts of the iceberg though the bulk of the user experience actually comes from the hidden part of the iceberg that sits below the water the mental model that includes things like the flow of the UI matches the user's expectation does it perform the functionality that everyone expects the reason I brought up this usability iceberg is that I think there are a lot of similarities between UX and programming this is perhaps not super surprising because after all programming computer to do stuff by writing code is the form of human computer interaction the source code you're typing is in facts and user interface I think the iceberg analogy applies just as well to programming as it applies to UX on the top of the iceberg you have visual things like coding style the use of white spaces and stuff and need that you have the interaction layer for example this you could feel like assuming you're reading Ruby does it feel like Ruby does it follow Ruby conventions does it take advantage of language features like blocks and keyword arguments but more importantly it's the invisible part that sits under water that makes a bricks the experience the mental model does the code flow naturally does it do a good job of breaking up different concepts into their own objects or their own methods just like it was just like a well-designed user interface well-factored code naturally guides the reader into forming the right mental model having good comments help that things like good naming conventions is also very important having to name things in particular forces you to think more critically about the concepts that that is floating around in your code in fact the Ruby community have realized this a long time ago we have this thing called the principle of least surprise which is really just saying if you leave your users down into forming the wrong mental model you're gonna have some pretty confused and pretty sad users and they're gonna have a bedtime understanding or using your code conventions over configuration is also related to this by sharing the same conventions you can build your mental model once and take it with you everywhere even in code bases that you have that are completely new to you so this is particularly true for Rails if you learn Rails and you get dropped into a new Rails app you know exactly where to find things so mental models are closely related to another concept in programming called abstractions how little abstractions like Rails are extremely valuable because they allow you to start building from the 50th level instead of starting from the ground up every time I don't have to sell that to you you're all here for Rails Pacific so you all have experienced that the higher up the stack usually the higher up the stack the more value you're bringing to your business and your end users so perhaps it's not a coincidence that start evaluations and engineering cell engineer salary are higher than ever before today because we are building on a very high foundation of abstractions and we are we're able to deliver tremendous value right from the get-go so while abstractions are pretty great the ties are turning a little bit against them abstractions are getting a pretty bad rap these days that's pretty understandable a lot of people have been burned by bad abstractions and when you get burned the emotions are so vivid it leads us down to conclusions like oh abstractions can never work they cost you to not understand what you're doing so the only way the only way out is to start from the ground up every time so you like you build exactly like you build your own tools so you know exactly what is going on as an industry we decided to disrupt abstractions by promoting micro libraries building your own framework and assembling your own tools there is actually a terse way to say this Jules will see two point term leaky abstractions at this NSSA while these great tools like more than all form based languages let us get a lot of work done incredibly quickly suddenly one day we need to figure out a problem where the abstraction leaked and it takes two weeks so all abstraction leaked so we should stop using them right well in my opinion while all abstractions leak is the correct observation the way it is being cited these days is really missing the points in science and in statistics we have a similar banner slogan all models are wrong but this is not the end of it the key insight actually comes after this all models are wrong but some are useful let's talk about physics for a second if you study physics in high school you're probably taught to ignore the effect of friction and air resistance in your calculation now this is obviously the wrong model in the real world obviously there are friction and resistant forces but this is far from a useless model it's a wrong model yes but it's not useless it allows you as a high school student to form a good enough mental model to start understanding the world and make certain limited predictions about the world that we live in and this is not just a toy model that we we built for high schoolers it exists as a lot it it exists at a wider scale for example the new the Newtonian mechanics or the classical mechanics that you learn from high school physics is technically wrong but it's good enough for a lot of purposes right however if that model starts to break down on you you can always drop down to a low level of explanation things like thermodynamics quantum mechanics and like perhaps relativity now the fact that Newtonian mechanics is a leaky model doesn't mean it's a useless model in practice just because relativity is a better approximation of reality it doesn't mean you want to think about the signing card in terms of the space-time fabric so scientists are explicitly taught to build models even though everyone knows them all models are wrong in fact these models is the fact that these models are a simplification is actually a feature not a buck the world we live in is too complicated and having these simplified model up gives us the ability to understand anything at all and it also gives us the ability to make some good enough predictions like your weather forecast so in my opinion abstractions serve a pretty similar purpose in our field since abstractions exist to help guide your users and readers to form the right mental model all abstractions leak is merely pointing out the true but an interesting fact that all mental models are wrong just like all models are wrong all mental models are wrong but some are useful and so is abstractions all abstractions leak but some are useful in cognitive science we have a magic number of the we have a rule of magic number 7 that is a human can only keep around roughly seven distinct objects in your working memory at the same time and some people do a little bit better some people do worse when you sleep deprived like me right now you usually do a little bit worse but that's a good enough abstraction for our purpose since seven is such a low number you really need to make very good you need to take good advantage of your very limited cognitive capacity abstractions is a pretty good hack that allows you to group things up into higher-level objects so again keep more of them in your mind at the same time abstractions help you form a simplified mental model by hiding away the unimportant details that you shouldn't be concerned right at this moment of course unimportant is highly contextual so for example if you are designing a car and you decide to ignore the effect of friction you're gonna have a pretty bad time in the real world good abstractions help you establish clear boundaries it helps you put complicated things into your own mental black boxes and so you can stop worrying stop worrying about them too much for the most part but as we said all abstractions leak so what do you do when the abstractions inadvertently leaks well what happens if the abstractions stop behaving the way you expect well turns out we all know the answer to that that's called debugging that's just developers that's part of what we do every day of course one way to fix that problem is to just throw stuff at the wall and see what sticks basically just keep trying to change your code until something works we we all do that from time to time I do it and I wouldn't judge if you do it too but that should feel deeply unsettling to you at work I pair with my colleague who they catch a lot whom you might know from his work on rails and ember and when we are pair debugging a face that you hear a lot from my office is I have no mental model how anything works anymore and the reason that is true is when when we're working on big code bases like rails and ember since we can only keep seven things in our head at once we have to lean very hard on our abstractions and mental models in this case one of the mental objects that takes up a slot might be the router or the view layer when you when you cast an S so wide obviously it's going to be a very leaky abstraction but that's okay without these kind of abstractions or these kind of simplifications we would not have the ability to work on big things at all and even though you might not be working on ember or rails unless your job is to write micro libraries like left pad all day this will probably dare some resemblance to your development workflow too and so since we lean so heavily on mental models we are leaning very hard on them being corrects and as a result if they if they don't match reality any of the assumptions we have made along the way could be wrong and that could jeopardize the whole day of work and worse in my it might even jeopardize our future ability to keep working on a code basis therefore when we notice this press when we notice that our mental model seems to be drifting away from reality we usually treat it as a as an emergency that requires immediate attention now when that happens it's not necessarily your fault sometimes this is indeed caused by misconception in our head but other times it might actually just be a bug in the abstraction layer below either way we need to figure out the source of the bug and either patch the code or fix our own mental model if you're lucky sometimes this all it takes is basically just to carefully reread the documentation in an ideal world abstract the abstractions we work with will naturally guide us along the right path and towards the right mental model but in the real world bad designs like the trash can we saw earlier are everywhere and you can't always fix them all having the ability to notice that some of the signs of that allows you to build an accurate or at least gives you the ability to try to build a more accurate mental model despite the deficiencies in the abstraction and which gives you the ability to work around or work with these poor designs so that's for on a good day all you need to do is just read the documentation again and realize you're doing something stupid and fix your code but a lot of the time it's not so simple a lot of the time the only way to figure out what actually went wrong is to dig into the abstraction layer you're sitting on Joe who again coined the term leaky abstractions wrote this in his essay when you need to hire a programmer to do mostly visual basic programming it's not good enough to hire just a visual basic programmer because they will get stuck in tar every time the visual basic abstraction leaks and I think that probably matches the experience with rails or other kind of abstractions that you're working with on day-to-day basis as well sometimes you just have to know what's your sometimes the abstractions just leads enough that you have to actually understand the details that is trying to abstract away from you in order to fix the problem so traditional computer science education try to solve this problem by using a bottom-up approach in most CS curriculum you usually start from the bottom most layer and learn your way all the way up the stack of abstractions for example in your first year you probably do a mix of programming computer architecture discrete math and calculus once you have these foundations in place you can move up to things like data structure algorithms statistics and maybe linear algebra for your second year then in your third year you may learn about operating systems databases artificial intelligence and computer graphics then finally in your fourth year you can take all these knowledge that you've learned apply them to things like networking information systems computer vision and maybe computer animations supposedly the nice thing about the system is that even though you rarely have to go so deep to the other way to the bottom of this the abstraction stack because you have learned all the way up one layer at a time when something goes wrong you always have the ability to dig into the lower layers should you need to there's a problem though since there are so many different topics to learn I'm only showing four columns here but there are many many many more columns you don't really have time to build that high and your four years in school since everyone in the real world actually builds from the 54 learning up to the 24 in school seems like a lot of really short stack supposedly let's suppose you actually want to build a JavaScript app on the browser well your CS education stopped in the information system level and so what do you do you have to somehow figure out the stuff in between and then you learn the 50 of level rails and ember and so on or suppose you want to build a game but your CS education stopped as stopped at the theory behind computer animations what you do so since we're so used to building up in baby steps in school jumping from 20th floor to the 50th floor it's a very big jump for a lot of people and many of them fall falls off the CS cliff and fail to or struggle to connect the dots between their education and their industry work cold schools on the other hand realize a thing it turns out that we as an industry are pretty good with building abstractions these days and when you're working with something like rails it's very rare that you have to take all the way down to the operating system level to figure out what's going on so perhaps we can just start from the 50th level and teach all the way up instead of going all the way down to computer architecture since you don't need them with time anyway so this actually has the opposite problem what happens if you do need to go down not maybe not all the way to the operating systems level but what if you just need to go down one level underneath rails hopefully you eventually learn them somehow maybe your job will teach you now the CS cliff is real but so the CS cliff is real and the cold school observation is indeed correctly most of the time you don't need to go down those layer but neither of those are as perfect or as sufficient what you actually need is the ability to pop and pop up and down the stack and not be intimidated by going down one more level underneath you lazy learning just like SN lazy loading is fine you can learn you can learn things on demand as you need them but again you need to not be intimidated to do that and have a good framework for learning things on demand I would argue that this is actually the meta-scale of fishing in our industry the specifically the ability to think abstractly and operate at the mental model level and also the ability to learn the same on demand and not be intimidated by going down one more level more generally the ability to operate on mental models the ability to acknowledge that these mental models exist the ability to acknowledge that they are a simplification they're not perfect they are they will leak but knowing what to what to do when they do leak is a very important skill to have in our industry now the structure of the traditional CS education system happened to happen to help me learn those skills along the way but it's far from guaranteed the way the way that these skills of pop in the traditional path is more or less incidentally embedded in the structure of the program hopefully if you if you build one layer up every time and you do it four years in a row hopefully you realize that these layers exist and you will be confident about your ability to keep learning up because you will you realize out things might be pretty things might look pretty difficult on the outside but I can do it I can I can learn about these things but that's that's not very explicit right like that's basically leaving it up to the students to connect the dot themselves maybe we can maybe there's something we can do about that to make that more to make that structure more explicit maybe we can do better about giving out mental roadmaps to giving us students mental roadmaps to other layers without getting into details it's good to know that they exist even for as a co-school student it's good to know what's you're sitting the what is the abstraction stack that you're sitting on even though you might not have time to get into all of details and we are not done here right regardless of whether you came from a traditional CS background or a co-school background there's always more to learn in CS you have to learn the stuff between 20th floor and the 50th floor yourself and when you get out to the industry as a co-school graduate you might need to learn down the stack as you encounter problems so regardless of where you came from you actually need the skill to do this in the real world anyway and that brings us back to the human interaction cycle you basically have to keep refining your mental model as you encounter as you learn so if you you can start with pretty fussy mental model of well this is real this magic for me but as soon as that doesn't work you have to evaluate that ah something about my mental model about this piece is not correct let me dive one level deeper to figure out what's what's wrong there is a more generic version of the human action cycle in the academia it's called a human unique circle this is originally used to describe how Bible spoilers study the Bible basically the idea is to understand the full text you must understand both the way to understand the full text is to understand the individual parts of the text and the only way to understand the individual parts of the text is to understand the whole thing so it sounds circular which is why it's a circle but the idea is you have to take into account all the things as you try to understand something you need to start with the big picture perhaps the history the culture of the the background of the text you're trying to read and you need to have a holistic view of the text and then you can zoom in on the individual parts but then you're not done you have to look back to big picture and keep going as you go through the circle you'll refine your understanding of the concepts so in the traditional CS education we have a very very big community community circle the whole circle takes four years which is way too long for many people when you get to the end of the circle you probably forgot why you're here in the first place anymore cold school have the opposite problem three months crash course you take a three months crash course and then you go to work but the problem is how do you go back into loop and keep learning we have more resources today than ever before yet we have like things like iTunes you open course where you have book you have book clubs you have meetups we have paper clubs but that requires a lot of motivation and dedication and termination maybe and also as a novel as a novice how do you know what to learn next perhaps we can structure our programs a little bit better to help people get through that cycle so I am running a little bit long time so I skip to the end for you there is a saying it takes a village it takes an entire village to raise a child in my experience that's definitely true my CS education didn't end at SFU like I mentioned I was in the co-op program in my school so I had to do an internship every summer and especially during my first year wherever hide me to do that job took very big risk and on hiring me like what do I know as a first-year student right and a lot of people along the way have made the same kind of investment on me and I probably wouldn't be here with all those trust and those risk takers and those investments I was fortunate enough to get the rails count opportunity scholarship five years ago in rails count Texas and that's where I met a lot of my open source mentors and who invested time in me and helped me level up and likewise there are a lot of other people who took risks and invested in me but that's not the end either my CS education didn't start at SFU I actually cheated I taught myself programming since high school but so when I go to most of my CS classes it's already my second or third pass through the human the human eutics circle this started when I met my first mentor my computer teacher in my elementary school who spent time outside of school hours to teach us to build websites and he also handed me my first program in book called professional PHP which is what I used to talk myself programming but that's not the beginning that's not the beginning either as my CS education actually started when I decided to delete all my system files on the computer out of curiosity and my uncle had to come fix my computer for me and show me how to reinstall windows but that's not all either I probably wouldn't be able to do any of these without support from my family who tells me it's okay to explore my interest in a culture where getting top grades from school is the beginning and end of everything I probably wouldn't be able to do any of these things if I give in and let the if I give in and let the weight of the education system deprive me of my free time and I probably wouldn't be able to do any of these if I would get bullied at school for being a geek and I certainly wouldn't be here if I keep hearing people tell me that I shouldn't be doing this just because I'm a girl computer science education is not just about teaching abstractions or program literacy it's also about standing up against bullying gender equity and also reforming our education education system to support kids develop the interest if it takes a village to raise a child it certainly takes an entire fishing village to raise a 21st century digital fishermen so you are all here and you've all made it but we need more fishermen and you all have something to give so I will close with this please pay it forward be the village thank you very much