Garth Gilmour, 19th September 2018, at @FFSTechConf

FFS The Browser and Everything In It Is Wrong - We've Ruined Software Engineering for Generations to Come

[Laughter and Applause as talk title is announced]

GARTH: Good - I hope you've all enjoyed that talk

[Laughter]

GARTH: So, yes! Right. Hi everybody, my name is Garth Gilmour. I'm a professional trainer and it's been three months since my last Story Points course! What do we say?

[Boos and catcalls]

Very good. I work for Instil, we are badass and do this wonderful stuff.

One thing I would like to stress is that I cross the Irish border frequently. Sometimes several times a week, sometimes several times a day. So are there any X people in here at the minute?

[Laughter and cheers]

Excellent. Screw you guys!!!

[Laughter]

I just wanted to get that out of my system. 

Seriously, we need to talk, okay? Come and find me later, and we will talk. If you don't want to talk to me, myself and the Irish border are on first-name terms. Please follow The Irish Border on Twitter. She is absolutely superb - everything you need to know.

Moving on, what I would like to do is take you on a trip through time, so we are going to go back to the past. We're going to go back to the mid-1990s, okay?

[Laughter]

It was a simple time, it was a better time, we were all younger and more innocent then. Of course some of us weren't there at all. Can I ask who was in the industry in the mid-1990s?

[Approx ⅔ raise hands]

Wow.  That's a lot of people. That's very encouraging. You will understand what I'm going to say, then. So, who used a 4GL? Who was involved in user interface development back at that time?

[Approx ½ raise hands]

Very good. Let me ask you a question. Whenever you were working as part of a software team and you needed to write a UI, who was it that you put on designing and developing the UI? Was it the smartest, the most capable, the most highly educated person in the team? Was that what you did? Yes or no?

In all likelihood, it was the most clueless, least capable intern. In other words ME! At that particular moment in time.

So, who did VB6? Quick show of hands.

[Approx ½ raise hands]

If you had told me as a younger man I would be doing a presentation where I would be praising VB6 I would probably have done you violence.

[Laughter]

That's all I can say. You know I am ashamed that I'm up here praising VB6. But it was easy! It was so easy. You could drag and drop on components etc... And we screwed it up in all sorts of ways because we are software developers. But it was easy to put the UI together.

You could get inexperienced people, I'm not going to use the word "grads", and you could put them on UI design, and they could do a really good job, and they could warm up.

Who wrote UIs in Java Swing? 

[Approx ⅓ raise hands]

Again, a decent number of people. Would you agree with me that was a good playground, that was a training ground that warmed you up so you could learn to put things in other things and call methods?

Not popular, never mind, moving on!

[Laughter].

So, you know, the UI was not a hard thing. That's all I'm saying, yeah?

[Shows Delphi slide]

[Laughter].

Ooh! Oh, this is going to be fun! Okay, yes, for the captioning, I've shown a picture of the Delphi IDE. Who here used Delphi? Who here liked it? As I used to call it, VB6 for grown-ups!

[Laughter].

You could use inheritance, believe it or not. And all this wonderful kind of OO stuff. So, I worked for a year with a bunch of Delphi developers. They seemed to be fairly happy people. Their blood pressure was not noticeably high. 

So let's say we take a developer from the early to mid-1990s, and we froze them, and then reanimated them today.

[Laughter]

What would they expect?

So, they would predict:

“Goodness gracious. It's going to be telepathic user interfaces, it's going to be three-dimensional rotating pie charts controlled with hand gestures. We're going to be living in Minority Report.”

...had they seen Minority Report. What would they get instead? They would get this pile of shit!

[Laughter]

And breathe, and breathe. Sorry! You've no idea how cathartic this is because when I'm teaching, I have to be professional and teach about converting story points to days etc...

[Laughter].

I was listening to that first presentation, which was absolutely stonking by the way. I've got a philosophy degree so I loved that to bits. I was sitting down there going e-t-h-i-c-s? It's a novel concept, yes. So, yes, I teach all of this to my shame, you know?

Let's say we reanimated our developer from the 1990s, showed them this stuff, what would their reaction be?

[Laughter].

I suggest that would be their reaction there!

It's insane. It's absolutely insane. And nobody sees this more than me because I teach this all the time? I convert people from other kinds of development to doing this. This time of year, we call it graduate induction season because companies are recruiting like mad, and we are running induction programmes back to back, and so on.

But at the end of the day, I'm only a trainer. Whenever I tell people I’ve spent 20 years teaching, people go to me and say did you write any real code? I'm like, okay, I can take that. But here's my mate Mark, who has been in software development for I think about 30 years. Serious distributed systems developer for the past five or ten, eats Azure for breakfast. He just came out with this a couple of days ago. If he finds it hard, anybody's going to find it hard.

So whenever we do graduate induction programmes, we have a front-end bit of the training, and we have a back-end bit of the training. The front-end might be JavaScript and React, and the back-end might be - Spring Boot with Java, let's say. I say to everybody at the end, what was the hard bit? Guess what they say? Do they say it was the back-end that was hard? No, they say it was the front-end that was hard.

Let's say we have a quotations editor that just downloads quotes and shows them to you, and there's a form where you can go in and add a new quote, okay. Let's say you haven't used Angular 2 before, and you are going to be out and write that in Angular 2. What would you need to do?

It's dead simple. All you need to do is go out and learn a new programming language, that's Typescript. And you need to know two module systems - that's fine, surely. There's that wonderful line in the Angular documentation that says something like Angular has a module system which is similar but distinct from ES6 modules”. So that's all right, then.

[Laughter]

Then you have to learn Node.js, Node Package Manager, Webpack... 

One of the smartest developers I know, webpack almost defeated them. They had to get a low-level understanding of webpack and how to customise it, and so on... There be dragons.

Every kind of I/O will be done using Reactive streams because why not. Including information there is already there in memory, but never mind!

[Laughter]

And breathe, and breathe, and breathe. Give me a minute to come back to you, okay?

[Deep breaths]

Then we can go out and write an Angular component. Once we understand the dependency management and the syntax for components and services and the syntax for data-binding and how you write the template files and so on... 

Of course, we then have make choices. Once we've got the "Hello, World" version up, do we want regular forms, or do we want Reactive forms?

It’s a new framework, so you want two different ways of doing forms, don't you?

[Laughter]

Then we're told you can't actually keep state in the thing, that's not a good idea, you need an external state container like NgRx Store or Redux. Anybody ever use Redux?

[Hands go up]

Did it scare you as much as it scared me?

[Agreement from floor]

Yes! Okay. So it's funny. I was talking to somebody who does a lot of Angular 2 and React. He's been doing serious web apps for seven years.. 

I said: “What do you think about Redux?

He said: "DON’T!"

[Laughter]

That was wise advice. Sage advice. As I say, there is this stuff. I'm not picking on Angular 2 - well, I am - but Angular 2 is a really hard thing to learn.

Ever since I got seriously involved in teaching courses like this, well, we started off and we had the Angular 1 course - just Angular 1 back then but Angular 2 came along and rewrote all the rules, we did a course on that, and people said that's okay, but can we do React. So I went out, delivered a course on React, ran that a few times. Then clients said it's not just React any more, can we do React with Redux. So we did. Then people said now that we've done React /  Redux maybe Angular 2 is better compared to React, so we said of course we can revamp the Angular 2 course. Then they say can we throw in the NgRx store

I write a lot of PowerPoint.

[Laughter]

We go all the way down that fucking journey, I love using that word, and last week a client said this is great but what about Vue.js?

[Bangs head off wall]

[Laughter]

That would be all you need to do to get that "Hello, World" application running in Angular 2. If you don't believe me, here are the different things. These are all the different things you can work through. You don't care, I just put them in the slides to prove the actual point... 

So, these are all the technologies that you would end up using on the client side. Of course, you could read through the list, you don't need me to read through it for you. So those are all the things you would have to learn, yes?

But then people want more things. They want WebSockets. Has anybody looked at WebSockets?

[Some hands go up]

Yay. Can anybody explain WebSockets to me? Please! Please!!

I've tried so hard. All the tutorials do it the same way. All the tutorials do the same "Hello, World" example where we console.log out and they never really build anything meaningful, and it boils my blood. 

So I put this up on Twitter the other day. 

[Laughter]

Yes, that sums up my feelings perfectly, okay. As somebody who started a PhD in CORBA and gave it up when it crashed, I miss the good old days of CORBA, things were simpler then. That's not something I ever thought I would say, either, you know?

And then my friend Simon came back and said what you need to do is go out and read the RFC. That's a bit problematic, when none of the tutorials work and you have to go back to the RFC, it is a bit scary. 

Then, let's not talk about the server side, except a little bit, okay? So, by the time you've mapped your single-page application and your RESTful design and endpoints...

By the way sorry, you shouldn't be doing that, it's GraphQL. Who here is writing RESTful services?

[Many hands go up]

Shame on you!

[Laughter]

Should we be writing Microservices or Lambdas? I don't know. I'm genuinely scared by this stuff.

So what lies in the future? Anybody got on to this, yet?

So one thing that people are trying is the server side conquering the browser. Kotlin, Scala, Clojure, you can get things that compile to JavaScript, and not just to JavaScript but to JavaScript plus React. You can do this kind of thing here.

This would be a shameless plug, but we are sold out, so too bad. I'm presented this at KotlinConf. You can write a React UI in one of these strongly typed languages. Here is the Kotlin version, it’s very similar in all of them. They give you a DSL.

First of all, all your components are strongly typed, they give you a more intuitive API living on top of React, and then you've got the DSL which makes is it easier to generate the markup and their sub-components, and that kind of thing. 

Is this a good idea? Time will tell.

I don't know, but the fact that people are going to these lengths, you know, writing DSL, writing new languages to JavaScript compilers, and so on, this should give you some clue as to how complicated it is. 

With 30 seconds to go, just to summarise:  

[Laughter]

Yes, I would, Kent. Yes, I would!

So, yes, I'm terrified, I'm scared, I have no good news, but if you have any wisdom or positive thoughts, please give them to me now.

Thank you very much indeed.

[Cheers and Applause].

FLOOR:  I'm D-. I write server side software in Go. We have RESTful services because they work.

GARTH: When has that been a reason to do anything!

[Laughter]

FLOOR:  I don't have a question, I have something crazy you for you. If you type in create-react-app it installs more package dependencies than I have lines of Go code in my server. I leave you with that.

[Laughter]

GARTH: As an industry, we have chosen not to care about this. It is like ethics. We've said, okay, that's very complicated and dangerous but we want to get home by five, so forget that.

FLOOR:  I wanted your opinion on something, and that is what do you think about the idea of full stack developer? Do you think they exist or they don't? I'm interested.

GARTH: As a professional trainer and somebody who has been doing this for 20 years, give me a decade and I will give you a full stack developer!

[Laughter]

FLOOR:  Currently millions of people are going through coding schools which are supposed to be easy, because programming has been made easier than it was decades ago, and the majority of them are learning front-end. I mean, how has that happened? Those newbies which are supposed to learn easy stuff are learning front-end, and they are sort of successful. How is that?

GARTH: My kids are starting off by learning Scratch, and learning Minecraft plugins, and that kind of stuff. Yes, I know precisely what you're saying, but I think it is down to enthusiasm, and their souls haven't been burned away by the industry yet!

[Laughter].

I mean, you know, my first experience was coding on the 48k Spectrum, and I got a book of games from the library, a literal book of games, typed in 3,000 lines of the game program. Then all excited ready to play the game, and it said "Syntax error on line 4". I said what is a syntax error? 

[Laughter]

I'm still at it. I think we are genetically programmed as young people to keep going, and that's a good thing for the tech industry.

FLOOR:  Hi, D- again. I'm going to add to your rant.

GARTH: Please do.

FLOOR:  You didn't mention CSS. For fuck's sake, CSS.

GARTH: Absolutely. Correct me if I am wrong, but I think CSS was designed by people who were expert in the publishing industry and were expert in magazine layouts, book layouts, and that kind of thing. And that's why they don't seem to have heard of grids before. The notion of a grid seems to be completely foreign to them. But at the end of the day, you've got a markup language designed for sharing the abstract of physics papers, a programming language designed in four weeks, and you've got, as you say, a layout mechanism designed by people who were used to newspapers, so you're fucked from three different directions!

[Laughter and Applause]

FLOOR:  I'm another J-. I'm going to add to the rant as well and say you missed out on the glorious pinnacle of modern desktop designer in Electron where we bring the simplicity of the browser to replace the joys of BBE for desktop development.

[Laughter]

GARTH: Yes, and all I can say is I am very glad we haven't had a single training request for React Native or Angular 2 Native because my blood pressure wouldn't be up for it. I definitely take that contribution.

FLOOR:  My name's K-. The first one is a point and then a question. The point is if you are engaged in cannibalism, the brain is the worst bit to eat! That's where the disease comes from!

[Laughter]  

I was the guy happy about the ethics one. The actual point is where did this come from? So I've got this theory that during the dot com boom, with other languages, let's say C++, you had to we pre compiler statements, a closed system, whereas JavaScript, everyone could do it. I wonder whether that meant flooded, you got a lot of people able to do it, and you got people who were bad at doing it. In that kind of idea, where do you think personally the cause of this crazy front-end development paradigm is? You did mention that you were throwing the new starters under the bus, and they got to do the front-end when they were working on it.

GARTH: I think what happened with the web was, in the beginning, we embraced friendliness. And that was a good thing, where we said the browser will handle ‘Tag Soup. It will do the best job it can so any beginner can write a web page, and so on. We said friendliness is one of the reasons why the web works, so let's keep rolling with friendliness. And let's build a dynamically typed scripting language into the browser, and that will be friendly as well, and that will get mind share.

Then the idea came along that if you stop being friendly, bad things happen. Look at XHTML. This rule comes in that you don't compromise friendliness. Another thing is what I call the train tracks problem. If I remember GCSE Economic History, the reason why train tracks are as wide as they are because they went and measured all the train tracks in the mining towns and then they said we will take the average of that because the average is the most useful statistical measurement.

[Laughter]

So we will take the average of those, and that's how wide the train tracks will be and you're stuck with it for the foreseeable future. I think we just walked into a cul-de-sac and there's no easy way out of it, unfortunately.

FLOOR:  I want to extend on the rant further by saying fuck hybrid apps.

[Laughter].

This silly, silly idea that you will get like this - for those who don't know what a hybrid app is, it is a website that you run inside a browser on your phone but it kind of looks like an app, kind of looks like a native app, and it's just a total train wreck. People this idea that you will be able to write this great idea that so the web, and it's on the web, and therefore be you will be able to write it once, and as one, I think Coney is one framework that allows you to do this, "Use your existing resource s i.e. people "to write code, one app first to several different platforms." People seem to forget that IE6 existed - I'm sorry.

[Laughter]

GARTH: The pain still burns!

FLOOR:  There were people who weren't around when IE6 existed, and Chrome is basically the modern IE6 because there's vendor lock-in everywhere. It is total nonsense. I feel like if I was starting out as a developer today, I would not know where to begin. I started development when I was four, my dad - I was home sick from school, my dad broke out the Commodore 64, I transcribed some programmes from the book into the computer, and they ran. I would not know where to start today because of that crap.

GARTH: The metaphor I like to use is we're lobsters who have been slowly cooked. The heat has been turned up slowly underneath us for the past 10 or 20 years, so what we don't notice that we are boiling to death. What we do with graduates is take them above the boiling water and just drop them in.

FLOOR:  Hi, there. I'm N-, hello. I wrote GUIs in windows 3.1 in the late 1980s and 1990, so I learned that stuff, and something did change, and I want talk about the reference to coding schools, and of the dot com era. I think we've entered a whole new phase of software engineering and the software techniques we built up in the past no longer apply. Back in the 1960s, computers were massively expensive, it didn't matter what programmers had to go through because the computer was the resource you were optimising. Then computers became cheaper and more plentiful and software engineering focused on optimising programmer time by modularisation etc., Now many people are coming into the industry. According to Bob Martin on average a programmer has been in the industry for five years.

Computers are incredibly plentiful, developers are incredibly plentiful, the numbers of programmers in the industry is going up and up and up. But they're all inexperienced. We've entered an age where brute programmer manpower is the thing we have. We have left pad. Things go wrong, things crash all over the internet. What do we do? Throw developers over the wall at it. That requires new software engineering disciplines that we do not have. We're still trying to tell people to do software engineering as if we're the valuable resource, when, actually, maybe we're no longer the valuable resource. What should we do about that?

[Applause]

GARTH: I'm not touching that one with a ten-foot barge pole!

[Laughter]

I know exactly what you mean. Whenever I started in the industry, most of the people I was working with had maths degrees, physics PhDs, all this kind of thing. With my joint philosophy / psychology degree I felt left out. Today you get people who only attended coding clubs, and so on. The best developers I know have no degrees. They have no third level education. We see more and more people coming into the industry doing ever more complicated things. Something has to give, so what we have to do is keep raising the level of the tools that we are working with... 

FLOOR:  [Inaudible].

 

GARTH: Yes, absolutely. Leaky metaphors all the way down, and that may be the root cause, yes, absolutely.

FLOOR:  I'm J-. You mentioned, talked about friendliness a few minutes ago, and you referred to Brendan Eich in what we can only assume was a drug-fuelled two weeks when he invented JavaScript, and it was two weeks again later he took a holiday to refactor it. His original plan was to put scheme in the browser. Would you like to reflect on where we would be? If that happened?

GARTH: It is weird, I used to recommend people learn JavaScript years back because I would say functional programming is the next big thing. And the right way to do JavaScript is functional programming in the browser. People didn't tell you. If you went to the wrong tutorials, you would have thought its is a scaled-down version of Java.

When I taught JavaScript, especially in the olden days, I spent the first day saying it's not a scaled-down version of Java, it is a functional language. If you look at the way JQuery and Dojo were meant to be used right, and used right, and so on, he did put scheme into the browser. He just cloaked it very well.

What is the phrase, that JavaScript is LISP in C’s clothing. The right way to do JavaScript is to be a functional programmer from day one. And I wish that we had understood that earlier. I wish educators like myself had realised that earlier and taught it that way earlier, and then we would probably be in a better position than we are now.

FLOOR:  [J-]. I'm very disappointed that you have exposed the strategy I've been executing since the mid-1990s to make programming harder! To be clear, this will be edited out of the transcript!

GARTH: Redacted with the black boxes.

FLOOR:  Redacted as not important. Shouldn't this be hard? Why are we trying to make it easier? My previous point was shouldn't this be hard? Shouldn't we be slowing down a bit? Maybe it's good that it is going slower. Maybe the problem is the people who have been programming more than five years, and that we are looking at it saying it should be quicker and easier, should be better to do, and anybody can do it. What if that is not true?

GARTH: We seem to be getting a great amount of pressure to develop more software, and develop more software more quickly.

FLOOR:  And my question still stands.

GARTH: Yes. My answer would be I've got a very large mortgage and two children, and I will do whatever supports all three of those!

[Laughter]

So I understand what you're saying, and as my father always used to say stop the world, I want to get off. Wouldn't it be wonderful if we could take six months and just fucking consolidate what we are doing! That's the refrain that's always gone through the industry..

FLOOR:  I'm C-.

GARTH: Hi, C-.

FLOOR:  Too much coffee. I'm going to go against the rant that I think the browser is saving our industry. It is allowing us to deliver software and democratising software delivery in an environment that's increasingly locked down. There's more and more app stores and more and more restrictions on what you can run on your machine, and there seems to be a trend towards stopping you running software on your machine, whereas the browser is a way that we can actually bypass that and deliver share software. It may not be the most ideal delivery mechanism but it's what we have at the moment, so we should celebrate the browser and its craziness.

GARTH: I spend a lot of time working with people who are using what I like to call "corporate laptops"

[Laughter].

So speaking as somebody who once had to teach a Java course metaphorically for two and a half days until a sys-admin had  could be found to set JAVA_HOME on all the laptops... 

[Laughter]

I understand what you're saying, but I have a jaded view of it. That's possibly because I change companies and/or clients every three to four days. Now, I take exactly what you mean, and that is one of the reasons why we went for the web because it was such a good delivery mechanism. Yes, in the beginning, but with that upside came tremendous downsides as well. So its a classic half-empty, half-full argument.

Time's up, guys. Guys, thank you so much indeed.

[ Cheers and Applause].