El futuro del desarrollo de software es de unos buenos artesanos. Con la infraestructura como Amazon Web Services y un gran número de bibliotecas básicas, ya no tiene un pueblo para construir una buena pieza de software.
En estos días, un par de ingenieros que saben lo que están haciendo puede suministrar sistemas completos. En este puesto, hablamos de las 10 principales conceptos de ingenieros de software debe saber para conseguirlo
El éxito de ingeniero de software conoce y utiliza patrones de diseño, código activamente refactors, escribe ensayos y unidad religiosa busca la simplicidad. Más allá de los métodos básicos, hay conceptos que la buena ingenieros de software conocer. Estos trascienden lenguajes de programación y proyectos – que no son patrones de diseño, sino más bien grandes áreas que usted necesita estar familiarizado con. The top 10 concepts are: Los 10 principales conceptos son los siguientes:
- Interfaces
- Convenios y plantillas
- Capas
- La complejidad algorítmica
- Hashing
- Caching
- Concurrencia
- Nubes de Computación
- Seguridad
- Bases de Datos Relacionales
10. Bases de Datos Relacionales
Bases de datos relacionales han sido recientemente recibiendo un mal nombre porque no pueden escalar bien el apoyo masivo a servicios web. Sin embargo, este fue uno de los logros más fundamentales de la informática que nos ha llevado durante dos décadas y seguirá siendo durante mucho tiempo. Bases de datos relacionales son excelentes para la gestión de pedidos de sistemas, bases de datos corporativas y P & L de datos.
En cada registro se añade a una tabla, que define el tipo de información. La base de datos ofrece una forma de buscar los registros utilizando un lenguaje de consultas, en la actualidad SQL. La base de datos ofrece una manera de correlacionar la información de múltiples tablas.
La técnica de los datos sobre la normalización es la manera correcta de particionamiento de datos entre las mesas para minimizar la redundancia de datos y maximizar la velocidad de recuperación.
9. Seguridad

La autenticación se trata de verificar la identidad del usuario. A typical website prompts for a password. Un típico sitio web de instrucciones para una contraseña. La autenticación suele producirse sobre SSL (secure socket layer), una forma de transmitir información codificada sobre HTTP. La autorización se refiere a los permisos y es importante en sistemas corporativos, en particular las que definen los flujos de trabajo. El recientemente desarrollado OAuth protocolo ayuda a los servicios web para permitir a los usuarios el libre acceso a su información privada. T Así es como Flickr permite el acceso a fotografías individuales o conjuntos de datos.
Otra zona de seguridad es la protección de la red. Esto se refiere a sistemas operativos, configuración y monitoreo para frustrar los hackers. No sólo la red es vulnerable, cualquier pieza de software. Navegador Firefox, comercializados como la más segura, tiene que parche continuamente el código. Para escribir código seguro para su sistema requiere la comprensión detalles y posibles problemas.
8. Nubes de Computación

Nubes de computación surgió de la computación paralela, un concepto que muchos problemas se pueden resolver más rápido de ejecutar los cálculos en paralelo.
A Después vinieron los algoritmos paralelos grid computing, que se desarrolló paralelamente en los cálculos de inactividad de escritorio. Uno de los primeros ejemplos es SETI @ home proyecto de Berkeley, que utiliza ciclos de CPU de repuesto para crujido datos que provienen desde el espacio. Grid Computing es ampliamente adoptado por las sociedades financieras, que corren riesgo de cálculos masivos El concepto de subutilizados recursos, junto con el aumento de la plataforma J2EE, dio lugar a los precursores de la nube de computación: la virtualización de servidor de aplicaciones. La idea era ejecutar aplicaciones en la demanda y cambiar lo que está disponible, dependiendo de la hora del día y la actividad de los usuarios.
Hoy más vívido ejemplo de la nube de computación es Amazon Web Services, un paquete disponible a través de API. Amazon incluye la ofrenda de una nube de servicio (EC2), una base de datos para almacenar y servir grandes archivos multimedia (S3), un servicio de indexación (SimpleDB), y la cola de servicio (SQS). Estos primeros bloques ya la autonomía de una manera sin precedentes de hacer a gran escala de computación, y sin duda lo mejor está por venir.
7. Concurrencia

Concurrencia sobre el paralelismo es, pero dentro de la solicitud. La mayoría de las lenguas modernas tiene una construida en concepto de concurrencia; en Java, es aplicado mediante Threads.
Un clásico ejemplo de ello es la concurrencia del productor / consumidor, cuando el productor genera datos o tareas, y los lugares en que los hilos de los trabajadores a consumir y ejecutar. La complejidad en la programación concurrente se deriva del hecho de hilos a menudo tiene que funcionar sobre la base de datos común. Cada hilo tiene su propia secuencia de ejecución, pero los accesos de datos comunes. Uno de los más sofisticados concurrencia bibliotecas ha sido desarrollado por Doug Lea y ahora forma parte del núcleo de Java.
6. Caching

Caching viene con un costo. Sólo algunos subconjuntos de información puede almacenarse en la memoria. Los datos más común es la poda estrategia para desalojar a los temas que son menos utilizado recientemente (LRU). El prunning tiene que ser eficiente, no a disminuir el ritmo de aplicación.
Una gran cantidad de modernas aplicaciones web, incluyendo Facebook, contar con un sistema de caché distribuido llamado Memcached, desarrollado por Brad Firzpatrick cuando se trabaja en LiveJournal. La idea era crear un sistema de caché que utiliza la capacidad de memoria de repuesto en la red. T Hoy en día, hay Memcached bibliotecas populares para muchos lenguajes, como Java y PHP.
5. Hashing

Más allá de las básicas de almacenamiento de datos, hashes son también importantes en los sistemas distribuidos. La llamada uniforme hash se utiliza para asignar uniformemente datos entre ordenadores en una nube de bases de datos. Un sabor de esta técnica es parte de indexación de Google servicio; cada URL es hashed particular para ordenador.
Hash funciones pueden ser complejas y sofisticadas, modernas bibliotecas, sino tener un buen valor por defecto. Lo importante es cómo hashes de trabajo y la manera de sintonizar ellos para el funcionamiento máximo beneficio.
4. La complejidad algorítmica

Su código (casi) nunca han múltiples bucles anidados (un bucle dentro de un bucle dentro de un bucle). La mayoría del código escrito hoy debería utilizar tablas hash, simples listas por separado y bucles anidados.
Due to abundance of excellent libraries, we are not as focused on efficiency these days. Debido a la abundancia de excelentes bibliotecas, no somos tan centrado en la eficiencia en estos días. That’s fine, as tuning can happen later on, after you get the design right. Eso está bien, como puede suceder afinación más tarde, después de obtener el derecho de diseño.
Elegante algoritmos y el rendimiento es algo que no debería pasar por alto. Escribir compacto y legible el código ayuda a asegurarse de que sus algoritmos son limpias y sencillas.
3. Capas

Lakos sostuvo un buen software de la siguiente manera la forma de una pirámide, es decir, hay un aumento progresivo en los cummulative complejidad de cada componente, pero no en la complejidad de inmediato.Dicho de otra manera, un buen sistema de software se compone de pequeños bloques de construcción reutilizables, cada uno llevando su propia responsabilidad. En un buen sistema, no cíclico de las dependencias entre componentes están presentes y todo el sistema es una pila de capas de funcionalidad, formando una pirámide.
Lakos del trabajo fue un precursor de muchas novedades en la ingeniería de software, sobre todo Refactoring. La idea detrás de refactoring es continuamente esculpir el software para garantizar it’is estructuralmente sólida y flexible. Otra importante contribución fue hecha por el Dr Robert Martin Objeto de Mentor, que escribió sobre dependecies acíclicos y arquitecturas
Entre las herramientas que ayudan a los ingenieros hacer frente a la arquitectura del sistema se estructura 101 desarrollado por Headway software, y SA4J desarrollado por mi ex empresa, información de laboratorio, y ahora dispone de IBM.
2. Convenios y plantillas

Permitir la asignación de nombres a las convenciones de software de automatización. Por ejemplo, Java Beans marco se basa en una simple convención para nombrar getters y setters. Y canónico en del.icio.us URL: http://del.icio.us/tag/software tomar el usuario a la página que tiene todos los artículos etiquetados software.
Muchos software social utilizar convenciones de denominación de una manera similar Por ejemplo, si su nombre de usuario es johnsmith entonces probablemente tu avatar es johnsmith.jpg y su canal RSS es johnsmith.xml.
Naming conventions are also used in testing, for example JUnit automatically recognizes all the methods in the class that start with prefix test . Convenciones de nombres también se utilizan en los ensayos, por ejemplo, JUnit reconoce automáticamente todos los métodos de la clase que comienzan con el prefijo prueba.
Las plantillas no son C + + o lenguaje Java construye. Estamos hablando de archivos de plantilla que contienen variables y, a continuación, permitir que los objetos de carácter vinculante, la resolución y que hacen que el resultado para el cliente.
Cold Fusion es uno de los primeros en popularizar las plantillas para aplicaciones web. J Java seguido con JSP, y recientemente desarrollado Apache práctico de propósito general de plantillas para Java llamada Velocity. PHP puede ser usado como su propio motor de plantillas, ya que apoya la función eval (cuidado con la seguridad). Para la programación XML estándar es utilizar lenguaje XSL para hacer plantillas.
A partir de la generación de páginas HTML para el envío de mensajes de correo electrónico normalizado de apoyo, las plantillas son una ayuda esencial en cualquier sistema moderno de software.
1. Interfaces

Entre los muchos libros, Programación Ágil por el Dr Robert Martin destaca por centrarse en corregir las interfaces de modelado.
En primer lugar, nunca añadir los métodos que podrían ser útiles en el futuro. Sea minimalista, salir lo menos posible. En segundo lugar, no tener miedo a reconocer hoy que lo que hiciste ayer no fue la derecha. Esté dispuesto a cambiar las cosas. En tercer lugar, ser paciente y disfrutar el proceso.Hasta entonces, mantener iterating y no resolver.
Conclusión
Moderno ingeniería de software es sofisticado y poderoso, con décadas de experiencia, millones de líneas de código y el apoyo a unprecidented acceso a la nube de computación. Hoy en día, sólo un par de personas inteligentes pueden crear software que previamente requiere de los esfuerzos de decenas de personas. Pero un buen artesano todavía necesita conocer qué herramientas usar, cuándo y por qué.
En este puesto hemos debatido conceptos que son indispensables para ingenieros de software. Y ahora nos dicen por favor, lo que añadiría a esta lista. Comparta con nosotros lo encontrarás conceptos indispensables en su diario de viajes de ingeniería de software.
magen de crédito: cbtplanet.com
Via: ReadWriteWeb


Pienso diferente a las otras personas que han opinado. Me parece excelente el post. Sin embargo, creo que los conceptos fueron sacados de un sitio/libro en inglés y la traducción se vuelve algo confusa.
Repito, el post está magnífico. Excelente la información.
Saludos viperEF.
tal vez se necesiten mas que solo estas 10 cosas yo me encuentro en tercer semestre de ingenieria y pienso en otras cosas necesarias para llegar a ser un buen ingeniero
estoy estudiando computacion e informatica y lo que queria saber que es inportante para nuestra carrera para seguir especialisandome…
estoy empesando la carrera de ing. de sistemas y quiero saber mas aserca de mi carrera como cual es la base y que es lo basico que un ing. deve saber