There seems to be some mix up between HEX and Binary here, and how programming works at it's most basic level.
Binary is a mathematical system where you simply count up to 1 from zero. Because a CPU is basically a few million (Or is it billion yet?) switches, with two states, on and off, this is represented mathematically as 0 for off, and 1 for on. Data is stored in exactly the same way.
Hexadeciamal on the other hand is just another way of representing a value of up to sixteen. As humans, we have 10 fingers, so we count up to ten, then twenty, then thirty etc. Imagine the computer has 16 fingers, so it counts from 0 up to 9 (remember 0 is counted as a number in computing, that is why dispite there being 256 colours, they are represented as 255 for 256 because 0 is represente as 1) then A B C D E F, when it gets to F, just as we do with 10, we count the next number as 20, then 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 2C, 2D, 2E, 2F, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3F. The reason that we use this system for counting, is because 16-bit processors can shove the number sixteen as 1111, thus maniuplating up to sixteen switches in one go to generate that value, in the smallest unit of processing time. We stuck with Hexadeciamal because CPU's went from 16 to 32 bit, then 32 to 64 bit processing. And rather than writing software that read single 32 or 64 bit Bases, we remained with the 16-bit hex, as tread 2 hex's as a single peice of base32 data or four as a single peice of base64 data.
Machine code, as someone else pointed out, is the usage of base2, or binary and is the most fundermental state of data in a digital computer system. Hexidecimal is used in assembly language, a somewhat outmoded form of programming where hexidecimal codes were entered in as numbers because it's quicker and more efficant to enter in the letter F then to type in 1111 for sixteen, or FFFF rather than 1111111111111111 for 65535.
So in essance, to program in binary, you would have to understand how every single switch is triggered, and want value at any given point in time, is required to trigger a specific result.
I lay upon my bed one bright clear night, and gazed upon the distant stars far above, then I thought... where the hell is my roof?