[Curiosity] What does the "average" C++ developer work on?
-
By requiring years of experience, they can dictate what they are going to pay you. And most importantly the majority of applicants are kids who can barely write a 'Hello World' program. Talent is not so common these days and when a manager finds someone with talent, he tries to demean the person and assaults his experience and questions it. The Real ProgrammerTM fails while someone with a fast tongue gets the job.
NULL
Mechanical wrote:
someone with a fast tongue gets the job
Only if your prospective boss is a woman.
-
Diplomatic answer: I'd suggest "average" is a meaningless concept in as diverse a profession as software development, and doubly so among developers using a language like C++. Honest answer: Quite frankly average implies, well, crap,* and that's not at all ideal, really. * That might be in part because I'm just coming down from #accu2010[^], which always reminds me what "Advanced" or "Expert" can really mean. Most of us have a long, long way to go to reach that level.
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
A bit touchy, are you?! ;) For the sake of your understanding, in this case, average means those who are NOT working on OS development or other marginal but necessary task that are most likely going to be a mixture of ASM, C, C++
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
A bit touchy, are you?! ;) For the sake of your understanding, in this case, average means those who are NOT working on OS development or other marginal but necessary task that are most likely going to be a mixture of ASM, C, C++
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
Not at all. Buzzing, in fact. :) My reference is merely to the fact that if you spend any time out there learning outside of the typical environments most of us only get a chance to experience, you very quickly realise that the "average" bar is pretty damn low. In an average environment, the devs don't even begin to fulfill their true potential because of corporate intertia, lack of awareness that "there may be a better way" and so on. The result is one we're all familiar with: far too much untestable, bug ridden, crappy code, and devs who are terrified of merging changes, let alone refactoring to patterns or learning how to use the Standard Library properly. It's a human problem rather than a technical one, which means far too many devs (and their managers, and the organisations employing both) run away from it. Those who do try to effect change to improve things are frequently shouted down or ignored. But then, having spent a week hanging around with leading developers at the Conference my perspective is somewhat different from the days before I started going and thought MFC was a good idea...
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
-
A bit touchy, are you?! ;) For the sake of your understanding, in this case, average means those who are NOT working on OS development or other marginal but necessary task that are most likely going to be a mixture of ASM, C, C++
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
Not at all. Buzzing, in fact. :) I did write a long reply to this, but lost it. :doh: However, the gist was that if you get out there and learn from those who get the time to actually figure out what really works in our industry (reading lots of tech books is a start), you're well above average. Quite soon you'll realise that the "average" bar is set very low indeed. Most devs rarely learn anything they aren't told to, and that's just tragic. The result is crappy, untestable code, poorly designed UIs and a strong resistance to organisational change. Quite frankly the contents of a copy of "Modern C++" would terrify many of them. Templates? Well designed interfaces and APIs? Design by contract? Fat chance. I've been there, and I'm sure that in the past I've been as much part of the problem as anyone. Fortunately, we all have a choice, and I've chosen to actively work to change that. :rose: So, do you still want to do what "average" folks do, or do you want to do what exceptional folks do? It's what you make of it, not what you work on.
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
-
Not at all. Buzzing, in fact. :) I did write a long reply to this, but lost it. :doh: However, the gist was that if you get out there and learn from those who get the time to actually figure out what really works in our industry (reading lots of tech books is a start), you're well above average. Quite soon you'll realise that the "average" bar is set very low indeed. Most devs rarely learn anything they aren't told to, and that's just tragic. The result is crappy, untestable code, poorly designed UIs and a strong resistance to organisational change. Quite frankly the contents of a copy of "Modern C++" would terrify many of them. Templates? Well designed interfaces and APIs? Design by contract? Fat chance. I've been there, and I'm sure that in the past I've been as much part of the problem as anyone. Fortunately, we all have a choice, and I've chosen to actively work to change that. :rose: So, do you still want to do what "average" folks do, or do you want to do what exceptional folks do? It's what you make of it, not what you work on.
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
I guess I could simply look at Seek[^] to answer my own question! I am not really looking at excellence ... but just at the job market and if it was worth it.. Recently I stumbled upon a C++ article and I wondered, should I have a new go at C++? Would it help me find a job or do a "better" job at what I'm doing now.. (mostly C#/WPF/Silverlight/WCF dev)(as in same development productivity but more performant code) and as I am thinking that it would be just a bad idea to do what I do in C++ I am looking for proud C++ developer who can tell me why working in C++ was the best thing that happen to them! Incidentally that will give me an idea of what new opportunity C++ experience can open to me!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
Not at all. Buzzing, in fact. :) I did write a long reply to this, but lost it. :doh: However, the gist was that if you get out there and learn from those who get the time to actually figure out what really works in our industry (reading lots of tech books is a start), you're well above average. Quite soon you'll realise that the "average" bar is set very low indeed. Most devs rarely learn anything they aren't told to, and that's just tragic. The result is crappy, untestable code, poorly designed UIs and a strong resistance to organisational change. Quite frankly the contents of a copy of "Modern C++" would terrify many of them. Templates? Well designed interfaces and APIs? Design by contract? Fat chance. I've been there, and I'm sure that in the past I've been as much part of the problem as anyone. Fortunately, we all have a choice, and I've chosen to actively work to change that. :rose: So, do you still want to do what "average" folks do, or do you want to do what exceptional folks do? It's what you make of it, not what you work on.
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
Also.. I had a few poke at C++ many times in the past but it did not fit my idea of fun, which requires to be able to spin a nice GUI on top of whatever mad algorithm I'm playing with.
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
I guess I could simply look at Seek[^] to answer my own question! I am not really looking at excellence ... but just at the job market and if it was worth it.. Recently I stumbled upon a C++ article and I wondered, should I have a new go at C++? Would it help me find a job or do a "better" job at what I'm doing now.. (mostly C#/WPF/Silverlight/WCF dev)(as in same development productivity but more performant code) and as I am thinking that it would be just a bad idea to do what I do in C++ I am looking for proud C++ developer who can tell me why working in C++ was the best thing that happen to them! Incidentally that will give me an idea of what new opportunity C++ experience can open to me!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
C++ is a deep and complex language, and more suited to some tasks than others. You can use it to develop UIs of course (just, please, not in MFC!) and to do all sorts of interesting stuff. It is, however, a language that allows you to hang yourself real quick. It's one you will never completely know (I'm more conscious now of how much I don't know than that I do), and one in which crappy code will be harder to fix than almost any other. C# it isn't. So yes, feel free to dive in and learn. Do understand however, that what you write will almost always be sub-optimal, and be prepared to learn and continuously self-improve accordingly. If you can do that and you have an interest in (e.g.) performance and complex systems, C++ is well worth investing time to learn. With C++ 0x just around the corner, the language is about to take a huge step forward, too. When I was learning I started with the Lippman's C++ Primer[^], but these days I'd suggest you also need a copy of Effective C++[^] or C++ Gotchas[^] to hand from day 1. A copy of 97 Things Every Programmer Should Know[^] never hurts too, of course. :)
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
-
Also.. I had a few poke at C++ many times in the past but it did not fit my idea of fun, which requires to be able to spin a nice GUI on top of whatever mad algorithm I'm playing with.
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
C++ GUIs are pretty powerful if you use the right framework (we use WTL, as it's both lightweight and flexible, without the bloat and legacy baggage of MFC). If algorithms are your thing, take a look at the way STL (Standard Template Library) algorithms work. It's very powerful stuff, and easily parallelised (another area of big change at the moment) if you're doing number crunching. Be aware of the existance of the Boost library too. New candidates for the standard library often start off in Boost, and it's a good indicator of where the language is going.
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
-
C++ is a deep and complex language, and more suited to some tasks than others. You can use it to develop UIs of course (just, please, not in MFC!) and to do all sorts of interesting stuff. It is, however, a language that allows you to hang yourself real quick. It's one you will never completely know (I'm more conscious now of how much I don't know than that I do), and one in which crappy code will be harder to fix than almost any other. C# it isn't. So yes, feel free to dive in and learn. Do understand however, that what you write will almost always be sub-optimal, and be prepared to learn and continuously self-improve accordingly. If you can do that and you have an interest in (e.g.) performance and complex systems, C++ is well worth investing time to learn. With C++ 0x just around the corner, the language is about to take a huge step forward, too. When I was learning I started with the Lippman's C++ Primer[^], but these days I'd suggest you also need a copy of Effective C++[^] or C++ Gotchas[^] to hand from day 1. A copy of 97 Things Every Programmer Should Know[^] never hurts too, of course. :)
Anna :rose: Tech Blog | Visual Lint "Why would anyone prefer to wield a weapon that takes both hands at once, when they could use a lighter (and obviously superior) weapon that allows you to wield multiple ones at a time, and thus supports multi-paradigm carnage?"
well... thanks for all those tips! :-)
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
All in the title.. Never worked with MFC, read a book about it in 1998, tried it and couldn't get into it. Peruse a few C++ book, never found them that appealing. I did write a Uniscribe wrapper in ManagedC++, an ObjectiveC/GNUstep wrapper in ManagedC++ and some OpenGL setup code in C (tapped in with interop), that's about it for my native / C development. Neither did I work with C++ developers. So I wonder what does this strange beast do for a living?
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
Right now an embedded GUI. Previously I did desktop applications in MFC. But my first love is embedded control, especially motion control in assembly and C. I never really got into the C++ thing either although I get paid to do it now. I like to make things move and my C productivity, in spite of the myths, is much greater.
-
There can be no "average" C++ developers. The "average" ones have long switched to .NET and apparently "like" it. :laugh: You could never like C++ unless you know what it can do, its limitations. Its only limit is the programmer using it.
Super Lloyd wrote:
So I wonder what does this strange beast do for a living?
I would imagine maintaining legacy applications, writing games, doing "Real" development, helping other html "programmers" do their jobs. And it is being killed. No more do you see jobs for C++. They all want PHP, ASP.NET, ...
NULL
I'm not sure it's accurate to say it is being "killed". Developers are being required to know many different technologies. IMO, C++ will be around for a very long time because it provides an excellent balance between high and low-level programming and because some of the most talented and experienced software engineers have a lot of C++ experience. It will probably continue being used whenever efficiency is important in a relatively large, complex system. (C is sufficient for smaller projects and probably will continue being used for low-level drivers, etc, but there aren't as many tools to limit complexity in C as in C++.) Despite what appears to be a common belief, C++ provides excellent facilities to limit complexity. In general, .NET-based/Java and all these other newer languages are probably more useful for typical GUI and web-based application development. But for more advanced development involving real-time systems, video processing, machine learning, etc. - research development kind of stuff, I suspect C++ is the language of choice for many.
-
There can be no "average" C++ developers. The "average" ones have long switched to .NET and apparently "like" it. :laugh: You could never like C++ unless you know what it can do, its limitations. Its only limit is the programmer using it.
Super Lloyd wrote:
So I wonder what does this strange beast do for a living?
I would imagine maintaining legacy applications, writing games, doing "Real" development, helping other html "programmers" do their jobs. And it is being killed. No more do you see jobs for C++. They all want PHP, ASP.NET, ...
NULL
Mechanical wrote:
Its only limit is the programmer using it.
Amen! From what I do there are two targets: C++: Client-Server applications, meaning the entire server with c/c++ and a client library, if made good on the top level could be an desktop application writen in any language. C++: Games!!
Saludos!! ____Juan
-
I loved coding in C++ prior to getting a job, I guess because it was fun to work so close to the metal, allowed for heavy optimization and there were lots of nice tricks that could be achieved with things like macros and templates. Out in the real world though I've never come across a C/C++ job, and for over 95% of the projects I've worked on (for money) C++ would have been a worse choice than C#/.NET. It's usually faster to write something in .NET and I don't see any real benefit to spending longer writing common run-of-the-mill applications in C++, even if it was to use some framework such as MFC. My guess is the main reason to use it would be for low level device drivers. And possibly games - I'm not an expert in the pros/cons of writing a game using C++ and DirectX versus XNA framework, but I still think C++ would be a good choice for games anyway.
Low-level drivers seem to still be done mostly in C in my experience, although I imagine this is changing. Games (and really any system that approximates or is real-time) probably still heavily use C++. Really, any large system requiring efficient processing can benefit from C++. I agree with you - C# is my language of choice for writing a typical Windows app. The .NET libraries save me hours of time and the language is a pleasure to code in. But it is not always possible to achieve the necessary level of performance.
-
All in the title.. Never worked with MFC, read a book about it in 1998, tried it and couldn't get into it. Peruse a few C++ book, never found them that appealing. I did write a Uniscribe wrapper in ManagedC++, an ObjectiveC/GNUstep wrapper in ManagedC++ and some OpenGL setup code in C (tapped in with interop), that's about it for my native / C development. Neither did I work with C++ developers. So I wonder what does this strange beast do for a living?
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
After 12 years of 99% Java programming, I hit my first scenario where I would have loved to have C++ because I really needed some pointers. I was trying to add a few customizations to an open source module that relied heavily on certain data structures. I had to limp by with a ListIterator that managed to get the job done, but pointers and pointers to pointers would have been a cleaner implementation.
-
All in the title.. Never worked with MFC, read a book about it in 1998, tried it and couldn't get into it. Peruse a few C++ book, never found them that appealing. I did write a Uniscribe wrapper in ManagedC++, an ObjectiveC/GNUstep wrapper in ManagedC++ and some OpenGL setup code in C (tapped in with interop), that's about it for my native / C development. Neither did I work with C++ developers. So I wonder what does this strange beast do for a living?
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
These days it seems like C++ is used for high-efficiency applications, e.g. graphics, as one person has suggested. The .NET languages (typically C#) are easier and more powerful for GUIs and simple non-time-critical applications, and have the advantage of reliability; e.g. fewer memory leaks. In the applications I'm working on, C# is used for the GUI, and C++ for the pixel-based graphical operations. C++ is the new assembly language.
-
All in the title.. Never worked with MFC, read a book about it in 1998, tried it and couldn't get into it. Peruse a few C++ book, never found them that appealing. I did write a Uniscribe wrapper in ManagedC++, an ObjectiveC/GNUstep wrapper in ManagedC++ and some OpenGL setup code in C (tapped in with interop), that's about it for my native / C development. Neither did I work with C++ developers. So I wonder what does this strange beast do for a living?
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
Super Lloyd wrote:
What does that leave
Graphics-intensive applications (e.g., video games, video codecs). Perhaps programs that are run on super computers (where a sub-optimal program would cost thousands of dollars in excessive processing). Legacy C++ applications. High performance libraries (e.g., math libraries, multi-threading libraries). Operating systems. iPhone and other mobile devices (where low-level access can be important and raw performance is necessary).
Compilers/interpreters for other programming languages.
-
He spends three or four days creating a message box.
I can picture in my mind a world without war. A world without hate. A world filled with gentle, loving people. And I can picture us attacking that world because they'd never expect it. ~ Jack Handy
Well i do symbian development using qt(new to it and learning so i'm below average maybe :) ) but its fun(especially using qt)
-
That is correct. And a time will come when the "tools" will become so easy that anyone with a diploma will be able to write applications. You will no longer be required to study all the 'boring' details. Just get a diploma in a language and start cranking out code... like a monkey. It is happening right now.
NULL
I'm quite OK with that. Making it easy to write code just makes the harder problems easier, so you will still have hard problems to work on, but the easy problems will be solvable by anyone. That's how frameworks are developed. You build a layer of abstraction (lower one) so you can work on the more complicated next level.
-
Super Lloyd wrote:
So I wonder what does this strange beast do for a living?
Code?? :) Maybe I could not understand your question properly.
The strange beast works on all of the tools that allow other developers to develop websites such as this. They develop the runtime engines that support the code that java, .Net, etc. put forth. They create the tools that edit the C#, VB, SQL etc. All of these things and more are written using C++, Objective C, or just C, and in some cases they too use MFC. Most importantly what this strange beast does is keep the OS from Linux to Windows, devices from the Apple iPod to the Zune functioning so that individuals who want to write with higher level languages can interact with these OS's and devices. C++ Developers write the code the keeps the military functioning, the code for hardware that controls and move missiles around, and that monitors space travel. The .Net and java languages are not considered reliable enough, secure enough, or stable enough to do a lot of the development that occurs on these levels. (Read these language specifications). As far as detecting memory leaks, a C++ developer is able to manage memory on his own. He is the one that writes garbage collection routines for those who are less skilled an unable to manage their own memory. Yes we may have to track a memory leak, but we can also move into and write assembly language routines from our code and back out again. The routine that allow your editors to track memory leaks. This is just touching the surface. If you want control over the machine learn C++. As far as the comment about tracking down memory leaks, if all you can come up with is tracking memory leaks – put the keyboard down before you hurt yourself (Just kidding too). A C++ developer is a true developer. Those who write in the other languages I have mentioned are likewise developers and professionals. Each language serves a purpose, and is useable and honorable in its realm, just as C++ is.
modified on Monday, April 19, 2010 11:46 AM