As you’ve poked around the world of tech terms trying to get a handle on all that industry jargon, you might have come across reference to a programming language called C. Or was it C++? Or maybe it was both? But then didn’t you also see a post somewhere that mentioned C#? And what about that forum topic where someone asked about Objective-C? What exactly IS the difference between C and C++? Or C++ vs C#? Are these all different versions of the same thing? Or are they not even related at all?
The answer is that each of these names—C, C++, C# (the # is pronounced “sharp”), and Objective-C—refer to specific computer programming languages. C came first, and the rest were either built off of C or inspired by it. In order to get a clearer picture of what makes each of these languages unique, how they relate to one another, and how they’re used in the tech industry today, I spoke with two tech professionals and got their pro tips on the subject.
C and Object-Oriented Programming Languages
To understand the qualities and differences between C++, C#, and Objective-C, you need to start with the original C programing language. According to Nick Hubben, Senior Creative Technologist at digital marketing agency Genuine Interactive (and husband to Skillcrush Director of Engineering Emily Davis), the C programming language was developed in the early 1970’s, became implemented in many of the first mainframes and microcomputer of the 1980’s, and has since grown into a ubiquitous coding presence, serving as an influence on many programming languages in use today. Hubben describes C as the grandparent of object-oriented programming—a class of languages including C++ C#, and Objective-C.
While some types of programming languages function by providing computers with a list of tasks to execute, object-oriented programming languages allow programmers to create virtual objects within their code—each with unique attributes and abilities—that can then interact with one another to perform actions. A simple way to picture it is to think of object-oriented programming as a virtual set of building blocks. Each block is an object that is defined by a specific shape, size, etc., as well as types of behavior (e.g. can it be stacked on top of a different kind of block? Can certain blocks be stacked on top of it? Where is it placed right now?).
Groups of objects can then be given instructions, for instance a group of A blocks can be used to build a tower, while a group of B blocks can be instructed to create steps leading to the top of the tower. The benefit of this object model is that it reduces complexity by mimicking real world building and giving programmers a clear structure to work with. Objects can be isolated and maintained separately from the rest of their code (making it easier to locate and repair bugs), and—once created—they can be easily reused in future programs.
However, Kelly Wilkerson, Co-Founder and Lead Developer at iOS data backup and management company Decipher Tools, says it’s important to note that C is not an object-oriented language itself. With C, Wilkerson says, there are no categories of classes or objects in the code. Instead, C uses something called structs to group values of basic types together. Despite this difference, Wilkerson says, the common denominator between C and it’s object-oriented relatives C++, C#, and Objective-C is that the latter three—while all object-oriented—were designed using a C-style syntax (the set of rules that define correct use of a language). But if the other three C-Family languages are all object-oriented languages based on or inspired by C, what sets them apart from one another?
C++ vs C# vs Objective C
C++
Released in 1979, Wilkerson says that C++ was specifically created to add objects and instance methods (object behavior) to the original C language. This was based on the idea that object-oriented programming would be more effective and efficient for large software projects—something that Hubben points to as a reason for C++’s wide adoption in the years since. Hubben says that C++ is the language used to write many current desktop applications (including Adobe programs like Photoshop, Mozilla’s Firefox web browser, and the Microsoft Windows operating system), and—as a result of this large usage base—a vast number of frameworks and libraries (collections of tools used to develop software, websites, or apps) have been built to extend C++ for functions like high-performance graphics, audio digital signal processing, and user interface design. Meanwhile, Wilkerson says that C++’s standard library is so huge that beginners can get up and running on projects without having to write a lot of common code themselves, even without venturing into third party libraries.
C#
While C++ was derived directly from the original C language, C# is an object-oriented programming language that was “inspired by” C. First appearing in the year 2000, Hubben says C# is the language used to develop programs within Microsoft’s .NET framework (Microsoft’s proprietary framework for developing Windows software and applications). Although it’s primarily used for software running on the Windows platform, Hubben says C# is not exclusive to it, and is well-suited for general object-oriented programming projects both small and large.
Objective-C
Hubben says that Objective-C was developed in the late 1980’s with the aim of building a flexible object-oriented programing language with a focus on reusability of code. Objective-C’s creators added some concepts found in another language called Smalltalk , believing this would improve upon C++ as a C-based object-oriented language. Hubben says that Objective-C was adopted by a company called NeXT—Steve Jobs’ computer company he formed before returning to Apple in the late 1980’s—and eventually became the foundation for OSX and iOS (Apple’s desktop and mobile operting systems, respextively). However, Hubben says that in recent years Apple has begun replacing Objective-C with a language called Swift, as the company is moving away from C-style languages.
Are All C-Family Programming Languages (C, C++, C#, and Objective-C) Still Commonly Used?
Wilkerson says that all four languages (C, C++, C# and Objective-C) are still used in the tech industry (though she mentions—as above—Apple is encouraging programmers to learn Swift instead of Objective-C). In fact, Wilkerson says all four languages can be used cross-purpose. For example, Wilkerson says you could write C/C++/C# code for OSX if you really wanted to. “It’s common to use a mix of these languages for a project,” Swift says. “You could write an iPhone app in Objective-C but use some C libraries and C functions along the way.” That being said, Wilkerson describes some of the more typical single-use cases of C, C++. and C# as follows:
C is used for systems development (things like operating systems or firmware—permanent software stored in a computer’s memory), and it’s so widely supported that it’s also a good choice for writing libraries used by multiple programming languages, or programs that need to run on multiple operating systems. For example, I’ve written software that’s a mix of Java and C code for cross-platform projects.
C++ is a great choice for large, performance-sensitive projects that would benefit from object-oriented design (things like high-end video games and graphics programming).
And finally, C# programming is a popular choice for Windows software development, back end web services, and database-heavy applications.
Hubben says that he uses C++ and C# on a daily basis in his own work. According to Hubben, C++ is the basis for a popular creative coding framework called openFrameworks that allows quick prototyping of graphics as well as support and extensibility for computer-controlled hardware, cameras, microcontrollers, lighting, and more. “I use openFrameworks to make fun animations and interactive software for event marketing applications and tradeshows.” Hubben says. In addition to the C++ powered openFrameworks, Hubben also uses game development platform Unity3D with C# for projects that require 3D rendering and professional graphics.
How Can You Learn C-Family Programming Languages and What Kind of Jobs Require Them?
Wilkerson was exposed to C and C++ in college, but since her classes didn’t focus on C++ she didn’t leave school proficient in the language. Later on in her career she ended up teaching a C++ unit as part of Introduction to Programming Languages at Arizona State, which forced her to get more comfortable with the language on her own. Meanwhile, she picked up C# when she was interning at Microsoft during grad school, and taught herself Objective-C after she started developing iPhone apps in 2008.
Hubben is self-taught in both C++ and C#. As an ActionScript/Flash developer he was motivated to learn C++ by wanting to build higher-performance animations and move away from web development. “I learned from trial and error and scouring examples from openFrameworks and Cinder (another popular creative coding framework for C++),” Hubben says. “The openFrameworks community, in particular, is extremely giving of their time and knowledge.” With plenty of free tutorials available online from sources like Learn-C, Udemy, SoloLearn, and Code School (in addition to communities like openFrameworks), the resources are there to start your own familiarization process with the C-Family of languages.
When it comes to the C-Family and practical job application, Wilkerson has the following advice:
I’d group C and C++ together in saying they are huge if you want to go into game development, operating systems (especially Unix or Linux development), or firmware. You’ll also sometimes come across jobs that involve supporting or transitioning older systems that were written in C or C++. And even if you’re not doing C or C++ intensive work, a little bit of C or C++ (and I stress little bit—as in being able to read it) will serve you well in any job, since you’re likely to bump into some C or C++ code or library no matter what project you’re working on.
C# experience will serve you well if you want to work on Windows software or web development (typically backend). There also tend to be C# job opportunities in business and internal company software.
And if you want to work at Apple (or you want to make iOS or macOS software), you definitely want to learn Objective-C. Again, Apple is transitioning to Swift programming, but to navigate the current world of existing code and third party libraries you’ll want to be able to at least read Objective-C code.