{"id":803,"date":"2014-02-21T15:30:00","date_gmt":"2014-02-21T15:30:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2014\/02\/21\/why-c\/"},"modified":"2019-02-18T18:40:39","modified_gmt":"2019-02-18T18:40:39","slug":"why-c","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/why-c\/","title":{"rendered":"Why C++?"},"content":{"rendered":"<p>A few weeks ago, I had an opportunity to share a few scenarios where C++ really matters to an internal audience from the field. No demo code or sample projects were reviewed, just the scenarios and first-hand examples.<\/p>\n<p>Why C++?<\/p>\n<ul>\n<li><strong>Learn &#8220;what those C++ folks&#8221; know<\/strong>. Some developers feel a pull towards the <em>preciousssss<\/em>, C++. Sure, it has a bad rep as being full of pointers and other complexity, but its power is unmistakable. <em>[I a great customized picture of the One Ring with &#8220;C++&#8221; on the top but cannot use it here <span style=\"font-family: Wingdings\">L<\/span>]<\/em><\/li>\n<li><strong>Application lifecycle support tools<\/strong>. Developers often need to create small extensions, command-line tools, and other bits of code to improve the build process, massage files, control deployment or other process details.<\/li>\n<li><strong>Shared code libraries<\/strong>. Libraries provide core functionality (think XML processing, text processing, network communication) to a wide audience. C++ enables fast, efficient and elegant code.<\/li>\n<li><strong>Hybrid devices<\/strong>. Embedded devices rely more on C but there is a growing hobbyist community around hybrid devices like the Raspberry Pi that can host programs written with C++. This could be the beginning of SkyNet.<\/li>\n<li><strong>Niche applications<\/strong>. Looking for a developer job in the financial markets? Math and C++ are must haves! Many unique applications require advanced science work and some experience with C++.<\/li>\n<li><strong>Lively debates about syntax<\/strong>. Debating the finer C++ points of auto, when to use lambdas, brace formatting, and move semantics reinvigorates the soul (and helps influence future standards).<\/li>\n<li><strong>Application needs to access native code<\/strong>. C++ is the bridge that links managed code to the rich ecosystem of existing, stable and mature native code including open source libraries like OpenCV, Lucene, Cinder, and FFMpeg.<\/li>\n<li><strong>Tuning a managed application<\/strong>. C++ can be used to speed up sluggish managed applications. When the profiler points to managed code that has already been optimized, the best choice might be to let C++ handle it (C++ AMP anyone?).<\/li>\n<li><strong>Code maintenance<\/strong>. There is a lot of code out there. Much of it is C and C with classes, but much more is C++ and relies on the flexibility and control of the language.<\/li>\n<li><strong>Porting code to a new application<\/strong>. New applications are built from the creaky bones of decades-old legacy applications. C++ developers can decode requirements from old native code and express them in modern C++ or other language.<\/li>\n<li><strong>Three letters: M F C<\/strong>. MFC lives!<\/li>\n<li><strong>Repackage logic<\/strong>. Native code in existing native apps can be repackaged in C++ for new apps targeting different platforms and form factors.<\/li>\n<li><strong>Graphics, graphics, graphics<\/strong>. C++ is the choice for the most immersive graphics experience. Data visualization, bleeding-edge user interfaces, the next Pixar movie&#8230;<\/li>\n<li><strong>Intense multimedia processing<\/strong>. Sound, images and video gobble up bandwidth. C++ and Visual Studio 2013 makes it easier to optimize this type of code for the best performance.<\/li>\n<li><strong>Cross platform development<\/strong>. When an application must be cross platform, C++ is hard to beat. There are differences between compilers, but adherence to the standard goes a long way.<\/li>\n<li><strong>Custom device support<\/strong>. Native code is used extensively in device support. Developers use C++ to write device drivers, SDKs and sample applications for stuff like sound input, 3d printers and scanners.<\/li>\n<li><strong>Pushing the boundaries of computing<\/strong>. C++ can be found at the heart of many high-performance computing applications. Meteorology, chemistry, physics, visualization, genetics&#8230;.<\/li>\n<li><strong>&#8220;It&#8217;s fun!&#8221; <\/strong><em>&ndash;survey respondent, 2013<\/em><strong> <\/strong><\/li>\n<\/ul>\n<p>Do you agree with these scenarios? Did I miss one? Do you have detailed examples for any of these that you would like to share (and get credit for if used in future presentations)?<\/p>\n<p>Drop me a line (<a href=\"mailto:ebattali@microsoft.com\">ebattali@microsoft.com<\/a>) or comment below. Thanks!<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A few weeks ago, I had an opportunity to share a few scenarios where C++ really matters to an internal audience from the field. No demo code or sample projects were reviewed, just the scenarios and first-hand examples. Why C++? Learn &#8220;what those C++ folks&#8221; know. Some developers feel a pull towards the preciousssss, C++. [&hellip;]<\/p>\n","protected":false},"author":264,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[140],"class_list":["post-803","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","tag-c"],"acf":[],"blog_post_summary":"<p>A few weeks ago, I had an opportunity to share a few scenarios where C++ really matters to an internal audience from the field. No demo code or sample projects were reviewed, just the scenarios and first-hand examples. Why C++? Learn &#8220;what those C++ folks&#8221; know. Some developers feel a pull towards the preciousssss, C++. [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/264"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=803"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/803\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}