domingo, 9 de abril de 2017

The Hitchhiker's Guide to the Galaxy Commentary

It is well known for any popular culture fan and geek that the answer to life the universe and everything is, in fact, 42. Even asking google will yield such result in a calculator, because yes, it was indeed a calculated response. However, knowing the answer is one thing, experiencing the journey to reach that answer is a whole other matter.



The book written by Douglas Adams in 1979, originally adapted from a radio show, The Hitchhiker's Guide to the Galaxy, is the tale of a group of oddball and misfit companions, as they are flung together into intergalactic adventures by happenstance and the destruction of planet Earth. This leads to meeting all sorts of wacky characters and hilarious plot points as the reader learns that the galaxy is pretty weird and nonsensical. The strongest aspect of the book is of course, Adams' humor, as it hits that point of being unpredictable, loony, and eccentric without going too far and reaching the so called "lol, so random"  try hard type of comedy. From revealing humans are only the third most intelligent creatures on earth (behind dolphins and mice, of course), and existential whales free-falling alongside a bowl of petunias, every chapter finds a way to surprise and reward readers with out of the box punchlines.



Clearly a classic series for sci-fi and generally odd people who enjoy the humor of tone, The Hitchhiker's Guide to the Galaxy might be one of the best and most digestible series to read. highly recommended. And what about my interpretation of the answer to life, the universe, and everything? I like that theory that it might just be related to ASCII character 42 "*", referring to the wild card used in programming meaning "everything". Life is what you make of it, you can give it meaning.......sadly the version of ASCII with "*" as the 42nd character was agreed upon after the release of The Hitchhiker's Guide to the Galaxy, so who really knows.

domingo, 12 de marzo de 2017

Building Server-Side Web Language Processors Commentary

In the article "Building Server-Side Web Language Processors " written by Ariel Ortiz in 2010, the subject of building a compiler using a web server and client are discussed, as well as the benefits of it as a teaching tool. The concept is a little hard for me to grasp, specially since I've yet again not taken the web design course, or at least, not all of it. However, it is amazing how you can process a web language using the server itself. It seems quite challenging, and it said the article that not all projects were carried out successfully, as generating web language for the web container was particularly hard. Either way the concept is pretty interesting. It is no lie that a compiler can translate from a vast variety of source language to a target, even web language. That would have never crossed my mind.

In recent years, web applications have taken an apparent importance in the world of software development. It's far easier to program something to work in a web explorer than to design an application that may be limited by the environment's resources, such as a computer with its OS or a phone with its limitations. It's quite useful to just put it all in a server and offer it via web, so that accessibility is not an issue. A compiler that basically works online is quite the accomplishment, and while it not only offers such accessibility it is also a great way to combine two subjects from the degree curriculum. However, the limitations are apparent, because students like me would probably suffer twice as hard for poor course selection through the years. Regardless, it is good to know that these compiler design methods can be applied to an even bigger set of languages and that the only limitation to platform or translation is given by one's imagination. Maybe next time they could attempt to make a compiler phone app. It might be fun to try and see people fight against those standard app developing environments.

Source:

Ortiz, A. 2010. "Building Server-Side Web Language Processors". Retrieved 12 March 2017 from: http://webcem01.cem.itesm.mx:8005/publicaciones/weblang.pdf 

domingo, 5 de marzo de 2017

Language Design and Implementation using Ruby and the Interpreter Pattern commentary

In the article "Language Design and Implementation using Ruby and the Interpreter Pattern" written by Ariel Ortiz in 2008, describes the S-expression Interpreter Framework, a powerful tool designed to teach students of the Programming Language course. Once again open source software result in knowledge easy to share and to improve on. Sadly, my comments towards the subjects aren't as rich as they could be since I have not personally taken the course, so my knowledge on the area is extremely limited. However, one can start to see the relation s-expressions have with compilers. Certainly, the Interpreter handles similar problems and methods to solve such problems as a compiler, it must take a certain array of characters with meaning in a language, and to generate usable code for another language. In such a way, the SIF probably uses many of the steps we've been taking to design our own compilers.

The real message that I can clearly take from the article, besides a snippet of a framework that I may use in the future, is that magnificently, when it comes to computers and coding, it's all tightly connected. The knowledge gained in the Compilers design course will inevitably be linked to Programming Languages, because languages are the subject to translate in compilers to begin with. Moreover, understand one will help understanding the other, and may lead to hints on how a framework life SIF is programmed. Additionally, another use of syntax analysis, and scanning using regex, and context free grammars reveal themselves, as building blocks for tools crafted by people who have a vast knowledge of these steps. I am curious to begin the Programming Language course, more than I was before anyways, as my weird mix of subjects might have inadvertently given me an advantage for taking compilers first. Only time will tell, fingers crossed. 

Source:
Ortiz, A. 2008. "Language Design and Implementation using Ruby and the Interpreter Pattern". ACM. Retrieved 5th of March 2017 in: http://webcem01.cem.itesm.mx:8005/publicaciones/sif.pdf 

domingo, 26 de febrero de 2017

Mother of Compilers commentary

In the article “Grace Hopper - The Mother of Cobol” as well as in the documentary “The Queen Of Code”, the feats of the late computer scientist and stereotype breaker Grace Brewster Murray Hopper are told. An inspiring story of a woman who not only was outstanding at her male driven area, but also helped develop some of the most used and advanced software techniques to date, such as compilers. It is incredible to think that the term “bug”, the idea behind compilers, and the programming language Cobol could all have their inception in such a magnificent individual. It is hard to decide which is more impressive, her accomplishments, or the fact that she did it all while being a woman in the field. Similar stories are met with different outcomes, such as Alan Turing’s who was in the end, shunned and mistreated as a result of his sexuality. And while one’s sex might have been perceived a little different in such war times, it is still something to be admired to thrive even when the odds are against you.

She DOES look kinda iconic, there should definitely be more merchandise

It would seem it is always important to have a women’s touch when it comes to science. Who would have suggested writing code in a similar language to English other than a woman who sees beyond the established methods and truly pinpoints the requirements of a group of people? Such people are hardly heard of in our field. It is sad to think people admire Steve Jobs over such an influential woman. Certainly, the ferocity and dedication of such a person should be celebrated, and it brings me joy to think there are events and high esteemed prizes named after Grace Hopper. Hopefully, her story Is motivational for men and woman in computer science alike, so that her legacy and idea live on. Cheers to the original grandmaster dragon slayer, Grace Hopper.


 She might not look like much, but she was basically THE OG Grandmaster Dragon Slayer


Sources:

Historian. 2013.  "The Mother of Cobol". Retrieved 26 of February 2017 in: http://www.i-programmer.info/history/people/294-the-mother-of-cobol.html 

McCann, A. 2015. "The Queen of Code". Retrieved 26 of February 2017 in: http://fivethirtyeight.com/features/the-queen-of-code/ 

domingo, 5 de febrero de 2017

In the podcast “Internals of GCC”, by software Engineering Radio, the PhD student Morgan Deters is interviewed in the subject of the GNU Copiler Collection. Various topics related to de GCC are covered, such as its portability, modularity, and inner workings of registers and the “middle end” of the compiler. One of the interesting topics is code optimization, as it is said that the compiler can identify by itself blocks or code that can’t be logically reached or are not needed, and remove them when translating into target language. There is a high implication that programmers may be able to code in an un-optimized way without really damaging performance, thanks to the compiler, so how much could or should a compiler help programmers? Certainly, since processing power has increased, along with programmer’s cost per hour, it is very attractive to allow programmers to stop worrying about optimizing to the maximum degree, when the computing of such code is not as expensive as their initial pay, and the compiler will be able to optimize it a bit too.  

Optimizing might be a thing of the past (as long as you don't try something silly, like calculating Fibonacci recursively or something)


Furthermore, it would seem GCC is so modular and flexible, that it can run in many architectures and compile many languages, raising the question if it is possible to build a “master compiler”, able to handle and input language and use it to generate machine language. The task sound enormous and difficult by itself, but GCC certainly takes some steps toward being multiplatform and Multilanguage. Maybe in the future a master program will be a reality, allowing programmers to forget about optimization or platforms, and really focus on creating functional code that accomplishes their goal. The inner workings of computation itself are fascinating, and the ability to have programs that generate programs by themselves is already a very powerful property, compilers may be able to take that to another level.

Source:

Arno, 2007. "Episode 61: Internals of GCC". Software Engineering Radio. Retrieved Frebuary 5th 2017 in: http://www.se-radio.net/2007/07/episode-61-internals-of-gcc/ 

viernes, 27 de enero de 2017

The Hundred-Year Language Commentary

In the essay " The Hundred-Year Language", adapted from a 2003 keynote by Paul Graham, the hypothetical idea of a programming language that will be used 100 years from now (almost 85 years from now, actually) is discussed. Concepts such as programming languages evolving and some being left out, either for not being optimal or eventually phaing out, and one of them "evolving" into the language of the future.

The idea is interesting, given that it is true that over the years some languages have been abandoned in the dreaded realm only known as "legacy code", and yet I find it a little bit hard to see the future of computing moving in such direction. Graham hopes and reasons that computing power will be so powerful in the future, that programmers won't have to worry about algorithms that are fully optimized, since resources are so vast. However, I am not completely sure that we'll be using the same kind of computers in 100 (more like 85 since the keynote) years. I do believe that Moore's Law is at its last legs, and soon technology will be forced in another direction. Quantum computing has been and attractive alternative, but even before 2003 physicists and computer scientists thought we would have something more tangible in that area by now.

First image related to "quantum computing". As abstract and hard to picture as the real thing.

EIther way, and regardless of the slow advancement in such areas, I do believe programming as we use it and view it now will change drastically. It certainly should be if we hope to find a way to try and solve those NP problems, since it seems our current method is rather slow. The hundred year language might not even be what we understand and define today as a programming language to begin with, but it hasn't changed that much either in the 14 years from the keynote, so who can really tell? Lets just hope the language of the future isn't harder than making compilers.

Source:

Graham, P. 2003. "The Hundred-Year Language". Author. Retrieved January 28th from: http://paulgraham.com/hundred.html 


sábado, 21 de enero de 2017

Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler*

In the artcile "Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler" written by Saumya Debray in 2002, describes reasons why even when most Computer Science students don't end up working on compiler design, it's  useful skill to have. Additionally, the steps a compiler executes are described and many example of similar problems are mentioned. The main argument being that compilers can be seen as translators, and the techniques used to compile a program are techniques that can be used to translate any set of other elements, not only text.

And so, the value of learning compiler design is more evident. It is true that personally I have never considered compiler design as a big part of my future, but is is gratifying to know the knowledge of such a course can be applied in other creative ways. One wouldn't imagine translating text to a graph would use methods used in compiler design. In a way, it could also be understood that a student's reluctance may reside on the fear of machine language, but when that aspect is removed, the task seems more like a tool and less like a chore to be learned.

A line used by the author is particularly interesting: "students often seem to compartmentalize their knowledge". After some thought, it rings true. Maybe it's the lack of multi subject tasks that can be assigned to a student in such short time, but the fact that each subject is taken as separate from all the other can hurt the expectations of certain topics. 


Compartmentalized doves. They should work together, but it's easier to picture them separately...right? 

Thus, it can be harmful to ignore the skills learned in different subjects or areas just because they are heavily related to one specific process. It's not evident at first glance that translation algorithms use some techniques used by compilers, or that you can easily take a database language and change it to another by using token analysis. In the end, the knowledge is always valuable, and it should not be dismissed by the classic student question "How will this be useful to me?"

Source:
Debray, S. 2002. "Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler". University of Arizona. Consulted January 21st 2017 in: http://webcem01.cem.itesm.mx:8005/s201711/tc3048/making_compiler_design_relevant_for_students.pdf