If your goal is to be an embedded programmer/systems engineer, then your instructors' goal of teaching you to 'think at the level of the hardware' was spot on. Any programmer can learn yet another programming language. But not every programmer understands the underlying hardware. But assembly language programmers usually do.
THAT is the difference between an "embedded systems engineer" and just another bloke who knows C/C++, Java, Perl or whatever...
I would agree that assembly language will certainly be the way to write the best code for those embedded systems that need to be programmed efficiently. And if you really understand assembly, then indeed you should be able to master C or it's variants quickly.
No, neither you nor your lecturers have made a grievous mistake. Assembler language is very much here to stay seeing as 'All non-trivial abstractions are leaky'. C and subsequent derivations are an attempt to create a context independent language through use of varying degrees of abstraction. They all fail, to differing degrees because its impossible totally to hide the underlying hardware. Assembler language is more fun anyway as it actually does things.
For an assembly language programmer it is very easy to learn and master any higher level language. To be able to portray your skills you may have to take a short course in C/C++ or Java and get some official certification.
I myself started my career with assembly language programming ( in fact machine language as at that time we did not have even the assembler).
The fact is true that the assembly language gives you more insight into the working of CPU and the peripherals , the timing constraints, interrupt handling, critical code sections in the OS and so on. So you have one up your sleeve with the knowledge of assembly language.
How hard is it to learn C/C++ or PERL anyway? I graduated from University with very little knowledge or programming, since my focus was mostly analog electronics. At my first (and current) job as an ASIC Design Verification Engineer (yes, i know, not analog at all.. sigh), I had to learn C++, PERL and Ruby on rails pretty much on the go. Not too difficult at all.. and since you already know assembly, i think you will have an even better understanding..
stop panicking and start doing man.
If you are truly good at assembler language, you are a far better equipped coder than those who only know C or C++. Assebler language gives you tremendous insight on how the code is actually working within the hardware. That insight is essential for real time systems. You should not have many problems finding a company that values the true Software Engineers from the coders that most schools put out into the market.
I think you are well positioned to have a very successful career.
I wish you luck.
You have not made a mistake. The nice thing about programming languages is that, if you have the aptitude for one, you can almost always self-learn another one. Knowing assembly may give you a leg-up when looking for embedded computing jobs. Teach yourself C and use Assembly for inline optimization.
Depending on how long it takes to find employment (not always an easy tack these days) keep learning through your list of languages: C, Java, C#, Python, Ruby on rails, C++, etc. You'll be doing nothing but making yourself more employable.
NASA's Orion Flight Software Production Systems Manager Darrel G. Raines joins Planet Analog Editor Steve Taranovich and Embedded.com Editor Max Maxfield to talk about embedded flight software used in Orion Spacecraft, part of NASA's Mars mission. Live radio show and live chat. Get your questions ready.
Brought to you by