2012-09-17 9 views
18

Si voy a hacer robots, ¿qué idioma me recomiendan? En nuestra universidad podemos elegir entre varios idiomas. La mayoría de los estudiantes eligen Ada solo porque nuestro maestro lo usa.¿Vale la pena aprender Ada en lugar de otros idiomas [C++, C#]?

Después de algunas investigaciones descubrí que ada es viejo. ¿Cuáles son tus pensamientos? ¿Vale la pena aprenderlo?

+12

En cuanto a 'viejo' - La última revisión de Ada es Ada 2012. – NWS

+1

¿Por qué "en vez"? ¿Por qué no "al costado"? – rightfold

+0

C++ no es viejo? Está bien, está bien, es más joven que ADA. Por tres años. : D –

Respuesta

24

Sí. Mucho más, en mi opinión.

Ada es muy bueno en dos puntos que a menudo se pasa por alto en otros lenguajes de programación:

  • El sistema genérico: paquetes, funciones, procedimientos y todo puede ser genérico. Esto funciona especialmente bien para incorporar el principio DRY [Don't Repeat Yourself]. Sí, usted puede ir por la borda en genéricos, pero lo que he visto en (otros idiomas) proyectos es que la programación de cortar y pegar parece ser más común. [y eso solo introduce múltiples puntos de falla si un error necesita reparación en ese lugar de código.]
  • Multitarea nativa. Una de las mejores cosas acerca de una función de asignación de tareas a nivel de lenguaje es que el multihebra no se siente 'pegado' y no es una extensión difícil de manejar, sino que está integrada en el lenguaje.

Dicho esto, hay otras buenas razones para aprender/usar Ada. Uno es el compilador quisquilloso, al ser tan quisquilloso te obliga a comenzar a pensar de maneras que naturalmente reducen los errores de programación. (Como la prohibición en and y or en el mismo condicional.)

Otro es el concepto de subtipos; los subtipos son lo opuesto a los objetos en OOP, en lugar de ramificar los deservicios adicionales, reduce el tipo (sus valores aceptables) cuanto más se aleja del tipo base. {Piénselo en términos de conjuntos adecuados; El entero es tu tipo base, Natural son tus enteros no negativos, y Positivo son tus enteros positivos ...y con Ada 2012, puede tener exclusiones interesantes sobre sus subtipos, por ejemplo, Primes que son subtipos de Positivos (lo siento por ser un poco vago en ese último punto; todavía estoy aprendiendo las cosas de 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 null-excluyendo punteros.)

1

Depende de lo que quieras hacer con este idioma. Lisp es incluso más antiguo que Ada y se usa ampliamente en inteligencia artificial. Aprenda el idioma que desee, aprenda el idioma que le resulte fácil de aprender y fácil para usted comprender sus conceptos. Entonces puedes ir más allá y aprender más idiomas.

consejos
+0

Bueno, vamos a hacer algunos robots avanzados que usan sensores, motores y otros componentes electrónicos. ¿No es mejor comenzar con C# por ejemplo y aprenderlo completamente en lugar de aprender un poco de ada y un poco de otros idiomas? –

+1

@ Alex90 - No vas a aprender ningún idioma completamente de uno o dos pequeños proyectos escolares. –

19

Peter Norvig es probablemente relevante aquí:

A la pregunta "¿qué sistema operativo se debe utilizar, Windows, Unix o Mac?", Mi respuesta es por lo general: "el uso lo que sus amigos usan." 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.

Teach Yourself Programming in Ten Years

todo el ensayo es una buena lectura.

A propósito, Ada fue el primer idioma que aprendí. Aprender Ada primero tuvo una gran ventaja: nadie usa Ada, por lo que me vi obligado a aprender otro idioma antes de hacer cualquier otra cosa, y de ese modo obtuve 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.

+5

+ 1 para la perspectiva en otros idiomas! – NWS

4

Ada definitivamente lo vale. Además de las 2 cosas escritas por Shark8, hay que agregar que casi todos los idiomas se enfocan en la facilidad de escritura en lugar de leer (y muy a menudo vas a escribir una vez y leer muchas veces). También la cultura que rodea a Ada es bastante diferente de la corriente principal, centrándose en el funcionamiento correcto de los programas y 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 más viejo. ¿Qué es tan importante sobre la edad del lenguaje en sí? Debería ver primero lo que se puso en Ada 83 antes de que pueda hablar sobre la edad como tema (pista: los principales lenguajes comenzaron a llegar al conjunto de características de Ada 83 en la segunda mitad de los 90, y muchas características [notablemente subtipos] aún no son en la corriente principal). Al lado del más nuevo estándar de Ada es de 2012 - si puede llamar así de viejo, entonces no sé qué es "nuevo".

8

Si el profesor y la mayoría de sus compañeros de estudios utilizan Ada, que es probablemente el mejor ir con Ada. Es un lenguaje muy bueno, tanto para programas de pequeña como de gran escala. Es muy legible y te protege (hasta cierto punto) contra muchos errores comunes.

Ada es para el software ingeniería. Como dijo Darkestkhan, no es un lenguaje "hackeo y esperanza para el mejor".

El consejo de Paul Stansifer es muy bueno: aprender varios idiomas. Asegúrese de tener muchas 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 manera de despellejar a un gato: echa un vistazo a Haskell, por ejemplo. Obtendrás una perspectiva completamente nueva sobre cómo resolver problemas.

La sintaxis del lenguaje es lo menos que se puede aprender a programar. La parte difícil es aprender cómo modelar problemas complejos del mundo real en algo que tenga sentido en el ámbito muy limitado de un lenguaje de programación. Con su potente sistema de tipos, modelo de tareas, genéricos y herramientas sólidas para la programación simultánea en tiempo real, Ada es ideal para este trabajo.

Como usted pregunta 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

3

C++ no es exactamente un pollo de primavera 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 en realidad es una década anterior que Ada.

C fue diseñado para hacer más fácil la construcción de compiladores (no el trabajo del programador) de vuelta en los días en que era un montón de 16KB de RAM y discos duros eran tan grandes como los acondicionadores de aire industriales. C++ básicamente comenzó como una buena vieja C de finales de los 60 con las características OO unidas, y C# es esencialmente ajustes de Microsoft a C++ para hacerlo más parecido a Java. En su esencia, C# y C++ son en realidad más antiguos que Ada.

Hay una gran cantidad de nuevos lenguajes de cadera que hay que aprender (y en algún momento se debe aprender de ellos). Sin embargo, C++ y C# no son ellos.

2

Mientras Shark8 tiene algunos muy buenos puntos a Ada como lenguaje en general, la cuestión era específicamente sobre robótica. En este sentido, yo diría "no te molestes". Después de más de 10 años de experiencia haciendo todo tipo de robótica que van desde Lego hasta armas y manos robóticas de última generación, nunca había visto un sistema robótico que utilizara Ada.

Al final del día, la robótica es difícil. Es tan difícil que no vas a abordar todo por tu cuenta. Y eso significa aprovechar muchas bibliotecas y marcos existentes. Y esto significa que usará sus idiomas, interfaces, etc. Su sistema robótico probablemente incluirá una montaña de código, de la cual solo una pequeña fracción será personalizada para su aplicación específica. Si bien es posible escribir su pequeña parte en Ada y hacer una envoltura o interfaz para que pueda jugar bien con el resto del código. Pero creo que encontrarás que es mucho trabajo con muy poco beneficio.

Cuando me embarco en un nuevo proyecto de robótica, tomo un enfoque pragmático. Miro las herramientas, bibliotecas y utilidades existentes y selecciono la que mejor se adapta a mis necesidades. Luego uso cualquier lenguaje que haga. Y el 95% del tiempo es C++ o Python.

+5

En este caso, su propia lógica "pragmática" argumentaría * para * Ada, ya que eso es lo que el maestro y la mayoría de los otros estudiantes están usando. –

Cuestiones relacionadas