views:

830

answers:

13

Imagine like an 8-hour long video of any "typical/average" programming job. What is it like? Before I get myself involved in that path, what can I expect?

I am interested in gathering first-hand information and accounts of the typical life of a programmer. My goal is to grasp the fundamental concepts of working in the professional field of programming.

I just want to "see" into what it is/means to come to an entry-level programming job and program. See what kind of skills, mentality, expectations, and such are required.

+3  A: 

The best advise that I can give you is contact some of your friends to identify an opportunity for a "day" internship with at least one company. Ideally you want to see both a start-up environment and a larger company; they are very different in my experience. You may need to put more than 8 hours aside per event :-)

/Allan

Allan Wind
+24  A: 

From my experience, its rarely what you expect it to be.

Programming jobs vary so vastly depending on the company and position that it usually ends up being different from the stereotype, for better or for worse. This is because the stereotype is an average, not a mode or median, in a sense.

From my experience, I'd say the most important thing at a programming job is your boss. A good boss can shield you from incompetent and/or ignorant management. A good boss can help motivate you to do a better job and ensure that people who need assistance can call on resources from other employees on similar projects. Conversely, we all know the legends of what bad bosses can do. If you want to enjoy your first programming job, try to meet the boss before you get hired. Odds are he or she won't be an ideal, but hopefully you can at least avoid the worst of the DailyWTF-level horror stories.

In terms of expectations, I'd say at the vast majority of companies the expectations are probably lower than you think they are. Its hard to understand how people can get away with doing near-nothing for months (a'la a rather famous DailyWTF involving a brilliant Paula) until you actually get hired at a place where such a thing is possible.

The hardest part about a new programming job is learning all the specifics of the application you're going to be working on. I had this especially badly; I dove into a massive system with dozens of applications and tools and knew nearly nothing about how they were coded, and sometimes nothing whatsoever about the basics of the spec that governed them. Despite the fact that I knew far more about my field of expertise than anyone else there, this didn't help one iota when I had to write code for anything outside of it, where I had to learn everything from scratch.

Dark Shikari
+1: Domain knowledge is often the most important and least emphasized aspect of programming.
SnOrfus
A: 

Well, I'm not sure this will answer your questions about how a typical day for a typical programmer will be. But you may think that this captures the overall gestalt and group dynamics of entry level programming (interns, in fact): Project Aardvark Movie

Larry Gritz
A: 

I'm a programmer, My day is full of research, meetings and coding. Sometimes when working on projects there are strict deadlines, and it can sometimes get stressful if you're not on pace to finish. Sometimes I work extra hours. But sometimes in the middle of a project, a client will completely change the way they want things to work, so you have to completely change your code to accommodate for that. It's a pretty cool job though.

DrybLrac
+3  A: 

I can break down my day into various buckets, so here are various pieces that make up my day:

  1. Initial get-in and check on things. This is reviewing any e-mails sent overnight and if anything has happened that should change my routine like if a deadline has been moved or something else happened between my last check and now. This is also looking at a Twitter stream, updating my source code, running tests, set goals for the day, etc.

  2. Resume work from yesterday. This has a few general areas where I can go:

    1. Bug fixing/Technical debt - There are times where I'm trying to improve things either by resolving a functional bug or buy retiring some technical debt by refactoring something that was deferred initially.
    2. Feature implementation - This is the other big general case where instead of fixing something that doesn't work, either at all or just it doesn't work well, this is putting in new functionality and expanding the codebase generally. Usually this is a story that has been carded and I know what the general steps are to finish the work.
    3. Support requests - Sometimes there are requests for assistance on things outside of my current project and thus this is also something that can be on my radar.
  3. Daily stand-up. Stating what I did yesterday, what I plan to do today, and what blockers I have in doing this particular work.

  4. Back to whatever was the second thing and pound through some stuff. Now, there can be times where I have questions for a business analyst or quality analyst so that I can understand the issue that I'm trying to resolve whether this be feature or bug that can happen. There can also be tests getting made, database changes to be handled, some side application made to do an extraction or generate a large amount of test data like if I need thousands of items to test how well something works with non-trivial result sets.

Other meetings can happen but they tend to be a bit more rare, like a weekly team meeting or monthly department or committee meetings. They are part of my job but like filling out time sheets, it is something I do but it isn't really something I cherish unlike solving a problem or getting a big thank you from someone for fixing something that makes their life much better,e.g. I build a form so that they can see inventory levels and don't have to go to a dozen sources to get all the information.

Somewhere in there I squeeze in some reading of blogs, answering questions on SO and other sites. It is a balance of knowing how to keep some skills sharp, whether this be working with other technical people or just co-miserating about things being rather sucky.

JB King
+1  A: 

It really depends on the company...it could be 95% behind the screen doing coding & research with no human contact...or it could be 50/50, with lots of team interaction & meetings with other depts.

With the team, you could do code reviews, daily Scrum's, brainstorming sessions, design meetings, implementation planning meetings, etc.

Ed B
+4  A: 

Software development is driven by projects. It's hard to capture a typical day in the life of a programmer, because this changes at different stages of a project. Since many software projects are now using an Agile methodology, you can look at a programmer's life in an iteration of development (about 4 weeks for us).

I'd say that, realistically, we spend about 20% of our time writing code here. The other 80% is spent figuring out what to write, whether it be in meetings sketching UML models, reading through API or framework documentation, pseudocoding on a whiteboard, idly killing time due to a blocking factor (notice how active I've been on StackOverflow over the past few days?), dealing with customers to clarify requirements or resolve issues, etc. Your experience will vary depending on the industry you work in, the nature of your company, and your boss.

As a junior developer, expect to spend a lot of time reading through documentation, working on bug fixes, refactoring code, and possibly aiding senior developers with testing. Your goal should be to learn the codebase. Don't be discouraged if you're not productive right off the bat... they expect you to be a little lacklustre at first. Troubleshoot problems to the best of your ability on your own, but do not be afraid to ask for help if you do not understand something. If you're anything like me, you'll find that by about the third month you'll know the codebase a lot better, and will have become the go-to guy for a specific part of it. If you want to make yourself truly valuable to your team, find a niche skill that they seem to be missing and fill it. I'm the database and user interface guru right now for my team. In previous jobs, I've been the scripting/automation guru and "the C++ guy".

From a lifestyle perspective, know that you will spend many hours of your life sitting in front of a computer screen, and that you will inevitably work a lot of overtime. Find some hobbies that involve you getting outside or getting active. Invest in a gym membership and find the time to go a few times a week, and PLEASE remember to stretch before and after. Plan your meals ahead... buy as little food as possible (opt for packing home cooked meals) and keep your desk stocked with healthy snacks and lots of water, because the soda, chips, and candy bars at the vending machines sure are tempting. Eat lots of fruits and vegetables at home, because your healthy snacks will probably be rich in carbs. Learn to hate caffeine, but be able to deal with it in dire circumstances or else it won't work when you need it the most. Find a significant other that doesn't mind you sleeping (well, you won't be doing much of it) at the office for a few nights in a row and the effect that this will have on your brain capacity and energy level when you do return home.

baultista
A: 

It depends if you prefer such videos in general:)

If yes it might be very interesting and enjoyable. But as everything it has pros nad cons.

Some advantages: 1. this work is usually creative (compare to accounting...) 2. it keeps your brain fresh (except ocassinal stackoverflows:)) 3. it gives very useful skills(you can write your own blog engine instead of subscribing to wordpress:))

Minuses?: 1. there are so many jokes about programmers... think if you want to be a hero of such jokes

And to be more serious it all depends! From my experience I can tell that work as a freelancer/independent consultant gives a lot of satisfaction. This is a mix of programmer-analytic-administrator-project manager and others works (even a house wife if you work from house and for example do some washing in your breaks). But in most cases this requires some experince gained in some bigger company. But this is is good to keep in mind such possibility if you are in the starting point of your career.

Good luck!

Lukasz Dziedzia
+2  A: 

8:00 AM : Wake up and Check SO reputation, mostly snooze for 15 minutes in case of no points since last night.

8:15 AM : Finally wake up, check mails on phone to make sure everything is fine in office since yesterday. and yes, take bathe and get fresh now.

8:40 AM : Take breakfast. Read news paper if at all feel like.

8:50 AM : Check personal emails[yahoo, gmail], Check SO reputation and feel good to have earned some points since morning.

9:00 AM : Drive to work.

9:15 AM : Start work, Check emails, curse manager for having given stupid odd job.

9:30 AM : Plan daily objectives. Meanwhile, a very interesting question popsup on SO and you feel you're the best one to answer. Put your Superhero suit on and fire the answer. 5 upvotes in 15 minutes. cool.

9:45 AM : SO SO SO...

10:30 AM : SO SO SO... Feel great having helped others

10:45 AM : SO SO SO... Feel great to see yourself advancing from page 24 to page 23 in SO global users' listing here. And think what a great brain Jon has got.

11:00 AM : your colleagues are watching over you and some envy you of your SO reputations.

11:15 AM : Start programming;;;

12:45 PM : programming;;;

13:45 PM : programming;;; , you suddenly realize all have come back after the lunch and you're left alone as usual. Your so deep into your work, you keep programming;;;

14:45 PM : programming;;;

15:30 PM : Ahaa, Taddaa... You're done. You cracked the problem, you feel great but you're an unsung hero. You rock nowhere but SO. Check SO reputation. and go for lunch.

15:45 PM : back from lunch. Check mails, Check SO reputations. Feeling great you're slowly progressing. Deviate from work and read ScottGu's blog, Research on .net4, Check ratings and reviews of books you want to buy.

16:30 PM : Back to work. programming;;;

17:30 PM : programming;;;

17:45 PM : SO;;;

18:00 PM : programming;;;

18:00 PM : SO;;;

18:15 PM : programming;;;

18:30 PM : programming;;;

18:45 PM : Check-in, update time-sheets. Mark assignments done.

19:00 PM : Check SO for the last time for the day before leaving from work. And.. A really interesting question pops up and you put your super her0 suit back.

19:30 PM : All your colleagues left for the day and you're still in the office but happy.

19:45 PM : Back home. Check mails. Check SO [ To see how much the last answer earned you ]

20:15 PM : Dinner

20:45 PM : Watch TV for 5 minutes and feel not great. To feel good you open up bookshelf.

21:00 PM : Wondering which book to read this, this or this. You're reading all three books in parallel. You like all three the books. Amazon ratings are great.

21:30 PM : Reading.

22:00 PM : Reading.

22:30 PM : Reading.

23:00 PM : Suddenly fell asleep. Not remembering you were reading but feeling good for having worked great today.

4:00 AM : Wake up for water. Check SO reputation on phone. Smile and go back to bed.

8:00 AM : Wake up and check SO.... REPEAT

this. __curious_geek
hahah VERY nice! =P
j.
now I know what my life would be like with a 15 min commute and no family commitments!
Colin Pickard
@Colin, yep! ... and no excercise, no food preparation and no other hobbies. What does the 15 minute lunch consist of, the same box of Cheerios from breakfast?
James
+3  A: 

Two words: Office Space.

Chris Lively
A: 

It depends on who you're working for, who you're working with, what you're working on, where you're working...

...usually involves a fair bit of time with a keyboard though.

rich
A: 

Sharing my life instead of visualizing others :-|

  1. wake up after 12pm, miss the classes, miss the appointments, check miss-calls and show excuses to teachers, friends, and parents.

  2. Have lunch, watch a movie or play guitar while checking the emails and stop suddenly at the threat by a client for my exceeding the deadline of product delivery :p

  3. Storm into coding. If I can finish it off by next morning, I the delivery message to client and go to sleep.

  4. If I cannot finish it, I was surely chatting over net while coding. So I send a huge excuse in the morning to the client :-|

  5. I smoke a lot while coding. So I have to live alone.

  6. Go home in the weekends. I don't touch computers in the weekends.

  7. I forget to brush my teeth and bathe if the deadline is reached for a task. Because so far in my life I have started 90% of the programming tasks on the day of delivery. Probably I am too confident, or too lazy :D...But surely I don't care for money...

Muktadir