¿C ++ es adecuado como primer idioma? [cerrado]


26

Una universidad local está enseñando C ++ a estudiantes universitarios de primer año (16 años) sin experiencia previa en programación.

Como primer lenguaje de programación, ¿es adecuado C ++?


56
Cualquier idioma puede ser un primer idioma. Realmente no importa.
Adam Lear


19
@ Anna Lear: Por supuesto, cualquier idioma puede ser el primer idioma, pero eso no califica a C ++ como un buen primer idioma. Si su respuesta fuera una respuesta real, la votaría como inútil.
Ed James

66
@ Douglas: estoy programando C ++ para vivir ... ¿cuál es tu punto?
Matthieu M.

99
@Dough: el 70% de los proyectos informáticos actuales implican escribir software para sistemas integrados y microdispositivos. ¿Adivina qué idiomas se utilizan para esos proyectos? ¿Adivina quién está mejor equipado para los puestos de nivel de entrada? Ciertamente, no Java o .NET ponis de un solo truco. Suena duro, pero las escuelas han hecho un gran daño a toda una generación de graduados de CS al capacitarlos solo para el 30% del mercado laboral de programación. Tenemos un exceso de programadores para el sector de aplicaciones (30%) y tenemos una escasez en el sector de sistemas (70%). Esos números no van a ninguna parte. ¿Futuras oportunidades de carrera? Sí claro.
luis.espinal

Respuestas:


61

No enfáticamente .

Para cualquier objetivo que tenga en mente para los estudiantes, otro idioma o secuencia de idiomas sería más rápido y mejor. Ejemplos.

"Los estudiantes necesitan comprender conceptos de bajo nivel".

La codificación de "bajo nivel" no consiste en obtener objetos new, alimentarlos deletey, ocasionalmente, tener un puntero apuntando a un lugar que no debería. Las funciones, clases y plantillas no son de bajo nivel. RAII, 12 formas de uso const,std::ostream::operator<< , protectedy newno son conceptos de bajo nivel. Esas cosas tienen implicaciones de bajo nivel y las estás omitiendo durante meses o hasta una clase futura y en cambio estás enseñando montañas de semántica en C ++.

Sugiero ensamblador con un buen ambiente y material didáctico como MIPS o MMIX. Si tiene prisa, enseñe a C con desvíos al menos a mirar la salida del ensamblador. Esto le dará toda la comprensión de bajo nivel que hace C ++, y algo más, más rápido.

"Los estudiantes necesitan entender la orientación a objetos".

La orientación a objetos integrada en C ++ es demasiado complicada para enseñar conceptos OO, o casi cualquier otro concepto de alto nivel. Ver preguntas frecuentes de C ++ para obtener una lista larga y agradable de los posibles motivos. O bien, debes aprovechar todas esas cosas, lo que llevará mucho, mucho tiempo con los nuevos programadores; o de lo contrario, debe omitir mucho, dejando a los nuevos programadores en la oscuridad, efectivamente, ¡sin saber realmente C ++!

Sugiero aprender un lenguaje más simple y de alto nivel con objetos primero (Python, Ruby, Squeak, Common Lisp, Racket), si es que debes enseñar C ++. Más allá de eso, aprenda el polimorfismo como un concepto que está separado de OO visitando un lenguaje funcional.

"Los estudiantes necesitan comprender las plantillas y la metaprogramación de plantillas".

Nadie realmente pregunta esto, pero desearía que lo hicieran. C ++ tiene buenas plantillas y STL es genial, pero no deberían ser una prioridad lo suficientemente alta como para enseñar C ++ primero. Enseñar el sistema de tipos OCaml o Haskell y luego adaptar esos conceptos podría ser más rápido de todos modos.

"Los estudiantes necesitan aprender a resolver problemas".

Sí, obtienes esto en cualquier idioma, y ​​obtienes más si lo haces en casi cualquier idioma que no sea C ++ porque hay mucho menos equipaje. Nuevamente, vea las Preguntas frecuentes de C ++ para obtener una lista de todas las cosas que los estudiantes aprenderán en lugar de las habilidades para resolver problemas.

"Todo lo anterior, y necesitamos usar solo un idioma". o "Los empleadores lo quieren". o "Necesitamos un lenguaje de estilo C". o...

Enseñar más de un idioma.

La idea de ahorrar tiempo o energía al enseñar o aprender un solo idioma es completamente ridícula. Se basa en la idea de que aprender cualquier idioma toma exactamente X meses de hombre ( ¡SUGERENCIA! ¡SUGERENCIA! ) Donde X es un número único o un número por idioma. Esto es casi idéntico a la idea de que puede ahorrar tiempo y dinero omitiendo todos esos 'requisitos' y 'probando' la basura.

En cuanto a las sintaxis múltiples, puede perjudicar peligrosamente a los estudiantes si les enseña a esperar la sintaxis C en cada idioma al hacer que estén sesgados contra otros idiomas.

Casi cualquier ruta es más rápida y mejor que comenzar con C ++. Aprender un lenguaje simple de alto nivel y luego C ++ sería más rápido. El ensamblador de aprendizaje y luego C ++ sería más rápido. Cualquier otra cosa que no sea C ++ hará que los estudiantes lleguen más rápido y sabrán mucho más para arrancar. Simplemente no enseñe C ++ primero.


44
¡Gran respuesta! De hecho, muchas características de C ++ no están relacionadas en absoluto con la programación de bajo nivel.
Marco Mustapic

77
+1, excelente respuesta. Es cierto que a veces los caprichos de C ++ se equiparan erróneamente con "bajo nivel". Se vinculó a las preguntas frecuentes de C ++, pero también recomendaría a las personas que echen un vistazo a la FQA de C ++ (o "Respuestas frecuentes": P)
Andres F.

2
Guau. Eso me recuerda al IAQ de Java ...
Jesse Millikan

Completamente de acuerdo. Incluso Malbolge sería mejor que C ++ para un principiante.
derecha

2
Mi única reserva: puede enseñar mucho sin entrar en los detalles que en su mayoría solo son relevantes para las personas que desarrollan bibliotecas. Siempre y cuando deje en claro que solo está haciendo C ++ básico ... pero, de nuevo, ¿qué le ha enseñado a alguien de todos modos?
Steve314

54

No, C ++ es un lenguaje difícil incluso para desarrolladores experimentados de C ++. Incluso para los algoritmos más simples, debe explicar muchas de las sutilezas del lenguaje. Considere un ejemplo de Hello World:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

¿Cuál es ese #includecomando? ¿Cuál es std::cout. ¿Por qué el ::? ¿Qué es <<? ¡Ohhh, es un operador sobrecargado! ¿Qué es un operador sobrecargado? Entonces, pues ints, cambia un poco, pero, sea lo que std::coutsea, envía cosas a la consola. Ohhh, std::coutes una transmisión, y las transmisiones tienen su <<y el >>operador sobrecargados.

Veamos la misma muestra en Python:

print("Hello World!")

Eso es todo, vamos a codificar algunos algoritmos.


15
Python será adecuado para un alumno de séptimo grado. Un estudiante universitario puede comprender mucho más.
Gulshan

13
Claro, pero estamos hablando de un primer idioma. C ++ es conocido por ser difícil de aprender y dominar, en comparación con otros lenguajes. ¿Por qué usarlo para enseñar programación? Un estudiante puede aprender C ++ más tarde, cuando conoce algunos conceptos básicos de programación.
Marco Mustapic

8
Ni siquiera mencionaste la búsqueda dependiente de argumentos de << :)
MetricSystem

66
No necesita saber absolutamente todo para comenzar con un idioma. cout << lo que sea; "simplemente funciona", no necesita entrar en los detalles esenciales hasta que cubra la sobrecarga del operador, etc. más adelante.
Colen

66
Tomaría Python sobre C ++ cualquier día de la semana como lenguaje introductorio.
jprete

21

Probablemente no sea un buen primer idioma: sintaxis compleja, muchas reglas, lenguaje antiguo, administración de memoria propensa a errores. Es mejor enseñar a sus estudiantes algo más OO como Smalltalk, o algo más agradable para programar como Python, o algo funcional como Haskell.

Pueden aprender C ++ más adelante en la vida (si no pueden evitarlo), después de haber aprendido mejores idiomas.


55
Haskell como primer idioma sería un experimento interesante.
Larry Coleman

@Larry, el curso de CS de la Universidad de Cambridge enseña SML como primer idioma.
Peter Taylor

1
La programación funcional le tuerce el cerebro: sé que MIT comienza con Scheme bastante pronto, pero me alegro de no haber comenzado la programación funcional hasta después de dos años de un estilo híbrido de procedimiento / OO en la escuela.
justkt

11
@justkt: Todos los idiomas tuercen tu cerebro. Es solo una cuestión de cómo quieres que se tuerza.
David Thornley

+1, pero no etiquetaría categóricamente los lenguajes distintos de C ++ como necesariamente "mejores".
greyfade

18

Respuesta corta: ¡Sí!

Diría que cualquier lenguaje es un comienzo adecuado, pero especialmente C ++ (o equivalente). En la actualidad, C # y Java son los principales lenguajes en uso y programación, con estos aprende rápidamente a apoyarse en la API y los IDE, pero con C ++ tiene la oportunidad de aprender programación desde cero, incluida la optimización del rendimiento, etc.

Nunca es una mala idea aprender los conceptos básicos de programación, bucle y clasificación antes de confiar ciegamente en un lenguaje integrado en .Sort ();


11
Bucle y clasificación, sí. Puedes hacerlo con cualquier idioma. Pero, ¿por qué empezar a trabajar con punteros y sintaxis extraña cuando puedes evitarlo? Puede aprender todas esas cosas más tarde, cuando tenga más experiencia en programación.
Marco Mustapic

44
@Marco: El libro de texto introductorio de Stroustrup "Programación: Principios y práctica usando C ++" presenta punteros en la mitad del libro. Puede hacer muchas cosas en C ++ sin introducir el puntero.
David Thornley

44
"Nunca es una mala idea aprender lo básico ... antes ..." ¿tiene alguna investigación para respaldar esta afirmación? Sé que muchas personas inteligentes dicen que es de conocimiento común que "de abajo hacia arriba" es la única forma verdadera de enseñar, pero este es un punto muy controvertido y la única investigación didáctica (ciertamente muy limitada) que conozco apunta a la conclusión opuesta.
Konrad Rudolph

1
@David: El problema es que hacer "muchas cosas en C ++" sin punteros es aún peor. Sin punteros, todos sus objetos se declaran en la pila, que es una de las peores ideas de programación de la historia. Los tipos de valores y la herencia / polimorfismo simplemente no se mezclan, e intentar mezclarlos conduce a categorías enteras de errores que no existen en lenguajes mejor diseñados.
Mason Wheeler

99
¡Oh, Dios, no! ¿Por qué quemar un suministro limitado de ciclos cerebrales en idiosincrasias innecesarias de C ++? ¿Por qué centrarse en cosas irrelevantes de bajo nivel, como la administración de memoria, cuando el objetivo es aprender conceptos básicos en programación? ¿Por qué saltar al fondo?
Maglob

14

En realidad, creo que probablemente sea una buena opción como primer idioma por una razón muy práctica: después de aprender C ++, cualquier otro idioma que encuentre le resultará muy fácil de aprender.


10
Con todo el crédito debido a Dijkstra, es prácticamente imposible enseñar una buena programación a los estudiantes que han tenido una exposición previa a C ++; como programadores potenciales, son mutilados mentalmente más allá de la esperanza de regeneración. ;)
Mason Wheeler

3
Tendrían que desaprender muchos malos hábitos de C ++. Para usar otro ejemplo, ¿conocer al ensamblador lo convierte en un mejor programador de Java? Yo diría que NO.
Andres F.

16
@ Andrés F .: Tengo que estar en desacuerdo con eso. Conocer el ensamblador lo convierte en un mejor programador sin importar lo que esté escribiendo, porque entonces puede comprender lo que realmente está sucediendo.
Mason Wheeler

2
@Andres: He visto demasiados programadores Java / C # llegando a otros lenguajes y metiendo todo en objetos ... carecen de una amplia experiencia.
Matthieu M.

3
@Andres F. - En mis 12 años haciendo Java, me he encontrado con una gran cantidad de programadores de Java que realmente apestan por no tener ningún tipo de exposición a asuntos como la asignación de recursos, RAII, no saber cómo programar aplicaciones compatibles con gc, etc. Conocer el ensamblado y los lenguajes compilados sin soporte automático de basura y con soporte para paradigmas que no sean OO (C, C ++, Ada o casi cualquier lenguaje compilado de la familia Algol) le enseña cómo escribir sistemas eficientes y grandes en Java, C #, Python, lo que sea. Además, el modelo de objetos en C ++ no es tan similar a Java, en absoluto.
luis.espinal

10

Me enseñé C ++ cuando tenía 15-16 años.

Es mejor dejar la magia a los demás y aprender el funcionamiento interno de las cosas usted mismo.


En pocas palabras, si no puede descubrir la sintaxis y la semántica C ++ de nivel de entrada, no es tan bueno con las computadoras. No es tan dificil. No hay una buena razón para evitar "C con clases".

Si espera que los estudiantes comiencen a trabajar en la metaprogramación de plantillas, deduciendo llamadas polimórficas y desenredando múltiples jerarquías de herencia, eso es ridículo para una clase de nivel de entrada para cualquier tipo de lenguaje que use.

Hay una muy mala tendencia a querer ocultar las complejidades de la programación para los estudiantes. Eso no termina bien (véase el ensayo de las Escuelas Java de Spolsky). Esas personas terminan en el DailyWTF si no entienden bien. Las abstracciones se filtran, y cuando (no si) la abstracción se filtra, eso es peor que tener que lidiar con eso. He trabajado como TA para estudiantes de nivel básico C ++. O las cosas tienen que estar ocultas por completo, o tienen que ser sacadas a la luz para ser examinadas. La magia es el enemigo del alumno.

Si tuviera que recomendar un lenguaje de inicio que se compilara en código máquina, una variante de Pascal probablemente sería el mejor enfoque. Tiene un enfoque más regular y estructurado que la familia C por lo que recuerdo.


1
@ Ed: En realidad no. Había dominado If y Goto en QBASIC, y eso fue todo. Los punteros, matrices, funciones, clases, etc. estaban todos en mi futuro C ++. La recursión también era incomprensible.
Paul Nathan

55
¡Espere, nadie espera que alguien trabaje en un proyecto usando C ++ sin comprender primero C ++! De hecho, eso conduciría a un código digno de TheDailyWTF. Pero, contrariamente a su reclamo, es no trivial para aprender C ++ (y no es "C con clases", tampoco). C ++ tiene una sintaxis y gramática enorme, enrevesada y a veces no sensorial, y una infinidad de palabras clave y reglas. Es un lenguaje horrible para empezar. Como lenguaje de enseñanza es horrible porque condiciona a los estudiantes a pensar que las deficiencias de C ++ son naturales e inevitables en el mundo de la programación.
Andres F.

1
Andr: Insiste en una falsa dicotomía: "~ C ++ o All C ++". Eso es falaz.
Paul Nathan

1
@Paul: bastante justo. Pero considere esto: incluso la sintaxis y la gramática de un C ++ simplificado es complicado porque debe admitir todas las características del lenguaje completo. Entonces ya te has comprometido a usar un lenguaje feo, incluso si lo enseñas en sus formas más simples. Supongo que no solo estás codificando en C con un poco de azúcar sintética (también conocido como "C con clases"), porque en ese caso, ¡estás mejor servido con C simple!
Andres F.

2
@Andr: No realmente. C ++ ofrece una considerable simplificación sintáctica sobre C89. Además, para los propósitos de nivel de entrada, las cosas son muy sencillas para todos los casos en los que puedo pensar ...
Paul Nathan

8

Yo diría 'no'. Tenía ganas y ganas de aprender programación, y comencé mi primer año de introducción en la universidad con C ++ de inmediato. Junto con un maestro que enseñaba C ++ como si fuera otro idioma (conceptos que tenían sentido para ellos, no necesariamente conceptos del idioma o la aplicación del mundo real), y proyectos lanzados a nosotros de inmediato cada semana, me caí y me quemé. la mitad de la clase Cuando pude incluso digerir, experimentar y aplicar lo que me estaban enseñando, luché con la tarea del proyecto que se duplicó como pruebas. Yo diría que fue más un curso de 200 niveles que 100.

Realmente hice mi mejor esfuerzo. No pedí simpatía, sabía que sería un desafío, pero la maestra ni siquiera me ayudó. Solo me dijo que fuera a leer el libro de texto, como lo había estado haciendo.

Yo diría (y algunos estarían en desacuerdo) que Ruby o Python es un lenguaje mucho mejor para introducir a alguien en el mundo de la programación. Sintaxis limpia, concisa, legible, más clara.


8
Cualquier idioma es un mal primer idioma si se enseña mal.
David Thornley

3
@David Thornley: sin embargo, incluso cuando se enseñan correctamente, algunos idiomas son una mala elección como primeros idiomas. Por ejemplo, Cobol.
Andres F.

Estoy de acuerdo, siento que con un mejor maestro, uno que se preocupó por involucrar a otros y no solo por completar el material del curso a la velocidad del rayo, el resultado puede haber sido diferente. Simplemente rodó demasiado rápido para mí.
Kevin

@ Andrés F .: No estoy en desacuerdo con eso. Sin embargo, la cuenta de Kevin era sobre un mal maestro, y un mal maestro puede arruinar Python o Scheme como primer idioma (mis dos nominados para un buen primer idioma).
David Thornley

2
@Chris: He programado en Cobol y te compadezco :)
Andres F.

8

No.

Como lenguaje de enseñanza, C ++ es solo marginalmente mejor que C, que es uno de los peores lenguajes de enseñanza. Introduce una gran complejidad por adelantado, algunas partes del lenguaje son profundamente no intuitivas y la mayoría de las veces aprendes más sobre C ++ que sobre la programación en general.

Eso no quiere decir que C ++ (o C) sean lenguajes malos o que no valga la pena aprender; solo que hay mejores idiomas de enseñanza disponibles, como Python.


1
C es un lenguaje difícil para la enseñanza, pero ciertamente está entre los peores. COBOL y Java toman el pastel como uno de los peores, mucho peor que C. Lo bueno de C es que tienes que lidiar con el metal interno por adelantado (sin tener que profundizar en el ensamblador). A las personas se les ha enseñado con éxito con C como su idioma principal. Hay otras opciones más elegantes, por supuesto, como Python o Ruby (o cualquier lenguaje que sea multi-paradigmático y que no empuje innecesariamente al OO incluso para las tareas más simples). C no es una de las peores enseñanzas opciones, no por asomo.
luis.espinal

1
Marginalmente mejor? ¿Cómo te imaginas? ¡C ++ toma todo lo malo de C y se basa en él !
Mason Wheeler

1
@MasonWheeler: Principalmente porque C ++ proporciona un stringtipo de datos honesto a Dios que sobrecarga a los operadores como +, =y ==para hacer cosas que los estudiantes más o menos esperan, en comparación con cómo el procesamiento de cadenas debe hacerse en C. Por lo tanto, "marginalmente" . Yo tampoco lo recomendaría como lenguaje de enseñanza.
John Bode

7

Hay dos tipos esenciales de educación postsecundaria: la universidad y la escuela profesional. La diferencia está en lo que quiere estar preparado para hacer después de la graduación. En el campo de la automoción, es si serás mecánico o ingeniero mecánico.

Dicho esto, C ++ es un excelente primer lenguaje si quieres ser ingeniero, y uno pésimo si quieres ser el equivalente de programación de un mecánico.

Una clase de introducción en C ++ va a pasar mucho tiempo hablando sobre tipos de datos, definiciones, declaraciones, punteros, asignación de memoria, etc. Estos son una excelente base si tiene la intención de pasar varios semestres construyendo para poder hacer algo útil, pero quiere saber que una vez que llegue allí tiene la base para manejar cualquier grado de complejidad.

Por otro lado, si desea poder hacer algo útil más rápidamente, pero no le importa si el dominio y la complejidad son limitados, entonces pasar todo ese tiempo en esos conceptos de nivel inferior será un desperdicio. Hay muchos programadores que pueden escribir un gran validador de formularios html, pero no tienen idea de cómo abordar el diseño de un controlador de dispositivo.


5

Seguro. Mi primer lenguaje fue C, pero eso fue solo para facilitar nuestra clase en C ++. Hizo que Java fuera mucho más fácil de manejar una vez que llegué a la Universidad. C ++ puede tener una curva de aprendizaje un poco más pronunciada, pero si se enseña correctamente, debería estar bien.


4

No, C ++ no es adecuado como primer idioma. Como se muestra aquí, muchos programadores profesionales comparten esta opinión, pero esta también es una opinión que tienen los maestros profesionales.

Esto es lo que un informe del decano de la Universidad Carnegie Mellon tiene que decir sobre el uso de C ++ para un curso introductorio de programación para estudiantes de primer año:

Los lenguajes estándar como C o C ++ no son adecuados para este curso porque su complejidad y deficiencias impiden las técnicas de razonamiento informales y mecanizadas.

CMU ofrece dos cursos introductorios, uno imperativo y uno funcional. SML fue elegido para la programación funcional. No sé qué se eligió para el curso imperativo, pero el informe menciona el uso de un subconjunto de C.


2

Seguro. Hay otros idiomas que podrían ser más fáciles de entender para los estudiantes de primer año. Sin embargo, hay formas en que un maestro podría introducir lentamente conceptos en C ++.


2

Definitivamente C ++ puede ser el primer lenguaje. Pero se trata de qué tan bien se enseña.

Todos dicen que el primer idioma debería ser muy fácil de entender. Pero mi punto es que la mayoría de la gente comienza a programar en el nivel de pregrado. Entonces, puedes enseñar algo que son capaces de comprender. Y con C ++, puede pasar de un nivel inferior a un nivel superior de programación.


Pero, ¿por qué no comenzar en un nivel superior de programación? Es el nivel en el que resolvemos la mayoría de los problemas (a excepción de ciertos problemas específicos del dominio, por supuesto). Entonces, si tienen que acercarse al metal, pueden aprender C ++, ensamblador, etc.
Andrés F.

Estoy de acuerdo, ¡se trata de lo bien que se enseña!
Gary Willoughby

2

No absolutamente no.

Si me saliera con la mía, no permitiría su uso en un entorno académico casi por completo. No por razones que son contrarias a las ya formuladas, sino porque muchos piensan que C ++ (o sus variaciones) es la respuesta para casi todos los problemas porque puede usarlo en casi cualquier situación. Es el destornillador de la programación.

Algunas personas lo usan para apretar los tornillos, una herramienta perfectamente razonable para el trabajo. Otros lo usan como una palanca, aunque a menudo es efectivo, no es realmente ideal porque un destornillador, no importa lo que su padre pueda decirle, no es una palanca, y puede fallar catastróficamente debido al mal uso porque la composición del mango no está construida intencionalmente por el tipo de fuerzas que encontraría una palanca. Incluso otros podrían intentar usarlo como un punzón o un cincel, y casi siempre encontrarán problemas porque el mango del destornillador no fue construido para el tipo de abuso que ese punzón o un cincel están diseñados para soportar.

En mi opinión, el trabajo de un programador generalmente es traducir problemas reales en automatización que proporciona cierto grado de eficiencia mejorada (disminuir el compromiso de recursos para una tarea), velocidad (disminuir el tiempo para realizar una tarea), previsibilidad (aumentar la repetibilidad de una tarea) u organización (aumentar la conciencia de la relación entre tareas).

Si bien es comprensible que todos los que programan tengan un conocimiento común sobre las operaciones de bajo nivel de las computadoras, y específicamente la asignación de memoria y E / S del dispositivo, es definitivamente poco común tener que utilizar ese conocimiento en un grado significativo, y mucho menos aprovecharlo para La gran mayoría de las tareas. Intentar hacerlo sin comprender el contexto más amplio del problema inserta un riesgo innecesario en un esfuerzo.

Es absurdo que un primer lenguaje de programación sea C / C ++ o variantes cercanas, ya que la clase de problemas que resuelven C y sus derivados ciertamente no son apropiados para algún porcentaje arbitrariamente grande de los problemas actuales y futuros (excepto donde uno tiene que rescatar un programa previamente atornillado), y de hecho es más un conjunto minúsculo de problemas futuros. La mayoría de los programadores nunca se acercarán al desarrollo de las funciones principales del sistema operativo o las interfaces directas del dispositivo, a pesar de la creciente prevención de pequeños dispositivos móviles e interconectados. La mayoría trabajará y vivirá como nosotros. Arreglando y eliminando gradualmente el código que tiene más de dos generaciones, implementando en tecnología que ya muestra edad, o trabajando al margen de la tecnología en la aplicación asesina (x + 1).

Para un primer idioma, vería Lego NXT, una variante liviana pero muy rica en características de LabView. Si bien Lego NXT no se usa ampliamente en empresas comerciales, presentará la naturaleza fundamental de lo que es programar de una manera "rica en sensores". Podría emparejarlo con un lenguaje de scripts algo neutral para la plataforma como Javascript o TCL / TK. Ambos tendrían un impacto relativamente bajo en términos de lo que tiene que descubrir para realizar tareas muy básicas pero efectivas, con un alto rendimiento en términos del ciclo de retroalimentación y flexibilidad para introducir y resolver diversos grados de complejidad del problema. Además, brinda una buena oportunidad a los estudiantes a medida que avanzan para explorar el potencial de exceder lo que se proporciona en el entorno enlatado: una oportunidad de intentar trabajar en la oscuridad, la humedad,

Después de que aprendan a conducir el automático de cuatro cilindros, póngalos en el gran v8 hotrod manual, si están realmente interesados ​​y motivados. Si Joel no puede encontrar a los programadores de estrellas de rock debajo de una piedra debajo de sus pies, puede que tenga que seguir buscando en otro lado, o repensar por qué puede necesitar más que un montón de destornilladores en su caja de herramientas.


1

Algunos de los puntos donde los principiantes cometen errores fácilmente en C ++ son:

haciendo asignaciones donde quería probar = vs ==

Desaparecido ;

Legibilidad de los corchetes frente a, por ejemplo, pascal comienzo-fin

Y luego están todos los archivos de inclusión, macros, administración de memoria, etc. para confundir.

Entonces, diría que C ++ no es el mejor lenguaje para comenzar, sin embargo, no hay duda de que puede ser muy útil cuando lo haya aprendido.

Yo, como otros también sugirieron, usaría C #, Java o quizás incluso VB, y un buen IDE con resaltado de sintaxis, depurador, etc. para ayudar a que sea más fácil recuperarse de los errores.


1

Cuando estaba en la universidad, C ++ era el lenguaje básico que se enseñaba durante el primer año de la universidad. La teoría era que contenía algunos conceptos de programación complejos, por lo que si pudiera dominarlo, podría aprender otros lenguajes. Me sirvió bien como una buena base.

Habiendo dicho eso, durante mi último año, serví en un comité para determinar si cambiar o no el lenguaje central a Java. Después de hablar con varios empleadores prominentes y algunos ex alumnos del departamento, se determinó que un cambio a Java era lo mejor para los estudiantes. Los empleadores con los que hablamos querían que las personas tuvieran experiencia en un idioma que estaban usando para contratarlos. Creo que ahora, 10 años después, todavía usan Java como su lenguaje principal.

En una nota similar, hemos estado buscando contratar a un par de recién graduados universitarios con muy buenas habilidades en C ++. No hemos podido encontrar ninguno.


1

Yo diría que sí. Pero cualquier idioma puede ser realmente un primer idioma. Creo que C ++ es bueno porque, si bien es complejo y, a veces, difícil, muestra lo que realmente puede hacer (menos limitaciones). Además, tiene un diseño orientado a objetos que puede ayudarlo a prepararse para aprender otros idiomas.

C ++ fue mi primer idioma y me alegro de que lo fuera. Me hizo pensar en la mentalidad de OOP desde el principio y estoy agradecido por eso. Pero al final, todo se reduce a lo que quieres hacer. El idioma no importa tanto porque si puedes mejorar con un idioma, lo más probable es que no tengas ningún problema para elegir otro. ¿Qué quieres hacer? Hacer juegos? Programa para teléfonos móviles? Cada uno tendrá herramientas e idiomas más adecuados para ello.


1

C ++ es un lenguaje experto, no uno principiante ... diría C primero, no Java o C # o Python ... ¿por qué? porque C te enseña a cuidar tu memoria y algunos conceptos complicados como los punteros que están "ocultos" en todos los lenguajes pero que están presentes en todas partes. He visto a muchos desarrolladores jóvenes que ni siquiera entienden por qué la memoria debería liberarse a veces y creen que el recolector de basura no es un pequeño enano que limpia todos los dados de codificación: crean instancias, crean instancias y explotan incluso si tienen XXXXGb RAM ... ¡Pero no entienden por qué el recolector de basura no está simplemente limpiando mágicamente todo! Y he visto este tipo de desarrolladores codificando en C ++ (e incluso más loco, en Corba) y fue una matanza !!!!!!!!!! Por lo tanto, recomendaría aprender la codificación en C y luego ir a Python / Java / C # para ver los conceptos de objetos y todo el azúcar. Luego, cuando entiendes todo eso, vas a C ++ y sientes el poder de C ++ pero también descubres todos sus peligros y por qué no debería ser usado por nadie;)


1

NO. Hay tantas cosas que tiene C ++ que dificultan la comprensión de un novato. No te metas en la falacia de "todos los lenguajes de programación son iguales".

Comience con Basic o Pascal, (ignore las cosas "están en desuso") y luego, con C / C ++ / Java / C # / Perl. O si tiene una oportunidad, primero con Logo & Karel, y luego Basic o Pascal.

PD Algunas universidades y colegas tienen una clase de uso y comparación del lenguaje de programación, y sucede que yo había enseñado esa clase ;-)


0

Puede elegir cualquier idioma para aprender los fundamentos de la programación. Aprendí cosas en C / C ++. pero 7 años después, las herramientas / idiomas se cambian en mi escuela y prefieren java / C #. Los idiomas son meras herramientas. Lo que necesitas para mejorar son los fundamentos. Por ejemplo, en MIT la gente aprende los fundamentos del algoritmo usando Python. Por ejemplo, Java puede ser bueno para la programación web. pero C / C ++ son buenos para servicios y aplicaciones de alto rendimiento. Entonces depende de tus situaciones.


0

Si "adecuado" significa "posible", sí. Si es por "bueno", definitivamente no.

Es posible que me guste, incluso que ame C ++, pero para eso es mejor que aprenda varios idiomas y trabaje durante una década con bases de código podridas de vida verde azulado, obtenga experiencia en la "creación de software no trivial que funcione realmente", entonces C ++ tendrá encanto.

No al principio cuando eres virgen, juega con problemas pequeños, simples (pero supuestamente interesantes y divertidos).

Comenzaría con Python, seguido de SICP (esquema), o algo similar. Tal vez invertido o intercalado. Con esos puedes simplemente ir y lidiar con el problema. En lugar de luchar contra el sistema, caminar en lodo profundo y aprender todo tipo de caprichos ilógicos y sus razones históricas.

Más tarde, cuando ya pueda programar su salida de una bolsa de papel, cambie a metal desnudo: aprenda formas de ensamblaje y varias arquitecturas, además de Knuth's Mix. No me refiero a memorizar códigos de operación o hacer muchas cosas reales, solo para comprender la memoria, los registros, la ALU, los cachés, las interrupciones y llegar al nivel de lectura.

Luego, con esa base, puede estar expuesto a otros lenguajes, incluido C ++. Tal vez sea una buena idea agregar algo de "historia y evolución de los idiomas" en el medio.


0

Comencé con C ++ en la escuela secundaria. Recogí una copia de este libro: C ++ Cómo programar por Deitel y Deitel . Este libro es bastante bueno.

Francamente, no hay una respuesta correcta o incorrecta aquí, personalmente encontré que C ++ era comprensible. Lo aprendí todo el camino hasta OOP (me tropecé con "esto", que ahora no entiendo cómo no pude conseguir eso, pero lo que sea). Pruébalo, no te desanimes. Si te quedas atascado, mira otros idiomas y sigue aprendiendo nuevos. La idea es que cuando vea el mismo concepto en 2-3 formas diferentes, los comprenderá mejor. Como dije, el concepto del puntero "this" me confundió, pero cuando vi lo mismo en Python (llamado self) me pareció lógico de inmediato porque lo había entendido en C ++. Aprenda Java si puede tantas universidades lo enseñan. Aprenda python o ruby, ya que es el lenguaje del día y si puede explorar más cosas nuevas / nicho como Clojure (y todos los demás lisps), Haskell, Scala ...


-1

No. Comenzaría con Java o C #. Si desea aprender C ++, probablemente sea más fácil después de haber aprendido los conceptos básicos, como qué es una clase, cómo hacer bucles y bifurcaciones (si, luego declaraciones), etc. Es mucho más importante aprender a mirar un problema o una ecuación matemática y prográmelo de lo que es para descubrir si ha liberado toda su memoria o lo que sea.


2
¿Por qué Java o C # cuando Python es aún más simple?
David Thornley

-3

Parece que la suposición detrás de esta pregunta es "C ++ parece tan complejo, ¿un niño de 16 años podrá elegirlo como el primer lenguaje (de programación de computadoras)?"

Para cuando tenemos 4 o 5 años, recogemos la mayoría de las construcciones en la lengua materna, solo con esa gran exposición al escuchar a otros hablarlo. Formar oraciones grandiosas lleva toda una vida, no hay duda.

C ++ es mucho menos complejo / complicado que, por ejemplo, la mayoría de los lenguajes humanos. Los mayores de 16 años deberían poder recogerlo. ¿Escribirán un gran código con él? Tengo que esperar y mirar.


44
Los idiomas humanos pueden permitirse el lujo de tener una sintaxis complicada porque si entiendes la gramática o la ortografía, la gente aún puede entenderte. No es así con los lenguajes de computadora.
dan04

-3

Los principiantes necesitan apreciar la 'programación' primero. En mi experiencia en el entrenamiento de una clase de principiantes, apreciaron primero lo que más entienden. Al igual que Python vs. C #, aprecian Python porque es de un nivel muy alto y no utiliza símbolos como C #, lo que significa muy cerca del lenguaje humano, es muy inglés. Por lo tanto, recomendaría aprender programación de alto nivel a bajo nivel.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.