Some people may say: My job is creating forms in WordPress, why would I learn things that have no direct connection to my job and that I won’t ever need in real life. And my answer is that if you don’t learn them, then making those WordPress forms will be your job for your entire life.
General programming awareness
Understanding the “big O notation”, what it means and why it matters
Array data structures as they are defined, not as they are implemented in PHP. How is the n-th element of an array accessed in memory.
At least one other fundamental data structure (linked list, queue, stack)
Being able to implement at least one O(NlogN) sorting algorithm
Understanding recursion. This really goes without saying
OOPS
Encapsulation, Inheritance, Polymorphism
Difference between interfaces and abstract classes. As an added bonus some knowledge on how PHP traits might be used when implementing multiple interfaces
Understanding of at least 2 patters of each kind (Creational, Structural and Behavioral)
The DRY principle
Why are Singletons evil
Architectural
Difference between MVC, VC and MVP architectures.
Why can’t microframeworks like Slim be classified as MVC, and which architecture type are they actually.
Why all PHP MVC frameworks aren’t actually truly MVC
What is Separation of Concerns
Understanding ORM and Activerecord
Networking
IP address structure
What is a port, a protocol and a socket
Being able to construct an HTTP request and response payloads manually
Pros and cons of using cookies vs sessions. Knowing when to use which
Being able to perform a basic configuration of an HTTP server (apache, nginx, whatever)
Using AJAX
SQL
Designing normalized tables. Knowledge of the first 3 normal forms
Understanding of indexes. What is a full table scan and why it should be avoided
Understanding how to use EXPLAIN to analyze queries
Different types of joins
Why are foreign keys needed in the database
MyIsam vs InnoDB pros and cons
Awareness of the existence of NoSQL databases
HTML, CSS and markup
This one heavily relies on actual experience, so I’ll only concentrate on theory:
At least one template engine, or using PHP as a template engine
CSS preprocessor awareness
Feeling comfortable with supporting multiple browsers
At least some nice CSS effects, like shadows, gradients, rounded corners, etc
Understanding the importance of semantic markup
Document object model
Javascript
Yes, this gets its own section
How come javascript is an object oriented language without classes
How to emulate classes in javascript
In what ways is the prototype approach to OOP superior to class based approach
JQuery, though I guess nowadays people learn JQuery before they learn javascript
Being able to write well structured code without callback hell
Techniques of loading js faster (uglifying, requirejs)
Security
Approaches to authorization and authentication
OAuth
Preventing SQL attacks
Preventing XSS attacks
DDOS mitigation
Hash functions, and why md5 is not cool anymore
Development process
Why do we need testing?
Being able to use any testing framework, bonus points for PHPUnit
Mocks vs Stubs
Different kinds of testing: Unit, Integration, Behavioral, Smoke, Black box…
Any VCS system, bonus points for Git. Being able to undo commits, rebase, branch etc.
Optimization
Caching
Profiling
Understanding of load balancing approaches
PHP
Finally (Server side sCripting and programming language)
I am describng about PHP
PHP data types
Error handling
Exception inheritance and multiple catch statements
Classes, interfaces, traits
Handling file uploads
Magic methods
Being productive in at least one framework AND one cms
Autoloading
Late static binding