Early on when I was learning to program, I switched from Pascal to C because I was writing for MacOS and it seemed the direction that Apple’s apis were going in. Not long after that, before I really knew C, I came across Ada and decided to give it a go. Learn Ada was incredibly frustrating. I found it really hard to get my programs accepted by the compiler, it took forever. But, when they compiled, the ran without incident. I felt much more productive in C. I wrote my code and it compiled. Yeah, it segfaulted a ton, but, I felt more productive.
Recently, I’ve been primarily writing clojure and scala. I was a huge fan of Clojure and have written in (not in anger) for a number of years; Scala came about because I’ve been working mostly with someone who prefers it. I was very wary of Scala has it has lots of sharp edges, weird wtf and what not. Recently, I was working on projects in both languages pretty much side by side. It took me a little longer to get my Scala code accepted by the compiler than it did to get my Clojure to compile, but, once it was running, I had far fewer issues with the Scala code.
I’d never thought about my Ada/C experience until 20 years later when I had my Clojure/Scala experience. I wonder know, how things might have been different if I had stuck with Ada instead of committing to C.
I’m currently learning Haskell (again, 3rd time, maybe this time it sticks) and as I struggle to get my code to compile, I think back now to my Ada experience and recent Scala experience and it gives me that little bit of motivation I need to keep going.
Compilers that won’t accept bad code are the best friend you’ll ever have when programming. Stick with it, and maybe give Ada another try after you’re more comfortable with Haskell. you’ll see that both languages take very different approaches to solving the same problem, but a lot of the principles are the same: You should always know what sort of data you’re working with and be able to prove it.