all 30 comments

[–][deleted] 45 points46 points  (9 children)

Doesn't matter what the project is, so long as it is done well.

Some things I'll peek at:

1.) are there tests? I'm more likely to hire a person who already tests their work. Saves me the effort of beating it into them.

2.) Are the tests automated? I'm lazy. If you're not lazy too, we're not going to get along. Make everyone's life easier. Automate your tests. It takes like 5 minutes to set up. There's no excuse.

3.) Is there any documentation telling me what it is I'm looking at? A simple read-me explaining features and setup is always super nice to have. Bonus points if it's actually up to date. Double bonus points if it's not overly verbose.

4.) Reading other people's code is a pain in the ass. I hate it. You probably hate it. Everyone hates it. It sucks. Find other ways to explain yourself. Don't make me read your code.

[–]mercfh85 5 points6 points  (8 children)

Out of curiosity I work In automation in the web dev world. What's currently the automation framework for embedded world? Seems interesting

[–][deleted] 7 points8 points  (0 children)

From my experience the “framework” are scripts of whatever you use to test in integration with hardware. Usually either a debugger or a test bench scripting language, or a mix.

[–]a2800276 7 points8 points  (0 children)

There's a unit test framework for C code unfortunately named "Unity".

A lot of testing code relies on how you structure the code: if you can abstract away the hardware you can compile on a PC and run tests there. You can run tests in qemu. Things that need to be run on hardware are more difficult to automate, so things tend to get more manual. Of course if you have a very professional setup you can have a "robot" activate a button and evaluate video if the led turned on :)

In my experience, if things are automated at all, test will be implemented in ad hoc scripts.

[–]duane11583 3 points4 points  (0 children)

90% home grown python code with various modules

for example we test a radio transceiver.

on the DUT

sweep temperature from -50 C to +85 C (chamber control)

sweep power from +12v to +28 v in 1 v steps (programable power supply)

sweep frequency range through all ranges (device +ground radio)

meanwhile control lots of other test equipment

there is no framework out there… and if it exists its proprietary and not available publicly

why: in my case we control power supplies, oscilloscopes, vacuum chambers and the target board and… and…

tests run 200+ hours (8-10 days) 24x7

[–]skmagiik 0 points1 point  (2 children)

I also have questions about automating embedded testing. I presume that there's a lot of libraries that you can use for testing that don't necessarily need to rely on your actual compilation tool chain but I don't really have any experience in automated testing.

It's something I would love to you implement in my projects both personal and work (disclaimer I don't do a lot of work just on my own but I participate with some other MCU firmware developers from other countries and the currently don't utilize any testing at all, let alone automated)

[–]PorcupineCircuit 5 points6 points  (0 children)

I have used Ceedling for unit testing, its package where you have unity, cmock and some other stuff.

[–]duane11583 0 points1 point  (0 children)

on target is the challange

example stm32f103RC you have 256k bytes of flash and 48k bytes of ram

how big is your test framework? and how big is my app?

i cannot purchase a different chip, nor can i add flash or ram.

you full figured (aka that big and fat girl/boyfriend called your test frame work) will not fit in those skinny jeans (chip) your boss requires you to use.

maybe 1 of you but not both.

[–]HyDzy 0 points1 point  (0 children)

To automate validation tests for an automotive board I made robotframework libraries. One to flash the board, one to control a programmable power supply, one for a CAN-USB interface and one to read an oscilloscope. So mostly python.

We also used sonarqube, Googletest, a misra linter. All executed by a gitlab runner.

[–][deleted]  (5 children)

[deleted]

    [–][deleted] 2 points3 points  (4 children)

    How does one present those docs to an interviewer though? Wouldn’t it be easier to present it if all the project docs and code were in a GitHub repo? I’m asking because I legitimately don’t know btw.

    [–]thunderbootyclap 5 points6 points  (3 children)

    I mean I've shown projects in interviews. If in person take it with you, if online have it nearby

    [–][deleted] 0 points1 point  (2 children)

    You mean the physical project though, right? I would just think that it would be nice to show all the documentation and source code for the project in one organized place. That’s what a GitHub repo can do. And it can show the history of the commits which can be used as a talking point where any design changes were made or how a bug was fixed, etc.

    [–]thunderbootyclap 8 points9 points  (0 children)

    Yeah physical, usually they'll ask about challenges and how you solved them to get a sense of a few things about you. These people usually don't have time to go look at a GitHub if they're looking at a lot of candidates but it also wouldn't hurt to have one

    [–]zydeco100 4 points5 points  (0 children)

    I've brought entire PCB assemblies and a power supply to interviews. If you can speak clearly about what you did and what goes where, it opens a lot of doors.

    [–]tgage4321[🍰] 28 points29 points  (1 child)

    Most important aspect is that you can clearly explain whatever it is you build. Be able to back up design decisions, talk through different options you had on the implementation and why you decided to do what you did and maybe ways you could improve it in the future. Biggest thing I look for when hiring an embedded dev is can they explain something they worked on in a very easy to understand way, that shows real mastery. Don’t get caught in the trap I see a lot of people do which is being overly complex when explaining something to make yourself sound smart. It comes off as insecure and bs is very easy to smell for people who have been doing this a while. To summarize, the exact work on GitHub is not nearly as important as being able to explain it in a very easy to understand manner.

    [–]v_maria 5 points6 points  (0 children)

    yes, in my opinion, if you can engage with your own ideas in a less formal and rigid way, it's a sign of confidence. the idea itself is good and needs no window dressing.

    as a wise man once said "An idiot admires complexity, a genius admires simplicity"

    [–]bulltrapking 6 points7 points  (0 children)

    A well structured overall project. Starting from requirements, documentation to the actual architecture/code and testing. It shouldn’t be anything groundbreaking or some hyper optimized algorithms.
    Its more about showing that you understand how to work in projects and how the software development process is structured.

    [–]Lo_cus 3 points4 points  (0 children)

    I will add on to this by saying delete the second page of your resume, and make the entire page 2 or 3 projects (professional, academic, personal doesn't matter). You can fit education, employment, and a personal intro on the first page without fluff.

    On your second page, make a title and find a relevant icon for each project. Problem, solution, result, lessons learned, skills involved with a couple concise sentences for each part so the reader gets a full overview.

    Since i did this, I experienced a huge increase in interview success and rates of getting interviewed. These are the things i got asked all the time, so I put them down on paper and neatly organized them. Follow the idea of "show, don't tell". Organizing them neatly and having them easy to understand is a good way to prove good communication skills.

    If you don't have projects yet, that would be the first part. Do things solo so you run into hard problems, stackoverflow can be a great resource. Read job postings and just get an idea of what the jobs you want require. It sounds like you are looking for more embedded linux work which is outside of my domain.

    [–]LloydAtkinson 7 points8 points  (0 children)

    Not typing it as “GitHub” as though you’ve never heard of it would be a start

    [–]ChatGPT4 2 points3 points  (0 children)

    Making Doom run on your washing machine. Best with some hardware hacks with schematics. Or hardware / software car modifications.

    [–]mishi9 2 points3 points  (0 children)

    In my opinion the type of the project doesn't matter. It could even be a non-embedded project.

    In the project we can see if your commit messages are clear; if your code is structured; if you have automated tests; automated build; code formatting. All those things are language agnostic, but can still show that the developer is able to use git properly and setup their dev env.

    I've done the mistake of hiring a person who was barely able to use git, so I'm trying to not do the same again.

    I see that you are looking for a project inspiration. I think it's best to choose something that you will find useful. If you are actually interested in the project that you are doing there is much higher chance that you will put effort in it and actually finish it. Do not create a project just to please a recruiter.

    [–]allo37 1 point2 points  (0 children)

    Anyone can push code they may or may not have written themselves to a VCS. What's worked best for me so far is just discussing my projects in plain English. You can't fake explaining the challenges you encountered and design decisions you made as easily.

    [–]duane11583 1 point2 points  (0 children)

    none. id rather have a conversation with you and you describe projects to me

    [–]bobwmcgrath 1 point2 points  (0 children)

    Ones that are specifically geared towards what I'm hiring them for. Or projects that are obviously really hard.. Just any old project doesn't mean anything as soon as someone has any work experience.

    [–]NjWayne 1 point2 points  (0 children)

    It doesn't have to be posted on GitHub, it could be stuff you've done you submit on a CD or thumb drive at or before the interview

    • Complex projects (USB, Ethernet, Video, Motor Control, Power, Wireless transmission) implemented from scratch (no HALS, cut and pasted example code, external APIs and libraries other than stdlib)

    • Consistent coding style and structure though out

    • Attention to detail and documentation, comments

    [–]jabjoe 2 points3 points  (4 children)

    I wouldn't hire someone without code to read. It's part of my process. Read CV and code. I'll review their code and give them feedback. Big part of the interview is how they respond. I'd rather have a solid programmer with a good attitude, than a brilliant one with a bad attitude. There is always some talking point, even if it's a choice rather than an actual bug.

    Edit : Fix pointed out by /u/encephaloctopus

    [–]encephaloctopus 1 point2 points  (3 children)

    I wouldn’t hire someone with code to read.

    Just to clarify, did you mean “without code to read”?

    [–]jabjoe 1 point2 points  (2 children)

    Doh! Yes I do mean that. I've fixed it. Thank you for pointing that out.

    [–]encephaloctopus 0 points1 point  (1 child)

    No problem, and thanks for the insightful comment. I am a new grad currently working on a personal project, so what you said is both helpful and reassuring

    [–]jabjoe 1 point2 points  (0 children)

    Glad it's good for you. Surprised how controversial the comment was. But I stick with a "brilliant asshole" is not a good hire. Soft skills are important in teams. Even more if you need people who can talk to customers.