Optimizing your resume with LaTeX

    For a long time I’ve had a love-hate relationship with my own resume.

    Like most people, I created my first resume by writing a Microsoft Word document, including any experience and knowledge I could remember. Having no graphic design experience whatsoever, the result was an five-page abomination, every single row of it was a bullet point, listing a tool I knew or a job I had.

    I was brave and/or fool enough to send this… “thing” to a recruiter and she said, to put it mildly, that it was too hard to read. Years later, I had another interview with this same recruiter and she still remembered me thanks to the fact that my resume was so atrocious. This time I sent her a newer resume and she compared both, saying that, at least, I was getting better at writing resumes.

    That experience created in me a slight obsession with creating a better resume each time I had to update it. In turn, my obsession with learning prompted me to update it regularly.

    I started searching for elegant Microsoft Word templates, modifying them and creating my own template exactly like I wanted. This worked fine for a time, but I still had the feeling that I could do better.

    Once I started learning proper practices of version control systems, I realized that I could be using all this new knowledge to improve new versions of the most important document in my career. I also realized that most people do not do this, but it seems to be due to version control systems not entering popular culture yet.

    So, where could I begin? Microsoft Word documents do have some primitive idea of keeping track of versions and comments, but that was not enough for me, specially because I was using LibreOffice to create Word documents.

Enter (and exit) JSON

    Around this time, I started working heavily with JSON and I figured that its shapeless nature could translate well to a resume format.

    As it happens with many software-related ideas, I quickly found out that other people had the same idea and there is already an open source project trying to make it a reality. In this case, it was the JSON Resume project. While this project is very promising, it still does not deliver some important features. For example, the official schema does not provide a section to list certifications, you either list them as “education” or as “awards”, and I do not like either option. The fact that new versions of the official schema appear rarely, convinced me that this project could deliver what I wanted in some years, but not right now.

    Another problem was that, in addition to JSON, I also wanted to have, at least, PDF and HTML versions of the same document. I wanted a write-once-import-to-many flow. While the JSON Resume tool does offer some conversion capabilities, the general results are just not very satisfactory. I wanted much more from what this project could offer at the time.

Enter LaTeX

    With LaTeX, you can create any kind of document. It is specially useful to write complex mathematical formulas and, for that reason alone, it is very popular in academia. In fact, at first I got the idea that you could only write mathematical equations with LaTeX. But, thankfully, I was very wrong.

    Some people have created LaTeX documents that I can only describe as works of art. The amount of freedom LaTeX provides is, at least to my knowledge, simply unparalleled. It allows to create stunningly beautiful documents. Just imagine trying to create something like the following in Microsoft Word:

D. Taraborelli (2008). The Beauty of LATEX. Some rights reserved. cc-by-saD. Taraborelli (2008). The Beauty of LATEX. Some rights reserved. cc-by-sa


Colored Lettrines by Raphink.Colored Lettrines by Raphink.

Steve Seiden's theoretical computer science cheat sheet.Steve Seiden’s theoretical computer science cheat sheet.
LaTeX facsimile of a Bible de Genève, 1564.LaTeX facsimile of a Bible de Genève, 1564.


    LaTeX has a long story, much longer to any of the alternatives I have mentioned so far. It was first released on 1985, so you could say it is pretty mature by now. Its typesetting system, the TeX project, was started in 1978 by Donald Knuth (yes, that Donald Knuth).

    The LaTeX syntax is not as easy to understand as JSON, but it is not too difficult. The limitless potential behind LaTeX makes it worth it to spend a few hours getting the basics. That, in addition to the organization that a version control system delivers, meant that not only I could design my resume, but now I could easily design it, program it, compare it, automate it, store it, and share it.

    The best news was that there are also many LaTeX templates that I could use to start. So, not only I ended up with a resume exactly how I wanted it, but I learned a new skill, which now I can include in the resume itself. I also put my version control skills to good use. I used the YAAC: Another Awesome CV template by Christophe Roger. It is elegant, simple, it has a lot of potential and its code is very well organized. I noticed that it also lacked a certification section but I was able to add it easily by studying his code.

    My new resume in now at my GitHub repository, where I can store it indefinitely and is also available to recruiters. It only took me a few hours from researching about LaTeX until I had a complete document, so this is something that anybody could accomplish quickly and easily. Besides, there is a loyal, helpful and committed LaTeX community which, through the years, has produced many guides, tutorials, and even WYSIWYG editors, so the learning curve is not as hard as it may seem.

    In addition to improving the document further (and having several styles), I want to make a more complete flow of the process. I imagine that in the very near future I will be pushing its new versions to my GitHub repository, a Jenkins job will pick up the new changes, process them and automatically publish my resume in my personal page. I will talk about that in a future post. For now, feel free to take a look at the code, offer some feedback, fork it, create a pull request, send it to your friendly neighborhood recruiter, or do whatever you want with it.