Book I’ve read in 2018

I decided to make this post as a summarize of tech books that I’ve read this year, unfortunately this year I only read six technical books and six misc (that I’ll talk shortly at the end).

All these reviews I posted a book review on goodreads, as I started last month I’ve marked all books as “read” today but I’ve read it during the entire year, you can check my profile at Goodreads here that in 2019 I’ll use this social network on the right way, feels free to follow me.

This year I’ve read different kinds of books, because some books I decided to read because of unexpected needs like, the operating systems books I decided to read because I felt curious at university classes, or that I decided to read “Working effectively with legacy code” to improve my knowledge of legacy code and help more at my work. Let’s start each book review.

99 Bottles of OOP

99 Bottles of OOP Cover

You can check this review at Goodreads here.

I don’t have how to not give a five star to Sandi Metz when talking about OOP. This book is a complete book of OOP and if you make the exercise at the beginning of the book it will blow your mind and increase your experience with the book. It’s a good sequel to Practical Object-Oriented Design in Ruby.

I have a love relationship with Sandi Metz books, and this is not an exception, I recommend this book for all programmers, the quality of the lessons about object oriented programming is unparalleled.

If you can, you can buy it at Sandi personal site, just click here.

The Clean Coder

The Clean Coder Cover

You can check this review at Goodreads here.

Robert C. Martin is very famous for the “Clean Code”, on this book he writes about something like one “code of conduct” that every programmer should follow, and It’s very controversial but for me, it’s normal because is his opinion. I didn’t like the book because the entire book sounds like someone telling you a list of conduct rules that you should follow to be a good programmer, it doesn’t mean that you don’t need to follow any rules described, some rules are good and in my opinion you need to follow them (some of them), but I feel worried if someone read it and start following all these rules as if they were all true without wondering about.

One good thing in this book is the real stories that uncle bob writes almost in the entire book, some stories are very interesting and tell a little about the past and the background of the author.

3 stars.

If you can, you can buy it at Amazon, just click here

Arquitetura de Sistemas Operacionais

Check my last posts:

Arquitetura de Sistemas Operacionais Cover

You can check this review at Goodreads here.

This is a Brazilian book and as you can perceive with the title, it is written in Portuguese, but I’ll make a summary in English.

This book is awesome and the translated title is “Operating Systems architecture”, its not a deeply technical book if you compare with Tanenbaum’s books for example, but it works as expected as a starter kit for operating systems, it has many pictures that can help understand the topics. It is basically a summarize of all operating systems without going deep in any “code”. For me, it was a five stars read.

If you can, you can buy it at Amazon, just click here

The C Programming Language

The C Programming Language

You can check this review at Goodreads here.

The C bible, this book nowadays still relevant and can be a good C book for those who are starting or want to remember to program on C language. I don’t recommend it for beginners, I think that there are good books of C programming for beginners that don’t have any background.

If you can, you can buy it at Amazon, just click here.

Working Effectively with Legacy Code

Working Effectively with Legacy Code

You can check this review at Goodreads here.

This book is famous and I think when it was written, it made a lot more sense than nowadays. In most parts, the book treats legacy code only as the project that doesn’t have tests and spend a lot of time telling you how to make changes in small steps and write tests, unfortunately nowadays many developers deals every day with legacy code that have tests and face other kinds of problems like, libs versions, architecture, technical debts, refactoring and much more (The book talks about some problems that I described here, but not in an up-to-date way), the fact that the code “doesn’t have tests” is not the only thing that classifies it as legacy code anymore.

If you’ll read this book, jump to chapter 14.

If they release the second edition of this book, I’ll buy for sure.

If you can, you can buy it at Amazon, just click here

Automate the Boring Stuff with Python

Automate The Boring Stuff With Python Cover

For those who already follow my activities you already know that I’ve read it, and I already have a full review here, at my blog, if you want to check the full review click here

You can check this review at Goodreads here.

5 stars for beginners.

3 stars for programmers who already know how to program in another interpreted programming language like Ruby.

TL;DR: It’s a book recommended for novices, for me, it’s a good book for beginners, but for people who already know how to program in other dynamic and interpreted programming language, I think is not necessary to read this book, go ahead an read something more advanced.

The book is divided into two parts, the first one talks about all the basic things of any programming language like variables, loops, ifs/else and etc. This part is good to understand the basic of python. This part covers all between variables and manipulates text.

The most interesting is the second part when you create a lot of applications to automate boring stuff, but the first part is good to understand and knows the python basic. One thing that I loved on this book is the fact that it has a lot of exercises (with answers) to you train what you learned on the chapter, if you do all the exercises your read will be funnier and you’ll learn much more.

Conclusion: The only bad thing on this book is that this is a simple book for people that already know how to program, but this is not a problem because the book doesn’t say that is something advanced, but even for who already knows how to program, the second part with practical projects can be very good.

If you can, you can buy it at Amazon, just click here

How to Win Friends and Influence People

This is the only non-technical book that I’ll talk about on this post because for me it makes sense and I’ll be short.

How to Win Friends and Influence People Cover

You can check this review at Goodreads here.

A good and classic book of how to deal with people and leadership. The book shows you a lot of real examples and histories, with some obvious things and some not so obvious.

If you can, you can buy it at Amazon, just click here

What’s next?

My focus on 2019 first semester will be compilers and programming languages design, I already bought some books and start reading, I think I’ll make great posts about compilers 🙂

Final thought

If you have any question that I can help you, please ask! Send an email (, pm me on my Twitter or comment on this post!

Follow my blog to get notified every new post:


So, I started to use Vim

Since I started studying programming, I have heard about use Vim to code, but I have always used IDEs such as Visual Studio, CLion, IntelliJ, Eclipse, NetBeans, or text editor like Sublime and Atom (what I’m using in the last two years). When I had a look at vim tutors, or people using vim, I always thought, “That’s is so hard”, “I will never learn this”, “Look at this shortcuts”, “How I start using this?”, but in the last two months a several reasons made me to start learning and using Vim.

Vim is a light and fast text editor

Today almost all text editors like Atom with a tons of Js, sublime text and VS Code just fuck off your computer memory, and I’m not even going to talk about IDEs because anybody knows how much they consume your computer memory (And I’m not a person that is against using IDEs, in some kind of development it is good, like Android development for example).

You can check more on this fantastic post and in this repository.

Vim is a extensible text editor.

Everybody know, you can easily adapt vim for whatever you want to do, you can install the plugins that you want for power up your productivy.

Use everywhere

You can use Vim everywhere, yes, vim is cross-plataform, almost all operating systems supports vim, and others editor like nano no. And plus, you can use vim mode in a lot of editors/IDE’s like, emacs, sublime, xcode, eclipse etc.

Mainly because of these reasons I decided to Start using Vim.

Where did I started?

Like most of the people when I started, I decided to start using an already configurated Vim, like, YADR and The ultimate Vim configuration, these are awesome vim, I tried for few weeks on my personal projects, but when I was using them I felt lost in plugins, navigation, shortcuts and I have spent a lot of time searching on google how to do simple things, searching for understanding what that plugin does.

So I decided to start from zero installing Gvim (you can find the difference between gvim, vim-gtk, etc here) and searching for plugins that I need, the color scheme that I like among others, what happened? I started to like Vim, I started with raw Vim, and as necessary I went on installing my plugins and learned new tricks and shortcuts.

Which plugins have I installed on the beginning? Heres a list of them:

  • ctrlp.vim (I can’t live without ctrl+p command of other text editors, and heres a plugin to do this on vim)
  • nerdtree (The legendary tree explorer)
  • vim-polyglot (Collection of language packs for almost all languages)
  • grep.vim (Searching tool for Vim)
  • vim-rails (I installed this because I’m studyng Rails but its not a “Essencial plugin”)
  • fzd.vim (To use global search (Using the_silver_searcher))

I installed all these plugins using pathogen.vim because I found it more simple.

Finally, I spent less than an hour and already had a Vim to start coding and learning. After a few days I installed some other plugins, but for the start what I have mentioned is enough and Ipretty reccomend this aprproach for everyone that want to start and don’t know where or how to start. With this method you will learn the plugins you’re installing and the shortcut while you are working on your personal projects, and when you feel safe developing using Vim, you can start using it on your job.

If you want, you can watch some vim casts to improve your ability at, it’s very good quality.

If you want, you can find my vimfiles here, and its all documented.


That’s all for today folks, don’t forget to follow my blog and my twitter.

Why should every programmer learn functional programming?

Almost all people on their first contact with programming, starts with imperative languages , like, C/C++, Java, Ruby, C# among many others, I don’t know excatly why, I think almost all professors on colleges and universities teaches them, and when you search on internet “How to start programming”, almost all you find is how to start with some imperative languages, when you search for tutorial and books, or for recomendations, everybody tells you to start with one of them, but it isn’t too bad, if you learn one of them you can easily learn others, like if you understand Java, it’s easy to learn C#. But many people think that’s all and forget to learn other paradigms of computer programming, like functional programming, logical programming etc.

So let’s start with the main topic of this post, I’m not an expert in function programming but I will try to explain the main reasons that convinced me starts studying this. In the course of this text I will give links with references for anyone who wants to know more about this subject.

What’s functional programming?

I will not deeply explain it, beacause anyone can search and find more complex answer, but in summary the definition is:

“Functional programming is one of many others programming paradigms, that concist in writing your programm in terms of functions and other mathematical structures without state changes”

You can read more on the fallowing links that are explaining the difference of functional and imperative programming.

Image Source

So, why did I should learn this

First of all, it’s always good to keep studying and learning new things in order to have new ideas and keep innovating.

Learning functional programming changes the way you think. But, why? Because in your life you have always written codes with imperative languages and you’re thinking imperative, if you learn others paradigms, you will start thinking by other angles, and you can make better solutions for your problems and even innovate them.

A lot of companies around the world have been adopting and using functional languages, here are simple links as examples to check it.

[And if you doubt, remember in 2014 a company named WhatsApp that was made using Erlang was bought by U$16 billion by Facebook

FP has been gaining popularity and if it continues so, soon it will be required in many jobs opportunities.

It’s to hard to learn? What’s next?

This is the first post of a serie that I will made explaining my progress on functional programming and what I have struggled with. On The next post, I will talk about which language I have choosen to study and why.

That’s all for today folks, don’t forget to follow my blog and ask questions if you have any.