¿Qué paradigma de lenguaje de programación se ajusta a qué trabajo?

StackOverflow https://stackoverflow.com/questions/188934

  •  06-07-2019
  •  | 
  •  

Pregunta

Hasta donde yo sé (no mucho, lo admito), los paradigmas de programación actualmente populares son orientados a objetos (Java, C #, Ruby) vs funcionales (F #). Como alguien que está familiarizado con el primer paradigma, tengo varias preguntas:

  • ¿Puede un programador simplemente seguir un paradigma toda su vida? O, en otras palabras, ¿se pueden reducir todos los problemas a clavos para un martillo?
  • Si no, ¿qué herramienta es adecuada para qué tipo de tarea? Por ejemplo: basado en web frente a escritorio, creando interfaces hermosas y receptivas, capaces de procesar datos rápidamente, etc.
  • ¿Alguna vez la gente necesitó aprender un nuevo paradigma? Para mis últimos dos trabajos, mis lugares de trabajo requerían Java y C #. ¿Hay lugares de trabajo que utilizan específicamente idiomas que no son OO?

Obviamente, no hay "mejor" idiomas, pero me pregunto si vale la pena invertir tiempo y energía para aprender un nuevo paradigma. Gracias de antemano!

¿Fue útil?

Solución

" O, en otras palabras, ¿todos los problemas pueden reducirse a clavos para un martillo? " Sí. Período. Cualquier lenguaje de programación con el que es probable que se encuentre será tan completo como todos los demás. En realidad, existe una definición formal de "integridad". para un lenguaje de programación.

" ¿Alguna vez la gente necesitó aprender un nuevo paradigma? " Siempre.

En realidad, hay un truco para seguir los altibajos de los "cambios de paradigma". En los últimos 30 años de mi carrera, he visto que la programación ha pasado de ser un modelo imperativo / de procedimiento relativamente simplista a varios modelos mucho más ricos que incluyen un mejor equilibrio entre el proceso y los datos.

He notado lo siguiente ...

Parte de la fuerza impulsora es la comunidad de inteligencia artificial. Muchos de estos " nuevos modelos " comenzó como esquemas de representación de conocimiento de IA. Obtuvieron tracción allí, luego llegaron a aplicaciones más convencionales.

El modelo de relación de entidad fue originalmente para la representación del conocimiento, no para transacciones comerciales. El modelo de Objeto, de manera similar, era para la representación del conocimiento. Entonces la gente de la simulación lo encontró. Ahora el resto de nosotros lo tenemos.

Aquí está mi conclusión.

El software es representación del conocimiento.

Su elección de Paradigma o Modelo o Enfoque o Estilo se basa en la respuesta a la siguiente pregunta:

" ¿Cómo puedo representar mejor este problema? "

Si el problema tiene objetos y relaciones, OO. Si el problema tiene algoritmos y transformaciones, mapas, filtros y reducciones, Funcional. Si el problema es dinámico, cambiante y flexible, dinámico. Si el problema es estático y aumentará rápidamente, estático.

Otros consejos

Vale la pena aprender paradigmas alternativos (OO, funcionales, de procedimiento, dinámicos, etc.) porque te ayudará a pensar en los problemas de diferentes maneras.

Por ejemplo, piense en la diferencia en resolver un recorrido transversal de un árbol de forma lineal (la primera forma en que lo hice) versus usar la recursividad. O la combinación de Google Map y Reduce para ayudarlos a indexar Internet.

Nuevas formas de pensar aplicadas a viejos problemas pueden ayudar a romper algunos de los problemas más difíciles.

El paradigma es independiente de un lenguaje. Puede desarrollar en estilo OO en C (eche un vistazo a GTK). Cuando programo en Java, uso principalmente un estilo funcional.

Vale la pena conocer tantos paradigmas como sea posible. Algunos problemas son triviales de resolver en un paradigma y requieren una elaboración delicada en otro.

Como ejemplo (trivial), compare las implementaciones de clasificación rápida en Java y Ocaml, o mejor aún, Haskell, en esta página: http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

(Eso no significa que funcional sea mejor. Hay problemas mejor resueltos con OO).

  

¿Se pueden reducir todos los problemas a clavos para un martillo?

Err sí. Puede resolver problemas con un solo martillo. Simplemente aserrar esa puerta por la mitad lleva mucho más tiempo.

  

¿Alguna vez la gente necesitó aprender un nuevo paradigma? Para mis últimos dos trabajos, mis lugares de trabajo requerían Java y C #. ¿Hay lugares de trabajo que utilizan específicamente idiomas que no son OO?

Los desarrolladores tienen que hacer esto cada 15-20 años más o menos.

Definitivamente, hay toda una industria de pequeñas empresas con sistemas basados ??en Access escritos con VBA procesal. (y creo que he trabajado para la mayoría de ellos). Los desarrolladores clásicos de ASP tienen que aprender ASP.NET. Los desarrolladores de Perl están aprendiendo Python. El desarrollo impulsado por lotes dio paso al desarrollo impulsado por eventos.

Creo que encontrarás respuestas en todo el tablero. Cuanto más trabajo, más encuentro que es 'útil'. para conocer algunos de los otros. Como desarrollador de C # / VB / SQL Server, me resulta más útil aprender un poco sobre F # y algunos de los otros lenguajes para obtener una amplia exposición, para descubrir realmente qué herramienta es la correcta ...

Las cosas dinámicas me asustan muchísimo, pero Ruby on Rails es, con mucho, el mejor sistema de desarrollo que he visto para cosas web. Sin embargo, no me siento cómodo con su uso para un proyecto de mantenimiento realmente grande y pesado porque es demasiado fácil alterar el significado del código existente, compilado y terminado. También es muy fácil para el estilo de codificación de una persona convertirlo en un nuevo idioma.

Dinámico / secuencias de comandos también es bueno saber para los administradores del sistema y cualquier persona que ejecuta un sistema Linux. Escribir un script rápido en BASH o Ruby supera al INFIERNO de intentar implementar la misma funcionalidad en Java o C ++.

OO hace que sea mucho más fácil entender grandes cantidades de código. Si tiene un equipo grande o varios equipos grandes y necesita dar una visión general rápidamente, OO hace que sea mucho más fácil describir y aislar una determinada funcionalidad. Debo decir CORRECTAMENTE CODIFICADO OO

Entiendo que funcional es bueno para la programación multiproceso ya que todo tiende a ser inmutable.

Desarrollar las habilidades de diseño y arquitectura con OOP en mente es el conjunto de habilidades más deseable para una gran carrera agnóstica de idiomas.

El beneficio cuando codifica en Oops es tanto para los otros miembros del equipo como para la organización en general. Debido a que el código será comprensible para todos y si los desarrolladores dejan el trabajo, la empresa no necesita preocuparse demasiado. En el otro caso, si sigue un estilo funcional, será muy difícil para los demás comprender lo que ha hecho.

Como la mayoría de los demás han dicho, generalmente puede usar cualquier lenguaje para resolver cualquier problema y generalmente puede escribir al estilo de un paradigma en otro.

Si se toma el tiempo de aprender a usar los diferentes paradigmas como están destinados, entonces aprenderá cosas diferentes sobre la representación del conocimiento y la resolución de problemas que pueden ser útiles en cualquier paradigma que esté usando en el futuro.

Si bien existe cierta alineación entre paradigmas y dominios, generalmente es mejor elegir un idioma basado en los detalles del entorno en el que su software necesita operar.

  • ¿Necesita ejecutarse en múltiples plataformas de escritorio?
  • Si se trata de una aplicación de escritorio, ¿debe tener una apariencia nativa?
  • ¿Es importante la iteración rápida de diseños?
  • ¿Cómo se debe mantener?
  • ¿Con qué sistemas de terceros necesita operar?
  • Conocimientos / habilidades / preferencias del programador existentes.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top