 Hello Good afternoon. Welcome back from lunch. Can I get a show of hands who who's still awake? All right, I will try my best not to lose the 15 of you during my talk Hello, I'm God free as you can see you can find me on the internet as change and code Thank you for inviting me here to your beautiful sea a few years ago I actually lived here for half a year as an exchange student at NUS. Do we have any NUS alumni here? Okay, they're the same 15 of you awesome, I actually haven't had a chance to visit Singapore since then so When Winston contacted me I immediately said yes, I would come here I would love to come if this is the first time you're visiting Singapore welcome You might have heard some rumors that the laws of Singapore is very strict Having lived here for a while. I can tell you that is definitely not true In fact, it's probably one of the most liberal places. I've visited For example, if you eat on the MRT Fine if you smoke on the MRT fine if you ride the MRT with chewing gum fine If you ride the MRT with your dog fine if you ride the MRT with a durian Oh, by the way, if you're wondering where I got that durian emoji from it's actually a tree But Anyway, if If you ride the MRT with durian fine and if you ride the MRT with illegal drugs Well, that one is a little bit different. That's actually More than just fine As you can see seeing it for it's very liberal everything just goes here I need to follow that slide with a very serious disclaimer First of all by looking at this slide you agree that I'm not lawyer and you also hereby agree that What I just showed you is not legal advice. Yes You also agree not to try this here in Singapore and you agree that I might actually have made a serious mistake somewhere and Also, I'm not responsible for your actions And if you really don't get it it was a joke, please don't try it Anyway, since I last came here a lot of change in Singapore in Particular, I think the government have really invested They're really serious about turning Singapore into a tech hub in Asia and they've invested a lot to make that happen For example, this is a new tourist attraction called the Singapore Cloud Forest where tourists can learn about how the cloud works And you can watch the maintenance workers scale your hero coup dinos inside there This there's also another place called the Singapore safari nightly where you can experience the latest shim of five features And of course, there's also the port of Singapore where they take care of your container needs Now of course even the name of your conference. This is this is the reddit ruby con rate I hope I hope you're at the right place because I'm definitely at the right place. Oh, by the way Speaking of the conference, I don't know if you realize this, but if you look at the bottom of name tag There is actually a singlish slang there And if you're not from here, you probably have no idea what it means, but that's totally okay The idea is that you will make some local friends here at the conference and they will explain that to you so for example Here mine sets speaker and I have no idea what that means in singlish Hopefully not something offensive, but if you know what that means, please come talk to me after you talk To quickly recover From the credibility I lost in the last few minutes. I would like to point out that I'm actually on the rails core team The Asian guy at the bottom row. That's me. If you still don't believe me, I have some extra proof See I've acquired the standard issue rails core team presentation templates also come in black On a more serious note rails 5 RC 2 has been released this morning. You should all try it But unfortunately, that's all I'm going to talk about for rails today If you would like to learn more about rails 5, please watch Jeremy's keynote from rails count this year And as you can see he also has the rails core team presentation templates, so you know, he's legit Instead of talking about rails, I would like to talk to you about education today There is an old Chinese proverb show in you Show in you. That was not a joke. By the way, the joke part is over for today But translated literally it means giving a person a fish is not as good as teaching person to fish If you prefer, there's also a slightly 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 Now The proverb is written in the form of a parallel comparative structure something is not as good as something else If you look closely the only difference between the two clauses is in the last character The character on left means a fish and the character on the right means to fish So giving a person a fish is not as good as teaching a person to fish Now there's actually a pretty cool easter egg here that is kind of lost in translation These two characters are homophonic meaning that they have exactly the same pronunciation So therefore if you heard this saying from someone without seeing the actual written words It wouldn't make any sense to you because the two clause sign exactly the same The so besides the last character the first character here is also pretty interesting Even though they're exactly the same character using the first clause means to give but using the second position It means to teach This character also has the meaning of to grant and to gift It's no coincidence that all of these concepts share the same character in the Chinese language Teaching is really about giving out a gift in the form of a skill The best thing a teacher could teach is the meterskill of self-learning Which is a gift that would feed the person's intellect for a lifetime All of these are pretty Controversial every educator thinks that this is what they're doing ultimately and The problem is in our first 21st century Economy things are not as straightforward as that it turns out most of us are not farmers or fishermen anymore So in today's economy, what is the fish and what does it actually mean to teach someone to fish today in? Tech the line is even more blurry If we teach someone to build a rails app today is that teaching them a skill or is that just giving them a fish that would purse in a few years What about teaching programming? Many cities have announced plans to bring programming into the regular school curriculum Is that teaching the students to fish in our industry? What does it really mean to learn to fish? You've probably heard this one before That our job as a programmer or software engineer is to solve problems of people Therefore the fishing skill we need to learn in our industry is called problem-solving skills By the way, the background here is a 19th century painting called consulting the Oracle, which I find quite fitting I mean consulting. That's only what I do, right? Well the problem with these words is that well, it's pretty cool to think of ourselves as a Generalist problem solver. I think it's not particularly helpful here because how big because of how big it is As far as I can tell the description is so broad that basically applies to Literally every discipline in today's economy For example when your rich clients walk into your office your job as a financial advisor is basically to help them figure out the optimal investment strategy to maximize their wealth Sadly, it is not a problem. We personally have today But the job of the job description of a financial advisor definitely sounds like a problem-solving job to me So while I would love to think of myself as a magical problem-solving Oracle I think this is not really helping us here. Our industry is in love with the idea of disruption lately Startups like Uber and Airbnb Identified inefficiencies in existing industries. They came up with new fresh technology centric approaches Ignored all the rules along the way and changed the game entirely for the sector For the most part, I think this is a change for the better when I arrived here the other day at the airport I took an Uber to the place I was staying which happened to be a room. I found an Airbnb as A consumer. I love the products But unfortunately while there are plenty of rules that are just creating friction and inefficiency in the market There are also a lot of rules that existed for very good and very important reasons as a society We have encoded decades of learning into these regulations and Throwing all of them away and starting over means having to relearn these lessons painfully along the way Take the taxi industry for example many cities have established Accessibility requirements to ensure people traveling in wheelchairs 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 education system Programmers and software engineers are in very high demand these days as you all know We need more of them and we need them right now a computer science degree takes three to four years in most schools Which is way too long and cost way too much Besides computer science programs don't even produce that many good programmers everyone knows that the academia is pretty out of touch with the industry and what they teach in schools are not necessarily that useful in the real world today a Lot of CS graduates don't even have the right skills to fill the jobs that are actually in demand on market today So what do we do we disrupt the education system? Of course, we came up with programs like cold schools and bootcamps Training new entrants and exactly what our industry need right now at this moment in the shortest amount of time possible Just like uber and Airbnb. I love the idea at Our company we recently hired a new employee who came from a cold school background She's an excellent fit for the role we're hiring for and we couldn't be happier with the result Yet just like air uber and Airbnb. I can't help the feel that we might be throwing out the baby with the bath water here Computer science as an academic discipline have existed for probably much longer than you might think and while the traditional System is far from perfect. Perhaps there are some good reasons that it is structured the way it is today Perhaps there is a reason why fundamental CS classes retain the same shape and form for over the kid this Decade despite of everything else that is changing around us. I Personally came from a traditional CS background like I said I went to a Canadian school called Simon first university and I did an exchange here at in us They both have excellent CS programs and I was very grateful for my education there On the other hand as the CS graduate, I can definitely understand a lot of the criticisms and where they're coming from Like a lot of you I spent most of my career so far working with web technologies My day job involved writing Ruby JavaScript Rails working with browsers optimizing secret queries Scaling and servers and so on it is true that I didn't actually learn any of that from school I had to learn of them myself on my own time outside of the regular school that the regular school curriculum just like everyone else Come to think about it. I probably didn't even learn that much about programming at school They're 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 DHH gave a keynote at RailsConf describing our occupation as software writers That is a big part of our job is to write beautiful code with an emphasis on clarity By that standard my CS education was actually pretty terrible. I was never once graded on the clarity of my code Nor was I given any feedback on the cold quality of my programming assignments Most of the time what I need to do is submit the program that works and that's all I was graded for The words refector and unit tests basically never came up once during my academic career It's like not only did they not teach me to fish It's like all we did was sit in a room all day and be like hmm Given that there are a few different ways of catching fishes How do we prove mathematically that one of them is more efficient than the rest as it turns out computer science isn't Really about programming and in fact it might not even have that much to do with computers after all Dextra a famous computer scientist once at this computer science is no more about computers than astronomy is about telescopes so if Computer science isn't really about programming and computers and if I didn't learn most of the work skills I needed from school does that mean the critics were right and I wasted five years of my life? Well, I can't speak for everyone, but personally I am really glad I did it I happened to enjoy learning about the topics they cover. So if nothing else I had a lot of fun, but I Think there's more to it Somehow I'm pretty sure I wouldn't be able to work on the stuff I do today without my CS background or at least it would have taken me much longer time to get to where I am today I'm not just talking about the knowledge Like most people would tell you I didn't end up using most of the things I learned from School and even for those things that are actually useful I have long forgotten about the details by the time I need them and I had to relearn everything anyway But I think there's something magical about the experience I went through Something about it really changed the way I think and the way I learned in ways that really helped me later on in my career And I think during my time in school I might actually have taught myself to fish Now I'm not certain I'm certainly not saying a CS degree is the only way to acquire this magical skill of fishing whatever that is During my career I have had the privilege to work with and learn from a lot of smart people who didn't have a CS degree and yet They have definitely cracked the same nuts On the other hand This is far from a skill that you automatically pick up just by going through four years of school I've seen plenty of CS graduates who didn't leave school with this skill and they had to struggle a lot when transitioning into industry work Nevertheless since my CS education seems to have helped me personally to develop at the magical skill of fishing Maybe I could try to dissect that a little bit and figure out what it actually is and which Aspects of my education helped me get there if we can identify this magical skill if We can talk about it concretely perhaps we could figure out how to make that easier for people to pick up or even replicate that in The newer programs like code schools Spiral alert. I think I might have an answer for you. I think that my education have helped me to develop a framework for thinking about programming problems But we'll come back to that later. For now. I would like you to Go on a little detour with me. So when I was in school, I am Also did a minor in cognitive science for those of you who are not familiar with that Cognitive science is an interdisciplinary study of the human mind in English. That means a study of how a human thinks Now sitting at the intersection between Computer science and cognitive science is a field called human computer interaction also known by our related names like user experience design and user-centered design The best way to tell you what this is about is probably to show it to you We recently bought a new trash can in the office to actually It's not just any trash can though. It's a smart trash can it has buttons So there are two physical buttons on the trash can one labeled open on the right and one label closed on the left They pretty much do what you would expect seems pretty straightforward But there's a problem sometimes the open button doesn't work pressing it does exactly nothing So Maybe it was defective. Maybe it was a broken. Well, no problem as you can see there's an indentation above the buttons That lets you put your finger in there and open the lid manually that works But it kind of defeats the purpose of a smart trash can Eventually, we realize something odd There's an LED in between the two buttons and sometimes the LED will turn green Whenever the LED turn green the open button will stop working huh As it turns out the smart trash can is actually a finance state machine at Any different moment it either thinks the lid is in the opened or closed position Naturally when the lid is already open The only thing it will let you do is to close it and conversely when the lid is closed The only possible action is to open it The LED is supposed to reflect this internal state the green means open and blinking red means closed obviously The problem is that the internal state can go out of sync with reality When someone decided to use the button to open the lid but later decide to slam the lid shut manually by hand The trash can will incorrectly believe that it is in the open state while the lid is physically closed When this happens the next person will not be able to open the trash can using a buttons but So that's pretty bizarre But actually none of these are supposed to matter because we shouldn't even be using a buttons in the first place There is an additional sensor hidden in between those two buttons The expected interaction is that you would go up to your trash can wave your hand and it will open the lid Temporally allowing you put your garbage in there and then close it automatically after a few seconds The buttons as it turns out are only there in case you need the lid to state open definitely for some reason Even though this example does not actually involve a computer it basically illustrate almost all of the most important concepts in user-centered design or HCI I Won't get into too much details here But if you're interested in learning how to design better trash can or user interfaces I strongly recommend reading a book from Don Norman called the design of everyday things What interests me here is the process of how everyone in our office eventually learned to use their trash can Something Norman called the human action cycle This is a model for describing how humans see Understand and learn about the world around them. It's a loop involving few steps Goal formation Execution and evaluation Here's how it works When we interact with an object or in user interface for the first time You generally don't have a very good idea of how anything works as you can see from the confused emoji face So the first thing you do is you start to form a high-level goal Something like in this case. I would like to throw out the garbage from lunch The next step is to formulate a plan for achieving your goal based on your currently pretty fussy understanding of the world and To execute that plan now in our case I might try to press the open button and attempt to put my garbage in the trash can The last step is to observe the result of your plan and interpret the outcome. Did it work? Did it match your expectations? If your plan didn't work, you would go back to the first step and start over again This time you would adjust your goals and plans ticking into account what you have learned from the first time Under the hood we all operate on This thing called mental model Which is our own internal understanding of how things work in the world You start with a pretty fussy mental model But as you repeatedly go through the human action cycle you will continue to pick up new insights and therefore Allow you to adjust your mental model to better match the reality and Continuously refining your understanding of the world These principles are sometimes summarized with the user experience iceberg the part of the iceberg that is Exposed above water Represent the things that are visible to your users For example Visual things like graphic design the use of color typography or even your logo makes up roughly 10% of the overall user experience The interaction is also pretty important. Does the scrolling and animations feel smooth? Do they feel natural these kind of things mix up another 30% of the overall experience and together they are basically referred to the look and the feel of your app Now while the look and feel is what your user sees Most of the iceberg as you can see here is actually sitting underneath water hidden away from the user's eyes This represent the user model despite being largely invisible it makes up for the remaining 60% of the whole experience That include things like does the flow of the screens Match the user's expectation does it give the right cues to help the user develop the right mental model? Or does it mislead the user down the wrong rib-hole like the trash can we just saw? now the reason I'm bringing this up is that I think there are a lot of similarities between designing the perfect user experience and programming this is perhaps not super surprising because after all Programming a computer to do stuff is a form of human computer interaction and the source code you're writing and reading is a form of user interface For example, I think the iceberg analogy applies to programming just as well as it applies to UX At the tip of the iceberg there are visual things like coding style white spaces and so on Underneath that there is the interaction layer. Does the code or does the library feel like Ruby? Does it follow Ruby conventions? Does it use common idiom found in the language? But most importantly The invisible part that sits underneath the water surface is what mix of bricks the programmer experience the user model Does the code flow naturally? Does it do a good job of breaking up different concerns into their own objects and methods? Just like a well-designed user interface well-factor code naturally guides a reader into forming the right mental model In fact in the Ruby community we have realized this a long time ago. Thanks to Mets We call this the principle of least surprise if your code guides your users into forming a different mental model Then you have when you wrote the code in the first place. They're gonna have a pretty bad time So how do we build good user model in our code? Having good comments and documentation would help but things like good naming Code structure and code organization is also very important Convention over configuration here is also pretty helpful because by establishing a A set of conventions that shared across the entire community We can build the mental model just one and take the mental model with us wherever we go So when you drop into when you get dropped into a new rails code base You immediately feel right at home because you know where everything are But besides all that there's a more powerful tool that directly influences the way the user thinks and That's abstractions Abstractions is a pretty useful tool for managing complexity and computer systems Computer science computer scientists John Goodeck has summarized this pretty eloquently The essence of abstraction is to preserve information that is relevant in a given context and to forget Information that is irrelevant irrelevant for the current context among all abstractions High-level abstractions like rails are Particularly valuable because they allow you to start building from the 50th level Right from the get go The higher up the stack there more value you're adding to your business and the more value you're delivering to your end users as These high level abstractions have become commonplace. It is perhaps no coincidence that Startup valuations and engineer salary are also hitting The high-water mark While these high-level abstractions are great the tides are slowly turning against them Abstractions are getting pretty bad rep these days Joe Sposky who coined the term leaky abstractions said this in his essay While these great tools 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 that takes two weeks suddenly In other words all abstractions leak many of us have been burned by bad abstractions before and When you get bet when you get burned it's not pretty the emotions are so vivid it Leads us down to conclusions like oh abstractions can never work They cause us to not understand what we're doing. So the only way out is to start from the ground up As an industry we have disrupted the idea of abstractions and began promoting Micro-libraries and build your own framework as the ultimate answer in my opinion while all abstractions leak is indeed the correct observation The way it is being cited these days. I think is really missing the points in Science and statistics. There's a similar Venice Logan all models are wrong However, this is not the end of it. The actual insight comes from the second part of the same All models are wrong, but some are useful Let's talk about physics for a second if you study physics in high school You were probably taught to ignore the effect of friction and air resistance in your homework Now that's obviously the wrong model Fiction and air resistance are non-negligible forces that actually exist in the real world However, this does not make them a useless model and in fact quite the contrary They give us a they give us the ability to start forming some mental model around the world Even at a relatively early age This is not just limited to the toy model we built for high schoolers It actually exists in a wider scale Even if you take into account of friction and air resistance, the Newtonian mechanics model is actually just plain wrong There are lower-level models such as thermodynamics Quantum mechanics or relativity that offers a higher fidelity approximation of the reality On the other hand the leakiness in the Newtonian mechanics model does not actually make them useless in practice It's a good enough model for a lot of purposes and just because relativity is a more correct model It doesn't mean that you want to think about the world in terms of the space-time fabric when you're just designing a car So therefore even though everyone knows for a fact that all models are wrong Scientists are explicitly taught and trained to build models. The world we live in is too complicated if we don't try to Simplify it we would not be able to understand anything or make any predictions So the fact that these models are lossy approximations is in fact a feature not a buck Abstractions serve a pretty similar purpose in our field They exist to help us simplify problems and to help us form the right mental model when working with these code Just like any other kind of models all mental models are wrong Therefore even though abstractions do leak it is merely pointing out a rather uninteresting fact all abstractions leak But some are useful In cognitive science we have a rule called the rule of magic number seven which is to say as humans We can only keep around seven things in our head at the same time Since our cognitive resource is so limited. It's really important that we take good advantage of it Abstractions is a pretty good hack that allows you to group together similar and related objects into a single high-level mental mental object Therefore allowing you to free up some value some of those valuable brain slots for other more important things Good abstractions help you form the right mental model by establishing clear boundaries and hiding away on important details That are unrelated to the current tasks at hand Of course, whether something is important not as highly contextual If you try to ignore the effect of friction when designing car, you're probably going to have a pretty bad time in the reward So what do you do when the abstractions eventually leak? What happens if the details they are trying to hide suddenly become relevant to your current task and what if the abstractions start behaving in ways that you didn't expect well That's called debugging and that's a core part of Developers everyday life One way to deal with bugs is Basically keep making little tweaks to code until it works. I will admit I do it myself from time to time Often I would think oh, I probably just made a stupid mistake somewhere So I just want to get out of here as soon as possible More often than not you will quickly exhaust the obvious places to look and at that point You're basically just randomly flipping bits and moving code around This strategy actually works a surprising amount of time I mean after all most bug fixes are indeed most bugs and need fixed by applying a relatively small patch to their code so On the other hand once the problem sees to exist is very tempting to just move on from there I mean your problem is gone. Your bug is fixed however Even have you have arrived even even though that you have arrived at a working solution Fixing a bug this way often means that you have absolutely no idea why things were broken in the first place This often indicate a hole in your mental model and that should be a deeply concerning thing to you At work at the company I work for we practice pair programming most of the time I'm quite fortunate to be paired up with the hudakats who whom you might know from his open source contributions like rails free jk and mbrjs If you happen to walk past our office and find us find the two of us engage in a debugging session A phase that you will hear a lot is I have no mental model of how anything works anymore The problem is since we can only fit so many things in our head We have to lean very heavily on mental models when we're working with big code bases like rails and ember These mental these mental objects are often very coarse There could be anything from the router the view layer the browser or even some like the OS kernel Obviously when you cast a nest so wide the results is some very leaky abstractions But just like scientific models. This simplification is a feature not a buck This is not limited to working with framework code either Unless your job is to basically write micro libraries all day This probably resembles your development workflow to a certain extent So because we are leaning so heavily on these mental models in our head when we realize that they don't actually Align with the reality. This is some it will become very deeply concerning to us Because all the assumptions we have been making so far could have been totally wrong. It could jeopardize a whole days of work or even Jeopardize our ability to make future progress on the projects Now this is not always going to be your thoughts Sometimes the abstractions are just poorly designed like the trash can we saw Still that these signs are everywhere and you can't always fix off them Having the ability to notice this and recalibrate your mental model Allow you to work around these problems If you're lucky enough fixing your mental model could be as simple as rereading the documentation Maybe just calling the method with the wrong arguments But more often than not the only way to really figure things out is to dig in and dive deeper That unfortunately requires us to understand the abstractions that we are currently sitting on Here's a quote from the leaky abstraction essay When you need to hire programming to do mostly visual basic programming It's not good enough to hire visual basic programmer because they will get completely stuck in tar every time the visual basic abstraction leaks Traditional CS education tries to solve this problem by taking a bottom-up approach In most CS curriculums you will usually start from the bottom-most layer of the stack and learn your way up the stack of abstractions For example in your first year you'll probably do a mix of programming computer architecture the screen math and calculus Once you have mastered these you can move up to things like data structures algorithms statistics and linear algebra Then in your third year you may learn about operating system database artificial intelligence and computer graphics Finally in your fourth year you can take all these knowledge and apply them to Things like networking information system computer vision and computer animation The nice thing about this bottom-up approach is that even though you rarely have to work directly with the low level abstractions Should you ever encounter a problem higher up the stack you will always be able to dig deeper Down into these layers and feel comfortable there There's a problem though Since there are so many different topics that you could be covering You don't really have that much time to build very high during your three to four years in school As soon as you start working in the industry you realize no one actually you start building from there Everyone in the industry will be using high level abstractions like rails and ember and start building from the 50th level up Suddenly what you learn in school during the three to four years Seems like a laughably low stack Let's say you're building a javascript application in the browser with rails and ember Your cs education ended at networking and information system You might not realize it, but there's actually a lot of a lot of things going on between that gap Between rails and what your cs education taught you To name a few there's hdp html css ruby javascript You have to learn about dom web security jet performance. You get the idea Since we're so used to building up from the bottom and baby steps Often even spending an entire semester before moving up each layer The sudden jump from 20th level all the way to the 50th level might seem to be too much for a lot of cs graduates Many of them fall off the cs cliff here and struggle to connect the dots between the education and the industry work that they do From here you can draw two possible conclusions option a Well, high level abstractions like rails and ember is the problem As you can see they try to hide too much stuff away from you and you You can't possibly understand everything. It's just way too magical Therefore the solution is to stop pretending we can get away with that and instead Everyone should build your own stack from the bottom up using micro libraries as components Perhaps even rolling a few of your own By going through that exercise yourself it guarantees your ability to understand abstractions that you're building on top of Just like the good old days in school So that's option one option b well The observation is that since everyone builds from the 50th level anyway, and most of them don't even understand what's underneath them But they seem to be doing just fine. So we must conclude that Understanding low-level details is not actually that important for our job therefore starting up starting from the bottom up is useless in a waste of everyone's time and instead We should focus our time and energy on teaching learning the 50th level abstractions like rails Surprise this is the approach taken by the court schools Now however, that's that actually seems pretty promising to me, but The problem is as joe rightfully pointed out to us All abstractions do eventually leak What if the naive brute force solution you wrote is just too slow for your app and you need to write a faster algorithm? How would you go about doing that? What if you need to understand why your app is using so much memory and you need to understand how memory allocation works? well, hopefully You since you didn't learn those things at school. Hopefully you will eventually learn some somehow along the way Hopefully your job will teach you In my opinion, I think both sides have made some pretty good observations here, but I think neither of them got the conclusion right In my opinion what you actually need here in order to survive in our industry is the ability to pop up and down the stack of after Up and down the stack of abstractions as needed Regardless of your education background is simply not realistic to expect yourself to know everything about the abstractions You're sitting on and that's perfectly natural On-demand learning is solely just fine, but You need to not be intimidated by the idea of digging in and you need to have a good framework for doing that I apologize for taking you on the extremely long detour, but we're back With all that laid out. I think we're finally ready to talk about education I would like to argue that the skill of fishing For our industry is the ability to think abstractly The ability to write and work with abstractions is a very concrete example of that skill, but more generally It is about the ability to operate and think in terms of mental models Acknowledge that they exist and that their simplifications and they're often wrong and more importantly knowing what to do when they Eventually leak For me personally The structure of the traditional CS curriculum really helped me to pick up that skill By carefully building up from the bottom up one little piece at a time semester after semester It helped me to realize the existence of these abstraction layers and how they all Fit together to form bigger pieces It also gave me a pretty good framework for A framework in process for How to keep learning and build up beyond what they taught me in school But perhaps most importantly, I was constantly exposed to hard topics that initially seemed impossible to understand Yet by the end of the semester everything would make sense By doing this over and over again during my time in school It gave me the confidence I need to believe that I can dig into difficult things And know that there will always be a way to figure it out if I try hard enough Now that we have figured out the secret sauce of my CS experience Perhaps we can start thinking about how we can funnel some of that Bathwater we threw out into programs like code schools While the traditional CS curriculum happened to work well for me personally I don't think any of the things I mentioned before were intrinsically tied to a four-year education In fact, since a lot of CS graduates did not leave school with that skill It probably indicates that we need to do better than just having this implicitly encoded in the structure of the program In the spirit of teaching students to fish I think the primary concern of any tech education program should be about demonstrating and teaching the framework for learning researching and understanding technical topics And the specific technical the specific set of technical topics you cover in the curriculum should be secondary to that goal As a student it is important to realize that whatever topic that they happen to teach you at school Does not actually matter that much in the grand seam of things Since there will always be more to learn whatever curriculum they picked Is just one possible combination out of the infinite many combinations The classes you took are actually just drilling exercise for you to practice the skill of fishing And whether you caught a specific kind of fish during that exercise is actually not very important Perhaps most important of all we should be setting the right expectation for our graduates Congratulations for completing a program, but unfortunately we're not done here The real learning as you all know actually begin when you start working in the industry And unfortunately you probably have to keep doing that for the rest of your career This is not because our career our industry is a scam, but that's just how a human learns Remember the human the human action cycle and how we refine our Our understanding of the role by repeatedly going through the circle and in a loop There's actually a border version of this concept called the hermeneutic circle The hermeneutic circle was originally used to describe how a biblical scholar would study the bible The idea is that to understand the text as a whole you must first understand the individual parts But the trap is to understand the individual parts you must first understand what the whole text is actually about So therefore the only way to achieve true understanding is to keep circling back and forth between the big picture Things like the historical context in the culture when the text was written And then you can go into a holistic view of the whole text and followed by An examination of the individual parts As you repeatedly go through this circle over and over again You will continue to gain new insights and refine your understanding of the text If we extrapolate a little bit from here, I think this pretty much describes how we all learn in general Most of us do not learn well in a vacuum in order to achieve true understanding We need to take the Theoretical knowledge we learned and apply them to real world problems and circle back to learn more theoretical knowledge Based on our experience in the real world For a lot of people spending three to four years in the university without real world experience is just way too long The circle is getting way too big when you get to the end of the circle. You already forgot why you're here in the first place Cold school students on the other hand have the opposite problem Well, it's great to have a short free month cycle so that you can immediately apply the knowledge you learn into real world problems While the knowledge is still fresh Um, the problem is once you have completed that step. How do you loop back into the next round of learning? On one hand the learning resources are more easily accessible than ever before today With initiatives like iTunes U, OpenCoreSquare, Coursera The knowledge is indeed becoming more and more accessible to a highly motivated individual But that's part of the problem, right? Once you have left the school support network It requires a lot of dedication and determination to keep going Besides as a beginner, how do you know what to learn next? Do you just try to learn whatever happens to be trending on hack news that month? Well, perhaps there could be a better structure for this When I was in school, I enrolled in what they call the cooperative education program where I was expected to spend my summer As working in industry internship positions This actually allowed me to close the hermeneutic circle much faster And it will certainly have helped me avoid the CS cliff upon graduation I think there are probably some similar opportunities waiting to be unlocked in new New wave tech education programs. For example, perhaps we can have a program where we teach html CSS and jQuery for a month have the students work on real world marketing websites for a while And then they can come back to work to learn some rails, perhaps And then spend some time building simple crud forms for small companies To automate simple tasks and finally they can come back to learn more about unix server database for another month Followed by an ops internship at a web hosting company Now these kind of jobs might sound boring and unambitious Perhaps they're just the digital version of burger flipping But the thing is there are plenty of these jobs out there And by splitting up the learning into bite size shunt and intermixing that with real world industry experience It will probably help to keep the hermeneutic circle to a more manageable size Before we wrap up, I would like to briefly discuss the social implication of the new wave tech education movement Just like uber and airbnb cold schools and wood camps are solving some very very real problems and inefficiencies The disconnect between academia and the industry is certainly real and i'm glad that they're here to address that problem Perhaps more and more importantly They are giving a second chance to a lot of us who weren't so lucky to have figured out the ideal career path the first time around But just like uber and airbnb They are also figuring out a lot of regulations and wisdom we encoded in the existing system Therefore reintroducing some of the problems we have already solved before For example, most cs programs and universities had to go through a somewhat rigorous Accordination process which sets a basic uniform standard and requirements And expectations among the different cs programs and um different schools Now that's actually far from a perfect system Anyone who has hired college graduates would know that Having a cs diploma is actually a pretty leaky abstraction Nevertheless, it's actually useful to have some sort of abstractions at minimum. It makes hiring and training easier Cold schools as they stand today are extremely non-uniform Some programs are just much much better than the others and it's not usually very easy for Employers and potential students to tell them apart before it's already too late Besides accreditation, we have also decided that it's important to give people fair access to education regardless of their financial background That's why we have student loans to help even out the playing field Just like accreditation Student loans are by far not a perfect system and they get a pretty wrap these days But at the most basic level it does the job if you're poor you can still go to school with some help from the government In addition to that we have also encoded are important things like anti-discrimination and mission policies and things like affirmative action requirements in the existing system Our cold schools and boot camps just a temporary patch to our labor supply chain problem Or does it look like they're here to stay? If so, we might have to Start taking taking these social problems more seriously and Perhaps if this cold school thing took off big times in our industry Is there anything we can do to avoid accidentally regressing the goals that we have already encoded in the existing systems? Finally, I would like to end this on more positive note and something a little bit more personal for me As they say it takes a village to raise a child in my experience. That's definitely true Like I mentioned during my time at svu. I enrolled in the cooperative education program with mandatory internship requirements along the way a lot of people have and companies have took a lot of risk and Decided to invest in me even before I have anything to prove And beyond that my CS education didn't actually end at svu During my last year in school. I was able to attend rails count for the first time Via the opportunity scholarship program which really opened my eyes and unlocked a lot of opportunities for me and Later on in my career a lot of my open source mentors have invested their personal time To help me level up without really expecting anything in return But actually my CS education didn't start at svu either. I cheated I taught myself programming in high school. So when I go to most of my CS classes It was already my second or third pass through the hermetic circle Needless to say that was a huge advantage for me It all started when I met my first mentor My first computer teacher at my elementary school Who spent time outside of school school hours and outside of the standard school curriculum to teach us to build websites And he also handed me my first program book But that's not really the beginning either My CS education probably started when as a kid I decided to delete all the system files on the computer out of curiosity Instead of getting yelled at my uncle simply decided to teach me how to reinstall windows on the computer So I can do that over and over again But that's still not of it um I wouldn't be able to do any of these without a supportive family That tells me it's okay to explore my interests even though I grew up in a culture where Getting top grades from school is the be all in and of everything Uh yeah Wouldn't be able to do any of these if I gave in and let the weight of the education system Deprive me of my free time I wouldn't be able to do any of these if I was in an environment where I could get bullied at school for being a geek And most certainly I would I probably would have given up long ago If I kept being told that this is not something I should do just because I'm a girl Therefore computer science education is not just about teaching abstractions It's not about program literacy It's also about standing up against bullying fighting for gender equity Reforming our education system to support our kids to develop their interests rather than just drowning them in homework and exams Now if it takes the village to raise a child It certainly takes no less than an entire fishing village to raise the 21st century fishermen You have all made it here, which means that you probably have something you give Pay it forward be the village. Thank you very much