Martín Fowler | |
---|---|
Nacido | ( 18 de diciembre de 1963 )18 de diciembre de 1963 Walsall , Inglaterra, Reino Unido |
Educación | Universidad College de Londres ( licenciatura , 1986) [1] |
Ocupación(es) | Desarrollador de software, autor, orador público. |
Empleador | Pensamiento Funciona |
Sitio web | martinfowler.com |
Martin Fowler (18 de diciembre de 1963) es un desarrollador de software británico , [2] autor y orador público internacional sobre desarrollo de software, especializado en análisis y diseño orientado a objetos , UML , patrones y metodologías de desarrollo de software ágil , incluida la programación extrema .
Su libro Refactoring de 1999 popularizó la práctica de la refactorización de código . [3] En 2004 introdujo un nuevo patrón arquitectónico , llamado Presentation Model (PM). [4]
Fowler nació y creció en Walsall , Inglaterra, donde asistió a la Queen Mary's Grammar School para su educación secundaria. Se graduó en el University College de Londres en 1986. En 1994, se mudó a los Estados Unidos, donde vive cerca de Boston , Massachusetts , en el suburbio de Melrose . [1]
Fowler comenzó a trabajar con software a principios de los años 1980. Después de graduarse de la universidad en 1986, comenzó a trabajar en el desarrollo de software para Coopers & Lybrand hasta 1991. [5] En 2000 se unió a ThoughtWorks , una empresa de consultoría e integración de sistemas, [1] donde fue científico jefe. [6]
Fowler ha escrito nueve libros sobre el tema del desarrollo de software. Es miembro de la Agile Alliance y ayudó a crear el Manifiesto para el Desarrollo Ágil de Software en 2001, junto con otros 16 signatarios. [7] Mantiene un bliki , una mezcla de blog y wiki . Popularizó el término Inyección de Dependencia como una forma de Inversión de Control . [8] [9]
En su libro, Domain-specific language , Fowler analiza los lenguajes específicos de dominio , DSL. Se dice que los DSL se definen por ser lenguajes de programación componibles, con su enfoque en un dominio individual y con una expresividad limitada. [10] : 27 Se argumenta que los DSL pueden aumentar la productividad al eliminar el requisito de que el programador comprenda un lenguaje de programación completo, proporcionar un medio de comunicación con expertos en el dominio y separar la forma de ejecución de una tarea de la definición de una tarea en sí. [10] : 33 Estos beneficios se contrastan con el costo de aprender un nuevo lenguaje y construir las herramientas para este lenguaje, lo que aísla los resultados para diferentes lenguajes y las abstracciones utilizadas en los DSL no son adecuadas para una tarea. [10] : 39
Fowler introduce el concepto de DSL interno (o incrustado ) y externo , siendo un DSL interno un DSL que es un subconjunto de otro lenguaje y puede ser ejecutado por las herramientas para este lenguaje externo. Ruby y Lisp se dan como ejemplos de lenguajes donde los DSL internos son comunes. También introduce la idea del Modelo Semántico que define la ejecución de un DSL. [10] : 14 Se presentan varios ejemplos de DSL, incluyendo graphviz , un lenguaje para especificar gráficos a ser renderizados; JMock, un framework de simulación de Java; CSS , un lenguaje para especificar elementos estilísticos de un sitio web; HQL , un mapeador relacional de objetos en Java ; XAML , un lenguaje usado para especificar y cambiar interfaces gráficas de usuario ; FIT, un lenguaje para expresar escenarios de prueba; y make , una herramienta para construir software [10] : 147
El libro analiza la implementación de un DSL externo utilizando herramientas como analizadores sintácticos , analizadores léxicos , árboles de sintaxis abstracta y generación de código, lo que se conoce como "traducción basada en sintaxis" [10] : 219. Esto contrasta con la "traducción basada en delimitadores", que se dice que es más simple pero menos poderosa. Aquí el lenguaje es lo suficientemente simple como para ser interpretado dividiéndolo en delimitadores y cambiando la lógica en función de las entradas individuales. [10] : 201
Se discuten formas de implementar DSL internos, con atención a las llamadas de funciones anidadas, [10] : 357 secuencias de llamadas de funciones, [10] : 351 o encadenamiento de métodos [10] : 373 entre otros métodos.