It's a well written version of, "our software design was sloppy and our programmers took shortcuts. Therefore language feature X is to blame."<p><pre><code> def findAddress(userId: String): String
What does it do? Are you sure?
Now lets look at another:
def blah(foo: UserId): Address
</code></pre>
What about<p><pre><code> def find_address_of_user( UserID )
</code></pre>
or even better<p><pre><code> class User(Model):
…
address = our_models.AddressModel( … )
</code></pre>
So you can use 'x = user.address' with no need to explicitly map between users and addresses because the mapping is part of your data structure?<p>In some scenarios, Hungarian notation might make sense:<p><pre><code> def user_address(user):
</code></pre>
In Hungarian notation you explicitly state what kind of data is expected, so that you can easily determine if mistakes are being made in the code:<p><pre><code> billing_vcard = contact_vcard(customer.billing_contact)
</code></pre>
as opposed to:<p><pre><code> display_vcard = contact_email(customer.billing_contact)
</code></pre>
Of course, cue the irrational knee-jerk reaction to "Hungarian notation" by people who don't understand what it actually is.<p><pre><code> OO lore has it that pattern matching is evil, and that subtype-polymorphism is the answer to all questions.
</code></pre>
Not the OOD that I've been taught. Polymorphism is a tool, and it is as much the answer to all questions as a screwdriver is the answer to all construction projects.<p>That the author of this piece has found various languages educational in presenting new ways of solving problems (with code smells, data model smells, or sloppy architecture) is the biggest take-home message for me: don't be a "Perl programmer" or a "Scala programmer". Be a software engineer, and make sure you are aware of all the available architecture rules, modelling guides and design patterns that have been developed over the years to make your job easier.<p>Perhaps I'm missing something due to having read through the article too quickly. Please educate me.