Welcome to In the Community. This week, meet Tom Serface, C++ MVP and longtime Visual C++ user.
I have been using VC++ with MFC since it first came out circa 1993 and I saw it demonstrated at a local Software Development show. I've been working for Rimage Corporation for just over 25 years developing software to make our optical disc publishing hardware work. My software is mostly written in C++, but we also use C# and C#/ASP.NET.
I have a snippet blog at www.camaswood.com/tech where I list tricks that I think are useful. When I'm not working I enjoy hanging out with my family, playing guitar, traveling, and taking my dogs for walks. My family enjoys watching Survivor on Wednesday nights and we're not even embarrassed by it.
It's kind of like a super hero; power and responsibility. It's sometimes more complex, but it allows you to control every aspect of your experience. C++ can be very simple, or as complex as needed.
I started off life as a C programmer. When C++ came out it was just the natural progression. These days I spend my time equally in many paradigms, but almost all of them still include C++. It has proven itself over and over.
Most of all, like everyone else, I like the performance. I also like that you control the way your code is produced. C++ allows me to create and use objects when I want, or go all the way down to the bare metal. I especially think C++ is still the best way to create desktop programs. I have some programs that are included on optical discs that can't have dependency on outside assemblies. C++ allows me to make great looking statically linked programs that will run on any version of Windows.
Because of its low-level-ness C++ isn't as easy to integrate with some of the tools in Visual Studio so it often lags behind from release to release. I think C++ is being held back by the need to adhere to slow moving standards. When VC++ first came out, the goal was "to create great Windows programs quickly that work and look good" Back then, MSVC++ was mostly tailored for compling code that was being used on Microsoft Windows, and not so concerned about being portable or "standard". For me, that was much more productive since I only write Windows programs. Other Microsoft syntaxes don't have those same restrictions so they can live up to the credo VC++ started. The abundance of available libraries make other Microsoft syntaxes appealing as well.
My advice is to just start doing it. Start with something simple, but then give yourself a real project to work on. C++ is easiest to learn in the trenches. There are a ton of good books and blogs. When you need to learn how to do something Bing is your friend and I think just looking for answers to questions as they arise is a great way to learn. Copying code from a book (tutorial) just doesn't do anything for me.
It depends on what you're trying to learn, but from my perspective of being an MFC fan I think Jeff Procise's book "Programming Windows with MFC" is still a great place to start. It's a bit dated, but it works.
I use www.codeproject.com a lot. Other than that I use search engines, like Bing, all the time to look up information, syntax, etc. The MSDN forums are a good place to ask questions, but my experience has been that so many questions have been asked about C++ you are better off using a search engine first and you will likely find several immediate answers. There is a ton of useful information available almost in a heartbeat.
I used to spend a lot of time on support forums, but I found that there are so many people answering questions there these days that before I could get in most questions had been answered; often several times. That's a great thing for the community, but not so great for needing me to participate there. I update my blog website periodically with real life code snippets from my programs. I've had lots of feedback from people who appreciate it. I also work with people locally and all over the web trying to move to newer versions of the IDE and compiler. Recently we're starting to organize a local computer club in my small town.
What's next for C++?
C++ has come a longs ways towards competing in the new Microsoft mix on Windows 8. It will take some time for Windows 8 to proliferate to devices and new machines to replace the old. C++ is also still a great platform for creating fast, small desktop programs. Windows 8 makes the desktop experience a little less in the forefront, but there will be people with Windows machines on their desk for a really long time; perhaps forever. I feel like the desktop is here to stay for the foreseeable future and C++/MFC will still play a major role in that area; especially given the number of legacy programs that need to be maintained.
I join with my peers in wishing there was an expanded desktop framework for C++/Desktop/UI development, but I fear that will not happen. Most of the momentum seems to be towards the Win/RT direction. Still, I think Windows will continue to live as a Janus (the Roman god of transitions and beginnings – with two faces) of sorts with one face supporting the vertical plane (tablet) and the other supporting the horizontal (desktop). Most saavy C++ programs will try to build on both paradigms. I'd love to see Microsoft provide better support tools for migrating older native programs to the new WinRT platform so the code could be shared. C++ may well end up living in the back end with other, easier to do UI, languages in the front.
Still, I can't help but believe if we could have the small footprint and quick execution of C++/MFC with a full featured UI builder, like other .NET languages have, we'd have a killer.
One last thing… C++ is always a great back end for any program. So, even if C#, or something other syntax, is used C++ is always available to do a lot of the real work in the program where speed is an imperative. If we had a better integration paradigm that would also be a huge boon.
Thanks Tom. Community, what do you think should be next for C++?
"Community, what do you think should be next for C++?"
Presumably the same thing everybody else is saying: fix/update/rewrite/rework MFC.
Here again, someone talking about C++ and how, to make a Windows GUI with it, they have to go back to the older-than-the-Internet techology of MFC. This should be just a *massive* embarrassment to Microsoft, who have completely dropped the ball on desktop application development for ISV's. .NET for the GUI may have been acceptable for enterprise developers (which is all Microsoft seems to really care about anymore), but both WinForms and WPF fell massively short. And now Microsoft has produced the GUI toolkit I've been asking for on the desktop for 5 years (XAML + C++ + DirectX) to metro/modern/what are we calling it this week applications that run in the WinRT sandbox. The application I work on ($50 million per year revenue) is simply not going to be rewritten for WinRT. Too expensive. Will Microsoft ever give us a decent modern GUI toolkit for native code desktop applications? What is the direction for desktop applications on Windows, Microsoft? FAIL.
Yo, Tom! Great to see you're still in the MVP program! Good times, my friend. Good times.
Tom, regarding C++/GUI development: have you heard about winrt initiative in the Qt5 framework (http://goo.gl/Hzjbp)? Of course it's immature yet, but it should provide fairly decent C++/GUI toolset in the near future. What do you think about it?
I need OCR in WinRT. I tried to convert Tesseract OCR project to WinRT but stuck on porting its dependencies.
Apparently, this guy (stackoverflow.com/.../863980) is able to port zlib (one of the dependencies of Tesseract project) to OCR!! But the assembly code conversion (inflate_fast function) from x86 to ARM has not yet done for RT...
Can anyone please port Tesseract OCR project and put it on Codeplex? Would be helpful for many out there!!
Microsoft office team! show some love to RT and let use Office OCR in Store projects...
At the moment, only Leadtools are selling OCR engine for RT (www.leadtools.com/blog/winrt/winrt-ocr-example-codeproject), but it is EXPENSIVE for light-weight, home-made app developers!