Как происходит переход от электричества к программе?
Процессор - это не просто электронная схема, по элементам которой течет ток, а логическая, или, цифровая схема. Это значит, что в зависимости от того, есть или нет напряжения в каком-то ее "месте", это самое "место" находится в одном из двух четко враженых состояний . Эти состояния мы и принимаем условно за 1 и 0. Назовем такое "место" - ячейкой памяти. Памяти - потому, что если в схеме ничего больше не будет изменяться, то эти значения останутся там, пока мы не выключим питание, и мы всегда сможем их еще раз узнать.
Мы договорились, что с помощью этих 1 и 0 мы будем кодировать числа, в двоичной системе, (а с помощью чисел будем кодировать все остальное - буквы, цвета, уровень громкости и т.д.) Таким образом, если мысленно выстроить в ряд (назовем его регистром), скажем, 8 таких ячеек (а мы помним, что про каждую из них мы можем точно сказать, там сейчас 1 или 0; например, измерить напряжение вольтметром), мы получим 1 байт, в котором может быть закодировано число от 0 до 255 примерно так:
0 - 00000000
1 - 00000001
2 - 00000010
3 - 00000011
и т.д. вплоть до
255 - 11111111
Далее. Т.к. все ячейки соединены между собой определенным образом, то от наличия или отсутствия напряжения в одном месте напрямую зависит, в каком состоянии будет соседнее с ним место... что-то вроде шестеренок в часах - если повернуть одну, так или иначе повернутся все остальные.
Несколько упрощая, можно сказать, что для построения процессора достаточно три таких "определенных образа" соединения ячеек (схем, или видов логических элементов): 
1. Если две ячейки соединены в схему инвертор, это означает, что если в одной из них сейчас есть напряжение (1), то в другой его точно нет (0), и наоборот.
2. Если три ячейки соединены в схему И, то в одной из них есть напряжение (1) только тогда, когда оно есть в двух других. И, наконец, 
3. схема ИЛИ - в одной из трех ячеек напряжение есть только, если оно есть хотя бы в одной из двух соседних.
Все эти схемы построены из полупроводников (в основном, транзисторов), а ячейки - места соединения отдельных логических элементов друг с другом.
Вот именно тут мы уже плавненько перешли от электричества к логике и цифрам, т.к. с помощью напряжения в разных ячейках можем однозначно отображать разные числа, а комбинируя такие элементарные логические схемы, можем создавать нужную нам логику работы процессора. Осталось только разобрать, а как же это все работает.
Далее из таких схем-кирпичиков выстроены более сложные схемы: сдвигающие регистры, сумматоры, компараторы, и, собственно, АЛУ. Его образно называют сердсем процессора, но на самом деле это его мозг. Это то, чем процессор выполняет программу. Очень сильно упрощая, его работу можно представить себе так:
Есть некий регистр, в котором сейчас находится код операции (некое закодированное число). Оно определяет, что конкретно АЛУ сейчас, вот на этом шаге должно делать, например, складывать. И есть еще два регистра, в которых находятся закодированные числа, например, 2 и 3. Эти регистры подключены к АЛУ. В такой ситуации АЛУ, выполняя шаг, складывает числа из регистров данных (2 и 3) и помещает результат (5) в первый из них (теперь там уже не 2 а 5), а в регистр операции - следующую инструкцию. Так процессор выполнил один шаг программы и готов к следующему.
Почему происходит именно так, а не как-то иначе? Потому, что мы объединили много разных логических элементов в сложную схему с именно такой логикой. Объединили бы иначе, логика и поведение схемы были бы другими... и это, возможно, был бы другой процессор, с другой архитектурой, системой команд и т.д. А эта конкретная схема в такой ситуации всегда будет делать именно это!
Ну, и, наконец, осталось выяснить, а что же такое этот шаг и что заставляет процессор совершать отдельные шаги?
Заставляет всю эту кухню крутиться тактовый генератор. Вот его было бы правильно называть сердцем. Это такая другая схема, построенная на кристалле кварца, которая ничего иного не делает, как очень быстро выдает то 1 то 0. Очень быстро - это те самые МГц и ГГц, которыми любят меряться владельцы крутых компьютеров, т.е. скорость, с которой процессор совершает шаги. Выход тактового генератора напрямую подключен к нужным частям всей схемы, и выдаваемые им 1 и 0 - это то самое, что и приводит всю схему в действие, заставляя все логические элементы переключаться по цепочке и изменять значения отдельных ячеек согласно заданной нами логике... и программе.
Вот, как-то так на пальцах можно описать работу процессора. Конечно же, там внутри все на порядки сложнее, схем и абстракций больше, транзисторов миллионы и т.д., но общий принцип работы полупроводникового процессора именно таков. И, кстати, полупроводниковый процессор - всего лишь один из вариантов, как построить процессор, способный выполнять программы. Вообще-то, его можно построить из чего угодно. Когда полупроводников еще не было, их строили на электронных лампах, до того - на железных механизмах, приводимых в действие моторами, или вручную, еще раньше - из дерева... ну, и конечно - в уме и на бумаге. Так что, электричество для этого вовсе даже и не обязательно :)
UPD:  Несколько поверхностная, но весьма наглядная статья о схемотехнике логических элементов на Хабре.
Подобный вопрос уже задавали. На мой взгляд, логичнее думать не о переходе от электричества к программе, а наоборот, от программы к тому, как процессор обрабатывает данные, то есть, очень грубо говоря, меняет форму "выходного сигнала" в зависимости от формы "входного сигнала".