I started out with the idea of writing an acticle on Software Engineering and Architecture prerequisites. However, that is too large a topic and I don't feel qualified to give a definitive set. Instead, here are the concepts/theory that I consider important: Software Engineering and Architecture has, in my opinion, the following prerequisite's:

Software Engineering and Architecture

  • UML - Unified Modeling Language
  • RUP - Rational Unified Process
  • XP - eXtreme Programming
  • OOP - Object Oriented Programming
  • Functional Programming (misunderstood)
  • Design Patterns - Gang Of Four
  • CMM - Capability Maturity Model - A pragmatic approach to chart an organization's development ability in terms of its stability/ability to reproduce success/maturity/development process. Most of the world sits at CMM-0, while Microsoft/IBM sit at CMM-4, and god sits at CMM-5.
  • SOA - Service Oriented Architecture - The impact of web services, and automated services across organisational boundaries.
  • AOP - Aspect Oriented Programming - I don't know of a short, or cute way of explaining this -- which is a good cute to say that I do not understand it
  • Refactoring - To rework an existing chunk of code/design/architecture, in such a way as to increase it's elegance/speed/quality without increasing its functionality.
  • TDD - Test Driven Development 
  • Agile Development - SCRUMM 

In the past I have used this list as a basis for interviews.

Pragmatics

  • Bi-Polar development world (Open Source & Java Soup vs. Microsoft Stack vs. The Old Stuff)

Concepts: "Tao or Philosophy of Software Engineering"

  • Concept: Software Economics (Lack of Scarcity, Quality-Performance-Price triangle)
  • Physical Law: Heisenberg's Uncertainty Principal
  • Physical Law: 2nd Law of Thermodynamic
  • Maths: Godels Proof: Deterministic World Flaw (Proof?)
  • Physics: Occams Razor
  • Concept: Emergence
  • Maths: Chaos Theory and Emergence, as applied to Software Engineering
  • Concept: Quality before Performance
  • Science: Scientific Method, as applied to Software Engineering

I plan to return to these themes over time, and expand or explain the theme's theory and my personal philosophy of (Software Engineering, Software Architecture, hacking, etc ).