miércoles, 25 de enero de 2017

The Hundred-Year Language (Comment)

"What technologies will survive for 100 more years?" is a question that me as a computer science student and many other ask, maybe not in this way but by trying to guess which one will give me most opportunities to find a job or the best paid language outside. No one wants to learn a programming language that cannot land you a job or which its learning curve is to big to create just simple tasks. But how can you really know which one will be still alive if not a single one has ever survived for a hundred years? We are in 2017 and the first programming language that was created was FORTRAN (1957), that gives us a result of 60 years, but wait! FORTRAN is not popular anymore. It was so bad at handling input and output and because of that COBOL was created (1959)1. However, now a days it is in the same box of "not popular anymore".

Some languages as LISP (1958) or C (1972) are still used today. Python (1991), Java (1995), Ruby (1995), Javascript (1995), C# (2000) and others are also used but they were created more recently (You can check a diagram of the programming languages history on this link). Go (2009) and Swift (2014) are not even in this image2. As the essay "The hundred-year language" says, "we should be consciously seeking out situations where we can trade efficiency for even the smallest increase in convenience"3 and that is happening with all the programming languages that come from C. We are having faster machines who can compute languages which are more scalable or easier to program. 

An analogy that comes to my mind is animal evolution and adaptability. There are some that can fly, others that can swim and there are also ones that can run really fast, but this aren't all the abilities which animals can have and they didn't have them since the universe started. I think the same will happen with programming languages, the ones that can adapt better for the future necessities will be the ones that will survive, the rest will end up in the same place as the FORTRAN, COBOL, Algol and so on.

To end this post I would recommend checking the Stack Overflow statistics and also which are the most popular programming languages on Github. Maybe the won't be popular in a hundred years but I'm sure that they are or will be in the next 5 to 10 years.

References:

[1] Ferguson, A. (2000). "A History of Computer Programming Languages." Consulted on Jan 26,
2017 from https://cs.brown.edu/~adf/programming_languages.html

[2] Genealogical Tree of Programming Languages [Image]. Consulted on Jan 25, 2017 from https://upload.wikimedia.org/wikipedia/commons/2/25/Genealogical_tree_of_programming_languages.svg

[3] Graham, P. (2003) "The Hundred-Year Language". Consulted on Jan 24, 2017 from http://www.paulgraham.com/hundred.html


domingo, 22 de enero de 2017

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

As a computer science student on my last semesters I find compilers design really interesting. First of all, I have been creating software all my program and never had an idea how that code is translated to machine code. My laptop is like a black box in which I install a programming language (Java, Python, Ruby, etc.), my professors teach me how to write code and then I compile and run it (It seems like magic!). 

One year ago I had a class in which I had to practice with regular expressions using finite automatas. The exercises that we needed to solve were for example, finding if a text had a phone number or an email. This is a good way to start using them but when I discovered that they are used to read a source file to create machine code it made it more interesting. Thinking in all the code I have written and compiled makes me feel grateful with the people that spent a lot of their time designing those compilers. 

Image: https://imgs.xkcd.com/comics/compiling.png

One of the main things that made it more interesting was to hear my compiler design teacher saying that designing a compiler is like a dragon (Some of the compiler design books have dragons in their covers). Now this course seems like a challenge and it will be incredible to learn how this likeness is represented in real terms. Going through the lexical analysis and parsing, then the syntax analysis, afterwards the semantic analysis and the code generation (which is done typically using a post-order traversal), without forgetting about code optimization which the name sounds intriguing.  

How a compiler optimizes code? this is a question which I hope to solve by taking this course. As the article says, compilers normally treat optimization to make code run faster but now that we have a great amount of embedded systems which doesn't have a lot of memory, optimization seems to change its focus. Learning how this optimization occurs will help me design better tools for any scenario that I find in my way. Maybe I will need to think on new ways to develop them but I am quite sure that this will help. I'm also looking forward to learn about lex, yacc and bison to able to parse things faster.

Image: http://vignette3.wikia.nocookie.net/new-monster/images/a/ac/EUROPEAN_DRAGONS.jpg/revision/latest?cb=20130629102722


References:

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




martes, 10 de enero de 2017

Introduction

Hi! My name is Arturo Avilés.

Expectations about Compiler Design:

As a computer engineering student, I expect this course to give me the tools to learn how a computer compiles a programming language to execute the given instructions. I would also like to learn how small a compiler can be and I also would like to design and create compilers.

Hobbies and Personal Interests:

  • Programming
  • Learning
  • Machine Learning
  • Automation
  • Travel

Books, music, movies, TV programs that I have recently enjoyed:

  • Harry Potter and The Cursed Child (Book)
  • Lord of the Rings (Movies)
  • Strangest Things (TV Serie)