miércoles, 27 de marzo de 2019

Language as the Ultimate Weapon

After reading the article written by Jem Berkes who emphasizes the importance and influence of the language in society's lives, we can answer an interesting question that will allow us to understand better the reading of 1984 and how it is helpful for the course. The question we are about to answer is the following: Why is the Nineteen Eighty-Four novel by George Orwell relevant to a student taking the Programming Language course?

Since the beginning of the times, language has been an important tool used by humans to communicate, creating different ways to transmit ideas, etc. this has allowed them to evolve. Creating a language is not as easy as it may look like. A language has a structure, symbols, syntax, semantics, and some other things which are proper from a language and people who understand them can understand that language. This happens too with programming languages, each programming language has its own symbols, structure, and syntax which allow people to understand it. 

But what happens when there are many languages with different symbols, syntax, and structure? Here is when it is desirable to create some standards for programming languages. These standards will allow people to understand the code and be able to solve the problem with the language they use the most. 

But, why do they say that a language is the ultimate weapon? It is the ultimate weapon for humanity because, with the correct usage of a language, many problems can be solved, in politics, with language a conflict between countries can be stopped. Let's take a look at the novel 1984 if we remember the government had control of the language and communications, but we can see the importance of a language in a society if the government had no control of it people will live in a different and better way. 

That's why many people fight for the language freedom, cause people can fight for their rights, for injustice, and many other things with it, that's why language is the ultimate weapon.

References: 

- Berkes Jem (2000). Language as the ‘Ultimate Weapon’ in Nineteen Eighty-Four. Available on: http://webcem01.cem.itesm.mx:8005/s201813/tc2006/language_ultimate_weapon.html

- Orwell George (1949). Nineteen Eighty-Four. Available on: https://www.planetebook.com/free-ebooks/1984.pdf

miércoles, 20 de marzo de 2019

Pair Programming

This blog entry will discuss this week's reading, a topic which I consider an interesting practice for our major, Pair Programming. We should start by defining what is Pair Programming, this is a practice in which two programmers work side-by-side at one computer, collaborating on the same design, algorithm, code or test. This practice helps to improve productivity and the quality of software products.  It also helps programmers to create confidence in their solutions. 

Many programmers refuse to start practicing pair programming, but in many cases, it is very used, a clear example is Extreme Programming. In Extreme Programming (an emerging software development methodology) all the code is written in pairs. For many methodologies, it is required gathering, resource allocation, and design practices. When there is no formal design or planned architecture in a project, the pair determines which code needs to be added or modified. 

It is important for Pair Programming to use collective code ownership whereby any programming pairs can modify or add to any code in the code base, no matter who the original programmer is. In Extreme Programming, the success has made through the use of pair programming by all programmers, also the prototypes are done with a partner. Two programmers working together are more than twice as fast and think of more than twice as many solutions to a problem as two working alone. 

I think that as a programmer you should learn to program in a single or in pairs, they are both important but it is more important to learn to pair programming because a pair works and shares ideas together for software development. The transition to pair programming might be a little rude, but you should start by understanding the benefits of intercommunication, then you must share the work. Finally, pair programmers must accept the ownership of their work. It might be difficult, but there will be awesome results at the end. 

References: 

Williams, L., & Kessler, R. (2000, May). All I Really Need to Know about Pair Programming I Learned In Kindergarten. Retrieved from http://34.212.143.74/s201911/tc2006/pair_programming_kindergarten.pdf

miércoles, 13 de marzo de 2019

The Secret History of Women in Coding

After reading the article "The Secret History of Women in Coding",  I found many interesting things that I would like to discuss through this blog entry. It is well known that most of the times engineerings are dominated by men and many people have the wrong idea that men are the only one who is good at engineerings, especially in computer engineerings. Of course, this idea is totally wrong, many of the technologies innovations were created by women. 

In this article, the story of Mary Allen Wilkes is explained, in the beginning, she had no idea that she wanted to be a programmer, she went to MIT where she was hired in a programmer job. Even though she was not an expert in the area, she checked her code lines whenever there was a mistake to deduce it, checking every line in her head analyzing how the machine will execute it. Not many persons have the ability to check the code, analyze it and rewrite again completely, but she did. 

As I have said, women have been an important part of computer science, as a clear example, during World War II, women operated some of the first computational machines used for code breaking. 

There have been many cases of discrimination for women in this sector, many women that are part of very important teams inside big tech companies suffer from this, sometimes they are ignored or men repeat their ideas as if they were of them. I consider that it doesn't matter what gender you are, what sexual orientation you have, what race you are if you have disabilities or not, I consider that every person is good at something, maybe not everybody is good at programming but I do consider that we are all good at something and we are all valuable. I am really surprised that nowadays there are many women interested in computer engineerings, I am sure that they can change the world. 

- References: 

Thompson, C. (2019, February 13). The Secret History of Women in Coding. Retrieved from https://www.nytimes.com/2019/02/13/magazine/women-coding-computer-programming.html

sábado, 23 de febrero de 2019

The Roots of Lisp

After reading Paul Graham "The Roots of Lisp", I realized that there is a lot of information and knowledge that I still have to learn. Starting with John McCarthy's paper showing that with some simple operators and notation for functions you can create a programming language, which he named LISP (List Processing), I must say that I had no idea of the origin of the name, but thanks to the reading I understood that this name is because it uses a simple data structure (list) for code and data. 

McCarthy's discovery changed the way the programming languages were created, with Lisp created, now there were two models of programming: C model and Lips model. The evolution in computer's performance and hardware has made that the new programming languages move to the Lisp model. 

Graham explains some important terms that McCarthy created, starting with an expression which is also an atom and made by a sequence of letters or a list of zero or more expressions separated by whitespace and enclosed by parentheses. These expressions go together with 7 different operators which are the base for Lisp programs, these operators are: quote, atom, eq, car, cdr, cons and cond. 

Graham also talks about how Lisp functions' origin and how they are expressed. Functions in Lisp are expressed as lambda with parameters and an expression, functions are evaluated through a function call and with this, the expressions are evaluated. There are different types of functions that are created with the 7 operators. Functions can also concatenate lists, substitute expressions, etc. but the main thing is that there are functions that take any Lisp expression as an argument and return the value. 

I can say that I've enjoyed this reading, finding out about Lisp origins and how the functions, expressions, and operands were created too and their importance with Lisp performance. I can say that McCarthy's purpose of creating a language that describes algorithms was successful. There is something more important than just learning mathematical terms or theorems, the thing is to learn where do programming languages are heading with these inventions and creations for new programming languages. 

References: 

- P. Graham (2002). The Roots of Lisp. Available at: http://webcem01.cem.itesm.mx:8005/s201813/tc2006/roots_of_lisp.pdf

viernes, 8 de febrero de 2019

Rich Hickey on Clojure

After listening to Rich Hickey on Clojure, I can agree with Rich on some topics. The main challenge for Rich is to make people understand that Clojure is very simple and that there are not as many rules as they might imagine. Clojure has many benefits, and Rich Hickey talks about one in specific: metaprogramming. Many of Lisp features are list, and being able to create programs from programs, programs from many things are great. Metaprogramming has to be used carefully.

Java might be a simple programming language and used by more people than Lisp but Lisp has an advantage over Java. Using Lisp, specifically, Clojure will be simpler than Java thanks to the implementation of lots of functions in the Sequence API. 

Rich Hickey also refers to the differences between Lisp and Clojure, with which I agree with some of them. First, Clojure is unique because the program is presented as data structures and not as a text to the compiler. Clojure has also more structures than only lists, for examples, vectors, and maps. Rich also says that one difference between Clojure and Lisp popularity is that Clojure retains Lisp power by including access to Java's libraries and many people know Java and its libraries very good. Finally, Rich says that Clojure's main characteristic is that the core data structures are immutable, the built-in library is made in terms of abstraction and non-concrete data structures, protocols, persistent data structures, and reference types, this might be kind of confusing by reading but it is very important for Clojure's working. 

I really liked this podcast because it talks about many important points that we don't know about lisp and after every reading or listening during this almost 3 months of working with Clojure, I keep learning more and more about this programming language and about different technologies like imperative languages. An imperative language is not something usually talked about in the programming area and it can be sometimes kind of difficult to work with but thanks to JVM, Clojure is a programming language which might become a powerful tool for using it in projects, or in any other activity. I want to improve my programming skills to become a better programmer by using Clojure. 


References: 



- Episode 158: Rich Hickey on Clojure, retrieved on September 22th, 2018 from: http://www.se-radio.net/2010/03/episode-158-rich-hickey-on-clojure/

miércoles, 6 de febrero de 2019

Dick Gabriel on Lisp

After listening to Dick Gabriel and his experience with Lisp, I can agree that Lisp is a functional language and this requires a different way of think than Object-Oriented Programming Languages. Lisp has a prefix notation, this means that a simple addition like 1 + 1 = 2, would be a (+ 1 1) in Lisp. You may ask, why do this operation that way? Well, because for the computer it is easier to parse the operation with a prefix notation because the operations are executed as they are read. Even though Lisp has been used for artificial intelligence, the main reason for Lisp's lack of usage is the learning curve which is high. 

I've heard of many programming languages, but I must accept that I haven't heard of Lisp nor Clojure before this course and this must be because of the few people that use them. There might be a few people using them, but these people are the ones who have a specialized way of thinking. 

Knowing Lips and its functionality will help you for having better programming practices, a clear example is macro, a macro is a program that creates programs by taking forms or objects as inputs and produces code to be then compiled and executed. 

Macros are not the only fascinating feature of Lisp, the way that Lisp is installed into computers is another amazing feature because Lisp installation makes the language to create itself and allows the user to modify or tune the language. 

As a conclusion, I can say that the fact that you don't know a programming language doesn't mean that it doesn't exist. It is always good to know as many programming languages as possible because you don't know when you will need it. It would be good to learn programming languages as Dick suggest, as poetry, because in this way you can be more creative along with the programming languages features you will become a better programmer.

References: 

- Episode 84: Dick Gabriel on Lisp, retrieved on August 30th, 2018 from: http://www.se-radio.net/2008/01/episode-84-dick-gabriel-on-lisp/

viernes, 25 de enero de 2019

The Promises of Functional Programming

After reading "The Promises of Functional Programming" by Konrad Hinsen, I found some interesting parts of the reading and with which I agree. Konrad says that there is a big future if people use functional programming languages. 

Konrad Hinses explains some disadvantages of using functional programming languages which are very important and interesting. Functional programming has advantages for concurrent and parallel programming and we can see those differences clearly with Clojure. First, the paradigm of functional programming can be a little difficult if you have been programming on the object-oriented paradigm, for example, learning the mathematical structure of functional programming might be hard, such as stop using loops and instead use recursion for the iterations, also high-order functions is also difficult to learn and understand. Functional programming languages let you write more robust software and with functional programming languages, you don't use variables.

The evolution in hardware is something that has allowed a better performance, a clear example of this is the trend of parallelism and concurrency in CPUs. Since CPUs have more cores the importance of implementing parallelized code is now bigger and also the importance of using functional programming languages because you don't have to be modifying variables or things like that, those programs also have a more straightforward structure.

I can finally say that functional programming language paradigm is very powerful and if people take advantage of it people will have a better future in programming like making programs that are easier to implement and are parallelizable. But there is something very important, we must know where to make the changes from an object-oriented paradigm to the functional programming paradigm. Functional programming popularity has increased over the years and since not many people know or work with it I am pretty sure that if it is taught in schools many people will be better programmers.

References: 

- K. Hinsen. (2009). The Promises of Functional Programming. Scientific Programming. Available at: http://webcem01.cem.itesm.mx:8005/s201813/tc2006/the_promises_of_functional_programming.pdf

miércoles, 23 de enero de 2019

The Semicolon Wars

After reading "The Semicolon Wars" I agree with some points of the article. It is very impressive the diversity of languages that exist in the world and it is more impressive the number of programming languages that exist nowadays, around 8500 programming languages. But there's something very true: most of the programming languages aren't new, they take some elements of other languages and they improve them. There's no perfect language,

This part of languages taking parts and improving them can be seen with the semicolon. In some languages like Pascal, the semicolon indicates the separation between statements but in other languages like C, they are meant to indicate when one statement ends; this is the Semicolon war. The same thing with comments, in some languages you can comment using a "#" and in others using "/". Something I was very interested about was the use of 0 as the first number when counting elements of something and the decision of which bit must go first when storing and transmitting data.

Something very fascinating about programming languages is how the change from one to other, we can group languages en four categories to analyze them in a better way: functional, imperative, object-oriented and declarative. Every programming language has a different way of writing code that leads to a different way of thinking. Whenever you try to solve a problem you must consider every facility provided by the programming language chosen.

As a conclusion, I can say that even though the author was a Lisp Fanboy most of his arguments were correct. There's no perfect programming language or the ideal for developers, a good developer must know how to solve any problem by thinking the best solution to the problem. As I said, the best programming language will be that one that a person knows better because knowing a knowing a language and its implementations will allow you to think the best solution for any problem that you have.

References: 


- Hayes Brian, 2006 "The semicolon wars" American Scientist, 303.

miércoles, 16 de enero de 2019

Introducing myself

Hello everybody, my name is Sergio Erick Chávez, but you can call me either Sergio or Erick I have no problem on that. I am studying the seventh semester of major in Computer Science at Tecnológico de Monterrey Campus Estado de México. Once I finish my major I would like to specialize in Networks, which is an area that interests me a lot. 

I am currently working as a Junior Consultant for DGA Consulting Technology developing Business Intelligence apps for Grupo Bimbo. 

What I expect from the Programming Languages course is to learn a new programming language, its functionality, structure, and importance in the computers world so I can apply it to later a project or situation that demands it. I also expect to improve my programming skills which I must say are not of my strengths but I always do my best for learning programming. 

My main hobbies are:

Listening to music: I have a varied taste of music, I can listen to Salsa, Rock, Electronic Music, etc. but my preferred genre is Trance music. 
Taking photos: I enjoy taking photos and upload them to my Instagram account: www.instagram.com/erichav07. I carry my camera everywhere I go, but what I like the most to shoot are landscapes, red carpets (I have been invited to take photos in some red carpets like Kong: Skull Island, Wonder Woman, Valerin and events like Mercedes-Benz Fashion Week) and cars (especially racing cars). One of my dreams is to one day take photos at the Mexico City F1 Grand Prix. 
The last book I enjoyed was "The Cuckoo's Egg". I like going to the cinema very often. My favorite movie genres are action and superheroes (I'm a Marvel fan). The last movies that I enjoyed were: 

Avengers: Infinity War. 
Ready Player One. 
Logan.
Churchill.
Dunkirk.

And the last series that I enjoyed were: Marvel's Agents of S.H.I.E.L.D and Stranger Things.