I tend binary zen gardens.
Read this. Don’t skim, read the whole thing. Then come back here. I have a thought that I wish to express here and it may be controversial to some. You’ve been warned.
The issue in this cashto’s blog entry hovers mostly around platform and language. Simply put, unit testing is the art of testing small units of code. In Test Driven Development you do not write new code until you’ve written a test that clearly articulates your intent. You essentially use the code that you plan to implement via a test and only then write the implementation behind the api that you’ve just crafted. That process has a side effect, commonly referred to as “Emergent Design”. One commonly documented side effect of Emergent Design is that it encourages highly modular, de-coupled sections of code that have high cohesion and low coupling. In some circles, these are indications of a healthy code base.
Now, having spent a great deal of time in C# and about a year doing Ruby professionally, I can say that the approach that I prefer to take, BDD, is significantly more complex in a static language on a proprietary platform than when writing similar software in a dynamic language on an open platform. Therein lies the difference. When I read articles like this, I see them almost universally from the static language camp. By camp, I mean to imply that these are folks that have chosen to work in static typed languages on open and closed platforms. The bemoan the time it takes to craft tests, ponder their significance and after some frustrating exploration chalk it up to another fad but ivory tower academics. The problem with this assumption is that these techniques are solving big problems for folks like me who, in a dynamic language, needs a little more coverage to ensure that the expectations I’ve defined for the system are being met. Unit testing provides this. If I were interoperating with SharePoint’s object model (and I have… extensively) then I would not worry about unit testing. Why? Because the effort that it takes to isolate the units provides diminishing returns against how I will write it. So, if you want to skip it there… I’m not gonna hold it against you. BUT, if you write a Ruby gem that I plan to use and I install it and run the tests and there are no tests then you’re not playing nice and I WILL hold it against you.
Yes, my expectations for cultures and communities is slightly different. That’s me. that’s my experience. How about an analogy? In static languages, I believe that Dependency Injection is a valid and powerful pattern. In Dynamic languages it’s a waste of time that provides no value. Does that mean that DI is bad because I prefer a dynamic language? No, of course not. It only means, given my circumstances, DI is worthless. Is DI worthless? no. Make sense? Yes. Sound overly politically correct? Yes.
This is all to provide the following context: The blog above was written by a man who works for Microsoft on Microsoft products. Given their slow uptake for developer testing support and de-emphasis on unit testing and TDD(ing) .NET projects. That’s the experience that has shaped cashto’s reality and you should know that when you read that article. It’s no wonder, to me, that when developers look to gain from the experiences of developers outside their home platform they grow frustrated and no amount of practice ever seems to make the problem go away. The reason is not that they don’t understand or haven’t tried the idioms they see rather that culturally, it is not valued in the same way that watching the compiler fail is, or in the case of ASP.NET, the same way pressing F5 and getting a mini browser REPL going is.
When I worked, briefly, at Telligent their code base was written using that “Microsoft” model. I often tried, sophomorically, to get the entire team to see the benefits of testing, because I was needed it in my own workflow. As the other developers either sided with me or against me I noticed how smart people with lots of experience can simple never come to an agreement. If I wasn’t laid off, then it was clear to me that we were probably never going to be a match made in heaven. That’s not a slight on Telligent, they were a great employer and I got to work with some very highly respected developers in the Microsoft domain. It simply proved to me, that I didn’t belong there. So, I joined EdgeCase. Suddenly I’m not fighting anymore. I’m not arguing. I’m back to the business of writing software and not fighting ideological battles and writing “memos”.
So, is it “Ok not to write unit tests”? Sure, of course it is! If you wish to do so, it’s quite alright. The chances are, though, you will find it difficult to relate to and work with an increasing number of talented software craftspeople who believe in automated testing as a fundamental aspect of their workflow and that would be the real shame.
Hey, if you would like to follow along today during my 1:00 talk please feel free. If you missed it, here are the slides, I’ll publish the code samples some other time.
Twitter has done more harm to my emotional state than it has ever done good. The good is that for people that I really enjoy communicating with I get insight into their lives and what they are into. Twitter was a place that helped me find EdgeCase and for that I’m grateful but one good thing and n+1 arguments, well, it’s not balance.
The bad part is that sometimes you do not want a direct line into someone’s inner most thoughts, including my own. People sometimes get quite hostile when you’re not agreeing with them and they often think that an alternative opinion is ALWAYS a request for debate. Sometimes it’s not. Sometimes it’s just view from an alternative perspective. Not a excuse for a 140 character lecture.
Anyway, the signal to noise ratio on twitter has led me to the point of truly diminishing return with the service and I’ve deleted my account. Who know, perhaps this will get me back into blogging… probably not too heavy though.
The point of this post is that while I had fun, everything ends and for me Twitter ends today.
If there is such a thing as over exposure, then I’m experiencing it at the moment. So, please try to bear with me and I’ll do my best to keep from jumping the shark. For those interested here’s a list of some shows that feature me. Also, a few notices of where I’ll be speaking in the near future, please drop by and let’s chat! :)
David Giard’s Technology and Friends - Leon Gersing on Ruby We had a great time taping this during DevLink!
Dot Net Rocks #476 - Is Software Too Complex? I’m not featured but do speak from the audience… which lead to:
Dot Net Rocks #482 - Leon has a love affair with Ruby! - That’s me talking about using language as the right abstraction.
Deep Fried Bytes #36 - What happens in the speaker room is supposed to stay in the speaker room - What started as a group session for my burnout has become a podcast! Make sure you listen through the credits for some great outtakes!
UPCOMING DATES -
Tuesday 9/22 - Quick Solutions Suite in Polaris - Cucumber 11:30 AM - This lunch and learn goes over the basics of BDD and using Cucumber as a tool to bridge the gap between technology and business.
Wednesday 9/23 - Software Engineering 101 - Introduction to OOP using C# and TDD hands on - in the first session we’ll cover the basics of OOP and how those are applied to C#. In the TDD session in the afternoon we’ll be building a small game together using the TDD method. Bring a laptop and courage!
10/15 - Louisville .net user group - Cucumber talk from above
10/17 - ASP.NET MVC firestarter - JQuery 101 - what it is, what it does and how to use it. In this session we’re going to talk about jquery from bottom to top.
That’s it for now! Come say hi!
It’s difficult in the U.S. to really understand value. The value of a hard day’s work. The value of a hug. The value of trust. The value of the qualitative. When commoners in the middle to lower classes in America debate politics they do so in an aimless, impotent fashion that allows them to build fortresses of self perpetuating plausible deniability. Instead of understanding issues fully, contemplating the nuance and subtly of an issue, many resort to scripted straw man rhetoric recycled from the “news”. I use “news” in quotes because in a for-profit market even the news is bought and paid for. The information is presented in the same way it is regurgitated and our collective ability to think critically and creatively suffers.
When I think back to my youth I think back to my parents talking of times of social change and solidarity. They were hippies by their own admission but it’s clear to me that my mother more than my father held to their ideals. It’s possible, I assume, that he was just trying to get laid (successfully, if you count me and my brother) but I digress.
The health care debate rages on in Washington DC but just like the last 6 elections in this country the debates and arguments are semantic bordering on dogmatic. Representatives are not listening to their constituents because they don’t need to. The changes proposed feed a for-profit medical system at the expense of the very constituency it’s trying to help.
Single Payer is not on the table and Obama’s solution is a government run insurance plan. Wait… what? you mean, it’s more of the same I just pay for it via my taxes instead of the tax I’m essentially paying by being employed? Who does that help? How does that help? It seems to benefit only one class of people in the equation: insurance companies. By introducing a public insurance company cost of frequently covered procedures will drop, same with some medications and they will see themselves getting paid due to the lower prices. They’ll complain at first because they have to wait 2 years instead of 2 months to buy that island in the South Pacific but they’ll get over it when the number of delinquent accounts is dramatically lower.
Which brings me around to my point. Value is not only calculated in monetary terms; even in a capitalist society like ours in the US. It can be calculated there but other factors must be considered as well. For instance, as some point we decided that having our neighbor’s homes burn to the ground when someone could have done something about it killed the private Fire Brigade system we had the US. We agreed, collectively, that since we have to pay for it anyway, we might as well make Fire a government run program. It’s locally run and funded and works really well. Is it better than a private only fire system? I suppose that debatable but it’s certainly easier to understand and benefit from. We value that service in our neighbors and communities and we benefit from it personally when/if we need it. If you don’t think your neighborhood suffers from a burnt lot, you’ve never lived near one.
I don’t know if single payer is the best solution to the problem but I do know that a healthy society that can go to the doctor without fear of losing everything they’ve ever worked for in their lives is more valuable to me than the executives lining their pockets at the expense of my friends and family. I already pay a high premium to insure my family (and it doesn’t cover everything) and if that same money could be used to equally care of my neighbors I’d gladly continue to pay it. If it meant that I never have to spend a day requesting medication that my doctor has prescribed can actually be given to me then that is worth more than any amount of money I can dream of.
The value of my neighbors’ health; the value of my community is in actively participating in its success not becoming a profiteer in its inevitable hardships.
In my opinion, and this is simply my opinion, it’s incumbent upon us to care for each other. To value life and freedom over profits. Money is not everything, it’s not even half of everything. The minute we remember that a friendship and health are more important than the bill for those things is the minute we know exactly what adds value.
UPDATE: for the record, I’m not saying Single Payer is without fault or that it’s even the best solution. I’m just saying there’s got to be a way to care for people without compromising on the quality of that care. I simply do not believe the for-profit medical system works to that end. The details for that I leave in the hands of politicians. I’m just trying to put my thoughts down so I do not have to repeat them in public over and over again. :)
Look, I’m no pundit. I’m just a developer trying to do right by the world. When giant corporate entities start pissing all over one another I could usually care less. The PC vs Mac debate, for instance, is something I never really cared about. I don’t prefer the Windows OS. I prefer OS X. That’s a preference not a condemnation of Windows. I develop on/for windows machines, happily.
So, when I noticed that Google has filed with the FCC because Apple has rejected their app due to competitive issues I have to side with Google. Mostly because I believe if you have a marketplace to sell apps you should be given a choice in apps. I mean, I loathe the Apple iPhone Mail application. I HATE it. I would love to see a great alternative but that’s probably not going to happen anytime soon because Apple will reject the app before anyone gets the chance to choose an alternative. I’m sure most people love it, and that’s great but limiting my choice so you can lock folks into your idea of a good app is pretty lame.
But Google vs Apple… I don’t really care. They make enough money to make Solomon blush so what the hell do I care. The truth is that Apple wants you to use their shitty phone service because of ATT. Google wants to funnel your calling through it’s Google Voice app to provide Google Voice customers a seamless experience. Either way I’m making phone calls and ATT and Apple both benefit by my using the phone even if it goes through the Google Voice proxy. But they want to have a “bottom-line-fight” to ensure that their projections are accurate and revenue streams do not dry up due to… dare I say… competition.
All of that will be fought in courts and we’ll hear of it second hand and yawn. I’ve made a financial commitment to Apple’s iPhone platform (for 12 months that is) and during that time, I don’t care.
What I DO care about is this gem which is about how Apple then went after 3rd party developers looking to provide a bridge to the Google Voice service in the form of a native app on the iPhone. Apple, unceremoniously, pulled all GVoice apps from the store and placed the onus back onto the developers to communicate the change to their customers. The essentially removed a product from the public market without notice, making the developers look bad and ensuring a horrible customer service experience from the folks that purchased apps in earnest.
Not only is this poor form but it’s monopolization reminiscent of IE 6 on Windows. When that was the default browser and it couldn’t be uninstalled from the system and bullied others out of the market. A few law suits from the Europeans and finally we get choice on Windows and less lock in from the vendor. That’s what’s happening on iPhone right now. The suits are doing all the thinking and it’s making life shitty for the people who are constantly paying into the closed iPhone system.
I’m now seriously considering my options for the phone that I’m going to choose in 12 months. If this is how Apple chooses to conduct its business, it’s developers and the community that’s formed around these products then I may have to see what all the buzz is about in Palm Pre or Android’s neck of the woods.
UPDATE: here’s another account of Apple’s Douche nozzlery
Ok, kittens, I’m fixin to get my speak on. Recently, given my move to becoming a professional rubyist, I’ve shifted my speaking to be on topics more relevant to topic that are closer to my heart and closer aligned with my day to day operations and growing expertise. With that and by the grace of my wonderful EdgeCase family I’ve taken a larger step into the Ruby presenting community with 2 upcoming talks. Oh don’t think you Microsofties are rid of my loud mouth either, I’ll be contributing to several .NET talks coming up soon too.
Here it comes…. the list…
erubycon - Testing the Enterprise This session will be about how we brought Ruby testing into Gap Inc Direct. GID has campuses in Columbus, San Francisco and offshore. In addition to the challenges in a distributed environment, training QA resources and developers new to Ruby, Watir, other libraries; we’ll be talking about incremental adoption of Ruby in the Enterprise, and how it enables us to move from a Waterfall SDLC into an Agile model.
We’ll be going over lessons learned, pitfalls and successes. The points of view will be from Charley Baker, who has been responsible for the adoption of Ruby at our San Francisco campus over the past 4 years, and Leon Gersing from EdgeCase, who’s working with our Columbus distribution IT organization as they adopt Agile practices and using Cucumber have bridged the gap between developers, QA and product teams.
devLink - The Ruby Koans The Ruby language has gotten a lot of buzz in the IT industry lately. It is a highly expressive language that comes with great increases in productivity, or so some say. Test Driven Development is a “Best Practice” that has become quite popular for developing rock solid application with reduced debugging time. Ruby and TDD: two great tastes that taste great together. This tutorial will combine TDD and Ruby training in a way to introduce you to the “Ruby Way” through tests. In this tutorial we will introduce you to the Ruby language. We will show you the basics of creating objects, control structures, using meta programming and an extended discussion on blocks and the things that might look a bit odd. You will walk away with a solid understanding of basic areas of ruby, a persistent knowledge base, in the form of a test suite, to take home and build upon, and a hunger to learn more and join the growing community of ruby developers.
So, please, come check it out and say hi! I’ll be the portly fellow with the beard and plaid hat on. :)
New Song Demo- Walk Away
i was there to comfort you to tell you things that were not true like love and how its always here and never goes so don’t you fear
but i really know that forevers they come and go so i hold on tight to letting go because i dont know when this, when this, love will walk away.
i am here to see us fall to see us slide right down the wall i give up and take on something new take on someone who is just like you
It’s Sunday. I’m looking through my RSS feeds enjoying the sun on my face and listening to Dire Straits thinking about an old girlfriend, Brenna, when it hits me. People really have their drawers matted to their ‘taints about the dude, Matt, who did a talk about CouchDB. I’ve come to some conclusions too regarding this event that I’d like to share.
I get it. Some people found it offensive. Some people thought it was fine. Some people used it as a means to expound on social-politics, alienation, of hell, you name it, this presentation brought out something very real in people. Who are you? Who are you “allowed” to be? Where do you draw the line and should you?
The thing I’m still curious about is the over reaction. Cause it really is an over-reaction. This was one dude. One presentation. He wanted to be edgy. He wanted to be funny. He wanted a reaction. He, most likely, wanted to (?:be|feel)+ cool. That’s ok. Either way, everyone’s talking about Matt and I’m sure that’s pretty cool to him. It sure as hell would be cool to me. Everyone listening. Everyone waiting to see what you say next…
Here’s the thing. Matt’s entitled to be whomever he chooses to be. That may prove to be a career limiting move. Certainly that will be the case if he wants to have a public speaking career in this tone. (Although if he’s got some lessons learned following this, this would be a great talk at SXSWi next year… just sayin, Matt.) But it’s his choice.
People fall along a spectrum of behavioral patterns. Some of those are more on the fringe than others. We publicly humiliate or shame them to identify where the line is again (always pushed a little further out than where we started) and go on believing we’re better than the martyr we just… well… you get my hyperbolic, sophomoric point.
In the end, Matt needs to take an improv class. The concept was good but the material was stale and end the end he misread the audience. Geeks are much more into binary jokes, Microsoft digs, and geek chic. Self deprecation would also have been a good choice, like shoot all the pr0n pictures with your Battlestar Galatica action figures. That way, you’re seen as edgy and creative and everyone does that with their starbuck and apollo dolls… I mean, Action Figures. … you see what I did there? Word.
I’m pretty sure that this can’t be a ubiquitous phrase across platforms and doing some searching as revealed that perhaps this is a regionalism that has, for better or worse, infected the .net community. The phrase is “Don’t be a plumber” and it’s meant to say, don’t waste your time building something that someone else may have already built for you.
This is true… to a point. But, if you believe that you can do better than the available tools, or if you have a different idea than what is presented in the world and you have a project in which to dogfood your new “plumbing” then by all means, why in the world wouldn’t you be a plumber? I mean, there were plenty of web stacks out there when DHH created Rails in Ruby does that mean that he should have listened to this sage like “wisdom” and not created Rails? I think not.
A pal and ex-co-worker of mine Nate Kohari, was the epitome of someone who loved to think of alternative ways to crack a nut. He never claimed they were better or worse, just that they were alternatives… alternatives that used paradigms that he enjoyed. Should he “not be a plumber” and use Swing? Wouldn’t we be without the beautiful Ninject without his skill/desire to pave new/old roads. I love that Nate’s a plumber and have always encouraged his intellectual pursuits; after all, I get to benefit from them! :)
I heard this over and over again at Central Ohio Day of .NET. Each time I died a little. If we all wait for someone else to be our plumbers then we’ll inevitably lose out. the plumbers will leave .NET (much as I have…) and you’ll end up with more awesome OSS projects like Lucene.NET… and automated port of the Java version of Lucene. Awesome. Please folks, take wisdom and dogma with a grain of salt and decide for yourself what’s appropriate. And please, please, please, be a plumber from time to time.
I tend to be a gregarious person. I’m ok talking with new people, even those with differing opinions and personalities. I enjoy meeting people. The thing I find discouraging about people’s “outward” personas, especially men but not limited to them, is the objective of fitting in.
The way that many will try to fit in is to belittle those around them. They mistake superiority with friendship. They are feeding into a vicious patriarchy that has existed for hundreds of years. It’s subconscious behavior playing out the sins of our fathers as well as the traumatizing isolation of adolescence which might as well take place in a jungle.
I’ve made a conscious choice now to understand my own behavior and make a choice of inclusion and support. I’m more interested in helping people be their best through encouragement and positivity. Does that mean I’m not up for a little playful banter? Of course not. There is a subtle difference and the difference is usually in the face of the target. You know when you may hurt someone’s feelings. It’s not the same trigger that hurts your feelings or makes you uncomfortable but that’s the art. Learning where the line is.
Men have to be better at relating to one another without resorting the petty power plays and ego maniacal chest thumping. It’s ok to let the bear get his paws around you. :)