If you follow the software engineering industry, in even the most shallow way, you’ve probably heard the term “full stack developer”. All the recruiters are looking for full stack developers. They want the front-end. They want the back-end. They want full stack developers.
Training companies are falling all over themselves to cater to full stack developers:
Seriously, how difficult can being a “full stack developer” be, if you can be one in 19 weeks?
Here’s the best definition I can find of a “full-stack developer”:
So, “full stack” apparently means knowing a handful of easy-to-learn web technologies.
Web Development? Seriously?
At the risk of being confrontational, I would like to say: web development may be challenging for small, fragile children. However, if you want to talk about seriously difficult software development, you have to talk about firmware and BIOS development. With this in mind, I humbly present my idea of a true full stack developer, the Full Stack BIOS Developer!
Full Stack BIOS Development
Here is my list, beginning at the “top” of the stack and working to the “bottom”. The idea is that a BIOS developer who has mastered the following list can be considered “full stack”, meaning he has a comprehensive understanding of BIOS firmware and can be counted on to solve a variety of problems in all domains of the BIOS boot process:
1. Industry Standards (pick 2 to master)
- Smart Battery Data Specification
2. Essential Tools (choose 6 of 8)
- mastery of a professional text editor, NOT Visual Studio, NOT Eclipse-based (i.e. SlickEdit, Vim, Ultraedit, Notepad++, etc.)
- mastery of regular expressions—the underpinning of everything in Computer Science
- mastery of data structures in C
- be comfortable using a static source code analyzer (e.g. Fortify, Coverity, Klocwork)
- be able to use a disassembler/debugger (e.g. IDA, SourcePoint)
- working knowledge of security technologies (cryptographic hashes, public key encryption)
3. Hardware (pick 2—be able to use a bus analyzer to debug issues)
- USB · PCI · SATA · PECI · I2C · LPC · SAS
4. Core Logic
- Intel or ARM architecture (MSRs, MTRRs, chipset configuration, p-states, c-states, xAPIC)
5. UEFI/EDK building blocks (master 4 of 6)
- .dec, .dsc, .fdf, .inf, .uni, .vfr
6. UEFI architecture
- UEFI shell development
- SMM driver development
- DXE driver development
- PEI module development
7. Required Languages
- Python (used in EDKII)
- assembly, either x86 or ARM (optional)
8. Legacy Bonus (for extra credit!)
- BIOS Boot Specification
- PnP BIOS Specification
- Interrupt Vector Table
- Software INT Mechanism
- Legacy OROM implementation
- A20 Gate
- E820 Table
- IEEE 1284 (LPT port)
- 16-bit Intel segmented programming model
That’s my list, and, speaking for me, I still have lots of work to do to be considered a Full Stack BIOS Developer! Is there anything you would add, remove, or change that would better define a full stack BIOS developer? Leave a comment and let me know!