10 conceptos que todo Ingeniero de Software debe conocer

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:

  1. Interfaces
  2. Convenios y plantillas
  3. Capas
  4. La complejidad algorítmica
  5. Hashing
  6. Caching
  7. Concurrencia
  8. Nubes de Computación
  9. Seguridad
  10. 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 seguridad es un tema amplio que incluye la autenticación, autorización, y la transmisión de información.

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

En nuestra reciente post Para Llegar A través de El cielo de cómputo Nubes hablábamos de cómo las nubes de computación está cambiando la manera en que entregamos a gran escala de aplicaciones web. Masivamente paralelo, la computación barata nube reduce los costos y tiempo de salida al mercado.

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

La concurrencia es un tema muy ingenieros obtener mal, y understandibly es así, porque el cerebro hace malabares con muchas cosas a la vez y en las escuelas el pensamiento lineal se hace hincapié. Yet concurrency is important in any modern system. Sin embargo, la concurrencia es importante en cualquier sistema moderno.

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

No moderno sistema web funciona sin una caché, que es una en-tienda que la memoria tiene un subconjunto de información normalmente almacenada en la base de datos. La necesidad de caché viene del hecho de que la generación de resultados basados en la base de datos es costoso. Por ejemplo, si usted tiene un sitio web que las listas de libros que eran populares la semana pasada, más le quiere calcular esta información una vez y lo pone en caché. Las exigencias de usuarios buscar datos de la caché en vez de golpear la base de datos y la regeneración de la misma información.

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

La idea detrás de hashing es rápido acceso a los datos.Si los datos se almacenan en secuencia, el tiempo para encontrar el tema es proporcional al tamaño de la lista. Para cada elemento, un hash calcula un número, que se utiliza como un índice en la tabla. Habida cuenta de una buena función hash que se extiende de manera uniforme los datos a lo largo de la mesa, ver el tiempo de seguimiento es constante. Perfeccionamiento de hashing es difícil y para hacer frente a implementaciones que hashtable apoyo colisión de resolución.

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

Hay sólo un puñado de cosas que los ingenieros deben saber acerca de la complejidad algorítmica. Si algo tiene O (n) es lineal en el tamaño de los datos. O(n^2) is quadratic. O (n ^ 2) es cuadrática. Utilizando esta notación, usted debe saber que buscar a través de una lista es O (n) y binarios de búsqueda (a través de una lista ordenada) es log (n). Y la clasificación de n elementos tendría n * log (n) el tiempo.

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

Capas es probablemente la forma más fácil de discutir la arquitectura del software.En primer lugar, recibió una atención seria cuando John Lakos publicó su libro sobre el gran escala de C + +. El libro presenta el concepto de capas. El método es la siguiente. Para cada componente de software, contar el número de otros componentes, se basa en. . Ese es el indicador de cuán complejo es el componente.

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

Convenciones de nombres y plantillas básicas son las más pasado por alto los patrones de software, pero probablemente el más poderoso.

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

El concepto más importante en el software es la interfaz. Cualquier buen software es el modelo de un real (o imaginario) del sistema. Understanding how to model the problem in terms of correct and simple interfaces is crucial. Entender cómo modelo el problema en términos de correcta y simple interfaces es crucial. Lotes de los sistemas sufren de los extremos: clumped, largas código abstracciones con poca, o un sistema excesivamente diseñado con una complejidad innecesaria y sin utilizar código.

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

4 opiniones en “10 conceptos que todo Ingeniero de Software debe conocer”

  1. 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.

  2. 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

  3. estoy estudiando computacion e informatica y lo que queria saber que es inportante para nuestra carrera para seguir especialisandome…

  4. 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

Deja un comentario