El problema que tengo es que la mayoría de los libros de C ++ que leo pasan casi para siempre en la sintaxis y los conceptos básicos del lenguaje, por ejemplo , for
bucles while
, matrices, listas, punteros, etc.
Pero nunca parecen construir algo que sea lo suficientemente simple como para usarlo para el aprendizaje, pero lo suficientemente práctico como para que comprenda la filosofía y el poder del lenguaje.
Luego me topé con QT, que es una biblioteca increíble.
Pero trabajando a través de las demostraciones que tienen, parece que ahora estoy en el dilema inverso. Me siento como el hijo del rico conduciendo en un auto deportivo subsidiado por el padre. Como si pudiera construir un software fantástico, pero no tengo idea de lo que sucede debajo del capó.
Como ejemplo de mi dilema, tome la tarea de construir un navegador web simple. En C ++ puro, ni siquiera sabría por dónde empezar, pero con la biblioteca Qt se puede hacer dentro de unas pocas líneas en el código.
No me estoy quejando de esto. Me pregunto cómo llenar el vacío de conocimiento entre la estructura básica del lenguaje y la interfaz de alto nivel que proporciona el marco Qt.
fuente
Respuestas:
¿Desea saber cómo pisar el acelerador hace que el automóvil vaya más rápido, o solo le importa que pisar el acelerador acelere el automóvil?
Está viendo el beneficio de la programación de caja negra, que es una excelente manera de diseñar un sistema cuando todas las cajas funcionan. Sin embargo, alguien tiene que hacer las cajas negras y si quieres ser ese chico / chica, entonces necesitas saber más sobre el idioma que el chico que usa la caja.
Hay trabajos que son buenos en cada estilo, así que depende de ti lo que quieras programar. En mi opinión, te estarías perjudicando si no te esforzaras por recuperar parte de la abstracción que QT te está dando eventualmente.
fuente
El mayor daño que te harás a ti mismo, si quieres decirlo de esa manera, es que no aprenderás a usar las estructuras de datos, iteradores, algoritmos y cadenas estándar de C ++. Qt tiene bibliotecas propias para todos esos fines, y usted está obligado a usarlas en lugar de entidades C ++ estándar porque las API de Qt solo aceptan estructuras de datos propias.
Se podría argumentar que aprender a usar una biblioteca de algoritmos después de dominar otra es una tarea trivial. Antes de ir a una entrevista donde los entrevistadores esperan que domines C ++, asegúrate de lidiar con esa trivialidad de antemano.
fuente
Teniendo en cuenta que Qt tiene su propio metacompilador con el que tiene que procesar sus archivos fuente, es difícil considerar que el código Qt sea "solo C ++".
Pero lo más importante, el estilo de C ++ que Qt usa y fomenta es algo que, para el resto de nosotros, se vio por última vez alrededor de 1995.
Realmente, es un intento de hacer que C ++ sea lo más parecido a Java posible. Se pierde, o desalienta, todas las cosas increíbles que realmente hacen que valga la pena usar C ++ hoy en día . En cambio, estás encerrado en un subconjunto que, sobre todo, se siente como un Java inferior.
Entonces, si el objetivo es aprender C ++, diría que no, manténgase alejado de Qt. Tal vez eche un vistazo a Boost en su lugar, si desea utilizar una biblioteca establecida como punto de partida. Boost encarna las prácticas que hoy se consideran buenas .
Pero, sinceramente, si quieres aprender el lenguaje C ++ , elige un buen libro de texto y enfócate en el lenguaje .
Escribir un navegador web, sin importar cómo lo haga, en el mejor de los casos le enseñará sobre los navegadores web. No te enseñará mucho sobre el lenguaje que estás usando.
C ++ como lenguaje no tiene una clase WebBrowser incorporada. Si lee el estándar C ++, no dice nada sobre los navegadores. Ni siquiera menciona las aplicaciones GUI.
Eso es porque esas cosas están construidas en la parte superior, proporcionadas por bibliotecas como Qt. C ++, como cualquier lenguaje de programación, trata sobre lógica, sobre cómo expresar esa lógica. Y sí, eso significa trabajar con matrices, punteros, bucles y todas esas cosas.
¿Sería capaz de escribir un navegador web utilizando solo esas herramientas integradas, con el tiempo suficiente ? ¿Sabrías cómo expresar la lógica del programa involucrado? Si no, entonces necesita pasar más tiempo en bucles y punteros, y menos llamadas
new QWebKit()
y simplemente aprovechando bibliotecas prefabricadas.La "filosofía y poder del lenguaje" se encuentra en las matrices, listas y bucles, no en los navegadores web.
fuente
Tal vez.
Tendría que ver el código que está poniendo en sus controladores de eventos.
Realmente, no te obsesiones con cuánto "sabes". Todos usamos marcos de ventanas y todos seguimos aprendiendo. Simplemente siga codificando / leyendo cosas nuevas y continuará aprendiendo C ++. Aprender un nuevo marco de ventanas es una gran adición a sus habilidades, incluso si no significa que puede implementar una red neuronal o una selección rápida en C ++.
fuente
No te preocupes Al principio, la mayoría de su código solo usará el marco, pero después de un tiempo tendrá que extenderlo , aunque sea un poco. Entonces tendrás que usar más y más de C ++.
También recuerde que tiene toda la fuente de Qt disponible, el IDE lo llevará felizmente a la definición de cualquier función / método / clase que desee. Cuanto más profundices, más C ++ verás.
Otros han mencionado sobre la diferencia entre Qt C ++ y C ++ estándar. Estos caen en dos campos:
biblioteca diferente: Qt incluye todos los contenedores habituales: matrices, listas, conjuntos, hashmaps, etc. Se ajustan muy bien y son buenas implementaciones, pero no son la variedad STD. Aún así, en versiones recientes (4.1 y posteriores, creo) tienen API 'STD-like' además de la variedad anterior (y una API similar a Java). Al final, las opciones de diseño (cuándo usar una matriz, cuándo usar un mapa hash) son las mismas, por lo que cambiar a STD para proyectos que no son Qt no es tan difícil.
moc
adiciones de sintaxis: principalmente para el manejo de señales, pero también un par de construcciones de bucles más agradables Mucha gente siente que esta herramienta significa que ya no es C ++; pero en mi humilde opinión, se sienten como macros un poco más inteligentes. Un buen manejo de la señal acoplada libremente es una gran ventaja de un buen marco, y es notoriamente difícil de hacer en un lenguaje de tipo estático. En C ++ moderno, es factible con una gran dosis de plantillas; pero eso estaba lejos de ser estándar cuando Qt llegó por primera vezmoc
. Al final, si luego desea hacer proyectos que no sean Qt, primero verifique si usará algún marco y si tiene señales. En caso afirmativo, se aplicará la mayor parte de lo que está acostumbrado a hacer con Qt, por lo que no hay ningún "daño" en aprender Qt primero.fuente
moc
?foreach
es solo una macro ... (en realidad un "alias" paraQ_FOREACH
definir en<Qt/qglobal.h>
). No creo que eso lomoc
esté procesando. ¡Y C ++ 11 tiene lafor (auto it : container)
construcción!Qt es ampliamente utilizado en el mundo comercial porque proporciona un conjunto completo de herramientas multiplataforma y un entorno de desarrollo, que incluye una buena biblioteca GUI.
También es totalmente compatible con la internacionalización, incluida la excelente herramienta 'Linguist'.
Si planeas una carrera académica, entonces no me molestaría con Qt. Si, por otro lado, te gusta C ++ y quieres aprender una habilidad comercializable, entonces vale la pena aprender Qt.
Y sí, Qt es C ++, y puede mezclar el estándar y aumentar las bibliotecas al contenido de su corazón si eso lo hace sentir mejor.
fuente
Es una mala idea aprender C ++ a través de Qt. Primero tienes que aprender los conceptos del lenguaje independientemente de cualquier marco y eso es lo que los libros de C ++ te enseñarán y tienen razón. Básicamente, 'for y bucles while, matrices, listas, punteros' son de lo que se tratan los lenguajes de programación. Las funcionalidades adicionales son proporcionadas por los marcos. Una vez que aprende un lenguaje de programación, puede aprender cualquier marco como Qt o MFC que se construye utilizando el lenguaje, para que las aplicaciones se puedan desarrollar rápidamente. Con respecto a Qt, una vez que aprende c ++, es un marco excelente que lo hace tan productivo como cualquier desarrollador de Java o .Net. En breve podrás desarrollar aplicaciones iOS y Android usando Qt.
fuente
Bueno, creo que la mejor manera de aprender C ++ es utilizando su propia sintaxis SOLAMENTE (Estándar C ++), por lo que podrá usar el material de IDIOMA, y NO el Qt (o cualquier otro marco, biblioteca ... etc.).
¿Por qué? porque, como principiante, cuando observa cualquier código C ++ mezclado con otro código que no sea C ++ (Qt en este caso) no podrá ver qué es lo que C ++ es y qué no, sino que será un proceso más complejo.
fuente