AdSense_BarHorizontal

Mostrando entradas con la etiqueta Desarrollador de software. Mostrar todas las entradas
Mostrando entradas con la etiqueta Desarrollador de software. Mostrar todas las entradas

lunes, 13 de junio de 2016

Ingenieria de Software - ¿Por que estudiar Ingenieria de sistemas?

En esta nueva entrada de DatoByte les comparto una opinión algo personal desde el punto de vista de la experiencia que he tenido en este corto periodo de 5 años.

Iniciare diciendo que me siento muy orgullo de haber elegido esta carrera profesional,  de nunca cambiar de opinión mientras la estaba estudiando y de haber culminado mis estudios, recuerdo el día en el que realice mi primer algoritmo de "Hola mundo" para ese entonces nuestro profesor nos enseño en uno de los mejores lenguajes de programación que he conocido, hablo de JAVA, ver en pantalla un simple mensaje despierta mas motivación para saber dominar mas a fondo el hecho de programar.

Cada vez que aprobaba una materia que tenia relación con ejercer en este amplio mundo de la ingeniería de sistemas sentía un gran cambio en mi forma de pensar, materias que van desde Calculo, Matemáticas discretas, Geometría vectorial, de las cuales posiblemente sean las mas complicadas de aprobar, pasando por materias de gran interés como Circuitos digitales, Arquitectura de computadores, hasta posiblemente las materias que nos hacían quemar mas neuronas aquellas relacionadas con aprender una nueva sentencia y crear nuevas lineas de código como por ejemplo Lenguajes de programación. Todas esas materias aportan de gran manera un gran conocimiento que todo ingeniero de sistemas debe aprender a dominar, entiéndase dominar al menos conocer su aplicación, valga este ultimo comentario como Escudo ante la popular mentira "Para que voy a aprender eso si no lo voy a usar" sin embargo como ingeniero de sistemas puedo afirmar que todo es de vital interés en esta gran carrera que proyecta nuevos horizontes.

La ingeniería de sistemas se interesa por todos los aspectos del desarrollo de sistemas basados en computadoras, incluidos hardware, software e ingeniería de procesos, en este punto hacemos una división en 3 enfoques:

-Ingeniería de Hardware:


Los ingenieros informáticos de hardware trabajan en el diseño, desarrollo y fabricación de equipamientos informáticos. Se especializan en áreas tales como las comunicaciones, los sistemas de control, la robótica, los microprocesadores o los dispositivos semiconductores. Deben tener en cuenta la eficiencia, la seguridad y los factores ambientales.

-Ingeniería de Procesos:


Es la integración sistémica de metodologías y procedimientos de diversas áreas de las ciencias naturales y la Ingeniería, que se aplican al diseño, administración, mejoramiento e innovación de procesos, especialmente de base fisicoquímica y biotecnológica. ​​​​​​​​​​​​​​​​​​​​​​


-Ingeniería de Software:


La ingeniería de software es una disciplina de la ingeniería que se interesa por todos los aspectos de la producción de software, Este ultimo en mi opinión es posiblemente el campo de acción mas grande que se posee un ingeniero de sistemas y esto solo por un comentario "La ingeniería de software no tiene limites naturales a su potencial", esto implica que prácticamente si algo se puede imaginar, ese algo puede ser convertido en software o al menos tendrá un campo de software.

Acorde a el libro de Ingeniería de software de Ian Sommerville La ingeniería de software es importante por dos razones:
1. Cada vez con mayor frecuencia, los individuos y la sociedad se apoyan en los avanzados sistemas de software. Por ende, se requiere producir económica y rápidamente sistemas confiables.

2. A menudo resulta más barato a largo plazo usar métodos y técnicas de ingeniería de software para los sistemas de software, que sólo diseñar los programas como si fuera un proyecto de programación personal. Para muchos tipos de sistemas, la mayoría de los costos consisten en cambiar el software después de ponerlo en operación.

Sin embargo el asunto a destacar es Ingeniería de sistemas y no una de estas en particular, sin embargo es bueno aclarar esta posible división de la ingeniería de sistemas.

Ahora bien si todo lo anterior no te ha convencido de Estudiar una Ingeniería de sistemas no te preocupes, Posiblemente no sea la emoción que estas buscando o tal vez pienses que no es para ti, pero ten en cuenta que es una de las carreras que mas le ha aportado en los últimos años al desarrollo del ser humano, sencillamente la tecnología y el ser humano se han convertido en un par de entes con una relación simbiotica, ya que mutuamente se encuentran en constante colaboración, a tal punto hemos llegado que a diaria un gran porcentaje de personas tienen acceso a algún sistema, y en este momento estas viendo esta publicación en el sistema de Blogger, usando un software como tu navegador y también tu sistema operativo, y ni que decir de el computador o celular desde el que estas viendo, todos esos fueron pensados por ingenieros de sistemas, así que si quieres contribuir con este mundo tecnológico es mas que suficiente para que inicies esta travesía por el mundo de la Ingeniería de sistemas.

Por ultimo, para finalizar esta entrada, me quiero despedir con lo siguiente:

public class BienvenidoNuevoIngeniero {
  public static void main(String[] args) {
    System.out.println("Hola mundo");
    System.out.println("Estudia Ingenieria de sistemas");
    System.out.println("Datobyte te desea lo mejor");
  }
}


jueves, 19 de mayo de 2016

10 Preguntas Claves que debe saber un ingeniero de software

Para esta publicación dare por sentado que conoces algo de programación por ende quiero iniciar esta entrada trayendo como recuerdo el día en el que por primera vez observaste el  algoritmo para mostrar "HOLA MUNDO", quiero mencionar que a nivel personal visualice un mundo de posibilidades y me motive aun mas para conocer el mundo de la ingeniería de software.

Son muchas las habilidades que debe tener un Ingeniero de software, un pequeño listado de estas habilidades es el sgte
– Dirige y coordina proyectos de desarrollo y mantenimiento de software.
– Supervisa las etapas de la vida de un proyecto de desarrollo de software.
– Dirige equipos de trabajo compuestos por analistas, diseñadores y programadores.
– Analiza y selecciona nuevas técnicas y herramientas existentes en el mercado tecnológico y del software.
– Analiza y diseña aplicaciones de software.
– Realiza pruebas de verificación, integración y rendimiento de las aplicaciones de software.
– Integra sistemas existentes susceptibles de interrelacionarse.
– Brinda asesoría a usuarios en la resolución de problemas relacionados con los sistemas de software.
– Realiza consultoría individual o en colaboración con otros profesionistas.
– Administra sistemas de bases de datos.
– Participa en formular políticas de seguridad y técnicas criptográficas en empresas e instituciones donde se desempeñe.
– Verifica que el software desarrollado cumpla con la legislación en vigor.

y ni que decir de su campo laboral, sin embargo

Ahora bien a continuación les comparto 10 preguntas claves que todo ingeniero de software
debe saber responder.

¿Qué es software? 

Programas de cómputo y documentación asociada.
Los productos de software se desarrollan para un cliente en particular o para un mercado en general.

¿Cuáles son los atributos del buen software? 

El buen software debe entregar al usuario la funcionalidad y el desempeño requeridos, y debe ser sustentable, confiable y utilizable.

¿Qué es ingeniería de software? 

La ingeniería de software es una disciplina de la ingeniería que se interesa por todos los aspectos de la producción de software.

¿Cuáles son las actividades fundamentales de la ingeniería de software?

Especificación, desarrollo, validación y evolución del software.

¿Cuál es la diferencia entre ingeniería de software y ciencias de la computación?

Las ciencias de la computación se enfocan en teoría y fundamentos; mientras la ingeniería de software se enfoca en el sentido práctico del desarrollo y en la distribución de software.

¿Cuál es la diferencia entre ingeniería de software e ingeniería de sistemas?

La ingeniería de sistemas se interesa por todos los aspectos del desarrollo de sistemas basados en computadoras, incluidos hardware, software e ingeniería de procesos. La ingeniería de software es parte de este proceso más general.

¿Cuáles son los principales retos que enfrenta la ingeniería de software?

Se enfrentan con una diversidad creciente, demandas por tiempos de distribución limitados y desarrollo de software confiable.


¿Cuáles son los costos de la ingeniería de software?

Aproximadamente 60% de los costos del software son de desarrollo, y 40% de prueba. Para el software elaborado específicamente, los costos de evolución superan con frecuencia los costos de desarrollo.

¿Cuáles son los mejores métodos y técnicas de la ingeniería de software?

Aun cuando todos los proyectos de software deben gestionarse y desarrollarse de manera profesional, existen diferentes técnicas que son adecuadas para distintos tipos de sistema. Por ejemplo, los juegos siempre deben diseñarse usando una serie de prototipos, mientras que los sistemas críticos de control de seguridad requieren de una especificación completa y analizable para su desarrollo. Por lo tanto, no puede decirse que un método sea mejor que otro.

¿Qué diferencias ha marcado la Web a la ingeniería de software?

La Web ha llevado a la disponibilidad de servicios de software y a la posibilidad de desarrollar sistemas basados en servicios distribuidos ampliamente. El desarrollo de sistemas basados en Web ha conducido a importantes avances en lenguajes de programación y reutilización de software.





Bibliografia:
Ingenieria de software, 9na edicion - Ian Sommerville.

jueves, 14 de abril de 2016

SQL - Consultas SELECT MultiTabla


Combinaciones internas - INNER JOIN

Las combinaciones internas se realizan mediante la instrucción INNER JOIN. Devuelven únicamente aquellos registros/filas que tienen valores idénticos en los dos campos que se comparan para unir ambas tablas. Es decir aquellas que tienen elementos en las dos tablas, identificados éstos por el campo de relación.

La mejor forma de verlo es con un diagrama de Venn que ilustre en qué parte de la relación deben existir registros:



INNER-JOIN


En este caso se devuelven los registros que tienen nexo de unión en ambas tablas.
Esto puede ocasionar la desaparición del resultado de filas de alguna de las dos tablas, por tener valores nulos, o por tener un valor que no exista en la otra tabla entre los campos/columnas que se están comparando.

Su sintaxis es:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 INNER JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
Por ejemplo suponiendo tenemos las siguientes tablas (Carro, Carroceria)

IdCarro
NombreCarro
IdCarroceria
1
Hiunday i35
1
2
Chevrolet Spark GT
2
3
Mazda 3
2
4
Renault Stepway
3
5
Ford Explorer
NULL
6
Nissan Sentra
NULL

IdCarroceria
NombreCarroceria
1
Sedan
2
HastBack
3
Camioneta
4
Convertible
5
Limosina
6
Furgoneta

Al momento de ejecutar la sgte Consulta con INNER JOIN:
SELECT T1. IdCarro, T1. NombreCarro, T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro T1
INNER JOIN Carroceria T2 ON T1. IdCarroceria= T2. IdCarroceria

 Se obtendrá

INNER JOIN
IdCarro
NombreCarro
IdCarroceria
IdCarroceria
NombreCarroceria
1
Hiunday i35
1
1
Sedan
2
Chevrolet Spark GT
2
2
HastBack
3
Mazda 3
2
2
HastBack
4
Renault Stepway
3
3
Camioneta


Combinaciones externas (OUTER JOIN)

Las combinaciones externas se realizan mediante la instrucción OUTER JOIN. Como enseguida veremos, devuelven todos los valores de la tabla que hemos puesto a la derecha, los de la tabla que hemos puesto a la izquierda o los de ambas tablas según el caso, devolviendo además valores nulos en las columnas de las tablas que no tengan el valor existente en la otra tabla.

Es decir, que nos permite seleccionar algunas filas de una tabla aunque éstas no tengan correspondencia con las filas de la otra tabla con la que se combina. Ahora lo veremos mejor en cada caso concreto, ilustrándolo con un diagrama para una mejor comprensión.

La sintaxis general de las combinaciones externas es:

FROM Tabla1 [LEFT/RIGHT/FULL] [OUTER] JOIN Tabla2 ON Condiciones_Vinculos_Tablas
Como vemos existen tres variantes de las combinaciones externas.

En todas estas combinaciones externas el uso de la palabra OUTER es opcional. Si utilizamos LEFT, RIGHT o FULL y la combinación de columnas, el sistema sobreentiende que estamos haciendo una combinación externa.

Variante LEFT JOIN


Se obtienen todas las filas de la tabla colocada a la izquierda, aunque no tengan correspondencia en la tabla de la derecha.

Así, para seleccionar todas las filas de la Tabla1, aunque no tengan correspondencia con las filas de la Tabla2, suponiendo que se combinan por la columna Col1 de ambas tablas escribiríamos:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 LEFT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
Esto se ilustra gráficamente de la siguiente manera:
  


Volviendo a nuestro ejemplo al momento de ejecutar la sgte Consulta con LEFT JOIN:
SELECT T1. IdCarro, T1. NombreCarro, T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro T1
LEFT JOIN Carroceria T2 ON T1. IdCarroceria= T2. IdCarroceria

Se obtendrá
IdCarro
NombreCarro
IdCarroceria
IdCarroceria
NombreCarroceria
1
Hiunday i35
1
1
Sedan
2
Chevrolet Spark GT
2
2
HastBack
3
Mazda 3
2
2
HastBack
4
Renault Stepway
3
3
Camioneta
5
Ford Explorer
NULL
NULL
NULL
6
Nissan Sentra
NULL
NULL
NULL



Variante RIGHT JOIN


Análogamente, usando RIGHT JOIN se obtienen todas las filas de la tabla de la derecha, aunque no tengan correspondencia en la tabla de la izquierda.

Así, para seleccionar todas las filas de la Tabla2, aunque no tengan correspondencia con las filas de la Tabla1 podemos utilizar la cláusula RIGHT:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 RIGHT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1
El diagrama en este caso es complementario al anterior:



Volviendo a nuestro ejemplo al momento de ejecutar la sgte Consulta con LEFT JOIN:
SELECT T1. IdCarro, T1. NombreCarro, T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro T1
RIGTH JOIN Carroceria T2 ON T1. IdCarroceria= T2. IdCarroceria

Se obtendrá
IdCarro
NombreCarro
IdCarroceria
IdCarroceria
NombreCarroceria
1
Hiunday i35
1
1
Sedan
2
Chevrolet Spark GT
2
2
HastBack
3
Mazda 3
2
2
HastBack
4
Renault Stepway
3
3
Camioneta
NULL
NULL
NULL
4
Convertible
NULL
NULL
NULL
5
Limosina
NULL
NULL
NULL
6
Furgoneta

 Variante FULL JOIN


Se obtienen todas las filas en ambas tablas, aunque no tengan correspondencia en la otra tabla. Es decir, todos los registros de A y de B aunque no haya correspondencia entre ellos, rellenando con nulos los campos que falten:

FULL-JOIN

Es equivalente a obtener los registros comunes (con un INNER) y luego añadirle los de la tabla A que no tienen correspondencia en la tabla B, con los campos de la tabla vacíos, y los registros de la tabla B que no tienen correspondencia en la tabla A, con los campos de la tabla A vacíos.

Su sintaxis es:

SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7
FROM Tabla1 T1 FULL [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1



Volviendo a nuestro ejemplo al momento de ejecutar la sgte Consulta con LEFT JOIN:
SELECT T1. IdCarro, T1. NombreCarro, T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro T1
RIGTH JOIN Carroceria T2 ON T1. IdCarroceria= T2. IdCarroceria

Se obtendrá
IdCarro
NombreCarro
IdCarroceria
IdCarroceria
NombreCarroceria
1
Hiunday i35
1
1
Sedan
2
Chevrolet Spark GT
2
2
HastBack
3
Mazda 3
2
2
HastBack
4
Renault Stepway
3
3
Camioneta
5
Ford Explorer
NULL
NULL
NULL
6
Nissan Sentra
NULL
NULL
NULL
NULL
NULL
NULL
4
Convertible
NULL
NULL
NULL
5
Limosina
NULL
NULL
NULL
6
Furgoneta