Successful Endeavours - Electronics Designs That Work!

Search Results for 'C Programming Language'

Top Programming Languages

Each of the past 3 years IEEE Spectrum have conducted a survey of the Top Programming Languages. This year they have done it again and the results are in. The overall winner is Python with C taking out the Embedded Software category.

Here is the overall list covering all development platforms considered.

Top Programming Languages 2017

Top Programming Languages 2017

So Python is the winner and for the first time. It’s continued rise in usage is a testimony to the usefulness of the language and the ecosystem that sits around it. But the top 4, Python, C, Java and C++ are a long way ahead of the rest overall.

Top Embedded Programming Languages

And for Embedded Software development we have.

Top Embedded Programming Languages 2017

Top Embedded Programming Languages 2017

There has been some discussion around whether Arduino is a Language since it is a platform with a development tool set built around C and some libraries. But this is a compilation of responses from software development practitioners and so they obviously think it is.

The surprise for me is Haskell. Functional Programming is still in its infancy and there is a lot we don’t fully get about it so I was surprised to see it ranking so highly. What would be really useful is to also get an understanding of what types of problems/solutions/applications the programming was being applied to rather than just the language the solution was implemented in.

Of interest is the correlation with the languages we use here at Successful Endeavours. Here is our short list:

  • C
  • C++
  • Python
  • PHP
  • Perl
  • VHDL
  • Assembly
  • HTML
  • Arduino

The previous results can be found in

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In AustraliaRay Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2017 Successful Endeavours Pty Ltd.

Programming languages

It is 2016 and we are a long way from the 1970s. So of course the world has moved on. Today’s programming has advanced significantly and we have super low powered systems of extraordinary capacity and easy to program securely. Surely!

Or should that be surely?

So here are the IEEE top programming languages for 2016.

Top Programming Languages 2016

Top Programming Languages 2016

This isn’t the first time we have done this. If you go back to Top Programming Languages 2015 you will see that C was second and Java was first. This year, C is first. A 1970s language is back to being first for all programming in 2016. Why?

It is called the Internet of Things or IoT.

So is this a step backward?

In 2016 devices shipped in the product category known as the Internet of Things exceeded all other mainstream electronics device categories. Take all mobile phones, tablet computers and iPads, desktop computers, netbooks, laptops, servers and general computing devices combined, and this is less than the value of products shipped in the category of the Internet of Things.

And this is what is driving the use of the C programming Language. For these small, low powered, low cost, essential to our future devices, have to be programmed in something that lets you get close to the hardware so you can manage it, and also operate in a high level language. My hat goes off to Dennis Richie and KenTompson who developed this language in the early 1970s and gifted it to us all. Their vision has carried an entire civilisation forward.

Ken Thompson and Dennis Ritchie

Ken Thompson and Dennis Ritchie

So more than 40 years later, I am still very grateful for their foresight, vision and competence in creating the most used computing language on earth today.

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In Australia. Ray Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2016 Successful Endeavours Pty Ltd.

Top Programming Languages

We previously look at the Top Programming Languages for 2014 and IEEE Spectrum have released the same information for 2015.

Top 10 Programming Languages 2015

Top 10 Programming Languages 2015

One interesting thing is that use of C, the oldest of the top 5 languages, is increasing.

You can read the full article at The 2015 top ten programming languages including how they assessed which languages are used. They also have a App you can purchase if you want finer detail and to always be up to date.

Successful Endeavours specialise in Electronics Design and Embedded Software Development. Ray Keefe has developed market leading electronics products in Australia for nearly 30 years. This post is Copyright © 2015 Successful Endeavours Pty Ltd.

C Programming Language

The C Programming Language was developed by Dennis Richie and Ken Thompson at Bell Laboratories between 1969 and and 1973. It was the successor to B and used to create Unix. The recent bad experience with the Multics time sharing operating system development had made Bell Laboratories sensitive to that sort of cost blowout so the project was not widely promoted until the first working version was complete.

Ken Thompson and Dennis Ritchie

Ken Thompson and Dennis Ritchie

So what did C bring to the table that made it such a valuable asset? Here is a list:

  • can be used to directly interface to and manipulate hardware and IO
  • so it allows you to get close to the hardware itself
  • was a procedural programming language supporting structured programming
  • can be used to write an operating system
  • or sits very close to the operating system
  • had flexible naming conventions
  • had flexible memory allocation (static, local, global and dynamic)
  • could be compiled to machine language with a relatively simple compiler
  • is portable (mostly)
  • compiles to very fast executing code
  • compiled program can run without an operating system and do not need a virtual machine or any other components

The disadvantage compared to more modern procedural programming languages is that you usually do more typing to achieve the same outcome, it isn’t object oriented by nature and the variable typing is flexible so you can create some spectacular program failures if you get the cast wrong or convert a void pointer (no type associated with it) to the wrong data type. And one big compatibility issue is Endianness where different computing architectures store multi-byte data with the high byte at the top or bottom of the word so you can’t just swap binary data and expect it to always work. So you surely you would think we would have moved on to something better?

Programming Language Usage Trends

A recent study of computer language trends over the past 10 years by Embedded Gurus shows that unlike the anticipated rise of the C++ Programming Language in embedded systems, the use of C is rising and C++ falling. You can read the full article at C: The Immortal Programming Language where we see that Assembly Language use is falling as expected, the use of  C Programming Language is actually rising.

Programming Language Use Trends

Programming Language Use Trends

Now to be clear, this is for Embedded Software Development. In Top Programming Languages 2017 we see that Python is the most used programming language in the world across all domains with the  C Programming Language coming in second overall. This is a very big jump for Python but also a jump for the C Programming Language.

Successful Endeavours Programming Languages

At Successful Endeavours the majority of our embedded systems code is written using the C Programming Language . Our Windows code is a mixture of C and C++. For website development it is PHP and Python. So that’s 4 of the top 10 programming languages listed in Top Programming Languages 2017 .

Top Programming Languages 2017

Top Programming Languages 2017

So I expect we will be continuing to program systems using C for quite some time to come. Especially smaller system that don’t have an Operating System. Now maybe someone should focus a but more attention on teaching C to the next generation of programmers.

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In AustraliaRay Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2018 Successful Endeavours Pty Ltd.

Top Programming Languages

A recent survey of the most used Software Languages, also known as the Top Programming Languages,  has revealed what most would have guessed as to the most popular Software Development Languages in use. The survey was published on IEEE Spectrum and usefully allows you to look at the statistics for 4 types of software development in any combination you want to. The categories used for the breakdown of the statistics are:

  • Web
  • Mobile
  • Enterprise
  • Embedded

Web Development Languages

The most popular Web Development Language was Java followed by Python, C# and PHP. I was surprised that Python ranked so highly. I understand the Google use it but hadn’t realised it had become so prevalent. So I learnt something new from that part. This is one of the advantages of being part of the professional body like IEEE. The world we live keeps changing and expanding and this is one way to stay up with those changes.

Mobile Software Development

For Mobile Software Development the winner was again Java with C, C++ and C# coming next. So here we are still very C oriented even on the most modern platform around. And of course Java is also very C like in its structure having been developed to address some system level issues such as memory management and garbage collection that C requires you to handle manually.

Enterprise Software Development

Enterprise Software Development sees Java again a the winner with C, C++, Python and C# coming next. Again Python is higher than I expected but the rest makes sense. Given that this area represents one of the core infrastructure requirements of modern scale-able companies it is interesting to see how narrow we still are with the Software Languages we use.

Embedded Software Development

And finally to the world we mostly deal with, Embedded Software Development. The clear winner here is C followed by C++ and Assembler. I took a snapshot of the complete rankings. Embedded C remains the primary language for software development in embedded systems.

Top Programming Languages - an IEEE published survey

Top Programming Languages

You can see the full survey results at Top Programming Languages. 

The overall winner was Java when you take all 4 categories into account and that isn’t hard to accept given Java was the Top Programming Language in 3 of the 4 categories. So if you are thinking about what Software Languages you should learn, it depends on where you want to work and what you want to work on. For Embedded Software Development, it is still C and C++. For everything else, Java is core with C, C++, C# and Python all playing a part.

Successful Endeavours specialise in Electronics Design and Embedded Software Development. Ray Keefe has developed market leading electronics products in Australia for nearly 30 years. This post is Copyright © 2014 Successful Endeavours Pty Ltd

Doug Engelbart

There are lots of people who have done enormous service to the world through their inventiveness and willingness to share with other. A good example is Dennis Richie who I gave a tribute to in 2011 and who gave us the C Programming Language, one of the most used computing languages even today.

Doug Engelbart holding an early computer mouse

Doug Engelbart holding an early computer mouse

I recently came across Doug Engelbart who passed away 4 years ago and is responsible for inventing many of the ideas behind modern computing including:

  • Father of the mouse
  • Videoconferencing
  • Hyperlinks
  • WYSIWYG word processor
  • Multi-window user interface
  • Shared documents
  • Shared database
  • Documents with images & text embedded
  • Keyword search
  • Instant Messaging
  • Synchronous Collaboration
  • Asynchronous Collaboration
  • and much more

The Mother of all Demos

The Mother of all Demos was a 90 minute presentation he put together in 1968 to demonstrate, for the first time, some of the above inventions. Below is a video with selected highlights.

This was the beginning of Interactive Computing and a critical breakthrough on the way to the Graphical User Interface and eventually the WIMP (Windows, Icons, Mouse, Pointer) Operating System concepts.

You can read more about his contributions at:

The First Mouse

And now for a look at the First Mouse. This one predated the 3 button version used in the Mother of all Demos.

Again I am very grateful for those who have gone before us and shared and collaborated so freely that we might all benefit together.

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In AustraliaRay Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2017 Successful Endeavours Pty Ltd.

Dennis Ritchie: farewell and thank you

With the recent passing of Steve Jobs, the world has had a reason to reflect on the significant impact some people have. Someone who made everything Steve Jobs did possible also passed away recently. On the 12 October 2011, Dennis Ritchie, the father of The C Programming Language, died at his home in Berkley Heights, New Jersey.

Beginning in 1970 and with the help of Ken Thompson, Dennis Ritchie began the design and construction of a new programming language. It was based on a language developed by Ken Thompson dubbed B. So the next language was called C. And the reason they wanted to create a new language? They wanted to write the kernel for the powerful multi-user operating system UNIX. that was to replace MULTICS which Bell Labs were ending their involvement with in 1969, the same year man first stepped on the moon. And in doing so, Dennis Ritchie and Ken Thompson created the framework on which all our modern computer and communications infrastructure are based.

Dennis Ritchie

Dennis Ritchie

The C Programming Language

The importance of The C Programming Language cannot be underestimated. Not only did it make UNIX possible, but it made UNIX possible on multiple computing platforms. It was also the foundation for higher level languages such as C++ and Java as well as most of the core infrastructure of the Internet is based on programs written in C.

A few additional reasons why C is so important:

  • Microsoft used it to create their initial software offerings
  • UNIX is the origin for OSX and iOS
  • 80% of all embedded software is still written in C
  • Our business writes the Embedded Software we create in C
The C programming language, Brian Kernighan & Dennis Ritchie

The C programming language, Brian Kernighan & Dennis Ritchie

The C Programming Language, Brian Kernighan & Dennis Ritchie, was the language manual for C and was so well written that it made picking up the language easy and was one of the reasons for the rapid uptake of the language.

So much of our modern world depends on the work of Dennis Ritchie. And I along with many others are grateful. He may not have been the public figure that Steve Jobs was, but he is leaving a larger and more enduring legacy.

Here are some further accolades for Dennis Ritchie:

And finally the 1998 USA National Medal for Science and Technology received by Dennis Ritchie and Ken Thompson for their creation of the UNIX operating system and The C Programming Language.

And Ken Thompson and Dennis Ritchie explain what was behind the development of the UNIX operating system

We stand on the shoulders of giants. And Dennis Ritchie was a giant amongst giants.

Ray Keefe has been developing high quality and market leading electronics products in Australia for nearly 30 years.  For more information go to his LinkedIn profile at Ray Keefe. This post is Copyright © 2011  Successful Endeavours Pty Ltd

What is Code?

Those who write software refer to source code. This is human readable instructions for a computer to execute. Which either gets compiled to machine code in the instruction set the computer can execute, or is interpreted directly by a virtual machine. Java and Python are 2 languages that commonly use virtual machines. Whereas C or C++ are most likely to be compiled to machine code.

In this topic we will be talking about human readable source code.

Who writes Code?

Coders write Code. Sometimes they are also called Programmers, Hackers and Developers. To understand the difference, I like the definition given by Daniel Miessler who also blogs on technology topics.

Developer, Hacker, Programmer

Developer, Hacker, Programmer

  • Coder = Programmer = anyone who uses writes code
  • Hacker = Programmer who makes a specific something
  • Developer = Programmer who has been formally trained

So it is possible to be all 3 which is where we use formal methods and skills to make something specific by writing code to be executed on a computer.

Which brings us to the point of this post; “How to do it well“!

Writing Better Code

There is more than on dimension to this so for today I’ll focus on just 2, and my thanks go to Johannes Brodwall at DZone for stimulating my thinking.

Don’t do it on your own

Not many people only ever write code on their own. There are exceptions. But for most of us working on any substantially sized system, the writing of the code is shared. One of our current projects is updating and improving on a code base that was started in 2009. So 9 years ago. There have been 8 programmers contributing to it over those years and even though I was responsible for 80% of it originally I’ve contributing very little to the most recent round of new features or feature enhancements.

So principle number 1 is that great code comes from Collaboration. It needs to have the following qualities:

  • readable – first and foremost, write it for those who will follow
  • maintainable – lots of little principles like small commits, well abstracted, single responsibility
  • easy to modify
  • testable – test is a stakeholder so this should be considered in the design
  • reviewable

An interesting agile practice is Pair Programming. One types and the other reviews as they type. This allows more experienced programmers to teach others what they know by explaining as they go, and also to reduce the critical need for code reviews because the code is always reviewed. However don;t jump in too quickly if you think your partner is making a mistake. Maybe they are. Maybe you’ll learn something.

So code is made and maintained by a community in the long run. Whether is is an open community or a closed one inside a commercial business, it is more than 1 person’s responsibility.

So that is the first principle. You are writing for more than you. Make it useful to others.

Learn how to code On Purpose

There are many great resources you can draw on to learn how to code rather than by trial and error. I’ve bought many of the Pragmatic Bookshelf titles and found them very useful.

The Head First series from O’Reilly are also a great way to learn from the compiled wisdom of the industry to date. Start with Head First Software Development to get a good idea of generic Software Development best practice.

Head First Software Development

Head First Software Development

Explore methodologies and principles such as SOLID, Test Driven Development and many others. It will give you ideas. Very good ideas.

And there are many great online communities and resources you can leverage such as DZone. This is a very big topic so I’ll leave it at that. What I do recommend is that you don’t drift into this, you do it on purpose. Learn, adapt, and become better at coding.

The future will increasingly depend on 2 critical things:

  • better values based decisions about how we share this world together
  • better software – because we will eventually end up with software managing everything

Code well and prosper.

You can read the full post by Johannes Brodwall at how to write better code.

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In AustraliaRay Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2018 Successful Endeavours Pty Ltd.

Software Design

This continues on from my posts on Software Architecture and Operating Systems. The basis of Software Design for Embedded Systems is ensuring that you implement the required features within the available hardware. A lot of people forget that second point. I have found there are many more opinions on what you “Should Do” than there are helpful ways of assessing what you “Can Do” and how likely it is to be successful. Way too much of the conversation is like the picture below.

Software Programming

Software – You’re Doing It Completely Wrong!

Unlike a typical Computer Science project, there are hard and fast restrictions on the system resources in a Small Embedded System. Some of the constraints to consider are:

  • RAM
  • FLASH or program storage space
  • Clock Speed for both the peripherals and the main processor
  • Power Consumption
  • IO and peripherals
  • Latency requirements

 If we have selected and Operating System then we also have constraints from that choice:

  • How to tasks or modules communicate?
  • How is data protected from simultaneous access by foreground and background tasks?
  • What is the worst case latency for a task or interrupt response?
  • Can I meet the peak execution demand with the processor, Software Architecture and Operating System?
  • What design methodology will I use?
  • How will I test?

Software Design Methodology

This is also a pretty big area. For now we will focus on the primary methods that are used to manage more complex projects.

State Machine

The first and most important is the State Machine, originally known as the Finite State Machine. It was an invention of Hewlett Packard and many were surprised that Intel beat them to the first microprocessor given that the State Machine was one of the breakthrough concepts that made that possible. At it’s core, a State Machine defines the states a system or sub-system can be in and the conditions under which it moves from one state to another. Below is a State Machine for estimating the charge left in a rechargeable battery. We design a lot of battery powered equipment so this is a common design element for us.


Finite State Machine

State Machine

One big advantage of a State Machine is that it can be easily designed to operate in a polled environment where very little processor time is required until a transition condition is achieved. This allows very complex systems to operate without needing a larger processor.

Test Driven Development

Test Driven Development is the next important Software Design Methodology to consider. In this case the system is analysed and the test requirements identified. The tests are written and then the code is written and debugged until it passes the tests. If requirements change, then update the tests to match and debug until the code passes. Code is refactored once is passes all tests.

The big advantage of Test Driven Development is that you think about test up front and that generally leads to simpler designs that are easier to maintain. You also always have a full test suite to ensure changes made don’t have side effects that cause other features to misbehave. The tests pick this up automatically.

The big disadvantage is that you might write tests then decide to change direction and have to recreate those. These is also interaction between the system call structure and the test suite so you need to do more detailed design up front. But particularly in mission critical applications, always having an up to date test suite is a big advantage.

Rapid Application Development

The final consideration is whether you will use a visual coding or modelling system. For Windows Software we are big fans of the Embarcadero toolset, formerly under the Borland brand. These support Rapid Application Development or RAD as it is known. The tools create forms and provide the software skeleton to go with them automatically managing class members and access functions for you. This way you can focus on the application specific code. We find their C++ toolset one of the most productive to create application with.

These systems are generally used on general purpose computing platforms and larger embedded systems rather than a Small Embedded System.

However the concept behind them support rapid prototyping and minimal code writing to get to a working demonstration. Rapid Application Development is primarily about doing this. Get to a prototype fast then find out what the problems are. You can think of this as Risk Identification. Identifying and eliminating risks early is one of our core strategies for delivering projects on time and budget and is covered in more detail in our Project Management Methodology.


Another common approach is the Unified Modelling Language or UML. This uses an open standard for a visual model to drive the code generation. You get the model right and the tool produces the Embedded C code for you. This is also important for reusability. The models are processor independent so in theory you can use them on any processor the toolset supports. They support state based design most easily but can be hard work for highly algorithmic processes or communications processing engines.

Regardless of the Software Design Methodology selected, the coding must still be done with care. But selecting the right Software Design approach makes that a much more likely process.

Successful Endeavours specialise in Electronics Design and Embedded Software Development. Ray Keefe has developed market leading electronics products in Australia for nearly 30 years.  This post is Copyright © 2012  Successful Endeavours Pty Ltd

Electronics Manufacturers are the people we serve

A common question we are asked is what sort of Electronics Manufacturers do we Develop Products for?

So I thought I would compile 3 lists:

  • The first is a list of the Electronics and Embedded Software product types we have worked on
  • The second list is a list of the industries we have Developed Products for
  • And the third list is the Technologies we have worked with so far

I might have to regularly update this third list since knowledge and technology are constantly expanding.  Before I do the lists I’d like to present a video that specifically addresses this last point.  This is very much worth thinking about.  Enjoy.

Electronics and Embedded Software Products

Did you notice the section from 1:45 to 2:15?  We are being prepared for jobs that don’t yet exist, technologies that haven’t been invented, and problems we don’t even know we will have!

Here is the list of some of the Electronics and Embedded Software Products that do already exist and which we have helped to create: