My Secret Life as a Spaghetti Coder
home | about | contact | privacy statement | getting started with cfrails
When people talk about keeping communication concise and to the point, they aren't insisting you write as if you were code-golfing. After all, Vg'f abg sha gelvat gb haeniry fbzrguvat gung ybbxf yvxr frperg pbqr. More...

Hey! Why don't you make your life easier and subscribe to the full post or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!



To market yourself effectively, and thus, improve your career prospects, you need to know how to communicate effectively. It's not just that communication "gets the word out" about you - it has value in and of itself.

At the risk of this becoming a regular feature here on Fridays, Raganwald covered the same topic as the chapter from MJWTI that I'm covering this week. (This also happened a few weeks ago, when we discussed not overcommitting yourself). More...


When I was younger I was "an arrogant know-it-all prick" at one point in the "middle years" of my programming experience, as many of you know from the stories I often relate on this weblog.

The phrase "middle years" doesn't give us a frame of reference for my age though. For instance, if I were 50 years old right now, my "middle years" of programming may have been when I was in my thirties. That's not the case, and I want to give you that frame of reference: I'm 28 at the time of this writing. The middle years as I talked about them would have referred to my late teens to early twenties. Maybe even up to the the middle of my twenties. More...


It's comfortable to play the idealist and pretend you don't care what other people think about you. But, that's a game. You can't let yourself believe it. You should care what other people think about you. Perception is reality. Get over it.
Chad Fowler, My Job Went to India (page 121)

Let me put that another way: Perception is reality. Get over it. More...


There are plenty of times when you should just say no, refusing to be pressured into telling people what they want to here. That doesn't mean you don't ever want to commit to anything. You want to avoid being a Jasager, not to avoid being effective.

Planning helps make you effective. I've said it many times - I like to spend a few minutes each evening planning what I'll do the next day. I may get in trouble when I'm in Windows because I've yet to port my time-boxing routine over there, but for the most part, it really helps: I always have a specific direction, and I get to think about it in my dreams. More...


I don't like to have too many microposts on this blog, so I've decided to save them up and start a Programming Quotables series. The idea is that I'll post quotes about programming that have one or more of the following attributes:
  1. I find funny
  2. I find asinine
  3. I find insightfully true
  4. And stand on their own, with little to no comment needed
Here's the fifth in that series. I hope you enjoy them as much as I did: More...


I do say it quite a bit - but this is still something I've got to learn to do more often. Even though I try to say "no" when I know I can't do something, I have still been feeling over-committed lately. So it's time to start saying it more often.

But the fact that I feel over-committed is just a symptom that I'm saying "yes" too often - the real problem is that I'm lying to whomever I'm making promises that I can't keep. In this week's chapter from My Job Went To India, Chad Fowler sums it up: More...


We're all going to fail at some point. I've failed, you've failed. We'll both do it again. And who cares anyway? It's a good thing to fail.

Failing is how we learn - if you're not failing, how likely is it that you're doing something new? You probably don't think of it as failure though. But it is - it's just that we prefer to fail early and often with small mistakes, as opposed to late and rarely, with collossal mistakes.

Failure, and how to react properly to it, is the subject of this week's chapter in Chad Fowler's MJWTI.

Chad notes that since failure is a given, "within reason, we don't judge each other on the mistakes we make." Instead, we tend to focus on how we react to that failure.

For me, Chad best summed it up by comparing it to failure in the food service industry: More...


When I work in Windows, I don't get as much done as when I'm in MacOS X.

It's not because MacOS is inherently better than Windows productivity-wise. It's because my calendar and time-boxing mechanism resides on MacOS. So when I've got an entire day of work to do in Windows, I don't have anything telling me "it's time to switch tasks."

Why is that a problem? That's the focus of this week's chapter in MJWTI. (Last week, I took a mini-vacation / early bachelor party to go fishing at Lake Calcasieu in Southwest Louisiana, so I didn't get around to posting then in the Save Your Job series.) More...


I don't remember what I thought the first time saw the title of this chapter ("Learn to Love Maintenance") from My Job Went To India. I felt sick though. The thought process probably went something like this:
Oh no. You mean I'm going to be stuck here so long I better learn to love it?

I've got it really bad - I have to maintain a bunch of the code I wrote. Mere mortals cannot comprehend how bad that is. When do I get to toss my refuse off to some other sorry excuse for a programmer?
Apparently that's a common response programmers have, given the prospect of enjoying an illustrious career as a an elephant dung-slinger. More...


You might not want to hear it, but you can be replaced. Indeed, you should strive to be replaceable - or at least tell yourself you are. That's the subject in this week's advice from My Job Went to India.

This is an eye-opening, scary, yet inspiring chapter - all rolled into one. In it, Chad explains why we should strive to be replaceable parts in the machine (or "a pebble in a bucket of water"), and he mentions the old job insurance via crapcode line: More...


I want to share some words of wisdom with you again that I've shared in the past from notes I took in Dr. Ricardo Vilalta's course on Machine Learning:
  1. If you claim to know something, you will be seen as the expert
  2. Therefore, be honest about what you really know
  3. Be willing to learn and admit your lack of knowledge on certain areas
  4. Don't claim you are superior to others
  5. Don't give in to the pressure of winning over others
This week, I'm diverging from the advice found in My Job Went To India, and offering some advice based on personal experience, with the above caveat. More...


I'm going to keep this week's post about My Job Went To India short, because the two quotes I want to pass on from Chad pretty much sum it up:
You work for a business, and unless you provide some kind of real value, you are a waste of money.
So you need to consider what you cost the company - not just your salary, but include your benefits and anything else as well. Compare that with the value you provide. Are you worth it?

You don't need to just meet your cost - Chad mentions that's like putting all of your savings in a 0% interest account. The value you provide needs to exceed your liability.

To get there, ask yourself about it regularly:
A month would pass and I would think, "What did I deliver this month?" Then, I started getting as granular as weeks an days. "Was I worth it today?"


This week's advice from MJWTI deals with making the "boring" tasks in software development more exciting (in the chapter, "How Good A Job Can I Do Today?")

Chad notes that although "it's rewarding to do a good job and to be appreciated," most time, "we allow ourselves to be extremely selective about where and when we really go out of our way to excel."

So, if the Pareto principle applies here, how can we make the 80% boring work be more like the exciting 20%, and go all out, doing our best?

Chad suggests making it a competition with yourself:
What if you tried to do the boring stuff perfectly?
Or, if you want to get competitive with your teammates,
Turn those boring tasks into a competition with your co-workers. See who can do them better... Keep a scoreboard for the whole team. Compete for bragging rights (or even prizes). At the end of a project, arrange for the winner to have his or her grunt work done by the rest of the team for a whole week.
Would that help? I've already resolved to do the boring work with a smile, but something like that might help the smile not feel forced.

What do you think?


In this chapter (Be Where You're At) of My Job Went to India Chad Fowler warns us to "be ambitious, but don't wear it on your sleeve."

He tells us about his pet peeve as a manager: the "employee who's always aiming for the next rung on the ladder." Aside from the annoyances of playing office politics, complaining "about the incompetence of The Management," and being a general jackass, there's also the way he looks at his daily duties: More...


This week's advice from Chad Fowler's book, My Job Went To India tells us to "remember who you work for" when doing your job.

Chad acknowledges that saying "make sure your goals and your work align with the goals of your business" is an easy task that's hard to accomplish. It's hard because working in IT for a major corporation, it's not always clear what those goals are and how you and your department fit into the overall scheme of things. More...


This morning, Leila asked how I got my groove back:
I think you have a great concept going. I really would like to find out HOW you became passionate about programming? I just graduated with a BS in CIS and am looking for an entry level IT job, HOWEVER I am not a bit excited about computers anymore. Like you I was just planning on continuing my education -get my MBA. But I know an IT job is what I went to school for. HELP! How do I get excited about an IT job when I can't even figure out what title to put on a job search? just degree in CIS?!
I started to comment, but as it became longer, I decided it might benefit others as a standalone post. More...


You feel, look, and do better when you are accomplishing goals and showing progress. That's one reason you'll find it in this week's advice from MJWTI.

The chapter is called "Daily Hit" and in it Chad recommends "setting a goal (daily, weekly, or whatever you're capable of) and tracking this type of accomplishment." Make sure it's known to your manager as well - don't let the underpants gnomes take credit for your success. Also, the shorter the distance between hits the better, since "if you're supposed to produce a hit per day, you can't spend two weeks tracking the perfect task." More...


This is a story about my journey as a programmer, the major highs and lows I've had along the way, and how this post came to be. It's not about how ecstasy made me a better programmer, so I apologize if that's why you came.

In any case, we'll start at the end, jump to the beginning, and move along back to today. It's long, but I hope the read is as rewarding as the write.

A while back, Reg Braithwaite challenged programing bloggers with three posts he'd love to read (and one that he wouldn't). I loved the idea so much that I've been thinking about all my experiences as a programmer off and on for the last several months, trying to find the links between what I learned from certain languages that made me a better programmer in others, and how they made me better overall. That's how this post came to be. More...


At the beginning of this week's chapter from My Job Went To India, Chad Fowler relates a story about Rao, a "mind-reading" programmer who could pick up on the subtleties in conversations and implement code before you realized you had asked for it.

Both when I first read this, and the second time around, alarms went off in my head: "What about YAGNI?" Why would you implement something that wasn't asked for? If you are wrong, you could be relieved of your position for wasting time and money.

Thankfully, Chad addressed my concerns. It turns out, More...


This seems to be becoming a theme here lately: DIFN. That's the advice in MJWTI for this week, although Chad Fowler doesn't put it so bluntly. In the chapter, Chad describes a race where the first team to complete a project over the weekend wins $100 thousand. Could you do it? More...


This week I return to following the advice in Chad's book. It's something I've been doing now for a while: automation.

I'm really big into automation - one of the things I really like to do is create developer tools, or even just small throwaway scripts that get me through the day.

One paragraph that stuck with me was this one:
So, imagine your company is in the business of creating websites for small businesses. You basically need to create the same site over and over again, with contacts, surveys, shopping carts, the works. You could either hire a small number of really fast programmers to build the sites for you, hire an army of low-cost programmers to do the whole thing manually and repetitively, or create a system for generating the sites.
Sound like anyone you know? (Or any of the other people writing generators, automated testers, and the like?)

It was after reading that paragraph that I decided we needed to change things at work. Forget about code repetition, there was plenty of effort repetition as well. The first part of that process was getting cfrails together, the remaining part is to build a WYSIWYG editor for building sites - if I ever get around to it.

There are other things to automate besides frameworks that generate code. Neal Ford has a pair of talks (both links there are PDFs found via his past conferences page) he gives that illustrate a bunch of tips and "patterns" along these lines. I enjoyed both of them and will eventually get around to reviewing them. He also mentioned that a book covering the topic is coming soon.

Getting back to MJWTI, Chad lists a "simple (minded) formula" to calculate productivity:
productivity = # projects or features or amount of work / (# programmers * average hourly rate)
At the end of the chapter he shows it in action: 5 units of work with 3 fast programmers at $80 per hour would be as productive as 20 programmers at $12 per hour on the same project (obviously ignoring the communication deficiencies and other pitfalls of a group that large). But if you are able to automate enough of your work, you can be the single programmer at $80 per hour on the same 5 units of work.

The exact math isn't what's important - the fact that you are more productive by automating as much as possible is.

In what ways do you automate your workday, no matter how big or small?


When someone starts complaining about customers who are making silly requests, I normally say something like, "I know! If it weren't for those damn customers, we'd have a perfect program!"

There'd be no one using it, but hey - the application would be sweeeeet.

This week I'm going to diverge from Chad's book on how to save your job. That's mostly because I don't have the book with me, but this has been on my mind the last couple of days anyway: the fear of success.

I've noticed it in myself and others from time to time - inexplicably sabotaging opportunities to succeed. I try not to listen to that voice now if I can help it.

More recently, I've started to notice it in companies and customers as well - groups as opposed to individuals. I've started wondering if reluctance to "go live" until the product was a symbol of perfection fits in with this phenomenon. More...


Although computer science is a young field of study, it is rife with examples of good and bad ways to do things. This week's advice from MJWTI instructs us to focus on the past - learn from the successes and failures of those who came before us.

Chad includes a quote from a Jazz musician that illustrates the concept of how we learn to become masters quite well:
Imitate. Assimilate. Innovate.
We saw a longer version of that in a quote from Ron Jeffries in last week's post about getting good at the process of software development: More...


Last week I posted about why software developers should care about process, and how they can improve themselves by doing so. In the comments, I promised to give a review of what I'm doing that seems to be working for me. So here they are - the bits and pieces that work for me. Also included are new things we've decided to try, along with some notes about what I'd like to attempt in the future. More...