Best Advice I've Been Given: Check Your Ego
The Red Hat twitter account just asked this question: "Communities grow by uplifting others. What is one piece of advice you’d offer to a new developer? Reply below and then check out some advice from #RedHatter @somalley108." Here’s my input.
As a general rule, if you’re writing software, you’re probably pretty intelligent. That intelligence, while important, of course, can also become a hindrance. For example, I’ve been told by coworkers, "You may write buggy code, but I don’t" and "We don’t need techincal oversight". I think both of those statements are patently false, and they — and others like them — always take me back to that advice from my first manager, Chris Anderson, gave me way back in 1997:
Check your ego at the door.
It’s really easy to walk in to a coding review, a design session, or one of a myriad of other meetings with your ideas and think they’re the best. It’s also really easy to overlook the fact that other people in that room are also pretty intelligent — maybe even more so (it happens), and that we all have blindspots and weaknesses. In my experience, and I’ve certainly been on both sides more than I care to admit, many conflicts in software development are ego-driven. There’s a difference between being passionate about something and being an arrogant jerk. The latter type does nobody any good, so check your ego. Go in humbly, and see what there is to learn from your coworkers, even if you’re more senior than they. With that mindset, everyone will come out a winner.
Chesterton's Fence and the Software Developer
Recently at work, we found an odd scenario with a REST (-ish ;) endpoint from another team: If the request provided a list of, say, 11 IDs in the query string, the system would only return information on the first 10 of them, silently dropping anything over that seemingly odd limit. The initial reaction was of, course, "Well, let’s just increase the limit." To be honest, I had the same reaction, but then I remembered one of my favorite quotes, known as Chesteron’s Fence:
In the matter of reforming things, as distinct from deforming them, there is one plain and simple principle; a principle which will probably be called a paradox. There exists in such a case a certain institution or law; let us say, for the sake of simplicity, a fence or gate erected across a road. The more modern type of reformer goes gaily up to it and says, "I don’t see the use of this; let us clear it away." To which the more intelligent type of reformer will do well to answer: "If you don’t see the use of it, I certainly won’t let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it."— G.K. Chesterton
Chesterton’s context, politics in Great Britain of the 1920s, is, of course, quite different from a software development shop almost 100 years later, but the message is still extremely appropriate: Before you go tearing things down or otherwise changing something you’ve found, you really need to understand not only what you’re changing, but why it was made that way in the first place.
In the case of this REST call, we should ask questions like
Are there system load concerns, such as memory or processing time?
Are there concerns about the on-the-wire response size?
Was there an explicit Product Management decision to set the limit this low for business reasons we don’t see reflected in the code?
And so on. Until we can answer those questions (or reasonably rule them out as irrelevant), we need to be very hesitant in making the change. Once we’ve explained the original developer(s) built that fence, then we can talk about ripping it down.
From Awestruct to JBake
For some time now, I have been using awestruct to power my blog, and, for the most part, I’ve been happy. However, I have found, especially on the Mac, the Ruby-based environment more difficult to setup than I would like. While I have solved this problem before, it presented itself once again when I was issued a Mac upon joining NetSuite. I can, of course, muddle through it, but I’m tired of fighting it, so I started looking around for an alternative and found JBake.
To all of my readers, I wish you all a very Merry Christmas. My hope, as always, is that even in the busyness and the hustle of the Christmas season, you will find the peace and joy of God brought to us so many years ago in the birth of the Christ child.
So long, and thanks for all the fish
As so many of my friends and peers have done before me, it’s time to use that admittedly overplayed Douglas Adams quote and announce my departure from Oracle.
I joined Sun Microsystems in July of 2008 as a member of the GlassFish team, working primarily on the Administration Console. Over time, I would add REST to my work load, which has been my primary responsibility for the past few years.
I’ve had the opportunity and honor to work with some very smart and talented people over the last six years. I’ve learned a lot from them, and made some great friends. While it’s nothing as drastic as the destruction of the Earth to make way for an intergalactic highway, the time has come, though, to bid farewell to those friends and the job that’s offered me so much opportunity and growth and move on to a new venture and more great opportunities and chances to learn and grow.
It’s been a pleasure.
As is my custom, I want to thank all of my readers, especially those who have joined the discussion, and wish you all a merry Christmas. In all the hustle of the season, it is my hope and prayer that the joy and peace brought to us in the person of Jesus Christ will be an ever-present blessing in your lives.
What’s the Deal With Containerless Frameworks?
I’ve been spending some time with the Play Framework recently, and one of my first questions was, "Can I deploy this to an app server?", to which the answer is "No. Play is its own container". That (to be honest) somewhat disappointing answer reminded me of some discussions I recenlty saw but mostly ignored about "containerless frameworks". I’m afraid I’m going to have to let my dumb hang out (as my dad used to love to say) and confess that I guess I don’t get it. :)
Last summer, I put up a quick entry about a new way to blog, which I’ve enjoyed using. After suffering through yet another Wordpress security breach (which I’ll admit might be partly my fault through how I have my site set up and "maintained"), I’ve decided to take the next logical step and just move the whole thing to Awestruct. Overall, it’s been an enjoyable process, but it has certainly had it’s bumps and bruises. Luckily, Dan Allen, Aslak Knutsen, Jason Porter, and Bob McWhirter have been kind and patient with me. :P
I’ll have more to say in the coming days about with it took, what I’ve learned, etc., but I wanted to post a quick note letting both of my readers know about the change. You should find the site faster, as it’s all static now, and much smaller (e.g., 16KB vs 47KB for the front page). Should you notice any issues, please let me know, as I still have a bit of cleaning up to do (e.g., images in older posts, implementing comments, etc). For now, though, enjoy the site. :)
A New Way to Blog
On the Sunday before the recent JAX conference in San Francisco, I was privileged to attend the Speakers' Summit with many of the other speakers for that week. There was a lot of really good discussions, but the biggest thing I took away from it, or at least the most practical, came from Dan Allen’s lightning talk on documentation and removing the pain. That five minute talk stands a good chance of changing the way I write.
Adding SCM Branch Information to Your Prompt
UPDATE: I’ve modified the scripts and prompt settings to be a bit more intelligent
Today, a coworker sent me a link to an old blog post about adding git and svn branch information to your prompt. As awesome and helpful as that was, my first thought was, "What about hg support?" followed quickly, if not somewhat embarrassingly, by, "What about CVS support?" Thinking it would be quicker (and more fun) to hack than to google, I added both. The end result is this:
Setting Up a New Web Site on DreamHost
As a "computer guy," I get asked to help with all things computer-related. My church’s web site is no different. I was recently asked to help set up a new site. Since my time is limited and they need to get things going without waiting on me, I thought I would document my process for them, simple as it is. It occurred to me that it might be generally useful, so here it is. If I was wrong about that, please feel free to keep surfing. :)
My Thoughts on AT&T U-verse
In a recent discussion, the fact that I have AT&T U-verse came up. I was asked what my thoughts on it are, and I promised a blog about it. This entry is the somewhat belated fulfillment of the promise.
First off, for those that don’t know, U-verse is, as best as I can tell, their answer to cable television. With the full package, which we have, you get a digital phone line, digital television, and high-speed internet all over fiber. Since the cable companies are offering telephone, it seems the phone companies are now offering television, with everyone in on this internet thing. For the impatient, the punch line here is that it’s a nice, but not perfect, offering. Let’s jump into the details.
I've made the plunge
I may have made a mistake, but I’ve joined 2007 and hopped on twitter. You can follow me here, or view my latest updates in the sidebar.
Not So Late Breaking News
I’ve been meaning to say something about this for while, now, but I have been a bit busy, and was finally beaten to the punch by Alexis Moussine-Pouchkine over at The Aquarium. Before I go any further, go read Alexis' article, paying particular attention to the "real #1 winner" link. Go ahead. I’ll wait…
The Means Stultify the End
From time to time, someone, trying to cut through all the hype and spin, will attempt some sort of statistical analysis to determine which web framework is "winning." The results are almost always disappointing, and not because I don’t agree with the outcome, but because the methodology is so flawed. The most recent attempt I’ve discovered, noble as it is, is no different.
Rich Web Experience, Day 3
The third and final day of the Rich Web Experience has come and gone. Today’s schedule is a bit lighter, with two morning sessions, a keynote at lunch, and workshops in the afternoon, leaving us finished (and done with the conference : ) just before dinner. To be honest, I was a bit distracted this morning, as the Sooners were busy shellacking Miami. Though I couldn’t watch it on TV, I did have cbsportsline.com open so I could see live stats.
imgtag. He is a very eloquent and entertaining speaker, and, for me at least, very effective.
Next up, I sat in on Joe Walker’s talk on DWR. Since I’ve used DWR quite a bit, there was a fair amount of review, but Joe’s section on Reverse Ajax was new to me, and really, really cool. Joe’s passion and acumen certainly shone not only in this session, but in his participation on the expert panel.
After lunch and a keynote by Eric Miller, it was off to a performance workshop with a couple of people from the Yahoo! Exceptional Performance team. Steve Souders and Tenni Theurer discussed various ways to increase web site performance (including pipelining, using sprites, and locating CSS and JS imports strategically), the YSlow Firebug plugin, and then walked through the rules that YSlow helps a page author enforce.
As much as I enjoyed the conference, I’d have to say I’m glad it’s over. The NFJS team crammed so much into this weekend that I don’t think I could have taken much more. Apparently, even though my wife wonders some times, I actually do have a threshold for that kind of thing, and the RWE got dangerously close to finding it. It was a great conference, though, and I highly recommend it. Next year, they’re going to try to do one "on each coast" with the plans being one in San Jose again, and the other, tentatively, in Atlanta. It’s definitely worth the money, and I’m not just saying that because I won an iPhone. :)
Rich Web Experience, Day 2
Day two of RWE turned out to be as good as the first. I started the day with two back-to-back talks on the Google Web Toolkit given by David Geary. Just as entertaining and informative as his JSF talks from yesterday. He describes GWT as (roughly) "the coolest piece of software I have ever seen" and it is pretty cool. I’m still not sold on it, though, largely for the same reason I don’t like some other Java web frameworks: I don’t think Java code is the best way to express a UI; I much prefer a domain specific language for that. Having said that, though, what GWT is offers is cool enough that I might just have to play with it some.
The keynote at lunch was given by Jesse James Garrett, discussing "Beyond Ajax." What I took away from it is the call to look beyond Ajax and really think through the problem at hand. Ajax treats a symptom in user interfaces. He encouraged us to look beyond band-aids (my word, not his) like Ajax and really figure out how to solve the user’s problems. He pointed to the iPod as an example: it has fewer features and was more expensive than the competition, but it works the way users want/need it to, so it dominates the market. Really good keynote.
I spent the afternoon in a couple of less practical (for me) sessions, JavaFX and the Yahoo! User Interface. I’ve used both, though the latter more than the former, so the talks, it turns out, weren’t of much value to me. I knew that might be the case, but I wanted to see if I might pick up something new on either technology. I didn’t, but that’s OK. They were both pretty good talks, and I enjoyed myself. :)
The expert panel after dinner was good, though depressing, spending a great deal of time on how awful web security is, and how almost hopeless the situation is with regard to fixing. It’s not completely without hope, the experts noted, but pretty close.
I got to eat dinner with Chris Schalk, formerly of Oracle and now with Google and author of my current favorite JSF book (you should all go out and buy two copies. No, I don’t get a commission, but that’s not for lack of trying :). We got to get caught up on what he’s been doing, and talked a bit about what he’d like to see Google do in terms of its developer community. There should be some interesting things coming out of Google soon. For the record, I asked about the rumored GPhone, and got the "I can neither confirm nor deny" response. Google must train all their people on that. :P Speaking of the GPhone…
To cap the night off, during the prize raffle section, I didn’t happen to win the 24" iMac, but I got the next best thing there: an 8GB iPhone! The timing works out really well, as I really wanted one, and my other phone happened to have died Tuesday of this week. To use it, I have to switch to AT&T, but I’ve been wanting to ditch my current carrier anyway, so this is a great excuse.
- Rich Web Experience, Day 1
JUGs Offer More Than Free Pizza
As regular readers likely know, I am currently serving as the president of the Oklahoma City Java Users Group. One of the things we’ve really been focusing on is getting the word out about our JUG, hoping to increase not only attendance, but the size of our speaker pool as well. Since we’ve really started pushing this effort, I’ve done a fair amount of thinking about JUGs in general and have come to reinforce an idea I’ve long held: good JUGs are more than just a once-a-month meeting. They offer several very practical benefits to both [employees] and [employers].
A Quick Administrative Note
I recently made a change that I should probably note here: In mid-May, I left my employer of the past 2+ years, IEC, to join Objectstream as a Software Architect, and for whom I will be working at the FAA’s Mike Monroney Aernoautical Center here in Oklahoma City. While I’m very excited about this opportunity (and have enjoyed the past few weeks), it was not an easy decision to leave IEC, as it’s a really great place to work. IEC (and my boss, Mitch, in particular) gave me a degree of freedom in terms of technology that I’ve not had anywhere else. I was able to try a lot of bleeding edge technologies and do some really neat stuff with some really sharp people. Much of what you may have read here came from my experiences at IEC.
Some of you may have noticed an extended outage of this site for most of last week. It appears that my provider was having NFS issues which, to my knowledge, are ongoing. They told me they were watching my server hoping it would stabilize, all the while all I wanted was a functional site. I finally got them to move me to another server, and things appear to be back to normal. So, dear reader, I apologize for any inconvenience that might have caused either of you. :) Believe me, no one was more irritated than I. :)
My general rule is that I avoid too much personal stuff here. I have other venues for those interested in that kind of thing, but it would be remiss of me if I did not take the time to wish a merry Christmas to those that read this blog. I truly hope your Christmas season was (and continues to be) a happy one, spent with family and friends. More importantly than that, though, I sincerely hope each of you will take a good, honest look at the historical reason for Christmas. Beyond the gifts and meals and parties, Christmas celebrates the birth of a Child, Jesus of Nazareth, the Savior of the world. My hope and prayer is that you will find, if you have not already, the Light of Christ, as I did so many years ago.
Thanks for indulging me this personal note, and here’s hoping for a great and exciting 2007!
The Front Porch Test
Everyone knows that one of the most important things a software project is a good name, but coming up with a good name is not easy. To help with the process, we apply what my boss, Mitch, refers to as the front porch test, which is actually a rule of thumb from the pet world. It goes like this:
When picking a name for a dog, imagine yourself standing on the front porch yelling the dog’s name out into the neighborhood. If you think you’d feel like an idiot yelling that name, then choose something else.
Replace "dog" with "program" and you should get the idea.