Writing Software in a Feedlot

A little story: I’m from West Texas where cattle ranching is big. In communities around the Panhandle, there are feedlots where cattle go to spend the last 3-6 months of their lives before becoming steak. Feedlots can hold a lot of cattle. As you can imagine, the air quality around feedlots is pungent, to put it mildly. When the wind is blowing the right way, you can smell Hereford in Amarillo, 60 miles away. All that methane is a byproduct of the feedlot, one that the people living near the feedlot would gladly give up especially if they could still get steak.

Funny thing is, people who work on a feedlot don’t notice the smell, at least after they’ve been living there a little while. Like any constant stimulus, our body eventually can tune it out.

What does this have to do with writing software? Like the methane from a feedlot, lots of companies seem to view the software they produce as a byproduct. Typically the leaders of these companies, like the people around a feedlot, would love to get rid of software development if it meant they could still make money. These people tend to want to buy as much software off the shelf as possible, even if it’s not a very good fit. They want business analysts to be able to set up complicated custom solutions using some sort of drag and drop IDE that never seems to quite live up to its promise. In the end, they wish the company didn’t have to produce software to make money.

When software companies are run like this, you get an IT department that is mediocre at best with low morale and zero initiative to improve the process of writing software. Talented software developers go somewhere they are appreciated, where their talents can be used to solve actual problems. When software is seen as a byproduct as opposed to an actual result, there’s no real difference between developers since whatever comes out will be the same. Everyone’s shit stinks, as it were.

A company that treats software developers like cows in a feedlot will always function at the level of the lowest common denominator. The company may not fail, but it will never really succeed either. I recently left a company like that. I don’t think it will fail. I just don’t think they’ll ever succeed.

Day 3

I’m finding that I lack the ability to concentrate for long periods of time. I think concentration is a habit, one you can fall out of and working at BillMatrix for 7 years on top of my already bad habit of being distracted by shiny, jangly things has put a serious hurt on my ability to do one thing for a long period of time, especially if it is something I’m uncomfortable with.

Today has not been nearly as productive as yesterday. I started on a web site to catalog Texas historical markers today which has been a pet project on the back burner for a long time. I got a small framework for it but I immediately realized that I am a horrid graphic artist/web designer. I have been struggling most of the afternoon with CSS. My struggles are an equal amount of having zero experience with CSS and the aforementioned lack of concentration. I spent little to no time getting more familiar with Pylons instead finding myself constantly bogged down by the layout of the website. I’m pretty sure I’ll eventually get it to where it’s not ass-ugly but it’s certainly never going to be pretty.

I remember being in college many moons ago and difficult things (like calculus) always caused me to go to the golf course. That’s a habit I have to break if I’m ever going to get better at these things I don’t know. I can’t afford to take 3 weeks to learn Pylons. Whenever I’m writing code, if I have a pretty good idea of what I want to do, I can work for extended periods of time. But when it’s all a constant struggle, I’m easily distracted by whatever happens to be distracting at the time.

My goal tomorrow is to forget about how ugly the layout is right now and work hard on the plumbing of the site. By making good progress there, I can always chicken out and pay someone else to do the design.

Day 2

So my plan is to document however long this little no having a job experiment goes on. My apologies for 95% of my readers who are non-technical but most of these little daily summaries will be focused on my learning process. I’m setting the clock as of yesterday since the first two days of the experiment last week were more mop-up type days, getting little items out of the way of the experiment. I didn’t document yesterday with anything more than my previous post. I’m sure you can understand why.

So Day 2 has been infinitely better than yesterday. I spent 4 hours this morning working on a little consulting gig I’ve got going on the side. It’s a .Net project and I’m building a very rudimentary email system for the client that sends out newsletters occasionally to the users. Sending automatic emails turns out to be harder than you might expect given all the possible email clients and whatnot, thought the .Net framework makes it at least doable (thank you AlternateView!). That’s not really very sexy work so plan to do it in the mornings while I’m still relatively fresh and motivated.

This afternoon wasn’t nearly as productive as the morning. The events of yesterday weighed heavily on my ability to concentrate and I didn’t really dive into much until after 4. Once I managed to do that, I started working through the QuickWiki tutorial for Pylons. Pylons is a framework for writing Python web pages and is very similar as best I can tell to the Rails framework for Ruby. I choose Pylons over Rails because I “know” Python whereas I would have to learn both Ruby and Rails to be at all productive there.

I finished up the tutorial and I have to say, I’m pretty happy with how easy it is to work with Pylons. There is a ton of stuff going on but it just feels so much more sane than ASP.Net development. In the last few weeks at my previous employer, I was working on rewriting a web site in ASP.net 2.0 to use a MVC pattern and it’s just not very easy in ASP.Net. With Pylons, it’s a piece of cake. My plan is to revisit the tutorial in the morning first thing and get more comfortable with the framework pieces I’ve encountered. Once that modest goal is complete, I’m begin work on a couple of pet projects that I’ve been putting off for quite awhile.

I feel some pressure to make up for lost time but I also know that I’ve got some serious learning to do. I’m looking forward to the next few days.

A Dive Into The Abyss

So, as it turns out, my bitching about my self-review was unnecessary. Monday, October 22nd, I quit my job. I actually almost did it the Friday before but wanted to make sure I wasn’t making a rash decision (as if detesting each minute you spent at work for the past 4 months could ever be considered rash). My ex-company typically takes your two week notice and then walks you out the door as a security precaution while still paying you for that two weeks. However, because I had been employed there for well over 7 years, they kept me around both to pick my brain for two straight days and to give me the chance to leave on my own terms.

So, my last day was this past Wednesday. I don’t have a job, don’t have plans for getting a job soon and couldn’t be happier with that decision right now. Yesterday was hangover recovery day from the last day party after work and today I’ve just been running errands and working in the yard. Starting Monday, I’m going to begin work on some projects here at home, getting my coding chops back into place and learning some new technologies.

The plan right now is to take 6-12 weeks off and see what I can develop at home. If it doesn’t work out, I’ll find a job in December-ish. I’m thinking about starting up a blog just for chronicling my journey but not sure if I really need ANOTHER blog. In the meantime, I’ll post updates here semi-frequently about the journey.

Functional Programming Comparison

Seemingly late to the prom, Microsoft is adding lambda expressions to C# 3.0. For those of you unfamiliar with lambda expressions, they are basically just syntactic sugar for creating anonymous functions that you can pass around. Functional languages like Lisp and to a lesser degree, Python, have had them from day 1. In these languages, functions are treated as first class members, not bastard step-children of the language.

Anonymous functions are useful for a variety of reasons that Joel summarizes nicely.

Let’s compare how lambda expressions are done in C# 2.0 (anonymous methods), in C# 3.0 (lambda expressions) and Python.

In 2.0, an anonymous method would look like this:
Func f1 = delegate(int i){return i + 1;}

Note the delegate key word as well as the typing of the function done by “Func” which basically says I’m declaring a function with an integer parameter of int and a return of int. You could then call f1 like this: int a = f1(1) and get 2.

In 3.0, it’s similar though much easier on the eye:
Func f1 =i=>i+1;

Much simpler, lost the delegate keyword and considerably easier to grok. Still though, because we’re dealing with a statically typed language, you have to jump through some serious hoops, i.e. the “Func” typing.

In Python, we get this: f1 = lambda i: i + 1

Mmm, that’s much easier to understand. You have one keyword, lambda and away you go. The lack of typing makes this faster to write as well as easier to understand. The more I branch out into alternative languages, the more I wonder what benefit we get from statically typed languages like C# over a dynamically typed language like Python. Obviously, you get some benefit by having the compiler pick up typing errors but is that a big enough benefit to offset the gains in productivity you get from a dynamically typed language? I kind of doubt it but I’d be interested in studies about it.

Understand, dynamically typed does not mean “not-strongly typed”. Python still has typing, it’s just done at run time. So your tests are going to catch 80-90% of the issues commonly related to “no typing”.

Deborah Kerr, RIP

Deborah Kerr has died. One of my all-time favorite romances is “An Affair to Remember” and I thought she was wonderful in that. She’s probably best known for that steamy kiss with Burt Lancaster in “From Here To Eternity”.

The NY Times obit linked above has all the other pertinent details. I’m a little sad she’s gone.

Who Knew

Did you know Ravel wrote a concerto for the left hand? Me neither though I guess I should have, given how farking hot Bo Derek was in Bolero. He probably needed to blow off some serious steam.

But more seriously, I can totally see maybe a tone poem called “It really does feel like someone else” or maybe even a waltz called “Badgering the Witness in the Ballroom” but seriously, a Concerto entirely for the Left hand? Wow, that Ravel must really have been a master player of epic proportions.

It’s the Most Wonderful Time, Of the Year

Does that little jingle make you think Christmas? Well stop it, it’s not what I’m talking about. Halloween neither even though it’s a great little holiday. No, I’m talking about review time. That time during the year when the review fairy comes down from on high where she’s been hanging out with Jesus and John Lennon and other people too cool to talk to you and brings her magnanimous 2.76% raises to bestow on all the little people, if they were good this year.

Like Santa, the review fairy has ways to know whether you’ve been naughty or nice. One of the ways is called “The Self Review”. It sounds important but really all it is is a way to take your balls and put them in a vice and give you the opportunity to tighten the screws. See, I told you she was magnanimous. Three things can happen with self-reviews and like throwing a pass in the NFL, two of them are bad. Those two things are you’re honest and you tell your overlords about all the internet you surf at work which then results in you getting a bad review or you totally oversell yourself and the overlords figure that you’re a self-promoting prick with an agenda.

In the end, it shouldn’t be my damn job to review myself. They are bloody well paying my boss to know what I do every day (trust me, he drops by enough that he should). The Self Review is a ridiculous piece of HR double-speak so that the Man can find new ways to screw you. In theory, it sounds like a great plan but like just like socialism, that never works out when you give the keys to the castle to the idiots.

On my Self Review this year, there are 4 places to review yourself plus the option to upload a document. What kind of ass-kiss has time in the day to write another completely separate document about his strengths and weakness and upload it into the system? Anyway, the four areas of review are “Accomplishment Summary”, “Key Strengths”, “Development Needs and Plans”, and “Job/Career Interests”. Each of these areas have little help buttons that you can click to explain them in more detail, you know just in case “Accomplishment Summary” wasn’t clear enough. For example, that one has the following detail: “Summarize your accomplishments in the past year, including misses. (No more than 10)” I think I’ll write “I’ve never had 10 misses in one year, not even in college and now that I’m married, the chances of that ever happening have dwindled.” Wonder if the review fairy would like that.

Key Strengths helps with “Describe your strengths and how they have changed in the past year. (3 to 5)”. I think I may Bart this one and do “I AM NOT AN FDIC INSURED ESTABLISHMENT” 5 times. Or maybe I talk about how at the beginning of the year I could only bench 185 but now I can do 210. Or maybe do a discourse on the differences in the Islay malts. That one would probably get me an extra .04 tacked on to that raise.

Development Needs and Plans helps with “Identify the most critical needs and responsive action plans. Describe opportunities to broaden/expand current job. (2 to 3)”. Um, the most critical needs are a quiet place to work and not having to buy my own extra monitor, video card and copy of Resharper. I have no idea what a critical responsive action plan is but if I figure it out, I’ll put it in here. In reality, isn’t “responsive action plan” an oxymoron? By definition, shouldn’t an action plan be about proactive behavior and not responsive behavior? Isn’t a little “horses have left the barn” to come up with an action plan to respond to things that already happened?

Overall, the self review is good for one thing and that’s being the punch line of a Dilbert strip. I have until November 10th to do it and I’m going to put it off as long as possible so that I keep my options open on exactly how to fill it out.

God Tells Baptists Dancing Is Off-Limits but Pissing On Bar OK

Apparently, an assistant football coach at Baylor was caught Saturday night taking a leak on the bar at a local pub. Yup, you read that right, on the bar. The coach had been drinking the hard stuff for a little while and “apparently thought no one was watching him”. To which I say, this is why Baptists will never make much of themselves. Us Methodists will piss on the bar, people watching or not.

Of course, if I was the coach of a team that just got beat 58-10, I’d probably be up for some non-normal behavior myself.