domingo, 31 de enero de 2016

Who Needs an Architect?

This week's reading "Who Needs an Architect?" by Martin Fowler (2003) explains us that software architecture is one of the most important areas that are involved in the process of creating and developing new software.

One of the definitions Fowler gives is that "the architecture is the understanding of how the system is divided into components and how the components interact through interfaces where something important is that these components and interfaces have to be understood by all the developers". The previous definition make us think that the architecture is something that requires a high level of communication between the areas that are involved in the development.

He defined two types of architects "Architectus Oryzus", someone who's responsibility is to be involved with the project at a high level because this role has to "be very aware of what's going on in the project, looking out for important issues and tackling them before they become a serious problem" which brings the responsibility to the architect to be aware of the project all the time, with a high level of collaboration.

The other type: "Architectus Reloadus" is the person who makes all the important decisions thus the entire crew are not as experienced and they don't have the knowledge to get involved in the base of the software.

I think the real architect of software is a mixture of all those mentioned in the reading, I mean, he would be someone who should know very well the subject on which they are building the system, is someone who is very committed and work with each of the areas of the team because he is always helping to improve their work, is also someone who should know how to reverse the errors that arise in the project.

If you're interested in reading this article, here is the link: Who Needs an Architect?.

domingo, 24 de enero de 2016

Software Architecture: Laying the Foundations of Software Design

This week lecture was chapter 4 of Pete Goodliffe's book "Code Craft: The Practice of Writing Excellent Code" titled: "Laying the Foundations of Software Design".
It starts by defining what a software blueprint is, which is an overview of the system that specifically avoids too much detail. In other words in this high-level view all implementation details are hidden. This is a really good point of view in which we only get to see the fundamental behaviors of the system. And so Goodliffe explain why identifying since the beginning which components are going to communicate with each other is a good thing, that is because it is essential to get right in the early stages of development.

He mentions four kinds of views that will help us build our architecture I will enlist then with a short explanation.
- The conceptual view (Show the major parts of the system and their interconnections)
- The implementation view (Real implementation modules)
- The process view (Show the dynamic structure)
- The deployment view (Show allocation of task to physical nodes)

In order to document all our architecture we need to write a "architecture specification" which explains what the system structure is, and shows how it resolves the problem for which that architecture was chosen. This document is used to validate what it's going to be build, communicate the design to all interested parties and discriminate what's important and what's not.

A truly great architecture is born when technical and strategic visions meet to create a product that stands out from its competitors. Good system architecture is simple. It can be described in a single paragraph and summarized in one elegant diagram.

Now I took one interesting question of the discussion part:

1. Where architecture ends and software design begin?:
The architecture of a system is a skeleton of the entire software system. it's the highest level of abstraction of a system.
Software design is the next step, a more defined and focused activity.

I choose this question in order to clarify what software architecture is. Before building we must make a plan of the system, express the complexity of the system, its cost, future extensions and so on. If we fail at building this, correcting something in future stages is going to be very expensive and messy, well depending of the size of your system.

Sources:

*Goodliffe, P. (2007). Code Craft: The Practice of Writing Excellent Code. San Francisco: No Starch Press. 

lunes, 18 de enero de 2016

Moon Machines: The Navigation Computer

How did the man get to the moon?, What challenges came up with it?, What impact made in history?... those are some question that we usually don't do, we are used to travel to the moon nowadays. This 5 episodes miniseries explain us how was the preparation for the moon landing.

It was somewhere in the 1970's and the big countries were fighting about who achieve more things in less time. Most of the challenges were already done except for one: reach the moon. USA and Russia headed to this goal, they already had space stations around the Earth so they were confident to achieve the goal.

After the president John F. Kennedy gave NASA a due date they began planning the entire project. First they thought of creating a navigation system which will control the machine the entire process. For that purpose they contacted MIT principal who worked with some similar technology in airplanes. 

And so the series go through all the steps needed to put the man on the moon.

We should focus in all the process made in order to create a functional system. Maybe system's architecture wasn't consider that important back in those days. Thankfully we now know how systems must be constructed, we are more efficient in building efficient algorithms. Of course in the documentary they already had the description of the structure, behavior and most views the system had.

So, why is system architecture so important? Well a system architecture can compromise system components and features, so it has to be well planned. Making a good connection between software and hardware needed several shots in order to get the man in space, and a lot more to land it on the moon. What I'm trying to say is that we should test a system as many times as necessary so that we learn the most we can before using a system in any task.

Source:
Documentary video titled “Moon Machines: The Navigation Computer” produced by the Science Channel

viernes, 15 de enero de 2016

Introducing myself

For all of you reading this, my name is Carlos Sebastian Loredo Gomez, Sebastian for short.
My expectations for this course are: to understand a little better how should software be design and how to structure software in order to decrease its cost in memory.

About my hobbies and personal interests: I love to watch sci-fi series in TV and to read books (Stephen King particularly). If there's more I don't recall it at the moment.

A book I have recently enjoyed: Drowning Towers by George Turner, which describe how the future society lives after overpopulation.
Music: Helene Fischer, Abba, Adele
TV programs: Well I think I have a lot to put in this part since all my holidays were about watching TV series. I'll just list them in order of how I liked them. Stargate SG-1, Sanctuary, Stargate Atlantis, Black Mirror, Eureka... just to mention some.