There's been a new discussion over what to call yourself when describing what you do as a developer. I've sort of even bloged about it in the past.

Over the last year about 60% of my time was spent building front-end UX applications with Ember, 30% of my time was with Laravel building APIs and custom CMS applications, the last 10% of my time was spread across many technologies, techniques, and more. This also is not counting the completely technology agnostic time I have spent discussing and researching software architecture, history, project management, and business practices. I describe myself not as an "Ember Developer", or "Laravel Developer", but as a "Web Application Developer" with specialties in Ember, Laravel, Single Page Applications, and immersive experiences.

In my mind, how you describe yourself is mostly about telling non-technical people where your limits end. Where do you stretch to? Personally, while I have experience and knowledge in truely native desktop and mobile applications, it has been about 3 years since I have actively developed in that space. On the other hand, while it is not my ideal tech stack, I've worked on projects on the server in Ruby, Python, and Node.js. I've built and maintained Backbone and Angular applications and widgets.

My Last Year as a Developer

As I am now going on a year at my current job at Keen Technology, I think it may be informative the broad spectrum that I've worked on in the last year. The following lists the technologies that I have actively worked on, consulted on, or code reviewed in my job or in my spare time.

In projects that I've worked on, the programming languages have spread across the following:

  • PHP
  • Javascript
  • Coffeescript
  • Emberscript
  • Ruby
  • Python
  • SQL
  • CouchDB's Version of JS
  • MongoDB Query Lang
  • Postgres Specific Syntax
  • Bash
  • Cypher
  • Gremlin

A condensed list of the major frameworks and tech tools I've used include:

  • Laravel
  • Ember
  • Angular
  • Backbone (and it's various offshoots)
  • Rails
  • Sinatra
  • Flask
  • Envoy
  • Fabric
  • Postgres
  • MySQL (and MariaDB)
  • DB2
  • Neo4J
  • CouchDB
  • MongoDB
  • Redis
  • WordPress (Grumble Grumble)
  • Capistrano
  • Express
  • Sails
  • Symfony
  • Grunt
  • Gulp
  • Broccoli
  • Nginx
  • Apache
  • Three.js
  • Pixi.js

On top of that, I have read and researched code in these languages:

  • F#
  • Ada
  • Smalltalk
  • Java
  • Dart
  • .NET

There's of course the necessary dev-ops techniques and commands:

  • Continuous Integration - Jenkins
  • git (you can always learn more git)
  • tail (learn to use and abuse it)
  • screen
  • AWS
  • supervisord
  • foreman

Along similar lines are the various 3rd party services and APIs I've worked with:

  • Facebook
  • Twitter
  • Mandrill
  • Mailchimp
  • SES
  • S3
  • IronMQ
  • Dropbox

Then come the Patterns and techniques that I have been discussing and researching:

  • ADR
  • MVC (Pretty much every iteration from Smalltalk80 to the web server hack to client side js implementations)
  • MVVM
  • ORMs
  • ODMs

Finally are the more general (but not really any more easy to understand necessarily) topics:

  • TCP
  • Sockets
  • SPDY
  • Threading
  • HTTP 1
  • HTTP 2
  • REST
  • OAuth 2 (Client and Server specs)
  • HTML 5
  • ES6 specs
  • CSS3
  • HAL
  • JSON API
  • SOAP

As you might be able to see, there's alot of breadth to my work as a "Web Application Developer" and there's still things like studying UX and project management that aren't included in that list, neither are the smaller sized tools and libraries that I use to get things done.


However…

Two years ago, I was a "Wordpress and CodeIgniter Developer". I didn't know the wider concepts to jump into a Rails project or go from Backbone over to Ember or Angular. This was my limiting factor. At best I could find my way around a PHP application and eventually get something to work.

When working with a team, I didn't know the questions to ask. Now, I'm not a Rails developer, but I can look at the structure and take away a few things:

  • Templating Language Structure
  • Coding standards
  • Major Pattern (MVCish…)

From there, I can ask things "how do I create a new route that only responds to X?", "how do I push new data to the views?", "where do I add presenters?", etc. I won't be as fast as a greenfield Laravel project, but faster than somthing in Spring. Yet, I can get things done.

What About You?

You may find yourself in a few camps:

You may look at the list of technologies that I listed and be terrified or intimidated. For you, you may be like I was two years ago, advertising yourself as more than your direct specialty would be a disservice to someone who comes to you with something out of your specialty. To you, I say don't stop growing! Dive deeper in your current communities, but stick your head up and find what is going on outside of that area. If you are a WordPress/jQuery dev: look at what is going on in a space like Rails. If you are a Rails or Laravel developer, maybe checkout something like Sinatra, Slim, or Aura.

You may be right on par with me in terms of breadth. AWESOME! Keep going! Look back at the past of programming: alot can be learned from books like Patterns of Enterprise Application Architecture. Stay in your communities and still branch out. Continue trying new things, and specialize. Get a flow going.

The last group looks at my list and sees things that are missing. You are the evangelists. Work on communication. Build community and cross-community relationships. Mentor those under you. Productively challenge your team and community. Look for places you or your community may be lacking and try to give back. Find people to make up where you are lacking (you can't cover everything).


So… Where are you?

Please keep up the conversation in the comments and feel free to share this.