Co do smurf-nameing-convention. Jeśli pozmieniałbym klasy typu BytecodeService, SolidityService na Service ( ale w jakimś pakiecie ) to muszę potem podawać za każdym razem com.smartcontract.solidity.Service.
Np. public Service(com.smartcontract.solidity.Service service, Disassembler disassembler) {
Co więcej, możliwe, że musiałbym tez w ten sposób używać adnotacji ze względu na konflikty nazw np. @org.springframework.stereotype.Service. Myślę, że stąd taka konwencja.
Jeśli zachodzą konflikty nazw, to jasne. Ale pewnie nie w każdym wypadku zachodzą. Zresztą czasem można uniknąć ich nie tyle usuwając generyczny prefiks bez śladu, co zastępując go prefiksem więcej mówiącym o rzeczywistej odpowiedzialności danej klasy. Czyli np. SolidityParser to w takim ujęciu nie Parser - ale SourceCodeParser. (W pakiecie solidity, który definiuje szerszy kontekst całej "rodziny").
Standardowe biblioteki Javy też kierują się taką ekonomiczną zasadą. Np. istnieje java.util.Formatter, ale jest i java.util.logging.Formatter. A nie LoggingFormatter.
Był po angielsku taki dowcip z brodą o sekretarce (albo o sekretarce z brodą, by iść zgodnie z duchem stulecia), co wszystkie dokumenty wpinała do folderu "T". No, bo "the invoices", "the reports" itd. ;) Podobnie wykoncypowali twórcy Windowsa z tą swoją konwencją "My Documents", "My Music", "My Pictures"...