Ye, so after studying for an eternity and doing some odd jobs here and there, all I can show for are following traits:

* Super knowledgeable in arm/Intel assembly language
* C-Veteran with knowledge of some sick and nasty C-hacks/tricks which would even sour the mood of your grandma
* Acquired disdain of any and all scripting languages (how dare you write something in one line for which I need a whole library for!)
* All-in-all low-level programmer type of guy (gimme those juicy registers to write into!)

After completing the mandatory part of my computer science studies, all I did was immerse myself into low-level stuff. Even started to hold lectures and all.

Now I'm at the cusp of being let free into the open market.
The thing is: I'm pretty sure that no company is really interested in my knowledge, as no one really writes assembly anymore.

Sure, embedded programming is still a thing, but even that is becoming increasingly more abstract, with God knows how many layers of software between the hardware and the dev, just to hide all the scary bits underneath.

So, are there people in here who're actually exposed to assembly or any hands-on hardware-programming?
Like, on a "which bit in which register/addr do I need to set" - kind of way.

And if so, what would you say someone like me should lookout for in a company to match my interest to theirs?
Or is it just a pipe dream, so I'd need to brace myself to a mundane software engineer career where I have to process a ticket at a time?

(Just to give a reference: even the most hardware-inclined companies I found "near" me are developing UIs with HTML5 to be used in some such environment ....)

  • 2
    Well, it kind of happened to me when I started.

    I started with GWBasic (Was my first introduction to coding, I was around 13). I realized very fast how shitty it ws : Couldn’t even compile to .exe. Switched to QBasic , which has an IDE ! Still didn’t like it. Next : Pascal. Discovery ! OHHHH there .com files which are nice programs under 64kB. Mines are too big. Started doing ASM, bought 5 books with my own money; p It was fun ! (Switching 80286 processor in “unreal” (not protected) mode haha) And then I started thinking : But it is So fucking much work to write. So C => C++ => Visdual C++ => Discovery of c# and java (Java was for school for getting a degree). Now I’ll never go back. I’ll code in c# as long as it exists.
  • 5
    Go for anything that is in regulated fields. Automotive, avionics, trains, medical, you name it. It's more C with only occasional assembly though.

    Anything where using the latest hipster shit with 5 mio LOC for hello world would be prohibitive except for entertainment or UI systems because nobody can review even 10% of that in finite time for serious purposes.

    Also, you should add oscilloscope usage to your skills if it isn't there already. Use some uni lab or whatever to get familiar with that.

    RTOS knowledge is also important. Doesn't really matter which one, they're all somewhat similar. And basic electronics so that you can at least read schematics.

    Last month, I had to debug some shit on an 8051 where I didn't even have a source level debugger and had to get by with abusing some LEDs.

    One catch is, these domains are process heavy, so adding in some dev process knowledge (no, not NPM'ing 5GB of trash and pushing shit to GH once it compiles) will be helpful.
  • 5
    Assembly (z80) was my second language (after TI-BASIC). C was my fourth, after bullshit mandatory VB classes.

    I also have a disdain for non-compiled languages, but they absolutely have their place, too.

    After I left game dev, I got trapped in web development because there was literally nothing else available. Now, I'm a senior Rails dev. Yay! I do enjoy it, but Imiss being able to write something absolutely perfectly. I miss the low-level optimizing more than anything else.

    As for your questions... I'd recommend asking @FrodoSwaggins, if he's still around 🙁 Poor guy works more than I do. We have a few more low-level and embedded devs, but I can't remember their names right off.
  • 3
    @Root Oh Z80, that was my first job in the 90s! I got that one because I had been doing Motorola DSP assembly in my final thesis.
  • 2
    @Fast-Nop MC68000 was my school choice for asm ;p I wonder to this day why not intell x86 ?
  • 2
    @NoToJavaScript Ah that was my first computer, Atari ST. Only that at school, we had Turbo Pascal for DOS. The 3.0 version which was a bit like vi (god I hated it already back then). Luckily, I had a SW emulator with a Norton Index of 0.33, means three times slower than a PC XT. But you can bet that such a slow machine taught me about performance in coding. ^^

    One good reason for ASM on 68k is that the 68k is quite nice, and especially for beginners.
  • 1
    @Fast-Nop This is true. We even had our boards with it and shit. My highlight was making couple of diods blink lol. (So sending message to a bus, it was not ISA nor PCI, I don’t remember the name honestly, but it was fun).

    I also “cheated”. I installed an emulator of 68000 at my home PC, wrote everything during the weekend and just went to “exam” with an usb key I’ve already tested. Exam : 30 seconds. Then I went to library (lol) to play data for the rest 4h. (Was not allowed to leave school premises or exam is void)

    Fun times
  • 1
    Now I’m not the most experienced but I know reverse engineering involves Assembly and C/C++ so that might be something to look into job wise if you’re into that
  • 2
    That's a common skills set if one worked with system IC design company. Such as manufactures of mobile phone chips, smart TV/Watch/Assistant chips. I came from the similar career path so kind of able to relate your feelings.

    The thing from this working experience is that, in the beginning you at some point proud of yourself by solving some nasty hw+sw problems that nobody else in the company could. And probably the solution comes with some crazy coding techniques or deep system understandings. You thouth you learn a lot and got great reputations among colleagues. Until you were tired of solving these familiar issues and learning nothing new, you go out and look for new challenges. That might be the moment that you realized you don't have anything exciting on your resume.

    All the great things you've done related to the implementation of the product itself. Your crazy solution works because you know your implementation well. And this is sometimes hard to explain to others which were not from the product line (a.k.a the one who will interview with you). That is a true problem.

    I faced this situation before. I realized that for the further career development, I can either:
    1. Keep working with IC company and forget about the passion of learning new techniques. Probably go for a manager later.
    2. Try to take small steps towards software design for more new things.

    If you like to keep developing your low level programming skills, go for 1. Look for IC design companies with turnkey solution or system integrators with complex firmware designs. They should love your skill set. Software giants like Google/Amazon/Microsoft, etc are also making there own hardware devices which need talents like you.

    If you want to try something more "software". Look for something like: hardware simulation, hardware modeling and compiler. Those jobs need deep low level programming experience with high level implementation skills.

    Good luck.
  • 0
    Blizzard was looking for someone with assemby and reverse engineering skills recently. Maybe they still are.
  • 2
    Wow, first of all: thanks for all the helpful stories! It's really interesting hearing from people being in the field and what they had to endure.
    I do have an intimate relationship with Oscilloscopes, as I had to hw-debug a lot of chips with no real documentation. Had to rely on LEDs to show me states more often than I would like.
    I can read schematics of circuits just fine, would struggle to engineer my own pcb's though.
    I really wasn't considering avionics, trains etc, those fields really skipped my mind. Now that I think about it, those are prime examples where you need people with special knowledge.
    At one time I considered going into robotics, as I did several projects with industrial robot arms.
    Has a good mix of low level programming, ee, applied maths and my love for big, powerful tools that can snap your neck if you accidentally swapped the axis in your program.

    I guess my problem is the fact that I did too much and can't decide what to specialize in my specialization.
  • 3
    @Fakerlol Looks like a good start, and with some process / QA knowledge added, you should find a job in these areas.

    Like always in regulated domains, updates are expensive because of certification, so system level thinking is important, with quite a lot of real world physics and possible failure modes included. Means, having a broad knowledge and understanding is a plus.

    Another easy win is CAN bus that you should get familiar with. It's just a serial shared media bus, so not really difficult to figure out, but it's better if it's in the resume so that keyword-checking HR drones will find a match.

    @FrodoSwaggins That's super cool and hardcore even for my measures! :-)
Add Comment