When I started coding in 1980, my constraints were different than they are now: a 5 MHz clock, 2Kx16 or RAM, and a monitor program that had a limited assembler built into it but no filesystem whatsoever for persistent storage. In addition, I was programming for my own education with another goal as my primary motivation.

The computers I use today have vastly different capability sets, and I have very different reasons for programming. Between then and now, I have been paid at various times to program single chip microcontrollers, code generators, programmable logic arrays, and data scrapers, and the machines I use have multiplied in CPU speed by almost 1000x, data bus width by 4, and memory cache is now 128x what my entire volatile memory was.

In addition, I've made transitions several times between coding for my own profit, hiring coders, and writing code for others. Some of my personal-profit projects are on the plus side, but I have also had to bury a few and take the loss. Painfully.

This twenty-five year perspective has given me one overriding mandate: find the biggest picture I can in which to view the work I do. In some cases, this leads me to stop coding and go home to spend time with my family. In others, it leads me to set myself up as one who is insulated from the urgency of a particular department's crises so that I can write applications that solve long term problems while leaving others to deal with the heartburn du jour.


Very few of us have the luxury of tweaking the politics of a major lab group for its own good, but this same principle can be applied to questions of how to optimize one's coding time and resources. We all have spent time barking up the speed-optimization tree, and sometimes it's warranted and others not. There are times when every cycle counts, and others where the hours you spend writing comments and docs and listening to user feedback are far more important than the nanoseconds you shave from execution of a process.

What is the ultimate goal of your coding? Are you learning to be a better coder? Are you satisfying yourself, or are you working for a bigger goal? Is your programming going to 'count'?

Some of us are good enough -- and dedicated enough -- to dig into the core of our tools to extend them or make them better. I've had several humbling opportunities to sit at the feet of some of these giants as they warped the fabric of my progamming environment right before my eyes. At other times, I've had the pleasure of seeing a fire kindled in a ten-year-old's eyes as he 'gets' how the shell tells the computer what he wants to do, and knowing that my choice to spend my time in his classroom made a measurable difference for him that day.

It's baseball playoff season now, and one of the choices I've made is to let them play away without my attention. The reason I bring up baseball, though, is to paint a few analogies. The ultimate goal of a baseball game is to win, and the way a team wins is to score more runs than the opponent does. There are many ways to do this, though. Some players do it by learning to hit home runs. Others do it by pitching so well that their pitches can't be hit. On other teams, the managers do a lot of work on getting their players to work together to advance around the bases a little bit at a time. All these different individual and team strategies have a lot of luck in them, compared to programming. In our field, with the exception of business aspects, we can focus more on project completion in a more straightforward sense, without as much of our path being affected by a belligerent clump of buffalo grass or a momentary change in the wind direction.

Another area where baseball has much to teach us is the area of personal motivation. The team's goal is winning games, but what are the motivations that drive the individual players? Baseball has had both great players and terrible egotists, and often their stories are paraded through the media as they lead their team to success or destroy its chances with a careless word. In life, we have many opportunities to excel, and, in my life, I've had occasions where I've been great and occasions where I've been gross. The hardest-learned lesson I hold in my heart is the lesson that we each do have tomorrow, and today's embarrassing gaffe may not be retractable, but tomorrow's good will stand on its own.

The big picture is that good is always good, no matter the cost of bad. There are some days when the only good I accomplish is to get myself to the gym to keep the bod healthy a little while longer. On others, I juggle mentorship and productive coding. Sometimes one wins out and other times the other does. Here at Perl Monks, I have the honor of associating with many kinds of Monks, and I have come to realize that in some ways I've got wisdom to share, and in others I'm a humble newbie and my best option is to shut up and listen. The best news of all is that that's okay, and today's a day I still have time in which to do some more good.

Thank you, Perl Monks! :D

Edited by planetscape - added readmore tags

Replies are listed 'Best First'.
Re: Look at the Big Picture
by Tanktalus (Canon) on Oct 17, 2005 at 18:04 UTC

    The ultimate goal of my coding? Maybe I'm simplifying a bit more than you intended, but the ultimate goal of my coding is to pay for a reasonable lifestyle so that I can spend time and effort on things that matter: relationships with my loved ones.

    Everything else is secondary.

    I use my code to that end either in producing something of value to my employer (software), or to speed up development of something of value to my employer (tools). All so I can get paid, go home, and spend time doing things that matter.

    Don't get me wrong - I started programming in about 1984, when I was in grade 4. This is a hobby. And a well-paid hobby. But my priorities changed about 6 years ago when I got married. And hobbies are now just hobbies, my career is just a way to fund my life.

    The big picture was painted for me shortly after I started this job by a senior architect: "You can live to work, or work to live. It's your choice." I don't think anything gets bigger picture than that.

Re: Look at the Big Picture
by VSarkiss (Monsignor) on Oct 17, 2005 at 20:01 UTC

    Nice essay, says this fellow member of Ye Olde Phartz Clubbe.

    As to the ultimate goal of my coding, let me quote the composer Gustav Mahler: when asked if he preferred to conduct or to compose, he replied, "I conduct to live. I live to compose."

    I'm not quite at that stage, although I do have to say that my main use in programming these days is to provide a nice home for my family. In my precious spare time, I try to spend a little time learning new stuff (Haskell, anyone?) but I don't get the charge I used to from it. Like you, I challenge myself with physical exercise, working out in my karate classes.

    But the monastery is a nice middle ground. When I have a chance, I'll answer questions and read thoughtful essays, and try to pick up a new trick or two. When I don't have time, well, I can always reset the counter in Newest Nodes later.

      I am fortunate that I've gotten such free rein here, but it's also because I have set it up that way. Coming to work is just such a joy because not only do I have great coding challenges, I can rework the landscape in a way that I'll leave a major division of the labs far better off. Very few people have that kind of an opportunity.

      I'm also totally in agreement with you and Tanktalus. Coming home is such a joy because I'm providing such a fertile environment for my family to grow and be happy. I used to spend my free time programming, but I selectively choose my extraneous pursuits so that my wife and son get a lot of attention. Jacob and I will explore programming together in the future, that's for sure.

      Even the limited growth of my salary (it's a g-job, after all) doesn't bother me, because I also have a company brewing that takes just an hour of my evening but will repay my investment many times over.

      I do have another hobby -- building model trains -- but I haven't gotten to it much because my life is so full. It's fun to escape to figuring out how I'd program a fly-on-the-wall camera such that you'd see virtual people riding the little trolley cars to work...
Re: Look at the Big Picture
by pg (Canon) on Oct 18, 2005 at 00:30 UTC

    Have some fun! The worst thing can happen to a person is that, you don't enjoy what you are doing, or you don't like the people around you, and you are still forced to do it or with them, or at least you think that you are forced to. Maybe for the purpose of making a live.

    IT job is kinda of fun, and allow you to be more creative and enjoy more freedom of thought. Lots of people are doing things that don't require them to think much or don't allow them to think much. In this sense, we are blessed.

    If your work happened to be your hobby, that will be really great, and which is probably the case for most of us IT people.

Re: Look at the Big Picture
by rockwiz (Friar) on Oct 18, 2005 at 13:29 UTC
    It's funny (well I guess in a sarcastic way of looking at things) because I went through a very similar process just this summer, but it applied more generally to my person, as a whole and not just Perl, or coding.

    As much as I was striving to be the best at what I do (I always want to continue learning things assciated to my field), I noticed it also impaired me from having the values I was thought when I was a youngster.

    This came to such a big conflict this summer that after 15 years of doing my job in different areas, that even though I was considered a guru at my place (I'm nowhere near that though), my body finally broke.

    I went on stress-leave for quite some time. I am now back to work, but I realize now that the most important things in your life has to be your well-being. My well-being starts by honoring my values. And those values are to recognize the accomplishments of my personal life.

    My wife and kids have been ignored so often because I was striving to be the best and to get almost nothing in return. Money is important as I, too, wanted to put food on the table, have a roof over my head, and provide the best for my children, but you know what, I could probably live with less.

    Now I code for money, and then I go home and kiss my wife and kids. They are what's most important. Coding? Well, if someone needs my expertise, they'll come to see me, but if it's time to go home.. it'll wait to tomorrow.
      rockwiz++

      I have had many of these reflective re-evaluations in my life and my career. When I finished school, I started a fourteen year career writing movie scripts that was supported (more or less) by my programming talents. Everything was about the success that was going to come tomorrow, and my bets got longer and longer. My writing partner died on me, setting me free of the obligation, but by that time I had had plenty of time to analyze the mistakes in my thought processes and my ethics in detail.

      When I met my future wife, I started to see that I was in severe denial about the way my two companies and my time spent as a high-flying entrepreneur (as well as in politics and advocacy and youth mentoring) were taking me down a path that led straight to bankruptcy. Julie and Jacob provided the impetus for me to create this job position at the Labs, and having them as my anchor is really helping me fashion a life that is full and complete and worthwhile.

      I am fortunate that I never had a full seize-up like you describe, but that's because I had a self-made conscience in my head that I always listened to. I often put off doing what it and I realized needed to be done, but there always came a time when it was clear that changing course was imperative.
Re: Look at the Big Picture
by adrianh (Chancellor) on Oct 18, 2005 at 11:19 UTC
    Very few of us have the luxury of tweaking the politics of a major lab group for its own good

    But for gods sake try before giving up ;-) I've worked numerous places where I've managed to change politics and working practices for the better. Most of the time when I asked why they hadn't implemented testing / version control / small iterations / whatever, it wasn't because nobody had wanted to - it was because nobody had asked.

    Be diplomatic. Be careful. Just don't give up without the attempt.

      They're begging me to. I've actually set myself up in a position where I work for a manager who basically gives me free rein and says "go gettum!" This way, I can divide up my time and make everybody a little happy, go 'round again and make everybody a little happier, stop and clean up my code, go 'round again...

      The key is that I'm outside of any one group's pressure cooker. The Fab isn't any more political than any other large group, it's just a much more challenged group by the very nature of things. Which, to be honest, is what makes it so much fun to take this on.

      Perl is a big asset for me here. When I can move forward in big leaps (even counting my time babbling on PM), things Get Done.
Re: Look at the Big Picture
by zentara (Cardinal) on Oct 18, 2005 at 11:09 UTC
    What is the ultimate goal of your coding?

    Create the Borg, or at least make sure the Borg runs Perl. :-)

    Seriously, have you thought about how technological advances are heading directly into the Borg? Cell Phones, ever-exanding WiFi, realtime audio and visual linkups. Research on implanted cell phones,cameras, and locater-id chips. We fought it on Star Trek, yet every techno-advance in the Borg's direction, is heralded as the "newest and greatest thing" which everyone is "herded" into adopting.

    The Borg have reached earth, but instead of forcing us into the man-machine lifeform, they are making us believe we want it, and letting us do it ourselves. :-)


    I'm not really a human, but I play one on earth. flash japh
      I think about that all the time, zentara. I'm a libertarian, and the combination of Big Brother government, Nosy Mother schools, and Idiot Genius high-tech like RFID, retinal scanners, and cheap cameras scares the willies out of me. What's the most appalling is that people just allow it to happen. For instance, FEMA killed off dozens of plane and truckloads of aid for New Orleans, for the simple reason that they weren't in control. Much suffering was prolonged because the bureaucracy was protecting itself, not the people in need. Where was even the "peep!" on the mainstream news?
Re: Look at the Big Picture
by hsmyers (Canon) on Oct 20, 2005 at 03:03 UTC
    The ultimate goal is to get a fix. I came to programming from a slightly differently side of the campus so to speak. In my case my observation that 'all of the patrons had died in the 19th century' sent me across the way to a model 029 keypunch machine. I promptly sat down and said 'I hear you can make money with one of these' and never looked back. What I really discovered is that the 'need' to be creative doesn't care about the 'outlet' and that programming is at least as creative as painting or pottery or sculpture or any of the rest of the fine arts. What's more, all you have to do to clean up is turn the damn machine off---beats the hell out of cleaning brushes!

    --hsm

    "Never try to teach a pig to sing...it wastes your time and it annoys the pig."
      See brilliance or... easy erasure? for my take on your last comment. :)

      I agree that programming is definitely as creative as any form of high Art. It's a different kind of creative, though. Where art aims to mirror or affect the human psyche, programming is about creating an abstract process that transforms a situation. In some ways, programming is by far the easier, and that makes it easier to judge. Does your transformation work? Is the goal accomplished? In Art, there are no metrics. Get twenty people together and ask them what a painting "does" for them, and you'll get at least eighteen different answers.

      In some ways, programming is much more challenging for the brain than art. We have a talent for meta-analysis that is rare in the general population. Holding multiple levels of 'what', 'how', and 'why' in your consciousness is both a talent and a skill. In my entire degree program in college Sociology and Psychology, I struggled to find the rare writer (Ludwig Wittgenstein, Mihaly Csikszentmihalyi, Howard Gardner and Neil Postman, as examples) who struck me as having any grasp of process and interaction beyond the linear.

      A quick fix? Perhaps. I certainly know the heady rush that occurs when you come back from flow after creating a new gem. When I was a child, I was a raw INFP, but as I've grown and developed myself, I now test out as more of an ENFP. {These categories started with Jung and are well worth looking into; test yourself and read some of the comments on the web about _your_ type and those of your associates.} Now, rather than being satisfied with just creating an abstraction, I'm motivated to manipulate the systems of people around me such that my programming changes the way things are done here. For me, it's come full circle, for isn't Art about "moving" people to understand and do things differently? :D
Re: Look at the Big Picture
by aufflick (Deacon) on Oct 21, 2005 at 06:49 UTC
    I'm going full circle! For a job I program in Perl (ultra high level) on pretty serious hardware.

    For fun I'm learning to program the Apple ][ in assembler. I think there will come a day when assembler is taught like Latin is. I like Latin, but eheu (alas) I don't remember much of it.

      While I was building my companies, I had a project to create a little microcontroller-based trainer that was programmed in a combination of LISP and raw assembler. It has possibilities, but I couldn't convince the money people that it had "legs" as a mass-market product. I agree that it's a better way to teach math and logic and the underlying basis of language than the gut-rotting conditioning that goes on in public schools!

      A 6502 is pretty low on the totem pole, although with a whole Apple you have some capability. See if you can get an Atmel Butterfly (~ $20).