What does it take to become a software architect?

A matter of responsibilities

Programmers and software engineers are in high demand today. In particular, those programmers who adapt to the new technological challenges and evolve their skills are more likely to grow professionally. A natural career path for experienced engineers to push forward their lifework is transitioning towards a software architect role. In...

Continue reading...

Hermit programmers are dead

Don't call yourself just a programmer anymore

It’s 2021, and the job market has crashed due to a ghastly global pandemic. At the same time, one particular job has taken over an idealized professional place: the computer programmer. They are perceived to be experts who know how to build, fix, and deploy software artifacts. Most of them...

Continue reading...

Replace the disqus commenting system on your blog

GitHub-based open-source alternatives are much better

I started using Disqus in 2018. At that time, it was arguably the leading commenting management system for both small and large websites. Its popularity was well deserved: ubiquitous integration, easy to set up, friendly admin panel, clean comment widget design, excellent spam filters, great content engaging features, etc. Three...

Continue reading...

Book review - The Ph.D. Grind

A tale of perseverance and learning from failure

I recently read the amazing short book titled “The Ph.D. Grind” by Prof. Philip Guo. The book (~100 pages) is a compendium of his memories, written right after finishing his Ph.D. in 2012. I felt ecstatic with such a brilliant masterpiece that I could barely put it down once I...

Continue reading...

The Fork/Join Java framework

Boosting performance through parallelization

The Fork/Join framework makes it easy for Java developers to take advantage of the parallel execution supported by multicore processors. This API was added to the java.util.concurrent package since JDK 7, and it has been improved in subsequent versions of the JDK. It allows the developer to forget about the...

Continue reading...

Use custom LaTeX macros to boost your writing productivity

And forget about these numeric glitches in your document

If you ever use LaTeX to write your research papers or technical reports, then you should know how useful and powerful this tool is. Let me just mention three well-known benefits of using LaTeX: 1) beautiful typeset output (especially when dealing with mathematical notations); 2) consistent handling of references and...

Continue reading...

Enhance your README with asciinema

How to create beautiful terminal recordings that your users will love

Asciinema is an excellent tool for recording and sharing terminal sessions. The project is open-source and available on GitHub. A key feature of asciinema is that it allows the viewer to copy-paste the text from the player itself directly. The result of a terminal recording is an editable text file...

Continue reading...

Dynamic programming

A handful of representative problems solved

Dynamic programming (DP) is one of the most basic and, at the same time, challenging programming paradigms. Some of the best algorithms that I know, such as the Levenshtein distance and DTW are implemented using this paradigm. It consists of simplifying a complicated problem by breaking it down into simpler...

Continue reading...

Shortening the distance between academia and industry

An imperative need of researchers

Research is about solving relevant problems for the best of humanity. However, the relevance of certain problems is a highly subjective matter. Is it relevant to send a human being to Mars? Maybe it is, or maybe not. One thing is for sure: research is expensive. As far as I...

Continue reading...

Empirical software engineering research is harder than you think

Trust me

You are a very talented researcher. Perhaps you come from a favored field, e.g., from the popular machine learning (ML) research community. But now, you have decided to expand your horizons and solve software engineering (SE) problems. Hence, for the next years, you will be working as an empirical SE...

Continue reading...

The Producer-Consumer pattern in Java made easy

An example using BlockingQueue interface

I see the usage of a recurring handy pattern for doing data collection and analysis in software engineering: the producer-consumer pattern. This pattern simplifies the data acquisition (handled by the Producer), and the data post-processing (handled by the Consumer). The Producer collects the data items one at the time and...

Continue reading...

Diversity-driven software debloat

Leveraging the wisdom of multiple coverage tools

For months, I have worked on dynamic debloat of Java artifacts with JDBL. To do so, I need to compile and execute software applications to determine what parts of the compiled application are used when executing it using some workloads. Then, with the collected usage information, I debloat the unused...

Continue reading...

Unix cmd hacks

Boosting automation from the shell

I want to share my personal notes of the edX course Unix Tools: Data, Software and Production Engineering, by Prof. Diomidis Spinellis. I attended this course from March to June, 2020. It was my first MOOC experience. I have to say that I learned a lot in this course, and...

Continue reading...

Recipes for effective academic emailing

A template-based approach

You cannot be a good researchers without being a good communicator. If you are good enough at both, they you may qualify for becoming a supervisor. Being a good academic supervisor is a matter of practice, discipline, and the development of leading skills. Handling tons of emails is the everyday...

Continue reading...

Deploying to Maven Central

A three-steps guide

Maven Central is the de-facto repository for hosting software artifacts that compile to the JVM. In this post, I’ll describe the process of releasing a new artifact in Maven Central following a step-by-step approach. Containing over four million software artifacts, the Maven Central Repository is one of the world’s largest...

Continue reading...

The cuban revolution

My vision

“Es deplorable que se aplauda así a un hombre que esclaviza a su pueblo desde hace más de 40 años, esta solidaridad con el verdugo del pueblo cubano” ― Huber Matos, referring to Fidel Castro in 2003 Recently, a friend of mine kindly requested me for information about Cuba and...

Continue reading...

Vulnerability exploitation

Zip Slip attacks

In today’s ever expanding-open source communities, developers rely heavily on third-party libraries and copy-pasted code from social networks like StackOverflow to accelerate productivity. Such code reuse tendency helps to decrease development time and effort, but also means that vulnerability in shared code (i.e., libraries) gets spread dramatically faster, as occurs...

Continue reading...

The practice of teaching

The ultimate skill to learn

Nobody can deny that teaching is hard. I strongly believe that teaching is one of the most essential skills to learn in this century. Whether you are a junior software developer or a renowned member of a firm, your ability to communicate your knowledge effectively will determine your future success....

Continue reading...

Unnecessary code

Clarifying the concept

After reading the paper “Is Static Analysis Able to Identify Unnecessary Source Code?” about the negative impact of unnecessary code in the software industry, I felt stuck with the many different (but very related) concepts around this topic. One can think that unnecessary code is all code that is not...

Continue reading...

A starting guide to be a good competitive programmer

Because learning is more important than competing

I discovered the world of competitive programming challenges during my first year at university. At that time, I didn’t know much about computer algorithms or even mind sports. However, the idea of learning how to code by myself just using an online judge attracted my attention since the first moment....

Continue reading...

Git fundamentals

The must-know git commands for software developers

“Git proved I could be more than a one-hit wonder” ― Linux Torvalds Git is the standard version-control system for software development. Git was created by Linux Torvals in 2005 to support the development of the Linux kernel. Since then, Git has become an essential tool for both junior and...

Continue reading...

How I beat the IELTS Academic with Just a month of self-training

Personal comments and suggestions

The International English Language Testing System (IELTS) is one of the major English language tests for higher education and immigration in the world. It is jointly managed by the British Council, IELTS Australia, and Cambridge English Language Assessment. IELTS is accepted by most Australian, British, Canadian and New Zealand academic...

Continue reading...