Sunday, September 20, 2009

Totally Random Ramblings

Here's what happens when I don't watch TV for a while...

I'm pretty happy with the way things are going right now. I feel like I'm coming out of a period of angst about the future. And as I was thinking about this, I wondered how temporary and fleeting this could be. Today at church, Todd talked about our nation and how it has lost its way from being based on truth. I got to thinking. Nations fall. What is keeping our nation from crumbling? Maybe it's the church. Maybe it's the fact that people in this nation still love God (Genesis 18:16-33). So how are we doing? Are we, the bride of Christ, striving to hold back the justice of God against our nation?

Speaking of the bride of Christ, this is something that blows my mind. We, the church, are the bride of Christ. We are also the body of Christ, and He is the head. How can we be both? This is a strange mystery, but Paul acknowledged as much (Ephesians 5:32). Our union with Christ is spiritual, though. Our fleshly union on this earth is just a picture of the intimacy and the pleasure we will experience (1 Corinthians 6:16-17).

So what's the verdict? Should I watch more TV or less?

Thursday, September 17, 2009

Hardened

Sometimes I worry that God has a hardened heart. Sometimes I worry that God's heart is hard like mine. But this is emphatically not the case. He is so much better than I. But I see Him as having a hardened heart because I do.

I've always known that God is to be first in the life of a believer. In response to that, I harden my heart against those who would tempt me to love them more than God - my wife, my kids, etc. What does this look like? At times, I will decide to do what I think is right despite of their perceived or actual needs. In my mind, this is what leadership looks like - doing what is right despite the clamoring of the followers. After all, isn't that what Moses had to do for 40 years? But I think hardening my heart against those I love is a cheat. I think the right answer is to love God more, not to love others less. By loving others less, I am actually allowing myself to love God less and still put Him "first". And in reality, what I am doing is loving others less, loving God less, and loving myself more. I am trying to avoid the pain that would come from actually having to choose between the two.

Sunday, June 28, 2009

The Gospel of J35u5 Chr!5+, Part 3

Faith. Good software practice is built on faith.

You design it using an open, loosely coupled architecture because you have faith that it will work out better in the long run. It's more difficult. It's often unnecessary to accomplish your original program goals. But you do it in faith that it will work out for the best in the long run. Maybe you've written an open architecture before and realized its benefits. Or maybe you've written a rigid architecture and suffered the consequences. Either way, you know it is worth taking the time to do it right at the beginning.

You document it in the expectation that you or someone else will need to read it in the future. Again, there's no immediate value. It's an investment.

A good software engineer is always looking forward at what comes next, even imagining it if he has to.

Hebrews 11:1 - "Now faith is the assurance of thing hoped for, the conviction of things not seen."

Spammers ... seriously?!?

The spam emails I get are always so obviously spam, I just have to wonder how it is even worth their while to keep spamming. Let's just take a walk down the chain of thoughts that someone would have to have to actually respond as the spammers desire:

<Moron opens his email>
Moron: Oh! I've got a new email! Looks like it is from ... me?? Hmm, that's strange. Oh well, I'm sure there's a good explanation. Let's see what this is about...

<Reads subject line>
Moron: "I'm your new manager"? What? How am I my new manager? Maybe I work for myself now! That would be great! I guess I'd better read it or I might get fired.

<Opens email>
Moron: Is there supposed to be something in this email? Oh, wait ... here's some words: "Can't see the images below?" I certainly cannot! What should I do? Oh, it tells me - "Click here" Okay!

<Clicks on link>
Moron: What's this? A website for buying erectile dysfunction medication from overseas pharmacies? Now why would I send myself an email with links to a site that sells ED medicine from overseas pharmacies? I guess I'm going to start a business retailing cheap ED meds. Better buy in bulk!

Seriously, what other chain of thoughts would possibly lead someone through the courses of action that end in a win for the spammers? Not only are the deceptive tactics completely lame and unbelievable, they are also completely disjoint along every step of the way. Come on!

Sunday, May 24, 2009

The Gospel of J35u5 Chr!5+, part 2

Let's look at the gospel of Humility.

I actually had this conversation with a co-worker the other day, and he sat there nodding along without realizing I was sharing a major aspect of the Gospel...

Matthew 19:30 - "But many who are first will be last, and many who are last will be first."

This has to do with how you think about your application, and how you design it as a result of that philosophy. We've all used apps that think they are clearly the most important thing your computer has going on. Why wouldn't your PC feel blessed to spend 80% of it's available resources running Louts Smaemite? Also, have you ever tried to use an app as part of a larger system, only to find that its only interface is through a GUI? In contrast, think about the most flexible, useful operating system in the world - Linux. It is literally a compilation of little nuggets of functionality, each one humbling itself before the system to be used any way the user sees fit. Want to read from a file? Most commands have a command line switch for that. What to read from STDIN instead? Most can handle that too. None of them exalt themselves on high and say, "I must be the only app you are using."

This concept came up in conversation with a co-worker, when he was describing the process required to get his system working. He had designed it in a bit of a vacuum (my fault). It required starting an executable and then starting 2 separate Java processes to send & receive data. I walked him through the architecture he was plugging into, and then explained how his app needed to "just start" at system boot, instead of requiring the operator to take 3 extra steps (each incurring a chance for failure) at the end or middle of the normal boot process.

When we exalt ourselves, we can achieve glory from men for a while, but overall we are not useful to the Master Designer. When we humble ourselves and submit to His plan for us, we are much more capable of serving His purposes.

The Gospel of J35u5 Chr!5+, Part 1

Jesus' Gospel shows up everywhere in software development.

Today let's talk about the gospel of Love.

Mark 12:31 - "The second is this: 'Love your neighbor as yourself.' There is no commandment greater than these."

Want to know how to write good software? Want a quick way to derive all of the good software practices that have been developed over the years? Just like you can derive all of the physical laws from a small subset of establish facts (f = ma, d = rt, etc.), you can also derive almost all of the good coding practices from this one kernel of truth: Love.

Who are you writing software for? No one write software in a vacuum. We write software to be used by someone. The User.
Who will look at this code next? You won't be around for ever, and you'll probably be moving on from this project in the relatively near future. Someone will have to fix bugs in your code after you're gone and add functionality when users ask for it. The Maintainer.
Would others find the functionality you are creating useful? Maybe they would. Maybe they would want to use it for reasons you had not originally intended. The Reuser.
And who owns the code? Who asked you to write it, kept track of your progress, and is ultimately accountable for the success or failure of the project? The Boss.

Now here's the deal. You need to think about these people when you write your code. You need to love them by looking forward into the future and taking responsibility for how they are going to interact with this thing you're creating.

The User. The most obvious one. Put yourself in his shoes and understand what he wants. He is using your product to get a job done. Help him do it quickly. Make his way obvious. Make the right choices for him so he doesn't have to. Wipe away all unnecessary options and let the functionality of your product be obvious and simple. He will never know your name, and if you do your job right he will never even think about you.

The Maintainer. Again, put yourself in his shoes. He's just gotten assigned to go fix bugs in an app he didn't write. First step - check it out of source control. Make sure the initial check-out from source control includes everything he needs to get to work. Next, he will try to build it. Make a single build file that can build all relevant components of your project. Now he needs to delve into your code and figure out where the bug is and try to fix it. Comment your code - like a fool! Let the comments describe exactly what you're thinking. Do it as you write the code and update them as you go so that they are faithful to your intent. Help him understand areas where you are unsure, or areas where he could expand it later (if you know what those areas are). Design your product well so that extending it is easy and he won't have to shoe-horn in features after the fact. Write a README document to explain any quirks or gotchas.

The Reuser. This is the person who sees something your code can do and says, "Hey, I wonder if I could reuse that." Package your code into modules that make sense for other people to use. Create interfaces. Create API documentation. Write it in a way that makes it reuseable - for example, the resuer should not need to include your whole project just to get one piece of functionality.

The Boss. This is the guy who cuts you a paycheck, the guy in charge, or even just the tech lead for the project. Write the code to do exactly what it needs to do - and nothing more. Don't go trying to solve the worlds' problems in your code. Sometimes elegance must die in the face of efficiency. If you can make a good business case for doing it the "right way" over the "quick way", great - take it to your boss and let him make the decision. But understand the business mind. He needs you to faithfully serve the cause of the project. Any product can be tweaked from here to infinity, but what needs to get done before it goes out the door? Hitting milestones on schedule and producing a great product are his top priorities. Love him by serving him faithfully. Don't insist on your own way. You should make good decisions without requiring his input on everything, but be willing to put it aside when he says to do it differently.

That's all I got. Jesus is a genius. I want to code just like He would.

Thursday, March 26, 2009

Eliphaz' Prophecy

I was reading Job today, and I came across a verse that caused me to pause.

Job 22:30 - "He will deliver one who is not innocent, and he will be delivered through the cleanness of your hands."

Context: Eliphaz accuses Job of not being so righteous as he claims (actually he accuses him of some pretty terrible stuff), and then tells him that all he needs to do is turn to God, hide His word in his heart, and God will restore him. He finishes his exhortation with this verse.

I pondered to myself what this could mean. The most obvious answer I could think of was that Job would save an unrighteous man by virtue of his own righteousness. I thought about how this could happen. And then I remembered how Job ends...

[Spoiler Alert!]
After God gives Job a thorough rundown about who is God and who is not, Job confesses that he has no case before God. God then turns to Eliphaz and tells him that He is not pleased with him and his friends because they have not spoken what is right about God as Job has. The solution? Go to righteous Job and ask him to make sacrifice on their behalf, because God will accept Job. And so they do. Whoa... do you see what just happened? God saved him who was not innocent, and He did it by the cleanness of Job's hands. Dude Eliphaz, it was you! You are the one who is not innocent! You are the one who will be saved by the cleanness of Job's hands! For thirty-some-odd chapters Eliphaz and his friends have sat and accused Job, exhorted him, insulted him, trivialized his suffering, gotten defensive, etc. And all this time, they were the unrighteous ones. And yet it was Job who was made to suffer. It's completely opposite of "the world according to Eliphaz".

It blows my mind. Does God not have a sense of irony?

Sunday, March 15, 2009

Worry

I've been worrying a lot recently, especially about my job. As I was lying awake worrying tonight after putting our son back to sleep (after a blessedly short wail session), I decided to analyze my tendency to worry. I know it is not of God, and is therefore unnecessary. So why did I feel like it was necessary to worry? Because worry occasionally produces something good for me. You see, I have a problem about being forgetful, and when I worry about something that soul-crushing weight of despair generally helps to keeps me from forgetting. So I realized I was using worry as a memory mechanism. Problem is (besides the obvious problem that this is disobeying Jesus [Matthew 6:25-34]), my worry does not come in flavors. So it quickly becomes impossible to distinguish between multiple worries, and also becomes impossible to know when I can stop worrying. How do I know I'm not forgetting something off my worry list? Self-replicating cycle...

I realized what I need to do instead is think about things as I usually do, but then make action items instead of "worry notes". If a decision needs to be made, make a decision or make a plan to get the info necessary to make the decision. If an action needs to be taken, write it down or put a reminder in my phone or just execute the action. I'm hopeful that this can really work out, because it is a matter of obedience. To be faithful to Jesus, I must stop worrying. I'm hopeful that He will bless any mechanism I choose to use to do that. Anybody got any suggestions?

P.S. - This type of thing is exactly why I have this blog, so if you aren't interested in hearing the semi-coherent ramblings that are bouncing around in my brain @ 2am, you might as well unsubscribe... ;-)

Friday, March 6, 2009

Faithful

Every night, we pray that Carsen will have a love for God's word.

This morning when I got her up, she reached over to her dresser and grabbed her bible.
"Can we read bible out there?" she asked, pointing to the living room.

It was a humbling and joyful reminder of God's faithfulness. Her favorite bible story is Samson.

Friday, February 27, 2009

Sleepy Underpants

Carsen is an excellent communicator. Sometimes she even over communicates.

Examples:

(Carsen is standing in the doorway to the garage, and the door naturally swings shut)
"No door! Stop shutting on me!"

(Carsen receives a new set of Sleeping Beauty underpants)
"Come out! Come out sleepy underpants!"
(as she smacks them against the floor in an attempt to open them)

Sunday, February 1, 2009

Life Goal: accomplished

Count it! I accomplished one of my life goals this weekend. It was (drum roll please...) to wear both of my kids at the same time.

Katrina was out helping the Shiloh ministry, a ministry at our church dedicated to serving women afflicted by infertility & miscarriage. That left me at home with the kids. As she was leaving, Katrina said, "It's great weather right now. You might want to take them out for a walk or something." With about 1.5 hours to nap time and 2 kids on my hands, I decided that a nice walk was probably my best bet.

I looked out in the garage and saw our baby back-pack, purchased at a consignment sale for Carsen and then never used because she was scared of it. No better time to drag it out and see if Little Man would feel differently than his sister. I asked Carsen, "You wanna get in this back-pack?", already knowing the answer. "Ok!" she replied, curiously checking out the black and green contraption. Uh-oh. I have a personal rule that I don't rescind my offers to my kids without a really good reason. So now Carsen was going to ride in the back-pack. What was I getting myself into?

Obviously Canon had to be worn, so I loaded him into the Baby Bjorn. Then I deployed the back-pack (it can stand by itself b/c it has foldable legs) and loaded Carsen into it. Now how was I going to get this kid on my back? Picking the back-pack up by one strap would probably topple the whole thing over. Then I noticed a handy strap on the back of the kid pouch part. I grabbed the strap with my left, a strap with my right, and awkwardly hoisted the whole thing onto my back. After a little grunting and squirming, we all stood there slightly dazed by the awesomeness & discomfort of it all. Two kids, one dad, one pair of feet on the ground. And then we headed off to the park.

Friday, January 30, 2009

DC bar folk

I just got back from a business trip to Washington DC. While we were there, we all went to eat in a bar. Now, Texas is known for it's bar folk (friends in low places, right?). But DC is now in the running for classiest barfly.

I walk into the Men's room to pee, and there's a guy standing at one of the urinals wearing a sleeveless (torn-off) black t-shirt, holding a cigarette and peeing with the same hand. Careful there, buddy. That's the stuff that hilarious & embarassing trips to the hospital are made of. There was no divider between the urinals which made me a little (a lot) uncomfortable, but as a dude you can't walk out on account of that. So I had to pee next to him.

He immediately strikes up a conversation:
Barfly: "How bout this fantastic weather?"
Me: "Yeah, it's pretty nasty"
Barfly: "Is it still pouring outside?"
Me: "Nah, it's cleared up"
Barfly: "It was pouring rain when I got here at 3"
Me: (What time is it? 7:00? You've been here for 4 hours?) "Well, it's sleeting a little"

I mention I'm from Dallas and we make small talk about football. While washing my hands, I notice the words on his shirt: "I'm not a gynecologist ... but I'll take a look". Classy.

So I decided that I need to hang out at bars more. This is probably the kind of person that Jesus hung out with all the time.

Friday, January 9, 2009

No Fix

I had a thought about Karma.

Karma assumes that there is no God who created & owns everything.

Otherwise, any sin is a violation of God's created order, and we are powerless to fix what we break. Imagine God's creation is a glass window, and you have a hammer. God made the window, but you dishonor God by breaking it. Now, you can clean it up and throw it away, but you can't put that window back together.

Therefore, doing good things to make up for the bad things you've done doesn't really make sense. It's like comparing apples and oranges; it's two different things. Doing something good would be washing the window. Doing something good to make up for something bad would be like washing the broken window pieces. That doesn't even make sense, and you'd probably cut yourself. OK, the analogy kinda broke down there, but I think the point is clear.

God makes this clear in the sacrifice system of the old testament. He doesn't demand good works to atone for sins; He demands sacrifice. Somehow, in a way I don't understand (but I might if I were in seminary), blood atones for sin. And it's the only thing that does. Thank God for the gift of His Son, whose blood covered our sins once and for all.

Paul said something similar in Ephesians 2:8-9 - "For by grace you have been saved through faith; and that not of yourselves, it is a gift of God; not as a result of works, so that no one may boast."

Sunday, January 4, 2009

Chains of Freedom

I've been reading "The Mythical Man-Month", a book on software engineering by Fredrick P. Brooks. One of the things he says is, "Discipline is good for art. The external provision of an architecture enhances, not cramps, the creative style of an implementing group."

This reminded me of an analogy my Dad likes to use. A kite on a string feels constrained by its tether, but once the tether is cut, the kite crashes to the earth. He uses this analogy to describe the laws of God, and how they feel like they unfairly restrain our lives sometimes, but they are actually for our good, and without them our lives spiral into disaster.

I noticed something in these 3 situations. The "constraints" along the way save us from failing the ultimate judgment at the end. If we ignore the constraint, we can feel "free" for a while. But judgment will always come. A desire to be "free" from constraints demonstrates a misunderstanding of our purpose. Software is written to be useful. Kites are built to fly. People are created to glorify God. Desiring to be "free" from constraint is a declaration of our desire to pursue something other than what we were designed for. Ultimately, everything is judged as to how well it accomplishes it's purpose.

Jesus said the same thing.
Luke 20:17-18 - "But Jesus looked at them and said, 'What then is this that is written, "THE STONE WHICH THE BUILDERS REJECTED, THIS HAS BECOME THE CHIEF CORNERSTONE"? Everyone who falls on that stone will be broken to pieces, but on whomever it falls, it will scatter him like dust.'"