domingo, 7 de abril de 2019

9th program: Hitchhiker's Guide to the Galaxy


The book series written by British writer and comedian Douglas Adams is one of the best works of fiction that I’ve ever read. I think of myself as a person with a simple and open sense of humor, and yet I had never laughed out loud by anything that was written. I can laugh at jokes when they are told or at funny situations in movies and games, but books were just not my style. Maybe because while reading I would catch glimpses of the lines that followed and I would get the punchline before it was delivered or similar unfortunate events. But that is not the case with The Hitchhiker’s guide to the Galaxy. Throughout all its 300 or so pages, I was hooked and almost cried tears of laughter at several points in the book. This is the second time I’ve read it in 3 years and it still was a blast with tons of jokes and situations that seem timeless.

I think the reasons for this novel to have such and amazing and big cultural effect on people is how it can combine creative technology, events, aliens and settings along with traditional and timeless annoyances of life. Things as simple as bureaucracy, taxes, extreme capitalism, antipathy, depression and general communication problems seem just as funny and relatable whether it means to deal with the government and the restructuring of your house or an entire alien species wanting to destroy the Earth and all its inhabitants for the creation of a galactic highway. While Arthur acts and feels like a stranger in a strange land, learning to cope with everything around him changing, generally for the worse, by just accepting it and not asking too many questions, all of the other characters seem to understand as little of everything as he does, only putting a mask of fake acceptance just to keep appearances, specially Zaphod Beeblobrox.

I think this book has a very important lesson about life (the universe and everything): When everything around you seems strange and that it is out of your control, generally making your existence dreary, the best thing you can do is laugh about it.

domingo, 24 de marzo de 2019

8th program: CLR.jar


While reading this paper, I must admit that I had trouble understanding most of the intermediate codes and all of the different types and instructions available for the CLI. It seems like a mix between several different languages, where I may recognize some things about syntax or indentation from Java or C# and the instructions would seem like they were made for a very intelligent assembly language compiler. I guess that this is the goal of creating an intermediate language and my confusion arises from the fact that I had never worked with the insides of such compilers/architecture such as the JVM. When I first heard of this, I thought that the IC would be a lot closer to the assembly language, but just made for an “abstract machine”. I am happy that my suspicions were wrong.

I really like the idea of using an intermediate platform from where we can talk to any machine we like from any language we fancy by just creating translators for said machine. This obviously results in a lot less specific implementations, which is very good for all developers in general. This implies 2 things: One, designing such an environment was a probably a lot harder than most implementations for specific technologies; Two, this opens up a new market in which compiler artists and language designers can work, generating work for new machines or aiming for portability and compatibility for older languages or technologies.

One thing that is predominant throughout the article is the author’s significant predilection for the CLR over the JVM. I’ve never had the pleasure (or suffering) of working with said platform, but I think the authors can be a bit unfair regarding certain aspects of it. The JVM was made In a time when creating intermediate byte code was a rare event and a lot of people were concentrating more on its freshness rather than how it may evolve, at least that is what I think. 

domingo, 17 de marzo de 2019

7th program: HTTP Compiled


I’ve had the pleasure of using a web-oriented approach when I took the Programming Language Course last semester and I can say that it is a very interesting way of learning about different languages and paradigms while also looking at how to implement the characteristics and features that make them unique in web servers. While it is true that it adds a layer of complexity, most of the class took it as a challenge I think. It certainly is very interesting to think about asynchronous calls while also grasping the use of a functional knowledge such as Clojure. 

The use of web development that the author proposes allows for integration of knowledge while also practicing for a very important skill for professional use, that is, carrying a project through its entire lifecycle, whether it is by starting from scratch or taking an already started project like a kernel. When the aforementioned course was over, I was really impressed by what my classmates and I had created for “Semestre I”.  However, I think there is also a downside to this approach.

This comes in the form of compressing what could be several courses into one. A student might judge certain contents as not as important as others. For example, if a project deals specifically with the syllabus of web programming and some other minor activities for functional programming, he or she might brush those lectures to concentrate on what will give a better score by the end of the semester. Cases like this show the importance of combining all topics and show their relationships. 

A funny case of doing language processors through a server-side web application is how it can light a passion not seen in students since the first semesters of Computer Science/Engineering. When first learning to program, I was completely impressed and almost felt like a god when I created a small buggish version of the game snake.  That same feeling was a bit normalized as I spent more and more time programming. When I began working on the compiler project, I once again felt like that. After all, I was creating a program to create programs. It would be very interesting to see what the next level would be like.

lunes, 11 de marzo de 2019

I ran out of monikers for blog entries number6.cpp


I never had the chance to interact with something similar to the SIF when I took the Programming Language Course last semester. That’s a shame because it seems like a very interesting work tool that enables better comprehension about the way in which one may go about creating a new language or to better understand the basic mechanisms of the functional and imperative programming paradigm. What I also find interesting is how we can skip all the complexity of trying to create a new or feature from a low-level language like assembly or a really verbose one like C and just concentrate on what is really important, like data, semantic and syntax.

Another important aspect of the SIF, at least for me, is how it is based on such a simple pattern like Adapter and how powerful it can be. Even with an OO-Pattern and using and OO-Language we can create a something very similar to Lisp or functional languages in general. This makes me think about the theory of computability as proposed by the Church-Turing Thesis. Copeland (2017) describes any computable method with this hypothesis as one that can be done by a human with sufficient time, no intuition and only using and pencil and paper. This method must also be programmable in a Turing Machine, in the sense that the machine must approach the desired result using only instructions available on a Turing Machine. Since practically all computers in this day and age are Turing Machines with different implementations, we can represent any algorithm using any of those implementations. Meaning, we can compute pretty much everything using any kind of paradigm and represent anything starting from a particular paradigm and “translate” it to another.

I hope that when I work in the near future, I may be able to experiment with the tricks and interesting factors of many languages, maybe even help in creating one myself.

References:
Copeland, J. (2017). The Church-Turing Thesis. Stanford Encyclopedia of Philosophy. Recovered on 11/03/2019 from:  https://plato.stanford.edu/entries/church-turing/

lunes, 18 de febrero de 2019

Generating machine code for entrance5.go


There are many aspects of computer science and history that we are oblivious of. While it is a young discipline when compared to others, it is still full of characters, stories, heroes, discoveries and inventions. One of these heroes is Grace Hopper. Personally, I didn’t know about her or her inventions. I am familiar with COBOL and had the understanding that it had been solely developed by IBM as a business opportunity for business clients. It’s nice to know the actual origins of a thing such as a programming language and find story with a human soul and intention behind it. I also think her general work and goal about bringing common people closer to computers is very admirable, worthy of someone being a role model at least.

From my personal experience, most people don’t like to code or have no particular interest in the area of programming or computer science, either because they think it is too difficult or because they don’t really care how computers actually work. Yet, it is incredibly accessible to learn or begin in these areas of expertise, many people having them as tools for their jobs or even as a hobby. One just needs to pick a book on CS, take courses on virtually any programming language online to, eventually, get into one of the many jobs out there that require coding. This accessibility can be attributed to the Queen of Code. One could even say that the industry boomed all thanks to her and the invention of the language that most banks still use today. In fact, I would not be studying this career right now if I noticed how easy it seemed to make the computer just do stuff by writing words.

She definitely deserves to be a role model for women and everyone, as a case of how much can one person accomplish and how many people can she affect during (and after) her lifetime.