Archive for category Somewhat Random
Pied Beauty
Posted by Andrew Flanagan in Ranting & Ravings, Somewhat Random on July 2, 2013
Glory be to God for dappled things For skies of couple-colour as a brinded cow;
For rose-moles all in stipple upon trout that swim;
Fresh firecoal chestnut-falls; finches’ wings’
Landscape plotted and pieced—fold, fallow, and plough;
And all trades, their gear and tackle and trim.
All things counter, original, spare, strange;
Whatever is fickle, freckled (who knows how?)
With swift, slow; sweet, sour; adazzle, dim;
He fathers forth whose beauty is past change;
Praise Him.
Pied Beauty by Gerard Manley Hopkins
I’m most creative when I’m not
Posted by Andrew Flanagan in Actual Events, Geekiness, Somewhat Random on February 20, 2013
My typical work day is a mostly mental exercise. Most of my work falls into these categories:
- Pushing or pulling ideas between various people ( normally we call these conversations but that’s what it feels like)
- Attempting to create abstractions of concrete examples
- Attempting to make concrete examples of abstract ideas
- Designing optimized interactions and processes for defined workflows
- Implementing software applications that meet the design
- Thinking of ways that the implementation can be broken or hacked
- Outlining and documenting all of the above in a way that almost anyone can understand it
I’m a software engineer and that’s what I do. It’s almost entirely a mental exercise. There are very parts of the day where I just click through something or enter data over and over or do anything else where I can zone out. I think a lot of non-techies think that computers are all about following some steps in a process (e.g. “Push that button, then click here, then push the other button.”). I’m sure to offend someone here, but I’ll pick an example of a task that at first requires some mental exercise but then really doesn’t: assembling furniture from Ikea. So, when you first get a box and pull out the pieces you have to apply some thought. Hopefully you skim through the directions, make sure you have the parts that you expect and then start on page 1. You look at the pieces, look at the drawing and start working. Two points to make on this: first, the thought is pretty basic. You’ve been given everything you need to work, you just have to follow the steps. Second, if you buy more than one item (or if your Ikea furniture wears out like ours does) you may find yourself assembling the second unit without even referencing the book. You essentially have to be smart enough to identity what object is in your hand and what parts in front of you fit where on that part.
Software engineering is almost never like this. To be sure there are processes and steps and flow in software. There is a typical software requirements lifecycle that is composed of Planning, Design, Development, Testing, Deployment, and Maintenance [although sometimes the order and categories are described differently, but it’s still basically the same thing] but this just a huge framework that outlines the overall process. In fact, in many software methodologies the lifecycle is intentionally NOT a straightforward process but rather an iterative one. You start with requirements, do some design, write some tests, write code, do more design, refine some requirements, write more code, etc. Most of the process is up to you. Gathering requirements for a software project can be aided by good tools and by good frameworks. However, it’s still up to smart people to ask good questions and translate sometimes misleading responses and then continue to ask questions that flesh out the real desired functionality. Software design has a number of tools and frameworks as well. Just as in real-world architecture, there are numerous design patterns that can be leveraged to achieve a solid and good design but no one but a skilled engineer can make the call on what design pattern is appropriate. We have great modeling tools like UML which can help in developing a [mostly] unambiguous representation of a software component but someone has to construct the diagrams. The coding or implementation itself is probably the least “mental” part of the work. Granted, there’s a large amount of material that a developer needs to understand how to implement a design in code but most of the material is available easily from reference books or more commonly, the Internet. Even so, a developer must spend time understanding the design and ensuring that the code does in fact implement it. It’s difficult to ensure that your implementation is in the line with the requirements so testing is necessary. Testing is hard. I’m not even for a moment suggesting that it is too hard and should be ignored. In fact, you can’t really separate testing from implementation since there’s no way of knowing if what you wrote works without testing. But good, solid testing can be quite difficult. Modern tools are wonderful for testing — it’s easy to write unit tests for code to verify that code does what it’s supposed to do. The tools make life easier but there’s still an enormous amount of thought that has to go into testing. Edge cases and complex use case scenarios are common; it’s often very hard to have good tests that adequately cover all the requirements rigorously. Often software is written that supports an infinite variability of input. In order to write adequate tests, a developer must have intimate knowledge of the requirements but also the language, frameworks, operating system and other parameters that are part of the software environment. The tests themselves are easy to implement. It’s knowing what we should test that’s hard. Without even going into deployment, maintenance, and other related tasks, it’s easy to see that most of this process is a thinking process. In fact, really good software can be nearly complete before any software has been written.
My point of all this is to indicate that software is a lot of brain power. And more than just brain power, it requires a lot of creativity. A lot of software has been written in the last 60 years. New software isn’t just about reinventing existing software but making things work better than before. Perhaps this means finding a creative way to tweak more performance out of the same hardware, or maybe constructing a more efficient interface that humans can spend less time learning and more time using, or maybe finding a way to make disparate systems talk together smoothly and correctly. All of these are valuable but often we’re not trying to find a solution but to find the best solution. Requirements have many non-functional elements that describe constraints on the system. We might be building a system that searches an airline reservation system for available seats but our constraint might be that we need to retrieve this data from the current system in less than 1 second. That part gets tricky.
This wears me out mentally. I find that by the end of the day I rarely want to spend time on the computer (unless it’s doing something mindless). In fact, even on the weekends I greatly prefer activities that are manual. I enjoy do-it-yourself projects around the house that involve punching holes in walls and cutting down trees. That sort of thing is easy — it takes some minimal thought and care but it’s basically doing stuff not thinking about stuff. I rarely do work on evenings or weekends that’s very creative — I’ve struggled just to write on this blog let alone writing out some stories that I’ve had floating in my head for years. Any project around the house that requires a good amount of planning or preparation tends to not happen because my brain sees the looming creative task and tries to shut down.
So finally, one observation, and one idea.
In the last several weeks I’ve transitioned in my full-time work to doing very repetitive (even boring) work that’s much more akin to pushing buttons and clicking the mouse. There’s a large backlog of system configuration tasks that I’ve been working through. The work is easy in one sense. Almost all of it is well-defined and easily understood. It just takes time. Sometimes I have to chase down problems and troubleshoot things that aren’t working, but it’s mostly clicking, typing, waiting, and repeating. What I’ve observed is that after about 3 days of “time off” from the creative process of software engineering I had a large boost in creativity. During the day, in the evening, on the weekend — I suddenly was interested in doing creative tasks. My brain had realized that it wasn’t getting any action and started asking for attention. I spent a few late nights working on some tasks that I’ve wanted to do for a long time (including some software development for a personal project that’s been on the back burner for literally years). All of it felt not only good, but great. I felt like I had time to think through things and although it’s a little subjective, I think that the quality of my work was superior than it normally is. I’ve had more “ah ha” moments and more “outside the box” solutions than I normally do. It’s been wonderful.
This probably isn’t too much of a surprise to anyone who thinks about it. I’m sure there are studies and articles on the subject (I’ve seen some). However, I’m interested in the idea that there may be optimal ways of mixing work for professions that require large amounts of creativity. For example, it might make sense that the best activity for a group of software engineers isn’t to have them spend an extra day each week on a project of their choosing (although I think it’s better than nothing) but rather to have them spend time working on running cable in the corporate offices or doing rack wiring or adding components to computer cases. These are all worth-while activities and although they take some skill, most technically inclined people find these things to be fairly simple mentally (although not always physically). A company doesn’t normally pay the same salary to people who do these tasks, but I think it could provide real value to the company in the long run. By turning off the creative process for a little bit, software engineers could [perhaps] be much more creative when they come back to their regular work. I’m not sure if there have been attempts to do things like this in a company that employees software engineers, but I’m curious to hear from my readers on whether they think that the idea has any merit. Anecdotal evidence as well as real studies on the subject are all welcome!
An Exaltation of Larks
Posted by Andrew Flanagan in Geekiness, Reviews, Somewhat Random on November 24, 2011
I was delighted to browse through this book recently. A fun read for anyone interested in language. It’s not a long or complex book, but really just a nugget about some interesting developments in English with plenty of historical anecdotes and references as well as an interesting list of collective nouns.
The at-first confusing title is simple an example of one of the collective nouns or “terms of venery” that come to us from Medieval hunting tradition. Other examples include a “Murder of Crows” and a “Gaggle of Geese”. These collective nouns were used by gentlemen at the time to refer to groups of animals. The terms themselves were somewhat a mix of an argot and an inside joke (as many of the terms are quite playful or imaginative).
The information is not particular practical or useful, but clued me into an aspect of Medieval life that I was previously unaware of.
Clever Sink
Posted by Andrew Flanagan in Actual Events, Somewhat Random on June 17, 2011
I kind of like the interesting combination of modern aesthetic and functionality exhibited by this sink that I saw at a WalMart restroom recently. A single piece makes installation easy, the two levels make it easier for kids and adults to use, and the slope ensures that standing water drains off. Not the prettiest thing, but I was impressed by the effort that some design engineer put into it.
Wonder
Posted by Andrew Flanagan in Actual Events, Somewhat Random on June 12, 2011
Took this a few weeks back on my way to work… The contrast was simply amazing — remarkable brighter than this iPhone-snapped picture shows. I’ve never a seen a rainbow that just shimmered like this.
This is over by the Tacoma Narrows bridge on SR-16, headed North at about 6:40am.
O Lord, our Lord,
how majestic is your name in all the earth!
You have set your glory above the heavens.
Out of the mouth of babies and infants,
you have established strength because of your foes,
to still the enemy and the avenger.
When I look at your heavens, the work of your fingers,
the moon and the stars, which you have set in place,
what is man that you are mindful of him,
and the son of man that you care for him?
Yet you have made him a little lower than the heavenly beings
and crowned him with glory and honor.
You have given him dominion over the works of your hands;
you have put all things under his feet,
all sheep and oxen,
and also the beasts of the field,
the birds of the heavens, and the fish of the sea,
whatever passes along the paths of the seas.
O Lord, our Lord,
how majestic is your name in all the earth!
Psalm 8, ESV
A Prayer at Work
Posted by Andrew Flanagan in Actual Events, Somewhat Random on May 31, 2011
I pray that I would be
effective in my work,
disciplined with my time,
loving to my coworkers,
forward-looking in my calling,
mindful of my family,
reflecting of Your grace,
throughout the day.
Transitions
Posted by Andrew Flanagan in Actual Events, Somewhat Random on February 8, 2011
Looks like life is changing again… A day before my birthday, I got a 4-week layoff notice. My last day at SAIC in Kent, WA would be February 23. Thankfully, I’ve just got word this week that I should be transitioning to up to Poulsbo, WA to support my old division on a pretty exciting project. It’s nice to stay in the company (certainly makes life a lot easier) and the new project sounds like a lot of fun — good career experience, work that’s satisfying and interesting, and working mostly with a group that I’m already pretty familiar with.
I’m excited about the future. I’m not sure where this road leads in terms of deep technical expertise vs. getting back into academics possibly with a Master’s degree vs. moving towards management, but there are many opportunities and options that will be fun to explore.
God is good. Not just because things worked out in this initially stressful situation, but because he has promised to be faithful to his people and he always is. It was wonderful to experience the care and support of a number of friends, family members, and co-workers who all rallied behind me in my efforts to move forward, and provided comfort and support. My thanks to all of you. 🙂
Although I’m not sure of the details, I’m hoping that I will have some energy to move forward with a number of projects over the next year. There are some software projects that I wanted to kickoff, some more opportunities I wanted to chase down for the new business, and some fun projects around the house that I wanted to work on with Sarah.
Picture from National Geographic (http://photography.nationalgeographic.com/photography/photos/patterns-sand/egypt-sand-dunes-photography.html)
Privateer
Posted by Andrew Flanagan in Actual Events, Geekiness, Reviews, Somewhat Random on February 7, 2011
So I’m listening to a new Pandora station this morning (Thanks Robert for the suggestion — good stuff). The music of the particular track that I’m listening to at the moment reminds me so much of an old MS-DOS game called Privateer by Origin Systems. I remember distinctly getting the game from my Dad in 1993 and loading all 7 or so diskettes into our ancient beast of a computer. After some tweaking to fix some memory issues, we finally got it up and running. The basic gameplay is as a pilot of [initially] a small ship, flying between planets, space stations, asteroids, and other bases while choosing to play as a trader, a mercenary, or whatever you chose.
This game was amazing. The graphics of course look awful now as I review the site. But the game play was incredible. The joystick took some skill to use effectively whether you chose life as a merchant or a gun for hire. Interaction and AI wasn’t great, but for the time, it was pretty good. I spent many hours playing the game and really enjoyed it. The music was “futuristic” synthesized music, probably not the best quality, but it always felt so fitting for the game. The game created an incredibly immersive world that sucked you in despite the relative simplicity compared to modern games like EVE Online. It was a good balance. I was inspired, intrigued, and entertained but not to the point that I forgot about reality altogether. Newer games definitely provide more depth than this old-time game, but I can’t afford to spend an average of 2.5 hours per day (which apparently is average for EVE Online players).
I did also play Freelancer (made by the same designer after Origin was acquired by Electronic Arts) but it just didn’t feel the same.
Anyone out there know or or can recommend any games like this that can balance a high level of fascination with a certain restraint that still encourages reality?
Psalm 119.9-16
Posted by Andrew Flanagan in Somewhat Random on January 25, 2011
How can a young man keep his way pure?
By guarding it according to your word.
With my whole heart I seek you;
let me not wander from your commandments!
I have stored up your word in my heart,
that I might not sin against you.
Blessed are you, OÂ Lord;
teach me your statutes!
With my lips I declare
all the rules of your mouth.
In the way of your testimonies I delight
as much as in all riches.
I will meditate on your precepts
and fix my eyes on your ways.
I will delight in your statutes;
I will not forget your word.
Kill Kill Bill Bill
Posted by Andrew Flanagan in Actual Events, Somewhat Random on January 20, 2011
I’m here to say that Quentin Tarantino stole my idea.
Also you’ll notice that I still have some outstanding homework to complete. My Mom returned this to me, and let me know that she’s still waiting on this (notice I have one more “fig” left). I intend to fax and return ASAP — I was home schooled — she’s not just Mom, she’s the principal and apparently I shouldn’t have graduated.