Entradas

An Introduction to Metaprogramming

In this blog, I will discuss the article titled "An Introduction to Metaprogramming" written by our professor Ariel Ortiz. Meta programs are basically programs that allow you to create other programs, or basically simplify the process of programming by reducing the size of the problem. Like its said in the article: Metaprogramming allows you to automate error-prone or repetitive programming tasks. Some types of metaprogramming are source code generation, quines and modifying programs during runtime. It seems a bit difficult to find practical implementations to implement this methods in production software. But am sure there are many specific situations when metaprogramming can save you a lot of time and resources. In a way, this methods can be viewed as the equivalent of “party tricks” in the programmer world: not all people can write this type of code, but when someone can, it looks pretty cool. Self replicating code is really interesting. Looking online you can find ...

Ready Player One

In this blog, I will discuss the book Ready Player One by Ernest Cline. We read this book during this course and I must say I really enjoyed reading it, so far its one of my favorite science fiction book. The book is about a dystopian future where society has abandoned reality and instead decided to live most of their lives inside a virtual reality simulation where everything is more “grandiose”. The story follows Wade Watts in his journey to find Hallidays (the creator of the game who past away) easter eggs, the person that finds all the easter eggs will inherit his vast fortune. I think there are many similarities with the virtual world in the book (OASIS) and the virtual world we currently have in our lives (social media, video games, mobile apps and other IT technologies). Because in the end, they are all outlets to escape our realities in some way. Our world is not dystopian like the one in the book, but we are living in an age where we want everything quick and easy. Tha...

Microservices

In this blog, I will discuss the article titled "Microservices" written by James Lewis and Martin Fowler in March of 2014. I found the article to be interesting and shed some light to things I didn’t know about microservices. Microservices are a type of architecture that structures applications as a bundle of different services. What's good about them is that they allow for continuous and efficient deployment of applications into complex systems. So their implementation is often vital when working on a problem that requires a large subset of tools and resources in order to work, meaning that this system is complex and big in size. What microservices accomplish is that it allows companies and different application services to widen their stack of technology and enable the continuous delivery and deployment of technologies into their systems. Companies tend to apply microservices when their systems grow largely and become more complex. This allows the system to becom...

The 4+1 View Model

In this blog, I will discuss and review the videos called "4+1 View Into Software Architecture" and "Six Blind Men", as well as the article titled "The Elephant and the Blind Programmers" by Grady Booch written in 2010. Often times when developing, we don’t take into consideration the interactions users will have into our system and in doing so, we degrade the experience of what we build. The interaction can vary from user to user. That's what we see in the video where the blind men interact with the elephant. Their interpretation of what that elephant is like varies because of their different perspectives and because they chose different parts of the elephant to make that judgement. And that's all good, because having a different interpretation doesn’t mean they are wrong. Because the combination of their interpretation defines what they experienced very well. In the end they gave a very clear description, although abstract, of an elephant....

Understanding the SOLID Principles

In this blog, I will discuss a section from the book "Ace the Programming Interview: 160 Questions and Answers for Success" by Edward Guinness published by Wiley in 2013. The section I will discuss in this blog is called "Understanding the SOLID Principles". So first of all what does SOLID stand for? It stands for: S ingle Responsibility Principle O pen/Closed Principle L iskov Substitution Principle I nterface Segregation Principle D ependency Inversion Principle Lets try to briefly understand what each of this mean. Single Responsibility Principle: Like the article says, a class should only have one responsibility and there never should be more than one reason for the class to change. One good way of applying this principle is asking yourself whether the logic you are coding into your class should live there or not. Open/Closed Principle: This principle states that software entities should be open for extension but closed for modi...

Software Craftsmanship

In this blog, I will discuss the podcast titled "Software Craftsmanship" by Robert Martin produced by Software Engineering Radio in the year 2009. There are a lot of interesting topics touched in this podcast. We could summarize the topic of this talk, into the art of being a master of coding. The crafting is code is intangibly related to the learning of many other disciplines. We learn from the masters, or at least we try to learn to what is immediately in our surroundings. But sometimes it is not enough to only learn from our immediate sources of knowledge (school, teachers, etc), sometimes we must reach beyond and seek learning from other sources. This is true in the programming world, specially in the era of internet when we can learn from hundreds of different sources. As a students who is soon going to graduate I’ve thought of what my life is going to be like after college. Maybe I’ll pick a 9 to 5 job, but what am I going to do in my free time? Maybe rest? Wa...

Is Design Dead?

In this blog, I will discuss the article titled "Is Design Dead?" by Martin Fowler (the same author from the last blog) in May 2004. Design is one of those things programmers (or at least hard core programmers) tend to shy away from. We usually like to jump right into the action not taking into consideration the design, not really thinking of the repercussions of not having a good design. We usually just think that things will fall into its right place, and sometimes we se downside of not implementing design later in the project. The article primarily shows this point showcasing Extreme Programming as one of the responsible programming methods for not taking priority to design. Extreme Programming’s approach to design is evolutionary, not planned design. Meaning that the design comes about just as the creation of the system is implemented. Many people can see this as good or bad. You save some time by creating the design around the current implementation, rather than p...

Who Needs an Architect?

In this blog, I will discuss the article "Who Needs an Architect?" by Martin Fowler published in IEEE Software in July 2003. Software architecture, to most, sounds like a very important element when developing a program or a system. I think of it as the column that holds everything in place. Its function is to create a model in which everything can be joined together in a successful way. The decision as of how architecture will be, is often decided early in project, because making a change in the architecture when the project is advanced will cause the developers a lot of headaches. I must say I thought of software architects as a key person when developing things of large scale or even at any scale, and in most cases they are necessary for most kinds of projects. But Martin Fowler taking a stab at this definition made me rethink of what I thought I knew about software architects in general. Software architecture and software building revolves around making decision...

Software Architecture

In this blog, I will discuss the chapter titled "Software Architecture: Laying the foundations of Software Design" from Pete Goodliffe's book "Code Craft: The Practice of Writing Excellent Code". So what is architecture? Or more specifically, what is software architecture? So we all know that architecture is the process of planning, designing and building structures of any kind. So how does this concept translate into software? Well, when building software it is very important to think of how it is going to be built. Because just like a building, software can fail and collapse if its components are not built and designed accordingly. You might be thinking that in order to build the best piece of software (or building) you have to add a lot of things to it so it doesn’t fail, and make a very sophisticated design so everyone admires it. But the truth is, just like it's mentioned in the book, the simpler the better. The simpler it is, the more comprehens...

Moon Machines: The Navigation Computer

In this blog I will discuss the documentary watched in class, titled “Moon Machines: The Navigation Computer” produced by the Science Channel. The documentary is about the computer created for the Apollo missions to the moon. Its not the first time I’ve watched this documentary, but I still find msyelf captivated by the genius of the people behind this project. Nowadays we have computers that are far more powerful (and smaller) than the ones used in Apollo missions. But, for its time, the Apollo computers where state of the art and required a tremendous amount of engineering. The programming done in the computers of the Apollo missions where somewhat “primitive”, since they used cables going through rings to specify if it indicated a “1” or a “0”. Because of this, the programming took a lot of time, and it was really important it didn't have any errors. Nevertheless, they achieved a lot with this method and where successful in every mission. If we compared that type of prog...

Introduction

Hey! My name is Diego and I am currently in the last semester of Computer Systems Engineering. I just recently started working as a (mainly) back-end web developer intern, so I hope this course will help me in understanding more deeply how systems are designed, and in the end to be capable to structure my own systems and create system architectures that are efficient. Also, this will be my first time programming in Ruby so I'm really curious of what it has to offer. When am not busy working or doing school stuff, I like to exercise or do any kind of fun activity. I am currently watching a few TV Shows but my favorite one is Game of Thrones.