Electrical engineering and science qualifications. Work on signal processing (FPGA/DSP/CPU), Radio hardware and firmware for WiFi/LMR/LTE. IC design. Radar systems. Counter-drone systems.
The work can be interesting, but intense when in the thick of building a system. There is less competition for jobs compared to pure web/programming, but also less jobs in total. The option is always there to take a web/programming gig if the specialised work is hard to get. Potentially pay is lower than some of the big US web companies, but that's probably as much from me not chasing dollars to the exclusion of all else. Some people/companies don't see this work as deserving of the same/better compensation as web/programming, as it is not as easy to understand and they won't pay for what they don't understand. Find the right employer/client and it can be lucrative.
I work in RF comms. Most of my work is in network simulation from the transport layer all the way down to the physical layer to prove out radio performance before expensive flight testing. I also work on error correction schemes as the networks I develop may be lossy compared to the internet at large.
I used to work in web dev, but I enjoy my current work a lot more. Most of my web role was just taking mockups from the UX team and translating them into code which felt mindless. Now I get handed a system and am asked to squeeze as much performance out of it as possible which I find much more interesting.
Working in a Data Engineering/Operations role which focuses heavily on financial datasets. Everything is within AWS and Snowflake and each table can easily have >100M records of any type of random data (there is a lot of breadth.) General day to day is creating jobs that will process large amounts of input data and storing them into Snowflake, sending out tons of automated reports and emails to decision makers as well as gathering more data from the web.
All of this is done in a Python environment with usage of Rust for speeding up critical code/computations. (The rust code is delivered as Python modules.)
The work is interesting and different challenges arise when having to process and compute datasets that are updated with 10s of TBs of fresh data daily.
Doing embedded development using C. Thoroughly enjoy it.
I was once in a group that was switched away from the work we were doing and repurposed to do web work. It was a bad experience, but not because it was web work. The code base we were given was in terrible shape and we weren't allowed the time to adequately fix issues. Thankfully I no longer work there.
I have worked exclusively on web apps for my entire career (~17 years), but something is pulling me toward C development. I have no idea how to really get started though. I'm doing a little hobby project, but I'm not sure where to channel my study/effort to become good enough for a career change. I picked up the second edition of The C Programming Language by Kernighan/Ritchie, but I assume it's outdated by now. Any advice?
I'm not sure I'm the best person for advice on this matter, or maybe it is great advice for some. I took a leap, believed in myself, and it worked out okay.
I'm self taught when it comes to computers and software development. For years before I landed a paying development job I did a lot of hobby projects. When I decided to take the leap and landed my first development job I took a fairly steep cut in pay. I was single, could afford the cut and was doing something I really wanted to do. It got the experience I needed and after the first year and changing jobs, my pay substantially increased.
I realize not everyone can take the approach I took. It may not even work these days. I did this 38 years ago when the industry was a bit more accepting of developers without a college degree.
Addendum: I also networked. I went to the equivalent of meet ups of the day. Talked with other developers, showed them my work, etc. This is how I found my first job.
If you want a book that digs deeper, try Modern C by Jens Gustedt. It’s update for C23 this year, and it’s CC (free).
If you want to make something like TigerBeetle or Redis, that’s sort of just specialised back-end development.
You can also do embedded in C. And you can make operating systems.
What people often do when they want a career change is: they work on New Thing in their spare time; they find this little niche at work where New Thing could fit; they find that there’s a limit to how much workplace will let them prioritise New Thing; they start applying for jobs where New Thing is a focus point, with a non-empty resume.
Start by writing a few basic hello world style programs while focusing on the "C way of doing things" - most importantly how you manage memory in C. That's probably the biggest pitfall I see people coming from higher level programming trip up on. Study how objects work, different forms of math, etc. And that's all console code btw - don't move onto GUIs until your console knowledge is solid. GUIs are a whole different beast in C/C++ (and are a big reason why frameworks like Electron were built).
LLMs can also help you break into C development by a large degree. But they still get overwhelmed on a sufficiently large C codebase just like any other language. Your mileage may vary there.
Got my start with C via Linux kernel hacking in the 90s. It's practical so that's where I would recommend. (or a BSD kernel which are often better organized).
With ~17 years of experience already, start with the study of the structure of C programs. Recreate some of it manually, build it, and research the things that do not behave as expected.
Bonus of using an open source kernel is they have a lot of eyeballs on them. They will be pretty dialed in versus studying random Github projects that happen to be written in C.
Would recommend avoiding cognitive overload, wait until you get into comfortable flow writing, building, fixing as needed, simple programs before you dive into lower level debugging, trying to grasp assembly structures that a compiler spits out.
Honestly, they shouldn't even need to touch a debugger if they're able to reasonably manage their memory "well enough". Like in general. I'd only touch a debugger myself if I knew I was dealing with a memory problem.
I was a web developer until 9 years ago. It was Django & jQuery, but React came with factories of abstract factories, and I happily quit for geospatial development and analysis.
Earlier it was geodata imports from OSM or private sources. Now it's mostly routers and GPS tracks. Interfacing with OSRM & Valhalla via C bindings. Road graph analysis and algorithms. I wrote a router myself, comparing different routing algorithms. I also developed a pedestrian traffic model for entire cities, for retail. I also did various ML models. My languages are Python w/ GeoPandas & CatBoost, Rust, Go.
I'm mostly retired now, and my paying work involves maintenance on proprietary inventory and billing software written in a 1960s language in a dialect that became unsupported in the mid-1980s. And it runs in MS-DOS.
I've mostly set aside the languages and tools I used to use, and I'm learning Haiku's variant of C++ to write some native-mode Haiku application software.
I build ETL pipelines and all kinds of ad-hoc data processing software. These range from python projects to thousand-line shell scripts. The jobs run on machines above >1000 CPU core counts - what you would consider a mainframe or big iron.
Web stuff will burn you out. In my case, that happened 10+ years ago and I've never desired to go back [to building web products].
The new version is much more feature rich, catering towards the user. Unreal use in Python is now native and users can launch a dedicated server.
The development process can be slow, lots of waiting on compiling and cooking. The Python part of this project is great. Code is very simple and readable and I'm building out a renderer for the geometric algebra package I'm using, Kingdon. This lets users quickly visualize 3D elements, lines, points, planes, and shapes. Working on non-web stuff is great. I love building out UI and text in 3D, it feels like the final form of UI and is a lot more expressive than web UI. Controlling objects in 3D let's you do a lot more. Everything feels right.
Side project: A native macOS app in Swift that runs locally and uses AI to clean and organize files by moving them into the best-matching folders. No backend or accounts. https://floxtop.com
Full-time: C++ work on nearby connectivity (bluetooth) for embedded / industrial devices (factory equipment). Deep stack, hardware constraints, long lifecycles, high reliability.
Non-web work feels very different: stronger constraints, slower but deliberate releases, and bugs are much more expensive. There’s a lot of interesting software being built far away from HTTP and browsers.
That's neat, using Apple Foundation Models or something else? I'm very curious about how it's determining folder matches (I need to do something for images that are already classified/tagged via FastVLM) in iOS.
Not Apple Foundation Models — unfortunately they’re not capable enough (yet) for understanding content and matching it to folders.
I’m using SBERT-style embedding models for the semantic matching, which works very well in practice.
For non-text content, the app also analyzes images (OCR + object recognition) using Apple’s Vision framework. That part is surprisingly powerful, especially on Apple Silicon.
> I need to do something for images that are already classified/tagged via FastVLM
What’s the concrete use case you’re targeting with this?
Classifying real estate / property images. Also using Apple Vision which ain't half-bad for something on device and feeding that metadata along with what FastVLM returns into Foundation model to turn into structured output - trying to see how far a I can push that. But feels pretty limited/dated in term of capabilities vs lead edge models.
I’ve seen a huge advantage in running everything fully local and private. Not sure if that fits your use case, though. Nearly 90% of Floxtop users choose the app mainly for that privacy focus.
I have minimal experience with modern Web tech, though I used to run a couple websites in the old days.
My main job currently is in game dev, writing C#. Working for a small studio with flexible roles, I sometimes also take the opportunity to use other tech, like actual web stuff. A couple years ago I wrote a simple HTTP API for some internal needs and that was the first time I did modern web.
I've worked in the embedded space and adjacent. I've done automotive (Autosar), I've done some bare metal applications and I've maintained a custom Linux system for a series of embedded products. I've also worked on tooling (native desktop applications) related to some of these embedded uses.
For fun I still play with some embedded development, and would like to do another Android app. I built a couple simple ones years ago and generally Android development seems pretty pleasant to me, but I haven't done Android side projects in a long time because I can't really think of any apps I'd actually like to have.
Are you seeing anything interesting happening in this space with Zig? I've been dabbling a bit (after seeing so much about it on HN), but TigerBeetle is the only successful project I can name. I know a few embedded developers, and they all seem pretty content with C.
I wish I were more connected to the rest of industry. Most deep embedded (ESP32/stm32 and smaller) is still in C. There’s some Rust going on (Aura Ring for example).
Once you get up to embedded Linux basically any language can be used.
I have a really smart colleague who is interested in Zig but I’m hesitant to make such an investment without (1) the stronger guarantees of Rust and (2) the larger embedded dev community around Rust.
At the end of the day we don’t usually write our own peripheral drivers anymore, so it’s important to have good BSP support for your language. So whatever you use, you usually have to wrap the C. This is even true of using C! The vendors libs are usually pretty bad and need wrapping with safety checks, or to be made so you can run more than one instance, etc.
I did do web work for a long time, but I grew tired of it, so these days I just do contract work on legacy systems and platform modernizations. Some of those systems may have a web UX, some do not. But the work is more about refactoring architectures to get off brittle tech that nobody knows anymore, and move on to tech stacks where you can actually find talent to run it.
It is a different experience to be sure - I work on stuff that nobody likes and where most people are surprised it still exists. And my goals tend to be about shutting down, not growing. I succeed with every server we kill, every product we turn off, every customer we get rid of.
I don’t work on web apps at all. Most of my time goes into security tooling and analysis pipelines.
A lot of it is closer to systems work than application development: parsing large datasets, automating analysis, dealing with flaky inputs, and building things that are mostly run headless.
The feedback loop is slower than web work, but the problems tend to be deeper and longer-lived. You spend less time on UX and more time thinking about correctness, edge cases, and failure modes.
I suspect there are many people here doing similar non-web work, it’s just less visible because there’s no UI to screenshot or product to demo.
Embedded developer here, automotive-related. C, some Python for tests, some shell scripts, CMake, etc. for CI. Review of hardware schematics, reading datasheets, reading various standards documents (USB, various SAE standards, various ISO standards, etc.) is required. Firmware updates take weeks of testing, even though the unit tests run in seconds they can't catch most errors the system can encounter in practice, and simulator tests don't catch things like increased temperature raising power consumption without an expensive thermal chamber. Factory production sets hard deadlines on quite a few things. All together, that means it's a more deliberate, slower release cycle.
I haven't made a website of any kind since a C&C: Red Alert fan site somewhere on GeoCities in the late 90s.
I work on graphics drivers. They're hard write and even harder to debug. You have to be a huge nerd about graphics to get very far. It's a relatively rare skill set, but new, younger, nerdier people keep on coming. Most people in graphics are quiet and are just keeping the industry functioning (me). It's applied computer architecture in a combination of continuous learning and intuition from experience.
Hardware bugs can be found during chip bring-up within the first couple of months back from the fab, but since I've worked in this area I've never actually seen a bug that couldn't be worked around. They happen, but they're rare and I've never experienced a chip needing a respin because of a bug.
There is documentation, but it's not as well organized as you might imagine. Documentation is usually only necessary when implementing new features, and the resulting code doesn't change often. There are also multiple instruction sets as there are a bunch of little processors you need to control.
Vulkan/DX12 aren't really "low-level" APIs. They're "low overhead", and honestly, no. Their code base is just as large and complicated, if not more so, than OpenGL/DX11.
My team owns a couple of backend APIs, but we’re also working on re-engineering a legacy batch-processing system into a more modern streaming architecture in Spark and Scala. I say “re-engineering” rather than “re-writing” because the domain has changed a lot in the last 10 years.
I’ve been with the team for three and a half years, and it’s been a very educational experience.
I’m a CS teacher these days, but my previous 4 jobs:
- Kubernetes consulting
- On-prem CI for hardware-in-the-loop for radio transceiver firmware using NixOS
- Firmware for high-power EV chargers in Rust
- Zero-knowledge cryptography for a blockchain
Before that I was a full-stack web developer with all kinds of tech stacks. Next year I’m going back to being a full-stack web developer.
I work on the software stack for a biological computing platform (think: tool for programming with human neurons in a dish).
Coding work spans FPGA (SystemVerilog), Linux kernel C, userspace C, Python, and yes, some web services and Browser JavaScript also. I also work on the network engineering of the cloud service and on the Linux OS image.
Easily the most fun I’ve had as a developer and I’ve worked on lots of different types of commercial software projects before. Not all the world is web apps, embedded work can be very satisfying if you’ve not considered it.
The neurons live on an electrode array kept inside a machine which keeps them alive (body temperature, sugar, gas, etc). The embedded system continually measures the voltage at each electrode, and can electrically stimulate the neurons via the same.
Users are provided with an easy to use Python API that allows realtime observation of the raw signals and of detected action potentials (spikes). They can also execute precisely controlled stimulation sequences, which allows information to be presented to the neurons. Then there are a lot of higher level application APIs to handle things like recording data, real-time visualisation, and experiment config management.
Why: it appears to be possible to teach neurons to perform tasks (we taught some to play pong several years ago). Since then our focus has been on building a system that enables rapid iteration in this sort of research. We're selling the system to organisations that have the appropriate biology skills, and renting access to hosted devices where we provide and take care of the cells.
I work on a CAD package for Architects. In C++. It is a native Windows / macOS application.
It's a giant pile of legacy code so a lot of what I do is just C++ generalist stuff, but I have a strong math background so if that's ever called for it's me doing that work (especially because I have English-language skills that don't often come with the strong math background at this pay scale). In particular, I'm the guy wrangling Parasolid (geometry kernel used by SolidWorks, for those familiar) to produce geometry for walls and floors.
Side project(s): Grokking Windows development from the top of the stack to the kernel; everything from Win32, WinUI, WPF, COM, to user- and kernel-mode driver development. It's fun to write drivers in modern C++. Also, massively procrastinated, Vulkan/D3D12 cross-platform game engine written in C++23/26, work-in-progress.
Full time work: GPU driver development and integration for a smartphone series. It's fun to see how the sauce is made.
Still sort of web stuff, but not the kind that HN usually does:
I'm trying to get back into computer networking - both physical cables and the computer code sides of things. Over the past 5 years beginning in the covid lockdowns, I've been watching a lot of the application layer stuff that was written over the past 10-15 years (the stuff HN usually does) slowly blow up. Usually because some REST API or something either broke or got depreciated somehow. This has been affecting both cloud and desktop apps I use, and has made me see the real value in refreshing my lower level network knowledge.
Heck, I'm honestly thinking about getting a CCNA now (or some other non-degree universal cert).
Embedded, a mix of Linux (yocto), boot loaders (mostly C), some bare metal C/assembly. Have worked in aerospace for 6 years but am currently looking to hop over to another industry, ideally AI accelerators/semiconductors or medical devices. I enjoy it, for the most part.
I was hired for full-stack development, but ended up getting moved to a different team working on a desktop application in C++/C#. I've ended up preferring the desktop work a bit more. The problems I have to solve tend to feel more interesting, though that could just be a product of the environment I'm in and the app we're making.
Seeing a lot of people here who work in embedded. Would definitely be interested in diving into that world a bit more. Seems like a lot of fun being that close to the hardware.
Pentesting for consulting company. It’s either testing web apps, mobile apps, external networks or internal networks. I used to enjoy it but due to health issues I had to take a step back with studying and it has become pretty monotonous. I’m trying to think of where to go next after this.
I suppose two other major categories would be mobile apps and gaming. Some overlap is possible too, e.g. mobile apps would use some web tech, or gaming might often be mobile gaming.
I am working on the bare metal automation of IronCore. The project provides tooling to automate the management of data-center hardware and a an Infrastructure-as-a-Service offering on top of that.
I build audio software engines mostly. This is highly enjoyable to me, because I get to create new sounds and new audio effects with results being near instant. Upgrading old Amiga ProTracker .MOD file playback to not sound so 8-bit and low samplerate is a fun challenge too.
Compressing Lamport Signatures is a side-project of mine too.
I'm in healthcare IT management, infrastructure, policy, new projects, all the stuff that comes down from the top, except I have a strong technical background, rather than just being a business guy. I started in PC repair 30+ years ago and have always been a hardware guy. I can do a little coding, but I'm the guy that creates the platforms coders work on.
Working in silicon design, Verilog and SystemVerilog are the bulk of the work, but a lot of scripting of EDA tools too. I enjoy it, I think it's very different working on something which has to be complete when you're done versus something that can be updated easily.
Computational biologist with a focus on predicting individual human health at a startup, but I have ended up managing software engineers. (Scientist explore and engineers make the science work in production.)
If you're a programmer you can always become a founder, I'm in process of building my own Payment Platform because I wasn't satisfied with the existing solutions.
Now I'm doing legal stuff, management and fintech plus web apps servers. Cheers.
I developed Android apps for an EV charging platform for 5 years. Now working for Mapbox to integrate a navigation app into cars. Quite complex environment. Most Android topics are exactly the same as on a phone, it’s quite fun though because your app can control car functionality
I’m an ML researcher currently working on model compression for AI hardware accelerators. Mostly developing and testing quantization algorithms, and hw/sw codesign.
We write mostly Java, some Kotlin, targeting the JVM.
Most commonly our software runs on premises on server-class hardware (or what passes for server-class depending on the industry...), sometimes hosted in the cloud, sometimes on "edge" hardware (think Raspberry Pi class power/spec wise).
One component of the software actually is a web frontend (and a Jetty backend) to go with it, but it's not your typical "web-app" and it's not SaaS. But there's much more to it than that.
90% of the programming I've done over my 30+ year career has been for various flavors of embedded systems. Mainly Medical Devices for the last 20 years. Although there was an interesting detour into Group Fitness (managing data from connected gym equipment) for a few years.
They varied in complexity from little 8-bit microcontrollers to 64-bit server-class blade PC's orchestrating dozens of smaller controllers over serial networks. Written a lot of C++ to the point where I'm just about sick of it.
I've also done the odd webapp, desktop or mobile app from time to time (C# is fun!), but it's been mostly embedded stuff paying my bills.
Embedded software developer here, with very minimal professional hardware design experience. I mostly write nostdlib C, and never use malloc. I write peripheral drivers from scratch even if there’s an “SDK” for it. I spend almost 40% of my time reading documentation, 30% scribbling state machines, 15% writing code and 15% testing it on hardware. LLMs don’t help me much. I use them to write scripts for me to parse my stdout and find patterns. For breakfast, I fight EEs to prove their hardware doesn’t work. I have exploded hardware setups for the products I’m developing for on my desk. JLink is the favorite thing in my aresenal. Even the slightest latency on my text editor annoys the shit out of me, which is why I don’t use IDEs.
I am working on fundraising and administration for a robotics venture. Very little work goes on engineering subjects at present, more often things like patent law, corporate administration, strategy, network build-out and the present penultimate goal fundraising for an aggressive scale go to market autonomous factory. However, the prior eight years have given me an amazing opportunity to study all manner of engineering subjects from mechanical to structural, electronic to electrical, production and fabrication through operations research, logistics and supply chain. I now have a very 'grass roots' view of venture administration, cross-disciplinary R&D and commercialization that is globally informed and very difficult to gain in any context. While significant yield remains at this stage speculative, nevertheless it is very interesting!
Currently rebuilding a VFX studio replacing Windows with Linux with a bespoke PXE system and then implementing a Data Vault to secure IP we receive from movie studios.
The work can be interesting, but intense when in the thick of building a system. There is less competition for jobs compared to pure web/programming, but also less jobs in total. The option is always there to take a web/programming gig if the specialised work is hard to get. Potentially pay is lower than some of the big US web companies, but that's probably as much from me not chasing dollars to the exclusion of all else. Some people/companies don't see this work as deserving of the same/better compensation as web/programming, as it is not as easy to understand and they won't pay for what they don't understand. Find the right employer/client and it can be lucrative.
I used to work in web dev, but I enjoy my current work a lot more. Most of my web role was just taking mockups from the UX team and translating them into code which felt mindless. Now I get handed a system and am asked to squeeze as much performance out of it as possible which I find much more interesting.
All of this is done in a Python environment with usage of Rust for speeding up critical code/computations. (The rust code is delivered as Python modules.)
The work is interesting and different challenges arise when having to process and compute datasets that are updated with 10s of TBs of fresh data daily.
About how long do these typically take to execute? Minute, Tens of Minutes, Hours?
My work if very iterative where the feedback loop is only a few minutes long.
I was once in a group that was switched away from the work we were doing and repurposed to do web work. It was a bad experience, but not because it was web work. The code base we were given was in terrible shape and we weren't allowed the time to adequately fix issues. Thankfully I no longer work there.
I'm self taught when it comes to computers and software development. For years before I landed a paying development job I did a lot of hobby projects. When I decided to take the leap and landed my first development job I took a fairly steep cut in pay. I was single, could afford the cut and was doing something I really wanted to do. It got the experience I needed and after the first year and changing jobs, my pay substantially increased.
I realize not everyone can take the approach I took. It may not even work these days. I did this 38 years ago when the industry was a bit more accepting of developers without a college degree.
Addendum: I also networked. I went to the equivalent of meet ups of the day. Talked with other developers, showed them my work, etc. This is how I found my first job.
K&R is a great intro.
If you want a book that digs deeper, try Modern C by Jens Gustedt. It’s update for C23 this year, and it’s CC (free).
If you want to make something like TigerBeetle or Redis, that’s sort of just specialised back-end development.
You can also do embedded in C. And you can make operating systems.
What people often do when they want a career change is: they work on New Thing in their spare time; they find this little niche at work where New Thing could fit; they find that there’s a limit to how much workplace will let them prioritise New Thing; they start applying for jobs where New Thing is a focus point, with a non-empty resume.
LLMs can also help you break into C development by a large degree. But they still get overwhelmed on a sufficiently large C codebase just like any other language. Your mileage may vary there.
With ~17 years of experience already, start with the study of the structure of C programs. Recreate some of it manually, build it, and research the things that do not behave as expected.
Bonus of using an open source kernel is they have a lot of eyeballs on them. They will be pretty dialed in versus studying random Github projects that happen to be written in C.
Would recommend avoiding cognitive overload, wait until you get into comfortable flow writing, building, fixing as needed, simple programs before you dive into lower level debugging, trying to grasp assembly structures that a compiler spits out.
Earlier it was geodata imports from OSM or private sources. Now it's mostly routers and GPS tracks. Interfacing with OSRM & Valhalla via C bindings. Road graph analysis and algorithms. I wrote a router myself, comparing different routing algorithms. I also developed a pedestrian traffic model for entire cities, for retail. I also did various ML models. My languages are Python w/ GeoPandas & CatBoost, Rust, Go.
I've mostly set aside the languages and tools I used to use, and I'm learning Haiku's variant of C++ to write some native-mode Haiku application software.
Web stuff will burn you out. In my case, that happened 10+ years ago and I've never desired to go back [to building web products].
The first version of the code looks like this, https://youtube.com/watch?v=rJuRTZOE99g
The new version is much more feature rich, catering towards the user. Unreal use in Python is now native and users can launch a dedicated server.
The development process can be slow, lots of waiting on compiling and cooking. The Python part of this project is great. Code is very simple and readable and I'm building out a renderer for the geometric algebra package I'm using, Kingdon. This lets users quickly visualize 3D elements, lines, points, planes, and shapes. Working on non-web stuff is great. I love building out UI and text in 3D, it feels like the final form of UI and is a lot more expressive than web UI. Controlling objects in 3D let's you do a lot more. Everything feels right.
Full-time: C++ work on nearby connectivity (bluetooth) for embedded / industrial devices (factory equipment). Deep stack, hardware constraints, long lifecycles, high reliability.
Non-web work feels very different: stronger constraints, slower but deliberate releases, and bugs are much more expensive. There’s a lot of interesting software being built far away from HTTP and browsers.
I’m using SBERT-style embedding models for the semantic matching, which works very well in practice.
For non-text content, the app also analyzes images (OCR + object recognition) using Apple’s Vision framework. That part is surprisingly powerful, especially on Apple Silicon.
> I need to do something for images that are already classified/tagged via FastVLM
What’s the concrete use case you’re targeting with this?
My main job currently is in game dev, writing C#. Working for a small studio with flexible roles, I sometimes also take the opportunity to use other tech, like actual web stuff. A couple years ago I wrote a simple HTTP API for some internal needs and that was the first time I did modern web.
I've worked in the embedded space and adjacent. I've done automotive (Autosar), I've done some bare metal applications and I've maintained a custom Linux system for a series of embedded products. I've also worked on tooling (native desktop applications) related to some of these embedded uses.
For fun I still play with some embedded development, and would like to do another Android app. I built a couple simple ones years ago and generally Android development seems pretty pleasant to me, but I haven't done Android side projects in a long time because I can't really think of any apps I'd actually like to have.
Once you get up to embedded Linux basically any language can be used.
I have a really smart colleague who is interested in Zig but I’m hesitant to make such an investment without (1) the stronger guarantees of Rust and (2) the larger embedded dev community around Rust.
At the end of the day we don’t usually write our own peripheral drivers anymore, so it’s important to have good BSP support for your language. So whatever you use, you usually have to wrap the C. This is even true of using C! The vendors libs are usually pretty bad and need wrapping with safety checks, or to be made so you can run more than one instance, etc.
It is a different experience to be sure - I work on stuff that nobody likes and where most people are surprised it still exists. And my goals tend to be about shutting down, not growing. I succeed with every server we kill, every product we turn off, every customer we get rid of.
I work on graphics drivers. They're hard write and even harder to debug. You have to be a huge nerd about graphics to get very far. It's a relatively rare skill set, but new, younger, nerdier people keep on coming. Most people in graphics are quiet and are just keeping the industry functioning (me). It's applied computer architecture in a combination of continuous learning and intuition from experience.
Is there some big spec document or ISA that you follow when implementing the driver?
Also I'm curious is it easier to write a driver for the modern "lower level" APIs like vulkan/dx12?
There is documentation, but it's not as well organized as you might imagine. Documentation is usually only necessary when implementing new features, and the resulting code doesn't change often. There are also multiple instruction sets as there are a bunch of little processors you need to control.
Vulkan/DX12 aren't really "low-level" APIs. They're "low overhead", and honestly, no. Their code base is just as large and complicated, if not more so, than OpenGL/DX11.
I’ve been with the team for three and a half years, and it’s been a very educational experience.
Coding work spans FPGA (SystemVerilog), Linux kernel C, userspace C, Python, and yes, some web services and Browser JavaScript also. I also work on the network engineering of the cloud service and on the Linux OS image.
Easily the most fun I’ve had as a developer and I’ve worked on lots of different types of commercial software projects before. Not all the world is web apps, embedded work can be very satisfying if you’ve not considered it.
Users are provided with an easy to use Python API that allows realtime observation of the raw signals and of detected action potentials (spikes). They can also execute precisely controlled stimulation sequences, which allows information to be presented to the neurons. Then there are a lot of higher level application APIs to handle things like recording data, real-time visualisation, and experiment config management.
Why: it appears to be possible to teach neurons to perform tasks (we taught some to play pong several years ago). Since then our focus has been on building a system that enables rapid iteration in this sort of research. We're selling the system to organisations that have the appropriate biology skills, and renting access to hosted devices where we provide and take care of the cells.
It's a giant pile of legacy code so a lot of what I do is just C++ generalist stuff, but I have a strong math background so if that's ever called for it's me doing that work (especially because I have English-language skills that don't often come with the strong math background at this pay scale). In particular, I'm the guy wrangling Parasolid (geometry kernel used by SolidWorks, for those familiar) to produce geometry for walls and floors.
Full time work: GPU driver development and integration for a smartphone series. It's fun to see how the sauce is made.
Eventually: hope to pick up Rust.
I'm trying to get back into computer networking - both physical cables and the computer code sides of things. Over the past 5 years beginning in the covid lockdowns, I've been watching a lot of the application layer stuff that was written over the past 10-15 years (the stuff HN usually does) slowly blow up. Usually because some REST API or something either broke or got depreciated somehow. This has been affecting both cloud and desktop apps I use, and has made me see the real value in refreshing my lower level network knowledge.
Heck, I'm honestly thinking about getting a CCNA now (or some other non-degree universal cert).
You can check it out here: https://www.youtube.com/@soncsd
Seeing a lot of people here who work in embedded. Would definitely be interested in diving into that world a bit more. Seems like a lot of fun being that close to the hardware.
https://ironcore.dev/
Previously I was working on the ingress components of Cloud Foundry, a Platform-as-a-Service offering.
https://www.cloudfoundry.org/
Compressing Lamport Signatures is a side-project of mine too.
The difficult "grunt work" is in keeping the native binary small (~5MB or less) and working on Windows, Mac and Linux at feature-parity.
[0] https://terminal.click
Now I'm doing legal stuff, management and fintech plus web apps servers. Cheers.
(Germany/Munich)
I'm building a better primitive for infrastructure via microvm's (think virtual machine but fast and easy to use).
I am about to launch a complete rewrite of this: https://github.com/BinSquare/ERA
Though the end-use isn't web, we can't deny that much of development still goes to building web-services and consumer app.
Most commonly our software runs on premises on server-class hardware (or what passes for server-class depending on the industry...), sometimes hosted in the cloud, sometimes on "edge" hardware (think Raspberry Pi class power/spec wise).
One component of the software actually is a web frontend (and a Jetty backend) to go with it, but it's not your typical "web-app" and it's not SaaS. But there's much more to it than that.
They varied in complexity from little 8-bit microcontrollers to 64-bit server-class blade PC's orchestrating dozens of smaller controllers over serial networks. Written a lot of C++ to the point where I'm just about sick of it.
I've also done the odd webapp, desktop or mobile app from time to time (C# is fun!), but it's been mostly embedded stuff paying my bills.
But yes, while there is a heavy skew to the web tech., there are enough of people who do the things.
Currently I'm roped to my old hat of a typical SMB sysadmin and.. there are not fun 5hings for the profession.
Currently rebuilding a VFX studio replacing Windows with Linux with a bespoke PXE system and then implementing a Data Vault to secure IP we receive from movie studios.