Summarized using AI

Keynote: Rethinking Computer Science Education

Godfrey Chan • June 23, 2016 • Singapore • Keynote

In the keynote titled "Rethinking Computer Science Education," Godfrey Chan explores the evolving landscape of computer science education, emphasizing the need to adapt teaching approaches to better match the demands of the tech industry.

Key Points:

- Introduction to Singapore and Humor: Chan opens with his personal connection to Singapore and uses humor to engage the audience. He highlights the strict laws in Singapore which he humorously contrasts with the everyday practices of locals.

- Critique of Current CS Education: He discusses the disconnect between traditional computer science education and industry needs, noting that many graduates lack relevant skills despite having degrees.

- The Teaching Proverb: Chan references an old Chinese proverb about teaching to fish rather than just giving fish as a metaphor for education, challenging the audience to rethink what teaching really means in the current economy.

- Importance of Problem-Solving Skills: He argues that in programming and software development, the essential skill being developed is problem-solving, which cannot be generalized across disciplines.

- Disruption of Education by Boot Camps: Chan compares traditional educational approaches with emerging code schools and boot camps, emphasizing the necessity for rapid training programs to fill the skills gap.

- Value of Traditional Education: Despite his critiques, Chan acknowledges the intrinsic value of traditional computer science degrees in developing critical thinking and conceptual frameworks that can help in real-world problem-solving.

- Human-Computer Interaction (HCI): Using an anecdote about a smart trash can, he illustrates the principles of user-centered design and the importance of understanding users’ interactions with technology.

- Mental Models and Abstractions in Programming: Chan discusses how programming involves working with abstractions and the necessity of understanding these layers for effective problem-solving, linking this back to cognitive science principles.

- Learning Cycles: He emphasizes the importance of continuous learning in tech, critiquing both traditional four-year degrees for lack of real-world experience and short programs for their potential superficiality.

- Call to Action: He concludes with a personal anecdote about the importance of community and mentorship in education, advocating for an ecosystem that supports various learning paths while highlighting the importance of ethical considerations in tech education.

Keynote: Rethinking Computer Science Education
Godfrey Chan • Singapore • Keynote

Date: June 23, 2016
Published: unknown
Announced: unknown

Speaker: Godfrey Chan, Rails Core, Tilde

Event Page: http://www.reddotrubyconf.com/

Produced by Engineers.SG

Red Dot Ruby Conference 2016

00:00:17.570 hello good afternoon welcome back from lunch can I get a show of hands who
00:00:23.699 who's still awake alright I will try my best not to lose
00:00:28.920 the 15 of you drink my talk hello I'm Godfrey as you can see you can find me on the Internet's as champion
00:00:35.610 code thank you for inviting me here to a beautiful sea a few years ago I actually
00:00:40.800 lived here for half a year as an exchange student at NUS do have any NUS alumni here okay they're the same 15 of
00:00:49.050 you awesome I actually haven't had a chance to visit Singapore since then so
00:00:54.360 uh when Winston contacted me I immediately said yes I would come here I would love to come if this is the first
00:01:01.320 time you're visiting Singapore welcome you might have heard some rumors that the laws of Singapore is very strict
00:01:07.650 having lived here for a while I can tell you that is definitely not true in fact
00:01:12.720 is probably one of the most liberal places I've visited for example if you
00:01:18.900 eat on the MRT fine if you smoked an MRT fine if you ride the MRT low chewing gum
00:01:26.490 fine if you ride the MRT with your dog fine if you ride them our tale of a
00:01:31.770 during oh by the way if you're wondering where I got that during emoji from it's actually a tree but anyway if if you
00:01:44.820 read the emirate of durian fine and if you ride the MRT of illegal drugs well that one is a little bit
00:01:51.390 different that's actually more than just fine
00:01:58.390 as you can see Singapore's very liberal everything just goes here I need to fold
00:02:03.940 that slide with a very serious disclaimer first of all by looking at
00:02:09.160 this slide you agree that I'm not lawyer and you also hereby agree that what I
00:02:14.290 just showed you is not legal advice yes you also agree not to try this here in
00:02:20.290 Singapore and you agree that I might actually have made a serious mistake somewhere and also I'm not responsible
00:02:28.000 for reactions and if you really don't get it it was a joke please don't try it
00:02:33.630 anyway since a lot of scheme here a lot of change in Singapore in particular I
00:02:39.160 think the government have really invested they're really serious about turning Singapore into a tech hub in
00:02:45.340 Asia and they've invested a lot to make that happen for example this is a new
00:02:50.739 tourist attraction called the Singapore cloud forest where tourists can learn about how the clock works and you can
00:02:56.470 watch the meanest workers scale your hiroko dinos inside there this there's
00:03:02.290 also another place called the Singapore Safari nightly where you can experience the latest html5 features and of course
00:03:09.519 there's also the port of Singapore where they take care of your container needs
00:03:14.820 of course even the name of your conference this is this is the reddit
00:03:20.170 really contrite I hope I hope you're at the right place because I'm definitely
00:03:26.110 at the right place oh by the way I'm speaking of the conference I don't know if you realize this but if you look at
00:03:33.070 the bottom of nametag there is actually a Singlish slang there and if you're not
00:03:38.440 from here you probably have no idea what it means but that's totally okay the idea is that you will make some local
00:03:43.810 friends here at the conference and they will explain that to you so for example here mindsets speaker and I have no idea
00:03:51.760 what that means in English hopefully not something offensive but if you know what that means please come talk to me after
00:03:57.010 I talk to quickly recover from the credibility I lost in the last few
00:04:03.370 minutes I would like to point out that I'm actually on the rails core team the Asian guy at the bottom row
00:04:08.950 that's me if you still don't believe me I have something to prove see I've acquired the standard-issue rails core
00:04:15.520 team presentation templates also come in black on a more serious note rails 5 RC
00:04:22.240 2 has been released this morning you should all try it but unfortunately that's all I'm going to talk about for
00:04:28.750 rails today if you would like to learn more about rails 5 please watch Jeremy's keynote from real town this year and as
00:04:35.380 you can see he also has the rails core team presentation templates so you know he's legit instead of talking about
00:04:43.030 rails I would like to talk to you about education today there is an old Chinese
00:04:49.000 proverb showing you showing you that was not a joke by the way the joke part is over for today but
00:04:56.830 translated literally it means giving a person a fish is not as good as teaching
00:05:02.020 person to fish if you prefer there's also a slightly more poetic version give
00:05:08.889 a person a fish and you feed them for a day teach your person to fish and you feed them for a lifetime let's take a
00:05:16.300 moment and appreciate the beauty of the Chinese language here now the proverb is
00:05:22.990 written in the form of a parallel comparative structure something is not as good as something else if you look
00:05:30.550 closely the only difference between the two clauses is in the last character the
00:05:35.979 character on left means a fish and the character on the right means two fish
00:05:41.830 so giving a person a fish is not as good at teaching your person to fish now
00:05:49.449 there's actually a pretty cool Easter egg here that is kind of lost in translation these two characters are
00:05:55.000 homophonic meaning that they have exactly the same pronunciation so therefore have you heard this saying
00:06:00.550 from someone without seeing the actual written words it wouldn't make any sense to you because if you Klaus sigh exactly
00:06:05.650 the same the so besides the last character the first character here is also pretty interesting even though
00:06:12.159 they're exactly the same character using the first class means to give but using the second position it means to teach
00:06:17.729 this character also has the meaning of two grants and two gifts it's no
00:06:23.949 coincidence that all these concepts share the same character in the Chinese language teaching is really about giving
00:06:30.009 out a gift in the form of a skill the best thing a teacher could teach is a matter skill of self learning which is a
00:06:37.479 gifts that would feed the person's intellect for a lifetime all these are
00:06:43.569 pretty uncontroversial every educator thinks that this is what they're doing ultimately and the problem is in our
00:06:51.550 21st century economy things are not as straightforward as that it turns out
00:06:57.250 most of us are not farmers or fishermen anymore so in today's economy what is the fish and what does it
00:07:04.300 actually mean to teach someone to fish today in tech the line is even more
00:07:10.180 blurry if we teach someone to build a rails app today is that teaching them a
00:07:15.219 skill or is that just giving them a fish that would person in a few years what about teaching programming many cities
00:07:21.759 have announced plans to bring programming into the regular school curriculum is that teaching students to
00:07:27.789 fish in our industry what does it really mean to learn to fish
00:07:34.410 you've probably heard this one before that our job as a programmer or a
00:07:39.580 software engineer is to solve problems of people therefore the fishing skill we need to learn in our industry is called
00:07:46.539 problem-solving skills the other way the background here is a 19th century
00:07:52.210 painting called consulting the Oracle which I find quite fitting I mean consulting that's solely what I do right
00:07:58.780 well the problem with these words is that well it's pretty cool to think of
00:08:05.620 ourselves as a generalist problem solver I think is not particularly helpful here
00:08:11.710 because how they because of how big it is as far as I can tell the description
00:08:18.280 is so broad that basically applies to literally every discipline in today's economy for example when your rich
00:08:26.800 clients walk into your office your job as a financial adviser is basically to help them figure out the optimal
00:08:32.409 investment strategy to maximize their wealth sadly this is not a problem personally have today but the job of the
00:08:40.419 job description of a financial adviser definitely sounds like a problem-solving job to me so well I would love to think
00:08:48.520 of myself as a magical problem solving Oracle I think this is not really helping us here
00:08:58.810 our industry is in love with the idea of disruption lately startups like uber and
00:09:05.780 airbnb identified inefficiencies in existing industries they came up with new fresh technology centric approaches
00:09:13.190 ignore all the rules along the way and change the game entirely for the sector for the most part I think this is a
00:09:19.970 change for the better when arrived here the other day at the airport I took in your token River to the place I was
00:09:27.110 staying which happened to be a rim I found an Airbnb as a consumer I love the
00:09:33.470 products but unfortunately while there are plenty of rules that are just creating friction inefficiency in the
00:09:40.040 market there are also a lot of rules that existed for really good and very important reasons as a society we have
00:09:46.010 encoded decades of learning into these regulations and throwing of them away
00:09:52.400 and starting over means having to relearn these lessons painfully along the way take the taxi industry for
00:09:59.330 example many cities have established accessibility requirements to ensure
00:10:04.370 people traveling in wheelchairs can reliably hitch a ride likewise the hotel
00:10:09.470 industry have importance owning fire code and insurance requirements to ensure everyone's safety
00:10:14.770 in education we have a similar phenomenon there are some clear
00:10:20.150 inefficiencies in our education system programmers and software engineers are in very high demand these days as you
00:10:27.020 all know we need more of them and we need them right now a computer science
00:10:32.060 degree takes 3 to 4 years in most schools which is way too long and cost way too much besides computer science
00:10:39.200 programs don't even produce that many good programmers everyone knows that the Academy is pretty out of touch with the
00:10:45.410 industry and what they teach in schools are not necessarily that useful in the real world today a lot of CS graduates
00:10:53.090 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
00:11:01.190 the education system of course we came up with programs like code schools and boot camps
00:11:06.480 training new entries and exactly what our industry need right now at this moment in the shortest amount of time
00:11:12.030 possible just like uber and airbnb I left idea at
00:11:17.550 our company we recently hired a new employee who came from a koku background
00:11:22.610 she is an excellent fit for the role we're hiring for and we couldn't be happier with the result yet just like
00:11:30.510 your uber and airbnb I can't help the feel that we might be throwing out the baby with the bathwater here computer
00:11:37.830 science as an academic discipline have existed for probably much longer than you might think and while the
00:11:43.980 traditional system is far from perfect perhaps there are some good reasons that it is structured the way it is today
00:11:50.060 perhaps there is a reason why fundamental CS classes retain the same shape and form for over decade this a
00:11:58.410 decade despite of everything else that is changing around us I personally came
00:12:05.700 from traditional CS background like I said I went to a Canadian school called
00:12:11.040 Simon Fraser University and I did an exchange here at NUS they both have
00:12:16.290 excellent CS programs and I was very grateful for my education there on the other hand as the CS graduate I can
00:12:23.190 definitely understand a lot of the criticisms and where they're coming from like a lot of you has spent most of my
00:12:30.150 career so far working with web technologies my day job involved writing Ruby JavaScript Rails working with
00:12:36.960 browsers optimising sequel queries scaling and servers and so on it is true
00:12:42.270 that I didn't actually learn any of that from school I had to learn all of them myself on my own time outside the
00:12:48.510 regular sewer that the regular school curriculum just like everyone else come
00:12:54.000 to think about it I probably didn't even learn that much about programming in school there just weren't that many
00:12:59.820 programming assignments at all and I was mostly just taught and tested on the
00:13:04.950 conceptual and theoretical level two years ago Decius gave a keynote at
00:13:10.910 railsconf describing our occupation as software writers that is a big part of
00:13:16.370 our job is to write beautiful code with an emphasis on clarity by that standard
00:13:24.350 my CS education was actually pretty terrible I was never once graded on the clarity of my code nor was I given any
00:13:32.570 feedback on the code quality of my programming assignments most of the time I want you to do is submit the program
00:13:39.170 that works and that's all I was graded for the words refactor and unit tests
00:13:45.380 basically never came up once during my academic career it's like not only did
00:13:51.920 they not teach me to fish it's like all we did was sit in the room all day and
00:13:57.170 be like hmm given that there are a few different ways of catching fishes how do
00:14:02.600 we prove mathematically that one of them is more efficient than the rest
00:14:08.700 as it turns out computer science isn't really about programming and in fact it
00:14:15.570 might not even have that much to do with computers after all dextra a famous
00:14:21.330 computer scientist once that this computer science is no more about computers than astronomy is about
00:14:27.240 telescopes so if computer science isn't really about programming and computers and if I
00:14:34.710 didn't learn most of the work skills are needed from school does that mean the critics were right and I wasted five
00:14:40.350 years of my life well I can't speak for everyone but personally I am really glad
00:14:46.740 I did it I happen to enjoy learning about the topics they cover so if nothing else I had a lot of fun but I
00:14:53.220 think there's more to it somehow I'm pretty sure I wouldn't be able to work on the stuff I do today
00:14:59.130 without my CS background or at least it would have taken me a much longer time to get to where I am today I'm not just
00:15:07.140 talking about the knowledge like most people would tell you I didn't end up using most of the things I learned from
00:15:12.680 school and even for those things that are actually useful I have long forgotten about the details
00:15:18.780 by the time I need them and I had to relearn everything anyway but I think there's something magical about the
00:15:25.620 experience I went through something about it really changed the way I think
00:15:31.020 in the way I learn in ways that really helped me later on in my career I think
00:15:36.060 during my time in school and might actually have taught myself to fish
00:15:41.470 now I'm not certain I'm certainly not saying a CS degree is the only way to acquire this magical skill of fishing
00:15:47.480 whatever that is during my career I have had the privilege to work and learn from a lot of smart people who didn't have a
00:15:53.960 CS degree and yet they have definitely correct the same nuts on the other hand
00:15:59.170 this is far from a skill that you automatically pick up just by going through four years of school I have seen
00:16:06.320 plenty of CS graduates who didn't leave school with this skill and they had to struggle a lot when transitioning into
00:16:12.410 industry work nevertheless since my CS education seems to have helped me
00:16:18.590 personally to develop at a magical skill of fishing maybe I could try to dissect
00:16:23.870 that a little bit and figure out what it actually is and which aspects of my
00:16:29.090 education helped me get there if we can identify this magical skill if we can
00:16:35.780 talk about it concretely perhaps we could figure out how to make that easier for people to pick up or even replicate
00:16:42.110 that in the newer programs like code schools spoiler alert I think I might
00:16:49.580 have answer for you um I think that my education have helped me to develop a
00:16:55.220 framework for thinking about programming problems but we'll come back to that
00:17:00.650 later for now I would like you to go on a little detour with me
00:17:12.250 so when I was in school I am also did a minor in cognitive science for those of
00:17:19.339 you who are not familiar was that cognitive science is an interdisciplinary study of the human
00:17:25.040 mind in English that means a study of how human thinks now sitting at the
00:17:30.650 intersection between computer science and palliative science is a field called human-computer interaction also known by
00:17:37.490 our related names like user experience design and user centered design the best
00:17:44.540 way to tell you what this is about is probably to show it to you we recently bought a new trashcan in office to
00:17:51.920 actually it's not just any Trash Can Tho it's a smart trashcan it has buttons so
00:18:00.140 there are two physical buttons on the trashcan one labeled open on the right and one labeled flows on the left's they
00:18:07.429 pretty much do what you would expect seems pretty straightforward but there's a problem
00:18:12.470 sometimes the open button doesn't work pressing it does exactly nothing so
00:18:19.809 maybe it was defective maybe was a broken well no problem as you can see
00:18:24.920 there's an indentation above the buttons that lets you put your finger in there and open the lid manually that works but
00:18:33.110 it kind of defeats the purpose of a smart trashcan eventually we realize something off
00:18:39.560 there's an LED in between the two buttons and sometimes the LED will turn green whenever two LED turn green the
00:18:46.490 open button would stop working Oh as it turns out the smart trashcan is
00:18:52.940 actually a finite state machine at any given moment it either thinks the lid is
00:18:59.390 in the open or closed position naturally when the lid is already open the only
00:19:06.260 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
00:19:11.960 the LED is supposed to reflect this internal state the green means open and
00:19:17.360 blinking red means closed obviously the
00:19:25.370 problem is that the internal state can go out of sync with reality when someone
00:19:30.740 decided to use the button to open the lid but later decide to slam the lid shut manually by hand the trash can will
00:19:38.480 incorrectly believe that it is in the open state while the lid is physically closed when this happens the next person
00:19:45.860 will not be able to open the trashcan using a buttons but so that's pretty
00:19:52.130 bizarre but actually none of these are supposed to matter because we shouldn't even be using the buttons in the first
00:19:57.890 place there is an additional sensor hidden in between those two buttons they
00:20:02.960 expect the interaction is that you would go up to your trash and wave your hand and it will open lid temporarily
00:20:08.840 allowing you put your garbage in there and then close it automatically after a few seconds the buttons as it turns out
00:20:14.840 are only there in case you need the lid to stay open indefinitely for some reason even though this example does not
00:20:23.570 actually involve a computer it basically illustrates almost all the most important concepts in user centered
00:20:30.530 design or HCI I won't get into too much details here
00:20:36.320 but if you're interested in learning how to design better trashcan or user
00:20:41.510 interfaces I strongly recommend reading a book from Don Lauren called the design of everyday things what interests me
00:20:50.000 here is the process of how everyone in our office eventually learned to use the trashcan something Norman called the human action
00:20:57.470 cycle this is a model for describing how humans see understand and learn about
00:21:03.710 the world around them it's a loop involving few steps go formation
00:21:09.640 execution and evaluation here's how it works when we interact with an object or
00:21:16.820 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
00:21:24.110 the confused emoji face so the first thing you do is you start to form a
00:21:30.650 high-level go something like in this case I would like to throw out the garbage from lunch the next step is to
00:21:39.710 formulate a plan for achieving your goal based on your currently pretty fussy understanding of the world and to
00:21:47.360 execute that plan now in our case I might try to press the open button and
00:21:52.580 attempt to put my garbage in the trash can the last step is to observe the result
00:21:58.850 of your plan and interpret the outcome did it work did it match your expectations if your plan didn't work
00:22:05.480 you would go back to the first step and start over again this time you would adjust your goals and plans taking into
00:22:12.470 account what you have learned from their first time under the hood we all operate on this
00:22:19.610 thing continental model out which is our own internal understanding of how things
00:22:25.399 work in the world you start with a pretty fussy mental model but as you repeatedly go through the human action
00:22:32.539 cycle you will continue to pick up new insights and therefore allow you to
00:22:37.999 adjust your mental model to better match the reality and continuously refining an
00:22:43.669 understanding of the world these principles are sometimes summarized with
00:22:49.759 the user experience iceberg the part of the iceberg that is exposed above water
00:22:55.899 represent the things that are visible to your users for example visual things
00:23:02.720 like graphic design the use of color typography or even your logo makes up
00:23:07.730 roughly 10% of the overall user experience the interaction is also
00:23:12.980 pretty important does the scrolling and animations feel smooth do they feel
00:23:18.889 natural these kind of things mix up another 30% of the over experience and together they are basically referred to
00:23:26.600 the look and the feel of your of your app now while the look and feel is what
00:23:32.840 your user sees most of the iceberg as you can see here is actually sitting underneath water hitting away from the
00:23:39.049 users eyes this represent the user model despite being largely invisible it makes
00:23:46.309 up for the remaining 60% of the whole experience that include things like thus
00:23:53.179 the flow of the screens match the users expectation this gift the right cues to
00:23:59.240 help the user develop the right mental model or does it mislead the user down the wrong rabbit hole like the trash can
00:24:05.629 we just saw now the reason I'm bringing this up is
00:24:10.960 that I think there are a lot of similarities between designing the perfect user experience and programming
00:24:17.440 this is perhaps not super surprising because after all programming and
00:24:22.450 computer to do stuff is a form of human-computer interaction and the source code you're writing and reading
00:24:28.929 is a form of user interface for example I think the iceberg analogy applies to
00:24:36.909 programming just as well as it applies to UX at the tip of the iceberg there are visual things like coding style
00:24:43.509 white spaces and so on underneath that there is the interaction layer does the
00:24:50.889 code but does the library feel like Ruby does it follow Ruby conventions does it
00:24:56.859 use common idiom found in language but most importantly the invisible part that
00:25:04.989 sits underneath the water surface is what makes it bricks the programmer experience the user model does the
00:25:12.789 cultural flow naturally does it do a good job of breaking up different concerns into their own objects and
00:25:18.700 methods but just like a well-designed user interface well factor code naturally guides a reader into forming
00:25:25.659 the right mental model in fact in the Ruby community we have realized this a
00:25:31.089 long time ago thanks to Metz we call this the principle of least surprise if you code guys your users into forming a
00:25:38.649 different mental model than you have when you wrote the code in the first place they're going to have a pretty bad time
00:25:45.770 so how do we build good user model in our code having good comments and
00:25:52.490 documentation would help but things like good naming code structure and code
00:25:57.530 organization is also very important convention over configuration here is also pretty helpful because by
00:26:04.520 establishing a set of conventions that shared across an entire community we can
00:26:11.390 build a mental model just one and take the mental model with us wherever we go so when you drop into when you get
00:26:18.170 dropped into new rails code base you immediately if you write at home because you know where everything are but
00:26:24.710 besides of that there's more powerful tool that directly influences the way
00:26:29.750 you use your things and that's abstractions abstraction this is a
00:26:35.360 pretty useful tool for managing complexity in computer systems computer science computer scientist John Goethe
00:26:42.410 has summarized this pretty eloquently the essence of abstraction is to
00:26:48.260 preserve information that is relevant in given context and to forget information
00:26:54.230 that is irrelevant irrelevant for the current context
00:27:00.600 and while all abstractions high-level abstractions like rails are particularly
00:27:06.210 valuable because they allow you to start building from the fiftieth level right
00:27:12.850 from the get-go the higher up the stack they're more value you're adding to your business and the more value you're
00:27:19.390 delivering to your end-users as these high-level abstractions have become commonplace it is perhaps no coincidence
00:27:25.990 that startup valuations and engineer salary are also hitting the high-water
00:27:33.250 mark while these high-level abstractions
00:27:38.380 are great the tides are slowly turning against them abstractions are getting pretty bad rap these days Joel Spolsky
00:27:46.840 who coined the term leaky abstractions set this in this essay
00:27:52.710 while these great tools let us get a lot of work done incredibly quickly suddenly
00:27:59.310 one day we need to figure out a problem where the abstraction leaked and that takes two weeks suddenly in other words
00:28:06.460 all abstractions leak
00:28:12.140 many of us have been burned by bad abstractions before and when you get bit
00:28:17.180 when you get burned it's not pretty the emotions are so vivid it lead us
00:28:22.490 down to conclusions like Oh abstraction is can never work they cause us to not understand what we're doing so the only
00:28:29.660 way out is to start from the ground up as an industry we have disrupted the
00:28:35.210 idea of abstractions and began promoting micro libraries and build your own framework SD ultimate answer in my
00:28:44.120 opinion while all abstractions sleek is indeed the correct observation the way
00:28:49.880 it is being sighted these days I think is really missing the points in science
00:28:56.390 and statistics there is a similar been a slogan all models are wrong however this is not the end of it the actual insight
00:29:03.620 comes from the second part of the saying all models are wrong but some are useful
00:29:11.560 let's talk about physics for a second if you study physics in high school you were probably taught to ignore the
00:29:18.050 effect of friction and air resistance in your homework now that's obviously the
00:29:23.360 wrong model friction and air resistance are non electrical forces that actually exists in the real world however this
00:29:31.100 does not make them a useless model and in fact quite the contrary they give us
00:29:37.070 a they give us the ability to start forming some mental model around the world even at a relatively early age
00:29:45.730 this is not just limited to the toy model we built for high schoolers it
00:29:51.740 actually exists in a wider scale even if you take into account of friction and
00:29:56.960 air resistance the Newtonian mechanics model is actually just plain wrong there
00:30:02.690 are lower level models such as thermodynamics quantum mechanics or relativity that offers a higher fidelity
00:30:09.610 approximation of the reality on the other hand the leakiness in the
00:30:15.909 Newtonian mechanics model does not actually make them useless in practice it's a good enough model for a lot of
00:30:22.419 purposes and just because relativity is a more correct model it doesn't mean that you want to think about the world
00:30:28.419 in terms of the space-time fabric when you're just designing a car so therefore
00:30:34.570 even though everyone knows for a fact that all models are wrong scientists are explicitly taught and
00:30:40.539 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
00:30:48.609 to understand anything or make any predictions so the fact that these
00:30:54.159 models are lossy approximations is in fact a feature not a bug abstractions
00:31:00.999 serve a pretty similar purpose in our field they exist to help us simplify problems and to help us form the right
00:31:08.440 mental model when working with these code just like any other kind of models all mental models are wrong therefore
00:31:15.549 even though abstractions do leak it is merely pointing out a broad and
00:31:21.279 interesting fact all abstractions leak but some are useful in cognitive science
00:31:27.580 we have a rule called the rule of magic number seven which is to say as humans
00:31:33.429 we can only keep around seven things in our head at the same time since our cognitive resource is so limited it's
00:31:40.059 really important that we take good advantage of it abstractions is a pretty good hack that allows you to group
00:31:46.210 together similar and related objects into a single high-level mental mental object therefore allowing you to free up
00:31:54.249 some valid some of those valuable brain slots for other more important things
00:31:59.660 good abstractions help you form the right mental model by establishing clear boundaries and hiding away unimportant
00:32:06.600 details that are unrelated to the current asset and of course whether something is important not is highly
00:32:13.050 contextual if you try to ignore the effect of friction when designing car
00:32:18.120 you're probably going to have a pretty bad time in the real world so what do
00:32:23.130 you do when the abstractions eventually leak what happens if the details they
00:32:29.280 are trying to hide suddenly become relevant to your current task and what if the abstractions start behaving in
00:32:36.420 ways that you didn't expect well that's called debugging and that's a core part of a developer's everyday
00:32:45.180 life one way to deal with bugs is um basically keep making little tweaks to
00:32:51.420 your code until it works I admit I do it myself from time to time often I was think oh I probably just
00:32:57.240 made a stupid mistake somewhere so I just want to get off here as soon as possible more often than not you'll
00:33:04.650 quickly exhaust the obvious places to look and at that point you're basically just randomly flipping bits and weaving
00:33:11.520 code around this strategy actually works a surprising amount of time
00:33:16.530 I mean after all most bug fixes are and did most bugs and each fixed by applying
00:33:21.900 a relatively small patch to your code so on the other hand once the problem sees
00:33:29.370 the excess is very tempting to just move on from there I mean your problem is
00:33:34.530 gone your bug is fixed however even have you have a right even even though that
00:33:41.340 you have arrived at a working solution fixing a bug this way often means that you have absolutely no idea why things
00:33:48.750 were broken in the first place this often indicate a hole in your mental
00:33:54.360 model and that should be a deeply concerning thing to you at work at the company I work for we
00:34:01.450 practice pair programming most of the time I'm quite fortunate to be paired up with the cats whom you might know from
00:34:08.679 this open source contributions like rails free jQuery and MPs if you happen
00:34:14.860 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
00:34:21.880 is I have no mental model of how anything works anymore the problem is
00:34:29.020 since we can only fit so many things in our head we have to lean very heavily on
00:34:34.179 mental models when we're working with big code bases like rails and ember these mental these mental objects are
00:34:41.380 often very coarse they could be anything from the router the view layer the browser or even some like the OS kernel
00:34:49.560 obviously when you cast an S so wide the result is some very leaky abstractions
00:34:56.290 but just like scientific models this simplification is a feature not a bug
00:35:01.890 this is not limited to working with framework code either unless your job is to basically write micro libraries all
00:35:09.190 day this probably resembles your development work full to a certain extent so because we are leaning so
00:35:17.650 heavily on these mental models in our head when we realize that they don't actually align with the reality this
00:35:24.940 isn't it will become very deeply concerning to us because all the
00:35:31.120 assumptions we have been making software could have been totally wrong it could jeopardize a whole days of work or even
00:35:38.340 jeopardize our ability to make future progress on projects now this is not
00:35:44.980 always going to be your fault sometimes their abstractions are just poorly designed like the trashcan where you saw
00:35:51.360 still that designs are everywhere and you can always fix off them having the
00:35:56.770 ability to notice this and recalibrate your mental model allow you to work around these problems
00:36:02.940 if you're lucky enough fixing your mental model could be as simple as
00:36:08.039 rereading the documentation maybe just calling the method with the wrong arguments but more often than not the
00:36:15.150 only way to really figure things out is to dig in and dive deeper that
00:36:21.089 unfortunately requires us to understand the abstractions that we are currently sitting on here is a net quote from the
00:36:27.630 leaky abstraction essay when you need to hire programming to do mostly Visual
00:36:33.150 Basic programming it's not good enough to hire Visual Basic programmer because they will get completely stuck in tar
00:36:39.480 every time the Visual Basic abstraction leaks traditional CS Education tries to
00:36:47.849 solve this problem by taking a bottom-up approach in most Lea's curriculums you will usually start from the bottom most
00:36:54.510 layer of the stack and learn your way up the stack of abstractions for example in
00:37:00.750 your first year you'll probably do a mix of programming computer architecture discrete math and calculus once you have
00:37:07.920 mastered these you can move up to things like data structures algorithm statistics and linear algebra and in
00:37:16.200 your third year you may learn about operating system database artificial
00:37:21.329 intelligence and computer graphics finally in your fourth year you can take
00:37:26.460 all these knowledge and apply them to things like networking information system computer vision and computer
00:37:33.599 animation the nice thing about this bottom-up approach is that even though
00:37:39.150 you rarely have to work directly with the low level abstractions should you ever encounter a problem higher up the
00:37:45.510 stack you will always be able to dig deeper down into these layers and feel
00:37:50.789 comfortable there there's a problem though since there are so many different
00:37:56.130 topics that you could be covering you don't really have that much time to build very high during your free to four
00:38:02.910 years in school as soon as you start working in industry you realize no one actually start
00:38:09.309 building from there everyone in the industry will be using high-level abstractions like rails and ember and
00:38:15.579 start building from the 50th level up suddenly what you learn in school during
00:38:21.099 the 3 to 4 years seems like a laughably low stack let's say you're building a
00:38:28.809 JavaScript application and browser with Rails number your CSS education ended at
00:38:34.569 networking and information system you may not realize it but there's actually a lot of a lot of things going on
00:38:40.089 between that gap between rails and what your CSS education taught you to name a
00:38:47.200 few there's HTTP HTML CSS Ruby JavaScript you have to learn about Dom web security jet performance you get the
00:38:54.220 idea since we are so used to building up from the bottom and baby steps often even
00:39:01.390 spending an entire semester before moving up each layer the sudden jump
00:39:07.660 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
00:39:16.089 off the CS cliff here and struggle to connect the dots between the education and the industry work that they do from
00:39:25.240 here you can draw two possible conclusions option a well I love abstractions like rails and
00:39:32.630 ember is the problem as you can see they try to hide too much stuff away from you and you possibly you can't possibly
00:39:38.840 understand everything it's just way too magical therefore the solution is to stop pretending we can get away with
00:39:45.230 that and instead everyone should build your own stack from the bottom up using micro libraries as components perhaps
00:39:51.620 even rolling a few of your own by going through that exercise yourself it guarantees your ability to understand
00:39:58.010 abstractions that you're building on top of just like the good old days in school so that's option 1 option B well the
00:40:07.700 observation is that since everyone builds from the 50th level anyway and most of them don't even understand
00:40:13.760 what's underneath them but they seem to be doing just fine so we must conclude
00:40:18.830 that understanding low-level details is not actually that important for our job therefore starting up starting from the
00:40:26.090 bottom up is useless in a waste of everyone's time and instead we should focus our time and energy on teaching
00:40:32.390 learning the 50th level abstractions like rails surprise this is the approach
00:40:38.510 taken by the code schools now however that that actually seems very promising
00:40:45.530 to me but the problem is as Joe rightfully pointed out to us all
00:40:52.700 abstractions do you eventually leak what if the naive brute-force solution you wrote is just too slow for your app and
00:40:59.540 you need to write a faster algorithm how would you go about doing that what if
00:41:05.180 you need to understand why your app is using so much memory and you need to understand how memory allocation works
00:41:11.140 well hopefully you since you didn't learn those things at school hopefully you'll eventually learn dump some
00:41:17.540 somehow along the way hopefully your Joe Blow teacher in my opinion I think both sides have
00:41:26.120 made some pretty good observations here but I think neither of them got the conclusion right in Malkin what you
00:41:33.680 actually need here in order to survive in our industry is the ability to pop up and down the stack up after up and down
00:41:41.630 the stack of abstractions as needed regardless of your education background is simply not realistic to expect
00:41:48.560 yourself to know everything about the abstractions you're sitting on and that's perfectly natural on-demand
00:41:55.370 learning is solely just fine but you need to not be intimidated by the idea
00:42:00.980 of digging in and you need to have a good framework for doing that I
00:42:06.970 apologize for taking you on the extremely long detour but we're back
00:42:12.160 with all that laid out I think we're finally ready to talk about education I would like to argue that the skill of
00:42:19.610 fishing for our industry is the ability to think abstractly the ability to write
00:42:27.680 and work with abstractions is a very concrete example of that skill but more generally it is about the ability to
00:42:34.910 operate and think in terms of mental models acknowledge that they exist and that their simplifications and they're
00:42:41.690 often wrong and more importantly knowing what to do when they eventually leak for
00:42:49.220 me personally the structure of the traditional CS curriculum really helped me to pick up that skill by carefully
00:42:56.120 building up from the bottom up one little piece at a time semester after semester it helped me to
00:43:02.030 realize the existence of these abstraction layers and how they all fit
00:43:07.130 together to form bigger pieces it also gave me a pretty good framework for a
00:43:13.610 framework in process for how to keep learning and build up beyond what they
00:43:18.770 taught me in school but perhaps most importantly I was constantly exposed to hard topics that
00:43:25.870 initially it seemed impossible to understand yet by the end of the
00:43:30.970 semester everything will make sense by doing this over and over again during my time in school it gave me the confidence
00:43:37.660 I need to believe that I can take into difficult things and know that there will always be a way to figure it out if
00:43:44.320 I try hard enough now that we have figured out the secret sauce of my CS
00:43:50.410 experience perhaps we can start thinking about how we can funnel some of that bathwater we threw out into programs
00:43:58.360 like code schools while the traditional CS curriculum happened to work well for me personally I don't think any of the
00:44:05.830 things I mentioned before were intrinsically tied to four-year education in fact since a lot of CS
00:44:12.760 graduates did not leave school with that skill it probably indicates that we need to do better than just having this
00:44:19.570 implicitly encoded in the structure of the program in the spirit of teaching
00:44:25.390 students to fish I think to prime the primary concern of any tech education program should be about demonstrating
00:44:32.620 and teaching the framework for learning researching and understanding technical topics and the specific technical the
00:44:40.750 specific set of technical topics you cover in the curriculum should be secondary to that goal as the student it
00:44:48.220 is important to realize that whatever topic that they happen to teach you at school does not actually matter that
00:44:54.460 much in the grand scheme of things since there will always be more to learn whatever curriculum they picked is just
00:45:00.970 one possible combination out of the infinite many combinations the classes you took are actually just
00:45:07.780 drilling exercise for you to practice the skill of fishing and whether you caught a specific kind of fish during
00:45:14.859 that exercise it's actually not very important perhaps most important of all
00:45:21.190 we should be setting the right expectation for our graduates congratulations for completing a program
00:45:27.099 but unfortunately we're not done here the real learning as you all know
00:45:32.369 actually begin when you start working in the industry and unfortunately you
00:45:37.960 probably have to keep doing that for the rest of your career this is not because our industry is a scam but that's just
00:45:45.220 how human learns remember the hewn act the human action cycle and how we refine
00:45:52.599 our understanding of the world by repealing lis going through the circle in in a loop there's actually a border
00:46:01.119 version of this concept called the kinetic circle the hermeneutic circle was originally used to describe how
00:46:08.440 blippi coal scholar was study the bible the idea is that to understand the text as a whole you must first understand the
00:46:15.339 individual parts but the trap is to understand individual parts you must first understand what the whole text is
00:46:21.520 actually about so therefore the only way to achieve true understanding is to keep
00:46:26.619 circling back and forth between the big picture things like the historical context and the culture when the text
00:46:32.440 was written and then you can go into a holistic view of the whole text and followed by an examination of the
00:46:40.150 individual parts as you repeatedly go through this circle over and over again you would continue to gain new insights
00:46:47.260 and refine your understanding of the text if we extrapolate a little bit from
00:46:52.720 here I think this pretty much described how we all learn in general most of us
00:46:59.109 do not learn well in a vacuum in order to achieve true understanding we need to take the fear of your radical knowledge
00:47:06.640 we learned and apply them to real world problems and circle back to learn more theoretical knowledge based on our
00:47:13.420 experience in the real world for a lot of people spending three to four years in the university without
00:47:19.930 real world experience is just way too long the circle is getting way too big when you get to the end of the circle
00:47:26.170 you already forgot why you're here in the first place code school students on the other hand
00:47:31.900 have the opposite problem well it's great to have a short free month cycle so that you can immediately
00:47:38.170 apply the knowledge you learn in to real-world problems while the knowledge is still fresh the problem is once you
00:47:45.160 have completed that step how do you loop back into the next round of learning on one hand the learning resources are more
00:47:53.410 easily accessible than ever before today with initiative like iTunes you open
00:47:58.870 courseware casera the knowledge is indeed becoming more and more accessible to highly motivated individual but
00:48:06.520 that's part of the problem right once you have left the school support network it requires a lot of dedication
00:48:11.800 and determination to keep going besides as a beginner how do you know what learn
00:48:18.370 what to learn next do you just try to learn whatever happens to be trending on HACC news that month well perhaps there
00:48:26.020 could be a better structure for this when I was in school I enrolled in what they call the cooperative education
00:48:31.930 program where I was expected to spend my summers working in industry internship
00:48:37.030 positions this actually allowed me to close their unique circle much faster
00:48:42.280 and it will certainly have helped me avoid the CS cliff upon graduation I
00:48:47.850 think there probably is some similar opportunities waiting to be unlocked in new New Wave tech education programs for
00:48:55.000 example perhaps we can have a program where we teach HTML CSS and jQuery for a
00:49:01.210 month have the students work on will work marketing websites for a while and then they can come back to work
00:49:07.540 to learn some rails perhaps and then spend some time building simple crud
00:49:13.390 forms for small companies to automate simple tasks and finally they can come
00:49:19.330 back to learn more about UNIX server database for another month followed by an ops internship at
00:49:24.700 hosting company now these kind of jobs might sound boring and unambitious
00:49:29.970 perhaps they're just a digital version of burger-flipping but the thing is there there are plenty of these jobs out
00:49:36.790 there and by splitting up the learning into bite-sized chunk and intermixing
00:49:43.210 that with real-world industry experience it will probably help to keep the community circle to a more manageable
00:49:49.810 size before we wrap up I will like to
00:49:55.390 briefly discuss the social implication of the new way of tagging movement just
00:50:02.890 like uber and airbnb code schools and boot camps are solving some very very real problems and inefficiencies the
00:50:10.150 disconnect between academia and the industry is certainly real and I'm glad that they are here to address that
00:50:15.369 problem perhaps more and more importantly they are giving a second
00:50:20.470 chance to a lot of us who were in so lucky to have figure out the ideal career path the first time around but
00:50:27.849 just like we're in a V and V they are also throwing out a lot of regulations and wisdom we encode it in the existing
00:50:34.990 system therefore reintroducing some of the problems we have already solved before for example most CS programs in
00:50:43.329 universities have to go through a somewhat rigorous accreditation process which sets a basic uniform standard and
00:50:51.750 requirements and expectations among the different CS programs in different
00:50:58.780 schools now that's actually far from a perfect
00:51:04.190 system anyone who has hired college graduates would know that having a CS diploma is
00:51:10.400 actually a pretty leaky abstraction nevertheless it's actually useful to have some sort of abstractions at
00:51:16.990 minimum it makes hiring and training easier cope schools as they stand today
00:51:23.480 are extremely non-uniform some programs are just much much better than the others and is not usually very easy for
00:51:31.540 employers and potential students to tell them apart before it's already too late
00:51:37.240 besides accreditation we have also decided that it's important to give people fair access to education
00:51:44.000 regardless of they funding their financial background that's why we have
00:51:49.220 student loans to help even out the playing field just like accreditation student loans are by far not a perfect
00:51:56.090 system and they get a pretty wrap these days but at the most basic level it does
00:52:01.460 the job if you're poor you can still go to school of some help from the government in addition to that we have
00:52:08.690 also encoded our important things like anti anti discrimination and mission
00:52:14.150 policies and things like affirmative action requirements in the existing system our code schools and boot camps
00:52:21.350 just a temporary patch to a labor supply chain problem or does it look like
00:52:26.630 they're here to stay if so we might have to start taking taking these social
00:52:34.340 problems more seriously and perhaps if this codeschool thing took
00:52:39.869 off big times in our industry is there anything we can do to avoid accidentally regressing the goals that we have
00:52:46.050 already encoded in their existing systems finally I would like to end this
00:52:52.650 on a more positive note and something a little bit more personal for me as they
00:52:59.400 say it takes a village to raise a child in my experience that's definitely true
00:53:06.589 like you mentioned during my time at sou I enrolled in the cooperative education
00:53:12.450 program with mandatory internship requirements along the way a lot of
00:53:17.609 people have and companies have took a lot of risk and then decided to invest
00:53:22.740 in me even before I have anything to prove and beyond that my CS education
00:53:28.740 then actually end at SMU during my last year in school I was able to attend rels
00:53:35.670 count for the first time via the opportunity scholarship program which really opened my eyes and a lot a lot of
00:53:42.270 opportunities for me and later on in my career a lot of my open source mentors
00:53:48.569 have invested their personal time to help me love love without really
00:53:53.880 expecting anything in return but actually my CS education didn't start at
00:54:00.720 SMU either I cheated at time I saw programming in high school so when I go
00:54:06.359 to most of my cs classes it was already my second or third pass through their immediate circle needless to say that
00:54:13.500 was a huge advantage for me it all started when I met my first
00:54:18.980 mentor my first computer teacher at my elementary school who spent time outside
00:54:24.589 of school school hours and outside of the standard school curriculum to teach us to build websites and he also handed
00:54:31.549 me my first programming book but that's not really the beginning either my CS
00:54:37.789 education probably started when as a kid I decided to delete all the system files on the computer out of curiosity
00:54:44.450 instead of getting yelled at my a clothes simply decide to teach me how to reinstall windows on a computer so I can
00:54:51.049 do that over and over again but that's still not of it I wouldn't be able to do
00:54:58.700 any of these without a supportive family that tells me it's okay to explore my interests even though I grew up in a
00:55:04.519 culture where getting top grades from school as the Bo and and of everything uh yeah wouldn't be able to do any of
00:55:11.749 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
00:55:20.539 of these if I was in an environment where I could get bullied at school for being a geek and most certainly I would
00:55:28.009 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
00:55:34.460 girl therefore computer science education is
00:55:40.580 not just about teaching abstractions it's not about program literacy is also
00:55:47.150 about standing up against bullying fighting for gender equity reforming an education system to support kids to
00:55:53.180 develop their interests rather than just drowning them in homework and exams now
00:55:59.690 if it takes a village to raise a child it certainly it takes no less than entire fishing village to raise a 21st
00:56:06.230 century fisherman you have all made it here which means that you probably have
00:56:11.420 something to give pay forward be the village thank you very much
Explore all talks recorded at Red Dot Ruby Conference 2016
+17