2010-03-17 8 views
14

Soy un profesor (instructor) de CS en la universidad. El curso se basa en Cormen y Knuth y los algoritmos de los programas de los estudiantes en C++. Pero a veces es bueno mostrar cómo funciona un algoritmo o simplemente un resultado de la tarea a través de GUI. También en mi opinión, es muy importante poder escribir programas completos. Tendrán cursos sobre GUI pero tres años más tarde, de hecho, antes de graduarse. Creo que deberían poder escribir aplicaciones GUI simples antes. Entonces quiero enseñarles eso.¿Qué es mejor para un estudiante que programa en C++ para aprender a escribir GUI: C# contra QT?

¿Cómo crees que es más útil aprender: programar GUI con QT o escribir GUI en C# y llamar a la biblioteca no administrada de C++?

Actualización.

Para desarrollar aplicaciones C++, los estudiantes usan MS Visual Studio, por lo que C# ya está instalado. Pero QT AFAIK también se puede integrar en VS.

He siguientes ventajas de C# (algunos fueron sugeridos allí en respuestas):

  • la necesidad de hacer una capa adicional. Es más trabajo, pero le obliga a especificar explícitamente el contrato entre GUI y datos de procesamiento. El límite entre la GUI y los algoritmos se vuelve muy claro.
  • Es más popular entre los empleadores. Al menos, en Rusia donde vivimos. Es bastante común escribir algoritmos críticos para el rendimiento en C++ y P invocarlos desde la aplicación de C#/sitio web ASP.Net. Tal vez no esté tan extendido en el resto del mundo, pero en Rusia Windows es muy popular, especialmente en compañías y corporaciones debido a algunas razones, por lo que la mayoría de las aplicaciones de b2b son aplicaciones de Windows.
  • Desarrollo rápido. Es mucho más rápido para codificar en .Net luego en C++ debido a muchas razones.

Y la desventaja es que se trata de un nuevo idioma con características específicas para los estudiantes. Y el lío con invocar llamadas a la biblioteca.

Respuesta

14

Es mejor familiarizar a los estudiantes con Qt, ya que Qt es en realidad C++. C# es una bestia completamente diferente, y si usa C#, muy probablemente confundirá a sus estudiantes sobre qué cosas son específicas de Microsoft o C# frente a lo que realmente se define en el estándar ISO C++, mientras que esto será más obvio con solo C++. Además, Qt y C++ son portátiles, por lo que los estudiantes que usan Mac OS X o Linux le agradecerán que elija un marco multiplataforma (Qt también funciona en Windows); mientras que, si usas C#, obligarás a tus alumnos a usar Windows (sí, está Mono, pero no funciona tan bien como Qt en todas las plataformas).

Puede que también le interese usar mi C++ Project Template que proporciona la infraestructura suficiente para desarrollar una aplicación GUI Qt en C++ utilizando CMake, y ha sido probado y verificado para que funcione bajo Mac OS X y Ubuntu Linux (y, si recibo comentarios) en Windows, me aseguraré de que funcione también allí). La plantilla incluye código que muestra una GUI "Hello World" en Qt cuando se ejecuta con la opción de línea de comandos "--gui".

+0

Alguien me preguntó qué problemas tenía con Mono, así que, aquí va ... Estoy usando Mac OS X 10.6 Snow Leopard. Tuve muchas dificultades para lograr que Mono funcionara, y finalmente me di por vencido. Para los usuarios de OS X, también existe la confusión sobre si es mejor instalar Mono usando DMG o usando MacPorts. Y, además de eso, es incluso más grande que el Qt SDK (y el Qt SDK es bastante grande). Al menos con Qt, existe la opción de instalar solo los frameworks QtCore y QtGUI (si uno usa Qt Framework en lugar del paquete QtSDK). –

+0

Nota al margen: ¿por qué consideraría MacPorts si hay distribución oficial de Novell para Mac OS X?:-) –

+0

@Franci, generalmente instalo cosas usando MacPorts, porque si quiero instalar cualquier cosa que dependa de Mono usando MacPorts, MacPorts instalará su propia copia de Mono, anwyay, así que podría instalarlo una vez con MacPorts. Además, una ventaja del uso de MacPorts es que es más fácil actualizar el software instalado y no hay necesidad de preocuparse por las dependencias, ya que MacPorts busca e instala automáticamente las dependencias. Dicho esto, ciertamente hay instancias en las que usar MacPorts en lugar del DMG es una mala idea ... Mono, Qt y MySQL son ejemplos donde uno debería evitar los MacPorts. –

1

Qt - P/Invocar para usar una biblioteca C++ de C# agrega toda una nueva capa de tonterías en la que no quiere siquiera pensar. Si fuera a usar .NET, podría valer la pena considerar el uso de C++/CLI, que vincula el código administrado y nativo mucho más fácil.

+1

No quiero utilizar C++/CLI para evitar la sintaxis específica de ms en C++ y la confusión cuando más tarde escriba la aplicación C++ nativa. Hay C# es mejor porque se distingue claramente de C++. La capa adicional también tiene un significado positivo: para establecer un límite claro entre la GUI y los algoritmos/datos de procesamiento. Y para especificar contratos explícitamente. – flashnik

+0

IMO, C# no se distingue con claridad de C++ para cumplir muchos fines, y P/Invoke no enfatiza un contrato de ninguna manera significativa; todo lo que quieras enseñar sobre DbC (o algo similar) se pierde. –

6

Recomendaría Qt simplemente porque es C++, y no C#.

La interconexión entre C++ y C# puede ser complicada, y en mi opinión distraería a los estudiantes del objeto del ejercicio (los algoritmos, como usted dijo).

1

Usaría C# para las cosas de la GUI.

Hay mucho más trabajo de C# que C++ usando Qt, así que ¿por qué no prepararlos para lo que es más probable que encuentren después de graduarse?

Un problema que he visto con la academia a menudo no es enseñar lo que se usa en el mundo real. Claro, todas esas otras cosas son geniales, y personalmente me gusta. La experiencia del uso del mundo real después de la escuela sería mi prioridad sin embargo.

Además, no creo que preguntar a un grupo de programadores sea en general la mejor fuente de asesoramiento sobre este tema. Me gustaría ver qué tecnologías están contratando la mayoría de las empresas en su ubicación, muy probablemente para la mayoría de las cosas de GUI de escritorio será .NET o Java.

+3

No estoy de acuerdo. Los estudiantes tendrán que preocuparse demasiado por manejar código no administrado en lugar de enfocarse en desarrollar la GUI. – snicker

+0

@snicker - Si estuvieran escribiendo algún tipo de aplicación de nivel empresarial estaría de acuerdo, pero por la complejidad que están haciendo creo que estaría bien. –

+0

En realidad, hay muchos trabajos que requieren la aparición de Qt, por lo que no es tan esotérico. –

0

Aquí hay una idea disparatada, (re) escriba el algoritmo en C# para la aplicación GUI. Esto también sirve para propósitos, 1) evita claramente el borrado completo con P/Invoke, C++/CLI o COM solo para dibujar algunas imágenes bonitas y 2) a diferencia del uso de Qt, le da la oportunidad de enfatizar las distinciones entre un algoritmo, un programa y un lenguaje de programación.

+0

No, no es aceptable escribir algoritmos en C#. C/C++ es bueno para cálculos/algoritmos, mientras que .Net es bueno para un desarrollo rápido y seguro. – flashnik

+0

Debe utilizar una definición muy extraña de "algoritmo" si no es aceptable escribirlos en C#. Eso o hay un montón de códigos de C# "inaceptables" en el mundo. Ciertamente puede implementar cada algoritmo en CLRS en C#. ¡Diablos, la mayoría de los algoritmos se describen en pseudocódigo! Estoy un poco molesto porque esta es la actitud adoptada por un instructor de CS. –

+0

Quise decir que es inaceptable desde el punto de vista de la estructura del curso. El objetivo principal de un curso de 2 años es enseñarles a escribir algoritmos efectivos en C++. Por supuesto, pueden ser reescritos en C#. Pero en C# serán menos efectivos (por ejemplo, el uso medido de la CPU) debido a la seguridad de C#. – flashnik

1

escribiendo GUI en C# y llamando a la biblioteca no administrada de C++ porque VS es un buen IDE inicial y .NET es el conjunto de librerías más completo disponible. Esto supone que sus alumnos tienen acceso a computadoras con Windows. Si están en Linux, QT sería el camino a seguir.

+0

Usamos VS incluso para la programación en C++, así que no es un problema :) – flashnik

0

No creo que tenga ningún sentido comenzar a crear aplicaciones híbridas administradas/no gestionadas C++/C# aquí.

Para la enseñanza, será más fácil si los estudiantes no tienen que aprender un nuevo lenguaje de programación para la Gui. También la interconexión entre el código administrado y no administrado y los diferentes tipos en los diferentes idiomas complicará las cosas innecesariamente. Se desperdiciará mucho tiempo y esfuerzo en estos temas, no ayudando a nadie a aprender los algoritmos que son el tema del curso.

También para la utilidad de la "vida real", creo que está claro que solo muy pocos proyectos utilizarán un híbrido C++/C#. Si hace su GUI en C#, también hará la lógica detrás de ella en ese idioma. No veo qué se ganaría al crear la GUI de una aplicación C++ en C#.

Cuestiones relacionadas