I've been a professional programmer for 14 years, having started as a high school student (working for the US goverment after turning a summer internship into a full year part time job), and worked in various research and industry positions. I've always done my coding in either C, C++ (for GUIs, mostly), or assembly (I've been working with embedded devices for the past few years), or my scripting in Perl.

When I look at the Stack Overflow questions, it seems like Java, C#, and platform specific technologies (Windows Forms, etc.) represent almost all the programming related questions. I realize that these make up the majority of programming jobs these days, but I've still been somewhat surprised to see a lack of questions about C, drivers, kernel concerns, and other lower-level issues.

Have I turned into a curmudgeon at the tender age of 28? Should I start yelling to my OO colleagues to get off my lawn, and turn the volume down from their newfangled IntelliSense and whatnot, and let me work on my Vim console in peace? Or do the jobs in C et al tend to be populated by people with someone more experience who no longer use the Internet to ask their questions (and rely on 15 year old Usenet posts (I mean Deja News, I mean Google Groups))?

Edit: Someone suggested that Stack Overflow may represent the current state of programming as a hobby, not necessarily that of programming as a job. Excellent point, and one that seems quite plausible.

Edit: I didn't really mean to imply that I think there should be more jobs / positions for C than C#. It's just that when I look at the programs I use, it seems like .NET is much less common than I'd think based on the Stack Overflow questions.

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

This question appears to be off-topic. The users who voted to close gave this specific reason:

"This question pertains only to a specific site in the Stack Exchange Network. Questions on Meta Stack Exchange should pertain to our network or software that drives it as a whole, within the guidelines defined in the help center. You should ask this question on the meta site where your concern originated." – Martijn Pieters, ProgramFOX, Flyk, Monica Cellio, MichaelT

Given the quality of some of the answers, I sincerely hope not.
–
RobJan 31 '09 at 18:56

You spelled Perl with a lowercase 'p'. Expect brian d foy to swoop in at any moment and correct it. :)
–
ベレアー アダムJan 31 '09 at 19:01

not really sure what you want here - being an internet site there's probably a skew towards younger, web-facing developers, but it's probably a representative sample generally. And yeah you C guys are dinosaurs :P
–
bananakataJan 31 '09 at 19:12

2

"It's just that when I look at the programs I use, it seems like .NET is much less common than I'd think based on the SO questions" - I suspect that "programs you use" aren't representative of "programs written"; it immediately removes all internal apps, for one thing. Where do web apps fit in, too?
–
Jon SkeetJan 31 '09 at 19:30

1

I'm 34 and Love programming in Java, that being said I also Love assembly. One is not exclusive to the other.
–
WolfmanDragonJan 31 '09 at 20:03

Define "programs I use", cause you use a lot of programs not even knowing. Like cash register applications, health care systems and a whole lot of other line of business applications that serves you every day of your life. I'd say they'd be more like written in C#, Java or VB than anything else.
–
Patrik HägneFeb 1 '09 at 10:51

21 Answers
21

Think about how many .NET and Java developers there are compared with kernel developers. Is it any wonder there are more questions about .NET and Java?

There's probably some element of "kernel developers don't need to ask the same kind of questions, or look in different places" but I think there's also a large element of "most software development is high level." I view that as a good thing, personally - while low-level knowledge is a good thing to have, I would be quite worried about the state of computing if a large proportion of developers were writing drivers and kernel modules.

Or especially if they were writing driver and kernel modules and needed to ask for help here. ;) That might be a part of it too. People generally don't write drivers unless they know what they're doing. If they don't know what they're doing, they're (hopefully) put to work on less critical tasks.
–
jalfJan 31 '09 at 20:03

1

Except asking questions on SO isn't indicative of someone who doesn't know what they're doing. I know what I'm doing, and yet still ask questions here on occasion.
–
Erik ForbesJan 31 '09 at 20:37

You also cannot assume that all questions asked are questions that the questioner doesn't know the answer to; some questions might be asked merely because they could earn the questioner some SO rep. Hence you might experience skewed data.
–
vansllyFeb 1 '09 at 5:56

SO should also be viewed as a means of getting answers faster than by other means---the rep system ensures that the best answer comes to you quickly, as opposed to Google which isn't incentivised in this way.
–
Eric SmithFeb 1 '09 at 8:13

I don't know that SO tags are representative of the kinds of programming done these days, yet. I think it's probably skewed as a result of the initial population being heavily weighted towards Atwood and Spolsky readers. Over time this may or may not change -- it's hard to say how a community will grow. Compared to the number of people who write web apps the number of people who deal with kernel programming, device drivers, etc. is reasonably small, though. I think it's likely that the emphasis on technologies related to databases and web programming will continue to be dominant on the site.

The bulk of questions on SO are related to Platform or API Frameworks as opposed to raw programming language questions. When you think about it, most professional programmers become expert in a language pretty quickly and won't have questions like:

What's the difference between a reference and a pointer? [C++]

What's the difference between require and include? [Ruby]

However, it's much harder to keep an entire platform/API framework in your head and this is often just as important to getting your job done. So, the following type of questions are the types of ones that are often best answered by consulting your peers:

How do you detect a CD eject on Windows?

How do I install something in System Preferences on OS/X?

... which is exactly what SO is good at!

But, don't lose faith: expert knowledge of programming concepts and languages is just as important today, even if the volume of questions doesn't reflect this.

Judging from how hard it is to hire a good C programmer these days (see e.g. find-software-developers-who-see-the-light), and also thinking about the skills of the people we interview at my company, it seems that there are defintely more .NET and Java programmers around than C or assembly programmers. If you ask some youngster which language he'd like to learn (or use on his job), I don't think C or assembly would come up very often, either.

So yes, I do think that SO is a pretty good measure on which programmign technologies are most used nowadays.

Certain groups of programmers tend to think "I find the information I need on the internet" while others think "I figure things out by myself". Some think "I participate in online communities" while others think "I discuss technical issues with my coworkers".

In my career, I've seen a correlation between these attitudes, the types of software folks want to work on, and the technologies they want to use to create that software.

Furthermore, certain topics are more suited to online discussion. Comparing driver development to line-of-business applications, the latter has orders of magnitude for people working on them, and they tend to be solving the same kinds of problems over & over, while the former is a smaller group who are solving problems specific to their situation.

Stackoverflow questions and questioners are self-selected. Compared to the entire population of things people are working on, StackOverflow will exhibit selection bias:

Users biased toward some personal demographics more than others.

Questions biased toward open systems or at least open APIs - because those questions are more likely to have a larger number of users here who can answer them.

Questions biased toward community projects more than proprietary development. For some projects it's not OK to admit you don't know the right technique, and it's not OK to leak any details of what you're working on.

Questions biased toward new, fast moving, or immature platforms and systems - because there are fewer well-worn FAQs around, and learning a new system is more likely to generate questions than doing something you're familiar with.

"New" is weighted by "new to you" - and I think the large number of Java and .NET questions reflects the large number of "you" doing new development work with those tools.

In summary, the samples you see are "at the margin", more heavily weighted where questioner population is changing the most, where new questions are arising rapidly, where communities are large enough or growing enough so that it's likely somebody will answer a new question, where there are fewer established sources to be consulted first, and where you don't get in trouble or embarrass yourself by asking in public.

Yes, I think StackOverflow is a good Barometer to see what's really cooking in the programming world.

Microsoft can do what they want when it comes down to presenting new technologies, but this shouldn't mean everyone is using it right away. So StackOverflow is good to see what new technologies (and old ones) are still being used, since we're all active in software development.

About young vs. old: I think the 'older' languags will always be important, since there will always be legacy projects that need maintenance. And if an older technology works, why not stick to it?

On the other hand a lot of companies start up new projects using some of the latest technologies. And it's also something the younger generation of developers like me (lol I'm 28) need: new challenges, new stuff to learn.

Maybe one day I'll get "stuck" in one or another technology too, but only if I really like it.

I am not sure if it represents the current state of programming so much as it represents the current state of the Internet, and more specifically the problems finding good solutions via a search engine (Google, live, etc.).

I've discovered a couple of things. First, there is an incredible amount of "pollution" especially in the Microsoft/.NET world. Hundreds and hundreds of sites scraping and reposting information from Microsoft, its bloggers, news groups, etc. so if you do find a unique set of keywords that match a solution for your particular problem, you'll still find the first 3 pages of results are basically the same bit of information repeated over and over and over. (It's been a while since I've worked in the Java world, but I don't imaging it's a whole lot better.)

I guess as long as there's money to be made stealing and reposting content, it's going to be this way.

The other problem is that there are so many programming sites where people can post information with no review, etc. - and this information also gets repeated over and over, even when the code and techniques are completely wrong. Try doing a search for the "best way" to create a singleton in Visual Basic, if you want to see what I'm talking about.

I would say the answer is yes. I remember times when I was looking for websites dealing with Python, for example, and didn't find many. Recently I continued an old C++ project and was googling for certain API calls and the results were mostly C#, Python, and other modern languages.

Furthermore, don't forget that C++ is mainly used for desktop applications, whereas C#, Python, etc. can also be used for web applications, where more people can achieve easy results without being very experienced.

It's extremely naive to think Windows and Open Source are mutually exclusive. The majority of open source code is, GASP, written for Windows.
–
Neil NDec 31 '09 at 3:23

3

It's also extremely naive to think that Windows guys are running around down voting all the non-windows questions.
–
Neil NDec 31 '09 at 3:25

I'm an Open Source Windows and a Linux Embedded Proprietary guy ... should I up then unup or down then undown vote your answer ?
–
Howard PautzAug 28 '13 at 4:14

@HowardPautz you could look at the date of the answer.
–
steschAug 29 '13 at 20:35

@stesch - I did :)) this question is still interesting to me. (Not shooting for the Comment Necromancer Badge (if they're were such :)) So, I'd be interested to hear what you think now nearly 5 years later ?
–
Howard PautzAug 30 '13 at 1:36

It might, however, represent the current state of the programming hobby. The askers here are probably people asking because they have found something of interest, but need help understanding it completely, rather than because of that task the boss gave me, which I don't know how to solve the best way.

Another theory is that the specialty groups (kernels, drivers) are not here (perhaps even because everyone is asking about Java and C#), but in their mailing lists. And they have probably been doing their stuff for quite some while already, so they know their stuff.

Besides, (I'm assuming here, I have no first-hand knowledge) the low-level stuff don't change nearly as much as the high-level stuff. If the foobarometer-chip has a working Xyzzy-driver for YourOS, you probably don't need many more. On the other hand, there's always one more Rails behind the corner, that people get excited about, but don't know how to use.

I mean, there are more than 150 active Linux deveopers, and AMD/Intel/nVidia are still around, so I'm sure someone is still doing the low level stuff.

I'm 45 and been programming since I was 16, which was 1980. I think this site reflects current activity to a pretty good degree. I see a lot of reflection of work that I've done recently, such as agile, rails, and patterns. Some things that I've used that are pretty current don't seem to show up much here, for example, GWT and Hadoop (cloud computing). So, it's pretty good, but there may be some gaps.

So there are a limited number of problems that involve kernel development, driver creation, and cases where C is the best language. I am a huge advocate of using the correct tool for the job. Most of the time I use C# since it is what I am familiar with and it allows me to accomplish projects in a time efficient manor. I am also using F# in day to day development.

Most software is written to accomplish certain business goals and the questions asked here reflect the current technologies in use. It is no longer reasonable to use C to develop a new line of business app since the cost of having a C app written properly outweigh the benefits. There are cases where C is the best choice to solve the problem.

In the work that I do there is a mix of C#, F#, Managed C++ and native C++. There are also alot of questions that I would not ask on the site since I feel (rightly or wrongly) that I am unlikely to get a good answer.

If you like C there are going to continue to be jobs for both new development and maintaining code bases. If you like writing kernel code there are certainly various places around the web that kernel developers congregate. Stack Overflow seems to represent a broader development perspective. I do enjoy posting here so even though I work on software where I am unlikely to get answers on some of the deep questions I have I will continue to ask questions here and occasionally provide some useful insite.

I would say SO reflects the lagged state of what is new and the current state of what is topical in the industry, rather than the overall state. SO is a reputation economy, and currently you can get more answers, more quickly to "How do I {x} in [n]Hibernate" or "What's the equivalent of {construct} in {old language} for {popular language}" more quickly than you can to questions of the form {I don't know enough about kernel development to ask an intelligent question, let alone give a general form} because the immediate demand for the former is currently high, as is the supply. If the demand is high, then the technology is either new, or being applied in a novel way OR is something that lots of people are needing/wanting to learn to use at current time(e.g. {what's the correct syntax for this SQL query}) If there are a high volume answers to meet the demand, then the technology must not be too new, or fewer people would know how to respond.

It probably represents the state of enterprise programming rather than the entire programming industry. A lot of programmers work at enterprises rather than software houses where the enterprise is focused on an industry other than software development. As such, they aren't working on monolithic projects where they can become domain experts readily easily. Their days are spent jumping from task to task and dealing with a lot of disparate issues involving a lot of different technologies. They find out enough to solve the problem then move on to the next issue. This is where you get all the C#, .NET and Java questions from as they are what is mainly used by the enterprise.

Programmers in software houses generally get to work on the one project using the one set of technologies and so can become domain experts. They also have Bob, the really smart developer, within shouting distance and Bob will have been working with those technologies and on this project for ages so when you need to know how to kerfungle the blixxam, you don't need to jump on the Internet, you can just ask Bob because he has been kerfungling blixxams for years. Enterprise teams tend to be smaller and thus usually have less depth of experience that they can call on in-house.

The same is true of people doing side projects or hobby developers, except here you probably get more Ruby, Python, etc.

(Note I am not disparaging enterprise software developers - I am one, and this is the reality I deal with every day.)

I think the fundamental point to make here is that there aren't very many people doing low-level programming nowadays. Writing a kernel in C isn't a common activity. Writing software in Python that runs on a kernel someone else wrote in C, however, is all the rage.

I'm inclined to say that this is a good thing. Low-level kernel/driver programming is really important, but largely because it creates a foundation for the actually interesting software that people use. Sure, this software could also be written in C or assembly, but that's a lot of extra work for little benefit in userland software.

There is a reason that C has fewer questions and C# has more questions on SO not related te the number of programers out there. This is that C has the book K and R (wikipedia link), a ~270 that describes the whole language. When I have a question about C I first pick up this book and most of the time find an answer. More complexe and newer languages such as C# are going to generate more questions because of the fact that they are more complexe and newer. These factors do have an effect, but to what extent is hard to say.

C# has a book which describes the whole language: the C# language specification. It's longer than K&R, but freely available. It's worth noting that relatively view questions tagged "C#" are actually about the language - most are about the platform IMO.
–
Jon SkeetFeb 1 '09 at 8:23

Do you think that a bigger percentage of the C questions are about the language?
–
lillqFeb 1 '09 at 9:45

You should also remember that technologies and programming languages that have existed for a while longer than C# and .NET have already created lots of communities. It's not like the people using those technologies had nowhere to ask their questions before SO came along.

This, coupled with what others have said, that the initial crowd was most likely attracted through the Joel/Jeff connection, I'd assume that the only indication you can gather from the questions and tags on SO is what kind of people is using SO at the moment.

Do not fall into the same trap that many creators of online polls seems to fall into, that most of the people that answers those polls seems to be very well aligned with the creator of the poll. Well, duh, there's a reason they're reading the poll in the first place, they was already on the site.

So that there aren't many kernel programming questions here could mean a couple of things:

Yes, it could very well mean that there aren't that many people out there doing this kind of programming

Or it could mean that those programmers have a good grip on their technology level and thus doesn't have to ask as many questions

Or perhaps they have communities set up already and doesn't (feel the) need to venture a lot outside of those

I don't think we should consider SO the full population of the programming world just yet, nor that it represents a good enough cut of it to represent all groups.

I think this is also related to the personality of people who "ask and answer the questions".

The answers received in most polls will tell you mainly the opinion of people who "answer forums" rather than the population in its entirety, or prefer one direction instead of another.

I think there are plenty of programmers who like to adopt new(ish) [relative] technology (or types of technology rather) faster and more easily than others.

One who likes to delve in low level C coding would not be expected to be so keen on a site which started off as an experiment in ASP.NET MVC, or at least perceived as such from some outsiders.

One would of course expect more feedback from users of a technology that are more web related, since this is a new forum-like developed by/in/with if not for adopters of new web technologies (namely ASP.NET MVC, compared to Kernel development is new).

This fact alone, would mean you can expect to have a more affluent participation from coders in web related projects with use of underlying technology which can, but must not be necessarily web friendly related frameworks.

Then there is the status quo factor playing into it, once it is seen and perceived as a "mostly this" or "mostly that" technology site, shunning starts to happen from the groups of people who feel left out, creating a snowball effect on the whole thing.

My 2 cents, I think SO is driving (in the right direction) many of the programmers of today with an overall message of:

I think this the idea behind SO, and the more people consider cooperating as a means to learning, the better.

Lets all continue to improve ourselves and whoever wants to jump in the band wagon.

[Edit] The current state of the programming industry is one still changing quite significantly, most of us are having a great deal of work keeping up with both the latest requirements and capabilities in our field, SO represents the curve in the sense that we are all striving to ride the wave of new stuff coming up all the time, and we are all asking each other the same questions because most of the time, we want the same answers.