Lessons From the Fifty-Year Quest to Turn Programmers into Software Engineers


[MUSIC].>>Hi, my name is Andrew Bagel. I’m a researcher in
the Ability Research Group at MSR. Today we have
a nice guest, Adam Barr, who used to work at Microsoft
even as short as two years ago. I met Adam a long time ago
actually when he was in Engineering Excellence and he gave me a lot of advice about
how to work with new employees at Microsoft
and especially how I used to do studies to figure out
how they adapted to life here and Adam had lots of great advice about his observations
to that process. Before that, he was also part of
Windows and he’s been working at Microsoft for in some capacity
over the last 23 or so years. So, he’s got lots to say and today he’s going to talk about
a book he wrote called, “The Problem With Software:
Why Smart Engineers Write Bad Code” and lessons that he has picked up over what
we all perceived as the last big push in
software engineering over the last 50 years
and where we’ve come to and where we should
be going next as well. So, thank you Adam.
Please take it away.>>Thank you. Thank
you for having me. Thank you for coming out. So, as he said, I’m Adam Barr
and I wrote this book. This is my career, more or less, that I started out of
college and a small company called Dendrite which you
probably have heard of. Then I came to Microsoft
in early 1990. I worked on the first
diversions of NT. I worked on interactive television
project which went nowhere eventually like most of Microsoft’s interactive
television projects. I worked on Digital Studio, a non-linear Video Editor at a company in Montreal,
all they required. That’s where I grew up.
Worked on Windows 2,000, also knows as NT Five. There’s actually a break in there. Right there, I actually
wrote two books. One is called “Proudly
Serving My Corporate Masters” which is about
the first 10 years and then one is called “Find the Bug About Debugging and Reading Code”
which you’re welcome to peruse. After the talk, then I came back. I was a PM on PowerShell.
This was all Dev. I was a PM on PowerShell. I worked in Engineering Excellence
for about five years. We gave out these nice
Engineering Excellence awards. No other logo apparently has
survived on the Internet. Then I went to Office,
worked on 2013-2016 and the next version for awhile
once Office started going, monthly shipping the year stopped
really mattering as much. I now work at a company
called Crosslake which is a consultancy that does
due diligence for acquisition. So, if you’re planning on buying a software company and you
want to kick the tires, just let me know, I can help you out. So, the term software engineering was originated about 50 years ago. Actually, I wanted to sub
tittle a book something like the 50 year quest to turn software- to turn programmers into software engineers but MIT Pres said that was too long
so I just made it, “Why smart engineers write bad code.” But the time- this city on the left
here is Garmisch, Germany. So, 1968, NATO, the North
Atlantic Treaty Organization, decided that they
were concerned about the quality of software
used for military purposes. So, they convened this software engineering conference and
it was the first time that the term software engineering
really was used commonly. So, they got a bunch of academics and a bunch of
industry people together. They met, they agreed, “Yes, there’s a problem of software.
We need to work on it. We need to make real
software engineers.” Sounds great everyone,
went away happy, they came back a year later
in Rome and they had the second NATO software
engineering conference and they got into a big argument with the industry people saying the academics had
their heads in the cloud and the academics and industry
people just wanted to shove software out the door
and didn’t care about methods. That was the end of
the two year attempt to have a NATO software
engineering conference. That gap- the academic industry gap, has continued and grown
in the last 50 years. That is the problem with software
that I mentioned in the book. But there’s a lot of
other good stuff too. So, one example is language choice. So, this is the Tower of Babel, meant to symbolize the variety
of humans spoken languages. You probably recognize this image because in a hallway
near your offices, they have completed jigsaw puzzle
with this image on it, but it’s symbolizing
the variety of languages. If we look at computer languages, where they came from, so the first few languages
came from academia. So, Basic was two guys at Dartmouth, Pascal was a guy in Switzerland, the DTH and ALGOL was
actually a committee of computer scientists who got
together to create language. Then he moved into this phase where research labs tended to invent languages but that wasn’t
their main purpose. They had something else in mind
and they needed a better language. So Simula was a Norwegian lab which was actually trying
to do simulations like traffic simulations and they invented Simula which was
the first object oriented language. C, C++ came out of Bell labs. Again, they were trying to write
better switching software. They weren’t trying to
create a language but they needed a better language. Smalltalk, Xerox Parc was doing
research on graphical UIs, decided we need a better language
to write graphical UIs. So, the Campus Smalltalk. Again, it wasn’t the goal
to sell Smalltalk, it was a means to an end. Now, we have real companies
creating languages. So, the first two that
really this happened was Objective-C and Eiffel which were the two big object oriented
languages that were hyped.>>Eiffel.>>Now, okay. I’m not saying Eiffel was a [inaudible]
language but they were the first->>Oh no, I put it up in an academia.>>- you put it in academia, well.>>Academia is a very interesting
hybrid, it’s no more->>Was a hybrid but the guy
who wrote it Bertrand Meyer.>>Yes.>>By the way,.>>He’s a professor.>>I said hold questions
but you could never. It’s like I said,
it’s truly terrible. The key thing was they
had a company, Eiffel, that was selling Eiffel
the language and he was hyping Object-Oriented Software
because he wanted to sell Eiffel and Brad Cox came up with Objective-C and at a company selling Objective-C,
that was the goal. So, he was also hyping Objective-C and he talked about
how we’re going to stitch together objects like
integrated circuits on a motherboard and Bertrand Meyer
came in with Eiffel and said, “Oh yes, forget about it. Don’t think about your actions, think about your data and it’ll change the world” which is the fundamental
object-oriented hype. They were the first to
really like, I said, that was the goal of the company. So, they tended to over-hype
because they were trying to sell software and basically, everything else is like
that too, C-sharp, Go, and Java, were all companies doing this to sell
the language or to sell a platform based on
the language, right? So, their motivations
were a little suspect and there’s really no academic
research about these languages. They’re not backed by some explanation of why
this language is better in this situation and that language is better in
some other situation. People are free to just
make outrageous claims about the quality of
their language and how it’s awesome for everything because
it’s drifted away from academia. So, what’s caused this drift? This is a diagram from
Fred Brooks’s book. It’s in the book, “The
Mythical Man Month.” It’s not in the essay
“The Mythical Man Month.” So, Fred Brooks’s essay is famous. The Mythical Man Month is saying, “If you add people to a software project that’s
late, you make it later.” But this is something else he said. It was very insightful
like most of his book. So, at the top left,
you have what he called a program which is what
you work on in school. What academics can handle, a professor and a couple
of grad students. It’s just a program, maybe three-four people work on it. It lasts for some short
period of time and it goes away, fulfills its purpose. Fred Brooks said, “These things get complicated in two dimensions.” One is you have a
programming system where you have a software that’s
stitched together by multiple teams work and
they have APIs and have to integrate it and not
everybody can fit in the room. It gets more complicated
going down as well. When you have a programming product, something that’s sold is maintained. It lives for years and years. The people working on it now are not the people who originally
worked on it and it’s much more complicated
way with documentation and testing and maintaining it. He said it gets three times more
complicated in both dimensions. So, a programming systems product which is what a company
like Microsoft is working on is nine times as
complicated as a program. But actually, Edsgar Dijkstra, an academic and perennial
source of good quotes, actually claims it’s 100
times more complicated. So, he said, “It’s nice
if I could illustrate the various techniques was
small demonstration programs. This is in some book
he’s writing about software and could conclude with and when faced with a program
1,000 times as large, you compose it in the same way. This would be
self-defeating as one of my central themes will be there a few things that different
some respect by a factor already 100 or more are
utterly incomparable. So he’s saying, this
top left quadrant and the bottom right quadrant
although they’re both software, are
really very different. Then, Harlan Mills is another. He’s an IBM guy, actually, a very well-known guy
who worked with IBM for a long time leading software teams
has the same method. Its characteristic,
the problems we solved by advanced practitioners require sustained efforts
over months or years for many people, 10s or 100s. So, this is many years
and many people, right? It’s both of the complications. This mass problem-solving requires a radically different position in scope than required for
individual problem solvers. Now, this is 1980, right? This was understood by people
at the end of the 1980s. But instead of listening
to this wisdom, people went searching
for silver bullets. This is the Lone Ranger who’s famous for shooting his enemies
with silver bullets. Just kind of a signature move. But silver bullets, if you want to kill a werewolf and
since we live in the Northwest, might come in handy, you need
a silver bullet apparently. Fred Brooks wrote an essay
called “No silver bullet” in which he explained that we hear cries for a silver bullet to make software costs drop
as much as hardware costs, but we see no silver bullet
on the horizon. There’s no single
development in technology or management which gives even one order of magnitude
of improvement in productivity, reliability,
and simplicity. Then the key point is they’re not
only they’re no silver bullets, now in view of
the very nature of software makes it unlikely there will be any. Misses an important point. But despite that, the
history of software engineering these last 50 years had been a search for silver bullets. People are claiming that they have some technique that’s
going to make software simple and make all the problems go
away or at least be minimized. So, starting with structured
programming which is way back in the late 60s and early 70s which is basically,
although it’s interesting. Every book about
structured programming makes great claims about how
it’s awesome and then it sort of confesses later that
they’re not really sure what structured
programming really is but it’s got to be really important because everyone’s
talking about it. But basically, structured
programming is not having go to’s in your code, like that’s what it boils down to. Don’t write assembly language
in a higher-level language. That was a big thing., wow, everything’s going to be saved
by structured programming. Then we had formal testing
was going to save the world. This is was around early 70s people started talking about
testing software. Then the entire collection of object-oriented programming
which led to design patterns, which lead to unit
test, which led to TDD. That whole thing was individually and collectively
going to save the planet. Agile of course is hiked to the sky. Now we’ve got functional programming, you probably heard of DevOps. So, again, it’s going to
solve all the problems. You can tell when you
read a book about these stuff in the prefix
just makes these wild. The preface maybe makes wild
claims that doesn’t really have much content that it’s- you’re
in silver bullet territory. It started way back in the day. This is a picture of mainframe with tape reels to symbolize
way back in the day. The structured programming
actually has an academic theory, a formal proof that you can
write a program without GOTO. I won’t read this quote because
that’s basically what it says. Now, the code that results
if you form and apply, this is actually really ugly and
you would not want to write it. It’s quite better to have GOTOs
then what this thing produces, but it actually, you at
least was an academic saying “I’m going to show
the structured programming worth. I’m not just going to claim it”. Then formal testing. Also, you have both Dijkstra, the academic, and Harlan Mills, the practitioner saying, “You can find bugs in formal testing but you can’t prove that your software
doesn’t have any bugs.” Note the dates. This is
before Microsoft was founded and yet Microsoft embarked
starting in, I don’t know, in 1985 or something on
a 15 year mission to show that you could in fact prove software
correct with formal testing, which didn’t go also well. But the problem was Microsoft ignored the history
here unfortunately. Many other companies did too. I’m not picking on Microsoft. I just happened to
know a lot about it. But that was it where
they really tried to figure these silver
boards out with any kind of research and
there were some research. People used to study
programmers in 70’s. People actually studied
commenting style. I mean, you can read these papers,
it’s quite interesting. Commenting style. Do variable names matter? There’s actually a theory
that it was better to have like random variable names
rather than ones that made sense, because it forced you to pay more
attention when reading the code. I mean, maybe it’s crazy idea but people
actually studied it. It was like the main thing. They did a little AB experiments. Indenting; does indenting
matter believe it or not? GOTO, people tried to study. Does this is code clearer
with GOTO and not are there, certain cases where it’s
better to have GOTOs. That kind of thing. Again, note
the dates were in the 70’s. But Fred Brooks pointed
out this kind of died out. So, he wrote an update
to Mythical Man-Month in the mid 90’s and he
said he was surprised how few of the things
that he asserted were critiqued, proven or disproven. He wasn’t claiming
everything was right, he was just surprised that
nobody really studied it in any kind of empirical way by
ongoing research and experience. So, you get comments like this
talking about Hungarian notation. This is in the book, Show Stopper! which documents the first
product cycle of Windows NT. “Coding style wars are a waste
of valuable resources, although the confusion caused by Hungarian probably waste more time.” So, this is an unidentified
Windows NT 3.1 developer in 1992. It’s not me even though I was unidentified one of
NT developer in 1992, but I did buy into this at the time, few years out of college because
NT didn’t use Hungarian. So, it must be right. My current project was sort of my, the thing that was
driving my thinking about software. Then you get to this. Does anyone know
what TV show this is from? Was Silicon Valley. This is Richard breaking
up with his girlfriend and why is he breaking up
with her? Does anyone? Is tabs versus spaces, right. She uses spaces sorry. He uses tabs of course. I mean, obviously
that’s a huge issue. Harlan Mills has a quote about
this long before Silicon Valley. He’s not commenting
on Silicon Valley. There’s no mathematical rigor
to inhibit these discussions, some became quite VM, and this scene actually ends with Richard throwing themselves
down the stairs. Although it’s not really
clear why he does that. So, what happened? We had these studies, people are studying GOTOs and indenting and commenting
style in the 70’s. Then, now or suddenly, nobody’s paying attention
to stuff anymore. Well, here’s a hint from
a quote from Gerald Weinberg, another longtime observer of computer science who I
encourage you to read. So, he’s writing 1998. He’s talking to the programmers
in the mid 90’s. He says, “It’s interesting, with
coincidence that all of them had learned to program before they studied programming
formally in school. That’s a major change brought
about by the personal computer. I had not even seen
a computer before I went to work for IBM in 1956.” Yes, there are actually
were computers in 1956, but it’s not a coincidence. This is the important thing
that happened. The personal computer is the cause of this,
throwing everything away. Of course, lot of the blame
rests with these two guys; Paul Allen, rest in
peace, and Bill Gates. This is them at Lakeside in early
the 70’s learning to program, teach themselves to
program in basic on some terminal connected
to a mainframe. They did this a little
earlier than most people. Most people didn’t quite
do this in the early 70’s unlike the late
70’s when the PCs, all the PCs came out with basic. But this is what happened, everyone taught
themselves the program. Once they had access to a computer, they didn’t need any instruction, you need to take in class to
get access to a computer. They just had a giant
basic programming party. Right about the same time, Edsger Dijkstra’s
frantically trying to get people to stop
programming in basic. “It’s practically impossible to teach good programmers to students, good programming to
students that have had prior exposure to BASIC; as potential programmers, they are mentally mutilated beyond
hope of generation”. So, I just did a survey. Who learn to program in basic? Yes. Okay. Right. Yes. So, you can disagree but I think it took me
a while to overcome my sense it, because I know how to program
in basic which didn’t even have functions with names and
parameters when I was learning it. I was mentally mutilated, might be overstating it,
but I was slightly damaged. Now, Dijkstra like I said, Dijkstra just generates
great quotes constantly or did, but actually had a point.
He really had a point. This article, it’s called ‘How do we tell truths that might hurt? ‘ He’s basically saying
“don’t program in basic. There are better languages out there. I you learn basic first, your going to hurt yourself.” Unfortunately, is 1975,
the year Microsoft has founded, what was Microsoft founders do? Produce a basic interpreter. What irony. The results you have a bunch of self-taught
programmers out there, right? Like I was self taught and a bunch of people at Microsoft
now are self-taught. You may have gone and major
in computer science in school but you didn’t learn to
program there, right? You taught yourself the program in high school, you kept doing that. Whatever worked for you, whatever crazy debugging system
and variable naming and all that. Then you kept going at that
for a while probably at Microsoft until eventually
you might realize “Oh wow! This isn’t quite working for
these programming system products. Like this bottom right quadrant. I’m doing top left quadrant stuff. Trying to get paid to
do bottom-right stuff. I have to adapt my approach”, but really, a lot of
people are self-taught. Harlan Mills, again, writing long before Microsoft was founded or little before
Microsoft was founded, when there maybe we would’ve
been time to fix this problem but nobody paid attention. “Our present programming
courses are patterned along those that are of “course
in the French dictionary”. In such a course, we
study the dictionary and learn what the meaning of
French words are in English. That corresponds to learning what PL/1 or Fortran
statements do to data. Just learn the syntax of
this, of the language. At the completion of such a course in French dictionary we then invited
the exhort the graduates to go forth and write French poetry which corresponds to writing code”. I think I can stop explaining
the analogy at this point. “Of course, the results
that some people can write French poetry and some not, but the skills critical to writing poetry were not
learned in the course, they just took a French dictionary”. So, many self-taught
programmers happen to be naturally clever people and can write software but they’re not
taught that in college. They just happen to have that skill
and they taught themselves. They read a basic manual like
I did which has the syntax, but doesn’t really
explain anything about why you should be doing this stuff. Harlan Mills again types
in “If the precision and scope are not gained in
university education, it is difficult to
acquire them later, no matter how well motivated or adept a person might be at individual, intuitive approaches
to problem solving.” So, you may be great in
a top left box but it doesn’t mean your going to be
good at the bottom right box, the programming systems product. So, you may not know
things you’d like to know, like what’s the right
programming languages to use? People just tend to use
the same programming language they used for the previous
problem they solved. What to look for in code reviews?
What to look for in hiring? Notoriously interviews for software
developers are kind of random. How reliably is the softwares? Is the software about to fail? Is the software obsolete? So, the vast majority of
software, for example, that runs the Internet
and is the first piece of software to contact a potentially
malicious network packet, is written in C because
it’s going to be something in the guts of Unix,
Linux or Windows. That’s like exactly the worst
language for that kind of thing, because it’s so exploitable by design but it wasn’t meant to be
connected to the Internet. So, when you talk to civil engineer, they can look at a bridge and say “This bridge is about to collapse.” They can say “Well,
if you do this stuff, you might fix it up in the last while longer or maybe it’s hopeless. It’s going to collapse
no matter what.” That’s what engineers can do. When you look at something like
the Office source codebase, which I happened to be
work with for a while. Now I’m not making any claims about the office codebase
being obsolete or not, but it would be very hard
to answer the question, is the Office codebase
obsolete or not? I know a lot of work has been done to improve it but is it actually being fixed up or is it just your painting a bridge which
is going to collapse anyway? It’s just very hard
to make these kind of statements because there’s not a
lot of theory behind software. Programmers are just content to use their own
experiences as a guide. Whatever they learned about anything in software they like
“Well, works for me. People were throwing money
meaning this is great. I’ve got a career. I don’t like to think too deeply about whether
I’m doing the right thing.” So, Fred Brooks and
the other thing he said which I think is
sort of symptomatic of programmers. So, about nine years after
there’s No Silver Bullet essay, he wrote a follow-up essay
for our second version of his book and he’s
talking about people attacking the No Silver Bullet essay. They mostly attacked
the central argument that there is no magical solution and his opinion
that there cannot be one. So, they agree with his arguments
in No Silver Bullet. But then they go out and say there is a silver bullet for
the software beast which the author, the person complaining has invented. So, they’re basically saying
everybody else is an idiot. But I know the answer. I can solve this offer
problem which is the ultimate thing
a software engineer would say. This is Icarus the Greek legends. So, Icarus was stuck on
an island, imprisoned. It’s a long story, but anyway, his father made wings out of
feathers and attached them with wax and they attempted to fly away from the island
they were imprisoned on. At some point, I’m not sure
this actually really happened, but he got interested in the start and he flew too close to
the sun and the wax melted, the wings fell off and
he drowned in a sea. Poor guy. He’s the sort
of the picture of hubris. Right? People thinking they
can do more than actually can. This is a quote from Alexis Ohanian,
who found it read it. But for the purpose of this, he’s also married to Serena Williams. Right? Arguably the greatest female
tennis player in history. So, he found Ohanian, he’s got to versus a website
thinks he’s a genius. Then he actually
observed Serena Williams training to be great
at tennis and he says, “I thought I was the hardest
working person on the planet. I thought We, We software, were the hardest working industry. That’s what we tell
ourselves. It’s all malarkey. I’ve had this front row seat over the last three years to greatness. It’s a humbling experiencing what it takes to actually be that great.” So, he is realizing he’s not quite as awesome
as he thought he was. Just because he could
crack down a website. Gerald Weinberg, once
again pops in saying, “The essential personality factor in programming is a small dose
of humility. ” and he goes on to explain
that without that, you’ll be go for the classic pattern
of Greek drama like Icarus that successfully
self-confidence who bristling to blind
self destruction, and the idea that a programmer can
learn a few simple techniques, self-taught and high school. Think you’re an expert and then be crushed by the irresistible power
at the computer or at least, maybe that’s a little
dramatic but have more bugs than the
expected, kind of thing. You might think, wow, that’s great. But can’t we just go
back to the simple days of writing code in the top left quadrant and why do you use to actually like reading
and writing programs. Any answers now? Sorry.
You work at Microsoft. You’re getting paid to write
the programming systems products not the fun stuff so, deal with it.”One problem though
is how fast it’s all happened.” So, Harlan Mills noted this in 76, that it’s all happening in
one generation and the past 25 years got this whole new industry that’s has a critical role
in business and government. Hadn’t been spread
it over a 125 years, five generations instead of just one, you might have
different history. Imagine the opportunity for
early industrial development with five human generations of
curriculum development education, feedback for the expansion
of useful methodologies, and pruning of less useful topics. Right? Now, you might
think, well okay. But it’s been 40 years more. So, maybe we’ve had that except remember we throw everything
away about five years after he said this because of
the personal computer revolution people ignored all the
wisdom from the 60s and 70s. So, we started over. We’re about 35 years into attempt to relearn everything
about software development, and it’s still basically
one generation. You still have people floating
around Microsoft to learn to program in basic on some Yankee computer and that’s where their formative
experiences came from. It’s like an [inaudible]
was running Boeing. If he was still around but
aviation is developed over a long period of time and
all the pioneers of age doubt. Or it’ll make the center
saying,” You know about those new-fangled jet engine. Maybe stick the balsa
wood or whatever. But that’s not happening
in aviation but essentially is happening
in the software industry, the people are still around. The early people who taught
themselves are still around. If you learn to program
up in the top left, it’s hard to adapt, understand what’s necessary
for the bottom-right. Marisa has actually
done a pretty good job. I have to say now I’m at
a software consultant. I go look at companies all over the place and Marisa is actually
pretty good in their techniques. I mean, it took a long time, a lot of painful learning
but actually they have a pretty good handle on writing these programming systems
products at this point. Although a lot of mistakes were made. So, we wanted some fancy so
this is actually randomly. I saw something, Microsoft
redid procurement site, the internal procurement site. So, I was just looking
for a diagram of a complicated software component
or software system, and came up with this. But there’s a bunch of [inaudible]
that are stitched together with API and it’s got a bunch
of different modules. Clearly, it’s in
the bottom right quadrant, and this is complicated. It’s not just a simple
program and this is just an internal procurement
site for Microsoft. Right? It’s not the world’s
most complicated software. So, you have to do
all the hard things. You have to worry about
documentation, and write unit tests, and do static analysis, and all this stuff and think about API design, that’s a lot of work. It sees more fun to
write small software, but that’s the way it is these days. In the aviation there were the
heroes. This is Charles Lindbergh. First person to fly solo
across the Atlantic. A lot of hero pilots, and the hero pilots did some
awesome stuff and inspired people. But eventually, they
either from being a little too heroic or
just from aging out, they were no longer on the scene. But you still have a lot of hero, and Microsoft went through
a phase where they celebrated hero programmers which
I think they’ve mostly gotten over but
there’s a lot of that. The person in a corner crank
and out code was revered and that’s
just not what you need for a real software development. The one thing I want to
talk about is performance. So, this is Donald Knuth probably
most famous quote Donald Knuth, another longtime
writer about software. “There’s no doubt that
the grail efficiency leads to abuse. Grail’s efficiency
meaning worried about performance over other stuff. Programmers wastes enormous amounts of time thinking about or worrying about the speed of noncritical parts
of their programs. These attempts that
efficiency actually have a strong negative impact when debugging and
maintenance are considered. We should forget about
small efficiencies say about 97 percent of the time. Premature optimization is
the root of all evil.” That is the famous quote from Knuth. Now, if you’re back in the old days, you program in this thing which
is an early TRS-80 Model one. So this had four k of memory, that’s 4,096 bytes, not four
meg or four gig or whatever. Four k and had a BASIC in ROM but
four k [inaudible] the language, I mean the program and the data. I think you could have
26 numeric variables, A through Z, two strings A $ and B $ and
one array A for array I guess. But people actually wrote software
in this thing, miraculously. Okay. In that environment you
worry about performance, right? Because like, there’s
not a lot of room, but you’re also writing, you’re
in the top left quadrant, right? Probably doing a lot of large software development projects
that’s going on in this thing. It was single people writing some piece of software
for themselves. So fine. Do whatever you want. When one person’s writing on, when one person’s working
on a piece of software, you can use almost any language, almost any technique because you’ll know what you
mean when you read it especially if you’re not
using it for a long time. But people still like to focus on performance because it’s measurable. In particularly, you
can measure performance if you’re in the top
left quadrant, right? Any small piece of software
can be tuned and made faster. It feels like you’re doing something useful because you can measure it. Measuring maintainability is my API, easily consumable by somebody else, involves dealing with
other people basically, not really what
programmers want to do. But when you’re
working on this stuff, that’s what you’ve
got to worry about. So it’s much easier to
focus on performance. You can get this gratification. “Oh look, I’ve made
it faster.” You don’t have to deal with other people. But unfortunately, when you’re
working at a large software company, you have to deal with
other people and other people reading your code
is much more important than you geeking out on some random performance tweak
that makes it harder to read. And even today I hear
people say, “Okay. What’s wrong with today’s young
programmers, the kids today.” They’ll probably complain about performance and probably say, “Well, they’re all smart and everything
but they write this C# code to manipulate a string and they don’t realize what’s going on underneath. Oh my God.” I’m like,
“That is the greatest thing.” They don’t have
to worry about that. They also don’t get exploited by random script kitties on the
internet too, which is a nice thing. So the fact that you don’t
have to worry about this, you have languages to take care of these basics and memory allocation is a huge advancement in software and not some horrible thing that
people are ignoring performance. Dijkstra was talking about this. He’s talking about gotos, but
he’s saying why gotos are bad, but the second part is important. We try to shorten that
conceptual gap between the static program and
the dynamic process, that is, you read a program,
spread out in text space. You want to figure out what’s
going on in memory of the process. So, you need to worry
about readability, not performance and focus on whether people can understand
the thing when they read it. Performance and readability
are opposed to each other. This is a spy versus spy
guys from MAD Magazine, which maybe slightly old
reference here, but. Now, I know people pi up
some idea in mind where, “Okay. There was an algorithm and I made it, I managed to make it easier to
read and faster and simpler and it’s all like performance and readability were marching
together hand in hand.” But that almost never happens. They generally are opposed. You start with something nice and clean and then you say,
“Oh it’s too slow. I better start hacking away at it. I’m going to add an extra parameter. I’m going to make the
code more complicated, it will have some special case, I’ll add some side access
to the data, whatever.” It just takes away from readability. Also point out, you could
change over readability to managed code and the word
performance to native code and you would have a graphic summary
of a battle that raged inside Microsoft
for most of the decade of the 2000s between the.NET
API and the Window’s Native API over what is the story we tell developers and the story
developers heard was, “I’ll go write
iOS applications instead.” So this really causes problems. Obviously, you can guess which
side I’m on and I think most of these had been resolved at
this point in favor of managed code. But people are making claims
about performance and readability being able to be improved together that I
don’t believe are true. They tend to be
opposite of each other. So I’ll just clean up Knuth’s quote. Instead of saying, “Premature optimization is
the root of all evil.” I’ll just say, “Optimization
is the root of all evil.” Hey it’s me, this year. Now, this does not mean
you never optimize, right? This is a takeoff on the quote, “Money is the root of all evil.” So, that doesn’t mean you never use money, we should
get rid of money. It just means that
money causes problems and you have to be careful about it. So same thing. I’m not
saying, never optimize. I’m just saying be careful because when you have
problems with your software, a lot of times it’s because
somebody was over optimizing. Of course, people always have
excuses to optimize, right? [inaudible] , you were working on some minicomputer with
small amounts of memory, then the PC comes along, it’s got small amounts of memory. Next generation has
these small devices. They have way more memory
than these other things, but still, “Ah gee, it’s
kind of a hand-held. I better start optimizing
here.” But just don’t do it. My father tells a story of, somebody explained, how do
you identify tree in Oregon? The answer is, you just point
and say it’s a Douglas fir. Now you’ll be occasionally wrong, but really not enough to matter. Same thing with optimization. When someone says, “Should I
optimize something.” Just say, “No.” Occasionally you’ll get wrong,
but again, not enough to matter. If someone wants to add
a cache or something, just like don’t do it. Again, caches are great fun, they’re nice little top-left things you can do and you
can tweak them and, “Oh, it’s so much fun
to wrote a cache.” But, it’s just going to collect
bugs along with the data. Now, things are moving to the cloud. This is good because
it clears away some of the grunge in code because you have to deal
with the problems, right? You can’t just throw it
over to user and they have to worry about all the bugs. So it’s nice. It inspires people to write maintainable code because
they feel the pain more. But it’s also, there’s
some good techniques here. I’m not throwing a buzzword
here claiming that containerize microservices are a silver bullet for
software development, even though, of course,
some people are saying that. But it does. When
you start connecting services that can
scale independently, this is sort of the modern way
to write software. In particular, they can
work independently, they’re connected by
APIs which are not these ugly binary APIs
that are hard to debug. You can actually, you can log them, you can replay them. It’s very nice. You don’t have to
worry about memory allocation. I mean another aspect of
this sort of performance versus readability is
people who write code, that obsessively checks for
memory allocation failures and you wind up with
the actual logic is seven ifs down over here and
barely fits in your editor. That’s not if it’s a managed code. People could just write code and pretends that memory never runs out. I mean, I know they
don’t really do it, they actually catch
the exception, right? We do something when memory runs out, but reality is people just
pretend memory never runs out, which is great because
memory never does run out. If it does, then it’s a service. Who cares? It gets restarted. So you can write cleaner code. I mean, the difference between
your memory allocations failing and you cascading up a failure
versus throwing an exception, which isn’t handled is, there’s no difference. Just
restart the thing. So, eventually we will all be running software like
this. This is my claim. Like even some game will
be written like this to be reliable and scalable, even though you might say “Oh,
but it won’t perform well.” But it’s worth it to make
more maintainable code. And you can actually
get to some notion of “I want to make
the thing twice as strong. I want to make it twice as reliable.” Because you are going
to actually handle it with programming techniques
which are harder, but that’s where we need to move to. This is a quote from
Lord of the Rings, “Short cuts make long delays.” But you can’t skimp on this stuff, you have to do the, like I said, you got to write the test and got to do the code reviews
and all that stuff. This is the same advice we were
giving in Engineering Excellence 10 years ago inside Microsoft. If you’re a manager, then please give your employees
time to do this, right? Don’t look at some schedule
and say, “I don’t know. I think I could do it
in half the time.” Right? Because you’re
thinking of the old way, the grungy way of writing code. You’re not thinking about modern
software development where things just take a lot longer and
there’s a lot more to do. So, Harlan Mills. Again,
this is 40 years ago. So, “The next generation of
programmers will be much more competent than the first ones.
They’ll have to be. Just as it was easier to get into
college in the good old days, it was also easy to get by as a
programmer in the good old days. For this new generation of
programmer will need to be capable of a level of precision and
productivity never dreamed up before.” Now, he’s writing in ’78. I think the next generation, which is my generation
basically, did do that. We were better programmers. We had better tools, we
had better techniques, we wrote better code than
they did in the ’70s. But it has to happen again. People always tend to
write software that is just about as complicated as
a human being can handle. So if you’re writing in assembly
language in 1967 or something, then maybe getting a sort to work is like barely something you can handle. Now, many years later, getting something like
Windows to work is again sort of at the limit
of human ability, and we’ll be doing
more complicated stuff in the future and people have to do more stuff, actually
more productive. Hopefully, we can get the academia
back working with industry again so there would actually be some scientific backing
to all this stuff. I do encourage people to work with the ACM and
IEEE Computer Society, which are industry trade groups. I don’t mean just people in research. I know research, people in
building 99 go to a lot of conferences and present
a lot of conferences, but I really encourage
everyday product group people at Microsoft to also get involved. There’s a lot of wisdom there. You can get there’s also
a lot of wisdom to share. Like I said, Microsoft actually does a pretty good job
of software development, and a lot of companies could
learn from Microsoft if you are out there talking about it, which we tend not to do. We, excuse me, I mean you. I don’t work at Microsoft anymore. If you want something to
read besides, obviously, my book, I do think these three, this is basically Harlan Mills’ book, Fred Brooks’ book
and Jerry Weinberg’s book are great even
though they’re all old. A lot of wisdom still
applies because it’s the same problems people
had back in the day. Dijkstra has some good books too, but his books tend to mix together something insightful
about programming, with a proof that a sort algorithm is faster than another sort
algorithm or something. So, they’re a mix, but
these are all good. These all about technique, and process, and management. Finally, if you feel
any residual guilt because you’re working for Microsoft, and Microsoft was founded to
create a basic interpreter and go pollute the world with
mentally mutilated programmers, I used to work in
Engineering Excellence. Engineering Excellence was shut
down a little bit after I left. I think that’s a coincidence, but I wish Microsoft
would study itself more. There’s a lot to learn. We found that people tended to
not be interested in a device from other groups at
Microsoft because they could easily understand. Well, we’re Windows in their office and we’re
completely different, so I’ll just ignore that advice. Whereas they take
something like Agile which wasn’t really relevant
to Microsoft in most cases, but they’d like, oh this is great. So, I encourage Microsoft to study, to look inward a bit. Like I said, there’s
a lot of wisdom at Microsoft that could be shared, and try to make up to the world for creating a generation of basic,
self-taught basic programmers. That’s my presentation. I’m happy to take questions. You can contact me on Twitter and
you can also get a hold of me. I post occasionally on Twitter. That’s the easiest way
to get a hold of me. I’ll answer questions,
but first I want to actually give away
a copy of the book. There’s others copies
there in other book, but if someone wants to win a copy. So the question is, I have a trivial question that
you have to answer. So, it’s a little old school. So Dijkstra in his talk
the worry was ragged on basic, and saying that mentally
mutilates people. He also criticized
four other languages that were current at the time, and the question is, can
you name three of them? Three of the languages that Dijkstra was also criticizing.
Yes, in the back.>>I’ll take a step.>>Okay.>>Algo, Cobol, and Fortran.>>You’re close. You have two out of three.>>Pascal.>>No, not Pascal.>>[inaudible].>>What’s that?>>[inaudible]>>Say it. Yes.>>There’s PL/1.>>Well, okay one of the three.>>Fortran, PL/1, and Cobol.>>Yes, that’s right.
Fortran, PL/1, and Cobol. So actually he liked Algo. Algo is actually
a pretty good language. It’s really the ancestor of
most procedural languages. C, C#, all kind of come from Algo. Is the first one with
what seems obvious now, but if-statements with
blocks of code after them, which was a big idea then. Really the first language
that didn’t require go tos to write decent code. Yes. So Dijkstra was on, he didn’t like Cobol,
Fortran, PL/1, and APL. APL which is, I mean, it’s sort of a programming language. It’s sort of a crossing
of programming language and a cry for help, but it was actually a serious
language that IBM came up with, God knows why, and he,
of course, I mean, making fun of APL is sort of easy, but the Dijkstra also is pointing out that there
were other problems. PL/1 is not bad actually. I’m not
sure why he didn’t like PL/1, probably because was
involved in creating it, and he had some beef
with IBM but yes, he was against most
of them except Algo. Of course, C was being
germinated at the time, but he didn’t know it probably. So there were better languages
coming on. So here you go. Erica, my former Manager, in
fact, in Engineering Excellence, you have won a copy of the Problem
with Software. Thank you. Okay. I’m happy to take questions if anybody has any questions on that. Like I said, I have copies of this
book and the other two books. While I’m here, if
you want to improve your bug, your code reading, or figure out what happened
to Microsoft in the ’90s, you’re welcome to come
up and peruse those. Yes, question. Oh, well, in
the back there, I guess. No, yes, sorry. Gray sweatshirt, yes.>>Yes. So you mentioned
the quadrants a couple of times, and so my question is sort of
about technical interviews because in universities
when we do interviews, we tend to ask questions
about that top-left quadrant, and it seems like to be successful, you’re talking about
the bottom-right quadrant. So, what should we do about this? Should we be doing
interviews differently? We’re testing for the wrong quadrant
or something else?>>Oh, that’s a very good question. So in a whiteboard interview, you’re stuck in
the top-left quadrant. I mean, that’s all you have. You can’t whiteboard out anything
that gets all complicated, even something like an API design. You can talk about API design, maybe testing, kind of get
a little bit into the other ones, but you do want to ask
people coding questions, and they’re going to
be small of necessity. I think what you could ask them
though is about experience. Part of what the book talks about is, I wish academia would focus more on these bottom-right
quadrant pieces of code. In particular, there’s tons
of Open-source out there now. So, you could just have
a class where you were hacking on a Linux Kernel
or the Windows Kernel if, I don’t know what the state
of open-sourcing Windows is, or anything. There’s so much Open-source software out there that you could
have people modify it, and read large bytes of code, and try to make modifications,
understand different styles. So, I’m hoping people will come
out of college having done that, and then you could ask them about it. Tell me about a time you had to
consume a large body of code, tell me about how
you’d approach this. Talk about something you like or
dislike in somebody else’s code. So, you can mass more experiential
questions about it because you could bring up some giant source
code listing in an interview and ask people to figure
out what’s going on, but that’s a little probably
too strict, but hopefully, they would have experiences coming out of college that
they could talk about. When I was in Engineering
Excellence, I actually had the ability to ask HR to look
through interview feedback, to see if people are touching on the 10 competencies that
Microsoft had at the time, one of which was
technical excellence, and the others were
communication and cross-team, and all those other things and 100 percent of every single interview
had asked a coding question. Of the other nine competencies, on average two or three were covered
at any point during the day, and the other six or seven were just completely ignored
during the interviews, and these were theoretically
the 10 important things that Microsoft was looking for. So, I think in coding,
it’s good to ask. It doesn’t have to be
about the coding question, you can ask about, tell me about a time you did
this or worked on a team, or how to design an API, or consume an API, and hopefully, people have experiences
they can talk about. Yes.>>Are there any
[inaudible] So, you’ve talked about Microsoft and
sort of best practices, and I just think it’s
similar to many companies, which is code reviews, and testing, and design,
and documentation. Are there any good modern
books on this stuff? I mean, how well, the question
is, how well knowing, you’re talking about
why they make mistakes, but how do we get [inaudible]
to do a better job?>>Well, the problem with a lot of books is they
talk about something useful, but then they present it
as it solves all problems. So you wind up with
sort of over-hyped books that have a core that’s useful, but then they overstate the solution. So, book on unit testing
will present unit testing as the answer to all problems, when, I mean, there’s reasons, there’s things you can do with unit testing and things you
can’t do with unit testing. I don’t know a book. No, I would actually recommend what
I prefer people to read is, there’s a book called “Making
Software,” which is about a bunch of empirical software studies with people actually studying
software teams and saying we observed them
and they did this, and they did that in this work. That’s published by O’Reilly.
That one’s pretty good. Empirical studies are
sort of died out. Unfortunately, people
actually studying programmers sort of
anthropologically. There’s still a few conferences, but that’s a pretty good one, “Making Software,” but yes, I don’t know a book that’s
sort of in a no BS way. Lays out what to do. “Code Complete.” “Code Complete 2,”
Steve McConnell’s book which is 20 or 30 years old, is pretty good. It’s also backed by research. I’ll actually say
the right length for a method in number of lines of code is x because somebody study it, not just because I feel that way. Unfortunately,
his studies are all old because people stopped- kind
of stopped doing that. Yes.>>So you mentioned that you
believe today’s generation writes better software than
the previous generation or writes the software better. Any thoughts of what
we could do today to prepare for the next generation? I’m asking because I’m
also working on a team that has a co-payment setup is 10, 15 years old and->>You’ve got to
prepare. I mean that, one of the points is
that if you come out of college and you haven’t
learned this stuff and you’ve been
successful in college, and you got a job at
Microsoft, let’s say, interviewing with skills you
taught yourself in high school, you’re already thinking that you know more than you probably
do and it’s hard to change. So, I wish Microsoft would
go to universities and say, “This is the curriculum we want.” I think when Microsoft has done that, they focus more on
specific skills, like, “hey, you should all be using Windows, and C#, and Visual Studio
with your classes.” That’s not what I’m talking about. I’m trying to get them to say, “You need to work with
larger code bases, you need to teach debugging, and teach code reading,”
all this stuff, the actual skills we care about
without coming across as, “would you just do our job for us?” We were tired of training people. We want people who are perfect
when they come out of school. It’s not going to be like that, but I wish there’d be more closing this gap between
academia and industry. Like I said, a few will show up. If someone comes in and thinks
they’re God’s gift to programming, it takes a while to disabuse of
that knowledge, unfortunately. It’s something you’d interview for. You could try to bias
against lack of humility, excessive hubris during an interview. I would think about that. If they think they’re a genius
at age 22, they’re probably not.>>I just want to say that
not all of us are like that, specifically, a lot of
the people I’ve talked to. When we come out of college, we go into college and take the CS classes knowing
that everyone says, “you don’t learn the right skills
for industry in college.” We’re told that straight upfront. So, a lot of us do come into
industry and we expect, and we know, and we do learn a lot, and we talk to each other about all the different things
regarding learning. So, there are those kind of
people, but there are also, especially with
the newer generations, especially as colleges are trying
to improve their CS classes, you’re not going to
get everything right. There’s only so much you can
teach people not in the field. I guess, I just want
to say we are trying.>>No, that’s actually great to hear. The other thing is, you
do get people who learn to program in college. They show up, they’re not. They’re high school
Computer Club graduates.>>I’m one of those.>>Right. No, it’s great. I knew one person
like that in college. He was like, “What? You didn’t have a TRS 80 or
whatever? What are you doing here?” We did not treat that person
well also looking back. We were obnoxious about it. But, yes, you can feel like, hey, I like playing games
on my game system. I want to be a programmer, and
they’re just coming which is great. I think people like that, because they are exposed to an at
least a more formal environment, they’re not reading a basic manual, at least they have some instruction
and some guidance, tend to be more open to the idea of, “Wow, I have things to learn.” They probably still
get this mistreatment of the hardcore geeks
looking down at them. So, I’m glad you made it
through and are here, but it is something
else you can work at. Just try to make it more
welcoming to everybody. Yes.>>So, I have a question about the viewpoint and take over
the no silver bullet thing. I’m assuming there’s silver bullet, but it feels like, generationally, we’ve come 50 years, 60 years even for
software engineering. It feels like, what exactly are we looking for with
such a silver bullet? Is it to proof of liability bugs? I feel like the goal post
keeps moving because honestly, if you did try to program
Windows in Assembly language, today’s Windows, you
wouldn’t get very far.>>Right.>>So, something was achieved with all those extra tools
and languages that we’ve created that has improved the world.>>Right. So, yes, things
have been achieved. Although silver bullets
have value in some cases, the following testing
does have value, structured programming is better, DevOps is useful in some cases. People don’t have the ability to discern when I should
use this language, so they just write everything
in Perl, for example. Perl is a great language for top left box and it’s
an absolutely abysmal language. I worked on a team some of whose
members are sitting in this room today that maintained
large Perl code bases. Initially, it’s a giant hassle
but it grows organically. So, I think that the reason people
search for a silver bullet is because they realize
that software is hard and at some point they realize, well, I don’t know everything and they, an important storm kind of thing like, “Wow, maybe DevOps will
solve my problems. That will be nice.” So they follow
these charismatic solutions.>>I have two questions.
So, the first question is in regards to what you
said about optimization, about how you can point to a tree and say it’s about this tree
and you’re probably right. So in terms of
software development though, are you saying that, I guess, where in the process of developing software do you think we
should be thinking about edge cases and what kind of guidance would you give to making a judgment call
on whether or not to spend those time and
resources like implementing code that would only actually
really be used in an edge case? You know that edge cases don’t
really happen very often.>>Edge cases, guys talk about
pre-optimized basis saying, well, this might run slow. I better optimize it now.>>[inaudible].>>Right. So in those edge cases. My advice would be, don’t do it. Write the code cleanly, make sure it’s understandable,
focus on that, and maintainability, and then if it gets deployed and it’s
slow, worry about that. Essentially, that’s my answer. It’s so hard to know
if it’s actually going to be slow and if
that code is going to be on the critical path that messing it up just in case is
not a good approach. So my advice really would
be don’t optimize it. Write it as cleanly as you
can and worry about it later. That’s almost always
the right answer. When you’re old-school
manager says, “No, we need to optimize it now,”
then, well, I don’t know. That’s a tough question. The existence of old-school people in the upper echelons of Microsoft, not everybody but floating
around the operational lines of software companies is
an issue because they have the wrong instincts in some ways
because they’re too old-school. Yes, in back. Sorry, you
had a second question.>>I had a second question.
So, you talked about one of the deepest issues right now
within the computer world, is that there are two camps; there’s an academic camp and
there’s an industry camp and you talked about that separation
is part of the problem. So right here at Microsoft, we have research place
but we also have all the other programmers or software engineers working
on feature working things. What would you recommend things Microsoft can do to
maybe bridge that gap? Do you think that needs to
be bridged, do you think-?>>Well, I think there’s
enough software being done at Microsoft that research, and he even said something
about how you used to study software developers. Then I was like, “He used to
study software development?”>>Still April.>>I think Microsoft, I wish
research or somebody at Microsoft, in research would turn
around and look at Microsoft and then try to
synthesize some wisdom about, what language is appropriate for what situation and when should
we get rid of software? How do we analyze the lifespan of a piece of software because
there’s really a ton of software inside
Microsoft that you can look at without having to go
outside and look at open source. So, I wish Microsoft
could do more of that. Engineering Excellence went away five years ago or something
probably for good reasons. But we did lose a little bit. Engineering Excellence
wasn’t really doing that as much as it should
have been either. But I wish Microsoft would think about doing that kind of study. Yes.>>There may have been
another question before me. But going back to your first
question on optimization. One of the best pieces
of advice I got given by one of
the old-school programmers, you can change their mind. Do not optimize anything. Write the simplest code,
easiest to maintain. We have profilers that will tell us exactly where we need to optimize, but we will spend far more time
reading this code and maintaining it than we ever
will writing it this one time, make it easy to deal
within the future.>>My opinion depends on program, how many users you have with the
system [inaudible] product than luck. Because I agree with you. If you have a new product, you just do and send you [inaudible]. One person objected to me, he said in Microsoft Word, big ways you can because it’s
one of the mostly used software. Every problem that could be
on optimization was huge, because it’s used by so many people, it will be hit song or labor. But probably the only example
why you need to optimize.>>The reason why that’s on my mind, so that feature that
my team is working on. We had the design phase we try to
think of different edge cases, and we didn’t think
too much about it, and we didn’t look
[inaudible] because let me put it in but because
we like. It was an edge case. But then recently we
had a lot of hot bugs, because turns out
these edge cases just like you said there just
so many users who use them that you will hit
the edge cases at some point. Those edge cases were a reason
they have preference. Then there were some edge cases
which we didn’t even think of.>>Yes, I understand. I will
say first you do [inaudible]. It depends on size of your broad, then sense how many user skilled. [inaudible] First, you try together
to work until you’ve see where you [inaudible] It also depends on the
experience phase on your past experience. Sometimes [inaudible] you’d
try to optimized there.>>Yes. I found that a lot of the senior engineers that affect
me to [inaudible] the new ones, the senior engineers saw this intuition and cooking for awhile and so they
have a sense of why. This is probably what’s going to happen if we don’t deal with it now. Therefore this is what we
should focus on of this thing.>>Yes, it comes from
your past experience and sometimes it’s wrong. You just hear a- you don’t cancel something until you
try to do it the right way.>>Intuition like that is
always correct unless it’s not. So I mean, you do get some sense of- and also just how you
design things cleanly too. I mean [inaudible] design clean up. [inaudible] easily consumable. But they might do
a bad job but if you have experience you get better
at that sort of thing. So, yes there’s value on wisdom. I’m not saying all old timers should
be marched out the door. Yes.>>Going back to your
Software Engineering 50 years, there have been people
like partners and others. Well, you know if it’s
really going to be software engineering then where’s
the certification. I guess another way to look at failures is that we
don’t have such a thing. But there are certain disciplines, right, where like safety
critical system [inaudible]. There’s a huge amount of
discipline and rigor. Although, I think with IOT
and medical instrumentation [inaudible] hoping also be coming
consumed by media hackfest. But I guess my tuples was like, do you think software engineering
certificate is worth anything? If so, what would you put it in? And are other disciplines where you really think we
should have it at this point?>>So I think that we
absolutely should have software certification and
licensing, but not today. Because we don’t have
a body of knowledge. The ACM was involved in some projects put together
about of knowledge. But it’s really
just kind of brain dump of ideas about software development. There’s no academic backing. So, we absolutely have software
engineering certifications, some point licensing but we need to be nice to set as a first function like in
ten years we have it, now we got to fix the problem
but it will not actually work. But I think we should be licensed. There’s lots of things
you could learn, and I mean even security
is a big thing. You know there’s all kinds
of things that people make mistakes they
shouldn’t be making, because they’re not
aware of the potential. So, yes I think we should have it, but people have pushed
off software engineering. Steve McConnell wrote a book about doing engineering licensing today, I think it would be a mistake
because there’s just not enough actual rigor behind what
you’d be licensed people and say, “Licensed people give them a test.” But there wouldn’t actually
be better software engineers. That’s the result. I’m looking for
some actual real wisdom that people to be tested on
before they are licensed.>>So, what’s the theme of the tie
between academia and industry? I spent a lot of time teaching other students when I
was in the university. University professors
are easily make fun of, and they sort of live
in their heads in their gardens or some of them have part-time jobs
and then they also work. They do a great job of
helping, show the in-between. But typically, if you
want to become one of those people that can start to disseminate knowledge
at a university, you have to have stayed at the university for
a long time instead of going and cooking for
a long time and actually getting your hands dirty and
building up the intuition. So, now it looks to me like you’ve got this divide where
the very people that we want to be able to go teach at universities are
barred from doing so. So how do we approach universities?>>Well, I mean like
when I went to Princeton and it was already
Bell Labs actually we had several of my classes were taught
by visiting Bell Labs professors who were not trained
particularly as professors, but they had this
industry wisdom, right? They had been working with the switching code
whatever and it was quite valuable to get their input and
mix that with a more theoretical.>>Teachers- I know that there
are some schools that actually really try to- the terms Computer
Science and Software Engineering are often used interchangeably, big schools call it one or the other. But there are schools really try to teach Software Engineering
at Olin College in Massachusetts and really
trying to focus and I will actually bring in
some industry people in like teach what we can
about Software Engineering. So, I think hopefully universities
start to worry about this more than we’ll say hey there
there is a difference in their theoretical computer
science which can be useful in some cases and there
is software engineering, and we do want the industry
people to come in and we won’t worry about do they have a PhD or are they published or whatever you worry about
when you’re hiring. I’ve thought of my
father’s a professor. So, you know I don’t have a negative view of professors
but- he’s Math professor, but there is this focus in academia on publishing
and things like that. That’s not necessarily
what’s needed right now for Computer Science. Yes, question.>>I guess my question is more why
would we even want to use this. If what we know today is likely
to be proven wrong tomorrow. Why do we run a lot people in today’s practices right out
of school as opposed to just encouraging them to be problem solvers and then adapt to the
reality is when they go at a job. It seems like it’s
the same basic problem.>>Yes.>>I don’t think what we know
today will be proven wrong, it’ll just be shown
to be not quite as right as people thought it was. I think there’s also value
in basically knocking people off their pedestal
a bit off down a few pegs. When they are in school, this first people learned
something, I mean, I basically sailed
through school with my self-taught basic
programming skills, right, I mean I learned some algorithms, but everything about getting my code
working and laying it out was just what I figured out as a basic program which
is not a good thing. So, I think just teaching
people anything, teaching me different language
like getting this idea that oh, wow, there’s something
to learn is very important just so they come in open to the idea that they
don’t know everything. It’s sort of like, if you compare
it to medicine if someone said, “I am a doctor, I didn’t
go to med school, ” you’d be like, “well,
that’s really concerning.” But some of the programmer
and they’re like why I majored in music or something which [inaudible] tasks
people slipping around. You’re like, “wow, that’s awesome.” You’re so smart but, I mean, it’s not just as weird like what
are you doing here? How can a music major be
successful as programmer. But they can because they
don’t have to learn much. I think just having university crick and where you
have to learn something and study some stuff like you have to pay attention to your professor
is to be successful. It would be very helpful just to open people’s minds even for
specific skills aren’t as critical.>>[inaudible] in the sense that the industry people are coming in and talking about DevOps practices, some random things that
are considered [inaudible] Software engineering and that locks people in employment. Wealthy.>>To be fair,
the industry usually runs ahead of where academia is and DevOps practices aren’t
showing up in classes. There’s a startup classes at CMU of how to do engineering
if you’re in a startup, which is in different set
of strategies than if you are in
a more established company. There’s DevOps class at
North Carolina State University on specifically teaching kids how university gets. How
did you do DevOps.>>That’s not good.>>Why is that not good?>>It’s like locking
people in a mindset.>>It’s teaching them
skills that they’ll see and learn how to adapt
when they get to industry. They’ll adapt to whatever they’re going to be using at their company, and obviously the techniques and
skills and processes that we have today are very different than those that students that
have been in school 10 years ago, or 20 years ago, or 30
years ago, and that’s okay. Everyone learns to
adapt what they hear.>>Well, I guess my feeling is, I’d rather have somebody come
in here and talk about DevOps and not come in and talk about DevOps because it’s
something from industry, but I really wish will happen
is that academia would study DevOps and say this is what’s
real and this is what’s bogus, and then teach that, but having a DevOps person come in is like I said better than
not ignoring the concept.>>I think at this stage
academia is much more receptive than spending
a lot of money. Reality is, government funding
for academic research is done and academics for the most part where research institutes have to partner
with industry more and more. There’s a downside to that, but it does help to bridge the gap. I mean, a lot of academics can hope to have access to
huge data centers, right? To do research on DevOps in say, a data center contexts
without or maybe having a co-appointment at Amazon or
Microsoft and we see more of that, I think there’s some good parts
to that, some bad, but I think the notion of the ivory tower is
pretty dead these days. I mean, to be perfectly honest
the people who are doing theory, there’s a lot more systems out there, so I think fundamentally the danger of anything is like we don’t
get the next great thinkers coming up with some cool
abstractions because everybody’s down at least
working on our problems either. I fear more for that actually, and I think the
academics are actually studying a lot of open-source. They’re studying us a lot, so I feel over
the last 20 years actually, academics don’t block
co-sharing with industry.>>Excuse me.>>That’s good for us.>>They have gotten
closer, but I still, I feel that, yes, I looked
their curriculum and stuff, and it seems like they’ll say
what industry is talking about. They’ll talk about scrum or
whatever, but they’re not. They’re just presenting it as
here’s the thing you’ll encounter, they’re not thinking about.
They’re not studying.>>Well, they’re actively
studying it. They’re researchers. There’s a whole empirical
software engineering field which you should really look at. It’s in the books and I don’t know, you’re glossing over like
a whole movement that’s happened.>>No, no. I’ve read a
lot of empirical studies, books and I make
a big push for this one.>>Compared to 20 years ago,
it’s huge, right? I mean, huge.>>It’s stuck somewhere between a
third to a quarter of the papers that you would see at any academic
software engineering conference these days about the others.>>There’s so much more now.>>It used to be normal stuff.>>But maybe used to
be more 40 years ago, maybe a tip is coming
back, but like I said, I make this software book is a bunch of empirical studies which is great. There’s the occasional,
but maybe we have different experiences we’ve
already seen, but my stand, I talked to a couple of
empirical studies people and they felt it was not, it was surviving, but it
wasn’t really booming. I’ve talked to
Victor Brazil, he is one of those doers of empirical studies.>>Yes, he’s retired.>>He just retired, yes.>>[inaudible] his finger
on the pulse anymore. Yes, and that’s two generations. You should be talking to
the new kids on the block.>>He was around and enjoyed
retirement recently.>>Yes, I’m just saying
I think it’s a little, I could introduce you
to some [inaudible]. We know them. We’ve worked with them.>>No, I have tried. If empirical says he may come back,
that’s wonderful. I thought a lot about what
Burden says in the book, but I haven’t quite seen him
may as much as you have, but that’s good. Yes.>>So, one of the things
you mentioned was empirical studies start to
feel old after 50 years. So, if people do different controlled trials that
you’d use in tests, and then about say variable naming, but then they start to feel old. How do you keep
these things fresh and how do you keep them in the minds
of working progression?>>I think you just may have heard empirical studies
is coming back. That’s great, but you know you
just have to keep doing it, right?>>Can’t stop. Can’t stop.>>Okay, I got you.>>You can have another thought.>>No, you’d have to keep doing it if people are
to recognize fault and companies have to start
consuming any information, and you have to, Microsoft
has to have somebody come from a conference and
say; “Hey, guess what? Hungarian has a crazy
idea,” or whatever, which doesn’t, I did not observe
that in a product group anyway. People coming back from
an ACM conference saying, “Hey, I have learned something
about software engineering.” So, maybe it came as a research, but it didn’t cross over at least
in the groups I worked on. Yes.>>Well, in your opinion on unit
tests, how important perception? You say phones are
[inaudible] many programs.>>Well, in my opinion, unit tests are to ally to refactor
the code without breaking it. That’s what unit tests do, and refactoring code is good. So cleaning up your code is good. So unit test guarding, it’s
breaking your codes accidentally, regressing some other random thing. I don’t think they really help
with overall software quality, except that when your
code is refactorable, it can help with the quality, but I think unit testing, it’s not automated
functionality testing, but it’s still important because having to refactor
the code is important, so like don’t throw it away.>>Is it difficult to refactor
code because you refactor code and link it to the right unit test.
That for [inaudible]>>Yes, that’s true.>>This slows down your
tool speed things?>>Yes, it does. That’s right.>>[FOREIGN]>>Yes, but as well I think
you just have got do it, it’s part of software
slowing down a bit because you’re trying to
be more precise about it.>>A little bit more in
favor of functional test because the elastic factoring, it’s actually the chip for the final.>>Right now, they’re both useful
for a different thing, right, end user testing is to
make sure the thing actually works the way
it is supposed to work, and unit testing is so you can clean up the code
without breaking it. I mean, they’re related, but they’re both testing, but I think unit
testing is oversold as, you can get end-user functionality
quality with unit testing. I don’t think that’s not
what it’s about. Yes.>>So, in the industry now, there’s this really
strong tradeoff between being able to write and ship code
very quickly like in a startup, and the minimum or the
maximum amounts of virus you connect
that a customer will accept before switching to
another piece of software. It feels like the idea that
you’re suggesting which is that software development
in order to become reliable needs to slow
down even further is, and to go fair again, it needs to go faster and faster rather than compete
in the marketplace. Only successful companies have the option of making
reliable software.>>Well, I mean, you’re right, I’m biased in favor of
more reliable software and against found something out there to hit the market. So, I guess, there may
be cases where you can, getting something out
quickly with lower-quality is a good business decision, but, just like occasionally
can build a bridge that’s a little rickety because
it’s for every reason it’s fine, but again, that’s more
of a business decision. It would be really
nice if you could say, I want this quality level
and this speed tradeoff, and I could actually make some pretty reliable prediction about it, and that is the business
decision purely versus winding up or something because
you’re inheriting the cut corners, like, well, I guess that’s what
we’re shipping because we’ve got customers lined up with,
that’s not engineering.>>Arguably, speed these days comes from putting together systems rather than writing
systems from scratch. That the microservices model
that you put up there that is a form of much of
the software that’s written today. Those microservices aren’t a huge amount of code but you do need to write
them very carefully, and writing them slowly and
correctly is actually much faster because you create the system
faster from a lot of small pieces. If those small pieces are
terrible, you’ll have trouble. Now, I don’t think speed in software development anymore
is about volume of code, I think it’s about
working components of code that work together
with other existing codes.>>It is fascinating when I studied
companies now for Crosslake. I mean, a lot of them are just like grabbing open source
components and throwing together like hundreds of
open-source components and making software like it’s sort of turning these like
assembly line for a lot of it. The skill is knowing what to grab not actually writing
this complicated code, for your basic like
your database backup website, kind of Ruby on Rails,
kind of territory. It’s like there’s not a
lot of software genre. But again, I’m thinking
about more like things like Windows and Office
between big and complicated. That’s what I’m worried
about not some guy putting up a clone of Reddit or something.>>I would sort of seconds. The comment here which is open source also drives out
the economic incentive to actually test your code properly because you simply don’t
have the economic resources. So, if you actually look at the heart of some open source projects, I’m just saying there are economic
incentives at play here that go directly against our goal
building more reliable software. If you have no money,
you can’t afford to hire testers as it comes out
and nobody wants to do the scout work of spending half their time writing tests for the new feature
there or something. They write the feature submitted
with barely any testing is-.>>Really, yes, their economic incentives pushing against doing things the right way.
I don’t deny that.>>So, more on this side
of the argument. So at JPL, when like
the Jet Propulsion Laboratory NASA, they wrote about your
code too,and so I read a really interesting article
where it went into depth about the coding practices
and how they write software for like space flights
and space missions like for devices that millions of miles away you can’t above
that thing like you have to write it and
get it right the first time and so they went through it, and so they have
extensive documentation, extensive testing a bunch of theory in there too
just to make sure that. Because of the program
goes wrong there’s nothing and that’s like billions
of dollars wasted, and so I understand that’s
a unique circumstance, but the article- the point of the article was really trying
to drive home the point that that’s like the gold standard
on industry should eventually get to the point where
maybe we can also get to that. So like there are economic incentives and especially
if you’re doing a startup and you have a new idea you need to get it out
before anyone else does it. But like there are-
it’s not impossible- like it is a possible reality
that we for- get to the point. Where the way we do
software development is as rigorous and detailed and
extensive testing like you can imagine you’re funding
millions of dollars into making this device and for
every extra gram or pound you have, that’s another billion dollars
in jet fuel or something. So those are extenuating
circumstances but I think we’re in a unique
circumstance given where the interests you have is
right now that we have really big companies with a lot
of really good resources that maybe we could spare
those extra days or weeks or something to maybe-
I’m just saying there are examples that exist like
currently exist where they are more or less the
gold standard for the ideal case of software testing.>>So I totally agree
with what you’re saying and I’d love to see
a variance of this software or maybe six variance
of software where you go one abstraction level down into particular industries because
their [inaudible] is [inaudible]. So to look at startups, to like get rocket companies, to look at power companies, plane companies and see like
how is it different across those companies with
different economic trade-offs in different safety trade-offs.>>I mean, a lot of stuff is known. It is known how to make
reliable software people just choose not to for
a variety of reasons; economics, they don’t know it. They don’t want to deal with it. There’ll be successful without it
but there’s a bunch of things. I don’t think there’s not a huge mysteries on how to build
[inaudible] better software, I mean JPL which is where a lot of empirical studies were
done was like yes, they knew they needed
to make it right. So they took the effort
and everybody’s bought into that because that’s
what the project was for.>>You make [inaudible] some goals. It was a quite bit of
change [inaudible]. Wasn’t the right decision
or not? [inaudible]>>Was it the right
decision? Sure. I like the move to engineers-
to move to engineering. I think that the argument was that testers are limited because they’re in this box
you can only do testing, and so a lot of people were
not able to do as good work as they as they could and it
just reduced flexibility because as a manager you
couldn’t move people around. So and of course most
of the testers were trained as software developers
so they could do their work. So, overall I think it’s
a good idea it’s more efficient it removes some friction. You have their issues. Of course. Some devs didn’t
want to write tests. Some teams just
interpreted as we’re just getting rid of testing
and everybody’s writing code I mean so there’s some imputation uses but
conceptual like the idea. I mean, I think devs
should on quality not throw it over the wall
to a separate team so like-.>>It’s the measures as
well is actually hired.>>Yes I like the idea even if it wasn’t necessarily
perfect in all cases I wish- I wish more former test
leads have become the engineering manager instead of
basically the [inaudible] usually doing that even you know that’s
what happened to me but I was definitely to become
engineering manager but like yes I think it’s
a good idea overall.>>[inaudible] there’s a doc
in Google [inaudible] a lot of people who work on
the infrastructure of testing, it’s like half of the people who
actually started [inaudible] and they don’t like the job,
I would never [inaudible]>>Google has created
a world where they weren’t their infrastructure team the team that does that stuff is somehow. They’ve created a world
where that is valued. It’s seen as almost more important
than doing a product work, and I don’t know how they
pulled that magic off but that’s just Google’s culture. It’s like a privilege to
be allowed to work on this important stuff that
supports other developers. But Microsoft, it doesn’t
have that culture and so I think it’ll be hard
to- it would be nice->>I saw cases where we tried they worked on one part
and just failed because we tried to create a complex infrastructure
and it just never->>Microsoft [inaudible] culture for decades that affect
its ability to do things. So one last question
I think back here.>>If I may I wanted to comment on the most convincing argument for
me for this unit testing and TDD Silver Bullet was actually that the value is in testability
and not the test. These tools that they provide
and the procedures are helping you to write code so that
you can test its testability, the value is not necessary. If you have five or 500 but now your code can
adapt and can change, and that’s- I think the same argument for well microservices
you can evolve it. If you have tested it
or not if you’re in a startup and write untestable, you might not have it now but you
have a path forward to do it, and so that weird argument
that is sort of upside down is like you have to write
it in a way that you can adapt and change and compose, that’s where the real
value is and that goes like even though
that is a ticket old dev ideas or longer I think that’s for me a big learning being at the right code so that you can
test it that you can evolve. If that’s a separate organization
that drives this. Or if all engineers
have to have this, that doesn’t matter
it’s the methodology behind or the tendons
behind it [inaudible]. The method is then different.>>No doubt, you’re right. It’s getting the test done, it’s not important who does them.>>That’s all the time we
have, so thank the speaker.

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Copyright © 2019 Geted Tabs Online. All rights reserved.