Developer Blog

  • Blog
  • /
  • Things Every Web Developer Should Know - Part 1
By Dracony on 27 September 2014

So today I’ve decided to take a little break from writing PHPixie v3 and do some blogging instead. Since my old post on test tasks for interviews got some public attention I decided to broaden the topic a bit with a list of things that I think every web developer must know. At my previous job we had a huge checklist of things that you needed to know to pass to the next level. While some may argue that such an approach is too formal, I find that it serves as a great opportunity to learn new things you might have never knew existed. And it also made sure that people higher in the hierarchy were at least a bit more knowledgeable than the ones they managed. So here is my version of such a list, but since It’s probably going to be huge I’ll split it into multiple posts.

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.

So let’s start with what I think is needed for a Junior developer. The distinction I want to make here is that “Junior” doesn’t mean “someone who just started developing”, but rather a person who has sufficient skill to be able to solve most of the tasks efficiently but needing guidance from time to time.

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

OOP

  • 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 =)

  • 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

That is about it.I tied to make the items easily googleable, and most of them are on wiki. And if you think than I’m really overkilling the “Junior” level, you’ll be really surprised how many of these topics can be covered in just 2 evenings spent on Wikipedia. Just try it =)

comments powered by Disqus