I’m in the midst of learning two new programming languages: Java and Rust.
I’m struggling, and it’s my fault.
At Gremlin, the company I joined a month ago, we use Java for our API service in the backend and Rust for our client, which injects infrastructure failures, and also Rust for our daemon, which communicates with the API.
It’s been a while since I felt this stupid when looking into a new programming language, let alone two that are so radically different.
To be honest, I’m not completely new to either Java or Rust. I wrote some Java Card programs in my first job after university (Java Card is a small Java runtime for running crypto code on SIM cards). That was almost ten years ago. Since then, I’ve made my fair share of jokes about Java, covering topics like software bloat, enterprise readiness, and – of course – desktop updates. Recently, it all came back to bite me when it literally took me days to get started with Eclipse, Gradle, dependency management, and whatnot.
I also have an on-off relationship with Rust, the systems programming language praised for being super fast and super safe. Before Gremlin, I successfully rewrote two of my C tools in Rust. However, I never really learned the language and its myriad of programming concepts. Yes, Rust lets you control almost everything, but as a beginner, it’s also hard to compile anything. As a result, Rust continues to make me look bad. (By the way, compile times are ridiculously slow compared to Go, which I’ve used for the last four years.)
So apparently, I don’t particularly like Java and Rust, and this is just another rant about programming languages? Actually, no, not at all.
Ego is the enemy
Some days ago, I finished reading Ego Is The Enemy by Ryan Holiday. As the title says, the book is devoted to the treacherous nature of ego. It draws on a vast array of stories of people who didn’t let ego control their actions and decisions on their road to success. On the other hand, the book contains just as many tales of individuals who lost the inner battle against ego.
Here are a few of the quotes I highlighted on my Kindle:
If ego is the voice that tells us we’re better than we really are, we can say ego inhibits true success by preventing a direct and honest connection to the world around us.
As success arrives, like it does for a team that has just won a championship, ego begins to toy with our minds and weaken the will that made us win in the first place.
We must […] continue working on what got us here. Because that’s the only thing that will keep us here.
Just because you did something once, doesn’t mean you’ll be able to do it successfully forever. Reversals and regressions are as much a part of the cycle of life as anything else.
The problem is that when we get our identity tied up in our work, we worry that any kind of failure will then say something bad about us as a person.
Daniele Bolelli once gave me a helpful metaphor. He explained that training was like sweeping the floor. Just because we’ve done it once, doesn’t mean the floor is clean forever. Every day the dust comes back. Every day we must sweep.
What in the world has this to do with me learning Java and Rust? Everything.
Being a beginner again
Starting a new gig is a huge decision, in part because you have to learn so many new things and relearn stuff you had long forgotten. Sure, no one can take away your hard-earned experience. However, there are other areas, like programming languages, where you have to start over, where you aren’t an expert (yet).
Being a beginner again is hard. I know it all too well. It can be frustrating. I’m used to producing quality work in a short time span, but projects that took hours now take days. I keep asking my (patient and helpful) coworkers about the most basic things, which often makes me feel outright dumb. Am I too hard on myself? Probably.
Reading Holiday’s brilliant book helped me find the true cause of my struggle: ego. It is my ego that keeps telling me that I’m better than this, that my past performance is a guarantee of future success, that I’m too professional to be playing in the amateur league again.
The truth is I’m all for learning new things. As an engineer, I want to be able to contribute to Gremlin’s codebase. I want to write Java and Rust code that is used in production. And yes, I do seek the uncomfortable. In fact, that’s one of the reasons why I quit my last job.
To that end, I don’t want ego to get in my way. I know I need to discard any preconceived notions about programming languages I’ve never actually used for an extended period (and which are only a means to an end anyway).
Despite the little experience I have at this point, I must admit that Java 8 streams are pretty neat. I like the refactoring and debugging capabilities of modern-day Java IDEs. Rust reminded me of my game hacking days more than any other language. Cargo, Rust’s package manager, is terrific. I’m sure there are many more amazing things to learn – but only if I manage to leave my ego at the door and continue working on what got me here in the first place.
Every day the dust comes back. Every day we must sweep.