¿Qué piensan generalmente los ingenieros de software del lenguaje de programación Kotlin?

Kotlin no es revolucionario (con la posible excepción de su manejo nulo), pero se siente como una fusión muy cuidadosa de algunas de las mejores características de otros idiomas. Su enfoque es muy pragmático y enfatiza la interoperabilidad con Java y la falta de sorpresa.

Sintácticamente se parece mucho a Scala pero no tiene las capacidades de coincidencia de patrones más avanzadas (¿todavía?) Al igual que Scala, está tipado estáticamente, permite la sobrecarga del operador, enfatiza la inmutabilidad y proporciona soporte de primera clase para tipos de valores inmutables, es bueno para escribir estáticamente cumplió DSL y tiene un sistema de tipo muy robusto.

Algunas decisiones se equivocan del lado del pragmatismo y la interoperabilidad. Por ejemplo, donde Scala proporciona su propia biblioteca de colecciones que funciona excepcionalmente bien y tiene una inmutabilidad predeterminada, pero requiere que use funciones de conversión o implique en cualquier momento que desee interactuar con las API de Java La API de la colección de Kotlin envuelve las colecciones normales de Java, proporcionando una fachada inmutable pero permitiendo interoperabilidad transparente con Java. Puede que te guste o no. Hago.

Kotlin tampoco tiene problemas que encuentro, aunque convenientes y elegantes en Scala, no mejoran la legibilidad o la comprensión del código. Las funciones de extensión con alcance de Kotlin se adaptan a algunos usos de implicidades.

Las funciones de extensión se sienten como la buena parte de la metaprogramación de Groovy sin nada del dolor considerable. Las funciones de extensión se compilan y envían estáticamente. Tienen un alcance estricto donde los parches de mono de metaclase tienden a filtrarse fuera del contexto donde se necesita con resultados sorprendentes.

Comparando Kotlin con Java, las principales cosas que encuentro mejoradas incluyen:

  • Excelente inferencia de tipos que elimina gran parte del desorden y la redundancia del código.
  • Escritura sensible al flujo, lo que significa que prácticamente nunca necesita lanzar.
  • Tipos de valores inmutables de primera clase. Doloroso y tedioso en Java a menos que use la anotación @Value de Lombok.
  • Inmutabilidad predeterminada para colecciones.
  • Interpolación de cuerdas.

La interpolación de cadenas evita la creación de un nuevo tipo de cadena como GString de Groovy, GString que significa que no hay GString extrañas como una GString termina como una clave de mapa que luego no puede recuperar usando una String .

Luego está la mayor innovación de Kotlin (al menos creo que es una innovación, no estoy familiarizado con otro idioma que no sea Ceilán que lo tenga): seguridad nula. Kotlin trata los tipos anulables como tipos de opciones pero sin ninguna sobrecarga en el envoltorio y desenvolvimiento. Esto evita tantos problemas y es completamente compatible con las API de Java, por lo que no tiene ninguno de los debates “deberíamos o no deberíamos adoptar” Optional que tiene con Java 8.

Nuevamente, si eres un purista, eso puede sonar mal pero es práctico como el infierno. Prefiero usar tipos de opciones.

En general, no puedo pensar en otro lenguaje JVM que preferiría usar. Java 8 es una mejora significativa con respecto a las versiones anteriores y, junto con Lombok, es tolerable, pero aún tiene una serie de cosas que me frustran. Me gusta Scala pero no me gusta todo. Scala es un lenguaje tan grande que las ideas de dos personas sobre lo que cuenta como idiomático pueden ser totalmente diferentes. Si pudiera elegir un lenguaje JVM para trabajar día a día en este momento sería Kotlin.

Todos piensan que pueden escribir su propio lenguaje de programación, y será mejor que lo que existe. Por lo tanto, hay un millón de lenguajes de programación que son X con Y, donde X es un lenguaje popular e Y es una nueva característica.

El mejor de estos lenguajes son bancos de pruebas útiles para la función Y, pero muy pocos son un salto suficiente para que valga la pena adoptarlos a largo plazo. Es por eso que solo hay media docena de idiomas populares y otros 1,000 idiomas que brillan intensamente por un corto tiempo y luego se oscurecen.

Invierta en aprender dos o tres de los idiomas más populares. En este momento diría Java, C ++ y Python, tal vez también javascript. No pierdas el tiempo en un advenedizo hasta que tengas suficiente experiencia para elegir un ganador de manera confiable. Excepto que estarás retirado. Suspiro.

Creo que es un lenguaje hermoso. Es limpio y elegante y sin toda la complejidad de Scala. Es lo que debería haber sido Scala. Me encantaría usar Kotlin para todo el desarrollo si solo tuviera como objetivo las aplicaciones de escritorio y Android. Sin embargo, necesito un código que se pueda migrar automáticamente a otras plataformas, como JavaScript e iOS, por lo que me quedo con Java.

More Interesting

¿Qué bibliotecas de Javascript usan los ingenieros de software?

Como programador, ¿cómo lidias con estar siempre atrasado en lo que quieres / necesitas aprender?

¿Cómo es la vida de un ingeniero de software en Bangalore?

Como ingeniero de software que deja la industria para seguir su pasión en las finanzas como analista (banca de inversión / capital privado), ¿qué último consejo le daría?

¿Cuáles son las especificaciones mínimas requeridas en una computadora portátil para un ingeniero de software?

¿Cuáles son los diferentes tipos de puestos de ingeniería de software y en qué se diferencian?

Los ingenieros de software que trabajan los fines de semana están creando un entorno donde el trabajo en el fin de semana se considera normal. ¿Qué podemos hacer al respecto?

¿India necesita un mayor número de ingenieros?

Si los ingenieros de software son los más venerados en la era de la información, ¿qué profesión dominará la próxima revolución económica?

Como ingeniero de software que ya trabaja, ¿cuánto tiempo tomaría ser contratado por Google y luego trabajar en el equipo de Angular?

¿Cuáles son los mejores equipos de ingenieros de software en Google?

¿Debo comenzar a aprender habilidades para programas de recompensas de errores o habilidades de ciencia de datos?

¿Debo hablar con mi gerente acerca de no obtener una promoción de ingeniero de software?

¿Será necesario conocer el aprendizaje automático para todos los ingenieros de software en el futuro cercano? ¿Si no, porque no? ¿Será tan importante como conocer algoritmos, estructuras de datos, SO o bases de datos?

Soy un graduado en informática de 23 años. Pero tengo poco conocimiento de programación. ¿Cómo empiezo y qué debo aprender?