Great question !!!!!
I also had this problem two years back...
then i shifted to java and c#..did it all...cause i got no answer for such damn question,
in java and c#(This thing is most powerful on windows) you can do a rapid application development..and for your word processing software in c#...huh!!
1 hour at max!!!
but what you get from java and c# is managed code(ie. it require its runtime library for running...)
lets get back to hardware designing.
now here you can use c & c++ only.(others are also there look en.wikipedia for system design).
try to look on some os development site for more refrence ..coz there u have to much code for system level design..
but if you are going to develop for device driver utility(DDU).. then u must have knowledge of windows(for know onwards i will discuss about MS windows only..but u can replace its occurrence with linux) operation.
u need to know about interrupts because they are mostly required in DDU.
so, a knowledge of assembly is also a prequisite..{DDU is not a baby game on heavy systems..}
and about development of heavy projects in c++...
windows has set of dlls which control the gui and most of operation have a look on this code-->
#include <stdio.h>
#include <conio.h>
__declspec(dllimport) int __stdcall MessageBoxA(int,char*,char*,unsigned int);
int main(){
MessageBoxA(0,"HELLO WORLD!!", "HELLO WORLD", 0x00000040L|0x00000006L);
return 0;
}
compile this c file in visual c++.. u will come with a great response..
(for c ++ {if you are not doing a c compilation } rewrite this code as
extern "C" __declspec(dllimport) int __stdcall MessageBoxA(int,char*,char*,unsigned int);
)
here a windows dll named user32.dll function messagebox is being called is being called
...for the rest u will learn with time...