Message Board
I only know Assembly Language ... Am I already Extinct??
Norman Washington7/26/2011 9:13 AM EDT
Hello All ..
I am due to graduate this year from university with a degree in Electronics and Communications Engineering. (British University). One of the first things I noticed is that some of my friends who attended other universities studied either C or Java as the programming language of choice for thier electronics degrees. (which seems to be a resonable thing to do as almost ALL jobs going in the embedded in the industry require C/C++ or Java programming experience). However, our course administrators felt that their students "should be able 'know' the underlying machine and from this be able to 'think at the level of the hardware' which will not only make the very low level aspects of hardware more visible to the student but force them to consider the hardware implications of each program statement written" - in other words, we were taught Assembly Language and no other language throughout the degree course!!
Now, I really enjoyed assembly langauge programming .. so much so that my final year project was based on an analogue/digital/embedded control system and the firmware was hand-written assembly code - with high efficiency/optimization as the driving goal..For which I achieved a distinction grade. But now I am about to graduate and I am looking around the various vacancies for electronics engineers and I do not see any requirement for assembly language anywhere!! ... It is almost all C/C++ and even C# (as well as Java). Have I (or rather my lecturers) made a catastrophic mistake ???
Thanks.
Bewildered Graduate


hm
7/26/2011 4:59 PM EDT
You may try with Company who developes Compilers.
Sign in to Reply
Duane Benson
7/26/2011 6:20 PM EDT
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.
Sign in to Reply
JWatson
7/26/2011 6:53 PM EDT
Xilinx PicoBlaze programs are written in assembly, so there are still applications for it. However, C is still a de facto requirement for many embedded software jobs.
Sign in to Reply
EREBUS
7/26/2011 8:20 PM EDT
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.
Sign in to Reply
ssatish
7/27/2011 1:52 PM EDT
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.
Sign in to Reply
ssatish
7/27/2011 1:53 PM EDT
Also, I would like to add that you pretty much learn everything in engineering from industry, not university, so what you do not know, you will learn.
Sign in to Reply
prabhakar_deosthali
7/29/2011 1:42 AM EDT
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.
Sign in to Reply
abraxalito
7/29/2011 9:16 PM EDT
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.
Sign in to Reply
WKetel
7/29/2011 11:27 PM EDT
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.
Sign in to Reply
Frank Eory
7/30/2011 2:02 AM EDT
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...
Sign in to Reply
ajfengr
7/30/2011 7:48 PM EDT
With your assembly language knowledge, you have a solid basis in how CPUs actually work. This is valuable no matter what language you eventually use.
For example, what happens if your C compiler makes code that doesn't work the way you expect? For an assembly language programmer, it's fairly easy to have a look at what the compiler produced and check where things went wrong.
Also, when you get into a situation where compiled code is not performing well, the knowledge of how CPUs actually work is indispensable for figuring out a better approach.
With all that said, you need to take up something like Perl on your own as soon as possible. I use it a lot, it's fun!
Sign in to Reply
MHK_#1
7/31/2011 12:32 AM EDT
Hell, No!
You are definitely well prepared. However, in resume, you don’t want to write this one only. You will write what you did with Assembly language. In this market, they will hire you. Show them what they may see a value. None has all of skillset what employer wants. When they list a various programming languages, c/c++, java, Pascal, Ada, x86/strongArmAssmebly, none one know them all. They are checking out candidate pool.
Stand out from that pool by expressing what you did and how you did. You will get a job very soon.
Sign in to Reply
Robotics Developer
8/1/2011 11:04 PM EDT
It is a shame that your university did not provide you with the normal set of language tools. Assembly is a great way to understand how the machine works at its most basic level, but learning C++ (or Java or C#) in school would have better prepared you for programming properly. All that said, go learn C on your own there are a lot of great books and online resources. Not the end of the world but an opportunity lost (by the school).
Sign in to Reply
KB3001
8/3/2011 8:32 AM EDT
It's not a catastrophic mistake as I believe you can learn C in no time, but it's still a mistake from an academic point of view IMO. Academics' job is to expose you to the big picture and teach you how to think and make choices for yourself, not indoctrinate you and force you to think in a certain way. As such you should have been "exposed" to higher level languages as it's a different way of approaching problems. In any case, it's certainly not an either-or in my opinion. One module using a higher level language would have been enough while the original ethos of teaching Assembly to make you see the hardware implications clearly, could have been preserved.
Sign in to Reply
TFCSD
8/6/2011 5:16 PM EDT
I program 95% C/C++ and 5% assembler on many embedded projects.Assembler is still used in some small projects. You will still use some assembler language, but it seems you are going to need to learn C/C++ or the like. In the long run you will enjoy C and will be glad you know it. Good luck
Sign in to Reply
pcassani
8/8/2011 8:44 AM EDT
It is certainly not the easiest path, my friend! But, I have never seen a C compiler that does not have a performance issue, let's not tell a compiling mistake. So, you need Assembler anyway. But, here is the trick, you need C and C++ too. But, you have not thought that you would stop studying when graduated, have you? If you did, welcome to reality!!!! For 12 years, I've never really stopped learning something, either on my own or in courses. So, my advice, choose one of the infinite books/tutorials in C, and start your carreer!!
Pablo Cassani
Sign in to Reply
01830
8/8/2011 4:51 PM EDT
I'm 'assembly only' so to speak too. I learned assembly back in the PDP-8 days, and then Z80, 68000, 6809, 8048, PIC, and so on.
I like to say that I don't know 'C' or any other high level language, but that's not quite true, I can muck my way through.
I do PIC projects here at work to support my hardware, and I almost HAVE to use 'C', but an assembly background helps a lot. Especially when you start looking for bugs in the compilers. (I've found maybe a dozen over the years, from stuff that should have been stable for years!)
But I've also gotten to do a lot of assembly. I did a 9S12 project with 256K of flash and filled it 100% (ok, there was managed data pages in the thing) And when I did a dll for IBM and shipped it to them, they sent me emails of 'where is it?' I said it was 'attached'. Took about 10 emails till they finally realized the 5K attachment was the whole thing, and not a 256K hog!
Keep with the assembly, but you will have to learn at least some of the higher language stuff.
Mike
Sign in to Reply
Normster
8/10/2011 6:06 AM EDT
Thanks to you all for your positive comments and advice. I think that, in the meantime, until I start in a gradute job that I will begin to look at the C language by using books/tutorials etc. However, I will continue to strengthen further my knowledge of assembly language.
I would add that I am particularly interested in intelligent power supplies (my final year project was based on it)..so I think there may yet be an area where I can apply myself as I have been speaking to persons who work in this field and I have been given good feedback about Assembly language and a wide range of other skills that are developed and used extensively in power supply design
Once again, thanks to all who replied.
Sign in to Reply
David Ashton
2/10/2013 8:59 PM EST
There's an article here which has some intersting info on the subject:
http://www.embedded.com/electronics-blogs/barr-code/4027479/Real-men-program-in-C
Sign in to Reply
adipdutt
4/8/2013 6:24 AM EDT
Well I started with 8085 micro and had to program in hex code in 1983,in 1986 I got my hands on Turbo pascal and a PC XT. When 8031 micro controller came out I had no assembler (machine code again:-(.
But working on Turbo C in PC specially with Borland's documentation gave me the advantage so when I got the first Keil Cross Compiler on x51 in the 90s it was not a problem. See, same thing happened on VLSI design it was only in 2000 I started using Verilog HDL for design and verification after years of working in PALASM.
Learning C (you rarely need c++ for even the middle range ARM cortex)is not at all difficult but again if time does not permit you can-
1) Use your assembly language skills for DSPs, compilers are still very inefficient.
2) Though very rare, some times you need code optimization-here joining up with a C programmer may be effective.
Sign in to Reply