The other day I stumbled on this old post describing how web development as a trade has an inherently exponential level of complexity adding up to "672 things" the developer needs to keep in mind every day. I'd actually say it goes a bit beyond that. It's true that as technology evolves we have more powerful tools to bring ease to cumbersome tasks; the pre-baked SQL in Rails or the pre-baked JavaScript in jQuery definitely help us do more stuff, faster. But it takes vigilance just keeping up on emerging technologies that can save us time and work. And by vigilance of course I mean lots of time and work. For my own (morbid?) curiosity I decided to compile a list of concepts, languages, and tools I've learned over my years working online.
- Markup/Templating: CSS, ERB, HAML, HTML, XHTML, Web Standards, XML
- Dynamic/Client-side Scripting: ActionScript, AJAX, DOM, Flash, JavaScript, jQuery, JSON, Prototype
- Content Management Systems: Drupal, WordPress
- Databases: Berkeley DB, MySQL, SQL, Oracle
- Programming Patterns: MVC, RESTful development
- Programming Languages: C, C++, Java, Perl, PHP, Ruby
- Programming Methodologies: Agile, Event-based, Extreme, Procedural, Object-Oriented, Stateless
- Protocols: DNS with BIND, HTTP, XHR
- Off-site Management: Facebook API, REST, SEO, SOAP, Twitter API, Web Services
- Operating Systems: FreeBSD, Linux, Mac OSX, Windows, Unix
- Testing: TDD, BDD, Rspec, rUnit
- Text Editors/IDEs: Emacs, HomeSite, DreamWeaver, TextMate, xEmacs
- Usability Concerns: Accessibility, Character Sets, Cookies, Internationalization, Session Management
- Versioning Sytems: CVS, Perforce, Subversion, Git
- Web App Tools: CGI, Mason, mod_perl, Ruby on Rails
- Web Servers: Apache, Mongrel, Webrick
I'm pretty sure that I left some things out, and I'm pretty sure that this is an average-length list for any seasoned web developer. We stuff this dizzying array of thinking patterns and acronyms into our heads and then have to distill it clearly to…well, just about everybody. Web Development at a large online company is at the crossroads of almost everyone who works there. Which is to say, all of the following have a stake in what happens on the website: product manufacturers, business managers, project managers, editors, copywriters, graphic designers, back-end software developers, database administrators, systems/network administrators, inventory managers, security monitors, metrics compilers, customer service representatives, and last but not least, the users themselves.
At a small company there are significantly fewer people and departments to worry about, but the day-to-day work inevitably bleeds into other disciplines. You'll find a small shop's developers having basic fluency in everything from the highest user-experience level (design, copy, usability, accessibility, typography, color theory, digital color spaces, Photoshop, etc) to the lowest systems level (database administration, *nix administration, load balancing, network performance tuning, shell scripting, deployment procedures, maintenance cronjobs, backups and disk space management, internal and external security risks, and so on), with the ability to communicate it all clearly to designers, business stakeholders, and clients.
Phew.
In my Amazon days we grappled with the best possible job title for the crazy developer who prefers working at the interface layer, this strange nexus of everything. Front-end Engineer? Web Developer? Web Application Developer? SDE-UI? The latter became the official title, standing for Software Development Engineer – User Interface. But I've always preferred a mash-up of its acronym: SE-DUI. Software Engineer who clearly must've chosen his profession while Developing Under the Influence.