views:

142

answers:

4

I have been developing web applications in C# now for ~5 years, and since I started I’ve always wanted to learn c++ and work in a more software orientated role (as opposed to web orientated).

I am getting to the point where I feel very comfortable in C# and my learning curve is starting to plateau a little as I start to reach the limits of what I need to do to get my job done.

For the last 6 months I have been teaching myself C++ in my spare time and I have started to learn things that I would never have learned if I had continued to plod along in the (safe) world of C#.

The obvious only problem with this is that my spare time is very limited and I would learn a lot more (and faster) if a percentage of my 9 till 5 was spent on my software endeavours rather then the repetitive C# work I’m used to.

The opportunity to voice this desire has arrived at my place of work and I need to present my case for exactly what I want and how best to go about it.

So, I’m looking for advice, the community might have, on areas that I could exploit that I might not have thought of and how best to word my proposal without sounding like I’m looking to jump ship!

Some of the areas that I have thought of are

  • Touch screen Kiosks (my company develops these)
  • Thumbnailer (on upload of an image via our cms they sometimes need to be resized)
  • Browser plugins
  • Mass uploader
  • Cropper (similar to facebooks)
  • Upload progress bar

ANY advice would be greatly appreciated.

+2  A: 

I've recently been learning C# coming from a background in C/C++ and more recently Python. Given the choice I think I'd generally rather work in C# where possible because as a higher level language (not having to worry about memory management in the same way for example).

That said, I would think the touch screen kiosks might be a good place to start as there's a reasonable chance you'd have to interact with some hardware and a lot hardware drivers are written in C/C++. So check out what hardware they use - maybe you could write a wrapper which you can call from your C#? Writing a simple DLL in C++ and handling the conversion between managed and unmanaged code could be a good way to start learning more proactively.

For the rest of the applications you've mentioned there I suspect that you'd be more productive in C# ..but at least it would be non-web based software which it sounds like you're interested in?

Jon Cage
Great advice, thanks!
Adam Naylor
+3  A: 

As time goes by, the platforms are getting more and more important. It's not clear to me what your reasoning is for learning C++. IMO, valid reasons are:

  • "I want to do kernel or device driver development"
  • "I want to do hard core 1337 game development"
  • "I want to learn how programs work at a lower level"
  • "There is "fun" ATL/CORBA legacy code I really want to get into at work"

I think you'll find less and less work there in the business world for C++ programmers doing any line of business software, and 98% of the time, if you apply C++ to most companies' software development these days, you're wasting your time and your company's money.

I would throw out there that it sounds like your problem is not the language you're working on, it's that the work that you're doing. C# works very, very well for client-based software (especially when you talk about things like WPF) and is far more elegant (at least on the Windows platform) than any of the old C/C++ APIs available to you by the OS.

Dave Markle
+1: Definitely agree that for client / GUI applications C# is a good choice. C/C++ is still necessary on most embedded platforms though not to mention interactions with hardware.
Jon Cage
My main motives for learning C++ is that if a developer starts from learning C# (and sticking to web) then they are often sheilded from a lot of the low level programming concepts that you HAVE to deal with in c++, I've learnt so much by just scratching the surface of c++
Adam Naylor
I think Dave's point was that unless you really _have_ to touch the hardware, it's probably better not to. I'm not suggesting learning more about hardware interactions is a bad thing, but as an embedded software engineer I'd argue that actually client/GUI development is much more fulfulling as you spend less time fighting low-level CRUD and more time solving interesting problems (my 2p).
Jon Cage
Even in a situation where you need to touch the hardware its certainly possible to write that code in C++ and the GUI in C#. There is no need to let the language choice of the hardware module dictate that choice to every other module in the software.
Brian Ensink
I don't have any hard facts on productivity, but I feel more comfortable when I know more or less what's going on a level or two under my source code. If the OP wants to learn more about the basics, that's fine by me, and C++ is a good way to do it. It combines the lower-level nature of C with most of the C# features.
David Thornley
@Adam: Very true. Really grokking C++ can only make you a better programmer. But you'd seemed to be wanting to do C++ at your place of work. Is there any work at your current employer doing C++ stuff? Or would using C++ be putting a square peg in a round hole at your employer?
Dave Markle
A: 

You can take your C# knowledge from the web-world to the desktop-world. I have written both C++/MFC and more recently C# desktop software and I prefer C# by a wide margin.

Its always good to learn new things and you should keep learning C++ but don't shun C# and feel that you have to master MFC before writing a GUI. C# GUIs are much easier to deal with than MFC and I remember the day started using MFC thinking how much easier that was over straight Win32. Speaking of Win32 you can benefit by gaining some general knowledge of Win32 API and other platform functions because even in the nice clean C# world you will occasionally have to directly call them.

Brian Ensink
A: 

It looks like you are enjoying C++ and the list for your next real life project is pretty good. The list contains useful and straight to the hearth of C++ strengths - performance and reliability.

Most of the advices experts give is to use the right tool for the job you need to do. So, you can point why C++ is the best tool and you will certainly get approved. This way you will also show that there is no ship abandon but practical choice between the two worlds of c++ and c#.

There is a lot of flame wars which are pointless, so it is better to be realistic and happy :)

Gramic