Tuesday, September 02, 2014

Minimum knowledge to become a good Embedded Systems Developer

A minimal thing which an Embedded system developer should know can be summarized as follows

  • H/W Set/Reset/Initialization process
  • Board support packages
  • Start-up code
  • C/C+ Programming with Assembler of the processor
  • Memory interfacing (RAM/ROM/FLASH/EPROM etc)
  • Dynamic memory management
  • I/O - Memory mapped/Port mapped
  • Peripharals and Interfacing
  • Network protocols
  • GNU Linux/RT Linux/RTOS
  • Posix Programming 
  • System design
  • Electronic Circuits Design & Troubleshooting
  • Analog Electronics
  • Some Control theory

Monday, September 01, 2014

Write "toy" programs, more the better

Writing toy programs can help you to like programming. The goal might be to learn syntax of certain constructs, fiddling with a new library , playing with a new data structure, dabbling with a new algorithm, "messing" with a new platform, for some nostalgia, or see an algorithmic incarnation of a new mathematical concept learned etc.

Now a days, we cannot choose what you want to do. At least, a small percentage of the programmers like programming  (I mean, programming as a cognitive endeavor) and they are forced to do Software Engineering or IT maintenance,in their day job. Because of the tight deadlines,  ever shrinking time to market and entropy in the code base, modern programming has become a physical sport. A sizable time is robbed to settle people issues, meetings and teleconference.

When you do something at the comfort of your home and you are doing it voluntarily, you might end up liking what you have done. Toy programs help you to reinforce some ideas which one might have glossed over, on the job. By understanding the nuances of what has been delivered, you will be able to "de-aggravate" pain points for others, especially those souls who are forced to do something on top of what you have already done.

Writing toy programs to implement mathematical routines have always been a favorite of mine. Thanks to these acts, I can reason about a vast majority of mathematical formalism.

Let me give you five case studies in my life.

  •  I internalized SQL by writing a relational closure engine using an in-memory data structures. The idea was not to learn about SQL, but to get intense familiarity with C++ Standard Library! I implemented SQL Schema using STL Maps, Records using Muti-set,Cartesian product using Iterators , Filters using STL functors, Expressiion trees by composing stuff using Template Meta Programming etc. At the end of it, I learned SQL query evaluation strategy and could  reason about STL constructs really well.
  • Working as a Computer graphics programmer, I found myself really comfortable with Linear Algebra of third and fourth order. To learn about higher order operations, Computing determinant ( no need to compute determinant using computers as direct methods for inversion are available), Triangulaeization,LU factorization, Inversion etc, I wrote a small Java library to learn this. Struggling with a Math book and tearing five notebooks won't teach me half of that.
  • I was struggling with Regular expression, NFA , DFA, LALR, LL theory. To learn about these mathematical formalisms well, I ported Craig Rich's Generic interpreter to C# in 2004 ( I ported RE engine, Grammar and LL). Thanks to this endeavor, I am comfortable with the theory of automatic (table driven) parsing
  • Wrote a series of small programs in GNU Linux in 2010 when I was on a self funded sabbatical. This initiative lead me to series of GNU Linux consulting assignments, Learned Objective C/C++ and drifted to MAC OS X/iPhone programming and did Java programming under Linux
  • A week spend on learning .NET IL internals, became SLANG4.net and it has given me consulting assignments to incorporate SLANG to production systems. At least five souls learned about Compiler construction because of that.

Toy programs you write  can become source of joy, a tool against boredom, a motivation pill to feel young and If you are lucky, profit as well. What more you want out of an endeavor?

Sunday, August 31, 2014

An old proverb seems to be right!

I heard from an erstwhile colleague (a while back)  the following saying, "Dane Dane Pe Likha hei Khane Wale Ka Naam". This can be duly transliterated as,"In every grain, it is written that who is going to eat it".

I was having a chat with Sagar Bhupalam, a guy who I know through Kerala Microsoft Users group. He is an avid quizzer (not sure, how he will perform as a person who attempts to answer his own trivia :) ) and recently took an excellent session on Regression Analysis. I had blogged about his session here.

After the chat, I had another session  with a different friend of mine, about Enterprise Architecture. I had link to a eBook which was dealing with Infrastructure side of EA. While sharing the link with the guy who was discussing EA with me, I inadvertently pasted into the window of Sagar, who promptly downloaded the book and dispatched a "Thank you" message. I wrote to Sagar that, "This high quality book is destined to reach you, I was just a channel".

I thought, "It is written in the  book that Sagar has to consume it". This can be transliterated as, "Har Kitab pe likha hei, padne wale ka Nam".

PS:- My wife made a small correction and now it is , "Har Kitab pe likha hei, Padne Walom ka nam". A book is read by multiple people, unlike a grain!

A way to keep you young, If you are a Software Professional

I underwent a period of "not so good time" from May to July and was felt, bit  depressed. Things were not working the way I wanted it to be and had some anxiety about what can keep me ticking. In the first week of August, Sanjay George, a friend of mine explained about the electronics/embedded course he had undergone @Grey Technolabs. He explained about Arduino programming and PIC Microcontroller programming  , he did there.

Even though, I have purchased an AVR development board in 2013 (Arduino uses AVR mucri-controller) and purchased a Beagle board with ARM, because of some business trips, I could not carry out my electronics/embedded studies much, after a great initial momentum. I got enthused by Sanjay's idea about Digital farming for Aquaponics and a Salinity sensor caught my attention.

I  began to re-look at Electronics and unfortunately, my electronics component tool box was in Trivandrum. It was a God-sent of a different kind. After a week of reading and countless Youtube videos, I went and purchased Bread Board, Multi-Meter, Three batteries, an AC-DC battery eliminators, Resistors of different kinds, Capacitors of different charges,LEDs, Wires, 3V bulbs, Potentiometers (variable resistors),Relays (for Motor control),Toy motors, Fans etc. A book written by Biju Sebastian helped me in arriving at the specification.

I began to play with Basic circuits to re-kindle my memory. Since I have worked with Electronic CAD software development, Multi-layer PCB Schematics/Layout, Circuit Simulation tools, SPICE extension Compilers, Auto-Routing/Auto-Placement,Direct Hardware access,Device Drivers, Embedded Systems etc , I know bulk of the higher level lingo used by Electronics/Embedded Industry. Obsession with x86 assembler and C/Assembler interface during formative years of my life makes Embedded programming,easier for me.

What I was lacking is intimate familiarity with real components and devices. I am progressing fast. I went to purchase an Arduino Uno and some shields (Extension board to make Arduino an Ethernet host/Sensors etc). Unforunately, I could not get Arduino Uno and planning to order Arduino Uno and Rasberry Pi online soon. I will get an 8051 development board with a bunch of features next week from Ashok Shenoy, an avid electronic enthusiast who is comfortable with Hardware Design/Embedded Microcontrolers, ARM bare metal programming, Hardware/Software Design etc.

Learning circuit level electronics had an interesting side effect, I now read, seventh standard and eight standard books to have "Back to the basics" trip. Interest in Physics and Chemistry has comeback and flipping through Feynman's Lectures on Physics has become a habit of sort etc.

Tinkering with hardware is a enjoyable and fruitful activity. It has made me young once again. This knowledge is handy in the Semi-Conductor/VLSI industry sales pitch, IOT and Engineering services.

Learning some Electronics/Embedded Hardware and Software can get a new lease of life and it is profit as well. I am seeing the convergence of Maker movement, Open Source Hardware and Open Source Software all across the world. I was missing all the fun which was going on elsewhere in the world. I want you also to take a look.

Started reading "Cooking for Geeks"

Because of the fact that I am learning Electronics from the ground up, my interest in Basic Science is going up. To know about Electronics, one need to re-visit fundamentals of Chemistry and Chemical properties of certain substances.

While reading up on some basic chemistry, I decided to further my knowledge on Chemistry ( I used to score good marks in Chemistry!) and remembered a book I purchased in the year 2011, titled, "Cooking for Geeks". I went to my ancestral home and picked the book.

As usual, I have started skimming through the book, already learned some good memes about Food, it's chemical composition and preservation. I am enjoying the insights which I get about nutrition while reading the book.

Rants on Enterprise Architecture - Part 0

I am sick of hearing people equating Enterprise Architecture and Enterprise Application Architecture. Enterprise Architecture is a moniker for tackling business problems by doing a business/functional approach and involvement of technology is just a detail to be taken care by the downstream people. To be an Enterprise Architect, you should be having multi-disciplinary skills and know-how about Technology plays only a minor part. 

To be an Enterprise Architect, one needs to have Business modelling skills and the big picture approach towards solving business problems at the level of detail which ought to put in the case.That involves stakeholder analysis, business strategy, knowledge about operational constraints/compliance, Service delivery management, SLA compliance/violation, IT Portfolio management,Business Architecture,  Standard costing, Finance, Opex vs Capex, Best practices in the Industry etc.

This series is meant to dispel the myth of Enterprise Architecture and what an Enterprise Architect is supposed to do. There are frameworks like TOGAF,FEA and Zachman to choose for a practitioner of Enterprise Architecture. There are things like COBIT and ITIL (for infrastructure/service delivery) which acts a supplementary framework for a EA practitioner.

Enterprise Application Architecture is the practice of building applications suitable to run on multi-geography network with good scalability, handling cross cutting concerns, robust technical architecture/platforms etc. The Architect in question should have good skills in Platforms/Technologies/Tools. Enterprise Architecture and Enterprise Application Architecture are poles apart.

"Love Jihad" in UK - It is there, Every one is in a state of denial like Kerala

I had blogged about Rotherham Sex Scandal case here. This is not an isolated incident and I happen to see at least some more wiki links on Sex trafficking gangs run by men of of Pakistani origin.

Following links will give you a rough Idea

When I was in Denmark, I happen to see Pakistani and North African gangs chasing Danish girls while police looking mute spectators around in Central Copenhagen. In a country,where Sex can be solicited, these men were on a pack hunting mission. I had seen similar thing in Munich, Germany.

Dr. Robert Spencer - Islamic Scholar and Director of Jihad Watch

There is a conflict which is brewing all over the world viz. Islam as a religion vs Islam as a political ideology. Because of historical reasons , the Islam which originated in the context of tribal political conflicts of  Arabian peninsula,  does  not stay itself as a religion, it is in fact a Political ideology as well.

There are some verses in the Koran which calls it followers to wage Jihad against Kafirs. That is the root cause of all Islamic/rest of the world conflict.

Dr, Robert Spencer knows about Political Jihad than any other person in the world. He is running an organization and a web site to write about it. I want everyone to read his About page and especially the Q&A before reading his site. You can access Jihad Watch here.

Saturday, August 30, 2014

Dr. Sanjiva Weerawarana - The man who made Sri Lanka, a true software powerhouse

I went to Colombo, Sri Lanka in the year 2012, expecting a place with Chennai like ambiance and expected a bunch of average Software Engineers. I happen to visit two companies, which changed my whole perspective about Sri Lanka.

I saw people who knew the stuff they were doing really well. The Software engineering practice were world class and an excellent Product Engineering Culture ( as opposed to Excellent Software services culture we had). India can afford to play Number game (Services) in the Software Industry and Sri Lanka or any other neighbor cannot compete with India at that. Being in the same geography, Sri Lanka has to innovate to be in Software map of the world. One of the Advisor to the president of Sri Lanka did confide to me that their strategy is to encourage smart youngsters from Moratuwa and Pera Deniya university to start their own.

Sanjiva Weerawarana came back to Sri Lanka in 1997 and did setup Lanka Software Foundation, to start contributing to the Apache Open Source Initiative. The team which Sanjiva assembled developed Apache AXIS, Apache Axis for C++, Apache Geronimo, Apache Sandesha etc. The Software developed by the team became a world class vendor of ESB/API management company, named WSO2. WSO2 stands for Web Services Oxygen.

Because of him, lot of people pursued for PhDs and have started creating their own companies. The Wiki profile of Sanjiva is available here and blog can be retrieved from here.

Rotherham - Pakistani gang waged a "Jihad" on White Girls and their own Girls!

Rotherham town in England Just published a report that a gang of men of Pakistani origin abused 1400 girls, mostly Whites. Authorities did not take action, as it will be considered as Racial targeting and it is against the ethos of Multi-Culturalism.

As per the report, victims were white girls between the age of eleven and twenty. But, as the report surfaced more and more Muslim girls have testified that they also suffered Rape. The Muslim girls  who came forward to report this were accused of lying or ostracized for bringing shame to the community. The gangs target both boys and girls. 

One of them, Mr. Umar Razaqq fled to Pakistan and wrote an audacious status on the face book that,he is  "Leading a good life". 

You can read about the issue @ the Wiki Page. You can read about Ruzwana Bashir's story here.

10001 C/C++ Memes - Part 2

  • Meme #8- The first Microsoft C compiler was written in collaboration with  Lattice and Life boat associates and it was called MC. Even though, the compiler was written in the early 80s, I could lay hands on the compiler in the institute which I learned programming had it  and it was regarded as a "weak" compiler as it did not have much library functions compared to Turbo C. You can read about Lattice/Microsoft Compiler here.
  • Meme #9- Borland international's Turbo C version 2.0 was popular in the 1993/1995 time line for writing MSDOS based C Programs. It was a compiler which had only support for 16 bit programs. 
  • Meme #10- Desmet C was a popular compiler among hackers who studied in IITs. I happen to get a Desmet C compiler from a friend of mine, who got a PC when it's owner emigrated to America to work with AT&T corporation. I also inherited some of his sample  programs and found it educational to study it.
  • Meme #11- Zortech C++ (in 1997) was the first PC C++ compiler which was written from Scratch. Borland International released is first C++ compiler in the year 1990 and Microsoft released their first C++ compiler in 1992. 
  • Meme #12- Zortech C++ became Symantec C++ compiler and it's latest avatar Digital mars compiler infrastructure is still actively developed by Walter bright. 
  • Meme #13 - Turbo C++ version 1.0 was the most popular C++ compiler in our part of the world for a long time. It could only produce 16-bit executables, no support for Windows Programming and confirmance to C++ standards. Since the college syallbi advocated the use of Turbo C++, still it is being used all across India.
  • Meme #14- Borland C++ 3.1 was the first widely available compiler (in Kerala) which supported Windows Programming. Later, people began to use Borland C++ 4/4.52 and 5.x for 32 bit development. 
  • Meme #15- Metaware High C/C++ was used for writing extensions for Autodesk/Discreet 3DS Max. 
  • Meme #16- Earlier Microsoft C Compilers did not support IEEE 754 floating point. They had something called Alternate Math Library (/FPa). To Interface C code with a Language like Clipper, one needs to compile the Object file using this flag. 
  • Meme #17- MSDOS did not support multi-tasking and multi-threading. People use to simulate threads/tasks by writing TSR (Terminate, but Stay Resident in memory)  in x86 assembly and C. Turbo C and Microsoft C had good support for writing TSRs. They provided inline assembly, pseudo registers (_AX,_BX etc) , tiny memory model (program and code will fit in 64 kb), calling interrupt ( int86 function) etc. 
  • Meme #18- MSDOS can address only 1 (640 Kb for programs) MB of RAM, as it was using something called Segmented Architecture. Even-though some of the PCs had 4 MB of RAM in 1993/1994, only some program could use the extra memory. Lotus, Intel and Microsoft first created Expanded Memory Specification ( a protocol to acess extra RAM) and a competing standard, Extended Memory Specification eventually became the way to acess extra RAM. People began to write extended memory (necessary for games) tools, they called DOS extenders  to help programmers to use extra memory. Companies like Pharlap, DOS4GW, DJGPP (GCC for DOS) etc. were providing C based tools to make your program leverage all the RAM available. The standard was known as Dos Protected Mode Interface ( DPMI)

Friday, August 29, 2014

Architect's role de-mystified

Just Now, I had a discussion on hodge-podge of things  with Mr. Safil Sunny, an erstwhile colleague of mine and a budding entrepreneur. We discussed about a POS solutions being developed with iOS/Android, .NET back-end and Magento integration etc, for a while.

In the midst of discussion, the topic drifted about some individuals we both know of and their whereabouts/activities. We discussed about the technology/platforms  fixations of certain  Individuals while addressing themselves. They talk about .NET Solutions Architect ( is an oxymoron!, as Solutions person should not be tied to any platform) and even Enterprise Architect/.NET etc.

The discussion drifted to the meaning of the term Solutions Architect and this is what Safil told me.

"An Individual who can see a problem from three sixty degrees (360 deg) is a true Architect, as far as I am concerned.Those who carry technology tag along with them are a bunch of deluded Individuals"
      - Safil Sunny, August 30, 2014

10001 C/C++ Memes - Part 1

  • Meme #1- Both C and C++ had it's origin in the same building at AT&T Bell labs @ New Jersey. The company is disbanded into different companies since. The Company was knows a AT&T/Western Electric, then it became Lucent. Now, the company is called Alcatel-Lucent. 
  • Meme #2 - Dennis Ritchie is the father of C Programming Language. He created the language as the next version of B Programming language co-created with Ken thompson and B language was extension to BCPL language created by one Mr. Martin Richards. The Idea was to use a high level language for writing an Operating System. They re-wrote bulk of the Unix OS in C and language has got some close connection with Unix, ever since. 
  • Meme #3 - Bjarne Stroustrup created the C++ Programming language and it was initially called C with classes. He created the language not as an extension to C. He had a disastrous experience with ALGOL while writing a Simulator for his Phd dissertation. He wanted a language which supports Simula like classes with couple of other goodies. Instead of creating a language from scratch, he decided to piggy back on an existing language. Initially, he wrote a pre-compiler to translate C++ code into the C language and the tool was called AT&T C-Front. Most of the initial C++ implementations were variants of C-front. Stanley Lipman, an author of good C++ books was one of the key guys in the language implementation team. .
  • Meme #4 - If you do not know K&R Book, you are not a C Programmer. K&R stands for Kernighan and Ritchie's Book titled, "C Programming Language". Before the standardization of C Programming Language in 1988, It was the book consulted by compiler writers for writing a C compiler. It was the de-facto standard. Second edition of the book contains the entire grammar of C-88 specification.
  • Meme #5 - The habit of writing "Hello World" programs started from the book. The legend has it that people who started with hello world program did not put down their book until they reached the end of the book. Still, programmers world wide occasionally flip through the book for inspiration.
  • Meme #6 - The K&R book and it's answer book written by Scott Gimpel/Clovis tondo  is still a good buy to improve your programming skills. The title of the answer book is "C Answer Book".
  • Meme #7 - To be a good C programmer, one has to only master four functions and their usage in real life. They are MALLOC, CALLOC , REALLOC,FREE. They are called Dynamic memory allocation functions.  The skills in Pointer Arithmetic and dynamic memory allocation functions are the only thing which you need to be a master C Programmer

10001 C/C++ memes - Part 0

Every year, I get quite  a few  request from people  to help with their C/C++ Programming problems. In fact, those are not problems. It is a case where they do not know about some fact (a meme). I think, to make my life and their life easy, I might log this somewhere. This series is just an attempt at that. 

With the advent of  Rasberry Pi and Arduino, there is renewed interest in going low level for writing software which interface with Hardware networks ( Sensors), in the context of Internet of Things. The availability of cheap and free development  tools for Embedded Microcontrolers (8051,AVR, PIC) and Embedded Microprocessors (ARM/AVR 32 bit) can retain the relevance of  C/C++ for a long time.

People who are comfortable with Java, C#, Python, Ruby on Rails can extend their relevance in the Software engineering by learning to program C/C++ to write JNI modules, P/Invoke, Python Extensions, Native Gems for Ruby etc. For Embedded Linux and Android (stack) development, C/C++ is the preferred language and it is going to be so, as long as we live.

From a Cognitive perspective, you are missing something, If you are not comfortable with C/C++. This might be interpreted as a political statement, and it is political!

I promise you that I will write only things which I have come across as a C/C++ Programmer, in my career or in my tinkering adventures.Any search on Google will be to ascertain the factual correctness of what I have written.

So, you might find some opinions, as opposed to facts. The element of subjectivity can be there.

Thursday, August 28, 2014

Perils of Bottom up learning at the market place - a Personal Saga

Note:- This post should not be skimmed and might result in loosing the message which I am planning to convey. Only for smart geeks who want to learn in a collaborative manner :)

I have shifted my learning model to a Top down approach. By this, I mean, (Now a days) I learn topics just enough to do the task at hand and visit the subject matter latter to have a ground up view, to satisfy any psychological craving for completeness (need for Cognitive Closure) and closing the loop.

My quest to become a universal scholar began in the year 1989 and I have been a bottom up learner ever since. I study disciplines by starting from basic principles, then to the intermediate topics before even thinking of applying it for practical purposes. I learned to use Lex/Yacc utility after studying how it works by spending 12 months! (Struggled with Allen Hollub's book on Compiler). It is like creating your own bat for playing cricket or writing once own email client to check the mail. Without learning Science of the stuff, I never could apply it.

Some instances similar to the above are

  • Learned compression algorithms like Huffman, Adaptive Huffman algorithm, LZ77/LZW algorithm and wrote code by consulting Mark Nelson's book. I might have spent nine months in 1996 for that. At the market place, I used LZ77 compression algorithm written in C (interfaced with Clipper using it's Extend system)  by me as an Encryption tool with a proprietary file format (a sort of security by obscurity). Libraries like Zilb could achieve the same thing in a matter of nine lines of code under thirty minutes.
  • Learned Computer graphics by programming it from ground up. Plotting a Pixel by Direct VGA access, wrote once own Transformation/Projection library,Bresenham's Line algorithm, Incremental circle generation, Filling polygons,3D Software render, Ray tracer, L-System grphics, Clipping Polygons. Might have spent lot of time in a span of four years to study these things. All I could do by this low level skills were writing a Malayalam font engine (for Clipper using it's C interface) for VGA and dot matrix printers, a charting package for DOS graphics etc. ( This did not go waste as I could learn OpenGL pretty fast in the 1996/1997 timeline. But, time I spend of learning deep was liqudated by libraries like GDI.OpenGL,Direct3D, Gd etc)
  • Programmed Assembly interfacing it with C. Wrote thousands of small assembler programs, TSRs, wrote device drivers, extended memory programming,direct hardware access, learned by heart every DOS interrupt , Win32 API call etc.  This had some brag value among my peers, that is all!
  • Learned Serial communication by direct access to UART in C/Assembler in a interrupt driven manner. Wrote a Queuing System to expose an API for the upper layer. Wrote XMODEM,YMODEM and Z-MODEM protocol and wrote a full screen ANSI terminal. At the commercial market place. all I could do was write a software to interface with weigh bridge and a contract for writing a remote access software ( Advent of PC anywhere cancelled the contract)
  • Learned Component Object Model (COM)  bottom up by programming everything from Scratch and coded every interface which I could come across. I got a Job offer and a training assignment for teaching COM. Microsoft deprecated COM in favor of .NET Platform.
  • Learned libraries like STL/BOOST/ATL by spending quality time and never could program full time in C++ since!

I felt by 2005 that my style of learning is only  good for personal competence and, peers who used tools were surging ahead.  I could not understand what was happening and I began to learn more things bottom up as a result of it. As a defense mechanism, I began to read about new esoteric topics. Looking back, my domestic compulsions forced me to adapt for the day job and did well as a employee in every company I worked.

Last year, when I shifted to Business consulting, I understood the folly of learning bottom up and I began to learn about consulting in a bottom up manner! ( Purchased book on Consulting and Management strategy from Harvard university press)

My chance fascination with Ruby on Rails convinced me that programming can be done and even learned from a top down manner. You focus on your application and learn enough to prototype the stuff and enhance it to be taken to the market place. Once you are in the market, things can be re-written in Java or C++. Success of Arduino platform  and it's eco system is another example of success of top down learning.

Bottom up learning is good for becoming a scientist. To be an engineer or business person, one should learn by doing something concrete ( Top down tinkering). The cognitive shift is painful, but I am able to progress,albeit in a slow manner.

Are you saying that we need not know underlying things in depth?
Libraries and tools embody all the neat principles, underneath their code. When you leverage that,chances of you being correct are more. Roll it yourself stuff can be often buggy and error prone.

Tuesday, August 26, 2014

Object Oriented Hardware - Arduino might bring that!

We are used to the virtues of developing software in an Object Oriented way. Things like Encapsulation, Polymorphism and re-use has become common lingo among programmers these days. Design Patterns (Gof) made the communication of advanced Object Oriented Techniques easy. People began to build catalogs specifically meant for Security, Architecture, Infrastructure, Persistence etc. The convergence of all things brought down the complexity of software development, a lot. Of course, any solution will bring its own set of problems and there were side effects like accidental complexity brought by over use of certain idioms.

Arduino is a hardware prototyping platform which one can use to quickly test our Circuit ideas.

Trying to do prototype at the discrete component level has been going on for decades and it is a cumbersome process. Earlier, a designer has to know Electronics theory, has to play with solderless breadboards/perf boards, ICs and others for a while to understand the language used by Electronic technicians. To make the circuit lean, he has to program a Microcontroller using Assembler or C. To download the program to the device, he has to get a programmer (Flasher) for that micro-controller.

Arduino follows an Object Oriented Approach to the whole process.Instead of playing it at the discrete component level, you purchase devices which can act as a sub system in your design. You buy Sensors of various kinds ( without thinking much about how they are made ) and learn enough things about interfacing it to the Arduino pins ( Digital/analog pins). Using a solderless breadboards and these Sensors, you are ready to take the data to the MicroController program written using the Wiring language. You do your manipulation of the signals and output the result to some pins where you need to connect appropriate device ( Stepper motors,Relays, Thyristors, LEDs, Speakers,XBee adaptors, Ethernet device) to relay back the output.

All you need to know is how to connect these devices at the interface level and purchase the appropriate wires and accessories. Once you have tested your idea, you can contact some specialist to make a PCB for your circuit to have a cost effective solution. In real life, an 8051 microcontroller with basic analog componennts might be enough to realize your  "fat" circuit proto typed by using Arduino. That is a low level detail left to the Specialists!