Hi,

when we forked Pharo back in the days (2008) one of the primary goals of Pharo 
was and still is to provide a CLEAN SYSTEM. 

Now after nearly 10 years we have done already an amazing job. But we are still 
not there. 

While it is a good thing that we rewrite parts of the image, work on bootstrap 
and new shiny tools I unfortunately see the 
effect that even some newly written code has flaws or is not meeting some basic 
quality standards like:

 - having class comments
 - no uncategorized methods anymore
 - not having unused temps or unused instance variables 
 - tests in a separate package than the code (to be able to have minified 
versions without tests)
 - class instance variable naming in lowercase
 - ...

Meanwhile in Pharo 6 and 7 there are nice tools inside to check your code. So 
USE THEM. 

Some of you have already seen that I continue to do more and more of such 
cleanups in the system in various Pharo 7 
contributions. Believe me: this is a boring task and one can earn much more 
applause for other nice and more amazing 
contributions - but the dirty job needs to be done to clean up the house. 

I also started to integrate some more "Release Tests" to make sure the things 
cleaned now stay clean over time and 
is not violated again by new Pull requests or new package inclusions. 

Because some of these cleanups were already done in Pharo 5 and 6 - but 
violated again by new contributions we now need
to enforce that the image stays at that qualit level. Because I do not want to 
waste my time to do it over and over again!

See package "ReleaseTests" or code like

 ProperMethodCategorizationTest, ProperlyImplementedClassesTest, 
#testAllClassInstanceVariablesStartLowercase and other

which was written to ensure we not only GET better but also STAY better in the 
future. Thanks to Pavel, Marcus, Esteban 
and others for reviewing and integrating.

Still there is a long journey in front of us, some examples:

   1. Unused Temps 

         CompiledMethod allInstances select: [:m | m ast temporaries 
anySatisfy: [:x | x binding isUnused ]].  => over 200 still

   2. Uncategorized methods
   
         Object allSubclasses select: [:each | (each selectorsInProtocol: 
Protocol unclassified) notEmpty ]    => over 200 still

   3. Many many more uncommented classes. We need a special reminder to people 
who can write many code lines a day but 
      are not able to spend a minute to write a class comment.  

   4. ...

One person will require too much time ... several contributors helping with one 
contribution a day or a week will already change 
the game and make it possible again. Why not have a clean base image meeting 
basic criterias by the end of the year 2017 and 
ensuring with tests that we continue clean in 2018?

Would'nt this be a nice birthday present to Pharos 10 years anniversary in 2018?

How can you help:
=================

  a) you can check you own packages using the provided quality tools and before 
you integrate new features just cleanup your code
     first

  b) even as beginners you can help cleaning up such easy things and with 
simple cleanup pull requests help moving Pharo 7 forward

  c) you can think of other short snippets that reveal design or code flaws and 
post them here 
     Then we can fix these in the image too and have the rules  enforced using 
a separate release test

  d) lets discuss and define quality criterias and note them somewhere

  e) ideally you can reveal problems, open bugs, clean them up and then write 
Release tests to ensure we stay clean
  

We should and need to definitely raise the bar. I would even be more radical to 
enforce more quality:

 - in the worst case we should not accept contributions or put new versions of 
packages into the image
   when they do not meet basic criterias, that is the idea of the release tests

 - if parts of the community are not seeing this as a necessity then in the 
worst case we need to fork Pharo again
   into another next level CLEANED UP system ;) 


So PLEASE HELP!!! Otherwise this will KILL US and it also will be and ENDLESS 
journey for a few people to try to clean the house. 
So PLEASE HELP before you work on the next shiny feature that might still 
violates the basics making this an impossible journey for others
to move forward on that frontier.

Bye
T.

Reply via email to