Kuba Werłos
Keep It Complicated Keep Me Employed
One good programmer can easily create two new jobs a year.
I am having trouble understanding this code.
Let's take a look.
Do you see this function? It calls these 13 other functions and has roughly 1000 lines of commented out code in it.
Ah yes, that is the Job Security Design Pattern in action!
the more the merrier
knows very much or does very much
knows very much | ⟶ | LOC, properties, methods |
does very much | ⟶ | cyclomatic complexity |
LOC | CC | ||
---|---|---|---|
1. | giggsey/libphonenumber-for-php/geocoding/data/en/61.php | 42 571 | 1 |
2. | Mpdf\Mpdf | 27 208 | 7 007 |
3. | TCPDF | 24 578 | 4 379 |
4. | voku\helper\UTF8 | 14 013 | 1 426 |
5. | TYPO3\CMS\Core\DataHandling\DataHandler | 9 586 | 1 457 |
6. | PhpOffice\PhpSpreadsheet\Reader\Xls | 7 947 | 1 011 |
7. | ScssPhp\ScssPhp\Compiler | 7 709 | 1 197 |
8. | WordPress/wp-includes/functions.php | 7 403 | 737 |
Profits of not having tests:
open/closed principle
A module should be open for modification.
A module should be closed for extension.
reinventing the wheel
re-implementing (limited) PHP functions
prefer implementing custom solutions over using open source library
overriding methods
big ⟶ complicated
complicated ⟶ advanced
advanced ⟶ smart
Methods | ||
---|---|---|
1. | Carbon\CarbonInterface | 348 |
2. | Magento\Sales\Api\Data\OrderInterface | 274 |
3. | Illuminate\Support\Enumerable | 112 |
4. | Drupal\Core\Form\FormStateInterface | 91 |
5. | Knp\Menu\ItemInterface | 58 |
6. | Doctrine\ORM\Query\TreeWalker | 50 |
7. | Zend\Barcode\Object\ObjectInterface | 47 |
8. | Symfony\Component\Form\FormInterface | 35 |
class InvoicePdf extends FPDF
{
}
new Symfony\Component\Process\Process(/* ... */);
Hundred responsibilities principle |
Untestability |
Redefine the functionality |
Really big interfaces |
You should rely on others |
The number of team members who, if run over by a bus, would put the project in jeopardy.
The bigger the number is, more people are inreprecable in the procject.
Our goal is to descrease the bus factor.
Lack of optimization is the root of all evil.
It is not difficult to know what will be the bottleneck.
Prefer efficiency over simplicity.
Try to cache everything you can.
Magento\Backend\Block\System\Store\Edit\Form\Store
extends Magento\Backend\Block\System\Store\Edit\AbstractForm
extends Magento\Backend\Block\Widget\Form\Generic
extends Magento\Backend\Block\Widget\Form
extends Magento\Backend\Block\Widget
extends Magento\Backend\Block\Template
extends Magento\Framework\View\Element\Template
extends Magento\Framework\View\Element\AbstractBlock
extends Magento\Framework\DataObject
We Enjoy Typing