Code beyond borders: My Journey from JavaScript to Assembly and Back
When I was new to my employment at a software company, I found myself amidst a sea of C++ programmers. The common belief is that C++ is significantly more challenging than JavaScript, which led to some friendly challenges from my colleagues. It’s a scenario many can relate to: being the newcomer and needing to prove oneself. The interview was just the beginning; now it was time to demonstrate my skills in practice.
C++ programmers often engage in debugging with a disassembler, a task not as common for JavaScript developers. Generally, it might not seem essential for a JavaScript developer to dive deep into disassemblers. You can indeed have a successful career in web development, and specifically as a JavaScript developer, without ever using a disassembler. However, if you’re like me, curiosity won’t let you stay away. It’s an opportunity to deepen your understanding of computers, offering a new perspective for innovation. Yet, motivating oneself for such tasks can be challenging since we developers are often focused on results for good reasons—delivering solutions is our primary goal. But sometimes, challenges arise in unexpected ways.
Returning to the story about the C++ programmers, one day, a colleague brought me a piece of code. In hindsight, I think he whipped it up as a little test for me. It was a simple program with a simple password protection. I’m no expert in this area, and my solution wasn’t the most efficient. I don’t recall the exact conversation, but I suggested adding a JMP instruction, pointing out other JMP instructions and explaining their functions (like JE, JNE, JGE, JLE). My idea was to jump over the authentication process, which could work in this case since it was all hardcoded, without any authentication servers. My colleague was surprised by my suggestion. Here I was, a JavaScript developer, knowledgeable about JMP instructions in assembly language.
My colleague’s curiosity about my knowledge gave me a chance to share my past experiences with “crackme’s” (essentially, emulating game cracking in a legal and safe way) and how I learned a bit of assembly language through that. This was years ago in my teens, so it wasn’t fresh in my mind, but it showed him that I genuinely cared about programming and had a real interest in computers, just like him. From that day on, he always greeted me in the office, and I had seemingly earned his respect.
My colleagues became more interested in what I did, which was crucial since I was hired to help the company transition from hardware to software, with web applications being key to this shift. Before this incident, my colleagues were indifferent to my work, resistant to change. However, I managed to show them the value of what the future held for the company and that embracing new tools didn’t mean abandoning their passion for computing. I’m not saying they all immediately switched to JavaScript, but I did demonstrate that a JavaScript developer could share their passion for programming.
As an IT consultant, I’m constantly introduced to new companies, teams, and areas, often outside my previous experience. This requires adaptability and creativity. Creativity often stems from divergence. For a JavaScript developer, studying assembler, even at a high level, is a divergence. But through this study, I became interested in compilers, leading me to learn about abstract syntax trees. These concepts are crucial for understanding how transpiling works in JavaScript, what JSX is in React, and the role of webpack.
Don’t confine yourself to preconceived notions. Venture outside your comfort zone and explore. The benefits of such exploration may not always be immediate. I never anticipated that assembler knowledge would earn me the respect of C++ programmers resistant to change. Yet, this experience showed how divergent ideas could lead to convergence. My interest in assemblers led me to compilers, enriching my understanding of React and the tools I use daily. I could have progressed far by treating these as black boxes, but now I comprehend them on a much deeper level, allowing me to approach problems in new ways.
This post was originally written by hand and has been enhanced using artificial intelligence. I hope you find it useful and inspiring. If you have any questions or comments, feel free to reach out to me on X at @SaldesTech. I’d love to hear from you.