Skills to master for a "Full Stack" developer on the JVM, 2014 edition

I'm part of an initiative developing curriculum and training resources for developers.  Here's what I have so far on fundamentals and skills for a developer.

Fundamentals

Design and Structure
• Design / Domain Modeling
• Object Orientation / Design Patterns

Development and Delivery
• IDE mastery: IntelliJ, Eclipse, etc.
• Code Reviews / Pull Requests
• Testing: Unit testing, test coverage
• Effective Debugging / Using a symbolic debugger
* Working on an Agile Development team
* Profiling/ Performance Measurement Analysis
* Secure Coding Practices & Threat modeling

Operations and Sustainability
• Appropriate Logging / Levels for operational troubleshooting
• Open Source Adoption & Usage
• Intellectual Property: Disclosure and Protection

Specific Skills for Server-side Developers

Databases
  • General Relational Database concepts (Schemas, tables, datatypes)
  • Expressing one-to-one, one-to-many, and many-to-many relationships
  • General SQL: SELECT, INSERT, UPDATE, DELETE, various joins
  • Awareness of more advanced topics: Transactions, Views, Stored Procedures, Geospatial queries, DB schema migrations

DB Drivers and Object/Relational Mapping tools
  • General concepts in Drivers: JDBC Connections, connection pooling, connection pool configuration
  • JPA
  • Hibernate / HQL
  • Hibernate Caches and cache optimization
  • Debugging and profiling
  • Using GORM and the GORM DSL

App Server Concepts
  • General Layout of a Java Application Server and a WAR file
  • Working with an app server to install, start, stop, and remove your application
  • Monitoring via JMX and other tools
  • Tomcat 7
  • Jetty

Frameworks
  • Application Frameworks: Spring 3.0
  • MVC frameworks: Grails 2.3+
  • Security: SpringSecurity, OAuth 2

UI Technologies
  • HTML5
  • DOM Fundamentals
  • CSS
  • JavaScript
  • JQuery
  • Client-side MVC Frameworks: Backbone, Ember, AngularJS concepts and application

Security
  • Hashing Algorithms and applicability
  • Encryption basics: Symmetric and Asymmetric key crypto
  • Certificates and Certificate Authority infrastructure
  • Password storage requirements
  • Identity Federation
  • Threat modeling

Infrastructure and Operations
  • Application Installers (Yes, we still use those)
  • Hardware and Software Load Balancers and interoperability thereof
  • Virtualization
  • Choosing appropriate AMI’s for Amazon EC2
  • “Infrastructure as Code” using Vagrant, Chef, and Puppet

That's just what I have so far.  

Until you try to codify it, it's easy to forget how much disparate crap has to be swimming in your head to be an effective developer in a nothing-fancy JVM stack in 2014.  Many rough edges hide behind cute UIs, scaffolding, scripts, wizards, IDEs, and pre-canned workflows.  However, beneath it all, there's Masters or Ph.D-level art in each of those layers.   How deep do you want to go?  Moreover, how much do you want to sustain in production for 5 to 15 years?

Also, aside from IDE usage, this leaves out even more basic tooling like Version control (Git), Continuous Integration (Jenkins), and Artifact Management (Artifactory).  That was someone else's task this iteration.

The above makes me just a touch dizzy.

Comments

Popular posts from this blog

Review: The Southeast Christian Church Easter Pageant

Driving for the Cure...? (Or, how I got blacklisted...)

No, I don't have Connective Tissue Disorder