Showing posts with label TheJob. Show all posts
Showing posts with label TheJob. Show all posts

Monday, January 14, 2019

Artful Digression


This blog is focused on the art and science of software development, but I don't want to imply that the contents herein represent a full picture of a programmers life. A great deal of outside experience ultimately influences your qualities as a software developer. This varies by person and personality, but for me the key outside activities for success are reading and walking.

You should make an effort to discover various trade and technical magazines, even publications related to your specialty that you wouldn't otherwise consider visiting. You should make an effort to research the state-of-the-art in the business use of computers as well as strategic advancements happening in your industry and related industries. I also recommend a broad general reading background of a variety of magazines: you never know when a strange juxtaposition of unrelated ideas will lead to a new breakthrough.

I can't overstate the value of walking. Not only does it clear your head of the clutter and confusions of political interests, the rhythm of your legs and the change of natural scenery will make you more aware of the proper balances in design. It will help you create a more naturalistic and organic path for your growth. Walk. Read.


Friday, December 14, 2018

The Art of the Job


Every couple of years my mom asks "What exactly do you do?"

Exactly? Well you see she only knows about computers from her laptop and the internet. So what does the job of being a software developer actually consist of? The easiest way to describe it (the work-work part of the job that is, aside from the social or sociological part of the job) is in terms of all of the steps involved in battling through a software project. This is the so-called SDLC, the software development lifecycle:

Research current and near-future relevant technology
Interview or focus sessions with clients
Develop implementation alternatives
Research vendors
Review alternatives with management
Develop a project plan
Develop functional specifications
Design data flow and data structures
Develop design specifications
Design draft of interface
Various programming tasks
Unit test programming
Software corrections from unit testing
System and stress testing Software
Corrections from system and stress testing
Alpha testing
Software corrections from alpha testing
Regression testing
Software corrections from regression testing
Technical documentation
Develop implementation plan
Develop training materials
Develop online help
Beta or parallel production testing
Training
Post implementation corrections
Production Support

Well yeah, it's a lot of stuff, and it's what makes the job always interesting and challenging.

Tuesday, July 17, 2018

The Art in Value


One of the challenges in a creative profession is managing the perception of your “value” including the work that you perform, the objects that you create, and the temperament that you nourish. These are truly three independent metrics.

Due to the demands of the profession and its continually advancing technologies developers tend to dwell more on what they already know (or what they need to learn) rather than focusing on how others perceive them. As software development is both an art and a vocation however, it is important to pay attention to both your internal qualifications as well as the perceived external value that you add to your job.

The value of your physical software development opus is fourfold: it may provide a revenue stream by itself, it may tender “goodwill” to customers and draw them in to purchase other products, it may offer cost savings as the business operates, and finally it may give a strategic advantage by opening new markets that create unique services.

The value of the product you help design is a separate matter however from the value of the actual work that you perform. Somewhat impishly, you can lead a project that creates the next YouTube and still only get paid like a system designer. Your employer compares your base salary to that of any other developer they could hire off the street. The cost of a foot of electrical wire inside a jet plane is the same even if you only use it to connect your power outlet to your reading lamp.

But now let’s consider your actual value as viewed by your employer. This is a more nebulous quantity that relates to a host of factors, many of which are strictly outside of your vocation. Are you a healthy employee? Then you add value by your contributions to the company’s medical plan. Are you cheerful and easy to work with? Then you add value by improving the morale of the workplace. Are you a good mentor? Then you add value indirectly through improving the productivity of others.

As a professional remember not only to stay sharp on your skills, but also to pay attention to the art in your value.


Friday, October 20, 2017

Artful Hacks


Some I.T. personnel are as far apart as the East is from the West. Three metrics separate the developers from the management:

+ Easy to use
+ Fast
+ Proprietary

You see from management's perspective, software and file formats should be fast, easy to use, and universally available. In this way the company avoids being locked in to knowledge experts or particular vendors.

The developer however actually prefers the opposite: software and file formats that are cumbersome, resource intensive, and proprietary. In this way he can become an expert and increase his value to his employer.

So with both sides pulling in opposite directions what actually gets developed, what can possibly morph into physical being? Somewhere amidst the massive amounts of energy used in the politics and positioning of the two sides something springs up in-between.

Irrespective of the methodology employed or the layers of middle management helping to assuage differences, software developed in a corporate environment ends up partially complicated in the more obscure parts, just fast enough to get the job done, and reliant upon one or two inside hacks. It can be no other way.


Thursday, April 16, 2015

Artful Notes


It’s difficult to be a successful developer unless you keep prodigious notes. Notekeeping can be an art all its own: it’s really counterproductive at the point of code development if you find yourself with a huge pile of disorganized Post-Its of the use-cases.

While you are in the midst of designing software the useful information pours in across scenarios with a wide variety of formats. You may hold a meeting where everyone is talking. You may receive a PDF specification from a vendor. You may pick up the phone and chat with a colleague to answer some questions. You may shoot off an email that causes a cascade of responses. You may read something relevant on the internet at home. How can you possibly keep track of all this information in a sensible fashion?

Many of my developer friends like to keep spiral notebooks, but I’ve never been able to easily find what I’ve written previously. I prefer a mixed approach. I use a PIM (personal information manager) to gather and automatically categorize short sentence snippets of concise information. I keep folders organized on the network for documents. I also keep hardcopy in manila folders for documents that I think will have lasting importance. I keep a folder in Outlook for each gigantic-scale project. And I use Google Desktop to find my way amidst all of the detritus.

In meetings I take a single loose leaf of paper and then either transfer my notes afterward to my PIM or a more formal document to mail or file on the network. When I'm not at work I also *always* carry a Kindle for any spur-of-the-moment revelations.

Notekeeping is complicated: experiment with different methods and software to find something that works efficiently and correctly for your own style.

Wednesday, July 17, 2013

The Art of the Stretch


Many things that contribute toward a successful software-development career have nothing to do with people skills or even with technical knowledge. A larger part of accomplishment than you imagine simply has to do with being comfortable with the physiology of an “office job.”

Essentially you sit in a chair a couple feet away from a screen with your hands on the mouse and keyboard all day. Folks euphemistically call this a “sedentary” job. Don’t think for a moment this implies that you lie in a hammock twirling a double mocha cappuccino.

Due to constantly changing tools and requirements the job is full of stress. Other stressful factors include too much work, frequent interruption, unclear or late information, career and job politics, and the pressure to outperform associates. Programming can feel as if you have five pots on the stove, the microwave whirring, and both ovens going, all while you are mincing onions.

So although the job is sedentary in the strictly physical sense it is far from stress-free. To really succeed you need to develop a strategy that fully mitigates this stress; here are some techniques I have used to good effect. First, why do you need to pile additional stress onto your work from commuting? When you drive your car to your job listen to something enjoyable or motivating. Or better yet ride public transportation to work and multitask your relaxed commute with some reading. When you do drive experiment a bit to discover which routes are the most scenic and least crowded.

Learn how to organize and plan at work. This mostly relieves stress by a process of self-education: once you get a good concept of how long things take you can also plan for your own personal slack time. Heck even back in school they allowed for “recess.” Pace yourself: avoid back-to-back scheduling and trying to fit too much into one single day.

List the things that you have to complete by priority; by accomplishing what is most important you will feel more serene. Don’t fret over finishing every last thing: modern lean-running offices always have more to do than the time available. Rest assured that most certainly your boss feels the same overwhelming inflow.

Laugh! Don’t overdo the clowning around, but when you find something appropriately humorous share it with your friends at work. Try to leave earlier in the morning. Even 10-15 minutes can make the difference between a frantic rush to your desk and having time to ease into your day. Stop adding to your stress levels by running late.

Finally, exercise. Every couple of hours take a brief break from your work to walk around outside, thus allowing your eyes a varying distance of focus. Do some carpal tunnel stretching at your desk and during your breaks. Pay attention to your sitting posture and consider the ergonomics of your work environment. Every so often sit quietly, turn on relaxing music, breath slowly and deeply, and stretch.


Friday, February 8, 2013

The Art of Compatibility


What does it take to be compatible with a long term software development career? Quite a bit, actually.

At inception projects may call for numerous meetings so you need to develop courtesy and show some ability to conduct the initial interviews with a bit of panache. If you naturally have the skills of an insightful listener then you may tend towards gathering requirements and performing analyses.

If you’re leaning heavily toward analysis then you will need to develop an understanding of strategic planning and what goes on behind the scenes in your company and in your industry. For management-facing positions writing and salesmanship talents are also essential.

If you’re more inclined toward the technical aspects of the profession then you need a strong grounding in logic and the aptitude for being well organized. Patience, research agility, and persistence will carry you far when you are coding.

A fair portion of your work will be teaching people how to learn to be competent in technically challenging tasks or instructing people on the intricacies of how your software operates. You must develop a patient and understanding attitude with those you teach: what may be obvious to you might be opaque to others.

Although creative work is satisfying since it entails “discovery,” you must be comfortable with continually learning and furthermore you need to be a self-motivated learner.

So to summarize, if you are thinking of pursuing software development ask yourself:

- can you write?
- can you sell?
- are you logical and organized?
- are you patient? persistent?
- are you competent at research?
- can you teach others?
- do you love to learn?

No two artists have the exact set of matching talents; the same is true for software developers. Maybe you’re more of a jazzy musician, fast to learn and improvise. Or maybe you are a patient oil landscape painter with a keen sense of planning. Although a handful of personality traits favor the profession, few need all of these talents: software development has enough sub-disciplines that you will easily find a niche dependent on your matching strengths.


Saturday, August 20, 2011

Artistic Growth


More than most professionals (perhaps with the exception of doctors) software developers contend with change and growth.

Outsiders identify the instigators as advances in hardware and new deployment platforms, but when you're deep inside the works -- a fish in the fishtank -- the view of change and growth are quite different.

From inside you see your assignments and what the nearby developers are creating, along with occasional somersaults from the development environment. Food drifts down in fits and starts. Occasionally you get a new bubbly castle.

In the workplace you tend to get caught up in the office rivalry to impress your boss with your capabilities; you want to eventually move up the ladder from programmer1 to the lead software architect. In this industry staying static -- just creating with the same level of technological adeptness -- is a certain downward spiral. It's like being a plastic plant: you may look really good all the time at just one thing, but nobody is going to get terribly excited over what you have to offer. After awhile you will disappear amongst the accumulated algae.

People acquire skills on the job in various fashions, with as many styles of growth as fish have personalities. One key element to success however is to challenge yourself by volunteering when you smell opportunities. The way you move beyond what you currently know is to step outside of your comfort zone and offer to assume responsibility for something that is slightly beyond, slightly harder than what you think matches your present capabilities. Then the only way out of this predicament is to learn new things and to ask for help.

You need to make an occasional leap out of the fishtank into a new body of water, spawn and reseed yourself once in a while. Growth is all about the research, the struggle, and the experimentation. And more than anything growth is about the stretch.


Sunday, June 5, 2011

Artistic Targets


Unfortunately it's exceedingly difficult to be both a great painter of landscapes and a great portrait artist. Or to be an exceptional travel writer and an author of thrillers. For similar reasons, developers end up specialized toward specific targets, across the dimensions of both deployable device(s) and targeted subject matter.

Sure some of this happens because we get typecast, but mostly this is due to time limitations: to excel at user interface design or a particular IT subject matter you must invest the effort to become totally immersed and familiar with it.

Yet as an artist, it also benefits a developer to expand his repertoire to adjacent presentation formats and related business fields. This is easiest to accomplish at the fuzzy borders of both. When you are designing a web page, see if you can also do a "light" or a mobile version. If you are working on CRM development see if you can stretch into analytics.

The main benefit of this -- aside from the obvious increased skill set to offer employers -- is that (like an artist) your new experiences will cross pollinate with the old, making both stronger. This is only beneficial to a certain depth however: if you attempt to be a jack of all trades you will find that you are a master of none.