Glossary Terms and Spark Concepts for the uninitiated

Hi there, Spark Community - Teke O’Reilly here at Spark HQ is sunny Minnesota. I’m a communications, writer and community kind of guy with many years of Public Radio broadcasting and Community Management under my belt. I love Tech and Maker culture passionately, but a lot of this hardware information is super new to me and I’m trying to capture some of the basic vocabulary and concepts that underlie how Spark works from a newbie’s point of view (this way other n00bs will have a convenient resource to jump into - and I’ll only be this clueless once :smile: ).

Please join me in building this glossary with your insights, questions and opinions. It will be an on-going project, and your knowledge is deeply appreciated.

:spark:What are the most important/elemental/essential basic building block terms to understand in programming hardware? Software? Firmare?

:spark:What terms give the Community problems (maybe 2 or 3 meanings, or multiple use cases?)?

:spark:What is the most difficult concept to understand? (from both a Noobs point of view, and from the experienced wizened mentor - what do people have the most trouble with when learning about the Core?)

:spark: N00bs! Chime in. Is this stuff confusing?! ASK YOUR QUESTION! Because I guarantee if you have that question, so do 50 other people. I know I will.

:spark: Why are there so many cats on the internet? There must be an answer.

SUPER excited to begin exploring the fascinating projects and reading the wormhole conversations you crazy Spark makers are having. And thank you for your contributions to the Community. I’ve learned so much just in the last two weeks from you, can’t imagine all that’s to come. Cheers!



Sketch vs firmware vs code vs script. I remember seeing a thread debating this topic, but I can’t seem to find it now.

I think one of the trickier aspects of :spark: programming is trying to keep user code from taking too long to execute (or run in infinite loops) and not allowing the :spark: to perform its ping back to the cloud.



I dove in to all this about 3 months ago and with non stop learning its all still a big ball of confusion for me. The best thing to do is find something that you want to build and ask questions on the forms from people who have been doing this stuff for most of their life’s.

The community here is awesome and they are more than willing to help you out if you need it.

The quickest way to learn is to try something until you figure it out. As you progress certain things will begin to make sense and the more of these moments you have the quicker you will build your knowledge base.

Adafruit is great for selling hardware with working code and examples to get you started which makes a world of difference for a person just getting started out.

The Spark Core is very cool but still very new so if your starting out with the Spark Core then its going take alittle more patience than if you were working with the more solid Arduino boards. With the forum here you have many people who can help you out so I would advise you to take advantage of it.

To me trying to learn all this from scratch is kinda like trying to learn the Chinese language, its not something that your going to accomplish in a few days, weeks, months, and probably even years. But you can learn enough to get just what you need done to get your specific project up and running.

To me its all worth it. I’m able to do things now that I would have only dreamed of doing just 6 months ago.

Stick with it and Welcome :smile:

1 Like

What are the most important/elemental/essential basic building block terms to understand in programming hardware? Software? Firmare?

Most beginners and a lot of arduino folks are not used to the concept of foreground/background processes, familiar to those who have RTOS (reat time operating system) experience. What makes the Spark unique and what also makes it confusing to learn is this concept of core and user “programs”. We really need to explain this to users using diagrams, text and examples/tutorials.

What terms give the Community problems (maybe 2 or 3 meanings, or multiple use cases?)?

One thing is this concept of “Arduino compatible”. The Spark is NOT Arduino compatible anymore than the PIC or the Maple or many other ARM-based systems. They DO however share something in commong - the WIRING language and C/C++. In my mind, the Spark is “friendly” to Arduino users. What makes the Arduino so popular is its vast out-of-the-box libraries and this should be one of the goals for the Spark team.

What is the most difficult concept to understand? (from both a Noobs point of view, and from the experienced wizened mentor - what do people have the most trouble with when learning about the Core?)

From working so much on the forum, I can see members have problems with these:

  1. The core/user code concept I mentioned above
  2. Flash and RAM and the fact that they don’t really how much their code can or is using
  3. The CLOUD thing. Users not familiar with Internet of Things and concepts like JSON, HTML, COAP, yada yada yada will get lost very fast. More examples, more tutorials

Why are there so many cats on the internet? There must be an answer.

Because we let them!



I understand the who/what/when/where/why of foreground vs background processes and friends; I just don’t understand the “how” it’s implemented. Normally, I would almost consider this an advanced topic, but since it’s important for users to be aware of the time limit of user code, it probably needs to be explained pretty early in the user learning experience.


This is a fantastic start, thank you so much!

How would you define ‘firmare’ in the simplest terms, say, 2-3 sentences?

teke, paraphrased from

You can think of firmware simply as “software for hardware.” Devices that you might think of as strictly hardware such as Arduino boards, the Spark Core, a WiFi router, or smartphone all have software that is programmed into special memory contained in the hardware itself.


The term “firmware” seems to be used in two contexts that are somewhat related. There’s the Spark core firmware, and then there’s the user code firmware. If you simply use the term “firmware” in a post, it could be confusing to new users (or even me) as to which “firmware” you’re referencing without enough context clues.

1 Like

To me Firmware is the underlying operating system on the Spark Core, like Windows 8 on a computer.

Then you have applications like Microsoft Word that run on the Windows 8 Operating System and these applications are really just like the applications you create for the Spark Core to do what ever job you want to be done.

The Spark Core is getting constant Firmware Upgrades just like Windows 8 gets constant security updates.

1 Like

Hi @Teke

I like @peekay123 's answer but some historical context might help you to understand too.

We people first started to write programs for small microprocessors and microcontrollers, those programs had to be put into special memories like EPROMs that could hold that program with power off. These memories often were ICs (chips) that had to be physically removed from the microprocessor board and reprogrammed using a special IC programmer. Since there were a lot of extra steps to update these programs but they could still be updated, people called these programs “firmware.” They weren’t hardware that needed to be re-designed for any change, but nor were they software that could be changed quickly and easily. They were in between.

Fast-forward many years and now we have things like the Arduino bootloader, which is the base program loaded into every Arduino that lets you add your program fairly easily but you still need a special USB process to load your “firmware.” Fast-forward again to the Spark Core and now you can load your program over an internet connection from a web page or command line.

When still call these programs “firmware” but the label is starting to apply less and less with each leap in technology. In fact some people could argue that the only “firmware” in say an Arduino is the bootloader program that helps you load your programs or in the case of the Spark core, the “firmware” might be the Spark provided internet code loading mechanism to load your program.

So firmware started out being something harder to change than software but not quite as difficult as redesigning the physical hardware. Nowadays firmware tends to mean programs that run on smallish computer boards.


bko, your history is dead on it’s just that we need a short description for the new Spark users. Anyone with any experience won’t be looking for a definition anyway! :open_mouth:

RWB, people have different understandings of what an operating system is. Typically, an operating system obfuscates (hides) the underlying hardware to make programming simpler and more universal. Though the Spark firmware does a bit of that with the cloud interface, I would not call it an operating system. Nonetheless, new people may understand your take more easily! :ok_hand:

1 Like

This is all super helpful! In the end, yes, we’re trying to piece together some approachable (simple) definitions and explanations for the uninitiated, but really these discussions are so helpful to round out the language. It’s especially helpful that you’re pointing out history, context, evolution and common understanding vs. literal and/or deep technical understanding. Plus, the uninitiated could be at a variety of novice levels. Perhaps knowing a lot about software, but nothing about hardware. Ramble on, :spark:ers. Every different perspective has value to all the varieties of learners.

I gave an extra :spark: to my best friend and coworker, @Poiju. It’s his first programmable microcontroller, so he’s pretty new to electronics and hardware, but he does have a lot of programming and computing experience. I gave it to him to get him into electronics hacking, as well as get a fresh perspective on things like this very thread!

1 Like