IDE:
Pycharm professional edition:
- Marvelous support for refactoring: renaming, moving\
- Marvelous support for code testing coverage
- Excellent support for styling (PEP8, PEP308)
- Marking of where code was edited + side bar allowing a really easy navigation through code
- Split edition windows (in case you are editing two very distant locations withing the same file)
- Support for all the file formats I ever have to work with – Excellent integration with git/GitHub
Before I push:
flake8 --select=C --max-complexity 10 myProject
- As a rule of thumb, everything with McCabe complexity over 15 needs to be refactored
- Everything with complexity over 10 needs to be looked into to make sure method is not trying to do too much at once.
- Tells the complementary story of the project complexity and redundance
- In my experience, more easy to read and understand than pylint version
- Allows me to poll together methods that do same things and extract it as a function for better control
Upon push:
- Made me think about how my end users will install it
- Forces me to write unittests wherever possible.
- Unittests + coverage are good: they force me to think about paths that code can be taking and implement proper tests or insert nocoverage statements
- Once implemented, they make testing the code much simpler
Quantified Code.comLandscape.io
- Checks my code for smells and advice consistent with different PEPs.
- Cites sources, so that I don’t have just the verification, but also the spirit behind its introduction
- Sends me an e-mail upon each push telling me if I’ve introduced additional smells or errors upon pushing
- In the end fairly complementary to the tools I already have when it comes to the static analysis’
In addition to all of the above:
Developer Decision log:
- Because I need to have a bird’s eye view of the project, I put all the decisions or decisions to make as I read and/or refactor code there, to make sure I know what is done and what is to do.
- Unlike issues, it is a little bit more in-depth explanation of what is going on, not necessarily to be shown in the docs, nor necessarily worth opening/closing an issue.
What is missing
Profiling tools. I would really like to know how the modifications I introduce to code impact performance, but I don’t think I have yet found a way of doing it other than log everything and profile specific functions when I feel they are being really slow.
On the other premature optimization never brought anything good and a proper structuring of the project would make profiling and optimization easier in the long run.