Ruby Rogues
204 RR Limerence with Dave Thomas
April 22, 2015
Episode 204
204 RR Limerence with Dave Thomas
Ruby Rogues
0:00
0:00
Speed:
Share This Episode
Show Notes
02:37 - Dave Thomas Introduction
04:17 - How Dave Got Started in Programming
06:34 - Tools and Constraints
- âAn Enthusiastâs Problemâ?
- Is the focus on tools a form of cargo culting?
- Leadism Over Chosen Technologies and Itsâ Effect on Innovation
- Switching Tools and Making Excuses
19:29 - Limerence
- Love and Limerence: The Experience of Being in Love by Dorothy Tennov
- Irrational Interest and Defensiveness
28:54 - Ruby = Happiness: Does it Hurt?
31:00 - Tools and Falling in Love with Tools
- Fear of Falling Behind; Fear of Irrelevancy
- Different Tools for Different Contexts
35:08 - When Do You Learn? When Do You Train? (Not Falling Behind)
38:01 - Choosing Similar Tools and Technologies vs Choosing Different Tools and Technologies
- Gulp => Grunt => Browserify Example
- Pragmatic Thinking and Learning: Refactor Your Wetware by Andy Hunt
43:36 - Relationships and Identities
46:08 - Looking Forward vs Looking Back (Knowing Your History)
- Resources, Curriculum:
- Communicating Sequential Processes (CSP) Brainstorming Example
01:01:48 - Is the rampant use of social media hindering the learning of big ideas?
- Self-Curation = Key
01:08:15 - How You Learn a Language / Decide You Like a Language
- Sudoku Solver
- Markdown Parser
Picks
Slack (Dave)
Why Does E=mc2? (And Why Should We Care?) by Brian Cox and Jeff Forshaw (Dave)
Philly Emerging Tech Conference (Dave)
Why Does E=mc2? (And Why Should We Care?) by Brian Cox and Jeff Forshaw (Dave)
Philly Emerging Tech Conference (Dave)
Special Guest: Dave Thomas.
Transcript
DAVID:
I skipped out on oral surgery to be on the call today. So Dave, if anybody has ever told you that everyone would rather have a root canal than talk to you⊠[Laughter]
DAVID:
You can now tell them it is not true.
[Laughter]
CORALINE:
Awesome!
[This episode is sponsored by Hired.com. Every week on Hired, they run an auction where over a thousand tech companies in San Francisco, New York, and L.A. bid on Ruby developers, providing them with salary and equity upfront. The average Ruby developer gets an average of 5 to 15 introductory offers and an average salary offer of $130,000 a year. Users can either accept an offer and go right into interviewing with the company or deny them without any continuing obligations. Itâs totally free for users. And when youâre hired, they also give you a $2,000 signing bonus as a thank you for using them. But if you use the Ruby Rogues link, youâll get a $4,000 bonus instead. Finally, if youâre not looking for a job and know someone who is, you can refer them to Hired and get a $1,337 bonus if they accept a job. Go sign up at Hired.com/RubyRogues.]
[This episode is sponsored by Codeship.com. Donât you wish you could simply deploy your code every time your tests pass? Wouldnât it be nice if it were tied into a nice continuous integration system? Thatâs Codeship. They run your code. If all your tests pass, they deploy your code automatically. For fuss-free continuous delivery, check them out at Codeship.com, continuous delivery made simple.]
[Snap is a hosted CI and continuous delivery that is simple and intuitive. Snapâs deployment pipelines deliver fast feedback and can push healthy builds to multiple environments automatically or on demand. Snap integrates deeply with GitHub and has great support for different languages, data stores, and testing frameworks. Snap deploys your application to cloud services like Heroku, Digital Ocean, AWS, and many more. Try Snap for free. Sign up at SnapCI.com/RubyRogues.]
[This episode is sponsored by DigitalOcean. DigitalOcean is the provider I use to host all of my creations. All the shows are hosted there along with any other projects I come up with. Their user interface is simple and easy to use. Their support is excellent and their VPSâs are backed on Solid State Drives and are fast and responsive. Check them out at DigitalOcean.com. If you use the code RubyRogues youâll get a $10 credit.]
AVDI:
Hello and welcome to the Ruby Rogues podcast. Today, featuring Coraline Ada Ehmke.
CORALINE:
Hello.
AVDI:
David Brady.
DAVID:
Caution, this podcast stops and backs up frequently.
AVDI:
Jessica Kerr.
JESSICA:
Good morning.
AVDI:
I am Avdi Grimm. And joining us today is a special guest, Dave Thomas.
DAVE:
Hi.
AVDI:
Alright. Dave, who the heck are you?
DAVE:
[Laughs] So, Iâm Dave Thomas. And I play with Ruby a lot. I play with Elixir a lot. I play with programming [inaudible] a lot. And I also spend a fair amount of time thinking about how we program as a community. Because fundamentally, we spend so much time doing it. And we put so much of ourselves into it but we need to find ways to make it fun and keep it fun. And thatâs it. I donât offer anything profound. [Laughter]
DAVID:
Okay, so Dave, I have to ask this. I was reading Uncle Bobâs Clean Code yesterday and in the intro chapter he introduces you as the âgodfather of the Eclipse strategyâ. And Iâd like to see how you tie godfather and âprogramming should be funâ. Iâm assuming thatâs fun for the people who arenât sleeping with the fishes, right?
JESSICA:
Eclipse strategy?
DAVE:
Yeah, Iâm thinking heâs talking about the OTI Dave Thomas at that point given that I think Eclipse is the work of the devil.
[Laughter]
JESSICA:
Good, good, good, good.
CORALINE:
I take no credit for that.
DAVE:
[Laughs]
DAVID:
I am actually in the Bugzilla quotes database @eclipse because I tweeted that I wish I owned two laptops so that I can watch Eclipse die in a fire twice.
DAVE:
Aha!
[Laughter]
JESSICA:
Okay, but you have a good point there, David. There are multiple Dave Thomases. And we are talking to PragDave of the pragmatic [inaudible].
AVDI:
Otherwise known as RubyDave, although now perhaps ElixirDave?
DAVE:
Oh, just FunCodingDave. How about that?
AVDI:
No, you must identify yourself strictly with one language. [Laughter]
DAVE:
Oh, that is very true. That is very true. BasicDave, then.
JESSICA:
Oh god.
[Laughter]
JESSICA:
Was that your first love?
DAVE:
That was my first love. It was indeed my first love. I learned to program⊠do you want the story?
AVDI:
Yes.
JESSICA:
Yeah, a love story.
DAVID:
Yes!
DAVE:
Okay. So, I was a slip of a lad. I was 15 I think and I was in school. And the way English schools work, you do tests called O-levels and A-levels. And you take your O-levels at normally about 15. You take your A-levels about, oh, 17 or so. Anyway, once you finish those tests, youâre kind of like, just like sliding into summer but you still have to attend school. So, the school was looking around for ways of stopping us destroying the place and offered a number of us the change to go across the road to a local technical college and participate in their very first computer science O-level. They were basically running this class for the very first time. And this was 1970-something early, like one, zero, something. And they wanted to basically try it out on some people that didnât matter.
So, they though theyâd use us.
So, we went across the road and they taught us BASIC programming. And we actually had an ASR-33 which is the old teletype and the paper tape reader. And we had a 110 baud modem, which halfway through the course was upgraded to 300 baud. And we went online to the local county council that ran an ICL 1900 mainframe. And we would submit our BASIC code to it. And it would type back at us and tell us basically that weâre idiots. So, I fell in love. I learned a whole bunch of programming chops doing that.
We were given on the computer I think space to store five files. Everything else would be kept in paper tape. And five isnât very many when youâre [inaudible]. I think one of my first BASIC programs was a self-modifying code that would actually act as a file system. So, I could actually inject extra programs into my BASIC program and it would work.
DAVID:
Awesome.
DAVE:
Yeah. So, thatâs how I got started. And yeah, BASIC was my first love.
CORALINE:
I think a lot of art comes from constraints. And it sounds like from the very beginning you had constraints that you had to work through in order to accomplish your goals.
DAVE:
Yeah, I donât think Iâd call it art, particularly. Graffiti possibly.
JESSICA:
[Laughs]
DAVE:
But yeah. I donât if⊠yeah, the constraints actually⊠I think all along yeah, constraints have made it really interesting. There are always constraints because we are always at the leading edge of something. Weâre always pushing ourselves because as an industry thatâs what we do. And thatâs how you could be competitive. So, whatever weâre doing, whether itâs trying to work at how to maximize the use of five files on a mainframe or how to get some reactive bit of JavaScript to work nicely, I think weâre always pushing the envelope. So, youâre right. I think we have to learn to enjoy the constraints.
CORALINE:
What are the primary constraints you see coming into play in todayâs programming. You mentioned JavaScript. And constraint is a nice way of putting that. But what sort of factors do you think are limiting us and pushing us to be creative today?
DAVE:
Mm, I donât know about factors pushing us to be creative. I think factors that are making it hard, expectations that we put on ourselves, and that kind of comes around to the topic of the day at some point. But I think that as a community we are really, really bad at socially straightjacketing ourselves. And so, we have these incredible expectations that every developer as well as being imaginative and original and everything else also has to follow the traditions du jour. And that may involve which testing framework youâre using or which build tool youâre using or whatever else. And as a developer, that means that youâre constantly having to stop the interesting stuff and go back and try and catch up with what all the cool kids are doing. And so, I think weâll probably a three-fold increase in productivity if we could somehow break that cycle.
JESSICA:
Itâs the cycle of having to learn the new latest thing over and over?
DAVE:
Well, I think thereâs like this fashion⊠I donât know if itâs fashion of fear. But for example, I was working on a, I told the story at Philly ETE. I was working on a project for myself. It was a JavaScript tool that would let me do constraint-based diagrams.
And I started off, I actually started off with CoffeeScript because I like CoffeeScript. And it was going along quite nicely. And then maybe, oh I donât know, two or three weeks in I got bitten twice in one day by the CoffeeScript habit of splitting parameter lists into multiples hashes if, blah, blah, blah. So, I thought, âScrew this. Iâm going to go switch to JavaScript 6, because Iâve always wanted to play with it,â blah, blah. So, I spent maybe two days then converting all my code across to ES 6 or ES 2015 as weâre now supposed to call it. And that was fine. And it worked out great.
At the same time I was using Grunt just because I happened to have a Grunt file lying around and just copied it across. And then the cool kids said, âWell, actually Gulp is a way better alternative.â So, I switched across to using Gulp. And now I run into some problems with getting the tests and getting all the right JavaScript in the right place. So, I did a bit of googling and switched across to Browserify. And then I had to work out whether I was going to use Bower or npm. And it just keeps going and going and going. So, I would guess I actually finished the project as much as you finish any project about a week ago. I would guess of the total time I spent, I probably spent at least half of that time on retooling exercises, just like going back and fixes.
And Iâll be honest. Itâs better for it because when you revisit code that many times, you get the opportunity to refactor it. But at the same time, thatâs a hell of a lot of time to spend effectively with zero progress. And I donât think Iâm unique. I talk to people and there are a lot of people doing that.
AVDI:
I identify with that exact process. I went through that process recently with some of these JavaScript tools. Do you think itâs in part an enthusiastâs problem? I think back to some of the programmers that I first started programming with before I deliberately switched my career so that I would be around enthusiasts all the time. So, my pre-enthusiast days, thatâs not a thing that I really saw as much because there were just the accepted tools that everybody had always been using and why would you even think about looking for a different tool? You just write everything in C or write everything in BASIC.
DAVE:
Yeah, I donât know if itâs enthusiast⊠maybe it is. I think thereâs probably⊠just off the top of my head, but there are probably three levels. And if you imagine it as woodworking and not programming, then you start off and you get a cheap chisel and a cheap hammer and whatever else you need, a saw or something, and some wood. And you sit there and you basically knock out crap-looking stuff. And youâre quite proud of the fact you didnât actually cut your fingers off while you were doing it. And your family goes, âOh, that is absolutely wonderful,â while theyâre trying to think, âWhere the hell are we going to put this?â And thatâs great.
And then after a while, you develop into something slightly more experienced. And then you look at the tools you are holding and you think, âThese tools are not worthy of me. I need better tools.â And so, you stop going to Home Depot for your tools and you start going to these specialist woodworking stores. And you buy the incredibly expensive chisel because you know itâll keep its edge sharper and itâll give you a nicer cut and everything else. So, you buy the latest Japanese whatever it is, saw, because obviously that must by way better. And once you saw [inaudible] using that, so it must be good. And you go through that process I think of acquiring tools because youâre convinced it will make you better. And I think a lot of people stick in that mode. And they become trophy tool owners. Golfers do the same thing with their equipment. And then you get to a certain point.
And I think once you get to mastery, which clearly I havenât got to in JavaScript, the tools then fade into the background, because ultimately, itâs you that writes the code, not the tools. So, in the same way that if you look at a really experienced craftsman, their tools may be absolutely crap in terms of the newer shinier stuff and still they produce really, really high-quality work. And I think thatâs, I think weâre going through that transition at the moment. And I think weâre still stuck in the bright, shiny things phase.
AVDI:
When you say âweâ are you talking about developers in general or a particular set of developers?
DAVE:
I think âweâ the industry in general. I think certain people have it worse than others. But I think as an industry weâd like to think that our tools are the problem.
AVDI:
Mmhmm.
DAVE:
And thatâs our excuse.
CORALINE:
Do you think the focus on tools is a form of cargo culting?
DAVE:
Maybe. I think itâs maybe itâs more explicit than cargo culting with certain tools. People become advocates for their tools. And I think to some extent thatâs because they feel that if other people donât agree with them then theyâre wrong. And therefore you need to make everybody a convert to Gulp or Browserify or whatever it is youâre using today. And so, itâs not just cargo culting in that you see someone else doing it and you think, âOh, Iâm going to copy.â I think itâs actually a more active form where people who blog and everything else are going around telling people, âIf youâre still using Grunt then youâre an idiot, because obviously you should be using Gulp,â or whatever it might be. So, that I think is a lot of the problem. I think we are surrounded in this sea of implicit advertising for all these tools. And we feel that we have to try them.
AVDI:
Is that something youâve felt that youâve done?
DAVE:
Sure, absolutely. I have done that bigtime with Ruby when I speak to more enterprise people. Itâll be like, âOf course youâre using Java. But all the cool kids are using Ruby,â or whatever it might be. Iâm not so much that way now. Although I guess my attitude now is I like to present things to people rather than say, âYou should be using this.â So, I like to say, âYou might want to think about some of the benefits of doing this rather than that.â But yeah, I agree. I think that I am definitely going through that. I think everybody is, to some extent.
CORALINE:
What is some of the negatives around that? It sounds like almost elitism over chosen technologies. What sort of chilling effect does that have on innovation?
DAVE:
Well, I think it has two. First of all, it introduces a lot of inefficiencies into the system, because if everybody is constantly churning through the latest set of tools then theyâre not getting work done. And some of these tools are phenomenally⊠they have a very high overhead, right? And so, someone comes along and says, âOh, you need to use,â whatever it might be, Angular or React or whatever else. And you got to go away and you got to learn that. And thatâs non-trivial. And then you got to start applying it. And you apply it. And just as you get good at applying it, someone comes along and says, âOh, youâre still using that? Oh no, you need to switch to this,â you know? And so, I think thereâs that inefficiency.
I think the other thing is that the quest for bright, shiny means that you quite often forget what youâre actually doing and what the actual benefit of what youâre doing is. And I see that. A good example of that for me is the use of gems in the Ruby community (he says, vaguely bringing us back to Ruby). If you do any kind of decent-sized Ruby development, it brings in some gems, youâll be absolutely blown away by the number of secondary dependencies that you have.
A Rails application, I donât know what the current count is, but itâs probably 100, 150 gems, [inaudible] brought in. And the second you start bringing other things in, it increases crazy. And a lot of that, if you actually dig into why they use these gems, itâll be for one or two minor little functions. And because they wanted to, I donât know, format something as whatever, then theyâre going to bring in this gem. And that gem brings in six other gems. And the whole thing just gets out of hand. Now theyâll argue, well clearly thatâs reuse thatâs going to save everybody time. But it doesnât, because down the road what it means is you now have 12 extra gems sitting around that youâre dependent on. And you switch from Ruby 1.9 to Ruby 2. And three of them break. The entire idea of, stuff is out there, therefore I should use it, I think is a dangerous one. Because I think it gets in the way of what weâre actually trying to do.
CORALINE:
I wish that every Gemfile had a field for an explanation of why that gem was necessary, because I know, especially in a legacy codebase you might have 100 gems in the Gemfile and you have no idea and no way of tracing down whatâs what and whatâs used where.
DAVE:
Absolutely, yeah. In fact, I actually [inaudible]. I actually deleted our Gemfile for our online app and tried to see what would happen. So, I deleted it and then ran the tests. And it was kind of instructive. But I didnât have the courage to actually put that back into production, because I had no idea what was lingering in there that I deleted out. I found a few things that were out of date. But no⊠and the whole thing, the whole process that we run through, tools like Maven, tools like Jasmine. Why do we test JavaScript with Jasmine? It is ridiculously verbose. It doesnât give us any particular benefit in that verbosity. But we do it because people say thatâs what you should do.
Obviously, thatâs the way you do it, right? Itâs behavior-driven, or whatever that means.
JESSICA:
Do you really thinkâŠ
DAVID:
RSpec in JavaScript, yes.
DAVE:
Yeah.
JESSICA:
But Dave, when you were talking about how you went through a bunch of toolsets on your latest project, each of those tool switches was triggered by a problem.
DAVE:
Yeah. And you know the interesting thing? When I switched tools I still had typically that problem.
DAVID:
[Laughs]
DAVE:
But itâs like, you sit there and⊠underneath it all you know itâs your fault, right? If the code doesnât run the chances are pretty good itâs your fault. [Inaudible] is rarely broken. But every now and then you think, âOh, you know what? This file is being left out because the dependency analysis in this is crap. Iâm going to switch over to that instead.â And you do that. And surprise, surprise, it still is broken but it gives you a slightly different error message. And then you go, âOh, I understand now.â And you go back and you fix your source code. And then it works. So yeah, I was like, making excuses I think. [Chuckles]
DAVE:
I was thinking, âOkay. Yeah, maybe I should try Browserify. Oh, I got a good reason to do that because my GOB file is too complex,â or whatever. And so, I switched across. And I do that time and time again. And after a while it almost got to be a game. I was watching myself do this and just grinning widely in the background.
DAVID:
[Chuckles] This is a fun thing that Iâve noticed where you have this stack of yaks and youâve got to get them all shaved. And of course the rule of a yak stack is that itâs infinitely deep. And you push out a yak onto the stack thinking, âShaving this yak will eliminate all these other yaks.â And once you shaved it, you pop that yak back up the stack and youâre now confronted by the same yak stack you had all the way, had originally.
DAVE:
Except itâs now all covered in hair.
DAVID:
Yes, yes. Yak fur feels like productivity to me, honestly.
JESSICA:
Dave, you said something interesting. You said, as an industry we like to think that our tools are the problem. That reminds me of something. It reminds me of a lot of people, including me, in relationships. And there is a word that you wanted to talk about today that relates to that. So, can you tell us about what is limerence and how does it relate to our tools?
DAVE:
Well, Iâm probably the worst person to talk about limerence simply because⊠okay, the story of limerence was that I was actually reading a short story a while back and bumped into the word.
And the curse of modern e-readers, you can highlight a word and see what it means. And up popped a definition that didnât seem to make much sense. And so I thought, okay, Iâve got to go and waste an hour looking at this. And it turned out to be a very interesting hour.
Iâm probably going to get this wrong. So please people, be gentle on me. But limerence first came out in I think the 70s in a book called âLove and Limerenceâ. And it was an attempt to try and find some kind of slightly scientific-ish way of talking about the process of falling in love. And the word limerence was coined to reflect the first stages of the process of falling in love, when itâs really kind of one-sided. So, you havenât formed a relationship yet. Itâs just you projecting yourself into a relationship. And so, you become, infatuated is the wrong word, but deeply interested in another person. And that process is labeled limerence. If you want to get all mathematical about it, you could probably think of limerence as the first derivative of love. So, itâs kind of the ramping up as you start to enter a relationship.
And the reason I was thinking about that is Iâve been thinking about the way we look at our tools and our techniques as an industry. And I think we tend to have that kind of relationship with many of our tools. We have that one-sided love for our tools. And weâd like to try to think that these tools maybe love us back. I always used to talk about loving languages. I used to very happily tell people, âI love Ruby.â And in a way it was to do with a relationship. I felt I had a relationship with Ruby. And I used to say things like, âYeah, Ruby keeps me interested because it has ambiguities,â which when you think about it is really very close to what you would say about a relationship with a person. This person keeps me interested because theyâll throw me curveballs every now and then, or whatever it might be.
alert:
I think itâs good and I think itâs bad. I think you need it but I think you also have to be aware of the fact that itâs happening to you.
CORALINE:
Why shouldnât we love our tools?
DAVE:
Oh, we should, absolutely. If you think about it, it comes back to this idea of you spend all day, every day using them. It would be a hell of a waste of a life if you didnât enjoy the process. In the same way, it would be a waste of a life to live with someone that you didnât love or whatever else. So, I think that itâs very important to have that feeling. I also though think itâs important to recognize the seduction that takes place, because sometimes the tool becomes more important than what youâre trying to do. And I think thatâs when it gets to be dangerous. Itâs like an infatuation gone wrong.
DAVID:
Itâs time to leave the abusive relationship, yeah.
DAVE:
Yeah, I donât know. Maybe youâve become codependent with your tools. I donât know. But I think you can certainly become something of a stalker. [Laughter]
DAVID:
I like to stay up at night watching C++ sleep.
[Laughter]
DAVID:
Thatâs not creepy, is it?
DAVE:
No.
JESSICA:
You could rest easily now, Dave. BASIC is dead. [Laughter]
DAVE:
I donât know. I donât know. I still go out and put flowers on its grave. [Laughter]
JESSICA:
Thatâs so beautiful. The word limerence is not strange to me. Itâs one Iâve been using for a long time because clearly English does not have nearly enough words for love. We use the word love for a thousand different things. And once you get into the separation of concerns you can speak more clearly about relationships including apparently with your tools. To me, limerence is the phase of falling in love that is irrational where you have an irrational level of affection and interest for someone. And it works with tools, too.
When you fall in love and are limerent with your tool you dig deeper into it than you have a real need for at the moment. And you find out more about it. And after that, once hopefully, hopefully you find the edges, you find where your tool doesnât solve your problems perfectly, and then you can step back and youâve developed that relationship, really that knowledge of how the tool works.
You can use that and use it wisely going forward, thanks to that period of irrational interest.
DAVE:
Yeah, I like that. I think thereâs one more facet of it. And that is while youâre in that phase, you can become incredibly defensive. And if the object of your attraction, if someone criticizes it, youâre likely to be irrational in your response and overly come down on any criticism and overly defend what youâre using.
DAVID:
Yeah.
CORALINE:
I think thereâs another side to that, too. And thatâs, you talked about people who are at the leading edge calling other people stupid for using the old tool. I think thereâs a kind of arrogance that comes along with mastering a tool and not seeing other people using it at all or using it the same way that you do and judging them for that.
DAVE:
Yeah, I agree.
JESSICA:
Some of the books that talk about limerence mention that while youâre feeling limerent, while youâre in that phase, you may be very happy and you may be having a great time with your new love interest. But you shouldnât make any major life decisions. Not the time to change jobs or move or anything else that might bring you closer to the object of your affection. That maybe isnât the best idea long-term.
DAVE:
As in theyâre likely to be ephemeral?
JESSICA:
Youâre not able to see clearly. Youâre so excited about this one, the object of your limerence, that all your other priorities which really are important to you can sometimes fall to the wayside. You might forget for instance why youâre doing the project at all, [chuckles] because youâre so wrapped up in the latest tool. And you donât want to make any, Iâm just drawing the parallel, itâs not a good time to make a major commitment like, âOh, weâre going all AWS on this.â
AVDI: [Laughs]
DAVID:
I like this, because my mind is still blown by the math thing that you threw out. Because the reverse of that is that the integral of limerence over time is love. And yeah, while youâre in limerence, you donât know if the relationship is going to be reciprocated yet. You donât know if this tool is going to give back to you. And so yeah, quitting your job to go be a programmer of, Iâm not going to pick a language, but pick some language that is really new that you look down upon because itâs too new and all the cool kids are doing it and weâre snobbish, because weâre just as bad as they are. Because theyâre saying, âYouâre dumb for not using this new tool,â and weâre saying, âYouâre dumb because youâre not getting [inaudible] done.â And my point is that if you donât know that the relationship is going to be reciprocated, you donât want to make a life-changing decision based on that relationship, right? Donât move across country to be with this person who doesnât even know you exist yet.
AVDI:
Thereâs also some interesting research in psychology around this stuff. And that goes beyond just states of being in love, but just people have studied states of positive emotion versus states of negative emotion, and made some kind of depressing findings. Because it turns out that basically people that are feeling really good make dumb decisions. And thatâs a broad generalization. But the finding is that, people that are in cynical moods are more likely to evaluate all the angles. Theyâre more likely to nitpick and see potential problems with decisions. So, itâs actually, people that study negative emotional states have found that there are benefits to being depressed or benefits to being in a crappy state of mind. Because they can see in studies that people that are in those states of mind actually make better decisions about things, because theyâre not just floating gaily over the surface of the issue.
DAVID:
Yeah.
DAVE:
I would guess, I donât know if itâs true or not, but most great artists are probably depressives and possibly for that reason. They are self-critical and that drives them to produce better things.
AVDI:
And this is kind of interesting, especially for Ruby I would think, because we all talk about all the time how Ruby is this, itâs this language thatâs all about joy. Itâs all about happiness. And weâre all about finding programming happiness. Do you think that actually hurts us sometimes?
DAVE:
Thatâs a really good question. I donât know.
JESSICA:
The expectation of being happy all the time can hurt.
DAVE:
Iâm trying to think back through my own history to work out. I think the reality is that probably there have been times where I have chosen to use Ruby over something else somewhat selfishly. Maybe a different language would have been a better bet. And I just used Ruby because I would tell myself I didnât have the ramp up time of beginning experience with the other language. But the reality was, possibly I just didnât want to be with another language. I really enjoyed being with Ruby.
The thought of being unfaithful was making me nervous.
DAVID:
[Chuckles]
DAVE:
And it just didnât sound like fun. So, I donât know. Maybe that actually is part of the issue that weâre skirting around, is this idea that if you fall into that trap, then thereâs a way bigger activation energy required to make you look at alternatives. And so, your decision making goes down partly because as you said, youâre probably less [inaudible] because youâre happy. But also you probably make worse decisions simply because you yourself donât want to risk being unhappy, moving to C++ or whatever.
DAVID:
Yeah. People who are happy will take risks that cynical people wonât. And so, thatâs where your innovation center comes from. But if youâre on an airplane and itâs 30 degrees out, you really want a pilot whoâs trying to decide whether or not he needs to de-ice the wings one more time. You really want a pessimist in the cockpit. Because now is not the time to try and innovate with ice on the wings.
DAVE:
Itâs true. Although recent experiences show you donât want someone whoâs too depressed in the cockpit.
DAVID:
Ugh.
AVDI:
True. This is true.
DAVE:
But anyway, coming back to this idea of tools and falling in love with tools, just to step back, is that a stupid analogy? Is that just pushing it too far? Or is there something we can draw from this, any kind of conclusion we can draw from this? And let me step back and say the reason I wanted to do this episode about this is that I have no idea. And I couldnât think of a better way of trying to refine my thinking than by talking to a group of clever people and then having an even bigger group of clever people listen to how ignorant I sounded. So, I thought that way Iâm bound to actually come up with something.
DAVID:
And how do you feel about that risk now? [Laughter]
DAVE:
Oh, Iâm looking at the clock.
[Laughter]
JESSICA:
I think itâs a great analogy personally. I think itâs excellent. Because like you said, you were stepping back and smirking at yourself watching yourself switch from tool to tool. At the same time we can totally do that if we have words for our excitement that we feel about the tools. Then we can start to distinguish between what is excitement at solving the problem and what is excitement at this particular toy. Because thereâs a balance. In the end, if youâre a professional woodworker you should upgrade your tools.
DAVE:
To a point.
CORALINE:
I actually live down the street from a man who made harpsichords for a living. And he insisted on the use of 17th century tools. And his tool decision actually had an impact on the quality of the instruments that he made and was part of what he was known for, was his 17th century techniques. So, I donât know how that comes into play. But I donât know that as a craftsperson you need the latest and greatest tools. I think you can, whatever youâre used to and whateverâs frictionfree has benefits for you.
DAVE:
And I think particularly, if you think about say, the woodworking analogy. A great woodworker, which I am not, their tool becomes an extension of their thinking. So, theyâre not consciously holding that tool. And theyâre not consciously thinking about angles or anything else. They just know that if they do something, then the result would be something else. So, it takes time to build that. You may or may not believe the 10,000 hour business. But it does take a long time to develop that kind of tacit knowledge of how a tool behaves when you use it.
And if youâre constantly switching tools you never give yourself the time to get that mastery. And so, I think that you need to decide on, maybe itâs not an individual tool as much as a philosophy of tool when it comes to software. But you need to decide on tools that work for you and then say, âOkay. Iâm going to let the next three generations go by me as I develop mastery of these tools.â Personally, I think that will give you way more satisfaction and probably way better outcomes than constantly switching to the brightest shiniest thing.
CORALINE:
I think we have that fear of falling behind, that fear of irrelevancy that probably is part of the reason that weâre constantly trying out new tools and technologies, because weâre afraid that our existing tools are going to make us irrelevant.
DAVE:
That is true.
AVDI:
I think thereâs a certain amount of sense to that fear. I donât think itâs completely ungrounded because we are, as an industry, we still basically have no idea what weâre doing. And so, itâs a bit irrational to say, âOh, this tool is definitely it.â But at the same time I completely agree that you will go nowhere if you just keep hopping from tool to tool. You have to some time, at some point decide âYes, Iâm going to let a few generations go by me while I get really comfortable with this thing.â
JESSICA:
Different tools work well in different contexts and that context includes us. It includes what we know and are skilled with. When you do switch context, thatâs a good time to think about maybe switching tools. If you were writing a hardware code in C and then you switched to business software, good time to switch tools.
DAVE:
Yeah, thatâs a really good point. But I think thereâs another side to that, too. And that is it comes back to another of my hobby horses. And thatâs this idea of, okay, so when do you learn? When do you train? I think too many developers have this idea that, okay, I train on the job. So, I train in whatever my employer is telling me to use next. And thatâs how I get my experience. And if you do that, then youâre definitely going to fall into the trap of staying a generation behind or possibly just going in a totally spurious direction because someoneâs manager has a brother who happens to run whatever, you know? I think as a developer you have to take responsibility for your own development and your own training and your own keeping up to date.
So, I think that you should probably have this slightly schizophrenic thing going on where you have the tools that you use to create value. And those are probably going to be the stable tools, the ones that you donât want to mess with too much because thatâs where your value comes from currently. And then you need to think about okay, the future. And thatâs when youâre going to be training yourself in these new technologies. And the mindset youâre in when youâre doing that is very different. In that mindset youâre deliberately making mistakes. In fact, if youâre not making mistakes youâre not picking up whatâs valuable about these tools. And so, youâll be at home. And youâll pick up, I donât know, you tell me, React.js or something. And youâll spend a week of evenings just messing around and doing your to-do list or something just to see what itâs like and see what the philosophy is and trying to at least remember that there is this here.
I think it was Avdi who was talking about the danger of falling behind. I think itâs absolutely true, right? But we are responsible for not falling behind. And to do that we have to partition our time. We have to partition it into value generation and generating ourselves. And I think too few developers actually think about it in those terms.
AVDI:
So, let me bring this home a little bit. Dave, about 15 years ago you wrote in âThe Pragmatic Programmerâ that we should learn a new language every year. Do you still think thatâs a good rule of thumb?
DAVE:
Yeah, although it may not be language anymore. It may be a technique or it may be framework or something similar. But yes, I think we have to take on a challenge at least once a year of something new and get up to some kind of speed with it. And I think we do that because first of all it keeps us current. I think also quite often I learn new things. I write Ruby very differently now that I know Elixir. My Ruby code looks way more functional-ish. My functions have shrunk down in length. So, itâs really like thereâs a cross-fertilization that goes on there. That when you do learn new things and you push yourself to learn new things then youâll find it does actually leak back into what you do on a day-to-day basis as well.
AVDI:
So, hereâs something I just thought about in relation to that. You talked about going through the progression from Grunt to Gulp to Browserify. And there are a lot of these new technologies and new tools that are very similar. And when we talk about learning a new language or a new technique or something, do we have to use a certain amount of care in choosing something thatâs actually different?
DAVE:
If we want to maximize what we get out of it, absolutely. Iâve always said that. I think you need, if youâre looking at a language and you already know C⊠or sorry, bad example. If you already know C++ then switching to Java is not a radical change if youâre trying to train yourself in something new. Whereas switching to Clojure or Haskell or something else is. And I think you need to think about that.
Now, the interesting thing to me about say Grunt versus Gulp is not the actual specification of the build that you want, because theyâre both incredibly ugly and really difficult to use. The interesting thing about Gulp once you get used to it is the internal way it actually works, which is basically a set of filters that apply to a stream of activities that are passing through them. Whereas the first activity is probably just picking up file contents and then weâre transforming them using compilers or minifying them or whatever weâre doing. And Gulp actually shows us one way of organizing the workflow in that streaming environment.
And what Iâm shocked is that no one has come up, or maybe they have and I havenât heard of it, with a Gulp-like thing for business processes, because it seems like a natural fit. Itâs like an asynchronous message queue but really easy to use. So for me, the big learning experience with Gulp which was frustrating when I first started, was getting that into my head. Thatâs how it worked and thatâs how to think about the progression of my data through it. So, I think in that particular [inaudible] yeah, thereâs no real big difference between Gulp and Grunt in terms of capabilities. But in terms of how they do them, I think Gulp was interesting.
AVDI:
Hm.
JESSICA:
Gulp thinks about it in a very functional way.
DAVE:
Yeah. But it also has this non-functional idea of the multi⊠itâs like trying to work out what the stream actually is in Gulp is the interesting part. And how it handles the fact that you have multiple things going on at the same time in that stream and how it handles the synchronization of those things. Thatâs what I found was really nice.
JESSICA:
Great point. So, thatâs a great example of how learning a build tool can have the same kind of effects on your brain that learning a new language might.
DAVE:
Yeah, absolutely.
JESSICA:
But only if you really dig in. Git is like this, too. Git has all kinds of brilliant ideas inside that are super useful outside it. But if you just stick with the surface, âWhat do I type? How do I make this work? Give me the spell,â youâll never get there. You have to get the philosophy of it.
DAVID:
There was a really great author. I forget his name. But he wrote a book where he said, âDonât trust evil wizards.â Do you know who that was, Dave? [Laughter]
DAVID:
I know, it was Andy Hunt.
DAVE:
Thatâs it. Thatâs it.
DAVID:
And another guy, and another guy.
DAVE:
Yeah, another guy.
DAVID:
I still recommend âPragmatic Programmerâ to people today. I think it is still as valid today as it was 15 years ago. And that book is probably in my top five books that hit me like scripture almost, like revelatory experiences. And yeah, the horrible thing about Git is that to really get good use about it, you really have to dig in and understand what a directed acyclic graph is. The awesome thing about Git is that if you dig in and find out what a directed acyclic graph is, you can do mind-blowing things in your code, like move a chunk of code from one file to another and still see the revision history in that other file of the code when it was in the file that it came from.
DAVE:
Or if youâre me as I just did this morning, you can totally destroy about three daysâ worth of work by trying to be too clever with it. But yeah.
DAVID:
Yeah.
DAVE:
It comes back. Okay, letâs try and circle a little bit here. I think it comes back, when you put it in those terms, doesn't it also sound about the same as forming a relationship? In that you can be superficial, âWell, she looks cute,â or you could be, âHey, I want to learn more about you.â Yeah?
Which oneâs going to lead to a more fulfilling and long-term relationship?
JESSICA:
Thatâs so true. You could be the pick-up artist. How do I just get this to work?
DAVE:
Yeah. Or, âHey, I really like your directed [acyclic graph].â
JESSICA:
[Laughs]
CORALINE:
If I had a dime for every time I heard that.
DAVID:
Yeah.
[Laughter]
CORALINE:
So, one of the things I like about the conversation weâre having is that it acknowledges a personal and emotional component to the technology to reflect some of our humanity. We as professional developers, we seem to idolize objectivity. But weâre acknowledging through this conversation that we are necessarily subjective creatures.
DAVE:
And I think we often try to hide that by couching what is fundamentally subjective in this patina of objectivity. And I think thatâs one of the dangers that I was talking about at the beginning where you have people that push a particular solution as being âthe solutionâ.
DAVID:
Yeah.
DAVE:
Well clearly, you do it this way. As if there was some objective benefit to it as opposed to, âThis one makes me feel better.â
AVDI:
I think thereâs another parallel with relationships where you see that person who gets into a new relationship and their relationship becomes their identity.
DAVE:
Yeah.
AVDI:
Itâs all they talk about. They get the personâs face tattooed on their arm or something. It might be an extreme example, but you know. You look at their social media profiles and itâs all about who theyâre attached to, right? And you see that. I see that a ton with technologies. Look at peopleâs Twitter profiles or something and it lists basically what technology theyâre in a relationship with.
DAVE:
Yeah. And you ask them what they do and they say, âIâm a Ruby programmer.â
JESSICA:
But the âto beâ verb in there. âI am a Ruby programmer,â as opposed to, âI write Rubyâ.
DAVE:
Right, yeah. You see it. And itâs inheritance versus composition.
CORALINE:
Our relationship status with technology should read, âItâs complicated.â [Laughter]
DAVID:
Yes.
DAVE:
Yeah. So, maybe what we should do is we should all stop and form some kind of technology counseling service.
AVDI:
[Laughs] Have you been injured by a technology?
DAVE:
[Laughs] Yeah, yeah.
CORALINE:
Please see a doctor if your vim usage lasts for more than four hours. [Laughter]
JESSICA:
Please tell me how you feel when you get this compiler error.
AVDI:
[Laughs] Is your language hurting you?
DAVID:
[Inaudible] fun.
JESSICA:
And then that goes back to what Dave said earlier that as an industry we like to think our tools are the problem. So, if youâre going from tool to tool and frustrated and unsatisfied in all of them, maybe itâs you.
DAVE:
Yeah.
AVDI:
Ish, except at the same time I kind of appreciate the view that at this point, all the tools suck. I donât know, maybe thatâs me. [Chuckles] ButâŠ
JESSICA:
Theyâre all tradeoffs. They all solve some problems well and cause others, right?
CORALINE:
I think we have this tendency to think of new tools as being this linear progression of better and better solutions, when I think a lot of times weâre just rehashing forgotten solutions.
DAVE:
Yeah, absolutely, absolutely.
JESSICA:
But the context has changed. So, some of those solutions that didnât work in the 70s do work now.
DAVID:
I actuallyâŠ
AVDI:
Like the person you had a relationship once and it totally didnât work out but then you both matured in the past 20 years and then you meet again?
JESSICA:
It could happen.
AVDI:
It could happen.
DAVID:
Except if youâre both married and have kids andâŠ
AVDI:
Right. [Chuckles]
DAVID:
Yeah. [Laughter]
AVDI:
I might be taking this too far. [Laughter]
DAVID:
Itâs [inaudible], yeah. [Laughter]
DAVID:
No Avdi, you⊠[Laughter]
DAVID:
You were talking about looking forward and looking forward. And it does. It makes me think about sometimes we forget to look back. To go from woodworking to metallurgy, Damascus steel was made in Damascus 2,000 years ago. And we didnât know how to make it. The secret to making this was lost. And we have now in the past 10 years rediscovered one way to make it and it requires modern tools. So, itâs probably not how they made it 2,000 years ago. It requires a long, lengthy process and all this⊠And the history of it is a lot of fun. You can look it up on Wikipedia sometime. But computer science is moving so fast that we are having these same kinds of experiences within half a generation gap where⊠well, I guess it would be a full generation at this point.
But I can remember back in 2009 going back and watching the SICP lectures from MIT and being very angry that there were concepts being taught at MIT in 1984 that not only did I not know them, but nobody I knew, knew them, which means that I was not hearing them from any modern programmers. And these were enduring concepts. It wasnât the CAP theorem but it was like the CAP theorem. Itâs like one of those immutable laws of things like streams and that sort of thing. And now itâs all come back because there was this big resurgence of SICP in 2009. And now when you talk to people about streaming things and using queueing and that sort of thing itâs come back into our lexicon. And itâs like a rediscovery of a 2,000 year old metal working technique. But the reason weâre rediscovering it is because we forgot it.
And so, I love looking forward and moving forward. But donât get so limerent with the new that you throw out all of the old, because the principles and practices from the old are still going to hold true.
DAVE:
Absolutely. And in fact, I was thinking a couple of days ago it was actually 40 years ago that I sat in the lecture theater and Tony Hoare talked about Communicating Sequential Processes. And whoopee, weâve just discovered them again.
AVDI: [Laughs]
DAVID:
Yeah.
DAVE:
So yeah, I think thatâs absolutely true. But hereâs my question. So youâve got, what have we got now? Weâve got 60 years of history as an industry. Maybe a little bit more if you roll in some of the more math-y stuff.
DAVID:
Yeah.
DAVE:
How should somebody learn the salient points of our history? How would somebody discover on their own Communicating Sequential Processes? Or the âAlgorithms + Data Structuresâ book, or all of the old stuff that still has so much to teach us. How do you go about discovering that?
AVDI:
Oh, I hope you have an [inaudible].
JESSICA:
You pick it on Ruby Rogues.
AVDI:
[Laughs]
JESSICA:
And then people randomly sometimes read it.
DAVE:
There you go.
CORALINE:
I think youâre making a great point that we are in a cycle of forgetting our history every four or five or six years.
DAVE:
I think we are. But I think part of that is because our history is not made available to us. I mean, I know thatâs like blaming someone else. But the reality is that the presentation of history is an incredibly powerful way of influencing people and teaching people. And I think as an industry we do a really bad job of that. We donât honor our history and the people who made our history. We donât study it. Weâre like a group of people who are writing books that have never actually read a book.
They just enjoy the process of writing so much.
DAVID:
Yeah.
DAVE:
I think thatâs⊠we need to find ways of making that history accessible and relevant, because it is. Itâs fundamentally⊠the first OO language arguably is Simula 67. And Simula 67 still has features in it that no current OO language that I know of has. Itâs amazing to me. There is still so much back there that we havenât mined.
CORALINE:
Do you think thatâs in part due to an imbalance between people who are CS majors necessarily and those who are self-taught?
DAVE:
Could well be, could well be. Having said that, I donât have a thing against self-taught. In fact, I would say that the majority of the better programmers I know do not have CS degrees. And to some extent, many of those actually have a better grasp on our history. And I think maybe thatâs because they chose to come into it a bit later. And it is more likely to have been because of some interest as opposed to their parents saying, âGo get a job.â And as a result they are more likely to go grubbing around and learning stuff. I donât know. But yeah, that could be. I donât think having a CS degree is in any way a guarantee that you actually understand our history.
DAVID:
Yeah.
DAVE:
I have a CS degree but I was actually taking it at the point the history was being made. So, I have a great understanding of the history.
[Chuckles]
JESSICA:
Do they teach this kind of thing in ordinary computer science courses that are not MIT? I only minored in comp sci. and I definitely didnât get this. And in fact the culture was, âHistory? Thatâs for liberal arts majors. Do you want fries with that?â
AVDI:
[Chuckles]
DAVID:
Yeah. Thereâs been a nerfing of the curriculums at a lot of schools. Brigham Young University used to have one of the top-rated CS programs in the country. They were in the top 10. And now theyâre not, theyâre just embarrassed to even talk about comp sci.
And when I was there in â91, well â92 and â93, the comp sci. program was very much grounded in mathematics and the history. And it was actual computer science. When I circled back to 15, 16 years later talking to programmers in 2006 who were recent graduates from BYU and I was asking them, âSo, what did you do your senior project on?â âOh, we donât do senior projects anymore.â âOh, okay. Well, what did you do aboutâŠ?â âOh, we donât do that anymore.â âWell, how hard was it for you to apply to get into the major?â âOh, thereâs no requirement to get into the major anymore.â And Iâm like, âWhat?â And I finally sat down and said, âWhat did you learn in your computer science degree?â
And it turns out that, and I hate to dig on my alma mater, but their computer science program is now a trade tech school for programming. Itâs no longer computer science. Itâs computer craft or computer tradesman-ship. And Iâm going to get hate mail. Sorry guys, I love you. But yeah, the CS program in a lot of schools has changed from, âHow will this teach you the science of computing?â to, âHow will this get you a job as a programmer?â
DAVE:
Itâs interesting because one of our editors and authors is Brian Hogan and he actually, his real job is teaching. He teaches at a university. And he bemoans this partly because itâs actually the students that drive that. The students say, âHey, you know what? I donât want to come out of this with a math degree or something else. I want to come out of this with a job.â
JESSICA:
Exactly.
DAVID:
Yeah.
DAVE:
And so, I need you to show me how to code Java or whatever it is. On top of which, most of the people teaching in those courses, they really donât have that much experience in doing it for real. And so, theyâre very happy to go along with that. And so, youâre absolutely right. It leads to a gradual tragedy of the commons in terms of what you learn.
DAVID:
Yeah.
JESSICA:
The good news is that once we mature a bit and we learn that the liberal arts is actually a way to learn to process information and is a fabulous thing, then we have the option of going back. And for instance, if Iâd learned about CSP in college, I would not have appreciated it. But now with some experience I can much better grasp how this might be used, how it contrasts with other techniques that Iâm familiar with, and I can appreciate the history in ways that I couldnât then. And the books are out there, right? Iâve got a couple of them on my shelf.
DAVE:
What are they?
JESSICA:
So, Iâm looking at SICP, the âStructure and Interpretation of Computer Programsâ and thatâs one of the classics, right?
DAVE:
Right.
JESSICA:
Oh, âSmalltalk Best Practice Patternsâ, thatâs a good one.
DAVID:
Yeah.
DAVE:
Absolutely.
JESSICA:
Iâve got âTypes of Programming Languagesâ by Pierce. Now, have I read all of these? I promise I have read chapter one in everything on my shelf.
[Laughter]
JESSICA:
And thatâs where all of the big ideas are. And I figure if I believe them and I donât need extra proof, then I donât have to read the rest of it.
DAVE:
Absolutely.
JESSICA:
Or Dave, do you have a curriculum list, as an author and publisher? Is there something that youâd recommend to people, âhereâs a resource to go soak up the history of your professionâ?
DAVE:
I cannot think of one or a small number of books that Iâd recommend for that.
JESSICA:
We can ask our listeners to tweet that [inaudible].
DAVID:
Yeah.
DAVE:
Yeah, absolutely. I would love to hear what people think. Because youâve got things like Knuth volumes one through four, right?
JESSICA:
Yeah.
AVDI:
Everybody owns and nobodyâs read?
DAVE:
Well yeah, I mean, I think that is a really cool book. I actually was probably one of the few people that actually read every word in the first three. And I really, really enjoyed it. But if I was to look back on it now, itâs not something I would recommend to someone who just graduated simply because itâs very, very focused on one thing. So, you have to read whatever it is, a thousand pages, two thousand pages, and youâd come away knowing about analyzing algorithms and thinking about the beauty in what you do and everything else. But at its time, it was revolutionary and it made us all think. Now, itâs like it needs some kind of condensing down to a chapter in the story of how we got where we are.
DAVID:
Yeah. Knuth is, I like to think of Knuth as the Shakespeare of our time because everybody wants to have read Knuth but nobody wants to read Knuth.
DAVE:
[Laughs]
JESSICA:
No, itâs true. Thereâs this volume of information that could be condensed. And thatâs what speaking is about, for me largely. Conference talks is toâŠ
DAVE:
Yeah, thatâs a good point.
JESSICA:
Condensing those ideas, bringing it alive, and then sharing it in a way that keeps peopleâs attention.
DAVE:
And hereâs the other thing about knowing your history. If you actually understand, and this is not just in computing, this is in the world, if you know your history and if you know the various drivers then you are less likely to be fooled by snake oil salesmen. So, people will quote stuff as, âThis is important. Thatâs important.â And if you actually know where theyâre coming from, what the history of this was, then you would be able to say, âActually no, thatâs not true.â
So, one of the things I thought was really interesting to me was the whole big thing about goto. So, Dijkstra writes the letter in the ACM âGo To Considered Harmfulâ. And not only did he create the âconsidered harmfulâ meme but he also drives an entire generation of language designers to create all these convoluted languages without goto. Why? Because Dijkstra didnât know how to prove mathematically a program if it included a goto because he couldnât work out what the pre and post conditions are prior to goto. No one can, because you donât know where it came from, right? And so, âGo To Considered Harmfulâ is just basically, âGoto is considered a pain in the butt in my research because I canât make proof about it.â
And now as a result, people certainly for a long time strenuously avoided goto when it was actually clearly the best thing to use in a particular point. And the number of totally convoluted programs I have read simply because people were trying to avoid gotoâs or whatever else. Structured programming was fantastic. Without structured programming we wouldnât be where we are today. But the reason for structured programming is totally lost. We donât do structured programming for the reason that they did it initially. And that was provability.
And so, I think if you understand that history and if you know what motivated it, then youâre in a lot stronger position possibly to resist the allures of the things that you might become infatuated with today.
DAVID:
Goto is a fun one because we watched it morph from âGo To Considered Harmfulâ to languages like Visual Basic adopting, eliminating the pure goto but keeping on error goto, and then the end of the function or whatever. And then it became exception. Gotoâs got replaced with exception handling. And itâs fun to watch that yeah, there are entire swaths of computer science that we consider part of our bedrock that are really just the result of some guyâs blogpost.
DAVE:
Yeah, exactly right.
CORALINE:
Dave, it sounds like your next book should be âThe History and Philosophy of Programmingâ.
DAVE:
Yeah. I donât know. How would you even approach that?
AVDI:
Itâs tough, right? Because Iâm thinking about something like CSP, Communicating Sequential Processes, which I think is a great example of a fascinating paper then I assume a great book, because I only read the paper, with really big implications. And nobody knows about it except for the people that I guess implement Erlang. And Iâm having a hard time imagining a useful way to address that in a single chapter in a book, you know? I can imagine writing about it. I canât imagine it having an actual impact on how somebody thinks about their problems if they just read a chapter in a book on âHereâs what CSP isâ.
DAVE:
Well, I think what you possibly would have to do is to have two types of story in a book like this. Thereâs the story of the things that came about. So, something like CSP and agents, both of which are 1970s ideas really are coming to fruition 40 years later. And so, part of the book would be those kinds of stories. But then part of the book would also be the rest of the stuff, the stuff that we donât currently copy. And the idea there would be to show that thereâs a whole bunch of stuff back there. And maybe to fire some neurons and somebody somewhere to go, âHey, you know what? That actually would solve my problem.â And basically, by laying out whatâs possible and whatâs come before then people can pick and choose what would be useful for them. If they donât even know it exists, then they canât.
A really great example there is bloom filters. Very few people actually know of bloom filters. And to my knowledge, there are no off-the-shelf library implementations. Fantastically useful algorithm, unbelievably useful algorithm. I use it maybe once a year and it solves some massive problem. And yet itâs just not known. So, thatâs the kind of thing where if you could highlight those kinds of things then maybe, I donât know, people would have a better understanding for what they came from.
AVDI:
Mm.
JESSICA:
That would be a great blog. Somebody please start that blog. You can call it, âThe next big idea that is not newâ.
CORALINE:
The last big idea.
JESSICA:
[Chuckles]
AVDI:
Make it a Twitter account.
CORALINE:
Itâs like neofuturism, right?
DAVID:
Mmhmm. Computer archeology. Computer anthropology.
JESSICA:
Anthropology, I like that.
CORALINE:
Nice.
DAVE:
The history thief.
JESSICA:
Thereâs a lot of treasure in those tombs. [Chuckles]
AVDI:
Iâm going to state a bias and ask you to confirm it. I feel like the rampant use of social media and Hacker News and proggit and stuff like that is not helping with learning these big ideas that weâve lost. I feel like itâs really reinforcing the constant cycle of new that isnât really new. How do you feel about that?
DAVE:
I couldnât agree more. And a lot of that is because the people that are the most strident typically are also the people that spend so much time thinking about themselves they donât really have that much time to think about other things. And so, the people that are famous and the people that are the volume producers of all the stuff on reddit and everything else are typically not that informed.
JESSICA:
Iâll disagree. Four years ago before I was on Twitter, before I was going to very many conferences and before I read any of that stuff, I was a very different programmer. And I learned very little. I went through 10 years of getting really good at Java but I could have been a lot better if Iâd been keeping up with what the rest of the community was doing. And Twitter has been amazing for me. Twitter in particular is awesome because I can curate my own feed and only listen to the people that are talking about this kind of historic thing and these big ideas and are not getting too irrationally excited about the next big thing. So for me, Twitter is a lot better than, well, I just donât go to reddit or Hacker News. Sorry, I donât read that kind of stress.
DAVID:
[Chuckles]
DAVE:
Right.
CORALINE:
The self-curation I think is key there, Jessica. Itâs not participating in a culture in which amplified voices then to be the voice of the majority.
JESSICA:
Good point.
CORALINE:
Youâre curating it. Youâre finding people who are interesting and maybe who have viewpoints that are different than yours.
JESSICA:
And I seeded that by going to conferences, meeting some people, and following them, and then following their retweets.
DAVE:
And thatâs actually, thatâs really good. I donât disagree with that at all, because what youâre doing there is as you say, youâre selecting. Youâre selecting it. But even with Twitter and even if you only pick, to some extent if you follow people that you trust, Twitter can also be that incredible distraction. Itâs like, what was the name, Doug, that dog in the movie. It was constantly going âSquirrel!â and chasing off after something.
JESSICA:
[Chuckles]
DAVE:
And somebody I respect posts something about, âOh, Iâm really enjoying this,â and bang, there goes two days of my life. And in fact, one of the things will actually be my pick. And itâs your fault, Jessica, because I was chatting with you about Slack. And your enthusiasm convinced me that I should give it a go. So, I just spent the entire weekend and yesterday coding up various extensions so I can integrate it into our systems.
JESSICA:
Awesome. [Chuckles]
DAVE:
So yeah, that was a classic squirrel moment, because I really donât have that time. So, I think you ought to be careful to balance every source of information. And fundamentally I think you need to control your⊠it needs to be a disciplined thing. Learning is discipline. And you need to have it. I donât.
AVDI:
[Chuckles] Thatâs a fantastic point. And itâs something that Iâve been thinking about a lot lately, just because Iâm getting to a point in my life where Iâm realizing just how little time I have left relatively speaking, in the grand scheme of things, to learn compared to all the stuff that there is to learn. And realizing that I actually need to write up a list of the programming languages that I really genuinely want to invest some time into. And then I need to deliberately avoid the others, because I just canât. I canât. Thereâs too much. Is that, do you do that? Do you do that deliberately?
DAVE:
For me itâs the other way around in that I typically, for a programming language, what Iâll do is Iâll dip my toe into a programming language, particularly if someone I know likes it. And then pretty quickly Iâll decide whether or not this is for me. And itâs nothing to do with the technical side of it or the theoretical underpinnings of it. Itâs just, does it work for me? And if not, then Iâm not going to do it.
But again, I think that, so for example right now, so Scala versus Clojure has been weighing on me a little bit, because Iâve avoided JVM based languages now for years and years. And I keep feeling I need to learn one of the two of those. And both of them when I first tried them put me off. And now a lot of people Iâm respecting are telling me that Clojure is good. So, at some point Iâm going to go back and spend a week running a few, all my standard programs and recoding them in Clojure, and maybe come around and say, âOkay, yeah. This is cool.â So yeah, I donât know. I donât have a list the way you do, because like I said that would require discipline and I donât have any.
AVDI: [Chuckles]
DAVE:
But I do consciously think about what I learn. But to some extent what I learn is based on what makes me feel good, which is probably not a good idea. The other thing Iâd say is that one of the things as developers that I think we need to be thinking about, and that comes back to your ancient aged self and how⊠[Chuckles]
DAVE:
You only have a few minutes left and youâre spending it on this call⊠[Laughter]
DAVE:
Is that we need to think about all of the things that we learn, not just the technologies that we learn. And we need to make conscious efforts to learn whatever we can. We need to read. We need to experience. We need to do stuff partly because itâs really easy to get totally absorbed in what weâre doing. Itâs so much fun and it drags you in. thereâs all that infatuation thing that weâre talking about, the limerence, the idea of it drags you in. It makes you want to participate and addicts you in a way. And we tend to forget about the rest, showering and stuff like that. So, we donât go out there. We donât experience and we donât learn.
And I think as developers we actually owe it to ourselves and to the rest of the world to make a conscious effort to learn other stuff as well as just the technology. And in the same way that learning random technology will actually improve what you do day by day in your current technologies, I think learning other stuff also has that kind of impact. And it makes you a more rounded person, a better person to work with, and more interesting over a beer.
AVDI:
That is a great point. Itâs a series of great points. We are getting to time and overtime. Thereâs one thing that you just mentioned that I really, I canât stop myself from circling back on, I really want to ask you about. You mentioned coding some of your standard programs. You mentioned how you learn a language or decide you like a language. And Iâm really curious about that process.
DAVE:
Yeah, so I have two or three that I like to try to write. Depending on the language, what itâs good that, Iâll do different things. But for example, Sudoku solver is actually a pretty good program to write because it involves a fair amount of messing around with data and trying to structure things in a tidy way. And also, itâs a challenge in a little bit of a way, because some of the solutions that would work in an OO context donât work at all in a functional context, because obviously state management is different. So, I enjoy that one.
If I want to get really into a language and Iâve got some time, a really good program to write is a markdown parser, because markdown is such a badly specified markup. And it has so many weird little edge cases that itâs actually very representative of real-world coding. And so, Iâve done that three times now, written a markdown parser, just to learn the language and the way around it. And every time I feel Iâve done it better. And every time Iâve learned a whole bunch about the language Iâm using.
JESSICA:
Sweet. Should we do picks now? Letâs go with the important picks. Dave, what do you want to pick?
DAVE:
Oh, I donât know about important, because all my picks are relatively straightforward and nothing exciting in them. And the reason I pick them is not because of the surface features but because of the stuff thatâs behind them. So, let me try and justify this.
My first pick is Slack. And Iâm a newly found, or a new convert to Slack, thanks to Jessicaâs recommendations last week. And Iâve been working on it since, oh I guess the weekend, so maybe three, four days. And I have been blown away at how easy it is to integrate Slack into the rest of our business. The thought that has gone into the various APIs, the webhooks and the API calls directly, and everything else, is just beautiful. Theyâve resisted the temptation to put the kitchen sink in there. And as a result, theyâve come up with something which is simple and clean and just works. So, theyâve made a convert out of me simply because of that discipline. So, hatâs off to them.
My second pick is a book. And itâs a book thatâs about four, five years old. Itâs called âWhy does E=mc2?â by Brian Cox and Jeff Forshaw. And I picked it firstly because I like this kind of book. Itâs a mass market science book. And I like reading about this kind of stuff. And I picked it because itâs a phenomenally good book in terms of the way it produces explanations of things. They have a talent for choosing really apt and interesting analogies. And then also for saying, âOkay, at this point Iâm going to stop using this analogy because itâs broken down. Itâs no longer valid.â They also have a really good way of taking concepts that are kind of weird and converting them into the every day.
And what I found is at the end of this book, my understanding⊠no, my intuition about fourdimensional space-time is now a lot more solid than it was. I can actually manipulate things in my head that I used to have to sit down and think through as explicit thoughts. A lot more has become tacit as a result of reading this book. The phenomenal job theyâve done is that in the middle chapter of the book they actually show the derivation of E=mc2 using really nothing much more than three postulates, three suppositions, and Pythagoras. And based on that, out it popped. Phenomenally good job.
And my third pick is a conference. And itâs a conference that Jessica and I went to last week along with five, six hundred other people. And thatâs the Philadelphia Emerging Technology for the Enterprise conference. I do a lot of conferences. And I typically either donât attend the talks or I do attend the talk, Iâm sitting at the back next to a power strip just working on either my talk or some other project. This conference I actually enjoyed and participated in every talk I went to. In fact, it was actually hard to pick between tracks sometimes. The talks were of such good quality. The reason for this I think is that it has a slightly controversial format. They donât call for papers. Instead they invite speakers. They decide what topics are interesting. And then they go and they look for the best speakers to talk about those topics. And as a result, it really is world-class. So, if you have the opportunity and youâre in the area, I would strongly recommend the Philly ETE conference. And those are my picks.
JESSICA:
Awesome. Thank you. Well, thank you Dave and thank you everyone for this episode. Itâs been super interesting. And I bet weâll have you back again.
DAVE:
I would love to be back. Itâs always a pleasure.
[This episode is sponsored by MadGlory. Youâve been building software for a long time and sometimes itâs get a little overwhelming. Work piles up, hiring sucks, and itâs hard to get projects out the door. Check out MadGlory. Theyâre a small shop with experience shipping big products. Theyâre smart, dedicated, will augment your team and work as hard as you do. Find them online at MadGlory.com or on Twitter at MadGlory.]
[Hosting and bandwidth provided by the Blue Box Group. Check them out at Blubox.net.]
[Bandwidth for this segment is provided by CacheFly, the worldâs fastest CDN. Deliver your content fast with CacheFly. Visit CacheFly.com to learn more.]
[Would you like to join a conversation with the Rogues and their guests? Want to support the show? We have a forum that allows you to join the conversation and support the show at the same time. You can sign up at RubyRogues.com/Parley.]