In the Community: Meet PJ Naughter
In the Community spotlights members of the C++ / developer community. This week, meet PJ Naughter, a C++ MVP and prolific C++ developer. Take it away, PJ…
PJ has been a C++ MVP since 2007. In his spare time, he runs a personal web site at http://www.naughter.com where he publishes open source software and source code of use to Windows C++ developers. There is roughly 250,000 lines of Open Source C++ code available to download. Areas covered include GUI controls, Astronomy, Calendars, Hardware integration, multi-threading, network protocols and databases.
C++ in 140 characters or less?
The Ideal computer language for those who want to control every aspect of their code. Also ideal to shoot yourself in the foot if not careful.
C++ to me is the perfect language where you can express high level abstractions in your code while at the same time you can go right down to the bare metal if you really want to. All this with the performance, flexibility, portability and minimal run time requirements which no other language can come close to matching.
What do you like most about C++?
With C++ you have complete control of the code you produce. I graduated with an Electronics degree from college and have a fondness for C++ and C with its origins in engineering which I do not get from the likes of C# or Web based languages. Because C++ is a mature language there is a plethora of open source libraries you can call upon when you need specific functionality not available out of the box.
The lack of a modern GUI and class framework in Microsoft VC when compared to the likes of C# and the .NET Base Class Libraries is a real bugbear for me. It is one of the reasons which originally drove me to start releasing open source C++ code on my web site. In an ideal world I would love to see a modern UI framework in a future version of Microsoft VC with all the functionality which MFC provides without all the baggage which MFC is saddled with. A standards based XML class library/framework would also be very much appreciated. We also need to improve the Help system in Visual Studio for C++ developers. If you can use Bing or Google to find the documentation or information a developer needs quicker than local help, then the Help System has failed. There are many environments where I develop when I do not have or are not allowed online connectivity. Also the quality of the help content for C++ developers has waned since the time of Microsoft VC 6. There needs to be a better connect between the document creation team for Visual Studio and the creators of the C++ classes and code they are describing.
What advice would you give new C++ developers?
C++ 11 can be a complicated beast to master and I am still grappling with all the new language features it provides. I would suggest someone who wants to learn C++ should start off learning the basic OO concepts and syntax without worrying too much about specific technologies such as Win32, MFC, ATL, WTL, STL or WRT. Then once you know the basics, I would start working through the STL library and perhaps some Win32 specific coding. Then as your experience level increases, start digging into the more advanced use of STL and finally start learning the new features of C++ 11.
Do you have any favorite C++ favorite authors or books?
At the moment the two books on my bedside locker are the second edition of “The C++ Standard Library” by Nicolai Josuttis and “C++ Concurrency in Action” by Anthony Williams. Both books are very much recommended for the C++ developers out there who is getting to grips with the new features of C++ 11 and STL, many of which are now available in VS 2012. I am dipping into both books at the same time, but it would make sense to read the Josuttis book first as it serves as a good primer for C++ 11.
Where are your favorite technical places on the Web?
Other than my own web site which is www.naughter.com<g>, I used to post a lot of my articles to codeproject.com. I still use CodeProject quite a bit for reference purposes but do not actively post their anymore. I also use Stack Overflow quite a lot which researching technical questions. The quality of answers there are always top notch. When I want to catch up on recent news in the IT world and need a bit of a laugh I love “The Register“. There’s something about that British sense of humor.
What question should I have asked?
What should Microsoft and the Microsoft C++ community do to continue the C++ Renaissance?
And the answer?
That’s a tough question to fully answer, but I’m not sure that a complete reliance on pushing C++ 11 is going to produce the C++ renaissance that all C++ developers and particularly those in the Microsoft C++ community want to see happen. C++ is very much alive and kicking in the wider C++ community but not at the same level inside the Microsoft C++ community. I believe the reason why C# was and continues to be so successful is in addition to its clean and simple syntax is the comprehensive libraries and tooling support for it out of the box in each copy of Visual Studio. Microsoft C++ needs to get back to the dizzying heights of Microsoft VC 6. Those really were the days for us C++ developers.
Here’s some things which I think we can do:
- We need the tooling in Visual Studio to better support the C++ language features. Things such as Wizards, Intellisense and Snippets really makes the day to day work of a C++ developer much more efficient. I really welcome the reintroduction of old Microsoft VC 6 favorites such as the MFC Class Wizard.
- C++ needs to be a simple language to learn and master and not intimidating. I am fearful than some of the C++ 11 features require the developer to know all the minutiae of templates, reference types and weird looking syntax. One of the joys of most of the MFC framework is “KISS”. That reminds me that I still need to check out STL’s Channel 9 Videos on Advanced STL!
- We need a Base class library for C++ developers. I would really love to retire some of my open source libraries when there are built in replacements available. How about classes to make service development easier in C++ or new non MFC dependent classes to support low level multi-threading coding where you do not want to use the high level abstractions provided by PPL or C++ AMP.
- I already mentioned it but we need a modern UI framework from Microsoft for desktop development. I still love MFC but every time I use it I hit up against at least one of its limitations. Not being able to do multiple inheritance from CWnd can make life really difficult when you need customized UI behavior. I do use WTL quite a bit and it fixes some of the annoyances I have with MFC, but it is not as well known or well used as MFC and we really need an in the box library with first class tooling, support and infrastructure for any MFC replacement.
- IMHO, one of the reasons why Microsoft VC 6 was so successful was because it ended up with six services packs. We need to fix the bugs/issues in VC more quickly and not rely on them being fixed in the next major release of Visual Studio which could be 18 months away. I really like the approach where updates for Visual Studio 2012 are coming down the pipe much quicker now.
- Please don’t keep changing the UI in Visual Studio on each release without solid community feedback. Many long time VC veterans like myself have developed muscle memory for expecting certain keyboard shortcuts and dialog ordering in Visual Studio since the early 90s and the continued changes from release to release is really annoying.
Thank you, PJ.