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