He leído algunos artículos en Internet sobre la elección del lenguaje de programación en la empresa. Recientemente, muchos lenguajes de tipo dinámico han sido populares, es decir, Ruby, Python, PHP y Erlang. Pero muchas empresas aún se quedan con lenguajes tipados estáticos como C, C ++, C # y Java.
Y sí, uno de los beneficios de los lenguajes tipados estáticos es que los errores de programación se detectan antes, en tiempo de compilación, en lugar de en tiempo de ejecución. Pero también hay ventajas con los lenguajes de tipo dinámico. ( más en Wikipedia )
La razón principal por la cual las empresas no comienzan a usar lenguajes como Erlang, Ruby y Python, parece ser el hecho de que son de tipo dinámico. Esa también parece ser la razón principal por la cual las personas en StackOverflow deciden en contra de Erlang. Vea ¿Por qué decidió "en contra" de Erlang ?
Sin embargo, parece haber una fuerte crítica contra el tipeo dinámico en las empresas, pero realmente no entiendo por qué es tan fuerte.
Realmente, ¿por qué hay tanta crítica contra la tipificación dinámica en las empresas? ¿Realmente afecta tanto el costo de los proyectos o qué? Pero tal vez me equivoque.
dynamic
y comienzas a usarlo. No es más detallado que las llamadas a métodos normales o las sobrecargas de operadores.Respuestas:
Sí, creo que lo hacen.
Hay algunas razones que deben considerarse en la selección de un idioma para un nuevo proyecto:
while(1)
...Si puede suponer que la organización con la que está trabajando tiene un principio de "Avanzar" (Hay un término contable para esto), y no decidirá al azar no trabajar en el software, entonces tiene un caso mucho mejor para utilizando el software Dado que no hay ventas de grandes empresas (lo que implica asumir la responsabilidad de mantenerlo) Python / Perl / $ dynamic_language, reduce considerablemente el riesgo.
En mi experiencia, los mantenedores de código abierto a menudo tienen un problema con asumir la responsabilidad total de las correcciones de errores y lanzar actualizaciones. "¡Es gratis, TÚ trabajas en ello!" no es una respuesta aceptable para la mayoría de las empresas (no son sus competencias básicas, entre otras cosas).
Por supuesto, no estoy hablando del mundo de las aplicaciones web / startup, que tiende a jugar con reglas de alto riesgo / alta recompensa y está muy abierto a mantenerse en el borde de la tecnología.
fuente
Le está dando demasiado crédito técnico a los tomadores de decisiones empresariales. Hay un viejo dicho, "Nadie fue despedido por comprar IBM". Si tomas una ruta diferente y las cosas se ponen difíciles (siempre lo hacen), nadie quiere arriesgarse a ser culpado. Cumplir con los estándares y culpar a alguien más.
Hay muchas compañías más jóvenes que eventualmente se convertirán en las empresas del mañana y usarán esos idiomas.
¡Y no olvidemos las miles de líneas de código escritas en VBA!
fuente
La razón por la cual las empresas usan C, C ++, C # y Java no se debe a que estén tipadas estáticamente (al menos no directamente). Los encargados de tomar decisiones empresariales no están haciendo este tipo de elecciones sobre la base de una comparación objetiva de los sistemas de tipos, se lo aseguro.
Las empresas hacen cuidado acerca de:
Personalmente, creo que si desea utilizar lenguajes dinámicos en la empresa, su mejor oportunidad es utilizar algo que se apoye en un ecosistema empresarial existente. Los más notables son los nuevos lenguajes dinámicos de JVM: por ejemplo, JRuby, Groovy, Clojure. En lo que respecta a la gestión de TI, estas son opciones de lenguaje dinámico "seguras" porque operan dentro y juegan muy bien con el resto del ecosistema empresarial de Java.
fuente
Creo que esta es solo su principal excusa. La verdadera razón es que las empresas realmente no los toman tan en serio y sienten que tal vez son demasiado aficionados. Java y .NET son "nombres de grandes empresas", tienen buen marketing comercial, atención al cliente comercial y, por lo tanto, se los toma muy en serio.
Es lamentable que prácticamente no exista un lenguaje de tipo estático que sea tan popular como los nombres de las grandes empresas. ¿Por qué los entornos de programación de código abierto / software libre casi siempre se escriben dinámicamente? Esto podría indicar que un lenguaje de tipo estático en realidad no es tan fácil de hacer, y que el tipeo dinámico es un "truco de hombre perezoso". Si ese es el caso, las empresas que deciden en contra de los idiomas de tipo dinámico podrían realmente tener un punto.
fuente
EDITAR: Debo mencionar que mi lenguaje de programación principal en este momento es Python, que se escribe dinámicamente. Personalmente, me encanta la libertad que conlleva no tener que declarar previamente las variables, pero a veces, sería bueno especificar (por ejemplo) qué tipo de parámetros toma una función para detectar errores temprano en lugar de tarde.
fuente
Los lenguajes tipados dinámicamente son percibidos (por algunos programadores / jefes) para producir código que no funciona tan bien. El hecho de que un programa escrito dinámicamente compila le dice muy poco acerca de su corrección. El hecho de que un lenguaje estáticamente compilado te dice mucho más. (Por otro lado, todavía hay un largo camino entre las compilaciones y hace lo correcto, por lo que esto podría ser menos significativo de lo que parece)
Los lenguajes de tipo dinámico se perciben como lenguajes de secuencias de comandos. Nunca escribirías una aplicación en bash o en un archivo por lotes. Todos los idiomas escritos dinámicamente tienden a agruparse en esa categoría (injustamente).
Los idiomas escritos dinámicamente son más lentos que los idiomas escritos estáticamente. (Pero veremos qué tan bien el trabajo en JIT cambia eso)
fuente
Nota: esto es principalmente subjetivo y se basa en mis experiencias e impresiones.
Los idiomas escritos dinámicamente son muy diferentes de los idiomas escritos estáticamente. Estas diferencias probablemente se vuelven más importantes en el software empresarial pesado que en la mayoría de las otras aplicaciones.
Los lenguajes de tipo estático tienden a ser muy prescriptivos. Un método solo tomará datos que coincidan exactamente con su firma. Los niveles de acceso tienden a ser muy importantes y las interfaces se definen explícitamente, con restricciones detalladas pero inequívocas para aplicar esas definiciones.
Los lenguajes escritos dinámicamente, por otro lado, son muy pragmáticos. Las conversiones de tipos a menudo suceden implícitamente, las funciones incluso pueden jugarse si proporciona el tipo de entrada incorrecto siempre que se comporte lo suficientemente similar. En lenguajes como Python, incluso los niveles de acceso se basarán en el contrato en lugar de las restricciones técnicas (es decir, solo
private
porque le dicen que no lo use y tiene un nombre curioso).Muchos programadores prefieren lenguajes dinámicos porque (posiblemente) permiten la creación rápida de prototipos. El código a menudo termina más corto (aunque solo sea por la falta de declaraciones de tipo) y si quiere violar el protocolo adecuado porque necesita una solución rápida y sucia o quiere probar algo, eso es fácilmente posible.
Ahora, la razón por la que las empresas "empresariales" a menudo prefieren los idiomas de tipo estático es exactamente que son más restrictivas y más explícitas sobre esas restricciones. Aunque en la práctica, incluso el código escrito estáticamente puede ser roto por idiotas con un compilador, muchos problemas serán mucho más visibles mucho antes en el proceso (es decir, antes del tiempo de ejecución). Esto significa que incluso si la base de código es grande, monolítica y compleja, se pueden detectar muchos errores fácilmente, sin tener que ejecutar el código o enviarlo al departamento de control de calidad.
La razón de que el beneficio no supere las desventajas para muchos programadores fuera de ese entorno es que estos son errores que a menudo se detectarán fácilmente mediante una inspección exhaustiva del código o incluso al intentar ejecutarlo. Especialmente cuando se sigue una metodología basada en pruebas, estos errores a menudo se vuelven triviales y fáciles de solucionar. Además, con muchas de estas compañías que tienen un ciclo de lanzamiento mucho más corto, la productividad es a menudo más importante que la rigidez y los desarrolladores mismos están realizando muchas pruebas (básicas).
La otra razón por la que las corporaciones empresariales no usan mucho los idiomas escritos dinámicamente es el código heredado. Por tonto que nos parezca a los nerds, las grandes corporaciones a menudo se apegarán a soluciones que funcionen, incluso si ya han pasado su vida útil. Esta es la razón por la cual tantas compañías importantes aplican Internet Explorer 6 y son tan lentas para actualizar sus sistemas operativos. Esta es también la razón por la que a menudo escriben código nuevo en lenguajes "antiguos" (por ejemplo, versiones antiguas de Java): es mucho más fácil agregar algunas líneas de código a un software que no está vivo que obtener la aprobación para una reescritura completa en un nuevo idioma.
tl; dr: los lenguajes estáticos se parecen más a la burocracia, por lo que a los gerentes empresariales les gustan más.
fuente
+
toma números y los agrega, si desea concatenación necesita usar.
; en JS, ambas operaciones comparten el mismo operador: si no sabe cómo se comportarán sus valores, se espera que los convierta explícitamente. Por supuesto, esto también tiene que ver con la escritura suelta frente a la escritura estricta (Python es aún más estricto), pero básicamente debe asegurarse de que sus valores tengan el tipo correcto o hacer que sus operaciones impongan los tipos esperados.No, no creo que los lenguajes mecanografiados dinámicamente merezcan todas las críticas. (O, si lo prefiere, se merecen tanta crítica como los lenguajes estáticamente escritos).
En mi experiencia (y no intento intentar generalizar esta afirmación), los programadores que critican los lenguajes dinámicos no los han usado. La conversación suele ser "pero con la escritura estática, el compilador detecta tantos errores". y digo "bueno, eso no es un problema, en mi experiencia". (Por lo general, los otros programadores son de Java, Delphi o antecedentes similares; no conozco a ningún programador de Haskell o ML).
La única cosa que realmente me se queja es cuando las reclamaciones alguien que la técnica no pueden Foo posiblemente pueden hacer (o podrían ser muy difícil de hacer) en un lenguaje de tipos dinámicos ... cuando esa técnica fue inventada en, por y para un tipo dinámico idioma. IDEs? Charla. Refactorización automática? Charla. Llamadores de / implementadores de? Charla.
fuente
Las empresas simplemente no están adoptando nuevos lenguajes y herramientas lo suficientemente rápido y hay buenas razones para ello. Pero, cuando una de las herramientas principales como C # implementa algunas de estas características, se introducirán en las empresas principales ...
fuente