Ruby Development

Summarized using AI

Dont.

Ernie Miller • March 17, 2014 • Earth

In this engaging talk, Ernie Miller shares insights from his experiences of making mistakes, emphasizing that learning from errors is essential, but life is too short to make all possible mistakes. He focuses on key lessons derived from personal anecdotes and professional experiences, highlighting the importance of thoughtful decision-making in both personal and technical realms.

Key Points Discussed:
- Time Management: Miller reflects on a crucial lesson learned from overestimating available time for projects, underscored by his cancer diagnosis, which prompted him to appreciate life and time more deeply.
- Gratitude: He encourages the audience to thank someone who positively impacted their lives, promoting a culture of appreciation.
- Childhood Anecdotes: He shares humorous experiences with a sticky hand toy named Roderick, illustrating the consequences of stretching it across a room, which serves to highlight the concept of potential and kinetic energy.
- Metaprogramming Caution: Miller cautions against excessive use of metaprogramming in application development, sharing mistakes he made with his library MetaSearch, where he overcomplicated the solution.
- Defensive Coding: He emphasizes the necessity of coding defensively to avoid issues with changes in APIs and to maintain flexibility in software development.
- Addiction to Games: He reflects on his obsessive gaming habits and the mistaken belief that such activities provide meaningful accomplishments, urging caution against the allure of illusory progress.
- Career Decisions: Miller discusses pitfalls associated with accepting counter-offers and the importance of not letting financial incentives steer career choices. He shares a personal anecdote about rejecting a job offer and later accepting a counter-offer, cautioning against the toxicity it can create in workplace relationships.
- Health and Fitness: He recounts his late start with exercise, encouraging perseverance and the belief that it’s never too late to improve personal health.
- Authenticity: Miller stresses the importance of being true to oneself, sharing his awkward attempts to impress others in social situations and how that interfered with his authenticity.
- Public Speaking: He finally recounts his journey to overcoming the fear of public speaking and how he pushed himself outside of his comfort zone to achieve speaking roles.

In conclusion, Ernie Miller inspires attendees to stretch themselves both personally and professionally, emphasizing that learning from mistakes is invaluable. His key takeaway encourages everyone to embrace authentic living and make decisions that align with personal values and goals.

Dont.
Ernie Miller • March 17, 2014 • Earth

We all know that intelligent species learn from mistakes, right?
There's just one problem: Life is too short to make every possible mistake! Also, some mistakes are more costly than others. What's the ambitious learner to do? I'm glad you asked! I'm an expert at making mistakes, and I'm happy to share as many of them as I can possibly fit into a 45-minute time slot with you, my dear conference attendee!
We'll discuss a variety of exciting mistakes, ranging from the misapplication of metaprogramming techniques to letting emotions become barriers to new technologies to why it's a horrible idea to stretch a gel keyboard wrist rest across a room, even if it seems like an awesome plan at the time.

Help us caption & translate this video!

http://amara.org/v/FG2E/

MountainWest RubyConf 2014

00:00:25.199 My name's Ernie Miller. I have an extremely complex URL and Twitter username: it's just Ernie Miller. I work for a company called Apres, and I would really like you to ask me about them because I want them to continue to send me to events like this, so please do catch me after the talk.
00:00:36.800 This talk—almost two years ago, I started thinking about giving this talk, and at that point, I had never given a talk. That was a little bit weird for me because I figured, 'Well, I know I've done lots of stupid things.' If I could give a talk, this would probably be what it was about. I have to admit, it actually scares me. Last year, I gave six talks, and not a single one of those was about those particular stupid things I've done. That's kind of difficult for me because I really want this talk to be real.
00:01:11.840 In case you're not familiar with what a 'real talk' is, it's a talk that you know is real because it says so right in the title. It's kind of like 'The Real Ghostbusters' or 'The Real Slim Shady.' You know, about thirty seconds ago, I mentioned I've done a lot of stupid things. Exhibit A: I’m an expert at making mistakes. I'm happy to share as many as I can in this time slot. I got the time slot wrong on the abstract that's on the website.
00:01:51.520 So, take away from this: first, don’t overestimate how much time you have. That applies to small projects too. When estimating, try not to overestimate the time you're actually going to be able to spend on them. Those of you who know me may know that I had a reason last year to think about this more deeply. A week before Thanksgiving, I was diagnosed with testicular cancer.
00:02:25.760 You know, as cancers go, testicular cancer is pretty fun to have, mainly because you get to make all kinds of horrible jokes and nobody can say anything about it because it's like cancer. What are you going to do, right? Here are a few of my favorites. The nurses at the cancer ward really liked that one. And I got to give the most epic Friday hug ever, for me anyway.
00:02:49.440 I guess all this cancer fun aside, let me just go back to the main point: don't overestimate how much time you have. Since my diagnosis, I've thought about a lot of things that I've been thankful to do, particularly all the speaking I get to do. Last year, I thought, 'If I go, at least I achieved some pretty big goals.' I want to ask each of you in this room to do me a favor: sometime before the night is over, find someone who has made a positive impact on your life and thank them for it.
00:03:41.200 It might be awkward at first because usually, the internet's all about complaining. But find someone you can say something positive to, someone you can thank for whatever it is. It's okay if they look at you like, 'Are you coming on to me? What's going on here?' Just ride that out, and eventually, you'll find that it may make a difference. I’ve been really shocked at the difference it made for people who didn't realize anyone was paying attention.
00:04:26.560 Every time I see Aaron, I'm like, 'Dude, I don’t know how you do it. How do you stay on the rails with all you have to do without freaking out?' I'm very thankful for Aaron; I think most of us are. So, when I was a kid, I loved these little surprise toys. I was particularly fond of sticky hands. I thought these were the best toys ever, and, truth be told, I still think they're the greatest. Try one out if you haven't.
00:05:09.919 You probably have all used one of these before. No, not the keyboard, smart alecks—I'm talking about a wrist rest. Around 16 years ago, I had one of these, and it started to fall apart on me. I made an incredible discovery: you have no idea that the inside of these things is a giant sticky hand. My coworkers and I thought it was hilarious; we loved this thing! If you fling it against a wall, it would stick there and leave marks.
00:05:58.240 We named our sticky hand 'Roderick,' and he got a lot of playtime in the office, visiting everyone because everyone loved Roderick. I spent about $50 buying wrist rests, trying to find one just like Roderick. Unfortunately, there’s only one Roderick. However, I did find one that was fairly close. It doesn't stretch quite the same and it is gross, but it does stretch. I hope this won't stain it. It sticks, it sticks, it sticks!
00:06:38.160 When we figured out that it could stretch, Roderick had the special capability of stretching across an entire room; and I mean that—I'm talking from here to that exit sign over there. My buddy Jeff and I decided to see just how far we could stretch it. I held Roderick on one end, and Jeff held it on the other end. In physics, there are two main kinds of energy: potential energy, which is stored in that stretched rubber band, and kinetic energy, which is energy in motion.
00:07:44.800 Now, I got this photo from iStock, and I actually paid for it because, I mean, who wouldn’t? I needed photos to demonstrate kinetic energy—energy in motion. So I searched for 'businessman flying' on the internet, and man, it was a treasure trove. There’s a lot of stuff in there! If someone hasn’t set up a Tumblr for this yet, please do—businessmen flying! I like this one in particular because even if you’re flying for business, there’s always time for coffee.
00:08:19.839 I have another honorable mention, where someone is trying to fly, so credit for effort, buddy! So, I learned about potential and kinetic energy. There’s also this other thing in physics called gravity. To refresh your memory: I'm holding Roderick like this, and my friend decides to let go. Potential energy quickly became kinetic energy, and gravity being what it is, you might imagine what happened next and where landfall was achieved.
00:09:00.640 On the bright side, I've got a smaller area for that particular attack vector, I guess. The choices I made had consequences. If I had to do this over again, I may have made different choices. I'm not saying that don't make choices that are potentially risky—there’s a lot of reward in that risk-reward balance whenever you make a risky choice. But think ahead about what the consequences might be for those choices.
00:09:35.200 With that in mind, let's talk about metaprogramming. When you start coding, you often go through this phase where you think, 'Oh, metaprogramming is so amazing! I can write programs to write programs! I’ll automate myself out of a job!' I was so silly that I wrote a library for ActiveRecord called MetaSearch, where I had all this metaprogramming fun writing it. In retrospect, I could have summed up that project very differently.
00:10:12.000 If you were at RubyConf, I shared five rules for class macros that I tried to follow, which are: describe what, not how; be declarative; be idempotent; be order-independent; and be straightforward and free of branching, if possible. I didn’t do that at all. I got the bright idea to have all these attributes that I gave class macros with branching in them.
00:10:53.919 So, there are methods like 'attribute searchable,' 'attribute unsearchable,' and 'associations searchable,' where you could write something in your model. Then later, I wrote another library that did basically the same things but used just two methods; you can call those simple methods any way you want. The lesson I learned? Don’t fall in love with metaprogramming—it will break your heart, or kill you in your sleep, probably both.
00:11:56.160 I also ranted about creating buckets of methods that didn’t have a good home, like putting your code in buckets, which is not wise. It’s valuable to come up with meaningful names for things; it’s why it’s hard to do but very valuable. After correcting some of these issues, I started writing other libraries. If you hitch your cart to a horse, and I’m going to call this guy Bob and I think his horse is Stella, you have to consider what might happen if Bob loses Stella. He would be left just carrying the cart himself.
00:13:07.200 I experienced a lot of frustration hitching my gems too tightly to Rails. I was tying into private APIs that Rails had every right to change, as they’re private for a reason. It was frustrating trying to fix bugs that you didn’t introduce but that came about because of API changes. This experience taught me that even when coding your application, you should code defensively.
00:13:56.880 When you are developing software, we often think in terms of our app’s schema—what objects will exist in our database. The other side of that continuum is a lack of consideration for real-life objects—'there is no spoon.' You may be shackled by the database schema when you really need to write the app and figure out persistence later. I would encourage you to think about what you are really trying to do first.
00:14:43.592 Don’t restrict your choices and leave flexibility open for the future. In software development, every choice you make narrows down your options later, so do what you can to accomplish your goals with the fewest choices possible. Here’s something where I blew way too much time—I spent three or four hours tracking down a problem with a simple auditor class that audits user actions on any ActiveRecord object.
00:15:21.680 One fun thing about this class is that you have to override the class to return the records, which is so frustrating. So everything was great, and we were rolling out other changes. Let’s say it's a blog app because I can't share the actual code. The auditor was meant to substitute in place of a post for comments, but I ended up getting the post ID twice in the params, which was bothersome. I spent longer than I should have digging through Rails source trying to find out why it showed up twice.
00:16:20.000 What I discovered was a method in the Journey component that was subtracting a certain set of parameters from another. I had never defined equality on my object. So when you subtract two arrays using the default object ID implementation of equality, they weren't treated as equal. This was a quick fix, merely defining the equality, yet it took me three hours or more to figure that out.
00:17:01.600 Try not to make assumptions on how people will use your objects. I wanted to briefly touch on callbacks and share a very straightforward take on them: don’t use them! You can almost always avoid them. For example, you can use 'super' if you need a before-save callback or around saves. You can implement ifs and unless conditions as needed. Reserve callbacks as a last resort; you'll regret using them once they start interacting with one another.
00:17:58.720 Now, let’s discuss how I’ve messed up in life. There are likely a lot of people in this room who recognize one or both of these symbols—probably both. How many people have played World of Warcraft? Okay, a fair number of you. I played World of Warcraft—and I’m going to say something that might make you look upon me with pity. The guy on the right here is kind of my avatar; I ground to a rank of Grand Marshal in the old PvP system.
00:19:12.640 Toward the end of that grind, I had to put in around eight hours in-game to earn the honor needed to rank up. Every single day. Eight hours in-game, in addition to my job, and finding time to sustain myself. The very first week I started a new job, I was in a meeting with my new coworkers and my boss, almost falling asleep because I had only gotten three hours of sleep the night before after grinding for honor.
00:19:54.560 I’m sharing this because I have something of an addictive personality; I get excited when I feel I’m achieving something. If I can harness that for good, great! But games like World of Warcraft, which I still love, are designed to take people like me—who are excited about leveling up or achieving something—in a way that encourages ongoing play, so they make money.
00:20:33.600 I learned the hard way not to mistake the illusion of accomplishment for the real thing. Many systems in life provide an illusion of progress, whether in games or otherwise. Real progress is worth spending many hours on, but I learned that you can waste a lot of your life pursuing what ultimately is meaningless.
00:21:59.040 Another thing to consider: counter-offers. You’ve probably read that you shouldn't accept counter-offers from an employer. I have a personal story. I initially worked in tech support and moved to systems administration at a mid-sized ISP. I made $650 an hour with a promise of an additional 50 cents an hour if I showed good progress after six months, but I was only around 19 at that time and didn't know better.
00:22:47.760 I received another job offer and took it because they offered me the money that I never made. On my way out, I argued with my employer over how he had done me a favor by giving me a job. After a while, people kept saying, 'Who did this?' Oh, Ernie did that! And the guy started to panic: 'Why did I let that guy go?' They offered me my old job back with a significant pay raise, and I took it.
00:23:42.000 My employer said they would match any counter-offer, but if I ever went back to them, I shouldn't even mention it—just take it and leave. Here's the thing: accepting counter-offers creates a poison in the relationship. If you've never been through this, I’d rather spare you that experience. At this point, there’s resentment because you know they were paying you less than they thought you were worth.
00:24:27.680 They expect you to work much harder because now they think they're paying way more for you, and there’s distrust on both ends. Even if you're well-intentioned about it, it’s a horrible thing to do, and I did it when I was 20. Don’t accept counter-offers; you’ll only regret it. Another quick note about money: I've taken jobs for money before, but that’s not a wise thing to do.
00:25:12.960 While money can unlock new levels of happiness, eventually you find that without passion or fulfillment in your work, it won't make you as happy as you used to be. In positive psychology, there’s a term for this: the hedonic treadmill. While you might get a temporary boost from a salary increase, if the work isn't rewarding, your happiness level will gravitate back toward normal. You may even end up less happy.
00:26:14.800 When it comes to exercise or health, I didn't exercise much for most of my life. Believe it or not, I was never athletic. I used to think it was too late for me; I remember telling people I probably wouldn’t live past 30, and that's okay because it's all downhill from there. I encourage you: don’t assume it’s too late. About a year and a half ago, I started working out, and I’ve returned to my old pant size from high school, but I'm 30 pounds heavier.
00:27:05.440 My body composition changed, and I feel better about myself now. I'm more confident with people, and I can run if I need to. These are all things worth doing. Whatever you’ve been putting off, it’s never too late to start. Another thing I encourage you to do is avoid getting too comfortable. In a previous job with a cable company, I was the only developer on my team.
00:27:59.200 It was easy to get into a mindset where I felt like I could do no wrong, especially when no one else could call me on it. Unfortunately, I spent most of my 20s at jobs that didn’t challenge me or hold me to higher standards. I regret that. Don’t allow yourself to be too comfortable; seek out something that will challenge you even if it's not in your current job.
00:28:39.680 Hayrides were a thing where I grew up in Pennsylvania, and in junior high, I went to one. Afterward, there were snacks around a bonfire—a perfect place for those of us who were kind of awkward and interested in dating. So I'm sitting there hoping nobody notices me when two attractive young ladies approached me. My initial thought was: 'Crap! This was unexpected.' You see, I wanted to seem cool, so I remembered that cool people put their legs up on the walls.
00:29:24.800 I decided to do that thinking it would make me look comfy. Unfortunately, they had a basement window exactly where I was standing. I ended up sending shards of glass down to unsuspecting grandmothers making hot cocoa below us. So needless to say, no numbers were exchanged that night. I still find myself trying to be someone I'm not, and we all do this to some degree.
00:30:03.679 Deep down, I'm afraid none of you will like me. I worry that I’m just up here talking about myself and not offering anything. I've learned not to live two lives. It's hard enough living one already. Authenticity matters. People pick up on it; they can be more perceptive than you think. Fear exists, and while some fears are reasonable, like being afraid of a grizzly bear, others are unreasonable.
00:31:01.679 I personally struggle with saying no. I used to take on horrible ideas just to show that I could do something, which was not good for me. I've learned that what you say no to defines what you can say yes to. When a sculptor works, they define the piece by removing everything that doesn’t belong; the same goes for boundaries. Say no to things that do not align with who you are, and you’ll explore who you really are.
00:32:14.720 I shared a clever warning label on some peanuts that says, 'Contents: Peanuts, 100%,' indicating if you're allergic, you shouldn't eat them! I had been afraid of being perceived as Captain Obvious and worried that people would dismiss my learning experiences. There was one time I spent two hours on what seemed like a simple pattern, but it turned out to be impactful for others. It seems what’s obvious to you may not be obvious to someone else.
00:33:17.560 So, don’t be afraid to share! You might be surprised by what people don’t know. A few years ago, I started expressing my desire to speak at conferences but only told a couple of people. I realized that by doing a lightning talk, I could tell myself I had spoken. It took me a long time to get over that fear of public speaking. Just remember: speaking is another form of sharing.
00:34:25.000 So, how did I overcome this? I posted my intention on my blog—on January 1st, I declared what I wanted to do—and three weeks later, I secured my first speaking engagement. Find someone to hold you accountable. For me, it was the entire internet. I’m not great with boundaries, but in the end, I had the opportunity to speak in Moscow, keynote at RubyConf, and I had never spoken before January of last year.
00:35:15.360 I didn’t deserve those opportunities, but all I did was try. In conclusion, I want to say, like Roderick, don’t be afraid to stretch yourself. Thank you very much.
00:38:10.400 Thank you.
Explore all talks recorded at MountainWest RubyConf 2014
+12