domingo, 29 de septiembre de 2019

Blog 2-1: Pair Programming

Since I first start programming, I thought that pair programming was a really bad choice to develop a project or a homework because the format of someone is reviewing the code while the other is writing the code was an activity for losing time.

However, at my second semester of the career I enter in a team for programming competitions. These programming competitions format was pretty similar to the Pair Programming philosophy, because you can only use one computer during the whole competition. So, these competitions were my first approach to the pair programming philosophy, and I like a lot. In the article mentions that first the programmers often put resistance of changing their methods of development, but its transition to Pair Programming were easy enough.

In my case, there are a lot of improvement areas. First, I have the mental condition that often I think that I am a bad programmer and that the only thing that I do is delay my partner and like they said in the paper when you think a lot of something in particular your brain has the power to make it true. The funny thing is that sometimes I think this and sometimes I do not.

In second place, I have the terrible bad habit of taking things seriously and sometimes this is a very bad thing because the work atmosphere becomes a little bit unbearable and the enjoinment of working in pairs got lost.

Nevertheless, I think that Pair Programming is one of the best practices that exists to develop software. I really think that two minds working on a solution will always be better than one mind solving a problem; another feature of Pair Programming is the capacity of detection of bugs within a program.

In conclusion, I think that is necessary to show this method of developing to the future programmers in the school with the intention of showing them that working in pairs or in teams is good enough and to accustom them to program in pairs.

martes, 17 de septiembre de 2019

Blog 1-5: Rich Hickey on Clojure

Rich Hickey is the creator of the programming Language Clojure, he defines that Clojure is a dynamic language for the JVM (Java Virtual Machine). For traditional LISP programs were basically a set of nested lists, but for Clojure there were several other data structures that have the same first-class status (vectors and maps or also named hash maps).

LISP do not go mainstream because LISP was not defined to be a mainstream language this type of languages were used for the research topics and Artificial Intelligence. A very important aspect that LISP manages is that the MACROS are little programs that executes its scope on compilation time, with this in mind Clojure programs its programs. Rich Hickey says that the fact of having the opportunity of using the Java libraries is a feature that Clojure has over any other traditional LISPs languages.

It is important to remark that Clojure has more and different data structures than traditional LISP that only has de list data structures. Clojure was a programming language targeted to any open mind programmer working with a LISP with the particularity of having fun developing.

When we talk about simplicity on LIPS or in this case, Clojure it depends totally of the point of view and the familiarity of each person. Clojure has two primarily differences when we compare it with any other traditional LISP: first, in traditional LISP the core data structures are mutable in Clojure all of its data structures are immutable; second, Clojure API is design built upon abstractions, while in traditional LISP it uses libraries specifically for the data structure that it is being used. Also, it is important to mention that Clojure is a compiled language not an interpreted language.

Last but no least, the immutability Clojure feature has a very interesting impact, because when all your data structures and your data is immutable know you are able to remove all the locks of that data with the security that the data will never be corrupted. Taking a look back to Operating Systems, when two different processes tries to access the same file or data (one process for reading and another for writing) this will leads us to corruption of the file. So Clojure feature of immutability gives us the chance of removing all possible locks of the data or files.

lunes, 9 de septiembre de 2019

Blog 1-4: Dick Gabriel on Lisp (Podcast)


This podcast focuses mainly on covering LISP, a functional programming language that until the recording of the podcast was celebrating its 49 year of existence. Dick Gabriel mentions that the core of LISP is that everything on the language is a function; this means, that takes arguments and returns a value where its computation is based on nesting functions. Also, it is important to mention that the principal data structures that lisp manages are functions and lists.

Before the born of LISP language, the mathematicians, the logicians and the computer scientists where trying to solve a big problem, the computability. They were wondering if it exists a form or a system that could compute anything that could be computed, the best example of this was the Universal Turing Machine that was structured by an infinite tape (cells), a head that reads the content of that tape (more specifically the content of each cell in that infinite tape) and last but no least the program that will move the tape left or right depending on the input given.

As almost all languages LISP has its pros and cons of using it, but it is important to mention that the syntax is both of them, has its pros and cons. The principal con of the LISP syntax is that LISP does not have a structured syntax but its pro is that you do not need to worry for parsing or syntax. The only thing you need to worry about is the expressiveness of what you write.

Other of the kindness of LISP are their generic functions. Dick Gabriel mentions in the podcast that a generic function handles the input given to return next the function that goes with that certain input, for example the function “plus” or the “integer” function both of them figures out what code to run.

Finally, LISP is used primarily in the Artificial Intelligence research, in robotics, etc.; however, when we talk in a commercial way it is still buyable because not all of its implementations are open source.

lunes, 2 de septiembre de 2019

Blog 1-3: The Promises of Functional Programming

As we well know, when we talk about the different ways or approaches that we have we can find different flavors for different users. It goes from programming in assembly languages, object-oriented programming up to functional languages (e. g. LISP and more recently Clojure).

But the real question to ask, is if it is really desirable to start programming on a functional language? Up to now, I cannot answer this question, but I can give you the landscape of the pros and cons of the programming languages.

First of all, we need to keep in mind that the fundamental principle of functional programming is that you realize a computation by composing functions. But the context of this functions is purely mathematic this means, that given a value you pass it to a function to obtain some other value (mapping from input values to output values); however, the most programming languages take functions as a subroutine that returns a value.

Also, we need to clarify that functional programming do not use per se loop cycles, in functional programming we use something called recursion, this is, a function that calls itself directly or indirectly. 

Another of the benefits that functional programming provides you, is the concurrency and parallelism but I agree with the article writer that it is not as simple as you could imagine accomplish this fact also with functional programming. The advantage that you achieve by parallelizing in a functional language is that you do not have the problem of maintaining the data in a coherent state because you do not have to fight with variables or saving information in memory because this is not the functional programming approach.

Finally, nowadays the functional programming has been very popular and used in the scientific research field and it is not very popular for writing real-life programs but with the time I am sure that this will going to change (or maybe not).