Will reading this turn you into a developer?
Well, maybe not immediately, but if you are interested, I’ll try to prod you from a few directions to get you started. I also want to continue to write about the topic, so let’s start this journey together. If you are one of those loc engineers who have considered “serious” coding, please comment or otherwise reach out to me. I’d really like to understand what is holding you back.
Impostor syndrome, and when do you really become a coder?
If you are currently working as a loc engineer, you are probably already doing developer-y things. You are already one of the people that the translators or PMs see as wizards, because you build those freakish regular expressions that solve various problems. You can probably assemble complex configurations to make translation tools correctly parse files for import, and do other things that most of your colleagues could never do without you. (Of course, if you are a “true freelancer”, you are your own PM and engineer, and potentially coder, among other roles. It’s easier here for me to separate these roles in this piece.) Maybe you have built some macros in Excel or Word to automate some manual processes. If this is you, you already have the fundamental abilities to code, and you also should code to advance your career and to become more useful and successful. You may just not yet be convinced that you have it in you. Okay, I don’t want to project too much, but it definitely was the case with me for years actually, and I tend to see similar patterns around me.
I mentioned Office macros above, and I love to point out that if you’ve ever managed to put together anything useful in that ancient bare-bones Visual basic for Application code editor hidden in the Office apps (which has not changed significantly, if at all, for decades), then you can probably get way farther using something more current. Microsoft and the other big tech companies desperately want you and everybody else to succeed as coders: they want the learning curve to be as gentle as possible, and the barrier to entry preferably underground, because one of the key things that can drive profits for software giants like them is making development and developers ever cheaper. So, out of pure interest, they keep working to make development and developer tools as easy, smooth, and productive as possible.
How is a “real coder” different?
You might argue that there is some circularity in my arguments here: if somebody has written complex regular expressions, or an Excel or Word macro, then they have written software code and are in fact coders already. And this is true, and part of my argument. The thing is, if you use are creating a regular expression to isolate some placeholders into tags inside your translation tool, or if you are writing a macro in Excel, for example, then you are limited in two very major ways. First, you are working within the limits of that specific application, and second, you are missing out on a world of amazing tools and extremely wide possibilities available to “real” developers. Just some quick examples, out of the top of my head:
You can literally develop just about anything. A file converter to prepare files for translation, a plugin to extend your translation tool, or a piece of software that makes your translation tool perform certain steps automatically. Or a tool with a user interface to automate an hours-long manual process in Excel, and so on.
In a real development environment, you can debug your code to figure out what is going on if you are stuck, or what is wrong with your syntax or logic. You can stop the code yourself when you need to understand something about its current state, or you can make it stop by itself and assist you when there is an error or something unexpected.
Modern development environments will try to assist you with suggestions to make your coding faster, and your code cleaner, with fewer potential mistakes.
You can have access to an immense variety of software libraries that you can plug into your programs to perform various functions for you without you having to write code for it. For example, I first wrote my own code to read CSV files, until I figured out all the ways that can go wrong. (I wrote about CSV related challenges here.) Then I switched to a fine third-party library maintained by somebody who is a seasoned expert in the topic. I also sometimes need to deal with PO files, and it was much more reasonable to rely on a widely used software library to read and write those files than to roll my own. It’s like calling a professional to solve specialized problems, except that most of the time there are free options, and the professional help is there at the right moment every time your program runs.
With the right tools and depending on the program in question, you may even be able to take a closed source piece of software and translate it back to readable source code. (However, this might not be legal for all purposes, especially if you go had the idea to use the resulting code in your software.) But it’s a coding related skill that is surprisingly easy to learn and use nowadays. I’ve used it to troubleshoot some problems with proprietary software that would have been very complex or maybe impossible to solve otherwise.
You can upload all your code and all your changes to some source control system like GitHub to easily track all your changes, or undo them as needed, or to have different “branches” of a piece of code. With each change, you will be able to easily see what changed, when, and why (if you leave the right notes). This might make sense when you need two or more different versions of your custom program, because of different incompatible versions of a piece of software it needs to co-exist with. And, of course, it is the best method to share your code with others, when you are confident enough.
The promise
Besides accepting that you are capable, another thing that can seriously help is finding the right motivation. What you can potentially achieve by turning into a localization coder is stunning, and I’ll try to give some easy examples to prove that. One of the main functions of localization engineering is to solve problems with translatable files. Some files just won’t import into the translation tool, or not correctly. Or they may import, but in a way that makes a translation team’s work so inefficient that it is not sustainable or even bearable. So, the translation team comes to you, they explain their challenges, and you figure out some specific changes you need to make to the files to fix the problem. This is a huge step ahead, even without coding: the loc engineer may figure out and document either some series of manual steps, or maybe even write some sort of macro or script to pre-process the files. Many loc engineers have done this a number of times successfully, but the pre-processing before translation (and the likely post-processing after translation to undo the changes for delivery) still required some manual steps. Either the loc engineer gave the translation team a tool and some instructions to perform the pre- and post-processing, or the team came to the engineer for help every time they needed to start working on some new files, or deliver their work.
It's nice to feel actively useful that way as an engineer, but there is still a huge leap forward you can make from here. What if you could develop a pair of pre-processing and post-processing tools, and you could integrate them right into your translation tool? And then a PM could just drop those impossible files into the project, and see the file automagically pre-processed by your code without any manual interaction? And, when the PM exports the file for delivery, have the files converted back to the original impossible format, again without any manual work by anybody? How awesome does that sound? At least in memoq (and probably also in some other modern tools), this is achievable, if you can develop the right software tools. And I will argue that it isn’t actually very difficult to do. Not for somebody like you, who already has the right skills.
Another thing I like to use as an example is that by turning into a localization coder, you can literally improve other people’s lives in immense ways. One time I had to work with a bright PM who was cursed with some very complex customer requirements regarding some crazy Excel files. She was forced to spend extreme amounts of time preparing Excel files for translation over and over. After gaining a high-level understanding of the problems, I told her that we can most probably automate just about all of it, if she can explain to me all the details of her manual processes exactly. I’ve probably never met anyone who was so clear and efficient in explaining what they needed. Then I disappeared for a few weeks to work on it. In the last few weeks, we met weekly so that I could show what I’ve done, and she could explain the details she still needed me to iron out. And we eventually got there: there was the final custom software tool in her hands that made her work magnitudes faster, making all the mindless steps automated. And then she said something like this: “I’ll never get back those months of my life that I’ve wasted, but that’s over.” It was quite moving, one of the most heartfelt moments in my career. It was also reassuring to see the estimates about how many thousands of euros her team could save every year by using the shiny new tool I gave them. But the best thing to remember is how many other useful and more fun things she could spend her time with instead of the endless manual Excel taming.
Find your project, and listen
I’m sure that not everyone is like me in this regard, but the only thing that can really motivate me to learn is a task to carry out. After secondary school, I dropped out of three different universities in no time at all, and I’m mostly unable to read books to learn something, or finish an online course, and so on. Just about everything I’ve learned about development I’ve learned by doing, having some specific goal, and figuring out how to get there, step by step. Again, you might be different, but I still believe that if you have the basic abilities (which I think you do) the best motivation you can get is a project. Again, if you are in loc engineering, you probably regularly encounter some problematic files to import into your translation tool, which need pre-processing and post-processing. So, it looks like the perfect start. Pick a case that looks doable.
Another thing that can immensely help, but is not guaranteed for all of us, is having somebody around who is significantly ahead of you and learning from them. It doesn’t have to be active mentoring; you can also go very far by just “following” them. Read not just their code, but their words too. See how they communicate to understand problems or explain their solutions. Hopefully, there are functional open communication channels in place where you work, so you don’t need to physically stalk the person you can learn from, you can get there by simply reading, listening and making good use of the opportunities when you can talk to them. Argue with them, present your cases and ideas, and don’t be discouraged or offended when they turn out to be smarter than you, because they will, repeatedly. I’ve been lucky enough to have some extremely smart people around me, including some arguable bona fide geniuses.
The choices of coding languages and dev tools are not that relevant
There are countless religious debates about which language and which development platform or environment is the best for you to get started, or to help you go far. I would say this isn’t actually very important. Choose .NET and C# and Visual Studio if you want to learn any coding from me directly, because these are my choices. But I don’t insist at all that my choices are superior. Others strongly prefer Python or something else. Generally, if you choose something mainstream, it will be quite good for you: as I said, the people behind these languages and tools really want you to succeed, and continually invest in making the ride as smooth for you as possible. Many of the skills you’ll learn will be applicable in other languages and other dev tools too. If at some point you find that you need another language or another dev tool to solve a particular problem, you will be able to switch. Don’t worry about this, just get down to work. For languages, Python and C# are the two choices I’ve encountered most frequently in localization related development, and both have awesome dev tools and an abundance of wonderful third-party libraries. As I said, I went with C# and I’ve never felt it was limiting me in any way, but others swear by Python. And then again, you might become efficient in some other language. If you have a Mac, it’s probably best to start with Apple’s own developer tools and languages.
So, how hard is it to start coding today?
To show you some of the very first steps with a programming language, developers like to show you the code for a “Hello, World” program written in that language. It is just a piece of code that simply writes “Hello, World” as output when the program is run in a command-line window. For the last few years, a minimal “Hello, World” in .NET and C# has been just this single line:
Console.WriteLine(“Hello, World”);
Now, I don’t want to explain C# syntax here, there are countless places where it is explained better than I probably ever could. I just want to show that there’s minimal extra “fluff” to learn and write to let you get started with your first working C# program. A few years ago, a minimal C# program like this would consist of many more lines, which required the understanding of several programming concepts.
Or you can write a single line to find all *.txt files in a folder and create a list of them, so that you can make changes to all of them in the next steps. That would look something like this:
string[] files = Directory.GetFiles("c:\\work\\folder_with_the_files", "*.txt");
The funny thing is, the last time a Python enthusiast wanted to convert me, he came up with very similar examples to the above, saying “look how easy and efficient it is to do X in Python”. And I was nodding happily, “oh yes, I know, and I do the exact same things daily, with the exact same ease in C#”.
One of your best friends in coding will be the questions & answers site called Stack Overflow. Whenever you are stuck in coding, if you are able to come up with good google search keywords for what you want to do, you will inevitably land there from one of the top google search hits, and you will most likely find the right answer. Or you can use some AI assistant for coding to get similar results right in your code editor window, which somehow hasn’t really grown on me yet.
In the future, I’ll write more posts about actually coding pre- and post-processing tools and other ways to make use of coding in localization. It’s an interesting challenge because I really want to avoid explaining coding and C# basics, and would rather focus on solving localization specific problems by coding. I can’t promise I’ll be able to solve this chicken and egg problem, but maybe I’ll be able to motivate some people to learn coding to enhance their loc engineering toolsets dramatically.
This has been a great read! Being stuck on that exact edge from loc engineer to coder, fighting my imposter and also waiting not yet looking for THAT project to kick things off… this is very inspiring.
Hi Gergely, please keep writing about this, it definitely speaks to me! I did a web development course a few years ago and everything was good until we got to the JavaScript part...I struggled so much that I thought maybe coding is not "my thing". Maybe I just needed a little more patience. I'm currently very happy troubleshooting translation issues involving tags and creating parsers for XML, HTML, and JSON files among others. I also find the low-code tools fascinating. I work with software developers and more technically minded people, and I get frustrated when they start talking about things I don't fully understand. There's so much to learn and so little time :).