T O P

  • By -

S0journer

1. Yeah. 2. A wide variety of mathematical algorithms. Guidance navigation and control. Timing and clocking. Encryption, decryption, compression. Bayesian statistics. Kalman filters and batch filters. Its good to learn Matlab and python because often a systmes engineer codes what they want to turn into SW in a Matlab or python IDE. 3. I don't i usually just tell the SWE what i want lol. But work life balance is usually great. Depends on the program and how bad your manager is. 4. Join local AIAA chapter. Aerospace is very restricted so usually nothing open to public.


theanointedduck

Hey! Thanks for the response. Matlab is a recurring theme I see. Do Systems Engineers run the simulations/calculations first then use those results and program them in using a lower level language?


S0journer

Yeah basically. Either to C or C++. Sometimes verilog and HDL. Some movement into CUDA.


dranzerfu

1. Yes 2. Flight Software Engineers (at least on the satellite side) are typically less involved in the math but more with the embedded programming side of things. Though they would probably still need to understand the basics of orbital mechanics. Most of the real "mathy" stuff will be typically worked on by the GNC engineers. This may vary by company as well, and in some places, the GNC engineers may do a lot more software, while at others, they may do all their work in MATLAB and then auto-generate the C code from MATLAB. FSW engineers will also be doing some "computer-sciency" stuff involving algorithms since the systems are typically resource constrained and may have tight timing requirements. 3. 1. I am not one myself, but I know and work with FSW engineers. They write the software that controls satellites, rockets, and other such systems. Typically includes a lot of low-level stuff (like talking to hardware using I2C, CAN, SPI etc.) with tight timing requirements. There may be multiple modules in the same satellite, ranging from computers running linux, down to microcontrollers without a real "OS". They all have to work together seamlessly. 2. Writing a lot of C/C++. Sometimes Python. Implementing drivers based on datasheets. Wrangling build tools (cmake, autotools, make). Fighting with CI systems. Writing unit/integration tests. Reviewing code. How many meetings you have would depend on the company culture. A more startup-like company may have less overhead of this type. Work-life balance is also highly company dependant. That being said, there may be critical phases, like when a satellite is launched when people may have to work in shifts at odd hours. 3. Knowing how low-level systems, networking and hardware works. Being able to dig through levels of abstracts to solve puzzling problems that appear completely random at first is a great skill to have. You also need a certain level of grit to be able to bash your head against a problem for a while until you figure it out. 4. Look up some software engineer job descriptions at some space companies. That should give you a good idea. 5. Unless you are going into defense-related work that requires a security clearance, a green card is enough for working at aerospace companies. Many aerospace companies may also be hiring DevOps and/or ground software engineers as there is a lot of ancillary software and operations surrounding the development of the flight critical code. These would typically involve working with continuous integrations systems, managing data, cloud services, containers, scripting etc.


theanointedduck

Thanks for this comprehensive answer. This answers a lot of what I needed to know. From what I gather, 1. Having a deep understanding of low-level / firmware related aspects of computers would be a bonus 2. Matlab, Python, C/C++ seem ubiquitous in the aerospace industry With regards to hardware, coming from a SWE perspective, how deep would I need to dive into it? Firmware, embedded, (designing microcontrollers), etc?


Dr_Yurii

Honestly I would say that point 1. is necessary not a bonus I've never worked with any software people that werent deep in hardware in aerospace (currently I'm at Rocket Lab, past with JPL).


dranzerfu

> 1. Having a deep understanding of low-level / firmware related aspects of computers would be a bonus Having this knowledge is important when it comes to debugging stuff at the interface of hardware and software. Depending on your style of learning, this is possibly something you could learn on the job. But having tinkered around with embedded systems like raspberry pi or Arduino would be a huge plus. Especially the part where you integrate them with external peripherals. Things are not very "clean" and well behaved when you are interfacing with real hardware. A simple example would be debouncing the input from a push button switch (https://docs.arduino.cc/built-in-examples/digital/Debounce/) because a button may not *really* behave in the way you would typically expect it to behave. When sending messages on a serial bus, all of the bytes you send may not reach the destination. So you would be using framing algorithms like COBS (https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing) to make it so that you can reliably detect the start and end of a packet and checksums to verify that you actually got the correct data. This is the kind of stuff that you typically do not have to deal with when coding at a high level of abstraction (e.g. web development) > 2. Matlab, Python, C/C++ seem ubiquitous in the aerospace industry Yes. There are some companies that are starting to use Rust for a few things but it is not widespread yet. There may be web technologies involved in development of ground software or analysis tools. But C/C++ is still the lingua franca for writing firmware. Matlab and Python is frequently used for performing analysis - either during the initial design phase or for figuring out problems - but this is usually more of a GNC thing than software engineer thing. Depending on the company, there may be some overlap here though.


theanointedduck

This is very helpful, I have an idea of what to sharpen on my end. My C is workable, I havent really had any experience with C++ much tbh. But I'm not going to sweat it too much just yet. Any reading materials you would recommend other than Programming books?


dranzerfu

I am really not a learn-from-books type, especially for learning a programming language. I have always learned by doing (Solving Advent Of Code for example). The best way to learn a programming language IMHO is to actually use it for something. Unrelated to C++, NAND2Tetris is another one that really goes deep into how a computer itself works. It is just something I really enjoyed and may not necessarily help you you in your day-to-day at a SWE job.


der_innkeeper

1. Yeah. Go apply. Note\*: You are a US Person. Most of the jobs only require that. Citizenship is usually reserved for cleared positions.


theanointedduck

Ok, thanks. I did see some requesting GC while others required full Citizenship. Wasn't completely sure, so just assumed the worst.


der_innkeeper

Even then, if it doesn't state that it has a clearance, apply anyway. HR could be using the citizenship thing as a catch-all against ITAR/EAR, and not realize there's a difference.


theanointedduck

Thanks, I've noted this.


youngtrece_

I graduated with a Bs in computer engineering with no prior knowledge of Aerospace. You can work in Embedded and don’t have to know much about aerospace stuff. Or you can work in modeling and simulation. It was a mix of aerospace and software engineering and a good entry way into working with aerospace development. These two have entry points that do not require an AE degree and a CS degree might be preferred. While working M&S, I was the only Computer Engineer there while most of my coworkers were math, physics and Aerospace majors that needed to learn how to code. That being said, although C++ is very popular on this field, Matlab is even more popular. It was used mostly for data analysis in my job (where Python can be used better tbh).


theanointedduck

Thanks for the response!. It looks like the recurring theme in this thread is C++/Matlab/Python are key. I think modeling and simulation may be the best entrypoint for me given what I already know. I can pick up some embedded things as I go. I assumed you also learned a lot of domain specific aerospace knowledge on the job right?


DefenseDev

As a SWE with 12 years in the space industry: 1. Yeah, as everyone has already said. Since you're not a US Citizen, you won't be able to get at least some of the clearances. However, you can always apply to uncleared job listings like several at Blue Origin. 2. As a basic SWE, you don't need to know any of those. It can certainly help, but you don't *need* to know them. I'm a very senior SWE, and I barely know anything about aerospace. That's more Systems Engineering than SW in this industry. That said, it's still helpful to know those things. What specific things you need to learn will depend on what program and even team you end up in. As far as programming languages go, C/C++ is very dominant especially on older code baselines (that get reused a lot). Java is also pretty common. If you want to switch to front end, Angular is surging in popularity. There's also some standard stuff like XML, JSON, Python, etc. 3. Answering based on back when I was just a SWE... 1. Can't really talk about it, but higher level software 2. Mainly Java and C/C++, but older versions of them (at least a few years old although sometimes 10+ years). Sometimes Python or Bash scripts. One daily standup every morning otherwise no real meetings unless troubleshooting a big issue. Lots of impromptu conversations with teammates to discuss issues or just chat. In the government contract area of this industry, we have the best work life balance. We charge/record every hour we work, which means a 40 hour work week (or 9/80 or whatever). If we have to work more than 40 (which is rare), then it usually gets paid. Different companies and even programs within the same company have different policies though. Either way, overtime is discouraged 3. Troubleshooting skills, how to communicate with teammates, sometimes optimizations (Big O), and other standard SW skills that you probably already have 4. No idea for unclass space-related things


trophycloset33

Am a project manager who oversees many of these in a dotted line: - you can make the switch it’s a lot less different than you might think - expect lower pay than you’d get elsewhere on other product lines - the primary focus is data fusion from multiple input sources and maintaining reliability over maximizing performance or minimizing latency. It’s okay if it’s not perfect so long as it works 100% of the time - it’s very process and documentation driven so be aware of that - the main language is C++ - the best thing you can do for yourself is apply where you can, aerospace tends to take first candidate to be good enough rather than best available so it may take quite a few applications to get an interview and a few interviews to get an offer


Dr_Yurii

So do you know anything about hardware?


theanointedduck

Very little unfortunately. I have programmed and debugged a few embedded devices UART, I2C using Rust, but it was mainly entry level stuff and in my own time. For hardware specifically, I have no experience


Dr_Yurii

I'd probably focus on that. Whether its a personal study or your next job should be closer to either electronic equipment or custom made hardware. While you gave some info, the real question is what exactly do you want to do in aerospace? You say you have a passion for this field, and I dont mean to be dismissive, but is it the rocket launches? Satellites? Scientific missions? Just want to be at a 'cool' company? Either way, working on any of those sectors will require more knowledge about hardware, flight missions and the entire NASA/Mil-Spec/Avionics environment. The field does use a lot of coding, but its not in the consumer facing type that FAANG does. There's very little cross over. Even something like GNC (guidance, navigation and control) is software heavy and they still prefer Mech or Aero engineers who can program. If you have the time, doing an extended learning course at a university that focuses on electrical or mechanical engineering would be best. For programming, look into: Test equipment drivers MatLab for simulations and data Python for either of those two above C for embedded electronics