lunes, 4 de noviembre de 2019

Blog 2-4: Language as the "Ultimate Weapon"


When I finish reading 1984 written by George Orwell I thought about all the connotations of controlling the language and controlling the history. First, it is important to stablish that the person that controls the language controls the people.

In the reading, the author talks about some topics that if you think about them you can see all the danger that these topics carry with them. In the actual years, we can see a lot how the media and the companies that work on advertisements controls the language and predispose us to do something or another thing that they want.

Explaining the last idea, think about this, the infomercials of the open T.V are the best example because this kind of commercials suggest people that they really need the thing that they are selling. Another example of this is how Donald Trump or AMLO became presidents of their countries.

The language in politics covers the same patterns, they promise the voters that things will be better in their government. The way they speak controls and brainwashes the voters, specially the people that does not have (for one reason or another) the real information of something or another.

But it is extremely difficult to manage the language that way, that’s why language it is a complete career that require a lot of intelligence and specially creativity to actually control the language in a very good way that enables you to control people’s thoughts or people’s actions. Like the thing that happen with Facebook and Cambridge Analytica. 
 
Finally, nowadays all the professionals need to know how to talk and manage the language properly to sell yourself to the future corporation where you will work, because if you do not know how to do this, it will be so difficult to that person to find a job and be selected in the interview process.

domingo, 13 de octubre de 2019

Blog 2-3: The Secret History Of Women in Coding

When we talk about computer science, it is awful that sexism, racism and this kind of topics came in. Men and woman are equal in all sort of things, specifically in the ability of solving and thinking solutions to mathematical problems or programming problems.

This article shows us that in the beginning, coders were mostly women because of the maleness of the epoch. But thanks to all the woman that participate as coders we are where we are. Thanks to all that women working hard every day and every night we are here now.

Historically the idea of women treating with computers and coding was common, but when computers gained popularity this idea change drastically. First this kind of things was only (or mostly) for women, with the arrive of personal computers, coding and treat with computers were mostly for men.

This goes so on and so on, in my opinion I think that we need to take out the stupid idea of programming is only for one gender when it is for any gender, any people who wants to develop its life in this topic. In the career this thing it is a little bit notorious, there are more men than women studying computer science (at least on my semester there are only 3 women).

If you ask me, I think that it is time to let go all the stereotypes of our career, that its only for men, that its only for people that are introverts or people that loves anime. It is a career for all people that wants to study this. Also, we need to contribute with our grain of sand and make a better world for all people. Finally, I hope that in the future could be 50% of women and men in the career and collaborate in constructing and excellent inclusive community.

martes, 8 de octubre de 2019

Blog 2-2: Roots of Lisp

As we know, John McCarthy build a whole programming language, the name of that language is Lisp, but why it is call Lisp; Lips stands for, List Processing. The reason it is call Lisp it is because one of its key ideas was to use a simple fata structure called list for both, code and data.

In our course of Programming Languages, we are seeing a flavor of Lisp but not Lisp per se. Clojure is a functional programming that has its bases in the Lisp definition. Nevertheless, Clojure is more understandable than Lisp. In the next lines I will explain why I think this.

Lisp has seven primitive operators where we can find the following ones:
·      Atom: sequence of letters, or a list of zero or more expressions.
·      Quote: it returns x, in Clojure and Lisp it has a macro to express the same thing by only using the char “ ‘ “.
·      Eq: verifies if the two arguments are atoms or lists.
·      Car: returns the first element of the given list (in Clojure this function is first).
·      Cdr: returns the list without the first element of the given list (in Clojure this function is rest).
·      Cons: adds the element x to the beginning of the list.
·      Cond: it is a conditional that evaluates the expressions given.

In the next pages of the paper the author explains the different ways of how you can denote functions and all the related stuff for this subject. Nevertheless, Clojure is miles away simpler and readable than the common Lisp at least when we talk about functions, because I did not understand a thing of the function definition.


However, I agree with the author that the functional programming languages are the future of the developing because of all the features that functional programming haves, like the immutability of the data or the data persistency. Finally, it is not simple to understand Lisp or Clojure but if you dedicate some time to study the language you will find it funny and powerfull.

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).