Let me start by saying that any tool that you build should not work against you or your productivity.
While dynamic programming languages like JavaScript, Ruby, and Python are great for beginners with respect to dealing with data types, when you get to big and complex codebases, dynamic programming languages and data types, if not careful, can and will work against you.
After many years working on statically-typed programming languages like Java, more recently I’ve been working with JavaScript, Python and Ruby which are dynamic languages with dynamic types. I’ve recently seen and experienced the pain and wasted time that my team went through due to previous bad approaches (lack of best-practices) to dynamic types (in this case, on Python) on a complex codebase for ETL and Notebooks. Something that should be relatively simple to do, took a very long time, running and debugging to find type issues at runtime. This is opposed to statically-typed programming languages, where you put the tool (the compiler) to work for you and find data type issues early at compile time. It allows you to catch trivial bugs early, and makes the codebase more robust.
I 100% agree with the Shopify engineering when they write:
…we believe that static typing has a lot to offer for Ruby developers, especially when working on big, complex codebases.
The following are some resources on statically typing tools or methods for JavaScript, Ruby, and Python dynamic programming languages that you should consider when working with these dynamic programming languages:
- For JavaScript, use TypeScript static-type checker.
- For Ruby, use Sorbet, a type checker for Ruby built by the Stripe engineering team.
- For Python, Python’s typing module (Python 3.5+) which attempts to provide a way of hinting types. Also, see How to Make Python Statically Typed — The Essential Guide.
/ceo