Saturday, February 1, 2014

Plone Newbie Advice 2014 - Learn the big picture, Trust the blackbox

If I had just 20 minutes with a Plone newbie, eager to become a competent Plone developer, this is the advice that I would give to them today. I strongly believe that after the release of Plone 5, later this year, the specifics of this advice will be slightly different as projects like Mockup become the standard, but hopefully the general advice will hold true.

update: May 30, 2015 - I've re-organized some of the information for the sake of clarity and readability. Tangential notes have been moved to a section called "Parting thoughts".

I'm assuming that you've already installed and played around a bit with Plone. If not start by doing a quick cloud installation of Plone.

Fundamentals are assumed so make sure you understand them

In my experience persons trip up on things like Unix fundamentals, Networking and Protocols, CSS, Javascript and HTML. So before you invest time in Plone make sure you know your basic web technology.

The Plone stack touches many pieces and the deeper you go the more you learn. The good news is that understanding these things will probably benefit you with every other web project that you work on.

My checklist of fundamentals that you'll want to be comfortable with include:

  • HTML
  • CSS
  • XML
  • Linux/Unix Command line
  • Basic Python
  • Working with Web APIs
  • Networking Fundamentals (TCP/IP, Application Protocols, Browsers, SSH)
As an example, recently I prototyped a system that relied on both Heroku and Google App Engine, the development was done using webapp2 for App Engine and Flask on Heroku. It involved  XML, Javascript and required becoming familiar with a couple APIs. My experience with Plone's Dexterity Framework and even the buildout system was a useful reference point. The system will eventually integrate back into an enterprise Plone deployment AFTER I'm comfortable that the parts all work.

Be an expert in your core

Being able to learn new technology quickly is not an excuse for learning things superficially. For Plone the core includes understanding things like user permissions, roles, content type schemas, browser views, templates and ZCML.

My checklist of Plone fundamentals

  • Page Templates
  • Content Type Schemas with Dexterity
  • Generic Setup Configuration with XML
  • ZCML
  • Browser Views
  • User permissions
  • Roles
Learn these well and you won't regret it.

Be systematic about your development process

My recommended posture would be the same no matter the technology stack. I'll explain them in more detail below:
  • Learn the big picture: learn about the tools available in your toolbox.
  • Trust the blackbox: learn only what you need to know and trust that the other parts just work.
  • Organically absorb the stack. learn new stuff on an as-needed basis.

Learn the big picture

Find out what is available in your toolbox. I recommend these articles: - An overview of what Plone does out of the box - A non-exhaustive summary of the pieces of Plone - Gives a realistic picture of Plone - This is really a table of contents, but gives an idea of what's possible

Trust the blackbox

You don't need to understand the plumbing of your house in order to take a shower, the same is true with Plone. While there's a lot of plumbing going on you need only focus on how to connect your hose to the system. Some personalities find this difficult as they need to understand everything before proceeding but you'll need this approach to become productive quickly.  If you just want to use Plone as it was designed to be used (as a content management application and framework) then just grab some good examples and copy them.

Organically Absorb the stack

As you advance you will begin to discover that you need more parts of the stack. Learn these parts as you need to. Remember you can always dig deeper into more features of Plone and it certainly makes sense if you intend to become a core contributor to the project.

Parting thoughts

In general I've observed a mind-set in the Plone community that aims for systems that are "team scale" (not just "works for me"). In keeping with this idea, I try to follow the following three rules as I develop, (not that I'm following them very well but...):
  • Aim to support iterating quickly 
  • Aim to support deploying reliably 
  • Aim to make your project so well documented and predictable that a knowledgeable Plone developer could pick up from you in less than 30 minute

No comments:

Sign up for my upcoming Plone 5 Book & Video tutorials

plone 5 for newbies book and videos