Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

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

At the moment our team has a huge challenge, we're being asked to deliver a new GUI for an embedded controller. The deadline is very tight and is set on April 2013.

Our team is very diverse, some people are on the level of procedural/structured programming (mostly C), others (including myself) have mastered object oriented programming (C++, C#). We built a prototype for Android, although it has its quirks, it is mostly just OO.

For the future there is a wish to support multiple platforms (Windows, Android, iOS). In my opinion a HTML5 app with a native app shell is the way to go.

When gathering more information on the frameworks to use etc., it became obvious to me a paradigm shift is needed. None of us have a web background so we need to learn from the ground up. The shift from functional to OO took us about 6 months to become productive (and some of the early subsystems were rewritten because they were a total mess).

Can we expect the learning curve to be similar? Can this be pulled off with a web app? (My feeling says it will already be hard to pull off as a native app which is at the edge of our comfort zone).

share|improve this question

closed as primarily opinion-based by Ixrec, durron597, GlenH7, gnat, Bart van Ingen Schenau May 14 '15 at 10:57

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

This is difficult to answer since it all depends on the complexity of your project. I can't say anything about the "embedded controller" part. So if I understand this right: You want a web server that collects some information from a webapp and then activates some functionality on some device? – thorsten müller Nov 29 '12 at 8:34
We want a android ARM board to communicate with the embedded system via a serial connection (rs485 or spi). The android system will display the data on its own touch screen. In the future there is a wish to run the gui on a phone or tablet and get the data from the android ARM board. In total there will be 10 screens in the initial release, this will grow to 100+ during the next years. – refro Nov 29 '12 at 8:46
Have you looked at You can develop native applications for Android/IPhone using .NET. – jgauffin Nov 29 '12 at 8:59
Yes we have but you can't re-use the ui code. And to be honest the documentation is quit bad. – refro Nov 29 '12 at 9:40
functional programming (mostly C) While it's true that C has functions, it's pretty much the antithesis of functional programming. Perhaps you meant to say structured programming? – Caleb Nov 29 '12 at 14:43
up vote 4 down vote accepted

As long as I can understand, you will have a custom Android ARM board that will communicate to your embedded controller via RS485 or SPI. I said "custom" because AFAIK the standard Android platform/device usually just supports USB as a physical link. In the future, you plan to use a standard Android tablet/smartphone as a "console" so you will have USB communication only (or you will fall back to wifi or Bluetooth).

In this case, I think we can assume that you will end up using the Android Open Accessory Dev Kit at the end of your development process and will use USB as you physical link:

This will be a source of headaches by itself.

If you plan to develop for a few different platforms (mainly Android, Apple iPhone and Window 8 Phone) most likley you will end up using an abstraction layer like:

or any other one of these:

This will be another major headache.

Given this scenario, learning HTML5 technologies (that actually means HTML5, CSS3 and Javascript) will be the easy part.

Maybe you could evaluate a differente solution. Maybe something similar to AirDroid:

That is: put a small web server inside your embedded controller and use it to expose a web interface via wifi to any web-capable device out there. If you are using Linux, QNX or any other Unix flavor as your embedded system OS, the embedded web server should not be a problem.

This way you would have to develop just a single administrative web application to be hosted by your controller and an single web-interface for your clients. Please note that this client-side UI would not be a HTML5 wrap around the native mobile platform (like phonegap) but just a simple web page that could be seen and used by any web-browser on any kind of device.

Have a look at webmin for Linux, as well:

There are other, sometime better clones of webmin out there. Many of them are already used in DSL routers and other net appliances to expose a web interface via ethernet and/or via wifi.

To expose your embedded controller functionalities to the web-admin application you will just have to develop a few interface libraries (C/C++ to Perl/Python/Ruby/whatever). This can be done with tools like SIP and SWIG:

Put aside these technical considerations, learning and managing HTML5 (actually a mix of HTML5, CSS and Javascript) can be done in a very short time. Most likely, you will be able to "parallelize" the learning process.

If you use a layer abstraction, like phonegap, put at least a couple of your most experienced programmers on it. This will be the hard part (because phonegap is the crossroad of all of the other problems). Ask them to develop a small, very simple app with it. It will take them a week or two but it should be enough to understand how to use the abstraction layer and how to solve the main problems.

Javascript is a strange language, with very good parts and very bad ones. Most likely, you will have to put at least one or two of your OOP programmers on it. Ask them to develop a small demo, like a small calendar application. This should be enough to see the most important issues of the language and should take them just a few days or a couple of weeks.

Put one or two of your structured (C) programmers at work on HTML and CSS. This should be quite easy for them. Please note that they will not have to dominate CSS. They will just have to understand and use it in a quite basic way (at least at the beginning).

Most likely, the Javascript and HTML/CSS teams will have to work together (because JS cannot be used without the HTML/CSS stuff).

Have each one of your small team reporting what they have learned to the other teams once a week. This is required to merge together all of the required skills (at least at the conceptual level). Have them develop a very small fake protototype of your app before beginning the real project. You have to develop a HTML+CSS+Javascript+otherstuff application and it would be very hard to develop the required skills without a small test project.

In any case, your real problem seems to be the lack of a senior programmer who already knows all of these technologies and can lead you in the design stage (and can solve the hardest problems during the development).

ORION is absolutely right in suggesting you to hire a consultant to play this role.

share|improve this answer

The biggest difficulties that I think you'll face with getting up to speed with web development:

  • The complete mess that is web development. You get your app to work in one browser, then it'll look different or worse, not work at all on another browser. Then you fix that one, then it'll break or look wrong on another.

  • The huge mismash of technologies. HTML, CSS, Javascript, the DOM, then you've got the server-side to learn all about. The standards are forever changing and it gets really annoying after a while.

  • What should be a simple UI thing (eg, auto complete, drag and drop) is unbelievably difficult when it comes to web. We have not come a long way.

  • Frameworks, frameworks, frameworks. There are a billion out there, and everyone claims theirs is the best. Picking out one that does what you need simply will be a challenge.

  • Developing in a stateless environment is a very fundamental mind-shift compared to having state. The web is a strange beast and indeed it will take a while for you to get your heads around it.

It sounds like you're already off to a good start - if you already know how to code and understand what's happening behind the scenes (and if you're doing embedded code then you definitely do), so you should be ok. Investigate a couple of frameworks, test the heck out of everything, and above all, KEEP IT SIMPLE. I cannot stress that enough. Keep it simple and try not to cry when you see how much of a hack the web actually is!

share|improve this answer
Good information, plus you made me laugh with the cry remark :) – refro Dec 5 '12 at 9:37

In my opinion, I believe that if you guys put in an effort, it shouldn't take much to pick up web programming. Given, application programming and web programming require different thought processes, the transition from one to the other shouldn't be too painful. If you guys have some good examples to work from, it will be even easier. From my experience, I found that the toughest part of transitioning from application programming to web programming is the learning curve for JavaScript and CSS. These things take time to master, but once you know it, you can do some amazing things, especially with some of the advancements in web technology.

As far as building a new GUI for the embedded controller, I can't really say how difficult it would be to build and maintain with a web app because I'm not sure how complex it is or what functionality needs to be built in. Nevertheless, there is an abundance of great technologies and information resources at your disposal, so the sky is the limit.

One suggestion that I might add is to maybe consider bringing on a good contractor with 6+ years experience in developing web applications and has a background in OOP and Mobile Programming.

share|improve this answer
"6+ years" is a very arbitrary number. – Paul Nov 29 '12 at 14:38
It is, just going off of my own experience of 7 years =D – ORION Nov 29 '12 at 14:52

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