Archive for category Writing

The Orchard

(I sometimes write little fragments of writing like this. It’s not really intended for anything other than a way for me to relax and practice writing. I usually write in a single sitting and then review for obvious grammatical or content issues. My thanks to my friend Terry, whose beautiful orchard was the inspiration for this little snippet.)

It was one of those spring evenings where you could smell the crocuses and the earthworms through warm and partly sunny rain showers failing aimlessly on the newly verdant hillside. The moss had fought a valiant fight this year to claim the yard, but as the days lengthened, the sun drenched the area in an unusually bright March, and the grass was victorious, ripping through the moss until in a period of only a few days, it was hard to remember the conflict that had engulfed the turf only weeks before. The frogs were confused as the weather had been too cold, then too warm, and was just now right. Despite the early hour, some frogs through the neighborhood were croaking in their hollow, wooden sounding rattle.

It was the time of year for baseball, for running in the grass, for daffodils picked by curious children and brought in to wither on a table. It was the time when there is some hope — that winter will not last forever, the rain will eventually stop, and that the warm embrace of summer was rapidly approaching. It was a time for opening windows, and shaking out blankets, and deciding to roll a new coat of paint to cover the stains and dings from damage over-winter.

It was into this perfect paradise of the Pacific Northwest, this veritable garden of Eden, that Jack strode through that evening. He wore, comfortable denim with an unbuttoned flannel shirt that really looked more like fall than spring. He was out inspecting the orchard.

The orchard was not a professional venture. It was not planted or maintained for the purpose of financial benefit, but rather for the purpose of enjoyment, and leisure. An orchard can be hard work, but Jack worked the orchard because he enjoyed both the labor that he applied and the reward that he gleaned.

This lovely spring evening, it was still early. The plums had been blooming for almost 2 weeks now, but most of the other blossoms were merely peeking out from green, sticky, soft unfolding buds. Some of the apples would come much later. Some of the plants were healthier than others, and Jack stopped briefly to inspect a drooping 6 year old apple tree that was oozing sap. It might be possible to heal, but it seemed to make more sense to replace. Jack might be sentimental with his friends and family, but he was a little bit more matter-of-fact with his plants.

But despite seeming to ignore the helpless plight of the weeping young apple tree, Jack loved this orchard. It was a place of refuge. A place to till and to harvest. A place that he usually worked alone. A place that he shared with others, but only when it was ready. He was generous with his yearly crop. Certainly, he used a lot of it himself between the raw fruits themselves, and the jams, preserves, pies, wines, and ciders that he made. But there was always plenty left for others and there always seemed to be some that went to waste.

And that’s what orchards provided. Solitude and fellowship, work and leisure, pruning and harvesting.

, ,

No Comments

On Mountains and Software

Way up in the hinterlands, miles from any other humans, two men faced each other on a rocky ridge covered in lava flows and avalanche lilies.

“It was clearly a suboptimal algorithm!” the taller man yelled, with his arms outraised.

“Everyone knows that premature optimization is the root of all evil” the short, stouter man parried. “If we had known all the details of the operational environment at the time that we had implemented the original code, we might have made different decisions, but ultimately, it doesn’t matter. The code worked and the solution was a good one — at least for the first iteration.”

“The first iteration?! What is with you and iterations of software releases? Why not spend the time to do it right on the first try. Now your code is out there and it’s ridiculously slow — the whole company looks bad when you deliver crap like this.”

The short man leaned against a large basalt pillar that rose almost unnaturally out of the mountain, like an ancient stella, erected to point out the glory of this lofty pinnacle. “First, make sure it works, then make it fast.” he said slowly. “Let me ask you this, do you think that the company would have looked better or worse if we had spent an extra 2 or 3 weeks on the initial release to make it faster but the whole thing had a fundamental logic error?”

The tall man writhed, “Why do you assume that we would have introduced logic errors? The code was pretty straightforward, the algorithm wasn’t that unique or novel. It was probably new in some sense, but really just a collection of existing algos that were assembled in a new way. What makes you think it was such a hard problem to begin with?”

“Because humans are imperfect. I’m not even saying that there aren’t any logic errors in the first iteration — err, the initial release, or whatever you want to call what I just wrapped up. What I am saying is that we’re building from a more structured base. We have good confidence that it works now due to the unit tests that we put in place. Sure, it’s slow, but we can always work to improve that speed; then we can regress over the unit tests to ensure that the underlying foundation is solid.”

The taller fellow shifted his feet on the hillside, lava rock crunching like broken glass under his boots. “I think those unit tests are a waste of time. Out of the two weeks you spent building the solution, you spent almost a full week on those. Some testing is great and all, but come on! You spent thousands of dollars on code our customer will never see!” He shifted again and this time a clatter of jagged rocks slid down the hillside and off the edge of a cliff about 30 feet below.

“Our customer doesn’t see the code for the unit tests, but it’s there for us to ensure that everything’s working. Tell me this, Bob: how would you have shown the customer that the code worked as they expected?”

“I would have let them watch it run — watch it digest data and then view the results! That seems kind of obvious… how else would they accept it. Sometimes I don’t get you’re thinking, Fred”.

Fred kicked at the base of the column he was leaning against, flattening out a section of gritty soil, flecked with chunks of lichens that had fallen from the monument he now rested against.

“The tests are nothing more than the reflection of the requirements. The function that the customer described in their requirements is accomplished and realized by the collection of the algorithms and code segments that we built and assembled. If each of the blocks of code that we assembled works perfectly with regards to its own inputs and outputs, and if the code segments are assembled in a way that logically generates the expected output from the input to the entire routine, we can safely say that we’ve tested the whole thing when all unit tests are green. Sure, it won’t take into account the details of how much they like it overall, the architectural “goodness” of the solution, or the way it looks, the fonts, the UI, or even the speed, as you’re harping about. But if you remember, the customer never gave us any non-functional requirements like what I’m talking about. What they asked for was an algorithm and that’s what we built.”

Bob put his hands on his hips. “So you’re saying that the customer isn’t going to like what you delivered, and you anticipated that, but you still delivered it?”

Fred sighed. “No, but I am saying that the customer maybe doesn’t know exactly what they wanted when we started the project.”

“Oh, so now you’re smarter than the customer? Sounds like typical engineer ego.”

Fred squatted in the hollow that he had shovelled out with his foot and leaned back against the softer, mossy base of the rock, facing north. “I may be smarter or I may not be. That’s not the issue. The issue is that my job is not just to give the customer exactly what they say or to try to tease every possible requirement out of them at the beginning. My objective is to make a customer delighted with the software that I’ve written for them. It should meet their business needs and it should be useful, and it should be pleasant to use. That’s true of all software — that’s true of all products. What my customer wants is to solve problems, and that’s why they agreed to pay me money.What I am saying is that right now, my customer has a piece of software in front of them that works. I haven’t said I’m done, I haven’t said that the software is perfect, I’ve merely presented them with a quick release and asked them to take a look and then talk with me about it.”

Bob dropped his arms from his sides and attempted to squat on the hillside, resulting in more lava rocks tumbling down into the ravine below. He finally settled with one foot pointed down the hill, and the other uncomfortably folded under him and pressed up against some unpleasantly sharp looking chunks of obsidian. “I just don’t get it. You want to talk with your customer about slow software that doesn’t look pretty and only runs in an ugly console. Don’t you think they’ll be pissed with what they see?”

“It depends. We talked before I started work on the project. I explained what I was planning to do. I explained that I write software in iterations. They may not be used to doing business this way, but I think that their expectations are exactly in line with what I’m giving them. They may doubt in the approach I’m taking, but I didn’t lie to them and I’m not delivering anything other than what I said I was planning to deliver. They know I’m a professional, and they expect me to do my job.”

Bob raised his eyebrows. “So you think they’ll be OK with this? Aren’t they just going to add a whole bunch of those requirements that you were talking about? Speed? How it looks? How easy it is to use?”

“Probably,” Fred shrugged. “It doesn’t really matter if they add those things now. Like I said, we have a solid base. If they want a different user interface, we’ll add that. If they want it faster, we’ll optimize it. What I’m happy about is that the code that I’ve just delivered actually will work. If they wanted to, they could start using it now.”

Bob started to raise a hand, but the whole swath of rocks below him began to slide. Fred grabbed a branch of a small and unhappy looking Douglas fir that had managed to sprout in the crack between the basalt column and the hillside, and hauled Bob up closer to him. “Watch your step there! That hillside isn’t stable at all!”

Bob muttered a thank you under his breath and sat down as close to Fred as he could comfortable position himself. Both men sat for a while, staring at across the hillside and down into the seemingly endless valleys and terrain beyond. The sun was beginning to set, and off to the west the sky was lit up with a brilliant gradient of reds, oranges, and pinks.

“Did you know that sunsets are pretty mostly because of the pollutants in the air?” Bob asked. “If it wasn’t for humans burning things, the sunsets wouldn’t be nearly as dramatic. I’ve heard that it’s the imperfections in the atmosphere that give sunsets like this so much colors and variance.”

Fred nodded. “I’ve heard that too — not sure if it’s true, but it sounds reasonable.”

The men fell silent again.

“It’s like switchbacks” Fred said suddenly. Bob looked up, uncertainty on his face. “What I mean,” continued Fred, “is that the iterative process I’m describing is like switchbacks on a mountain. You don’t just charge up or down the mountain. It’s too steep,. the footing isn’t sure. Better to progress from east to west, then west to east, then back again as you slowly gain elevation like we did coming up. It’s slower, but it’s more steady. Plus, if you’re talking about a path that you’ve never been on before, or that hasn’t been blazed by someone in the past at all, the movement back and forth gives additional perspective. As you traverse back and forth you get a better idea of the mountain you’re ascending. You can see whether your path is doomed to failure or if you can realistically reach the summit. Each switchback can feel slow and painful but you’re safe and you’re constantly able to see what the next steps are going to be. You’re constantly analyzing and re-analyzing while still making progress towards the top.”

Bob looked down. “I guess I can see something in what you’re saying. So you’re saying that in some ways, software engineers are like sherpas, leading their customers to the summit?”

“I like that,” Fred smiled. “It’s a lot like that. We know that our customers want a great experience, and we’re the professionals that know about how to get there. We don’t want to promise them a spectacular view only to find that they were hoping to see Mt. Rainier and we we’re leading them up a slope to see across the Puget Sound. We could ask them a million questions about every last detail before they begin in a questionnaire. Things like ‘do you like flora more than fauna?’ or ‘do you prefer trees to rocks?’. But for a lot of the people that climb these hills, they wouldn’t even be sure what you mean. What types of flowers are there? What types of trees? They need to experience a part before they know what they want in full. Best to give them something good soon and then tailor the rest of the hike based off of how they react to what you’ve given them.”

Bob laughed. “I never really thought of it like that. I guess I can buy that. What about all that stuff you were talking about unit tests in code? Does that have a parallel in your analogy?”

“Well, I guess all analogies are somewhat imperfect, but I see things like tests in this case to be the safety that you build in. You may end up crossing a particularly treacherous avalanche chute, like this one, you almost slipped down. It’s better to spend a few minutes either picking a really good path and marking it with a cairn. Or maybe you’re crossing a creek and you spend the time to stretch a rope across to make it a bit easier to pass through. You expect in all likelihood you’ll be back on this path at some point and you want to be sure that the path is safe and trustworthy. Unit tests are like that in a way. It’s not really wasted time. You end up safer the first time around, and also, you have more confidence when you return.”

Bob sighed. “So you think the customer will be happy?”

Fred picked himself up off the edge of the dry, dusty basalt block and stretched. “I think so, I really do.” A crepuscular pika poked his head out of a hole about 20 feet away for a few seconds, saw the men, and decided to call it a night. The sun was nearly down now and the two men had a bit of a trek back to their base camp in the valley below. “You never know though, some customers are never happy. Some people will never be content. Ultimately, you can’t please everyone.”

Bob scrambled up, brushing dirt and shards of rocks from his pants. “I guess not.” he said.

Fred turned and starting walking back down the rocky path that they had come up. He paused, as they passed the first switchback on their trip down. “You know, Bob, even though hikes aren’t always as much fun as I thought they might be, and even though you end up with blisters and scratches and maybe the mosquitoes are biting, I still enjoy them.”

Bob just smiled.

, , ,

No Comments

The Bunker [writing snippet]

“But where does it end?” Asked the child patiently. He was a young boy — somewhere between 6 and 7 years old and still full of wonder and curiosity.

“What if I told you it went on and on for ever?” I said.

“Well — nothing can go on and on forever… It has to have an end somewhere.”

“What about space?” I asked, “If you go in a spaceship away from the sun, will you eventually get to the edge of something?”

The boy rolled his eyes, “But that’s different… This is just a tunnel”.

“Well, it’s a long tunnel but if you must know Derek, it ends about 3 kilometers from here in another chamber  much like this one.” The room we were standing in now was quite large — maybe 40 to 50 feet tall and a little wider. From where we stood, it basically looked as long as it was wide. One side of the room was an iron gate through which we had just entered, and the other side of the room tapered down into a vestibule and a long corridor shot off straight north of our present location. It was this passage that Derek was staring down now. And it was a bit strange. The dimensions were perfect. From where we stood, with our flashlights in hand, it was a perfectly straight line down the tunnel. The light only carried so far and limited how far we could see, but the effect of the perfectly square cut walls of the channel resulted in an effect that seemed too real to be real. I guessed it was because I was used to thinking of underground tunnels like this in terms of sewers or ancient catacombs — functional structures and ones made with imperfect tools. But this was no sewer or catacomb. We were currently standing in a service entry to one of the most extensive bunker complexes in the world.

“How long is a kilometer?” Derek piped in, interrupting my thoughts.

“Well, it’s like a mile, but shorter.”

“Well if it’s like a mile, why not just say a mile?” asked the curious Derek.

“Mainly because the rest of the world has got used to using kilometers and is asking us why we don’t just use them”, I parried.

“Well, everyone knows how long a mile is”, he responded. “If I walked to school, I’d have to walk one and a half miles. A mile is long but you can walk that far if you need to.”

“The main reason, actually, is because the units are hard to work with.” Derek just looked at me blankly. “The units that we use for a mile are hard to convert to other units. Do you know how many feet make a mile?” I asked.

“A lot — over 5,000 I think”

“Right — it’s actually 5,280 feet in each mile. And there are 12 inches in each foot.” Those are hard numbers to work with. With kilometers, they measure it to be exactly 1,000 meters. And 1 meter is exactly 100 centimeters, and each centimeter is exactly 10 millimeters. It’s easy because everything is divisible by ten”. I was starting to feel a little pedantic.

“But why is it harder to remember 5,280 instead of 1,000? They’re both just numbers and they’re both pretty big. Why is it easier just because everything has a ten in it?” asked Derek.

“I don’t know — I guess our brains just can handle it more easily. So for example, it’s harder to multiple 5,280 by 12 compared to multiplying 1,000 by 10.” I said, somewhat unsure I wanted to into detail of why multiplication by the radix of any numeral system was inherently easier. I wondered suddenly if the ancient Babylonians with their base 60 system or perhaps the Mayans with their base 20 system would feel uncomfortable trying to multiply 100 by 100. It sounded weird that they would. Stupid Babylonians. It’s there fault we’re still stuck with 360 degrees in a circle and 60 minutes in an hour.

“I guess that makes sense.” Derek said, jolting me back to the present, “But it doesn’t really help me because I still don’t really know what a kilometer is” he said, somewhat sadly.

“You and 300 million Americans.” I said, glumly.

Just to the left of the long corridor, on the concrete wall was a very large painted number indicating “27”. According to the map that I had been looking at all morning, that was good — service entrance 27 was what we were trying to find and it had actually been fairly easy to get this far.

I was a little surprised by the lack of any sort of security features. There were no visible locks, or mechanisms to restrict entry, no electronics visible of any kind. The iron gate to enter had been shut, but it was held simply by a latch to prevent it from swinging in the wind and probably to keep debris and larger animals from getting in and making a mess. Everywhere I looked, all I saw visible was expertly finished concrete walls.

“Well we better get going. You lead the way Derek.”

Derek already had his flashlight at the ready and he eagerly moved forward toward the corridor. “Let’s do some exploring!” he said with a big goofy smile.

 

No Comments