My name is Hugo, and I have a long journey “coding the possible and also the impossible” already behind me. So, I decided to tell my story and adventures using programming languages to touch upon various impressions and learnings but trying not to judge what is better or worst. Tricks, insights, good and bad practices should also be part of the series of posts I am planning. But of course, the direction will be dictated by the passionate coders, hopefully reading my posts.
Every good story starts with an introduction; being so, I will tell my story from the beginning. And for you not being bored, I will skip all the unnecessary details.
The First Steps
This story started in the ’90s in Brazil when one of my favorites things at schools was this wonderful Intel 80286 in the principal’s office. On that machine, during a few minutes a day, I could open the QBasic editor, open’ nibbles.bas’, compile and play. And of course, I was not the only one, maybe being realistic, it was just a few minutes a month. But this gave me a chance to see for the first time a programming language that I did not understand but gave me the curiosity.
A few years later, I remember as it was yesterday, the Xmas of ’94, when I got my first computer, an Intel 80486 with a clock of 33Mhz, a marvelous machine with LEDs. On this computer, I wrote my first lines of code, a batch command-line tool to switch between the games I had installed. You need to remember that I was still a kid at that time.
Years went by, and I did my first real-life adventures with code in automation during my exchange period in Germany. Please, don’t ask me what exactly it was because I don’t remember, and I wasn’t successful in my searches for it. But it helped me realize the vast amount of possibilities a coding could give me.
Where everything started
Back in Brazil in my introductory classes at the university, I started to code in Pascal. Funny language if I think again, but it helped me get clarity on how to write my first algorithm and build an application with it.
Then, I decided to learn C++ while using C for other lectures. C++ was for me at the time the holy grail of the programming languages. Fast and Object-Oriented. I did that by reading the 3rd edition of C++ How to Program by Deitel and Deitel. It helped me a lot to understand some fundamental things besides the language: First, it taught me all the Object-Oriented Programming concepts: Polymorphism, overload, override, and also template programming. These concepts are valid until today. Secondly, everything you do comes with a cost. It sounds like this teenager movies about magic, but it is true. If you need a class instance, you need to instantiate it, take care of it, and later you need to free it up. (I will touch upon memory management in a later post)
Somewhen down the line, I came across Java. Constructors but no Deconstructors. “new Class()” but no “delete the instance.” Suddenly the costs that I just told you about were hidden from myself, but not gone. What a wonder! And it was fast enough for everything I was doing, and also easier to code my problems. It opened my eyes when I understood that the holy grail of the programming languages is not a programming language itself. The mastery of coding is the capability of using the best tool for the problem and also being able to transmit the knowledge you learned, creating a solution using a specific language, to another problem using a different language.
The Ongoing Journey
Talking about disliking something, I never liked Python. Still, during my Ph.D. analyzing genomic data, Python was the only language that could quickly parse my data, solve my math problems, and train my machine learning models at the same time. Before I adopted Python, I had a crazy mixture of C, Java, and R to do the same thing.
One thing I was always sure, no matter the technological mixture, I went for data pipelines on Apache Spark and Scala. Scala is, until today, the girl of my eyes.
Funny times when I needed to code a chat server using Erlang. If you are asking why Erlang or even WTF is Erlang?!? One of the fastest XMPP servers, last time I checked, used by Whatsapp, is implemented in Erlang, and I customized it to add some features to our application. (I will touch upon programming paradigms in a later post)
I also have experience in iOS development using Objective-C and Swift. Even before Apple had open their machine learning and vision API, I was using C/C++ libraries inside the devices for identifying lanes in the streets. In the end, it led me to two challenging years lecturing in a University how to code iOS devices.
Today I am working with a variety of languages, Typescript, Python, Java, Scala, Go, Shell, C, C++, CUDA, you name it. I have lots of fun learning and using them. And the technology I am currently experimenting with is Quantum Computing.
During these long years, I learned somethings for myself, and that is what I would like to share in the first part of my series.
Learn, Learn, Learn and Apply
I guess the most important one for me is: You always need to embrace the chance of learning a new programming language, but you also need to master at least one. Be a Swiss knife, but be sure you have at least one very sharp tool among all others.
How did I do that? First, I never declined a challenge because of the programming language. If someone asks me if I am a Java developer, for example, I tell back I am a software engineer, and I choose the programming language that best fits the problem. Don’t be afraid of a programming language.
Also, whenever I need tools to help me solve a task, I always pick a programming language that matches my needs, but at the same time, I choose a different one to practice and learn.
Choose The Right Tool(s)
I admire people who still code using ‘vi’ or ‘notepad,’ and I like to call them Rambo coders. I am not one of them, and if you don’t need to be one, don’t be one. I use ‘vi’ or ‘notepad’ only if there is no other way.
When I start programming a new programming language, I always do quick research on what is the best development environment available and try to work with it. Nowadays, I have chosen a package from a particular vendor, which I judge to be the best one for me. And you need to find the proper one for you. The single question you need to ask is if the development environment is working for you or if you are working for it. If the answer is the latter, maybe you need to change your choice or become a contributor.
What Are You Trying To Solve?
One thing I hear a lot is: This language is faster than the other. First, we need to define what is fast means. Are we talking about performance, which language can add numbers faster than others? Or which language allows you to get to the project’s finish line more quickly?
If I want fast delivery, I would take Ruby because of Rails, or Go because of HUGO, which I must like just because of the name, but I still need to play with this framework. If I need performance, I will choose compiled programming languages with fewer abstractions, such as C and C++.
Usually, what is needed is a mixture of both fast delivery and performance. For that, you would need to evaluate the programming languages on the table, available supporting libraries, and lastly, your skills.
And remember, a good developer can make everything faster.
Let Your Preferences Go
I like to code everything in camel case, using types, semi-colons, and curly brackets around my if conditions. But this is not a standard for all languages. Let your preferences aside.
While I use a programming language, I use one of the coding styles defined by the community. Here the proper development environment helps you a lot. I try to understand how to structure a project, folders, libraries, and source code by looking into the chosen guideline and some famous packages.
I heard once from a professor that the best coders are the lazy ones. Following this affirmation, everybody had a question mark on their faces. Then he said: “When a lazy coder faces a repeating task, he or she will code his way out of it instead of spending time doing a task over and over again.”
I don’t do repeating tasks.
That was the introduction to my series of posts on programming languages. And I hope you are more open to different programming languages. Don’t be afraid of doing any kind of development, but be sure about your choices and most critically know your capabilities and challenge yourself. I believe knowing a programming language is not the most outstanding skill one could have, but the ability to apply the algorithmic knowledge learned through coding in any upcoming challenge.
What Comes Next
I will post a series of stories talking about my experience in programming languages, starting with C, touching upon my impressions, best and bad practices. Which are your favorite programming languages?
Thanks, Balram Chavan and Stefan Klingelschmitt, for the review.
Feel free to reach out to me at LinkedIn https://www.linkedin.com/in/hugo-wruck-schneider/
About the writer: Dr. Hugo Wruck Schneider
After quite some years of experience in the Industry and in the Academy, technology and programming languages became Hugo’s second tongue. Entrepreneurship was also part of this journey, among successful and also unsuccessful startups. Today, Hugo is entirely focused and driven by challenging software and data engineering problems. Starting with training complex machine learning models and making them production ready, going through the implementation of high available data engineering pipelines, designing and creating high performant algorithms in GPUs for Bioinformatics, and ending with exploring the applications of quantum computing in the bioinformatics field, Hugo is always up to the challenge. Do not hesitate to connect with Hugo on LinkedIn: https://www.linkedin.com/in/hugo-wruck-schneider/