Two seasoned salty programming veterans talk best practices based on years of working with Laravel SaaS teams.
Joel Clermont (00:00):
Welcome to No Compromises, a peek into the mind of two old web devs who have seen some things. This is Joel.
Aaron Saray (00:07):
And this is Aaron.
Joel Clermont (00:16):
I'm going to throw something out there. Even if you identify as a Laravel developer, not as a PHP developer even or a web developer but specifically, as a Laravel developer, I think there's some benefit to keeping your horizons a little broader. And what I mean by that is reading, being interested in looking into other things outside of your direct day-to-day work. And I know, Aaron, you and I maybe even have a little slight difference of opinion on this but it could make for a good discussion.
Aaron Saray (00:52):
I don't know if it's a difference of opinion, I think it's a difference of timing.
Joel Clermont (00:55):
All right.
Aaron Saray (00:57):
So when do you think people should start looking at other things besides learning about Laravel and becoming good at it?
Joel Clermont (01:04):
Yeah, I get where your question comes from. Which is if you study 20 different things at once as a beginner you'll make no progress in any direction. Yeah, there is some balance to it. Like, I do think that you could spread yourself too thin so maybe I'll start by kind of clarifying what I have in mind specifically. Because it's not even really about programming in 12 different languages or anything weird like that but just the idea of being curious and kind of seeing what other communities of people are doing. And just to acknowledge your question and your point, I do think this is something that becomes more valuable the more established you get into a single technology stack. So probably, if it's your first 100 days of coding this may apply less than if it's like your fifth or sixth year doing Laravel development.
Aaron Saray (01:54):
Right.
Joel Clermont (01:56):
I've bumped into this a few different ways in my life and looking back, I see where it's been beneficial. So I'll just maybe share a couple different examples of this. One, it has to do with conferences, right? We attend a conference, we tend to go to things we're interested in, things that we think will have value in our day jobs so to speak, make us better programmers, make us more efficient. And that can kind of narrow our focus. So even the choice of what conference to go to. I love Laracon and I will go to the next one that's in person but would there be benefit in going to a general full stack web dev conference? And then if you go to that, like what about sitting in on a talk that's on Ruby on Rails? Like is there any benefit to that? And I'm asking this rhetorically but the answer to me at least has been yes.
In particular, there was a conference called CodeMash that had all sorts of different languages and it was such a huge conference. I think at any one point there was maybe 10 talks you could choose from, so just to put it in perspective. You know, occasionally there'd be a time slot where none of the talks jumped out at me and just for fun I would go to something so completely off my radar that I didn't think I would ever use it. And I was always surprised, like there was something I could use from that. So maybe I'll pause it there and let you react to that, Aaron, if you think differently about that at all.
Aaron Saray (03:24):
So do you think the useful things were making you a better, well-rounded developer in general or did they actually apply to your Laravel projects you'd come back and work on?
Joel Clermont (03:34):
Yeah. Just to frame it in the context of history. I think when I went to CodeMash, this might have been before Laravel existed or at least before I was using it. But to your point it was more just like general concepts and ideas and it wasn't necessarily like, "Ooh, I'm going to try to write my PHP code to be more like Erlang code," or something like that. I think you can definitely go down a wrong path trying to do stuff like that. But it was like, "Wow, I never thought about this way of testing," or, "That's a really cool tool. I didn't even think you could do that in a programming language." And it just sort of inspired ideas and also made things more enjoyable. I think there is some benefit in just being curious and seeing what's out there.
Aaron Saray (04:21):
Yeah, I think I can put that in a kind of a more concrete example. I think that one of the things that... In rare cases when you have to use, let's just say, multiple requests to a third party and they have to happen in real-time before the languages kind of started mixing with each other a little bit and learning from each other. The only really thing you had in PHP was either synchronous, so one after another and just kind of wait. Or you could do like a (PC and TL4 00:04:52) can fork out the little commands to run kind of at the same time and come back. That was a bugger. Gives you respect for the people who do programming on OS level. But what we found then is, after people became more familiar with how JavaScript handles promises and stuff, and all of a sudden you started having... there's a PHP language that handles promises. And therefore you could then go and send out multiple requests and have them all promised-based and they'd all return back.
And you could handle that in a same way that you might do something in JavaScript but you're doing it in PHP. I think the danger of something like that comes in then people will be like, a junior developer will be like, "Whoa, that means I can run stuff in promises so I never have to use events. So I never have to put stuff in the queue." And that's where I get a little concerned is to make sure we have the timing right when we suggest people go and learn different things. Because I think learning different things is definitely the best way to do it. I mean, I learned more unit testing from a Java book than I did from anything in PHP back in the day, right?
Joel Clermont (06:03):
Okay.
Aaron Saray (06:03):
Because there just wasn't anything in PHP. So I read a huge book on Java unit testing and let me tell you it was hard. But I learned how to... Then I understood what that meant and I was able to apply that to PHP but that was after 7, 10 years of programming in PHP. I'm scared, or I guess I'm reluctant, to suggest that people do it like you said, like, in your first a hundred days or even when you've done a few other big projects. I think the other thing that's kind of gone out of fashion, which I think was really useful in the earlier days of PHP was there used to be this sort of path that developers would take, which kind of coincides a little bit with what you're talking about but not so much. But we're missing a lot of that these days. And the path was learn how to do PHP just with functions, functional PHP, then start learning what objects are and start applying that. Then make your own framework for your products and then after you've done that, finally pick a framework that most people are using. That whole process there, although that sounds silly now and people just go like, "Oh, I'll just use Laravel because everyone's using it. And it's great and it works and everything." That whole process taught you a lot about PHP in general more than you might learn just learning on Laravel to begin with. So that's why I'm a little nervous when we talk about this topic, is like sometimes you can have those people that are like you, Joel, who like to chase the shiny thing.
Joel Clermont (07:31):
Oh, I don't know what you're talking about.
Aaron Saray (07:33):
Yeah. And then they started learning so many things and then forget then that, "Yeah. Every language in every sort of framework has its own strengths, but you don't know what those are until you actually use the language enough."
Joel Clermont (07:46):
Yeah, I think that's a good point. I think you have to be grounded in something to benefit from expanding your horizon. If you are completely new to it or just maybe not completely new to it, but like you even mentioned. If you don't have some experience doing a few different projects in a language you're not going to benefit by looking because you don't really have a frame of reference to be like, "Oh, that's a new idea," because you haven't fully explored the ideas of the language that you're using day-to-day. But I was just thinking too, I see other people doing this where they'll form an opinion about something without having played with it and I try to avoid doing that too. And this might even apply like within a language or framework ecosystem. For example, Aaron, you know maybe we've bumped into developers that have never used Docker because it's confusing or they've heard it makes things way too slow or there's a big learning curve and they just write it off. Whereas I would say, play with it for a weekend, experiment with it, just kind of broaden your horizons a little bit to see if there's anything there worth pursuing. And maybe you'll come to the same conclusion and not use it but at least it'll be an informed opinion.
Aaron, do you like candy?
Aaron Saray (09:13):
No.
Joel Clermont (09:13):
Have you ever eaten? Do you know the candy? What person doesn't like candy? Anyways, have you ever had Runts? Do you know the candy I'm talking about?
Aaron Saray (09:25):
Yeah, Runts.
Joel Clermont (09:25):
Okay. So Runts for those that haven't had it is a bunch of different fruit shaped and flavored candies. And there is one in there that I think most people eat last or not at all, which is the banana runt. You know what I'm talking about?
Aaron Saray (09:40):
Oh yeah.
Joel Clermont (09:41):
Okay.
Aaron Saray (09:41):
I was confusing them with Nerds for a second, but they're Runts.
Joel Clermont (09:46):
Oh, no. Runts, yeah. So they're different flavors, but banana nobody likes the banana ones.
Aaron Saray (09:51):
Oh, I love the banana.
Joel Clermont (09:52):
What? Are you just being contrary?
Aaron Saray (09:54):
No. I thought everyone kept it till the end because they love it. You're like, "Oh, yeah, eat this at the end so it's great." Banana runts are awesome.
Joel Clermont (10:04):
Oh boy. Wow. You just changed my world, I don't even know how to go on. But anyways, let me ask you this question. Have you ever eaten a banana runt and thought it doesn't actually taste like a banana?
Aaron Saray (10:17):
Yeah.
Joel Clermont (10:17):
Okay. So I learned on a podcast, you know, this little Meta because we're on a podcast here. I learned the reason for that is that there used to be a different variety of banana that apparently either doesn't exist or is quite rare right now and that flavoring was based on that banana. Whereas the bananas that we eat that you might get at a grocery store have a different flavor to them. So that's my fun fact for today, Aaron. Did you know that already?
Aaron Saray (10:48):
I didn't know that about Runts specifically, but I knew there was different bananas, that we no longer have banana diversity.
Joel Clermont (10:54):
They've been lost to history.
Aaron Saray (10:57):
Yeah. There was like some diseases or something and then we did some breeding to make sure that they handled it. And now we only have one strain of banana and if something goes wrong there's no more bananas.
Joel Clermont (11:09):
Game over.
Aaron Saray (11:09):
And I just thought, what about all the bread that we wouldn't have then?
Joel Clermont (11:13):
Banana bread? That's true, yeah.
Aaron Saray (11:15):
It's not like Skittles or something like that too? All taste the same even though they're different colors?
Joel Clermont (11:21):
I wouldn't be surprised.
Aaron Saray (11:22):
Yeah, who can tell? It's so sweet that after the first two or three you're just like, "Ah, this just tastes like bad decisions."
Joel Clermont (11:29):
Exactly.
Aaron Saray (11:29):
I know a lot of people hacking different web apps and taking sites down and stealing information, but I don't want that to happen to you.
Joel Clermont (11:39):
Head over to our website. We have a free e-book, Seven Steps To Securing Your Laravel App. Go to masteringlaravel.io/security to download it today.