This is a comment I wrote on this cool blog – Quomodocumque.
Arguing for the replacement of a classical Euclidean plane geometry course with a beginning programming course requires attention to issues of collateral learning. Both writing effective programs and proving new theorems are creative acts. The median successful student in either course would not have that level of competence. Even if the rare student wanted to, an extended apprenticeship and many more courses would be needed before becoming either a productive programmer or a mathematician.
The important question is what generalizable skills might come from either course. As taught or at least as I remember them being taught not so much. The content, the facts of plane geometry and syntax of various programming tools would certainly be there. The beauty of the axiomatic approach to mathematics and the structure and operations of digital computers might be given slight notice. The programming course may end with a project and the geometry class move toward increasingly sophisticated proofs. Both demonstrations are designed to show just that, that a student can write a program or prove a theorem, skills that most of them will never use again.
A reoriented pedagogy would make a big difference. After a set of preliminaries, students could be taught to read a program or a proof. Start with a fully remarked program and an annotated proof (The column method would work fine for this.) and have students answer a series of questions like how many iterations does this loop perform or why is the line segment bisected. Then give a series of unremarked programs or unannotated proofs and ask the student to provide the remarks or annotation. Then spend plenty of time debugging programs and finding flaws in proofs. Along the way discuss various program structures or methods of proof. In either case students will spend their time developing close reading habits and critical thinking skills.
Couched this way both courses have similar ends. For the general student, a programming course makes more sense. The variety of problems could be much broader (graph theory, probability, etc) and computers are ubiquitous. Also, somewhere somehow we also need to be teaching high school students the fundamentals of system theory.