- - Structured programming.
- - Programming paradigms and their differences and benefits (functional/procedural/declarative/imperative/object oriented), how to choose language/paradigm depending on problem, and useful patterns and strategies for each.
- - Type systems (weak/strong/dynamic/strict). Drawbacks and benefits
- - Basic development methodology (version control, testing, error handling, debugging, ALM, documentation).
- - "Data structures and algorithms" i.e. basic discrete math, complexity theory, data structures and their algorithms.
- - Some low level knowledge: basic understanding of how a computer works, how memory/cache/file systems and OS:es work. What's two's complement? What's epsilon for IEEE 32 bit floats?
- - Basic computer security, encryption and hashing.
I think databases, "The unix philosophy" etc. are more controversial and should not be on the essential shortlist.