Evolving a Language in and for the Real World: C++ 1991-2006

Total Page:16

File Type:pdf, Size:1020Kb

Evolving a Language in and for the Real World: C++ 1991-2006 Evolving a language in and for the real world: C++ 1991-2006 Bjarne Stroustrup Texas A&M University www.research.att.com/~bs Abstract Obviously, the C++ community spent the most time and This paper outlines the history of the C++ programming lan- money on the first of those items. The ISO C++ standards guage from the early days of its ISO standardization (1991), committee tends to focus on the second with some concern through the 1998 ISO standard, to the later stages of the for the third. My main effort was on the third and the fourth. C++0x revision of that standard (2006). The emphasis is on The ISO committee is the focus for people who aim to the ideals, constraints, programming techniques, and people improve the C++ language and standard library. Through that shaped the language, rather than the minutiae of lan- such change they (we) hope to improve the state of the guage features. Among the major themes are the emergence art in real-world C++ programming. The work of the C++ of generic programming and the STL (the C++ standard li- standards committee is the primary focus of the evolution of brary’s algorithms and containers). Specific topics include C++ and of this paper. separate compilation of templates, exception handling, and Thinking of C++ as a platform for applications, many support for embedded systems programming. During most have wondered why — after its initial success — C++ didn’t of the period covered here, C++ was a mature language with shed its C heritage to “move up the food chain” and be- millions of users. Consequently, this paper discusses various come a “truly object-oriented” applications programming uses of C++ and the technical and commercial pressures that language with a “complete” standard library. Any tendencies provided the background for its continuing evolution. in that direction were squelched by a dedication to systems programming, C compatibility, and compatibility with early Categories and Subject Descriptors K.2 [History of Com- versions of C++ in most of the community associated with puting]: systems the standards committee. Also, there were never sufficient General Terms Design, Programming Language, History resources for massive projects in that community. Another important factor was the vigorous commercial opportunism Keywords C++, language use, evolution, libraries, stan- by the major software and hardware vendors who each saw dardization, ISO, STL, multi-paradigm programming support for application building as their opportunity to dis- tinguish themselves from their competition and to lock in 1. Introduction their users. Minor players saw things in much the same light In October 1991, the estimated number of C++ users was as they aimed to grow and prosper. However, there was no 400,000 [121]. The corresponding number in October 2004 lack of support for the committee’s activities within its cho- was 3,270,000 [61]. Somewhere in the early ’90s C++ left its sen domain. Vendors rely on C++ for their systems and for initial decade of exponential growth and settled into a decade highly demanding applications. Therefore, they have pro- of steady growth. The key efforts over that time were to vided steady and most valuable support for the standards ef- fort in the form of hosting and — more importantly — of 1. use the language (obviously) key technical people attending. 2. provide better compilers, tools, and libraries For good and bad, ISO C++ [66] remains a general- 3. keep the language from fragmenting into dialects purpose programming language with a bias towards systems programming that 4. keep the language and its community from stagnating • is a better C Permission to make digital/hard copy of part of this work for personal or classroom use is granted without fee provided that the copies are not • supports data abstraction made or distributed for profit or commercial advantage, the copyright • notice, the title of the publication, and its date of appear, and notice is supports object-oriented programming given that copying is by permission of the ACM, Inc. To copy • otherwise, to republish, to post on servers, or to redistribute to lists, supports generic programming requires prior specific permission and/or a fee. Permission may be requested from the Publications Dept., ACM, Inc., 2 Penn Plaza, New An explanation of the first three items from a historical York,[Copyright NY notice will11201-0701, appear here once ’preprint’USA, optionfax:+1(212) is removed.] 869-0481, perspective can be found in [120, 121]; the explanation of [email protected] ©2007 ACM 978-1-59593-766-7/2007/06-ART4 $5.00 DOI 10.1145/1238844.123884 Evolving C++ 1991-2006 8 1 2007/4/23 http://doi.acm.org/10.1145/1238844.1238848 4-1 “supports generic programming” is a major theme of this 2. Background: C++ 1979-1991 paper. Bringing aspects of generic programming into the The early history of C++ (up until 1991) is covered by my mainstream is most likely C++’s greatest contribution to the HOPL-II paper [120]. The standard reference for the first 15 software development community during this period. years of C++ is my book The Design and Evolution of C++, The paper is organized in loose chronological order: usually referred to as D&E [121]. It tells the story from the §1 Introduction pre-history of C++ until 1994. However, to set the scene for the next years of C++, here is a brief summary of C++’s early §2 Background: C++ 1979-1991 — early history, design history. criteria, language features. C++ was designed to provide Simula’s facilities for pro- §3 The C++ world in 1991 — the C++ standards process, gram organization together with C’s efficiency and flexibility chronology. for systems programming. It was intended to deliver that to §4 Standard library facilities 1991-1998 — the C++ stan- real projects within half a year of the idea. It succeeded. dard library with a heavy emphasis on its most impor- At the time, I realized neither the modesty nor the pre- tant and innovative component: the STL (containers, al- posterousness of that goal. The goal was modest in that it gorithms, and iterators). did not involve innovation, and preposterous in both its time scale and its Draconian demands on efficiency and flexibil- §5 Language features 1991-1998 — focusing on separate ity. While a modest amount of innovation did emerge over compilation of templates, exception safety, run-time type the early years, efficiency and flexibility have been main- information and namespaces. tained without compromise. While the goals for C++ have §6 Standards maintenance 1997-2003 — for stability, no been refined, elaborated, and made more explicit over the additions were made to the C++ standard. However, the years, C++ as used today directly reflects its original aims. committee wasn’t idle. Starting in 1979, while in the Computer Science Research §7 C++ in real-world use — application areas; applications Center of Bell Labs, I first designed a dialect of C called “C programming vs. systems programming; programming with Classes”. The work and experience with C with Classes styles; libraries, Application Binary Interfaces (ABIs), from 1979 to 1983 determined the shape of C++. In turn, C and environments; tools and research; Java, C#, and C; with Classes was based on my experiences using BCPL and dialects. Simula as part of my PhD studies (in distributed systems) in the University of Cambridge, England. For challenging §8 C++0x — aims, constraints, language features, and li- systems programming tasks I felt the need for a “tool” with brary facilities. the following properties: §9 Retrospective — influences and impact; beyond C++. • A good tool would have Simula’s support for program The emphasis is on the early and later years: The early years organization – that is, classes, some form of class hi- shaped current C++ (C++98). The later ones reflect the re- erarchies, some form of support for concurrency, and sponse to experience with C++98 as represented by C++0x. compile-time checking of a type system based on classes. It is impossible to discuss how to express ideas in code with- This I saw as support for the process of inventing pro- out code examples. Consequently, code examples are used to grams; that is, as support for design rather than just sup- illustrate key ideas, techniques, and language facilities. The port for implementation. examples are explained to make them accessible to non-C++ • programmers. However, the focus of the presentation is the A good tool would produce programs that ran as fast as people, ideas, ideals, techniques, and constraints that shape BCPL programs and share BCPL’s ability to combine C++ rather than on language-technical details. For a descrip- separately compiled units into a program. A simple link- tion of what ISO C++ is today, see [66, 126]. The emphasis age convention is essential for combining units written is on straightforward questions: What happened? When did in languages such as C, Algol68, Fortran, BCPL, assem- it happen? Who were there? What were their reasons? What bler, etc., into a single program and thus not to suffer the were the implications of what was done (or not done)? handicap of inherent limitations in a single language. C++ is a living language. The main aim of this paper • A good tool should allow highly portable implementa- is to describe its evolution. However, it is also a language tions. My experience was that the “good” implementa- with a great emphasis on backwards compatibility. The code tion I needed would typically not be available until “next that I describe in this paper still compiles and runs today. year” and only on a machine I couldn’t afford.
Recommended publications
  • Thriving in a Crowded and Changing World: C++ 2006–2020
    Thriving in a Crowded and Changing World: C++ 2006–2020 BJARNE STROUSTRUP, Morgan Stanley and Columbia University, USA Shepherd: Yannis Smaragdakis, University of Athens, Greece By 2006, C++ had been in widespread industrial use for 20 years. It contained parts that had survived unchanged since introduced into C in the early 1970s as well as features that were novel in the early 2000s. From 2006 to 2020, the C++ developer community grew from about 3 million to about 4.5 million. It was a period where new programming models emerged, hardware architectures evolved, new application domains gained massive importance, and quite a few well-financed and professionally marketed languages fought for dominance. How did C++ ś an older language without serious commercial backing ś manage to thrive in the face of all that? This paper focuses on the major changes to the ISO C++ standard for the 2011, 2014, 2017, and 2020 revisions. The standard library is about 3/4 of the C++20 standard, but this paper’s primary focus is on language features and the programming techniques they support. The paper contains long lists of features documenting the growth of C++. Significant technical points are discussed and illustrated with short code fragments. In addition, it presents some failed proposals and the discussions that led to their failure. It offers a perspective on the bewildering flow of facts and features across the years. The emphasis is on the ideas, people, and processes that shaped the language. Themes include efforts to preserve the essence of C++ through evolutionary changes, to simplify itsuse,to improve support for generic programming, to better support compile-time programming, to extend support for concurrency and parallel programming, and to maintain stable support for decades’ old code.
    [Show full text]
  • 18 Free Ways to Download Any Video Off the Internet Posted on October 2, 2007 by Aseem Kishore Ads by Google
    http://www.makeuseof.com/tag/18-free-ways-to-download-any-video-off-the-internet/ 18 Free Ways To Download Any Video off the Internet posted on October 2, 2007 by Aseem Kishore Ads by Google Download Videos Now download.cnet.com Get RealPlayer® & Download Videos from the web. 100% Secure Download. Full Movies For Free www.YouTube.com/BoxOffice Watch Full Length Movies on YouTube Box Office. Absolutely Free! HD Video Players from US www.20north.com/ Coby, TV, WD live, TiVo and more. Shipped from US to India Video Downloading www.VideoScavenger.com 100s of Video Clips with 1 Toolbar. Download Video Scavenger Today! It seems like everyone these days is downloading, watching, and sharing videos from video-sharing sites like YouTube, Google Video, MetaCafe, DailyMotion, Veoh, Break, and a ton of other similar sites. Whether you want to watch the video on your iPod while working out, insert it into a PowerPoint presentation to add some spice, or simply download a video before it’s removed, it’s quite essential to know how to download, convert, and play these videos. There are basically two ways to download videos off the Internet and that’s how I’ll split up this post: either via a web app or via a desktop application. Personally, I like the web applications better simply because you don’t have to clutter up and slow down your computer with all kinds of software! UPDATE: MakeUseOf put together an excellent list of the best websites for watching movies, TV shows, documentaries and standups online.
    [Show full text]
  • Imagine. Create. Deploy. Inspired? So Are We
    Imagine. Create. Deploy. Inspired? So Are We. Inspiration is all around us. From beautiful screens on the web to well-designed reports. New devices push the development envelope and ask that we consider new technologies. The latest release, DevExpress 12.2, delivers the tools you need to build the multi-channel solutions you can imagine: Windows 8-inspired applications with live tiles perfect for Microsoft Surface, multi-screen iOS and Android apps. It’s all possible. Let’s see what develops. Download your 30-day trial at www.DevExpress.com Copyright 1998-2013 Developer Express, Inc. All rights reserved. All trademarks are property of their respective owners. Untitled-9 1 1/8/13 2:10 PM THE MICROSOFT JOURNAL FOR DEVELOPERS MARCH 2013 VOL 28 NO 3 magazine XAML with DirectX and C++..............34 Using XAML with DirectX and C++ COLUMNS in Windows Store Apps WINDOWS WITH C++ Doug Erickson .................................................................34 Rendering in a Desktop Application with Direct2D Exploring the JavaScript API for Offi ce: Kenny Kerr, page 8 Data Access and Events DATA POINTS Stephen Oliver and Eric Schmidt ........................................48 Playing with the EF6 Alpha Julie Lerman, page 16 Best Practices in Asynchronous Programming WINDOWS AZURE INSIDER Stephen Cleary ................................................................56 Real-World Scenarios for Node.js in Windows Azure Migrating ASP.NET Web Forms to the Bruno Terkaly and Ricardo Villalobos, page 26 MVC Pattern with the ASP.NET Web API THE WORKING
    [Show full text]
  • Imagine. Create. Deploy. Inspired? So Are We
    Imagine. Create. Deploy. Inspired? So Are We. Inspiration is all around us. From beautiful screens on the web to well-designed reports. New devices push the development envelope and ask that we consider new technologies. The latest release, DevExpress 12.2, delivers the tools you need to build the multi-channel solutions you can imagine: Windows 8-inspired applications with live tiles perfect for Microsoft Surface, multi-screen iOS and Android apps. It’s all possible. Let’s see what develops. Download your 30-day trial at www.DevExpress.com Copyright 1998-2013 Developer Express, Inc. All rights reserved. All trademarks are property of their respective owners. Untitled-9 1 1/8/13 2:10 PM THE MICROSOFT JOURNAL FOR DEVELOPERS FEBRUARY 2013 VOL 28 NO 2 magazine JavaScript API for Offi ce.........................20 Exploring the New JavaScript API for Offi ce COLUMNS Stephen Oliver and Eric Schmidt ........................................20 CUTTING EDGE Essential Facebook Async Causality Chain Tracking Programming: Andrew Stasyuk ...............................................................32 The JavaScript SDK Dino Esposito, page 6 Building a Simple Comet Application WINDOWS WITH C++ in the Microsoft .NET Framework Creating Desktop Apps Derrick Lau .....................................................................42 with Visual C++ 2012 Kenny Kerr, page 12 Detecting Abnormal Data Using TEST RUN k-Means Clustering Naive Bayes Classifi cation with C# ............................................................. James McCaffrey 54 James McCaffrey,
    [Show full text]
  • (DNC) Magazine
    EDITOR’S NOTE @suprotimagarwal Editor in Chief Developers! Developers! Developers! A decade ago, bathed in sweat, Editor In Chief : yelled the one and only Steve Balmer as if he was addressing a sect Suprotim Agarwal that's unlike any other. (suprotimagarwal@ dotnetcurry.com) But why am I bringing this up now? Art Director : Minal Agarwal In the Software ecosystem, change has always been disruptive and has occured more frequently than ever. Contributing Authors : Yacoub Massad Organizations have had the best of intentions while adapting to these Gouri Sohoni frequent changes and have often pondered seriously accelerating their Darren Gillis Daniel Jimenez Garcia digital transformation journey. The actual transformation though has Damir Arh been quite slow due to restraints like time and budget. Benjamin Jakobus That is, until now. Technical Reviewers : Damir Arh The pandemic that began in 2020 forced companies to reformulate Daniel Jimenez Garcia their plans and pivot by setting up remote working environments. Years’ Gouri Sohoni Subodh Sohoni worth of digital transformation, happened in just a matter of months! Suprotim Agarwal And at the center of this were the Developers and IT staff, playing Yacoub Massad a crucial role in this transformation. Sitting in remote locations, and dealing with unprecedented challenges, developers have been working Next Edition : asynchronously to skill, reskill and upskill themselves, and make their April 2021 organizations more agile. Windows, Visual Studio, ASP.NET, Azure, TFS & other Microsoft products & technologies are trademarks of Nobody knows for sure what 2021 and the coming years has in store the Microsoft group of companies. for us. I sincerelly hope it's good for everyone.
    [Show full text]
  • Third Party Version
    Third Party Name Third Party Version Manufacturer License Type Comments Merge Product Merge Product Versions License details Software source autofac 3.5.2 Autofac Contributors MIT Merge Cardio 10.2 SOUP repository https://www.nuget.org/packages/Autofac/3.5 .2 Gibraltar Loupe Agent 2.5.2.815 eSymmetrix Gibraltor EULA Gibraltar Merge Cardio 10.2 SOUP repository https://my.gibraltarsoftware.com/Support/Gi Loupe Agent braltar_2_5_2_815_Download will be used within the Cardio Application to view events and metrics so you can resolve support issues quickly and easily. Modernizr 2.8.3 Modernizr MIT Merge Cadio 6.0 http://modernizr.com/license/ http://modernizr.com/download/ drools 2.1 Red Hat Apache License 2.0 it is a very old Merge PACS 7.0 http://www.apache.org/licenses/LICENSE- http://mvnrepository.com/artifact/drools/dro version of 2.0 ols-spring/2.1 drools. Current version is 6.2 and license type is changed too drools 6.3 Red Hat Apache License 2.0 Merge PACS 7.1 http://www.apache.org/licenses/LICENSE- https://github.com/droolsjbpm/drools/releases/ta 2.0 g/6.3.0.Final HornetQ 2.2.13 v2.2..13 JBOSS Apache License 2.0 part of JBOSS Merge PACS 7.0 http://www.apache.org/licenses/LICENSE- http://mvnrepository.com/artifact/org.hornet 2.0 q/hornetq-core/2.2.13.Final jcalendar 1.0 toedter.com LGPL v2.1 MergePacs Merge PACS 7.0 GNU LESSER GENERAL PUBLIC http://toedter.com/jcalendar/ server uses LICENSE Version 2. v1, and viewer uses v1.3.
    [Show full text]
  • Pipenightdreams Osgcal-Doc Mumudvb Mpg123-Alsa Tbb
    pipenightdreams osgcal-doc mumudvb mpg123-alsa tbb-examples libgammu4-dbg gcc-4.1-doc snort-rules-default davical cutmp3 libevolution5.0-cil aspell-am python-gobject-doc openoffice.org-l10n-mn libc6-xen xserver-xorg trophy-data t38modem pioneers-console libnb-platform10-java libgtkglext1-ruby libboost-wave1.39-dev drgenius bfbtester libchromexvmcpro1 isdnutils-xtools ubuntuone-client openoffice.org2-math openoffice.org-l10n-lt lsb-cxx-ia32 kdeartwork-emoticons-kde4 wmpuzzle trafshow python-plplot lx-gdb link-monitor-applet libscm-dev liblog-agent-logger-perl libccrtp-doc libclass-throwable-perl kde-i18n-csb jack-jconv hamradio-menus coinor-libvol-doc msx-emulator bitbake nabi language-pack-gnome-zh libpaperg popularity-contest xracer-tools xfont-nexus opendrim-lmp-baseserver libvorbisfile-ruby liblinebreak-doc libgfcui-2.0-0c2a-dbg libblacs-mpi-dev dict-freedict-spa-eng blender-ogrexml aspell-da x11-apps openoffice.org-l10n-lv openoffice.org-l10n-nl pnmtopng libodbcinstq1 libhsqldb-java-doc libmono-addins-gui0.2-cil sg3-utils linux-backports-modules-alsa-2.6.31-19-generic yorick-yeti-gsl python-pymssql plasma-widget-cpuload mcpp gpsim-lcd cl-csv libhtml-clean-perl asterisk-dbg apt-dater-dbg libgnome-mag1-dev language-pack-gnome-yo python-crypto svn-autoreleasedeb sugar-terminal-activity mii-diag maria-doc libplexus-component-api-java-doc libhugs-hgl-bundled libchipcard-libgwenhywfar47-plugins libghc6-random-dev freefem3d ezmlm cakephp-scripts aspell-ar ara-byte not+sparc openoffice.org-l10n-nn linux-backports-modules-karmic-generic-pae
    [Show full text]
  • GTK+ Properties
    APPENDIX A ■ ■ ■ GTK+ Properties GObject provides a property system, which allows you to customize how widgets interact with the user and how they are drawn on the screen. In the following sections, you will be provided with a complete reference to widget and child properties available in GTK+ 2.10. GTK+ Properties Every class derived from GObject can create any number of properties. In GTK+, these properties store information about the current state of the widget. For example, GtkButton has a property called relief that defines the type of relief border used by the button in its normal state. In the following code, g_object_get() was used to retrieve the current value stored by the button’s relief property. This function accepts a NULL-terminated list of properties and vari- ables to store the returned value. You can also use g_object_set() to set each object property as well. g_object_get (button, "relief", &value, NULL); There are a great number of properties available to widgets; Tables A-1 to A-90 provide a full properties list for each widget and object in GTK+ 2.10. Remember that object properties are inherited from parent widgets, so you should investigate a widget’s hierarchy for a full list of properties. For more information on each object, you should reference the API documentation. Table A-1. GtkAboutDialog Properties Property Type Description artists GStrv A list of individuals who helped create the artwork used by the application. This often includes information such as an e-mail address or URL for each artist, which will be displayed as a link.
    [Show full text]
  • Debian and Ubuntu
    Debian and Ubuntu Lucas Nussbaum lucas@{debian.org,ubuntu.com} lucas@{debian.org,ubuntu.com} Debian and Ubuntu 1 / 28 Why I am qualified to give this talk Debian Developer and Ubuntu Developer since 2006 Involved in improving collaboration between both projects Developed/Initiated : Multidistrotools, ubuntu usertag on the BTS, improvements to the merge process, Ubuntu box on the PTS, Ubuntu column on DDPO, . Attended Debconf and UDS Friends in both communities lucas@{debian.org,ubuntu.com} Debian and Ubuntu 2 / 28 What’s in this talk ? Ubuntu development process, and how it relates to Debian Discussion of the current state of affairs "OK, what should we do now ?" lucas@{debian.org,ubuntu.com} Debian and Ubuntu 3 / 28 The Ubuntu Development Process lucas@{debian.org,ubuntu.com} Debian and Ubuntu 4 / 28 Linux distributions 101 Take software developed by upstream projects Linux, X.org, GNOME, KDE, . Put it all nicely together Standardization / Integration Quality Assurance Support Get all the fame Ubuntu has one special upstream : Debian lucas@{debian.org,ubuntu.com} Debian and Ubuntu 5 / 28 Ubuntu’s upstreams Not that simple : changes required, sometimes Toolchain changes Bugfixes Integration (Launchpad) Newer releases Often not possible to do work in Debian first lucas@{debian.org,ubuntu.com} Debian and Ubuntu 6 / 28 Ubuntu Packages Workflow lucas@{debian.org,ubuntu.com} Debian and Ubuntu 7 / 28 Ubuntu Packages Workflow Ubuntu Karmic Excluding specific packages language-(support|pack)-*, kde-l10n-*, *ubuntu*, *launchpad* Missing 4% : Newer upstream
    [Show full text]
  • Curriculum Vitae of Joseph Pingenot
    Curriculum vitae of Joseph A.F.S. Pingenot Affiliation: Department of Physics and Astronomy Position: Postdoctoral Researcher Center for Semiconductor Physics in Nanostructures Citizenship: United States of America The University of Oklahoma Telephone: +1 319-621-2678 Address: 440 W Brooks St., Room 215 Fax: +1 405-325-7557 The University of Oklahoma Website: http://pingenot.org Norman, OK 73019, USA Email: [email protected] Educational and Professional History Academic Preparation Doctor of Philosophy 2009, University of Iowa, USA. Electron And Hole Spins In Quantum Dots. Bachelor of Science 2002, Kansas State University, USA. Bachelor of Science in physics. Professional Experience Postdoctoral 2008-present. Department of Physics and Astronomy, The University of Oklahoma, USA. Researcher Investigating numerically and analytically the Rashba spin-orbit interaction in InSb/AlInSb quantum wells and interacting arrays of CdS/CdSe/CdS quantum well quantum dots. De- veloped software (C, C++) to calculate the charge and spin properties of semiconductor nanostructures. Used GNOME (e.g. glib/GIO), scientific libraries (e.g. FFTW3, GSL), Free and Open Source software (e.g. flex, bison), and high-performance computing technologies (e.g. OpenMP, MPI, CUDA/GPGPU) to quickly, accurately, and flexibly perform calcula- tions in research and educational settings. Used shell scripting and perl to perform needed pre- and postprocessing of data in order to do a large number of calculations and present them coherently and accurately. Organized a scientific conference, working with with others on the organizing committee, vendors, sponsors, and attendees in order to provide a world- class scientific interaction experience to the attendees. Supervised students as they pursued scientific research.
    [Show full text]
  • Optimizing Software in C++ an Optimization Guide for Windows, Linux and Mac Platforms
    1. Optimizing software in C++ An optimization guide for Windows, Linux and Mac platforms By Agner Fog. Copenhagen University College of Engineering. Copyright © 2004 - 2010. Last updated 2010-02-16. Contents 1 Introduction ....................................................................................................................... 3 1.1 The costs of optimizing ............................................................................................... 4 2 Choosing the optimal platform........................................................................................... 4 2.1 Choice of hardware platform....................................................................................... 4 2.2 Choice of microprocessor ........................................................................................... 6 2.3 Choice of operating system......................................................................................... 6 2.4 Choice of programming language ............................................................................... 7 2.5 Choice of compiler ...................................................................................................... 9 2.6 Choice of function libraries........................................................................................ 11 2.7 Choice of user interface framework........................................................................... 13 2.8 Overcoming the drawbacks of the C++ language...................................................... 14 3 Finding
    [Show full text]
  • Benjamin Eugene Key's Resume
    Benjamin Eugene Key's Resume Benjamin Eugene Key 12343 Hunters Chase Dr. Apt 826 Austin, Texas 78729-7217 Home: (512) 250-2239 Mobile: (512) 773-0652 E-Mail: [email protected] Summary A dedicated, self-motivated, and self-taught Software Engineer with demonstrated suc­ cess in the design and development of Assistive Technology applications for Microsoft Windows operating systems. Sixteen years of experience in developing software using C++ and a deep understanding of using object-oriented design principles. Proven problem-solving skills. Proven ability to acquire knowledge about new concepts independently in a short amount of time. Qualifications Programming Languages • C++17 • C++14 • C++11 • C++ • C# • Python • JAWS Scripting Language 1 Markup Languages • HTML 5 • HTML 4 • CSS • Markdown APIs, Frameworks, and Libraries • Win32 API (Windows Application Programming Interface) • STL (Standard Template Library) • MFC (Microsoft Foundation Class Library) • ATL (Active Template Library) • WTL (Windows Template Library) • Boost C++ Libraries • COM (Component Object Model) • MSAA (Microsoft Active Accessibility) • Microsoft SAPI (Speech Application Programming Interface) 4 • Microsoft SAPI 5 • Microsoft Speech Platform 11 • Vocalizer Expressive by Nuance Applications • Microsoft Visual Studio 2017 • Microsoft Visual Studio 2015 • Microsoft Visual Studio 2013 • Microsoft Visual Studio 2010 • Microsoft Visual Studio 2005 • Microsoft Visual Studio 2003 • Microsoft Visual C++ 6 • Microsoft Embedded Visual C++ 4.0 • Perforce • BugZilla • Defect
    [Show full text]