I still remember the heated arguments I'd have with my high school professors about dynamic languages. What do you mean python isn't a real language? What's wrong with you!? Dynamic languages are the coolest thing ever!
Some kids fight about curfews and school rules, I fought about scripting languages being just as "real" as the likes of C and Pascal. That was ten years ago - dynamic languages were all the rage and I just started exploring the world of programming beyond what my mentors laid out in front of me.
Nimble scripting languages sounded like a promised land compared to the musky static languages of yore. No longer would you be forced to think about data types all the time, no longer would your code be littered with the int
and char
and double
of the world, no more stifling constraints on using a variable once it's been defined.
Just a pure expression of thought. Programmer and problem at peace with one another, no angry compiler will get in your way.
The promised land tumbles
Yesterday I realised dynamic languages have jumped the shark. The evidence has been mounting for a while, but yesterday's mishap with Ruby on Rails sealed the deal.
Did you know that Rails environment settings, the ENV
hash, only accepts string settings? I wanted to make a boolean flag. The only solution was to make a string 'false'
, then do a string comparison when needed. There isn't even a native way to cast a string to a boolean.
Programmer left completely to his own devices. Out in the rain. With no chance of escape.
The closest Ruby will let you to casting a string to a boolean is using something like !!'blah'
, but all strings evaluate to true
. Even empty strings.
Useless.
The situation is just as bad in other dynamic languages. JavaScript is particularly famous for its weird handling of data types.
And this, of course, evaluates to the string "fail". (![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]];
— Lagergren (@lagergren) May 23, 2013
Try it. It works.
Part of the code returns undefined
, which is magically transformed into a string, then other parts of the code select particular characters from that string ... the mind reels in disbelief.
I don't want to remember the atrocities I've committed in PHP just to convince it that yes, I do know what I'm doing, yes I do want that variable to behave like it's a particular type.
Python's strong typing at least ensures we can't add a string to an integer, but there's still the odd 5/float(2)
type of hack. Some people suggest going as far as littering your code with assert statements to ensure your team mates can't do stupid things with your functions.
This is the exact opposite of what I was promised as an aspiring 15 year old coder.
Why we wanted dynamic languages in the first place
Dynamic languages promised an ease of development, a sense of thinking about solving the problem instead of worrying about talking to the computer. And the world fell in love.
Instead, dynamic languages delivered a hodgepodge so wibbly-wobbly it always forces you to think about data types, even about the particular quirks of how this particular language handles certain conversions. Always at the worst possible moment. Nothing is true anymore, you can't rely on a single thing; without automated tests you're flying blind, relying on nothing but your raw coding prowess to stave off the always imminent failure.
God forbid one of your team mates does something stupid.
But we did get away from the whole int a
nonsense. And we did get fancy REPL's. And we did get away from the write-compile-run cycle.
But what have the Romans ever done for us!
Static is better now
Here's the thing, though, there is now a whole new class of even awesomer languages - the modern statically strong typed languages.
Scala and Haskell have everything we've always wanted from a dynamic language. You never have to spell out a variable's name, the compiler often knows better than you do anyway, and there is a REPL you can use to prototype things.
But unlike dynamic languages you can rely on everything. All the benefits of static type analysis, most of the benefits of dynamic languages. Hell, you can get rid of the write-compile-run cycle with a simple bash script that compiles your code before running it.
Just remember, static languages are not just C and Java anymore. The world has moved on while we were stuck in the dynamic hell hole for the past ten years.
Continue reading about Dynamic languages have jumped the shark
Semantically similar articles hand-picked by GPT-4
- My language is better than yours
- Why people making compilers are superheroes
- First impressions of Rails as a Javascripter
- 25 lessons from 25 years of coding
- Don't Worry; It's a Compiler Bug
Learned something new?
Read more Software Engineering Lessons from Production
I write articles with real insight into the career and skills of a modern software engineer. "Raw and honest from the heart!" as one reader described them. Fueled by lessons learned over 20 years of building production code for side-projects, small businesses, and hyper growth startups. Both successful and not.
Subscribe below 👇
Software Engineering Lessons from Production
Join Swizec's Newsletter and get insightful emails đź’Ś on mindsets, tactics, and technical skills for your career. Real lessons from building production software. No bullshit.
"Man, love your simple writing! Yours is the only newsletter I open and only blog that I give a fuck to read & scroll till the end. And wow always take away lessons with me. Inspiring! And very relatable. đź‘Ś"
Have a burning question that you think I can answer? Hit me up on twitter and I'll do my best.
Who am I and who do I help? I'm Swizec Teller and I turn coders into engineers with "Raw and honest from the heart!" writing. No bullshit. Real insights into the career and skills of a modern software engineer.
Want to become a true senior engineer? Take ownership, have autonomy, and be a force multiplier on your team. The Senior Engineer Mindset ebook can help 👉 swizec.com/senior-mindset. These are the shifts in mindset that unlocked my career.
Curious about Serverless and the modern backend? Check out Serverless Handbook, for frontend engineers 👉 ServerlessHandbook.dev
Want to Stop copy pasting D3 examples and create data visualizations of your own? Learn how to build scalable dataviz React components your whole team can understand with React for Data Visualization
Want to get my best emails on JavaScript, React, Serverless, Fullstack Web, or Indie Hacking? Check out swizec.com/collections
Did someone amazing share this letter with you? Wonderful! You can sign up for my weekly letters for software engineers on their path to greatness, here: swizec.com/blog
Want to brush up on your modern JavaScript syntax? Check out my interactive cheatsheet: es6cheatsheet.com
By the way, just in case no one has told you it yet today: I love and appreciate you for who you are ❤️