Myth: Programmers get to write code all day.
Truth: Most programmers spend a ton of time (in no particular order):
- Carefully composing e-mails to other programmers/mailing lists/non-technical folks
- Sitting in on meetings, working on mockups and DB schemas, worrying about performance implications of proposed features
- Writing bug reports and searching through bug DBs
- Scrambling to figure out why systems with numerous opaque layers are failing, digging through multi-GB log files with command line tools
- Explaining downtime to users/higher ups
- Contributing solutions to strangers’ problems
- Reading documentation/books/programming blogs/release notes/vulnerability announcements
- Searching for existing code that does what you want, maybe without knowing what that’s called
- Evaluating if code you found solves your problem/would perform acceptably/fits in your environment/has a compatible license/has a lasting support community
- Installing, configuring, and testing a codebase then finding it won’t work for you
- Googling error messages
- Digging through public code repositories to see “how [some open source project] does it”
- Learning source control tools, bash, GNU utilities, and Linux file permissions (and/or the Windows equivalents)
- Configuring IDEs, virtual machines, web servers, databases
- Figuring out how to shoehorn together codebases that weren’t designed to coexist
- Determining which tasks to prioritize from an endless supply
Programmer time= 30% email, 30% actual work, 30% socialize
I am amused by the idea of a programmer sitting in his boss’s office being asked about network downtime.
“Why is the network still down?”
“Because I am sitting in your office.”
Basically some stuff listed up there is sysadmin work. Programmers shouldn’t deal with that kind of stuff. Unless the employer has no clue about how stuff should work.
@Dana John Hill: since when a programmer is responsible for the network availability? I guess a network admin is an useless part of the 8th layer.
@SaltwaterC: That really depends on your company. The one I’m working with has not that many employees, so although I’m hired as a developer, I’m also directly responsible for many infrastructure related things.
Necktie: How can I get you to agree with me?
Programmer: Stop being wrong.
@ Dana John Hill nice comment!
I’d add one.
– Explaining what is cache and why to use it to the editors, the managers and the founder of a high profile content based web site.
@SaltwaterC, when non-techinal people catch a programmer, they ask questions that should have been asked to the sys admin. Also, in some companies, developers have ninja skills.
I’d say it’s 30% socialise, 20% code, 50% Nerf. Gunz, baby.
You nailed it. I would add other things in my small company, but in a nutshell :) that’s it!
This is pretty much exactly what I do all day long. I guess you would just need an extra one on there for “getting distracted by random programming blogs and commenting on them! You could maybe merge it with the line “Contributing solutions to strangers’ problems” to become “Contributing solutions to strangers’ problems/reading their blog/and(or) commenting”
Glad to see this list. As a self taught programmer, I never realized programmers with formal training do the same things I do.
It’s a nice relief to see I’m not alone.
In a lot of smaller places you either have a sysadmin doing development, or (more commonly) you have a programmer trying to do sysadmin work.
For the suits, tech is tech and they have little idea of the differences between these two specialties.
As a programmer, I find myself hating the sysadmin work, because I know I am mediocre at best, and I know there are people for whom this stuff is easy. Wrestling with systems takes time away from the work that I actually enjoy.
You forgot to add surfing the internet for more flame wars to fuel.
What about ‘writing blog posts like this one’ ? :-)
So how much actual time is spent writing code? Are we talking 5 or 10 percent? Ouch. That does not sound fun at all. I say this tongue in cheek, as I am a developer myself sitting in a meeting right now.
Maybe a better definition of a person who does all of these things is a Developer? I’d imagine a developer encompassing both a programming/operating role, where as someone hired has a programmer generally has to explicitly only program.
I love when users walk into my office and say, ‘The internet is slow.’ I then pull up one of several speed tests and reply, ‘Wow, look at that, it sure is!’ and go back to whatever I was doing.
“Searching for existing code that does what you want, maybe without knowing what that’s called”
Guilty as charged. Nice List!
Remind me… how did I get here? :)
It all depends on what kind of company you work for. I’ve worked for Fortune 500 companies that won’t allow you as a developer to do your own DB work; documentation and testing. I’ve also worked for small companies were you are the developer and system admin all in one. Generally, as has been noted,higher ups don’t realize that IT is not just a single discipline.
Oh so true…
The entire list… Seriously! All of it!!!
Great list and spot on.
Regarding Dana’s post: most managers are non-technical and don’t have a clue as to what you do and how you do it. If you are responsible for just an application they assume by extension that you are also responsible for the rest of the infrastructure, network included.
Ah ah… Yes… reminds me: Release needs to be out by 12 Friday lunch time. Meeting at 4pm (4 hours after the release deadline) with the big wig (too busy to meet earlier) to discuss what was supposed to have shipped… Who’s doing it, not me I’m stuck in this meeting, who’s testing it: nobody they’ve all gone home…
End of the day, build that thing during the meeting, if it boots at all, ship the darn thing and run away from the office before problem show up…
Surely it should be:
Contributing problems to strangers’ solutions
Yes I do all those things. How else would you get your work done or learn new things? I don’t often build things from the ground up, I’ve got some code snippets for that! And googling error messages, how else do you find out what’s going wrong? Programming manuals never talk about fault finding. Good list though.
@Hannes, I completely agree. It all depends on your company’s resources. The company I work in has an office of 7 people. I end up doing far more than what’s in the list as a “developer”, including less technical related stuff down to office admin, writing company procedures, putting together proprosals, cost estimates, project management….. Seems almost laughable to try and say that “system admin” isn’t part of my job because I’m a “programmer”. Very difficult to pigeonhole when there literally is noone else to take that responsibility.
* Sigh *
Not much mention of doing any kind of documentation in your list.
Probably why your list is so long.
@Mat, yep, forgot about writing docs. I do plenty of that.
To spend more time coding:-
Don’t drink (and so don’t make) tea/coffee (or make it using water from the hot tap – you won’t be asked again)
Never answer the phone (or just redirect to a random 4 digit extension, people WILL stop calling)
Always post questions on forums, don’t waste time working things out yourself, feather other coder’s ego’s desire to demonstrate their skills.
Always nod and say yes to anything in meetings, allow yourself a maximum of 20 words per meeting (ideally all being “yer”), then forget everything that was agreed, as it will all change at the next meeting anyway.
Take lunch breaks at uneven minutes the wrong side of the divide eg 12:22 – 1:37 is an extra 15 mins but is unnoticaeble as it’s roughly half 12 to half past one init! This actually steals from coding time but as me time is not downtime. Always leave your desk for lunch or get hassled by the man!
Most importantly make sure there’s always someone else to blame when things go wrong, qualify things in emails you can resort to, even when there’s no need.
Lastly don’t read or post on blogs like this one, complete waste of time, there are a zillion blogs, no one cares.
etc etc etc…Zzzzzzz
PS – Never vote for socialism (twice the price for the exact same load of bs)
Not much different even at many big places — except that the downtime problems are at customer sites, which is why it’s not your sysadmin’s issue to solve, and it’s escalated up through your own tech support back to you.
..Tendency to write documentation in HTML?
How about writing documentation? Or is that meant to be included in “writing code”? In my experience it doesn’t usually work that way. :)
@Maintenance Man: you’re in a meeting and commenting to a blog post… must be a boring meeting. Maybe you are confusing programming with coding? Personally I’d rather have my programmers researching and thinking and debating, before they start coding.
@Shawn: I partially agree. Programmers have to stay on top of their expertise as well, which requires research. They do have to merge conflicting code bases, and investigate large log files. Our programmers don’t have to solve network problems. We have a network and infrastructure department for that. But they do have to explain down-time, especially if they are the ones who caused it.
In the smallest of companies, like mine, you also get to interact with the customers, fielding support calls/remotes, and doing training…on the software that you designed and wrote. It can be both rewarding and humbling.
I am the other way around. I have been a system admin for fifteen years. Suddenly I am the company’s “programmer”. Try learning how to program at 40.
>Programmer time= 30% email, 30% actual work, 30% socialize
10% reviewing math.
:)
Ditto on the ‘small’* company thing. There is one other tech guy here (my direct boss thankfully)… He might do a little data changing but the sql db is all mine, his responsibilities while he’s out (which are ANYTHING else IT) are all mine.
*Small in this case is actually more just lean IT…
You forgot one . . . a big one – The not so occassional end-user support call that turns out to be a disconnected end-user brain.
Oh! and let’s not forget all the time and self-traing spent on the latest greatest and best technologies that we MUST know that will be all but forgotten next year!
Oh! also . . . . organizing all the change requests that preempt the previous change request that preempted the change request that undid the previous change request that . . . .
I didn’t see anything about technical writing or project management or customer support or database administration or janitorial duties!
One of the reason programmers spend so much time re-learning things is that companies seek to have the newest fad instead of focusing on time tested technologies. I estimate that 9 out of 10 “new” technologies are worthless hacks that dissapear over time. But we are expected to learn them anyway, because we do not know which is the 10th one.
As for meetings. If meetings are long and often, then there is something terribly wrong with your company. Keep a resume ready.
As for socializing. A 100% needed. As without it, trust cannot be born.
Just make sure you still have time alone so you can get “In the Zone”. Which is when you are a 100% concentrated on a task and the world around you dissapear. Aka, your most productive time. Studies have shown that it takes at least 15 minutes to get in this state and that ANY interruption (even a 30 seconds one) will get you out of it. So answering a buddy a question that he might have Google by himself will cost you at least 15 minutes extra.
Depending on your boss, a trick is to wear headphones, so that people think you are listening to something. Thus will be less likely to interrupt you.
Sad but true!
In the company I work for, we have 12 employees in the home office so I am the sys admin, network admin, web master, developer, DBA and Help Desk. I’ve had to do everything from set up a wireless network to set up a Windows Server 2008 R2 box, configure SQL Server 2008, convert Access DBs over to SS 2008, create the company website and set up hosting for it, etc…ad nauseum. Not to mention having to explain how Windows 7’s “snap to” function works for the umpteenth time. I am more intimate with Insanity than my wife. :)
What about security? We should be spending more of our time thinking about it.
Also . . . My boss is a mainframe programmer. I am tired of trying to explain why I need to write classes and loosely coupled code! I have kept our CQRS efforts a secret from him. I don’t have enough time in a day to explain that one.
for small budget company, developer might need to do the job of a sys admin as well.