Different Strokes for Different Folks: An Analysis of the SDK Versus Native C Code Debate

By Aaron Sloman (CTO, OWNZONES Media Network)

 

Turner’s proposed solution with the You.i acquisition relies heavily on a C++ code base to act as the fundamental underlying basis of its in-house streaming and app development technology stacks. Using a pure C / C++ coding approach to implement these applications can be done, but it presents several issues when compared to an approach using “higher level” languages and their associated libraries, particularly when it comes to building front-end apps. Therefore, we feel it is important for the industry to begin a discussion about these issues, exploring the benefits and drawbacks of using low level vs. high level approaches when building this technology.

 

The “low-level” vs. “high-level” debate has been a spirited discussion amongst developers for nearly as long as there have been computers, but really took off in the 90s, as computing power allowed for the creation of new languages and tools that insulated programmers from many of the burdens imposed on them by low-level languages, such as pointer handling and memory management.

 

In the Windows world, Microsoft initially provided the Win32 API, a set of C and C++ bindings for application development, but with the advent of “RAD” programming tools like Visual Basic, most developers not writing shrink-wrapped software or specialized, high-performance applications switched over to the new higher level languages and tools as applications could be developed far more simply and quickly than with C and C++.

 

This trend accelerated with the introduction of languages such as Java and the Microsoft .NET family of languages, which also provided rich libraries for application development. With the explosion of the web as an application environment and subsequent rise of scripting languages such as Javascript, Python, Ruby, PHP, and ASP.NET, low-level language use declined even further.

 

Mobile app development and the need for higher performance web applications have shifted the programming landscape somewhat, as language researchers have tried to find ways to blend the advantages of high and low level languages to gain the benefits of both worlds. Apple has introduced Swift, Google has created Go, and Dropbox uses the Mozilla-developed Rust language.

 

When considering the choice to develop a top to bottom stack for video streaming applications exclusively in C++, it is important to remember the strengths and weaknesses of the language in comparison to other choices. C++’s primary advantages over higher level languages are:

 

  • Performance; very high quality C++ code can still have a significant speed advantage over solutions developed in higher level languages

 

  • Control; C++ libraries tend to exist at a level closer to the services provided by the native operating system and can allow access to low level OS functions

 

Balanced against these advantages are the following:

  • UI / UX development; C++ suffers in comparison to nearly every high level language environment for ease of use when developing end user applications

 

  • Time to market; C++ based applications can take significantly longer to build and test than applications built in languages that offer more programmer support for features such as automatic memory management and asynchronous programming

 

  • Cost; C++ is a complex language, requiring generally higher levels of expertise to use well. This translates directly to higher expenses in terms of developer talent and time needed to build new features

 

  • Features; most of the higher level languages come with SDKs and libraries that provide a far richer set of functionality than can be used immediately far more easily than with C++. In some cases, such as mobile app development, preferring C++ to the “native” languages of the platforms (Swift on iOS, Java on Android) can significantly affect development time

 

  • Maintainability; although it is possible to create badly written, poorly organized software using any programming language toolset, the complexity of C++ can exacerbate this problem

 

Because of these kinds of considerations, most developers prefer to use high level languages and tools for all but the most performance intensive portions of the applications they are building. Hybrid approaches are common; small libraries for high performance functionality are developed in low level languages, while the rest of the solution is created in high level languages. However even in this arena, high level languages have been making steady inroads as the performance of these languages and their libraries catch up to C and C++.

 

In evaluating various options and approaches to building applications, all these points need to be given appropriate consideration. Having had experience in both approaches, and today managing development of rich media applications across many platforms, I for one make use of high level language tools and the support that comes with them, as opposed to Turner’s take, which consists of a completely “roll-your-own” technology utilizing an approach that fails to properly address many of the issues detailed above. By utilizing higher level tools and approaches whenever possible, we are able to significantly shorten time to market while providing enhanced user experiences and better integration with the technology platforms we are developing for.