Last Friday - February 19th 2016 - I gave a Magento 2 developer training at the headquarters of Byte with 7 students and because it was my first, it's nice to give some ins and outs on how it went - mainly because it tells us something on Magento 2 development in general.
Large number of topics
The first thing that popped up is that Magento 2 is overwhelming at first: There are many topics to cover, ranging from CLI tools to Dependency Injection, repositories to RequireJS and lots more. While this training was meant to give students a huge kickstart with everything, next time we will be limiting topics. We spent about 1 hour on frontend development (UIComponents, XML layout, RequireJS, KnockoutJS, etcetera) while actually frontend development on its own already requires a full day. Instead, the next time we will focus mainly on backend development.
Playing with Dependency Injection
One of the main goals of the training was to get people started with Dependency Injection. There is a vast number of things that you can do with Magento 2, but if the concept of DI (preferences, factories, proxies, types, virtual types and plugins) does not sink in, it is hard if not impossible to customize Magento 2 properly.
During the training I kept insisting on how to inject objects by interface and how to deal with overrides (preferences, virtual types, plugins) properly. This lead actually to the understanding that when DI is known, the rest of Magento 2 is much easier.
Messy CLI stuff
The CLI stuff of Magento 2 is still messy. In Developer Mode, some code generation should happen automatically but in a lot of cases it does not. Also, when compiling code, it makes sense to only generate those classes that actually need compiling. Similarly, when editing LESS or CSS in your module, the static compilation process to
/pub takes ages. Workarounds are there by writing custom Gulp/Grunt/shell scripts to sync changes. But Magento 2 definitely needs improving.
Magento 2 is still great
During the training, some architectural designs lead to brainstorms on how to deal with things practically. For instance, will interceptors create less or more conflicts between extensions? There are still a lot of things that need to be developed out, but for sure Magento 2 is proving to be a very reliable and extendible framework that will gain ground rapidly. We love it and we love training about it!