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.