Un profesor me dijo que no me molestara en aprender muchos lenguajes de programación sino que me enfocara solo en C ++, estructuras de datos y algoritmos, ¿tiene razón?

Déjame responder esta pregunta desde otro lado, principalmente mi propia opinión

¿Por qué es importante el algoritmo?
De hecho, todo en el mundo digital es algorítmico, todo lo que crees también será algorítmico. ¿AI? sí, algoritmo, teoría en este caso, se te ocurre que la implementación decide qué hacer después. Incluso, los números aleatorios son algorítmicos, lo que significa que no existe dicha aleatorización en el mundo digital.
Probablemente, algunos de los programadores de nivel de aplicación autoaprendidos todavía no se dan cuenta de la grandeza del algoritmo. Es porque están haciendo / implementando algoritmos demasiado básicos. Por ejemplo, supongamos que un programador tiene que hacer un formulario de inicio de sesión. Todo lo que tiene que hacer es llamar, una de las funciones ya implementadas con la ayuda de lenguajes de programación de alto nivel, un par de campos de entrada, obtener el valor y verificar si las entradas coinciden con uno de los datos del usuario. Eso es. Pero, de hecho, el algoritmo todavía se está utilizando aquí.

Veamos otro ejemplo simple con respecto a un mejor algoritmo es mejor.
tarea: encontrar la suma de los primeros N enteros positivos.

Una solución / algoritmo natural simple sería el siguiente:

suma -> 0;
i = 1..N:
suma = suma + i;
imprimir suma;

Arriba, el primer paso fue encontrar el algoritmo. El algoritmo era simple, uno sin problemas, iterar a través de todos los números del 1 al N y aumentar la suma por el número de iteración actual. Esto toma asintóticamente el tiempo O (N).

Solución 2: ¿qué pasa si uno conoce una fórmula matemática para que el algoritmo consista en un solo comando como “sum = (n * n + n) / 2”. Esta solución funciona como si fuera solo un comando que asintóticamente O (1), cantidad de tiempo constante. Esta solución también es eficiente en memoria.

Si tiene suficiente práctica para resolver problemas diseñando un algoritmo apropiado, no importa qué lenguaje de programación use para implementar. Como puede ver ahora, el lenguaje de programación es solo, quizás no solo, un aspecto tecnológico de una tarea / proyecto en particular.

Entonces, si eres un estudiante, este es el derecho para que practiques / aprendas el algoritmo. Si está planeando / pensando aprender un algoritmo mientras trabaja, eso no va a funcionar. Al menos, esto hace que tengas tiempo para terminar el proyecto el tiempo suficiente como para hacerte sentir como un fracaso.

Es por eso que creo que su profesor le dijo que no se preocupe por un lenguaje de programación y se centre en el algoritmo.

¿Qué pasa con la estructura de datos?

¿Qué es una estructura de datos? ¿Qué es un dato?
En el mundo digital, todo lo que guardas son datos. La “estructura de datos” son los datos y su estructura.
Vamos a verlo en un ejemplo simple. Digamos que ahora tiene una lista de números y puede insertarle un número y también, si se le solicita, debería poder eliminar el número más pequeño de la lista.

Solución 1:
Sin embargo, todavía se trata del algoritmo. Vamos a usar una matriz simple.
* Para insertar un número, simplemente podemos ponerlo al final de la matriz.
* Para encontrar el número más pequeño, supongamos que el primer número de la matriz es el más pequeño y compárelo con el siguiente número y, si es más pequeño, nuestro número más pequeño, recójalo e itere al siguiente hasta el final de la matriz. Eso llevaría tiempo O (N), porque en el peor de los casos, el más pequeño sería al final de la matriz.
* ahora para eliminar el elemento más pequeño, ya que estamos usando la eliminación de matriz significa poner todo el número en la matriz adelante en una posición. Entonces, el peor de los casos sería eliminar el primer elemento de la matriz que despierta el tiempo O (N).
Esa solución está bien cuando el tamaño de la matriz es pequeño, pero tomaría una elegante cantidad de tiempo si el número es alto.

Solución 2:
Supongamos que ahora ha encontrado una manera de estructurar los datos para que pueda encontrar el número más pequeño de la lista de números en O (1) cantidad de tiempo constante y eliminar el número más pequeño en O (logN) e insertar un número en la lista en O (LogN).
Esa solución sería mucho mejor tanto en el sentido de la memoria como en la velocidad.

¿Quieres aprender y quieres que lo hagas tú mismo? Es por eso que debe estudiar la estructura de datos. Para su información, esa estructura de datos utilizada en la solución 2 es, montón mínimo / cola de prioridad.

Ahora con respecto a C ++
Bueno, puedes encontrar muchas respuestas de quora o google. Tal vez solo busque “por qué c ++”. Soy un poco reacio, aunque vago.

Bien, desde mi propia experiencia obtuve toda la práctica en algoritmo, estructura de datos y c ++ en jueces en línea como www.spoj.pl, www.topcoder.com, codeforces.com. También considere hacer una competencia de programación ACM / ICPC en su escuela.

Gracias por hacer una pregunta y lo siento si tomó demasiado tiempo terminar toda la lectura larga.

Si bien su profesor podría tener un punto, creo que su consejo es bastante idealista.

En la vida real, muchos de los reclutadores técnicos no tienen la habilidad suficiente para poder ver más allá de la lista de requisitos que el empleador les da, y esa expectativa realmente no se les impone. No todos ellos están altamente capacitados o bien pagados. Veo que algunos reclutadores en LinkedIn se mudan de su trabajo para realizar ventas en Nordstorm, así que lo que hacen es simplemente leer y verificar. Si te preguntan si conoces Java y dices “Umm, no, pero conozco C ++ y están muy cerca. Ambos son lenguajes orientados a objetos ”, no aceptarán eso como una buena respuesta, lo mismo si están buscando 4 años de experiencia en Java y usted dice que tiene 3. Estoy hablando por experiencia real.

Los únicos momentos en los que lo evaluarán a fondo y le darán la oportunidad de demostrar sus habilidades son en esas entrevistas de 3 a 4 horas con compañías como Amazon o FB, pero son realmente difíciles y generalmente contratan a las personas más brillantes, y usted no puede hacer que su estrategia profesional trabaje siempre en Microsoft o Google o en una empresa con reclutadores profesionales y calificados. La mayoría de las otras compañías usan un algoritmo automatizado para buscar su currículum vitae o utilizan un humano que hace lo mismo, escanean su currículum y van a verificar, verificar, verificar.

En realidad, hoy recibí un correo electrónico de John Sonmez, un programador de celebridades que tiene una compañía llamada Simple Programmer. En su correo electrónico, contó la historia real de un programador que era perfecto para el trabajo, pero la persona de Recursos Humanos lo omitió porque la habilidad que la compañía quería estaba “en último lugar en el currículum”. Entonces ni siquiera es que faltaba la habilidad. Simplemente estaba en el orden incorrecto.

Este es el mundo real que tenemos que navegar para conseguir trabajo. Desearía que fuera diferente.

Hay algo de verdad en esa declaración, sin embargo, el mundo es más complicado.

Los idiomas de alto nivel van y vienen. Cualquiera puede inventar uno para abordar un problema especial o describir problemas generales de programación de manera más intuitiva y elegante. Están de moda por un tiempo (probablemente largo), hasta que ya no se consideran eficientes / elegantes / geniales y se ven desplazados por otros idiomas.

Excepto C y C ++. Son el idioma nativo del hardware subyacente. Hasta que el diseño del procesador cambie fundamentalmente por una nueva tecnología disruptiva, necesitaremos ensamblaje, C y C ++ para la programación del sistema. A partir de hoy, debajo de una capa delgada de lenguajes de nivel superior, todo se crea en C y C ++. Sistemas operativos / núcleos, controladores, pilas, entornos de tiempo de ejecución, máquinas virtuales, compiladores, intérpretes, literalmente todo. Incluso aplicaciones de alta calidad y alto rendimiento. ¿Crearías un juego 3D FPS o un software CAD en Python, Javascript o C #? Mejor ni siquiera lo intentes.

El beneficio de otros lenguajes de alto nivel es que hacen que la programación esté disponible para más personas y sea más fácil / más eficiente para todos. C ++ es probablemente el lenguaje de programación más complicado jamás inventado, lleva mucho tiempo dominarlo. Peor aún, no proporciona respuestas directamente utilizables para muchos problemas cotidianos. Con Java, los problemas complicados se pueden resolver con menos esfuerzo, pero desde el principio debe ser trivial que la calidad del producto final, suponiendo una implementación óptima, nunca alcance la de C ++. Será más lento, tendrá menos memoria, será menos confiable, será menos responsable, la experiencia del usuario será inferior. Esta es una compensación consciente entre la calidad / rendimiento de la aplicación y el esfuerzo / costo de desarrollo.

C y C ++ liberan el rendimiento completo de toda la gama de procesadores , desde los controladores integrados más pequeños de la arquitectura Harvard con el tamaño de RAM medido en bytes y la memoria de programa medida en kilobytes a través de computadoras de escritorio y portátiles hasta las supercomputadoras de más alto rendimiento del mundo. Estos lenguajes son los más escalables jamás inventados. Para microcontroladores pequeños, C suele ser el ÚNICO IDIOMA disponible, sin contar el ensamblador. En un hogar moderno típico, puede haber 100 de ellos en hornos de microondas, lavavajillas, televisores y electrodomésticos similares, y otros 100 en cada automóvil, controlando el motor, los frenos, las luces, los elevadores de ventanas, etc., todos los sistemas eléctricos. Superan ampliamente a los sistemas capaces de ejecutar lenguajes de nivel superior.

A pesar de que C y C ++ no solo pueden hacer todo lo que otros lenguajes pueden hacer, sino que pueden hacer mucho más y mucho más eficientemente, pueden no ser suficientes. Tu profesor parece haber perdido este punto final. Estos lenguajes son de poca ayuda para un desarrollador web, si el framework asume Javascript y no permite C / C ++. Teóricamente es posible reemplazar todo con C y C ++, pero ese no es el caso ahora. Como científico, su profesor tenía razón, como ingeniero no.

De alguna manera cierto. Desde mi experiencia, si eres fuerte en ellos, todo lo demás será sencillo. Así que considéralos tus primeros objetivos principales que debes dominar. Uno puede reemplazar C ++ por otros lenguajes de programación (por ejemplo, Java) … aunque prefiero C ++.

Luego, sus próximos pasos implicarán aprender varios idiomas y más sobre los fundamentos de CS. Antes de salir al mercado, puede prestar más atención a las tecnologías (por ejemplo, tecnologías web o móviles).

Por cierto, una de las mejores maneras de ser realmente fuertes en estructuras de datos y algoritmos es a través de la programación competitiva.

Hasta cierto punto, sí.

Tener varios idiomas lo ayuda a generar una red más amplia cuando busca trabajo, pero si no puede pasar las entrevistas técnicas para esos idiomas, no obtendrá los trabajos.

Si conoce bien un idioma, debe limitar su búsqueda, pero tendrá una mejor oportunidad de aprobar las entrevistas.

La mayoría de los desarrolladores en estos días son políglotas. Si conoce C ++, probablemente pueda aprender C #, Java y JavaScript fácilmente (aunque habrá nuevos conceptos que necesitará aprender y algunas prácticas que deberá abandonar al pasar de un idioma nativo a uno que se ejecute en Av M)

Los lenguajes en los que C ++ no lo ayudará mucho serán los de la familia de lenguajes funcionales, ya que no es solo una nueva sintaxis, es una forma diferente de pensar.

Si busca en Google “Popularidad del lenguaje de programación”, verá que C ++ está muy por detrás de Java. Habiendo aprendido ambos (y muchos otros), mi recomendación tiene dos partes:

1) Comience con Java en lugar de C ++ y aprenda bien. Está fuertemente tipado y puede hacer casi todo lo que C ++ puede hacer y tiene una demanda mucho mayor.

2) Luego, aprenda JavaScript, que tiene raíces similares (Java, C ++ y JavaScript, todos son derivados de C), pero JavaScript se tipea muy débilmente y se ejecuta en el navegador. Java no lo hace (o al menos no está bien).

Al aprender las fortalezas y debilidades de dos idiomas similares pero muy diferentes, te posicionarás bien para aprender otros idiomas cuando llegue el momento.

En pocas palabras, su conocimiento de cualquier idioma o tecnología no es tan importante como su capacidad de aprender a aprender. La tecnología cambia rápidamente. Lo que mantendrá su cabeza fuera del agua es aprender a desarrollar un hábito de aprendizaje continuo de por vida.

Otros han respondido esta pregunta bastante extensamente. Simplemente me gustaría pensar que su elección de C ++ es simplemente porque no es el tipo de lenguaje donde su camino de aprendizaje llega a un callejón sin salida. Por ejemplo, si estaba aprendiendo sobre la asignación de almacenamiento, entonces haber elegido Python como su idioma principal significaría que tendría que aprender un nuevo idioma antes de comenzar a aprender sobre la asignación de almacenamiento.

Desafortunadamente, a medida que aprenda más sobre esta industria y esta ciencia, lo más probable es que se dé cuenta de que la necesidad de múltiples idiomas en su haber es simplemente una cuestión de complejidad de pensamiento (lo que es inevitable) agregado a la complejidad computacional ( Estás después). En algún lugar a lo largo de un proyecto que esté haciendo, querrá implementar un algoritmo o una estructura de datos donde la diferencia de idioma sea insignificante en relación con las restricciones de tiempo de ejecución que tiene (alguna máquina monstruosa) y, a veces, será la situación opuesta ( una pequeña computadora débil). La cuestión es que aprender C ++ es bueno porque te permite trabajar en ambos extremos del espectro, pero aprender otros idiomas, * que son relevantes para ti *, te permite ser eficiente en ambos extremos (lo que sean para ti)

Una excelente idea si sus habilidades y temperamento lo permiten. Sin embargo, una vez que tenga un cierto grado de dominio (escrito en algunos programas en el rango de línea 1000–3000k), tendrá dificultades para aprender otros idiomas. De todos modos, los diferentes cursos en el plan de estudios lo introducirán naturalmente a otros idiomas.

En el frente de C ++, el libro de cisnes voladores 2x de Stroustrup es uno de los mejores para comenzar. Pase a STL, biblioteca de Boost, patrones de diseño y C ++ efectivo cuando tenga la oportunidad.

En el aspecto teórico / académico, también puede graduarse en programación de ensamblaje, lógica y matemática discreta, Organización y Arquitectura, complejidad de algoritmos y teoría y complejidad. O podría entrar en algoritmos fundamentales, bloqueo, sincronización, O / S, compiladores, paralelo y distribuido y procesamiento, etc. Es necesario sumergirse en C por un corto tiempo para tener una mejor idea del camino, preferiblemente antes de saltar a montaje.

Por el contrario, si está más interesado en resolver problemas mundanos / comerciales usando la computadora, entonces lo dirigiría a Java, C #, la pila web, RDBMS, etc. Necesita aprender scripting de shell y Python, Ruby o PowerShell también. Entra en los temas y prácticas de ingeniería de software a continuación. Luego hay especializaciones como gráficos, aprendizaje automático, IA, etc.

Aprender la pila N / W y el administrador básico de Linux y sistemas nunca hace daño a nadie.

Pero volviendo a la recomendación de su profesor, si usted es un experto en ciencias de la computación que persigue un BS o BEngg, entonces el consejo es perfecto.

  1. C ++ (y realmente, C) está más cerca del hardware que la mayoría de los lenguajes de programación. Le dará más control y le dará una mejor idea de cómo funciona realmente la computadora.
  2. Los algoritmos y las estructuras de datos son independientes del lenguaje y son los bloques de construcción fundamentales de la informática. Una vez que entiendes esos, puedes escribir programas eficientes en cualquier idioma, y ​​eso es más poderoso que conocer la sintaxis de muchos idiomas diferentes.

Tu profesor te está diciendo indirectamente el mejor consejo que recibí del mío; concéntrate en los fundamentos y llegarás lejos. Esto es cierto en muchos campos tecnológicos.

Es mejor poder construir algo en un idioma que no construir nada en 10 idiomas.

Sí, su profesor tiene mucha razón, muchas personas se estancan en los idiomas, pensando que de alguna manera es valioso saber una docena de idiomas diferentes.

Debe poder escribir software, los idiomas pueden ser una gran distracción, elegir un buen lenguaje, C ++ es una opción decente, sí, aprender estructuras de datos, no llegará a ninguna parte sin ellos.

No seas el tipo que recuerda las palabras clave de 10 idiomas diferentes. Sé el tipo que puede construir software.

Un profesor me dijo que no me molestara en aprender muchos lenguajes de programación sino que me enfocara solo en C ++, estructuras de datos y algoritmos, ¿tiene razón?

Me parece que esta pregunta es preguntar cómo lograr su objetivo, pero está omitiendo un detalle de eensy weensie: ¿cuál es su objetivo?

Por ejemplo, supongamos que su objetivo es uno de estos:

Quiero crear un programa genial, pero aún no tengo una idea de lo que quiero que haga el programa.

Cavar en un idioma es definitivamente el camino a seguir. Ser capaz de escribir aplicaciones realmente simples en una docena de idiomas no lo ayudará a hacer esto.

Mal tiempo de analogía: si tu objetivo fuera ganar un torneo para algún tipo de deporte, no pasarías una semana jugando baloncesto y jugando béisbol la próxima semana. Elegirías un deporte que pareces disfrutar e ir con eso.

Creo que las estructuras de datos y las clases de algoritmos a menudo no se centran muy bien en la práctica. Creo que es muy útil hablar sobre la estructura de datos adecuada y por qué los usamos, pero me gustaría ver un enfoque que tome algunos problemas y vaya a soluciones.

Por ejemplo, si desea encontrar un libro específico en una pila de 10 libros, no importa mucho cómo lo haga. Puedes mirar cada libro para ver si es el que estás buscando. Pero si quieres encontrar un libro específico en la biblioteca de la ciudad, esta es una estrategia terrible.

Quiero hacer algo en .

Por otra parte, desea profundizar en un idioma, pero qué idioma puede sugerir el campo. Si quieres escribir páginas web, aprender C ++ no es una buena estrategia. Si quieres entrar en la robótica, lo es.

Simplemente me gusta jugar con la programación.

Si solo estás aquí por diversión, haz lo que creas que es divertido. Si eso es aprender nuevos idiomas, entonces apréndelos. Si eso es jugar con gráficos, hazlo.

Quiero hacer programación competitiva.

Preguntaría a alguien más en este momento (no hago programación competitiva), pero entiendo que es bastante pesado en estructuras de datos y algoritmos y el tiempo de ejecución específico es muy importante (C ++ es probablemente una buena opción).

Quiero ser un informático.

Debe centrarse fuertemente en las estructuras de datos y algoritmos.

Quiero conseguir un trabajo

Sugeriría buscar trabajos de programación en su área y ver qué idiomas tienen una gran demanda. El índice TIOBE es una suposición inicial decente.

Realmente depende de lo que quieras lograr en el mundo de la programación o en la carrera, pero para cualquier persona nueva en programación de computadoras, aprender c ++, estructuras de datos y algoritmos pueden ser todo lo que necesitas. ¡C ++ es el mejor lenguaje para aprender estructuras de datos fundamentales (tipos de datos), y los algoritmos realmente son muy fundamentales en el campo de las computadoras, la programación, IA, ML, ciencia de datos … etc. gran campo para especializarse! ¡Tu profesor definitivamente tiene razón!

Ciertamente puede perder mucho tiempo aprendiendo idiomas y realmente no aprender cómo crear programas útiles. Sin embargo, diferentes idiomas fomentan diferentes hábitos mentales. Se dice que si aprende Lisp, se convertirá en un mejor programador, incluso si nunca lo usa en la práctica. Si aprende Java, aprende a estructurar código orientado a objetos, porque todas las bibliotecas estándar están escritas así.

Además, C ++ es un lenguaje muy difícil de dominar, y podría dominar otros tres idiomas en el tiempo que lleva aprenderlo todo. Dicho esto, es una buena manera de aprender código altamente eficiente de bajo nivel. Aunque probablemente obtendrás una mejor comprensión en menos tiempo aprendiendo ensamblador.

La respuesta correcta a esta pregunta depende de dónde se encuentre en su educación. Si eres un estudiante de primer año, este es un buen consejo. Pero si no aprende al menos 3 idiomas al graduarse, se ha perdido un poco de educación básica. Aprender varios idiomas es (IMO) esencial para comprender la relación entre el software y el hardware (he visto literalmente cero casos en mi carrera de alguien que realmente lo entiende mientras conoce un solo lenguaje de programación).

Supongo que eres un estudiante, así que si ese es el caso, tu profesor tiene razón. Aprender un nuevo lenguaje de programación generalmente significa comenzar a aprender la sintaxis básica para tareas cotidianas como la salida de texto y la entrada de datos. Nada de esto realmente te ayudará a hacer algo espectacular, ya que solo tendrás la capacidad de hacer “Hello world” en muchos idiomas diferentes. Ahora, si te enfocas en un idioma y lo usas para resolver problemas complejos, entonces has adquirido más dominio de ese idioma y también has adquirido mucho más conocimiento y experiencia para resolver esos problemas.

Cuando te gradúes de la escuela, puedes concentrarte en el idioma que quieras y tendrás el conocimiento para crear programas complejos en el idioma que elijas.

El esta en lo correcto.

La programación es un trabajo, por lo que su habilidad es tan valiosa como los números que recibirá cuando se le pague por su trabajo. Y no se le pagará por mostrar cuántos idiomas sabe. Se te pagará por crear cosas. Ahí es donde el conocimiento sólido de las estructuras de datos, los algoritmos y el lenguaje de paradigmas múltiples con los que va a trabajar son importantes.

Siempre que desee concentrarse en C ++ o Java o C # o algún otro lenguaje depende en gran medida de lo que desea trabajar y de lo que es popular en el mercado local. Suponiendo que tu profesor te conozca a ti y al mercado local mejor que yo, lo estaría escuchando.

More Interesting

En un algoritmo de clasificación de ciencias de la computación, ¿puede lograr un estado ordenado intercambiando continuamente elementos desordenados totalmente al azar, o los elementos fuera de orden deben ser adyacentes en la matriz?

¿Cuáles son algunos buenos nombres de variables / métodos junto con la descripción donde encajan?

¿Cuál es la técnica de clasificación eficiente para organizar los libros en una biblioteca?

¿Cómo crean los algoritmos los programadores de software?

Cómo declarar un conjunto de cadenas de tamaño desconocido para obtenerlo del usuario sin usar la función de asignación en C

¿Cuál es una manera sencilla de encontrar big-O, big-Theta y big-Omega para una función determinada?

¿Puede [math] \ sqrt {n} ^ 2 = -n [/ math]?

¿Cuál es el mejor algoritmo para ocultar datos en texto?

¿Qué es el algoritmo Twofish?

¿Qué temas básicos hay que saber en C ++ antes de aprender estructuras de datos y algoritmos?

Cómo determinar todas las condiciones, suposiciones y limitaciones para un código C # dado que calcula el valor promedio de una matriz de diferentes números

Si descubrieras un algoritmo simple que encuentra solo y todos los primos, ¿para qué podría usarse? ¿Es esto posible?

¿Los expertos de ML de primer nivel crean su propio algoritmo de ML o utilizan bibliotecas de Python o módulos R?

Cómo analizar los detalles del problema en el concurso de codificación

¿Qué son los algoritmos y la estructura de datos y cómo puedo comenzar con ellos?