Friday, April 15, 2011

Introduction to Engineering

Engineering is the human activity that deals with the application of technology. Personally I like to say that engineering is "reverse science. " This will explain later.

Engineering is about making, designing, creating. The focus of engineering is to apply knowledge to turn a situation in another situation better. So engineering is to get from point A to point B. Where A is the current status and B is a future situation where we met our goals.

What do we mean by a better situation?

A better situation is one where we have more comfort, more quality of life, that is where we make less effort to satisfy our need. Therefore engineering pays close attention to the objectives that have to do to satisfy need.

The goals are a hierarchy. Project should have a single root goal. This is usually called general goal. This in turn subdivided into specific objectives, which may be related to a need or not. When a goal is associated with a specific need is subdivided into a kind of objectives to which we will call requirements.

When you run a engineering project, it is important to distinguish which goals are requirements and which not. From this initial classification is triggered the whole process of engineering.

Once we have identified and requirements related to a need, we also know that person belongs to every need. Any person that is going to meet a need by the project will call involved.

It is advisable to consider that while the project meets need also create new need. For example if the project creates a product, it also creates the need for technical support on this product, training to use the product, and possibly change management needed to create new versions. These need are also included in the project so that it also can satisfy those needs.

Thursday, April 14, 2011

Proyect types

The classification of projects presented here is intended to discriminate between projects according to their power, in a way that is practical and easy to understand focused on college students. I do not pretend to compete with the standards, methodologies or organizations that have something to say on the classification of projects, but provide a very natural point of view that has been poorly documented in the past.

Project types according to their scope

For this classification will take into account the type of interaction with the environment, and the purpose of carrying out the project. Many times this is not clear for the college student who has been assigned a project, because this student can feel that the only purpose is to please the tutors and teachers.

But there are some things we can say the purpose of projects:

  • All projects allow to learn something.
  • All projects satisfy needs.
  • All projects have a result, this result may be tangible or not.

It is appropriate to ask for these items when starting a project: What can I learn from this project?, What needs can I satisfy with this project? and What result will have this project?. The answers to these questions will give us the Goals of the project.

The classification presented below should be done based on the response to the third question above. This means that this classification should be done based the expected result of the project.

  • Research Project: The expected outcome of the project is information and knowledge. What we hope to get is: a set of data organized and significant for those involved in the project.
  • Development Project: The expected outcome of the project is a design. What we hope to get is: a map, diagram, structure, or plans to run a task, for example to build an asset (Deployment project).
  • Deployment Project: The expected outcome of the project is: value. What we hope to get is: a resource, directly or indirectly. It may be that the project will culminate in the construction of an asset, or to acquire or conserve a resource.

    The following are specific cases of the deployment project:

    • Demonstration Project: The expected outcome of the project is: attention, motivation and reputation. What we hope to get is: the interest of one or more persons in the services that we offer. Is a project of small-scale implementation can demonstrate the capabilities of who runs it.
    • Marketing Project: The expected outcome of the project is: money. What we hope to get is: the sale of the services we offer. It is a project of implementing a sales strategy.
    • Implementation Project: The expected outcome of the project is: equipment. What we hope to obtain is a set of functional tools and trained personnel.

When you are producing an intangible is common to find that the deployment project includes the design project. But for most tangible products of these two projects are separate. This is due to the need to create more of a tangible product to meet your demand, so many tangible products are made ​​from the result of the design project.

The possibility that the projects belong to more than one type may lead to think that all the projects belong to all types. You really have to say that to create a product we carry out projects of all types: Research, Development, Deployment. But that does not mean that it is always necessary to achieve them all.

As mentioned earlier, many deployment projects are made ​​from the result of a single design project. Similarly for the design requires a preliminary investigation. But may not be necessary to repeat the research project to get it every time.

At the same time a research project may require one or more deployment project to create models, tools or experimental situations. That does not mean they are necessary every time.

This confusion is evident when a teacher requires the characteristics of the three types of project in the projects assigned to students. For example, the teacher assigned students a project to make the model of a building. This seems to be a deployment project only. But the teacher also requires a methodology of research, such as survey, interview or observation. In response, the student can not understand why a survey to produce a model of a building. This is maximized by the project templates found on the Internet, which emphasize research projects.

Programming Levels

As I mentioned in the article Introduction to programming, programming languages ​​must be translated into machine language so the computer can interpret and execute. However, there are variations between machine language and these variations should be taken into account in the first programming languages ​​that were developed. This set of programming languages ​​implies that the programmer (the person writing the program) knows characteristics of the computer for which he or she write the program. These languages ​​are called of low-level, because they have a strict equivalence with the machine language.

On the other hand there are high-level languages, which allow us to write programs independently of the machine to be executed. Finally mixed languages ​​are those that allow us to ignore the details and in the high-level languages​​, but if we can take control of these details and in the low-level languages​​.

An example of a low-level language is Assembler, an example of a high-level language is C#, and finally C++ is a typical mixed language.

Interpretation Form

There are two ways that a computer can understand a programming language:

  1. The first is through a full translation of the programming language into machine language specific to the machine, we will call this technique native code. When using native code there is no guarantee that the program when copied to another computer will still work. But we get the best performance on machines where it works.
  2. After the native code, the next option is using an auxiliary program that translates programming language or other intermediate language to machine language in real time while running, this has the disadvantage of being slower than native code. But this technique can transport the program to other platforms without major complications (says the program is portable to other platforms, or just portable).

    In the latter technique there are two variants:

    1. In the first variant, the program is in the original language it was written and is not verified if it is correct until it is executed, this is called interpreted code, which is evident as it is unsafe because there is no guarantee program integrity (assurance that has not been damaged).
    2. The second alternative is to translate the programming language to an intermediate language that is more easily translated into machine language, this means also to verify if the program is correct before you start to run. In this way the program runs faster and more securely than interpreted code, this will call managed code. Managed code ensures the integrity of the program, however it is possible that even the intermediate language is high level and therefore need another iteration of translation. This second translation is generally performed because the integrity of the program has already been verified, when performing this combination of techniques is still managed code, but if he says it is compiled JIT (Just In Time).

The following are examples of common programming languages ​​compiled to native code: Assembler and C++. On the other side are Java and C# are managed code in most cases, an example of interpreted code (although it might not) is JavaScript. A situation in which JavaScript is not interpreted is the virtual machine V8 using Google Chrome, with this virtual machine JavaScript runs as managed code. There are also tools for compiling languages ​​that are commonly managed code to native code.

Introduction to programming

Computers are machines capable of performing many tasks, are said to be multipurpose and can fulfill the functions of other machines, such as a calculator or a typewriter. However, when the computers are created, they are unable to perform a task by themselves, need a program to follow to accomplish tasks.

The computer programs are like recipes, indicate a number of elements needed to perform the work, followed by a process "of preparation or cooking" and then allow to achieve the desired result. But from a broader perspective, both recipes and computer programs are based on algorithms.

Algorithm Definition

To develop an intuitive definition of algorithm, we can say that an algorithm is the description of the process necessary to perform a task, making it possible to define algorithms for any activity or even for projects taking place in organizations. A formal definition of algorithm would be as follows: An algorithm is a finite and ordered set of steps without ambiguity that perform a particular task.

So to get the computer to complete a new task, it is necessary to give the algorithms for the computer can do it. Now the problem that arises is How to tell the computer what to do. In the early days of computing was necessary to tell the computer what to do every time you need to, at present there is teh concept of stored program, which can be reused as many times as necessary. So that what we should do is write one of these programs stored in our computer so that it can understand it.

Estos programas almacenados hacen parte de aquello que conocemos como software, de hecho, muchas veces nosotros adquirimos software (descargándolo de Internet por ejemplo) para poder utilizar uno o varios programas almacenados que dicho software contiene. Además de estos programas el software contiene otras cosas como documentos o manuales de usuario.

What does the computer understand?

The computer understands a language called machine language, although some computers understand "dialects"or different variants of machine language, there is some level of consistency between the machine language of a computer to another. You have to highlight that as technology advances language machine's computer becomes more rich and extensive. However, the machine language is a coded language so that it is difficult to understand for humans, this limitation makes ineffective any attempt to create a program directly in machine language, except - of course - very short programs and those written by someone skilled in the subject.

For this reason, engineers have developed several computer languages ​​that serve as intermediaries between humans and computers, these languages ​​are easier to understand humans, and then, through a special translator called compiler We translate these languages ​​(also known as programming languages ​​) to machine language so the computer can understand and perform the tasks we have set.

There are many programming languages​​, some obsolete, others have changed over the years have passed. However, the principles on which are based programming languages ​​are the same. One of the most popular programming languages ​​in the world is the language C++, however in this blog, we will focus on the programming language C#.