Developer Blog

  • Blog
  • /
  • Things a Web Developer Should Be Able To Grasp - Part 2
By Dracony on 28 September 2014

So my last post concerning Junior developers got some rather expected feedback that it was really pushing the line of what a “Junior” is. To be fair perhaps I should have named that post like I did that one. Maybe it doesn’t really matter that much if the person knows those things at the moment, rather that he should be able to grasp them when needed.

As for what a Middle level developer should know I think I can allow myself to push the line quite far. As I believe that the gap between Middle and Senior levels should be based more on experience than on theory. Obviously it’s the job of a Senior to know some more obscure things that don’t come up that often, but a Middle level developer should be self-sufficient. But please treat is as a suggested reading list, rather than “you have to be this tall” plank.

I received a few comments on why I focus little on actual technologies like libraries and frameworks. The reason is that they don’t really matter in the long run and may change every 2 years. You could also check out the “ If carpenters were interviewed as programmers” to understand my view on this.

General application runtime
This is a bit beyond the pale for web developers, but understanding the basics of application runtime may help prevent some bugs, like stack overflow for example.

  • Heap
  • Stack
  • Threads vs Processes

Data structures
These actually come up often. In PHP arrays can behave like a lot of fundamental data structures, so you might have been using one for ages, and just didn’t know the proper name.

  • Linked list
  • Queue, Dequeue
  • Quick sort
  • Basic knowledge of Hash Tables
  • Binary search
  • Tree data structure

Programming paradigms
I’m unsure whether I should include functional programming here, since although it has become increasingly popular, especially after we got non=blocking I/O, but not everyone needs that.

  • S.O.L.I.D principles
  • Being able to recognize all GOF OOP patterns by name and to implement at least half of them.
  • Being aware of some anti-patterns.
  • Lambda functions, basics of functional programming

Architectural

  • Data transfer object
  • Database access object
  • Being able to read UML class diagrams
  • Separation of backend and frontend via APIs
  • REST

Networking

  • Cross domain request techniques
  • SSL, HTTPS
  • Pros and cons of different web servers
  • DNS

Relational Databases

  • Transactions
  • Stored procedures
  • Triggers
  • Database denormalization
  • Full text search

NoSQL Databases
This is tricky, as there are so many and they differ a lot between themselves. But I guess it would be worthwhile to familiarize oneself with at least these ones:

  • MongoDB
  • Redis
  • CouchDB
  • Knowing when to apply these

HTML, CSS

  • Xpath
  • HTML5 Canvas
  • HTML5 video and audio
  • Semantic markup
  • SVG
  • Some cool CSS tricks =]
  • Reducing page load time

Security

  • HTTP Authentication
  • Hash functions
  • Salting
  • Difference between symmetric and asymmetric cryptography

Development process

  • TDD
  • Behavioral testing
  • Any build and deployment tool
  • Continuous integration
  • Code coverage
  • Static code analysis
  • Any branching model

Optimization

  • Horizontal vs vertical scaling
  • Non-blocking I/O
  • Load balancing

PHP

  • Composer
  • Being able to create a composer package
  • Familiarity with PSRs
  • Being able to tell differences introduced in PHP releases
  • Namespaces
  • Garbage collection and cyclic references
  • Traits
  • UTF8 support
  • SPL Interfaces and classes
  • Any XML parsing library
  • Being able to install PECL libraries
  • Regular expressions with PCRE

I actually want to make these lists useful, so if you have any ideas or would like to suggest entire sections please comment. Such things are far better done by a community than a single person.

comments powered by Disqus