00:00:15.240
Well, for those of you who are left, I guess I’m the only person keeping you from dinner. So, for those of you who are still here, thank you. For those of you who are still watching, let me turn off some things before we begin.
00:00:22.000
This presentation is rated M for Mountain; not G. It will be a little bit mature. There aren't going to be any sexual themes or intense violence. Well, okay, there might be some yelling. I won't guarantee there won't be strong language, and if anyone wants to get me some whiskey, I’d appreciate it. However, there won’t be any alcohol on stage, sadly.
00:00:36.040
So, this is me. I'm a freelancer. Hire me! I don’t break screens like Dave does. This is how I look on a daily basis when I’m working. For those of you who don’t know, this is the Dalai Lama. He tends to be one of the more peaceful and happy people in the world.
00:00:57.720
Sadly, this is usually how I feel—angry, bitter, and frustrated with the world, code, clients, everything. How did I get here? I’m not so sure either. So, I started this presentation to address that. Thirteen years of contracting with the federal government probably drives anyone insane. The government is really good at wasting your tax dollars and starting projects that don’t finish. Most of the software projects, including government projects, are failures.
00:01:41.680
I've bounced in and out of startup land; I’ve been through two bubbles. Yeah, that’s where the gray hair comes from—at least, some of it. Lately, I’ve been working for myself as a freelancer, which brings its own special kind of stress: paperwork, taxes, all that good stuff. I’ve been doing this for about 16 years and have seen a lot of crap in my job. I’ve noticed a lot of projects that do bad things.
00:02:28.720
I tend to get a lot of rescue projects lately, which means I see a lot of things that people have done wrong. I make mistakes myself occasionally, of course, but it definitely pisses me off. If you remember from one of those movies, there’s a line about how fear leads to anger, anger leads to hate, and hate leads to suffering. Let's talk about hate.
00:03:09.040
I found this image and fell in love with it instantly. The comments hit home too. I hate writing presentations and giving them; I really don’t enjoy writing. So this time, I started mind mapping—I whipped out my mind map app on my iPad and jotted down everything that came to mind that frustrated me about software projects.
00:03:54.800
I’ll talk a bit about anti-patterns. Starting out with a new project can be difficult. Sometimes, you don’t know where to begin. If you’re good at what you do, you might just start writing down what has to be done—what we call pending specs. This leads to building from there.
00:04:25.240
On a personal note, my mother-in-law drives me crazy, and that’s how she got into this presentation. I was mind mapping one day while my mother-in-law walked in and started talking to my wife. I thought, why not write some thoughts next to that? I started to feel better, realizing this presentation might be therapeutic for me. Hopefully, it will also be entertaining and informative for you.
00:05:20.560
I want to show some code that metaphorically relates to my mother-in-law. The user class, typical in software, tries to do everything because the user is seen as the one pushing the buttons. This means including all sorts of behaviors and associations, which doesn’t add any real value. It's just moving code around without improvement. I was introduced to a solution called DCI, which stands for Data Context Integration.
00:06:12.360
Let’s take a look at some code I’ve worked with on a Ruby project. This code is something that receives a response from GitHub when a user authenticates and wants to create an account. We have a session controller calling a method and subsequently extending the user with a new user provisioner module, which is essentially a role that includes the provisioning method.
00:06:53.760
This way, the user class remains clean, and our controller is contextual, allowing us to see that we are provisioning a new user. However, there might be some downsides to this approach. I've heard concerns about performance, especially regarding method caching and object persistence in Rails. If you’re not careful, you can blow away method caches, which leads to performance issues.
00:07:56.920
Now, let’s touch on monkey patching. This has caused me considerable pain recently. There was a gem where the author wanted to add behavior to a rescue method and ended up monkey patching it, which created tons of issues. The solution is simple: don’t monkey patch! Instead, try using dependency injection.
00:08:58.760
I know it might sound scary, but it’s not inherently a Java problem. If a dependent method doesn’t exist in the gem, we can simply add it. Using GitHub for pull requests makes this feasible, and it allows us to expose the behavior we need without unnecessary struggles.
00:09:50.000
Now, let’s discuss naming conventions. Anyone who creates a class that associates two things should consider the names carefully. If you have a user and a team, don't call it user_team; call it something meaningful like team_membership instead. Good naming reflects what the associations do and helps others understand the code better.
00:10:44.240
Additionally, while it may be tempting to use vertical code for readability, horizontally aligned code is generally harder to follow. Adding carriage returns can make code segments easier to navigate. As for personal experiences, anyone can be insensitive at times and say whatever comes to mind without considering others' feelings. It's important to remember that when working in teams, empathy is key.
00:11:56.600
Returning to conventions in coding, take a note from Yehuda's talk on Ruby conventions. Conventions help ease the burden of understanding someone else’s code. If people stray from typically accepted patterns, it creates a mess and confusion. Boring, conventional code is favorable because it contributes to readability and maintainability.
00:12:38.520
We need to use meaningful vocabulary; if you associate two classes, don’t simply match their names but reflect on the action being taken. For a user belonging to a team, a proper name would be team_membership instead of user_team. This attention to naming clarifies the code’s purpose.
00:13:11.440
In terms of handling messy code, it's beneficial to keep bad implementations out of high-level classes. Instead, confine the chaos to private methods or helper classes with comments to indicate the presence of less tidy logic. This way, you’ll avoid landmines when reading through the code.
00:14:58.920
Finally, let’s talk about significant life experiences. Coming out of college, many expect programming to be an adventure. However, the reality often consists of managing schedules, budgets, and workflows that lead to stress. Life and work can be immensely challenging.
00:15:50.000
It helps to pause and reflect on pain points in life. When you feel overwhelmed, consider your purpose and the ideals you serve. We all serve something, whether that’s your job, an organization, or your family. Each one of us has passion towards our work, which explains our presence here.
00:16:44.000
During tough times in my life, I wanted to take risks instead of continuing with the status quo. For instance, eight years ago, I faced significant challenges related to my wife’s health. Diagnosed with Huntington’s disease, the prospect of family and my future became uncertain.
00:17:54.640
Despite that, I didn’t give up. After attending a conference, I was inspired by others who had prevailed through their difficulties, and I decided to change my life. Making changes added more happiness into my life, and overall, I became much better off.
00:19:01.760
Today, my life is still complicated. My wife’s illness is ongoing, and we face new challenges as a family. However, I look back and realize that taking the leap to change my circumstances ultimately ted to a healthier and more fulfilling lifestyle. Anyone can do the same; when life pushes hard, don’t be afraid to jump off the cliff. Take calculated risks.
00:20:09.240
I hope that by sharing this, it may inspire someone who finds themselves down. Remember, it's about serving higher ideals and living life authentically.
00:20:19.480
If you don’t like your current situation, change it! That’s the essence of what I hope you take away from my talk today. Thank you for listening.
00:21:05.240
Keep flying, and stay shiny!
00:21:57.520
Anyone have any questions? No? That’s alright. It’s all good. Just remember, if anyone needs to talk or have inquiries about anything specific, feel free.