As developers, we tend to think that our best practices are universal laws that we’ve discovered and which get refined over time. That’s true to an extent, but I think we underrate the ways our environment and technology shape what a best practice even is or what the best way to use a developers time might be. Looking at the past can help us calibrate what is and is not part of our environment. Recently, I was at a used book sale and I came across this: It’s a book called Programming Pr...| Blogs on Noel Rappin Writes Here
Every time I think the AI frenzy has peaked, it peaks again. Writing about coding these days feels like Jimmy Stewart dancing on the edge of a floor that’s rapidly receding under him. I had a draft of this that started with five or six capsule stories of interactions with LLMs for coding purposes, some saving incremental time, some being wrong, some even being right. Then I realized that I probably shouldn’t be that detailed about work stuff, but more importantly, you likely have all thes...| Blogs on Noel Rappin Writes Here
So, this is wildly late. So late that it mocks the very concept of an end-of-year recap. And honestly, if I didn’t like going back to these things and re-reading them, I probably wouldn’t have finished it. Couple of quick notes before getting to it: The new thing this year is that I used The StoryGraph to rate all the books right after I finished them. You’d think that’d make it easier to get this list out, but apparently not. I’m not posting my actual star ratings because my actual...| Blogs on Noel Rappin Writes Here
Notes and Corrections Before we get fully started here, a couple of notes on Better Know Singleton Classes, which, among other things, got mentioned on Hacker News, giving me comments there for the first time in years, maybe for the first time ever. One Hacker News comment suggested that “Eigenclass” was coined by _why the lucky stiff as a joke and was then adopted by the community. I looked this up and that doesn’t seem to be the case… _why’s Poignant Guide To Ruby uses “metaclas...| Blogs on Noel Rappin Writes Here
Last time, I talked about ways to use dynamic typing to manage objects and business logic in your code. Doing so involves leaning into the object system, going beyond just “one class for each noun” and creating objects to model different states within the business logic directly. In a basic Object-Oriented design, you might have an object called User. This object, by itself, represents the entire concept of a user within the system. In this design, specific states of a user — admin, una...| Blogs on Noel Rappin Writes Here
How To Not Use Static Typing In Ruby Last time, I took a short example and examined in some detail what you would gain by adding static typing to it and what it would cost to use static typing. What I didn’t do was explain how I might handle the problem without static typing. For reference, Here’s the example again. Consider this to be part of a larger system and don’t worry too much about the rest of the world: classCheckoutServicedefcheckout(user,items,amount,status)# do some thingsMa...| Blogs on Noel Rappin Writes Here
I’ve tried writing this literally a half-dozen times. And it always feels like it slips out of control and gets too abstract to be useful. So, let’s start with something concrete. And we’re going to wind up splitting this into multiple parts. Probably two, but honestly, at this point who knows? This all got started because I was discussing the use of runtime checking using Sorbet. The other person gave me a code snippet and asked how I would manage it without type checking. We kind of g...| Blogs on Noel Rappin Writes Here
Last time around, we got to Better Know access control in Ruby, and I started to write my opinion on the use of private methods in Ruby, but my position/argument/rant had gotten out of hand and so I spun it off into its own post. This is that post. It’s long enough as it is, let’s just get to it, we’ll skip the internal ad. What I think about Private Methods in Ruby In Ruby, a method without side effects should be public. You should only have a private method if there is a side effect s...| Blogs on Noel Rappin Writes Here
I’ll be honest, I picked this topic out of the half-dozen or so Better Know A Ruby Things on my to-do list strictly because it’s maybe the only Ruby take that I genuinely argue with people about. To be even more honest, it got away from me a bit as I started writing the argument: which is why I tend to avoid declaring methods private. I know these newsletters have tended toward long, but 3100+ words was a bit much even for me, so I’ve split it in half. Today, we’re covering methods, m...| Blogs on Noel Rappin Writes Here
If your organization has coders continually getting in each other’s way, or if you make a change to part of your code base and don’t know who needs to review it, or if you have code that nobody maintains because everybody owns it… you may be violating Conway’s Law. --- Hi – I thought I’d do something a little different this time. We’ll be back to more Better Know Ruby things next time, but I’ve been sitting on this essay for a while and wanted it to get out. You can also find ...| Blogs on Noel Rappin Writes Here
This is late even by my absurd standards for having this post be late. I have a good excuse – I got on to TikTok. And not that I wasted a bunch of time on TikTok, but that I started to see a lot of BookTok videos, where a lot of very earnest people would talk about their 5-star-books for November or whatever. And I thought, “Do I sound like that?” And it kind of froze me, honestly. And then I realized “Yes, I probably do, and that’s okay?” I mostly write this for future-me anyway...| Blogs on Noel Rappin Writes Here
Previously in what what I guess is now “The Argument Trilogy”, we talked about: Positional Arguments Keyword Arguments And now the trilogy now comes to its inevitable conclusion with “Return of The Jedi” block arguments. In the interest of keeping this thing within the plausible word count of a newsletter, we’re not going to talk about what blocks are or the way blocks behave here, that’ll be a future Better Know, but we do need to talk about block syntax. --- Before we continue, ...| Blogs on Noel Rappin Writes Here
Last time on Better Know A Ruby Thing, we covered positional arguments, and now we’re going to move on to keyword arguments. I really did think this was going to be shorter than the last one, and then I got to the conversion between keyword and positional arguments, and then… well, it’s not shorter. (I know I said the next newsletter was going to be Conway’s Law, that’s coming, but this one moved along faster…) --- A brief commercial announcement: If you like this and want to see ...| Blogs on Noel Rappin Writes Here
Ruby has three ways to pass information from a method call to a method definition: positional arguments, keyword arguments, and block arguments. Each of these ways has: A syntax to declare an argument of that type in a method definition A syntax to declare an argument of that type in a method call A class that can can be used to convert arbitrary objects into and out of method calls A text marker that is associated with that kind of argument, *, **, or &. Originally I was going to Better Know...| Blogs on Noel Rappin Writes Here
I am extremely excited to say that Programming Ruby 3.3, also known as The Pickaxe Book, is now done done, finished, completely available as an ebook, and winding its way to distributors to ship to people as a genuine physical book. The PDF and ePub versions of the book are available at Pragmatic’s website. The print book should be available wherever you get print books, including Amazon and Bookshop. I’ve talked in the past about what’s in the book, what’s new, and whether you should...| Blogs on Noel Rappin Writes Here
You have a series of test cases. They cover the same logic with different inputs. In order to get to that logic, there’s some overhead: objects have to be created first. Then there’s more logic needed to evaluate the result. What’s the best way to manage these tests? You want it to be easy to add new tests. You also want it to be clear what part of the test is different in each round and what part is just the common logistics. That makes the tests easier to understand. There are lots of...| Blogs on Noel Rappin Writes Here
Sorry for skipping a week or two – I was approving copyedits on the book that is now called Programming Ruby 3.3, because we now want to be proactive about the next release. Coincidentally, the copyedit review does relate to this newsletter. I noticed a particular code sample as I was going through the book again, and it highlights a feature of Ruby’s constant lookup that I didn’t discuss last time. --- Hi – we’ve gotten some comments that the code snippets don’t look good on Appl...| Blogs on Noel Rappin Writes Here
A fun thing about learning Ruby is that sometimes concepts that have the same name as in other languages have different behavior and purpose in Ruby. Today: constants They aren’t actually constant. They aren’t only used for small strings or magic literals. They aren’t even mostly used for that in most Ruby programs. Constants are one of the core pieces of Ruby and they aren’t super-well documented in the official site, so here we go… --- Hi – we’ve gotten some comments that the ...| Blogs on Noel Rappin Writes Here
Welcome to “Better Know A Ruby Thing”. In each one of these, we’re going to look at some feature of Ruby language, library, ecosystem, or culture and explain what it does, how it works, why it’s there, and any thing else that comes to mind. First up, method_missing. If I may be poetic for a second, method_missing represents both infinite potential, and the possibility of a second chance when you can’t figure out what to do the first time around. Okay – that’s maybe a lot to hang...| Blogs on Noel Rappin Writes Here
Even by my standards, this one is slow to come out, so I’ll keep the intro brief. As I’ve done for the past few years, I quasi-obsessively rank the books I read, and I write about the top several. It’s 40 again this year, and again, I’m really sorry. As usual, don’t take the rankings seriously, they’re just here for some kind of organization. Book links go to Amazon Kindle pages. I try to explain enough about the book so you can tell if you’ll like it too, I’ll use an elevator...| Blogs on Noel Rappin Writes Here
I haven’t sent out a newsletter in 2022 – about 10% of people subscribed to this newsletter have never seen an actual newsletter in their mailbox. That seems like it should end, so… hi! I’m Noel. I write books, mostly about Ruby. I write this newsletter, which is normally about Ruby, Rails, Agile, and other topics, and is occasionally (like today) self-promotional. Under normal circumstances this comes out a few times a month. You can see archives at http://noelrappin.com/blog to get ...| Blogs on Noel Rappin Writes Here
Welcome. Because of the exact kind of person I am, it’s always bugged me when people put out year’s best lists in early December – the year isn’t over, what if you read or see something on, like, December 29th that changes your whole list. (I realize this is a very silly thing to be bugged by.) I traditionally get around this by putting out my favorite book lists sometime around the Ides of March. Here’s how I do these lists these days: I keep a running list of books I read, and at ...| Blogs on Noel Rappin Writes Here
Most human communication, text or written, is wordier and more redundant than it needs to be, strictly speaking. That previous sentence, for example, would still communicate its point in about a third of the words with “Most human communication is too wordy”. You’d likely still get the idea if I used about half the characters and wrote: “hmn comms too wrdy”. There are certainly reasons why you might include words when speaking or writing that are technically not needed: Redundancy p...| Blogs on Noel Rappin Writes Here
This is a quick bit of service journalism about one thing that seemed less than obvious about converting the code in Modern Front-End Development For Rails to Rails 7.0, namely how to integrate TypeScript with the new tools. Specifically, the Rails 7.0 version of the code ditches Webpacker in favor of the new jsbundling-rails and cssbundling-rails gems and uses esbuild instead of webpack. See here for an only-slightly out-of-date description of the new tools. Most of the logistical changes th...| Blogs on Noel Rappin Writes Here
Jessica Kerr wrote a very interesting post on bell curves and engineering teams. Jessica’s point is that bell curves are for random distributions, and that when teams share information and learn from each other, they no longer can be modeled by a random distribution. I think this as true, and a valuable insight. It reminded me of a different, related observation about teams and bell curves. Back in the 1980s, when he was applying analytics to baseball teams, Bill James argued that a common ...| Blogs on Noel Rappin Writes Here
I’ve now tried to write this post like three times, and one thing that’s clear to me again is why you don’t see more write-ups of even moderately complicated real-ish problems. It’s hard to get enough of the context across to make the code sensible without being overwhelming. But there’s a Rails and ActiveRecord structure that this example gets to that I think is useful, so I’m going to try again. (Spoiler alert: the trick is refactoring ActiveRecord has_many lists to wrap them in...| Blogs on Noel Rappin Writes Here
Hey, if you like this post, you might like my recent books: “Modern Front-End Development for Rails” (Ebook) (Amazon) and “Modern CSS With Tailwind” (Ebook) (Amazon). If you’ve read and enjoyed either book, I would greatly appreciate your help by giving a rating on Amazon. Thanks! When last I talked about the Elmer project tracker, I was talking about Ruby magic and singing the praises of StringInquirer. I was expecting some pushback on the Ruby Magic™, but didn’t get any, so I ...| Blogs on Noel Rappin Writes Here
Or: Rails and JavaScript, Part 5 A quick program note: If you like this newsletter, you might like my recent books: “Modern Front-End Development for Rails” (Ebook) (Amazon) and “Modern CSS With Tailwind” (Ebook) (Amazon). If you’ve already read and enjoyed either book, I would greatly appreciate your help by giving a rating on Amazon. Thanks! If you are really interested in how we got here, I wrote about the history of Rails and JavaScript, read Part 1, Part 2, Part 3, and Part 4. ...| Blogs on Noel Rappin Writes Here
A quick program note: If you like this newsletter, you might like my recent books: “Modern Front-End Development for Rails” (Ebook) (Amazon) and “Modern CSS With Tailwind” (Ebook) (Amazon). If you’ve already read and enjoyed either book, I would greatly appreciate your help by giving a rating on Amazon. Thanks! In my last post, I refactored the status field for cards in my project tracker to a more object-oriented representation that used value objects and classes to replace conditi...| Blogs on Noel Rappin Writes Here
If you’ve been reading this newsletter for a while, you’ve may have noticed there are two patterns I talk about all the time: We’re doing something because everybody does it but we don’t know why. We’re doing something, but we don’t really believe in it so we’re doing it halfway and not getting any benefit. Object-Oriented Design often hits both those patterns – teams use OO languages for various reasons without thinking about what OO can do for them, and then teams don’t us...| Blogs on Noel Rappin Writes Here
A long time ago, I studied research on what makes successful engineering teams. (Not programmers, other engineering fields). I don’t remember a lot of it, but one phrase stands out: “preserving ambiguity”. Successful teams don’t make decisions that aren’t needed, and they don’t get themselves locked in too early. One fact about the beginning of a project is that you know less about the project than you ever will. And yet teams are often asked to provide estimates, do architecture,...| Blogs on Noel Rappin Writes Here
Previously on Locally Sourced: I wrote about building a small feature in Hotwire. Also, I have two, count ‘em, two, books for sale. Modern Front End Development For Rails (ebook) (amazon) and Modern CSS with Tailwind (ebook) (amazon). I have this idea that teams get in trouble when they do something that they are “supposed to do” without understanding what problem they are trying to solve and what tradeoffs they are willing to make to solve it. This especially goes for things that “ev...| Blogs on Noel Rappin Writes Here
Previously on Locally Sourced: The Tailwind book is out. Buy it in ebook or at Amazon. Modern Front-End Development For Rails is in final layout and headed to the printer. This post will make a lot more sense if you’re familiar with Hotwire If, for example, you bought a book about it… Simplicity is Not Simple To the extent that I have a guiding principle of software development it’s this Alan Kay quote: Simple things should be simple, complex things should be possible. A related fact is...| Blogs on Noel Rappin Writes Here
Previously on Locally Sourced: About a year ago, I started this newsletter with a bunch of posts that I originally called XP 2020 and later called Entropy Essays – you can find all the posts here. I got bogged down and never got to the punchline… There’s a common thread in the story of how testing, object design, and pair programming have been adapted since XP and Agile became buzzwords. I think estimating fits here as well. Broadly speaking, these practices are hard, and because they a...| Blogs on Noel Rappin Writes Here
After writing about one kind of contrived sample code, I want to write about a different kind: the kind that is part of an interview process. A disclaimer right up top: I do occasionally evaluate coding samples for Root, but I did not design the current coding problem, nor did I design the metric that is used to evaluate solutions. Nothing I say here should be taken to imply anything about Root’s interview process. Anything I say here is a reflection of my experiences evaluating samples at ...| Blogs on Noel Rappin Writes Here
You don’t need me to tell you that 2020 was a weird year, and that definitely showed up in my reading list. For a long time mid-year, I really shied away from anything that was dark or challenging. Still, I somehow managed to read books this year, and I managed to put together a list. Eventually, I mean it is April 2021, which is a little late for a Best Of 2020 list. Rankings were done using the same nerdy comparison system I used last year. Don’t take the rankings seriously, they are fo...| Blogs on Noel Rappin Writes Here
Previously on Locally Sourced: I said this one would be about interview code, which it isn’t. Next time. Meantime, the live home of this newsletter is https://buttondown.email/noelrap, where you can subscribe for free, or for money if that’s feasible for you and you are so inclined. Thanks, and tell your friends! People have been asking me quite a bit recently whether I would choose Hotwire or React for a project and what role each has in the web ecosystem. And when I say “quite a bit...| Blogs on Noel Rappin Writes Here
I’ve been going back and forth about what to put in this newsletter about Modern Front-End Development For Rails. On the one hand, it’s a big deal for me, and it’d be great for me if people bought it. On the other hand, you’ve likely heard me talking about it for a year and you’ve probably made up your mind. (If you haven’t, would you consider buying a book?) I did realize I had a weird, niche topic about the book that I wanted to talk about. The examples. Writing example code for...| Blogs on Noel Rappin Writes Here
If you are reading this, then I did at least one thing right. I’ve moved this newsletter to new provider called Buttondown. Ideally, this will not affect you at all. (You may have gotten a request to re-confirm your email, if so, that was my mistake.) For me, it gives me the ability to write in Markdown, with code syntax coloring, an API that I might use at some point, and somewhat better financial terms for what is, let’s face it, a tiny email list. If I’ve done this right, we also hav...| Blogs on Noel Rappin Writes Here
Previously on Locally Sourced: It’s been quite a while. I’ve been very focused on finishing the big update to the draft of the book. Which I have done, giving me a bit of a breather until the technical reviews come in. I’m hoping this means I’ll be getting this newsletter out more frequently. I was looking back over the past newsletters, which I do from time to time to prevent repeating myself, and I realized that I had promised two posts from talks that I felt never got a wide audien...| Blogs on Noel Rappin Writes Here
Previously On Locally Sourced: I wrote about Hotwire and Turbo, the Rails client side New Magic. Then I wrote about them again. I think you are all caught up. I’ve been writing about Hotwire and Turbo, and haven’t said all that much here about Stimulus. Which is a tool that I like so much, that after using it on a project, I literally decided to write a book so I could tell more people about it. What do I like about it? It has a lot of the same virtues as Turbo: it’s very easy to increm...| Blogs on Noel Rappin Writes Here
Previously On Locally Sourced: I wrote about how to use Hotwire and Turbo. (My Mac keeps wanting to autocorrect that to “Hot-wire” for some unknown reason…). The update to Modern Front-End Development With Rails is ongoing, the book is available for beta purchase if you want the new stuff as soon as we can get it to you. After writing a post a couple of weeks ago explaining how the new Hotwire framework works I want to spend some time explaining what I like about it. DHH makes some grea...| Blogs on Noel Rappin Writes Here
This week, after some mysterious announcements about “New Magic”, Basecamp released Hotwire, their support tools for client-side development using HTML over the wire rather than JSON. These are the generic versions of the tools that power Hey. Hotwire consists of the already released StimulusJS, and Turbo, which is the successor to Turbolinks. This is also the tool release that has been holding up Modern Front-End Development With Rails, on sale now! If you follow me on Twitter, you may r...| Blogs on Noel Rappin Writes Here
It occurred to me recently that two of the conference talks that I consider the best I’ve ever written never really got a very wide audience, even by the admittedly low standards of my conference talks. And I also wanted to revisit them to see if I can improve the argument. This post comes from a talk called “The Road To Legacy is Paved With Good Intentions”, and here is the original talk video from WindyCityRails 2017. I’m fascinated by the concept of legacy code, and in particular h...| Blogs on Noel Rappin Writes Here
I recently gave a workshop about technical writing at Virtual RubyConf 2020. I enjoyed doing that tremendously, because, in case it’s not clear, I could yammer on forever about technical writing in much the same way as I normally yammer on about code, just to a smaller audience. I didn’t get to some of my outline in the workshop, so I’m being a little indulgent and writing it up here. I hope it’s helpful. It’s a few odds-and ends about useful techniques in technical writing. The goa...| Blogs on Noel Rappin Writes Here
How We Don’t Know What We Know Previously on Locally Sourced. Who can even remember? Sorry, it’s been a while. I’ve been stuck writing two-thirds of posts and not quite wanting to finish them, but if you are reading this, I assume that means that I finally ended this one. In the meantime, I’ve sold a book-shaped object to Pragmatic that will be about Tailwind CSS. It’s part of the Pragmatic Answers line, which means it’ll be short, and it’s what I’m doing to keep me busy until...| Blogs on Noel Rappin Writes Here
Look, I said it was a weird trick, not necessarily an effective trick… Every day, it seems, I get a digest from Medium that has a bunch of articles that are all titled “9 VS Code Extensions That Will Change Your Life”. To be completely honest, I read a lot of them, and I actually do find some useful tips. But I want to back up a second and talk about developer tools in general. You should know this: I’m something of an outlier when it comes to developer tools. I don’t, and have neve...| Blogs on Noel Rappin Writes Here
Trying to Define Undefinable Terms: The Locally Sourced Story Previously on Locally Sourced: I’ve been writing about XP and Agile. Most recently, pair programming. And how I think about technical decisions. I started to write a different essay here, but then I realized that I was sort of depending on having written something like this. So I wrote this. I’ve been writing all these posts about Agile and XP methods and I’ve been talking about process and about trust, but I haven’t define...| Blogs on Noel Rappin Writes Here
Maybe it’ll help you out? Previously on Locally Sourced: does anybody read this part? Hi, it’s Noel, how are you? Last time, I wrote about pair programming, and there were a couple of discussions on Twitter (where you can follow me @noelrap) that came down to what would make you choose to have your team do pair programming or how you would evaluate it. I thought it was worth a follow-up… After I posted about pair programming, a discussion I had on Twitter made me think about how I evalu...| Blogs on Noel Rappin Writes Here
We hope that 1 + 1 = 3 Previously on Locally Sourced: I’ve been doing a lot of these oddly titled posts about XP and Agile practices. Like testing. Or OO. I wrote about inclusion on agile teams. And about team metrics. Next up: pair programming. And even though it sounds a little pretentious to my ears, I really do think this is going somewhere, and I think between the last one and this one, the shape of the argument is starting to make sense to me. Hey, if you like these posts, tell a frie...| Blogs on Noel Rappin Writes Here
Or Why is a Software Team Like A Shortstop Previously on Locally Sourced: I’ve been writing these Entropy Essays about Agile and XP practices. Here’s the most recent one. You can see the rest here. Tell all your friends and colleagues to subscribe. One of the great things about writing this newsletter is that it’s forced me to think some ideas through in more structured ways than I might have if I was just talking to myself in my own head. For me, writing down a thought packages it in m...| Blogs on Noel Rappin Writes Here
It’s hard to predict… Previously on Locally Sourced: Well, we’ve been talking about the history of Rails and JavaScript: part 1, part 2, and part 3, and we’ve finally caught up to the present time, so I guess it’s time to talk about the future. Also, my Rails and JavaScript book is still on sale. You might want to buy it. This is all a little speculative, based on the are changes that have been made to Turbolinks and Stimulus that are clearly in use in Hey.com, and are scheduled to ...| Blogs on Noel Rappin Writes Here
The Webpackening Previously on Locally Sourced: Rails came out and let people do Ajax, when Ajax was a thing. Then Ajax was less of a thing and Rails let people write CoffeeScript, and use Sprockets. Also, I wrote a book on Modern Front-End Programming with Rails, which is relevant to this edition. The Rails 5 and 6 releases have had a few big JavaScript components, with one more presumably imminent. With Rails API and Webpacker, Rails made a big move toward allowing better interoperability w...| Blogs on Noel Rappin Writes Here
UJS, CoffeeScript and Sprockets, oh my. Previously on Locally Sourced: I wrote about the early years of Rails and JavaScript. Which made it to Ruby Weekly. Also, my Rails and JavaScript book is still on sale. A quick program note: If you’ve liked the Entropy Essays, I’m doing a virtual Chicago Ruby Meetup on July 7th at 6:00 Central Daylight Time. It’s being streamed via zoom, and you can sign up here. I’ll be tying all those essays together and talking about how they relate. Please d...| Blogs on Noel Rappin Writes Here
You got your Rails in my JavaScript… Previously on Locally Sourced: Well, in 2005 I came across a cool web framework called Ruby on Rails. More recently, I wrote a book about integrating Rails and front-end tools. If you want, you could buy it. Today, I thought I’d go back to the beginning… Over the fifteen or so years that Rails has been around, the relationship between Rails and client-side JavaScript has gone in many different directions. What with Hey.com’s big release, and the at...| Blogs on Noel Rappin Writes Here
Or: Trust Goes Every Which Way, And Makes Agile Work Previously on Locally Sourced: I attempted to justify all this agile stuff. Before that, moreagilestuff. Also, I have a book out, and good marketing practices would suggest I mention that from time to time. This time around, I’m worried that all these words won’t help make the central point: Everybody on a software team should feel included and safe in their work because it’s the right thing to do. An agile team has a particular respo...| Blogs on Noel Rappin Writes Here
I mean, really… Previously on Locally Sourced: I wrote about an XP practice. Then I wrote about it some more. Then I wrote about a different XP practice. Then I wrote about it some more. (Okay, it’s a bit of a stretch, but a domain metaphor was an XP practice, and OO modeling went hand in hand.) In any case, with more about Agile and XP coming up, I thought it was time for some self-justification. Which is always a little dangerous, so I hope this doesn’t sound whiny. I’ve been writin...| Blogs on Noel Rappin Writes Here
Maybe more about the past than you needed to know? Previously on Locally Sourced: I wrote about kinds of object-oriented design. Before that, I asked why you hired that test. I didn’t exactly set out to write 1300 words on the history of OO design, but I pulled out some old books and got nostalgic. Tune in next week for more on Agile, communication, and inclusion. As I was writing the last post, I started skimming through a couple of my Object-Oriented textbooks from the mid-90s. I had forg...| Blogs on Noel Rappin Writes Here
Who doesn’t love a taxonomy? Previously on Locally Sourced: We talked about test speed, and we asked why you hired that test? If you like this kind of thing, tell a friend or colleague. One thing that I see a lot in online discussion of programming styles is the idea that Object-Oriented Programming is just one thing that you either do, or don’t do. I think that’s reductive, and not just because different languages encourage different structures in objects. There are a lot of different ...| Blogs on Noel Rappin Writes Here
Previously On Locally Sourced: The Entropy Essays are a series of essays about how programming practices inspired by Extreme Programming such as testing, pair programing, and object-oriented design play out on modern web projects. The first one was about test speed. And eventually we’ll get to why they are called Entropy Essays. I want you to stop for a second and think: “why are you writing this test?” Not “why are you writing tests in general?", why are you writing this next test, r...| Blogs on Noel Rappin Writes Here
Yes, I really do need 700 LEGO bricks in order to flip that light switch… Program note: This essay is timed to the release of the draft-complete beta of Modern Front-End Programming with Rails. They won’t all be about the book, promise. (There will be one or two more about the book). There will be more Entropy Essays in the future about testing, object-oriented design, pairing, and so on… Something interesting happened as I was finishing up the book. I wrote a piece of code and enjoyed ...| Blogs on Noel Rappin Writes Here
Speed matters. But not precisely. There are only two things that matter when thinking about the speed of your automated tests: How fast can you run the relevant set of tests to let the tests be helpful in development? How fast can you run a complete, green build for deploy? We’re talking about the first one in this essay. In development, you want to be able to run the tests you are writing and a subset of tests that are most likely to break based on your changes. (I mean, ideally you would ...| Blogs on Noel Rappin Writes Here
About, oh, eight or nine years ago, I decided I needed a personal website. On the theory that I didn’t want to become a full-time personal website wrangler, I decided to put the site on Squarespace. Squarespace was a great service, and a very well thought out set of tools but over time, it’s become less well suited for my (admittedly minimal) needs: Squarespace costs some money. When I started this site, it was at least theoretically a portal to self-published books. I can’t even preten...| Blogs on Noel Rappin Writes Here
Books That Made Me Happy 2019 Here’s big old book list for 2019. I did something very weird and nerdy this year. Rather than group the books by type, I just rank them. (I actually kind of rank them every year, but I don’t normally use the ranking in this post because I don’t want it to seem like a competition). To be extra nerdy, what I did this year was write a short program that randomly picked two books and asked me to compare them, and repeated that over and over, then did various m...| Blogs on Noel Rappin Writes Here
Books that made me happy 2018 Well, I failed in my plan to get this out by the end of January, but here are the books I liked in 2018. Unlike past years, here they all are in one post, I think it’s about 25. I tried, with mixed success to not write six gazillion words about each book. Enjoy! My favorite book of the year The Calculating Stars / The Fated Sky by Mary Robinette Kowal— if you have ever liked anything I’ve recommended ever, there’s a good chance you’ll like this. After a...| Blogs on Noel Rappin Writes Here
20 some-odd years ago, when I was a graduate student, I spent about two years building Mac applications using a language called Prograph. You’ve likely never heard of it. I want to explain why I’m still kind of obsessed with it. I’ve spent a lot of the intervening 20 years explaining to people why it was great. I’ve I’ve been capable of delivering this as a lightning talk at the drop of a hat at any time in the past ten years. Prograph was a purely visual language — they calle...| Blogs on Noel Rappin Writes Here
These are a director’s notes on my talk “The Developer’s Toolkit”, you can also watch the video here. It has sources for all the tools mentioned in the talk, and a little commentary that didn’t quite fit in. Hope this is helpful: General References Small, Sharp, Software Tools by Brian Hogan is still in beta but looks to be a good reference to Unix command line things. Which still can be useful, even if I don’t think they are the be-all and end-all. Terminals ZShell I actually swi...| Blogs on Noel Rappin Writes Here
Truinboy: https://flic.kr/p/5pkYiv Everybody in the Ruby community says they love pair programming. We often use it as a proxy for the awesomeness of a developer shop. Developer candidates regularly ask me if we pair as part of their attempt to determine if we know what we are doing. I wish we’d cut that out. Pairing is not a proxy for how good a development shop is. Pairing is also not, in my experience, a great tool for increasing team productivity and code quality. At least, not without ...| Blogs on Noel Rappin Writes Here
2017 Books A Plenty At long last, the 2017 books that made me happy/recommendations post. Did you miss me? Past years: 2016 Part 1Part Two 2015 Part 1Part Two 2014 SFFantasy This year, I’m doing it all in one post, because if you are going to write 4000 words it’s best to get it all in at once, that’s just science. The rules are: These are all books I read in 2017 That I liked The books are organized into arbitrary groups, because there were weird coincidences, in that I read a number o...| Blogs on Noel Rappin Writes Here
Just this week, RSpec 3.7 was released with support for the Rails system tests added in Rails 5.1. (If you’d like to read more about system tests and see examples of them in action, my book Rails 5 Test Prescriptions is now avaiable for purchase) What are System tests? System tests were added to Rails core in Rails 5.1 as the core team’s preferred way to test client-side interactions using Capybara and a browser driver. This is in addition to the Rails core integration tests, which don...| Blogs on Noel Rappin Writes Here
This is part of a new series of blog posts expanding on or relating to each episode of the Tech Done Right podcast. There are a couple of links through this post going back to specific parts of the podcast. Leave a comment, or follow us on Twitter. This week on the podcast, Corey Haines and I talk about Elm. You should listen to it. Podcasts are perhaps not the world’s best medium for talking about code, so I wanted to dive a little deeper into a couple of things that Corey and I discussed....| Blogs on Noel Rappin Writes Here
Five Things Give Or Take Two JS I’ve been working in JavaScript on and off basically since JavaScript was invented, I even kind of wrote a book on it, and I still find the current ecosystem kind of bewildering. Ben McCormick wrote a nice essay about Ten Things A Serious JavaScript Developer Should Learn, which is based on a Reddit thread that is maybe a little too much noise-to-signal (shocking, I know). It’s a good list, and I like that it errs on the generic and not confrontational sid...| Blogs on Noel Rappin Writes Here
This is the weekly newsletter for the Tech Done Right podcast. If you like this newsletter or have other comments, email me at techdoneright@tablexi.com. And tell your friends to subscribe at http://techdoneright.io/newsletter. Five Things Give Or Take Two RIP DBC The big news in my little corner of the world is the closing of Dev Bootcamp. Many of the original Chicago DBC staff were former coworkers of mine. Here’s Dave Hoover’s photo set from the first couple of years. I have some comp...| Blogs on Noel Rappin Writes Here
Here’s part two of my 2016 “Books I Liked List”. This is the list of books I really, really liked, for the list of books I just liked one “really” worth, head here. All the book titles like to the Kindle edition of the book, so enjoy. All The Birds in the Sky by Charlie Jane Anders I really did like this book quite a bit, though not as much as other people: you’ll find several online lists that have it as the best or one of the two or three best books of the year. (It was also one...| Blogs on Noel Rappin Writes Here
You probably don’t need an actual ledger to measure the costs and benefits of your tests (This is a sidebar to an email course called Noel Rappin’s Testing Journal that you can sign up for here. It relates to the content of the email course, but didn’t quite fit in. If you like this post, you’ll probably also find the course valuable. You can also hear me discuss similar topics with Justin Searls and Sam Phippen on an episode of the Tech Done Right podcast.) I often find myself refer...| Blogs on Noel Rappin Writes Here
Books 2016: Part One This is part one of my “books that made me happy in 2016”. As usual, we’re doing this in two parts. This one is the books I liked, the next post is the books I really liked. I had a hard time separating the list this year, there were a lot of likable books, so there are kind of a lot here. In alphabetical order by title. Act Like It by Lucy Parker I went back and forth about whether to include this in the list, it’s a little “one of these things is not like the ...| Blogs on Noel Rappin Writes Here
It’s the one and only Slimey Worm from Sesame Street! When you write a new feature using a Test-Driven Development process you start out with a simple test, often creating an instance and calling a method on it: If you are strictly following TDD, you’ll try to write the simplest code that could pass the test, so your first code that passes the test might look like this. The code has no real logic, but it does pass the test, by just returning the expected value as a constant. This techniq...| Blogs on Noel Rappin Writes Here
So here’s my thing about headphones. I lose them or damage them quite a bit, your classic run them through the washing machine or such, and I don’t have very well trained ears. So I tend to buy cheap ones with the understanding that I’ll replace them pretty often. For the last few years, my go-to has been whatever The Wirecutter says is the best cheap in-ear bud. That said, I do like the convenience of bluetooth wireless, especially when I’m commuting and the cable would have to run a...| Blogs on Noel Rappin Writes Here
You want to avoid abandoned shopping carts. (Photo via LookAfterYourself) My book Take My Money: Accepting Payments on the Web is about — wait for it — accepting payments on the web. Although the thrust of the book is dealing with all the complexity of managing money, we do talk about the user experience of interacting with a payment process. Specifically, the book shows how to set up a shopping cart for users to hold on to items they want to buy. However, in the book’s implemen...| Blogs on Noel Rappin Writes Here
Some thoughts about my new laptop about two weeks in, which I gather I’m supposed to hate, but which so far I persist in kind of liking. I think it’s a little bit about expectations and what’s being replaced. So I got the higher-end 13 inch MacBook Pro, with the touch strip, with a bigger SSD, but without the chip upgrades. It’s replacing a 2012 15 inch MBP that was definitely showing its age, with a screen that ghosts and dwindling battery life. First Impressions It’s small. For so...| Blogs on Noel Rappin Writes Here
The Testing Pyramid, from Rails 4 Test Prescriptions It’s time for “Ask A Tester Person”, a game I haven’t played in a long time. I got a question on Twitter (several weeks ago, actually… but better late than never, right? Right?): I am, as a Rails junior, also confused about changes in controller testing I guess that’s technically not a question, but we’ll consider to the question to be “What the hell is up with controller testing in Rails?” (You too can get a 750 word blog...| Blogs on Noel Rappin Writes Here
This is not exactly what the code in question looked like I had a unique career experience this year. After watching this really quite fantastic RailsConf talk from Katrina Owen, I asked if she’d be interested in doing a full-day refactoring workshop for the Table XI developer team. Katrina agreed, and we decided that she would put together a workshop based on refactoring some of our actual client code. I had just the project in mind, and had her look at some specific examples. We settled ...| Blogs on Noel Rappin Writes Here
It’s a stream, kind of I was reading the ActiveAdmin docs, as one does, when I read that ActiveAdmin, by default, streams CSV data when you request it from your browser, rather than sending it all in one chunk. This means that the Rails server can start sending the CSV data to the client while the file is still being generated. This can make the response much faster. (True fact, I was reading it for my mega-hot best seller Take My Money: Accepting Payments on The Web. What do CSVs have to ...| Blogs on Noel Rappin Writes Here
I love this cover, by the way. My new book, Take My Money: Accepting Payments on the Web, is available today. If you have a Rails application that touches money, this book will help you. I hope that this book will help you build your payment application with less stress and fewer mistakes. Here’s why I wrote it: My favorite books and blog posts to write are the ones that I wish I had been able to read when I was starting a new project. A few years ago, I started working on a legacy rescue ...| Blogs on Noel Rappin Writes Here
Yikes! So I was giving my talk at Madison Ruby: Epilogue, or “this really is the last one, we mean it everybody”. Watch the whole talk, about doing HR in small consulting shops. About five minutes in I was making a very incisive point about annual reviews when: Gravity is very effective And suddenly, nobody remembers my incisive point about annual reviews. (Which was, for the record, that editing them for a year is kind of soul-destroying, even if everybody involved is basically nice and ...| Blogs on Noel Rappin Writes Here
RSpec has options that will help you see your specs more clearly RSpec is a big library and the way you use it makes a big difference in how efficiently you can run specs. It has a lot of default configuration options that are generated when your application is created, but if your application is older than a few months, it’s likely there are some new and useful configuration options that you might like to add. Here are a couple of RSpec configuration options that make a difference in the ...| Blogs on Noel Rappin Writes Here
All your blocks should have whitespace… After two blog posts where I was very non-doctrinaire about really big topics, today I’m going to be absurdly doctrinaire about something trivial. Yep, it’s The Continuing Adventures of the Person Who Cares A Little Too Much About Whitespace. There are about four things that I do which appear to be different from the work setup of nearly every other developer I’ve ever worked with: I use fairly large fonts, about 20 or 22 point I’m pretty aggr...| Blogs on Noel Rappin Writes Here
It’s my software stack, with complexity! It’s not an unusual observation that there are two major philosophies about designing Rails applications, sometimes called the “Core” and “Prime” stacks. (Specifically, the name Prime stack comes from Steve Klabnik, though he calls the main stake the “Omakase Stack”, from DHH’s Rails is Omakase post) The Core stack is based on the way the Rails core team recommends Rails should be used, and is how Basecamp uses Rails, at least based o...| Blogs on Noel Rappin Writes Here
The testing cycle goes from red to green to red to green One of Kent Beck’s first articles about unit testing is called Test Infected: Programmers Love Writing Tests. It was written, I think, in 1998. What’s interesting about the Test Infected article is how Kent describes the process: “code a little, test a little, code a little, test a little”. Which is backwards. Or not-backwards, depending on your perspective, but in any case, it’s not the TDD process that Kent would eventually...| Blogs on Noel Rappin Writes Here
I noticed that I didn’t have a copy of the Boring Software Manifesto on my own site, so here’s the original version from 2007 (yikes!) and a video version from 2013. Several years ago, I coined the phrase The Boring Software Development Process, in response to a former employer where project management really didn’t think anything was happening unless we were trying to solve seven crises simultaneously. The manifesto goes like this: Boring software projects favor tacking exciting proble...| Blogs on Noel Rappin Writes Here
These knives all have handles The first time I was in a programming debate that used the argument “I want a sharp knife”, my friend was arguing that real programmers wrote C and accessed memory directly. I was arguing for Java as the easier, if less flexible, solution. One generation’s sharp knife is the next generation’s whirling machete blade. The phrase “sharp knife” has been bouncing through the Rails community the last day or so. I don’t really want to talk about the lates...| Blogs on Noel Rappin Writes Here
I haven’t written about my writing setup, tools, things like that in a while, and I’ve got some show and tell. Here’s my current mobile writing setup – really, my preferred writing setup if I’m not coding or otherwise doing something that requires a full operating system. That’s an iPad Air 2, the Logitech Keys-To-Go keyboard, and a Kanex plastic stand that you can only kind of see. Why do I like this setup: It’s really small and light. The keyboard is six ounces, and is smaller...| Blogs on Noel Rappin Writes Here
This post is about a very small Rails design decision. A Rails design decision that I’ve made over and over without thinking about it. You probably have, too. And then a weird test failure made me think about it. And then it made me overthink it. Let me explain. I like the idea of writing Rails code such that there is minimal logic in ActiveRecord classes, and then writing a lot of tests that don’t need to touch the database, and therefore run fast. I frequently find that even if I start ...| Blogs on Noel Rappin Writes Here
The Week of Me A couple of quick things. The Web Payment book is out for 50% review, which means that the draft is about half complete, and about a dozen or so people, including the publisher, will be the first readers (well, I guess it got an editorial review at the ⅓ mark). This is a little terrifying. I did a quick breakfast talk this week on trust and projects. It wasn’t recorded, but pretty much everything I said is in my Trust-Driven Development book, which you should read. Yes, you...| Blogs on Noel Rappin Writes Here
After coming back from RailsConf, I have some tips about speaking at conferences. Which isn’t really a comment on the speakers I saw — I think, overall, the quality of the speakers has improved noticeably over the years — but more along the the lines of tips for people getting started. None of this is a hard-and-fast rule, the most important thing is to speak about something that you find important and interesting, and do so in a way that makes your excitement apparent to the au...| Blogs on Noel Rappin Writes Here
This week’s things are a little late because of thing one. Quick me update: I did post one item to Medium this week, about how I learned to love Rubocop. Read it, won’t you? Thing One: RailsConf RailsConf was this week, and despite what I might have said last week, it really does feel different in 2016 than 2008. I’ll post some specific talk recommendations when the videos are posted. Well, there’s one talk up already Justin Searls posted his own recording, and what was ostensibly a t...| Blogs on Noel Rappin Writes Here
I just write here| noelrappin.com
I just write here| noelrappin.com
I just write here| noelrappin.com
I just write here| noelrappin.com