programming languages - ¿Vale la pena aprender Ada en lugar de otros idiomas[c++, c#]?
programming-languages robotics (7)
Ada definitivamente vale la pena. Además de las 2 cosas escritas por Shark8, hay que agregar que casi todos los idiomas se centran en la facilidad de la escritura en lugar de la lectura (y la mayoría de las veces escribirá una vez y leerá muchas veces). Además, la cultura que rodea a Ada es bastante diferente de la corriente principal: se centra en el funcionamiento correcto de los programas y en la legibilidad de la fuente, en lugar de "piratear y hacer que funcione mientras se cuenta con la suerte de que no se introducirán errores".
En cuanto a la edad - oh, vamos - C es aún mayor. ¿Qué es tan importante acerca de la edad del lenguaje en sí? Debería echar un vistazo a lo que se incluyó en Ada 83 antes de poder hablar sobre la cuestión de la edad (pista: los idiomas principales comenzaron a alcanzar el conjunto de características de Ada 83 en la segunda mitad de los 90, y muchas características [especialmente los subtipos] aún no lo están en la corriente principal). Además del nuevo estándar de Ada es de 2012: si puedes decir que es viejo, entonces no sé qué es "nuevo".
Si voy a hacer robots, ¿qué idioma me recomiendan? En nuestra universidad podemos elegir entre varios idiomas. La mayoría de los estudiantes están eligiendo Ada solo porque nuestro profesor lo usa.
Después de algunas investigaciones descubrí que Ada es vieja. ¿Cuáles son tus pensamientos? ¿Vale la pena aprenderlo?
C ++ no es exactamente un pollo de primavera, ya sabes. Creo que es una década más joven que Ada.
Para empeorar las cosas, tanto C ++ como C # derivan el núcleo de su lenguaje de C, que es en realidad una década más antigua que Ada.
C fue diseñado para facilitar la construcción de compiladores ( no el trabajo del programador) en los días en que 16KB era una gran cantidad de RAM y los discos duros eran tan grandes como los acondicionadores de aire industriales. C ++ básicamente comenzó como bueno C de finales de los 60 con características OO activadas, y C # es esencialmente los ajustes de Microsoft a C ++ para que sea más similar a Java. En su núcleo, C # y C ++ son en realidad más antiguos que Ada.
Hay muchos nuevos lenguajes modernos para aprender (y en algún momento deberías aprenderlos). Sin embargo, C ++ y C # no son ellos.
Depende de lo que quieras hacer con este idioma. Lisp es incluso más viejo que Ada y se usa ampliamente en inteligencia artificial. Aprenda el idioma que desea, aprenda el idioma que le sea fácil de aprender y que le resulte más fácil comprender sus conceptos. Luego puedes ir más allá y aprender más idiomas.
El consejo de Peter Norvig es probablemente relevante aquí:
Cuando se me pregunta "¿qué sistema operativo debo usar, Windows, Unix o Mac?", Mi respuesta suele ser: "usa lo que usen tus amigos". La ventaja que obtiene al aprender de sus amigos compensará cualquier diferencia intrínseca entre el sistema operativo o entre los lenguajes de programación.
Enseñe tu programación en diez años
Todo el ensayo es una buena lectura.
Por cierto, Ada fue el primer idioma que aprendí. El aprendizaje de Ada primero tenía una ventaja importante: nadie usa Ada, por lo que me vi obligado a aprender otro idioma antes de hacer cualquier otra cosa y, por lo tanto, obtener una perspectiva. Uno de los peores problemas que pueden tener los programadores principiantes es la creencia de que la forma en que se hacen las cosas en su primer idioma es simplemente la manera en que se hacen las cosas. Aprender un nuevo idioma es fácil e inmensamente valioso.
Sí. Muchísimo, en mi opinión.
Ada es muy buena en dos puntos que a menudo se pasan por alto en otros lenguajes de programación:
- El sistema genérico: los paquetes, las funciones y los procedimientos pueden ser todos genéricos. Esto funciona en conjunto particularmente bien para incorporar el principio DRY [
Don''t Repeat Yourself
]. Sí, puede excederse en los genéricos, pero lo que he visto en proyectos (en otros idiomas) fue que la programación de cortar y pegar parece ser más común. [y eso solo introduce múltiples puntos de falla si es necesario reparar un error en ese lugar del código] - Multitarea nativa. Una de las grandes cosas de una función de tarea de nivel de idioma es que el multihilo no se siente "enganchado" y no es una extensión difícil de manejar, pero se integra en el idioma.
Dicho esto, hay otras buenas razones para aprender / usar Ada. Uno es el compilador selectivo, al ser tan exigente que te obliga a comenzar a pensar de manera que naturalmente reduzca los errores de programación. (Al igual que la prohibición sobre and
y or
en el mismo condicional.)
Otro es el concepto de subtipos; los subtipos son opuestos a los objetos en OOP, en lugar de separar las desaprovechaciones adicionales a las que va, restringe el tipo (valores aceptables) cuanto más se aleja del tipo base. {Piénsalo en términos de conjuntos apropiados; Integer es su tipo base, Natural son sus integers no negativos, y Positive son sus enteros positivos ... y con Ada 2012, puede tener interesantes exclusiones en sus subtipos, digamos Primes que son subtipos de Positivos (perdón por ser un un poco vago en ese último punto; todavía estoy aprendiendo las cosas del 2012).
Con Ada 2012, también puede tener condiciones previas y posteriores en sus subprogramas; esto solo puede hacer que sus bibliotecas sean más estables. (Como puede ser null-excluyendo los punteros.)
Si bien Shark8 tiene algunos puntos muy buenos sobre Ada como lenguaje en general, la pregunta fue específicamente sobre robótica. En este sentido, diría "no te molestes". Después de más de 10 años de experiencia en todo tipo de robótica que van desde Lego hasta los brazos y manos de robots de vanguardia, nunca he visto un sistema robótico que utilizara Ada.
Al final del día, la robótica es difícil. Tan duro que no vas a enfrentarlo todo por tu cuenta. Y eso significa aprovechar muchas bibliotecas y marcos existentes. Y esto significa que estará usando sus idiomas, interfaces, etc. Es probable que su sistema robótico incluya una montaña de códigos, de los cuales solo una pequeña fracción será personalizada para su aplicación específica. Si bien es posible escribir tu pequeña parte en Ada y hacer alguna envoltura o interfaz para que pueda jugar bien con el resto del código. Pero creo que encontrará que es mucho trabajo con muy poco beneficio.
Al embarcarme en un nuevo proyecto de robótica, adopto un enfoque pragmático. Miro las herramientas, bibliotecas y utilidades existentes y elijo la que mejor se adapte a mis necesidades. Entonces uso cualquier lenguaje que haga. Y el 95% del tiempo que es C ++ o Python.
Si su maestro y la mayoría de sus compañeros de estudios usan Ada, probablemente es mejor ir con Ada. Es un lenguaje muy bueno, tanto para programas pequeños como para grandes. Es muy legible y lo protege (hasta cierto punto) contra muchos errores comunes.
Ada es para la ingeniería de software. Como dijo darkestkhan, no es un lenguaje de "piratear y esperar lo mejor".
El consejo de Paul Stansifer es muy bueno: aprender varios idiomas. Asegúrese de tener un montón de herramientas a su disposición, no se limite a un solo idioma. La perspectiva que obtienes al aprender diferentes idiomas es muy valiosa. Definitivamente hay más de una forma de despellejar a un gato: por ejemplo, eche un vistazo a Haskell. Obtendrás una nueva perspectiva sobre cómo resolver problemas.
La sintaxis del lenguaje es la que menos aprende a programar. La parte difícil es aprender a modelar problemas complejos del mundo real en algo que tenga sentido en el ámbito muy limitado de un lenguaje de programación. Con su sólido sistema de tipos, modelo de tareas, genéricos y herramientas sólidas para la programación en tiempo real y concurrente, Ada es ideal para este trabajo.
Ya que está preguntando específicamente sobre robótica, un buen libro para obtener podría ser "Construir aplicaciones paralelas, integradas y en tiempo real con Ada" por John W. McCormick, Frank Singhoff y Jerome Hugues. Es una muy buena lectura.
http://www.cambridge.org/gb/knowledge/isbn/item5659578/?site_locale=en_GB