by mheydt
24.
July 2008 12:59
>
I was (am) listening to the Alt.Net podcasts today. I just came across this podcast series last night. I don't know why I didn't hear of this before, but perhaps it's because it's relatively new as it's only been publishing for a few months and is up to 8 episodes.
At the same time, I'm on a three hour train ride from Baltimore up to Connecticut to talk to a potential new client (to be specific, an interview). The combination of brushing up on some things I don't do on a daily basis in case I'm asked about them, as well as some concepts discussed in this broadcast has brought me around to something that's on my mind relatively often but that I've never written down...
What are the key concepts in software engineering, as of today, in July 2008? This is not meant to be an complete list, or that the items exhibit complete separation of concerns relative to each other.
Here my initial stab at what I think are the things you must exhibit to be an exceptional architect at this time:
- Domain Driven Design (DDD)
- Test Driven Design (TDD)
- Software Evolution / Continuous Improvement
- Patterns, Patterns, Patterns
- Dependency Injection and Inversion of Control
- Policy based programming
- Aspect Oriented Programming
- Doing things as much in a declarative nature as possible
- Domain Specific Languages
- Separation of concerns
- Design by contract / Interfaces
- Service Orientation
- Transparent translation of domain to persistent store
- Mocking
- Parallelism
- Caching
- Factories
- POCO
- Event Driven Design
- Orchestration
- Rules
- Logging / Instrumentation
- RDBMS design
- Keep it simple stupid
I'm going to come back and expand this list as well as elaborate on each.