Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

As a beginner programmer I've only worked with programming computer based applications, but a question has been coming to my head very often since I started programming and I can't get it answered properly.

Machines don't act on their own, that's the programmer's job, he tells it what to do and when to do it, but my curiosity lies beneath computers. I'll take the examples of an ATM software on this post but keep in mind there are many others such as a washing machine display, or a TV, mobile phone, you name it.

How exactly is the software for these kind of machines built? I imagine it can't be identical to computer-based programming. What language do they use to make such things work and how does one get the job done? Are there programmers specialized on this kind of programming? What is the process of making these machines come to life?

share|improve this question
Thank you for the link. I had no clue about this until I found your link. Also why was this downvoted? What's wrong with it? – Bugster Mar 9 '12 at 21:32
@ThePlan People tend to downvote questions that are not of the type "How do I solve this particular problem?" – CFL_Jeff Mar 9 '12 at 21:35
Although people may downvote for several reasons and are not required to explain themselves, the tooltip on the downvote arrow reads: "This question does not show any research effort; it is unclear or not useful" - I think the first sentence is very close to a sufficient explanation for the downvote you received, please do at least some minor research before asking on Programmers. – Yannis Mar 9 '12 at 21:42
I say cut him a little slack. It's difficult to research embedded programming when you don't know the term. – Karl Bielefeldt Mar 9 '12 at 22:42
up vote 15 down vote accepted

It's known as Embedded Systems or Embedded Software Development. I'd recommend this book if you want to know more about the general process without going too much toward any one architecture. It even gives you a real time operating system to play with.

Embedded Programming is very architecture dependent. You are typically working under serious response, program size, error recovery, and cost constraints. For instance you might have a z80 (8 bit processor, they are everywhere) and perhaps a couple of kilobytes of memory to play with. You might only have a ROM to tell the system what to do and how to set up the program. It might also only be a couple of kilobytes in size. Why so little memory? Well if you manufacture 15 million of the little suckers; every penny becomes $150,000.

I'd suggest fiddling with something like Arduino or Scribbler Robots if you want to learn more by doing. As far as Languages go, C, C++ and Assembly are the typical set though Java can be used (and was in fact originally designed for this domain if you can stomach that thought) Others could definitely be used as well, I've known of Lisp and ML both being deployed.

Learn as much as you can about architecture as well because like I said, memory allocation and bitwise operations start getting really important.

share|improve this answer
Thanks, this answer is my choice of an accepted answer because it explains the embedded systems in a nutshell and also gives me a book option. – Bugster Mar 9 '12 at 21:46
@ThePlan - the nice thing about embedded is that you can test them. If you only have 3 inputs and 3 outputs it's pretty easy to confirm what works. You don't have to test for what happens if they run your code under Hebrew Windows XP on a Turkish keyboard with an Uzbekistan version of Flash. – Martin Beckett Mar 9 '12 at 22:49
@MartinBeckett: You have somewhat trivialised the difficulty of embedded systems development. The last one had a realtime response requirement meansured in nano seconds. It was untestable - the only way to know it was correct was to prove the code was correct by design and review. Unlike the cowboys who code user applications thesedays, whose defects are fixed by an online update. – mattnz Mar 10 '12 at 3:40
In addition these systems may be required to operate for years or even decades without human or other access. – World Engineer Mar 10 '12 at 3:44
@mattnz - it's not always easy but it is at least do-able. In cowboy desktop code, on top of an OS you can't fully test, written with a toolkit you can't fully test with 1000s of other apps potentially interacting with it, plus random actions of users - it's pretty much hopeless. – Martin Beckett Mar 10 '12 at 4:46

There is definitely an embedded angle here. But these days you are seeing more and more advanced platforms on what would traditionally be called embedded devices. For example, LG and Samsung TVs both now have APIs and app stores. Sony TVs will be running Android.

share|improve this answer
...and some ATMs run Windows. When they blue-screen, the pictures usually end up on . And in my city, the local public transit sells monthly passes from kiosks. I once saw one that got stuck booting - it was running Windows 2000 (this was about 6 months ago)! – FrustratedWithFormsDesigner Mar 9 '12 at 21:34
@FrustratedWithFormsDesigner -- thanks, don't do ATMs here so I'm not aware what they are doing . . . – Wyatt Barnett Mar 9 '12 at 21:37
ATM = Automatic Teller Machine. AKA Bank Machine. AKA The machine that lets you take money out of your account instead of having to go to a teller. – FrustratedWithFormsDesigner Mar 9 '12 at 21:40
I know that, just don't work with them as anything but a customer . . . – Wyatt Barnett Mar 9 '12 at 22:23

I've seen two ATMs opened up in Denver, Colorado. Both were (then) Compass Bank ATMs, and both were Windows XP under the hardened case. I did get to ask the tech what, specifically, one of them ran, and he said something like "XP Embedded".

So, I bet ATM programming is less like embedded programming these days, and more like standard Windows development.

share|improve this answer
Not just "these days". ATMs used to run Windows NT 3, or OS/2. And the UI you see is most likely to be HTML pages displayed by Internet Explorer. The Programming language can be anything - I've worked on a Java system that replaced one written in VB. ATMs really are just regular PCs with some unusualy peripherals and drivers. – Michael Borgwardt Nov 23 '12 at 10:35

These types of devices are programmed using embedded programming. This is a very low-level type of programming that deals heavily with logic and gates.

If you are interested in learning embedded programming hands-on, I would recommend looking into arduino.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.