views:

450

answers:

13

Most of the programming that grabs headlines (the glamor programming) is either Web or game development. I'm thinking that these are not what most programmers work on for a living.

Since I am considering making programming my career, I was wondering what programmers REALLY work on, and by extension, what are the most used skills that a programmer should posses.

I'm not really interested in the languages, methodologies, tools, or IDEs, I just want to know what you usually work on and what knowledge you rely on to get the work done.

For example, if you work on databases, knowing how databases work (tables, transactions, queries) and understanding SQL are what are going to help the most in getting the job done (This is just an example, I don't know anything about database programming).

I'm hoping to use this to help narrow my focus and help determine a course of action for learning.

+13  A: 

I think there really are a ton of people in web development.

But picking the most popular route is not always the best thing to do for your career. Just like in business, sometimes picking a niche market is the most lucrative thing you can do. Take, for example, Cobol programmers before Y2K hit.

I think the best advice I can give is to pick something that interests you. If you're really into what you're doing, then most likely you will do it well, and doing something well is almost always in high demand, no matter what it is.

Lucas Oman
Excellent advice.
Erik Forbes
I second that. Excellent advice for life in fact!
da5id
+4  A: 

The most common type of code that's written?

Bad code.

It sounds funny, and would make a good joke if it weren't true.

The best thing you can do to prepare is to learn good design patterns, and know when to throw them out the window in favor of a quick and dirty solution.

The next best thing you can learn is how to incorporate good patterns into your quick and dirty code, and realize that good design actually takes less time, but you have to really understand how to code to be able to whip out, say, a domain specific quick sort in short order. Google is great, but if it takes you too long to do a quick sort from memory you'll be tempted to turn to a bubble sort - a lessor, but easy (quickly and dirtily) implemented algorithm.

So learn how to do good work in code, and learn how to do it quickly.

Otherwise, it's bad code from here on out, because you'll never have enough time to do it right, and too many managers like to think that there will be time to do it over later.

Do it right the first time, and do it quickly.

Adam Davis
I'm aware that there are better sorts than quick sort, and many languages have these built in, but in too many cases the built in stuff just won't work for a given problem. There's a good way, and a bad way, and if you aren't familiar with both you'll fall into the bad automatically.
Adam Davis
A: 

Most of the programmers I know do some type of web programming... either on the front end (like asp.net, jsp, jsf, ruby on rails, cold fusion, etc...) or they do web programming on the back-end middle tier (web services connected to some sort of database).

You should definitely know more about the guts of web programming (like what a request and respond is, cookies, css, javascript, html, xml, etc...). There should be tons of opportunities for you to find a job in web programming. You choose the language, but personally I prefer ASP.NET & MVC.

Elijah Manor
A: 

In my early career years I relied mostly on my database knowledge, query languages, relational database design, etc.

Then I built upon that knowledge and learned html / javascript for Web presentation.

Now in the last five years I have built further on that foundation with my vb and .Net experience.

Every day I make use of the database skills whether it is T-SQL, PL-SQL, etc. and my HTML / Javascript knowledge; despite the fact that I develop .Net web applications primarily. Also learning Object Oriented programming concepts and design patterns has helped to mature the business logic layers of my applications.

Even as I have begun exploring WPF, my experience with declarative languages is a big help.

In summary, I would say (especially if you are building internet applications) a good foundation of database design, SQL query languages, and html / JavaScript is a great start for building internet applications, which so many organizations are transition to.

Software as a service is right around the corner, and its going to be using web technologies or desktop technologies exposed via the web (Silverlight, etc.).

Good Luck.

Jason Stevenson
A: 

Programmers write the code they are required to write, which could be anything, an experienced programmer is not just a programmer but a web developer as well, he can do both, you can learn HTML Javascript PHP C# C++ D Haskell F# ect ect, and what does that tell you? Some programmers indeed do try to stick to one type of programming be it, web developing, application developing, whatever. But if you want you can do both. Do what you want to do don't worry about what other people are doing. Do what you like, no no DO what you LOVE. I hope you succeed in anything you try.

Rayne.

Rayne
A: 
int myMagicNumber
ScottKoon
A: 

Error handling has to rank pretty high... in a perfect world, with perfect users (who acted perfectly, like me) everything would be much, much easier.

Pat Notz
+2  A: 

The majority of code written is internal company stuff, SQL and various reporting packages. Mostly very dull.

Martin Beckett
Business Data Processing. Big IT. Corporate Back-Office.
S.Lott
ie Enterprise stuff.
David The Man
Although "dull" is subjective - even if the subject matter doesn't interest you, it can still be fun to make the UI and algorithms as good as possible.
Nathan Long
+1  A: 

Each of my development jobs could be simplified as reading a flat file from a mainframe, pushing that data into SQL, and performing an action upon that data. Sometimes it's a GUI to run reports; sometimes it's an E-mail engine. In the end, it's all just code that moves around large amounts of data.

tsilb
A: 

Creating and using API's is what everyone does most of the time. Using API's would be say at 20% and creating API's would be the remaining. So i suggest you learn how to do this creating part (designing + using language features) with care- the languages does not matter but the basic principles (algorithms, data structures, oops etc - software engineering) remains the same.

Specializations exist and you could chose your inspiration - creative UI work, internet projects using web pages, exciting and tough games, thankless back end work, close to the metal type of coding etc. The type of API's you use and the nature of APi's you would create will differ.

But it will be your enthusiasm for the work and the depth of your understanding of the APi's you have to use and your design skills which will make all the difference in varying degrees.

+3  A: 

Create, Read, Update, Delete.

I would guess that more time and energy to into simply storing and retrieving information than in doing anything interesting with it.

SeaDrive
A: 

CRUD Applications Every other business app out there is just Create Read Update Delete

RHicke
A: 

IMO, here are some core skills I think most developers have:

  1. Problem solving. Given something that doesn't work and find out why and how to fix it, would be the generic way to describe this. This involves a bunch of other traits like being analytical, having attention to detail, and following things step by step.

  2. Abstract thinking. This is useful in writing classes to model various real-world objects. This is where you can't physically hold something but have to picture it within one's mind.

  3. Logical thinking. This is also part of the cornerstone where a lot of programming involves repetition and conditions to go with variables and being able to think in terms of steps and how to move from one to another are a couple of key points here.

  4. Seeing things at a high level and low level. Some people can look at a map and see both the little details as well as the big picture. It can be useful to know what is the big picture if your code will be part of some larger system, which is often the case. This somewhat ties into some of the other skills in terms of being used with other things.

  5. Finishing things. Seeing something through all the way. Joel has the "Getting Things Done" phrase for this skill.

  6. Smart or intelligence. This is a combination of knowing things and knowing how to find things out. Part of what Joel looks for in a developer that I think is worth mentioning.

  7. Continuous improvement. How can I do this better? Is there a better way to structure this code? Does the configuration for this seem to be as easy to maintain as possible?

  8. Communication skills. Being able to translate various technical details, ask questions in trying to help someone, or discuss with other developers if I'm having a problem.

While these are rather generic, I think these are a useful base in some regards.

JB King