No pude resolver un problema fácil. Tengo 17 años y comencé a aprender C ++ (primer idioma) hace seis meses, y acabo de completar funciones, matrices y cadenas. ¿Debo dejar de programar?

Eres un programador Déjame explicarte por qué.

La programación no se trata de conocer un idioma con fluidez o de poder resolver problemas rápida y fácilmente, especialmente cuando recién está comenzando. En esencia, los programadores son personas que resuelven problemas complejos y crean cosas que hacen que nuestras vidas sean un poco más fáciles.

Claro, los grandes programadores a menudo pueden simplemente “resolver las cosas”, pero llegar a ese punto requiere tiempo, persistencia y aplicación. Por lo general, eso significa pedir ayuda, buscar cosas en StackOverflow o consultar un libro de texto. No hay vergüenza en buscar respuestas y construir sobre el código y la documentación de otros programadores, sucede todo el tiempo con los mejores de nosotros.

Lo que te define como programador es que no te rindes. Si decidió abandonar el problema por completo y no molestarse en terminarlo, entonces no es un programador.

Hay muchas maneras de convertirse en un mejor programador, por supuesto. Si está buscando acelerar su curva de aprendizaje y capacitarse en los idiomas más relevantes para los estándares actuales de la industria, debe considerar un programa inmersivo como Galvanize .

Durante seis meses, pasa 40 horas a la semana trabajando con varios instructores, trabajando en equipos y construyendo un proyecto final que puede compartir frente a docenas de líderes de la industria que buscan contratarlo.

También nos centramos en lenguajes, bibliotecas y marcos relativamente nuevos, especialmente en JavaScript (Node, Ember, Angular, React, etc.) y Ruby on Rails. Ese podría ser un cambio de ritmo refrescante en comparación con C ++ y los lenguajes más antiguos y robustos en los que está trabajando actualmente.

Independientemente del camino que elija, no abandone la programación. Vive para el desafío.

Tu historia es mi historia.

Yo también tengo 17 años. Estudio en una escuela afiliada a CBSE en Delhi y también soy estudiante de informática.

Recuerdo mis primeros dos meses en el undécimo grado. Eran TERRIBLES. Me sentí como un fracaso absoluto. Estaba convencido de que C ++ no es lo mío y me sobreestimé. Le dije a mi madre que quiero cambiar mi tema a algo más fácil. Mi mamá habló con los maestros, les dije a todos mis amigos que estaba cambiando mi clase. Se derramaron lágrimas, la tristeza se nubló, mi madre se estaba volviendo loca hablando con los maestros y lo que no. Iba a entregar mi solicitud de cambio de clase, pero no sé por qué me detuve. Simplemente me detuve y nunca presenté la maldita cosa. Tal vez porque quería estar en la misma clase con mis amigos (sí, adolescentes ingenuos), o tal vez me di cuenta de que solo estaba trabajando para nada.

Sí, no pude comprender el concepto tan rápido como mis compañeros.
Sí, a veces mis códigos eran terriblemente ineficientes.
Sí, estaba seguro de que no equivalía a nada.

Pero todo eso cambió con el tiempo.

Yo practiqué. No dejé que me tirara más abajo. En cambio, lo usé para mi ventaja. Lo usé como fuerza impulsora. Solía ​​hacerlo para seguir adelante. Practiqué mucho No me comparé con otras personas. Bien, pueden comprender el concepto rápidamente. No hay problema si no puedo. Solo agregaré diez minutos adicionales. ¡Vaya cosa!

¿Y adivina qué?
Yo encabecé mi clase. No fue un milagro de la noche a la mañana o una sorpresa. Fue un trabajo duro y un esfuerzo sincero que finalmente valió la pena.

Estoy tan seguro ahora. Soy capaz de resolver las preguntas más difíciles que mis amigos, que fueron rápidos en comprender los conceptos, no pueden.

No estoy diciendo que soy el mejor de todos o que soy una diosa C ++. Solo quiero decir que diagnostica tus problemas.

Diagnostiqué el mío y determiné que estaba en constante competencia con mis compañeros y pasé el mejor momento de mi día comparándome con ellos. Me detuve de inmediato.

C ++ no es un lenguaje fácil. Exige paciencia y amor.

Pregúntese, ¿realmente le apasiona el tema?

Si la respuesta es un sí indiscutible, entonces nadie puede detenerte. Ninguna barrera, ninguna persona, ninguna entidad puede impedir que aprendas el idioma.

Es posible que necesite más tiempo, más comprensión, más familiaridad con la parte teórica del tema (¡tómalo, la teoría importa!).

¡Hay algunos sitios increíbles y canales de YouTube por ahí!

Para ser honesto, ¡me han enseñado más de lo que mi libro del curso y mi maestro podrían enseñarme, combinados!

Es un proceso Para algunos es lento, para otros no lo es. ¿Quizás caes en la categoría anterior como yo? ¿Y qué? Tienes todo el tiempo del mundo. Por cierto, no juzgues tus habilidades en notas o desempeño en la escuela. Lo hice y fue un gran error.

Tienes tantos años por delante. Has comenzado temprano, es un comienzo, úsalo sabiamente. ¡No te golpees!

¿No puedes hacer una pregunta en particular? ¡Sal, juega algo, camina, ve a comer a un restaurante, lee un libro, haz lo que quieras por el amor de Dios! Vuelve mañana y prueba la pregunta. Revisa la teoría de nuevo, lentamente. Inténtalo de nuevo. No puedo hacerlo Vale, verifica la solución. ¿Te sientes estúpido? No lo hagas ¡Codificará preguntas difíciles en poco tiempo y sin esfuerzo porque crecerá!

Honestamente, relájate. Es un tema genial e interesante. Trátelo como un pasatiempo, no como una presión adicional. ¡Te encantará y rendirás mejor!

¡Feliz codificación!

Jajaja Tuviste la respuesta todo el tiempo en realidad 🙂

“Después de mirar la solución, me sentí muy estúpido, ya que parecía muy fácil”.

Después de mirar la solución, entendió el algoritmo completamente, incluso diciendo que en realidad era muy fácil. Eso significa que eres inteligente. Significa que has aprendido las ideas y el patrón utilizados para resolver ese problema en particular, que, créeme, podrás aplicarlo fácilmente a otros problemas.

He programado desde la escuela secundaria, tal vez alrededor de tu edad. C ++ también. Los programadores intentamos resolver problemas interesantes, y si encontramos la solución nosotros mismos, nos ponemos contentos. Si estamos atrapados en un problema, tratamos de ver la solución de otra persona, dice “¡Oh, eso fue simple!”, Y avanzamos para abordar el siguiente problema. Al hacerlo muchas veces, mejoramos y mejoramos la programación y antes de que te des cuenta, escribes bucles y cosas como un profesional.

Creo que estabas un poco cansado mentalmente. Eres inteligente. Descanse bien, continúe programando y continúe con su plan de dominación mundial 🙂

¿Tienes 17 años y ya estás aprendiendo el idioma más difícil de aprender? Cuando tenía 17 años estaba ocupado jugando con mis amigos y persiguiendo chicas 😉
¡No te preocupes demasiado! Supongo que su fracaso no fue exactamente porque no es inteligente, sino solo por falta de experiencia. Sigue practicando y aprende de tus errores. A menos que desee trabajar en la NASA, la mayoría de los problemas de programación de la “vida real” son los mismos que los anteriores. Una vez que conozca uno, recordará la próxima vez que lo encuentre.
Recuerde ‘La práctica hace la perfección’

Notas: quizás desee intentar aprender un lenguaje más fácil, como C #, Java o Python.

Desearía haber comenzado a aprender cuando tenía 17 años. Tengo 40 años. Comencé a aprender Objective-C hace 3.5 años. Tengo una aplicación simple en la tienda de aplicaciones y admitiré que cada vez que me encontraba con el mismo problema, al no poder descubrir cómo hacer lo que tenía que hacer, lo busqué en línea después de luchar por un mientras. A veces días

Eso fue hace 3 años. Desde entonces, he seguido aprendiendo CONSTANTEMENTE leyendo cada libro que podía comprar, trabajando en cada tutorial que tenía tiempo para trabajar después del trabajo, etc. Ahora comencé una nueva aplicación alrededor del 1 de enero y ahora estoy 85% completa con ella. Las lecciones que aprendí al resolver los problemas y vivir la frustración han comenzado a dar sus frutos.

La primera vez que estaba construyendo mi aplicación inicial, todo lo que realmente tenía era una idea. No tenía experiencia y poco entrenamiento, nada formal. Ni siquiera podía conectar una interfaz de usuario para capturar texto de un campo de texto sin buscarlo. Nadie sabe todo sobre ningún idioma y tú nunca lo sabrás. Siempre tendrá que buscar soluciones, ya sea desde la documentación o desde Internet. La belleza de aprender a codificar hoy en día es que tienes una gran cantidad de información ilimitada a tu alcance.

No, no te falta inteligencia. Tienes la mente perfecta para un programador desde mi punto de vista, te autoevalúas, te humillas lo suficiente como para pedirle consejo a alguien. Esas virtudes te llevarán tan lejos como quieras llegar. Créeme. Parece que te sientes un poco derrotado y eso es un síntoma de pasión. Tienes que tener pasión por ello. Lo tienes, sigue después. Como dijo Chris Prakoso, solo necesitas más experiencia. Simplemente encuentre algunos ejercicios y tutoriales sobre cosas que no sabe e incluso cosas que ya sabe y repáselas. Revísalos más de una vez. Estoy tomando un curso ahora en línea que está por debajo de mi nivel de habilidad, pero ayer aprendí algo que me hizo reescribir parte de mi propio código en mi proyecto actual. No soy un experto, pero tengo un ingreso mensual recurrente de una aplicación muy simple. Me llevó 6 meses escribirlo, ahora podría escribirlo en probablemente 3 semanas y hacerlo aún mejor.

No te rindas, esta comunidad necesita personas que se den cuenta de que no lo saben todo, tenemos muchas personas que “saben todo”.

Además, nunca aprendí nada cuando las cosas iban bien. Solo aprendí mis mejores lecciones a través de errores. He hecho un racimo. Podría escribir una serie de libros, créeme. Solo sigue así. Mira cuántas personas han respondido esta pregunta, ¿alguien te dijo que renunciaras?

Esos son mis pensamientos, espero que lo encuentren alentador.

Me consideraban un buen programador en mi universidad. Estaba en ingeniería eléctrica y estudié C ++, Java yo mismo. Desarrollé un mini compilador de C como mi proyecto de graduación.

Después de la universidad, trabajé en varias compañías y me consideraron un desarrollador muy bueno en todas partes.

Después de 6 años de trabajo, me tomé un descanso.

En unos meses, volví a buscar trabajo. En una entrevista, me dieron este problema:

Encuentra el segundo número más grande en una matriz.

¿Puede esperar un problema más simple para un codificador experimentado de más de 6 años? Escribí un ciclo para encontrar el número más grande, y luego otro para encontrar el segundo más grande. Me pidió que lo hiciera en un solo bucle. Lo hice, y él demostró que estaba mal. Había estropeado la condición que actualiza el segundo número más grande. E incluso después de que él señaló, simplemente no pude encontrar el correcto. Mi cerebro se había rendido. No hace falta decir que fui rechazado.

En unos días, fui seleccionado en una compañía diferente. Me uní como ingeniero. En unos pocos meses, recibí una doble promoción y ahora estoy liderando el equipo.

¿Qué hubiera pasado si me hubiera rendido después de haber fallado en resolver ese problema? No había posibilidad de que me hubiera rendido, porque no soy un programador porque soy muy bueno en eso. Lo soy porque eso es lo que más me gusta hacer.

Un gran NO! No debe abandonar la programación en absoluto.

Y más que tus habilidades de programación, supongo que tu actitud para abordar un problema necesita un impulso. 🙂

Puedo entender la frustración con la que habrías escrito la pregunta. Pero, razonemos racionalmente.

  • ¿Aprendiste a hablar solo en un día? Te debe haber llevado al menos 2-3 años, ¿verdad?

Las habilidades de programación, para ponerlo en la forma más simple, es una forma de conversar con su máquina.

Sugiero que busque una solución verbal para el enunciado del problema y lo escriba. Ese es tu algoritmo.
Entonces, paso 1:

  • Comienzas con instrucciones más pequeñas.
  • Casos de uso específicos, conjunto de resultados limitado, etc.
  • Aprende la sintaxis. Las funciones y las estructuras de datos a su disposición.

De la misma manera que un bebé aprende algunos sustantivos y verbos.
Por qué solo un bebé, cuando uno comienza a aprender un nuevo idioma, por ejemplo, francés, solo aprendemos algunos verbos comunes y frases populares.

Y eso fue lo que hiciste. Felicitaciones a eso! 🙂

Ahora que ya ha logrado esto, aquí está el Paso 2 , Los indicadores clave:

  • Compruebe si sus suposiciones iniciales sobre el problema son correctas o no.
  • Asegúrese de que su problema funcione para todos los valores posibles de la entrada proporcionada. ¿Cómo haces eso? Considérate un hacker y piensa en casos límite. Piense de una manera que necesite todos los casos posibles, de modo que pueda romper su propia solución.
  • Uno de los errores más grandes que cometen la mayoría de los programadores es que se apegan demasiado a su código. Aprendí esta lección muy importante de la manera difícil. Cuanto antes aprendas esto, mejor.
  • Descubre cómo puedes aprovechar la estructura de datos que has elegido.

Refiriéndose al punto en su pregunta donde mencionó que ‘Descubrí los casos más nuevos y modifiqué el programa existente’, está en el camino correcto. Solo sigue estos consejos. 🙂

Paso 3:
Asegúrese de que su solución sea óptima.

Sin embargo, tomará algo de tiempo y experiencia. Pero una vez que lo domines, parecería fácil. Siempre trate de mantenerlo ordenado y simple.

También ha mencionado que “se sintió estúpido porque la solución parecía fácil”, en realidad porque ha desarrollado ciertas habilidades a su debido tiempo para considerar que una solución es simple.

En cuanto a las referencias, considere estas:

  • Tutorial para principiantes de C ++
  • Tutorial de C ++
  • Tutoriales de programación C, C ++

¡Feliz programación! 🙂

Y, gracias por el A2A Anukul Sangwan 🙂

Tienes 17 años, soy años mayor y todavía estoy luchando con asociaciones en Ruby on Rails. Si eres inteligente para comprender cadenas, matrices, funciones, etc., eres lo suficientemente inteligente como para hacer más e incluso abrumarte.

Me usaré como ejemplo. Empecé a aprender Ruby hace unos 2 años. Tuve muchos problemas que me hicieron sentir estúpido pero nunca me rendí. Creo que si la gente puede escribir Ruby sin defectos, ¿por qué no yo? No es que los lenguajes de programación sean innatos. Es una habilidad Al igual que cuanto más intentes hablar y practicar un segundo idioma, mejor lo aprenderás. (Hablo polaco con fluidez y escribo un buen código Ruby ahora). Muchas veces los polacos a mi alrededor preguntan “¿Cuánto tiempo llevas en Polonia?” Les digo, “¡2 años!” pero luego piensan que estoy mintiendo (sí, mi polaco es TAN bueno).

Aquí está el truco: si quieres saber algo y resolver problemas de programación, tienes que sumergirte literalmente en el lenguaje. Hablo polaco con fluidez porque aprendí lo básico y estoy rodeado de polacos, las vallas publicitarias están en polaco, en las tiendas me “obligan” a hablar polaco o no obtendré lo que quiero. Hice lo mismo con Ruby. Me sumergí en el idioma. ¿Cómo puedo hacer eso? Me sorprendí con Rubyists, ¿dónde? En IRC, los grupos de Facebook, siguieron a los Rubyists en Twitter, leyeron artículos e intentaron descubrir qué códigos estaban haciendo.

El hecho de que no puedas resolver problemas simples de programación no significa que seas estúpido. Tu no eres. Parecía difícil para ti porque no eres lo suficientemente “fluido” como para decir “lo que quieres en la tienda”. No eres lo suficientemente fluido (todavía no) para pensar “CÓMO” resolverlo. Se trata de practicar, aprender, unirse a grupos, practicar, practicar y practicar, no hay magia en ningún lado. Nadie es más inteligente que nadie. Sin embargo, es muy importante que ames lo que estás haciendo, lo cual, desde tu publicación, podría decir que tienes pasión. La verdad es que desde aquí, habrá una docena más de problemas que no podrás resolver. Eso es normal, pero si mantienes el celo actual. Después de algunos días, meses, años, puede resolver esos mismos problemas e incluso más difíciles que no podía resolver ahora. Al igual que cómo puedo decir cualquier cosa que quiera en Ruby a la computadora y cómo puedo decirle a cualquier polaco cualquier cosa que tenga en mente.

Te recomiendo que te unas a un canal IRC de tu lenguaje de programación. La gente de allí es muy útil y más amigable que en Stack Overflow. ¡Use estos recursos para su ventaja! Ahora regrese y encuentre más problemas para resolver.

¡Era muchísimo mayor que tú cuando aprendí mi primer lenguaje de programación (18)! LOL Y aún mayor cuando enseñé mi primera clase de programación (40). Y, después de unos cientos de estudiantes, aquí hay algunas observaciones …

Literalmente, 8 de cada 10 estudiantes de programación no pueden programar más allá del nivel primario para salvar sus vidas. No creo que esto sea tanto una función de inteligencia como una función de paciencia, persistencia y pasión (las 3 P). Las 3 P pueden llevarlo más allá del nivel de programación intermedio. Sin ellos, simplemente estás perdiendo el tiempo.

Paciencia : la paciencia lo es todo en la programación porque la programación es una mierda compleja que requiere aprender a descomponer problemas complejos en muchos componentes entretejidos menos complejos para lograr una solución. Aprender a cambiar la forma en que uno piensa en resolver problemas lleva tiempo. IOW: el error que cometen muchos estudiantes con respecto a la programación es pensar que hay un atajo mágico entre los puntos ‘A’ y ‘Z’ cuando en realidad hay 24 atajos (es decir, ‘B’, ‘C’, ‘D’, ‘ E ‘, etc.)!

Persistencia : la persistencia lo es todo en programación porque la programación es una mierda compleja que requiere que aprendas un nuevo lenguaje. Esperar que aprendas un nuevo idioma con una exposición ocasional, poca orientación y ninguna práctica diaria es como ponerte un condón después de tener relaciones sexuales y luego preguntarte por qué estás haciendo bebés. Para tener éxito en esto, debes hacer las cosas en el orden correcto y seguirlo.

Pasión : la pasión es todo en la programación porque la programación es una mierda compleja que requiere lo que para la mayoría de los observadores no programadores parecerá una demanda anormal de su tiempo. Es MUCHO más que trabajo, es una forma de vida.

Como dijo un famoso ingeniero de juegos (parafraseado): “Tu pasión por la programación solo puede llevarte bastante lejos. La comprensión de que puedes usar computadoras para crear algo donde antes no existía nada es una sensación poderosa y adictiva que puede llevarte durante años”. ” (John Edwards – Vid de YouTube en Metaprogramming | Thatgamecompany)

Pasarás muchas, muchas horas con esta nueva ‘cosa’ llamada programación. Si te falta pasión por él, pronto se convertirá en un temido dolor en el culo que solo los locos harían para ganarse la vida si tuvieran que hacerlo. Algunos incluso podrían decir que tendrías que ser un científico loco para continuar.

¿Obtener la imagen?

La gran mayoría de los que carecían de las 3 P no habían desarrollado las habilidades previas de pensamiento lógico necesarias para avanzar más allá de lo básico. Esto a menudo resultó en una escasa motivación para continuar cuando se enfrentaba a los nuevos problemas que la programación presentaba todos los días.

Si su única motivación para convertirse en programador es dinero, se dará cuenta rápidamente de que esto no es para usted. Dicho esto, “rápidamente” es un término relativo que podría significar meses para algunos y años para otros. Desafortunadamente, los verdaderos programadores deben lidiar con posers apasionados todos los días.

Mucha suerte para ti, aunque la suerte tendrá muy poco que ver con tu éxito en este campo.

Espero que ayude, y gracias por el A2A.

Lo mejor, Frank [en] MFJLabs

¡No, ciertamente no deberías! Déjame decirte algo sobre mí. Cuando empecé en el mundo de la programación, solía ser un asco. No podía entender ni las cosas más simples. Pero oye, adivina qué, soy infinitamente mejor en eso que hace 8 años cuando escribí mi “Hola Mundo”. Todavía no me considero un buen programador, pero esa es una discusión separada que es mejor tener sobre un buen whisky y sin un control total de las facultades de uno. De todos modos, lo que cambió para mí fue que fui deliberadamente persistente y terco sobre la superación personal cuando me di cuenta de mis errores. Ahora estoy trabajando para una compañía de tecnología “genial” con algunas de las mentes más brillantes en informática. Si un tipo muy promedio con un intelecto muy promedio puede hacerlo, ¡también puedes hacerlo hermano (o hermana)!

Estoy totalmente de acuerdo con la respuesta de Jessica Su a continuación. Si te rindes ahora, desciendes por una mala pendiente en la que NO quieres encontrarte. Pierdes el respeto por ti mismo y eso es algo casi imposible de recuperar. Sé fácil contigo mismo. Esto lleva tiempo. Según mi experiencia en la industria, se necesita un promedio de aproximadamente 5-6 años de esfuerzo muy sólido y persistente para llegar a ser bastante bueno en esto. ¡Tienes 17 años, mucho más joven que yo cuando comencé a hacer esto, así que relájate!

Ahora que tenemos eso fuera del camino, aquí hay algunas pautas generales que utilicé comenzando:

1) Respira hondo y simplemente relájate. Date cuenta de que si no puedes resolver esto, no es el fin del mundo. Si no es así, entonces el siguiente y el siguiente después de eso … eventualmente con suficiente exposición, comenzará a obtenerlo

2) Un buen programador pasa la mayor parte de su tiempo pensando. Haz eso. Entrénate para pensar. Tomemos un ejemplo simple: “Dada una cadena, inviértela”. Visualiza esto en tu cabeza. Piensa en lo que se necesitará para revertir sus personajes. Trabaja el problema en una hoja de papel y solidifica tu comprensión del mismo.

3) Al comenzar, codifique su problema en al menos dos idiomas. (C ++ es imprescindible).

4) Haz esto a diario. Elija dos problemas al día basados ​​en las estructuras de datos y las técnicas algorítmicas que se enseñan en clase y simplemente comience a pensar en ellos. Piense en ellos todo el día si lo desea y luego codifíquelos.

5) Leer mucho código. Si no puede entender el problema, mire la solución y la explicación que lo acompaña. ¡Está perfectamente bien! Te ayudará a mejorar. Al igual que su problema anterior, donde observó cómo debe implementarse y eso condujo a un momento “eureka” … Bueno, el aprendizaje real no es más que una larga serie de momentos “eureka”.

Los errores que cometí que no debes:

1) Me frustraba fácilmente MUCHO. Mirando hacia atrás, eso fue una pérdida total de tiempo y no me sirvió de nada.

2) Me rendí varias veces antes de darme cuenta de que me estaba disparando en el pie. Demonios, incluso cambié mi especialidad a economía por pura frustración y enojo. Perdí un tiempo precioso, allí, espero que no cometas el mismo error. Sin embargo, finalmente volví a la programación.

3) Cuando te enfrentas a un problema, ¡no saltes el arma! Relájese y piénselo como se mencionó anteriormente.

Espero que esto ayude y buena suerte!

“El maestro falla más veces de lo que intenta el principiante “.

Actualmente estoy practicando en InterviewBit. En general, el tiempo que tardo en resolver un problema es el doble del tiempo promedio para resolverlo. Anoto muy pocos puntos, particularmente porque soy lento y pierdo puntos en resultados lentos y envíos defectuosos. Pero eso no es un revés. Nada es. Estoy aprendiendo … No soy un experto en eso. Y espero mejorar en eso si soy consistente. No necesita ser un genio para codificar, debe ser determinado.


Así lo habría dicho el LOBO …

¿Está atrasado en las facturas de su tarjeta de crédito? ¡BUENO! Levanta el teclado y comienza a programar !!!
¿Se burla tu amigo de las malas habilidades de codificación? ¡BUENO! Levanta el teclado y comienza a programar !!!
¿Tu novia piensa que eres un perdedor sin valor? ¡BUENO! Levanta el teclado y comienza a programar !!!

¡Quiero que trates tus problemas convirtiéndote en HABILITADO!

Feliz codificación.

Si nunca has hecho algo antes, ¿cómo puede la respuesta ser obvia o fácil?

Te estás castigando por no saber una respuesta a un problema del que se esperaba que supieras. Ese es todo el punto de aprendizaje. Ya hay muchas soluciones y funciones integradas para encontrar subcadenas. Ese no era el punto de tu ejercicio.

El objetivo del ejercicio era enseñarte a pensar.

Aprender a resolver y abordar problemas es la clave de la programación y todos tienen que comenzar en alguna parte. A veces, ese comienzo es a través de ejercicios académicos que te obligan a pensar en algo en lo que nunca antes has tenido que pensar. Otras veces puede ser tu propia curiosidad la que conduzca la exploración.

Cuando estaba en la universidad, me preguntaba “¿Cómo funcionan las GUI?”. Específicamente, ¿cómo hacer ventanas superpuestas y poder manipularlas con el mouse? ¿Cómo funcionan los botones y las casillas de verificación y todos los diversos elementos? Ahora, esto es en una era en la que las GUI como Windows y Macintosh eran comunes y no es obvio que estos problemas se hayan resuelto. Al igual que su problema de subcadena.

Pero tenía curiosidad y comencé a cavar. Eso sí, esto es anterior a Internet y tuve que usar esta antigua fuente de conocimiento llamada “biblioteca”. Con este motor de búsqueda igualmente arcaico llamado “catálogo de tarjetas”. Pero había suficiente material para comenzar.

Pasé los siguientes dos años básicamente recreando partes de lo que hacen Windows y Mac. Y lo hizo mal. Pero funcionó. Aprendí cómo se hizo y escribí mis propias bibliotecas GUI de manera cruda.

Desde un punto de vista práctico, esto era completamente inútil. Después de todo, las API GUI y las herramientas ya existían. No estaba haciendo nada que destrozara la tierra. Pero la experiencia de explorar el problema por mí mismo me dio una visión profunda de los enfoques de resolución de problemas, descubriendo algoritmos por accidente y, en general, ampliando mi conocimiento de las computadoras en general.

Esa es la etapa en la que estás. Y lo que necesitas quitar de la experiencia. No dejes que te desanime porque te digo que esta no será la última vez que esto suceda. Y cuando suceda en el mundo real, jugarás con apuestas reales. Literalmente será un tipo de decisión de poner o dejar de fumar.

Persistencia en la clave. Si bien no todos los problemas tienen solución, la mayoría de los problemas cotidianos sí lo son. Por ahora estás en la fase académica. Confía en mí, en el mundo real estarás usando las funciones ya hechas para tales tareas. No pierdas el tiempo reinventando la rueda para problemas comunes. Debe aprender cómo encontrar las soluciones a los problemas comunes que ya existen para poder concentrarse en los problemas interesantes que quedan.

Todos los problemas interesantes existen en los bordes de las soluciones comunes.

Si le gusta la programación, tenga algo de persistencia y manténgala. Estarás agradecido de haberlo hecho. Incluso en el fracaso, como has experimentado, aprendes algo. Para nosotros, los programadores de cobro de cheques del mundo real, el fracaso es donde adquieres más aprendizaje. Para avanzar, a veces necesitas equivocarte. Y lo harás Todos lo hacemos en algún momento. El objetivo es salir con su trabajo intacto y algunas lecciones valiosas para aplicar en el futuro.

Haz eso aquí. Aplica la lección. Sí, era obvio pero aprendiste algo. El siguiente problema como este que encuentre tendrá experiencia para recurrir y quizás atacarlo de una manera diferente. Y luego triunfar.

No está fallando en la programación, per se, sino en la resolución de problemas.

En lo que eres débil es en algoritmos y estructuras de datos. No me sentiría demasiado mal por no poder inventarlos sobre la marcha: somos afortunados de vivir en una época en la que se han descubierto y estudiado muchos algoritmos y estructuras de datos maravillosos. Obtiene acceso a una gran biblioteca de ellos con Standard Template Library en C ++.

Pero volvamos a su problema de cadena. En primer lugar, la forma en que lo resolvió es cómo todos los demás que aún no tienen una solución conocida. La mejor manera de encontrar un algoritmo para resolver su problema es en un papel o en una pizarra. El código se escribe después de que se suspende la lógica.

Notaré una cosa: contrato con base en la capacidad demostrada de resolución de problemas, en lugar del conjunto de habilidades. Ser capaz de salir de estos problemas es lo que te hace valioso. Definitivamente, también debe explorar las estructuras de datos existentes y los algoritmos que otras personas han ideado. Le ayudarán a encontrar soluciones creativas para diferentes problemas y le brindarán un conjunto de herramientas para atacar problemas.

La mayoría de las cosas que implementará en su carrera será la selección y el despliegue de algoritmos conocidos, y los ajustará / combinará para satisfacer sus necesidades.

Hasta este punto, no he mencionado la característica más importante de un programador y un solucionador de problemas: Grit. Apégate a ello. Determinación. Tenacidad. Sin esto, fallarás en todo momento. Te rendirás demasiado pronto y te conformarás con menos cada vez. Con él, se contará con usted, sus superiores lo dejarán solo, se le ofrecerán progresivamente mejores trabajos en la industria y, lo más importante, logrará mucho más.

No te rindas Saca el culo de la computadora y ponlo en una pizarra. Eres lo suficientemente inteligente. En realidad, todo esto requiere mucho menos “inteligencia” de lo que comúnmente se supone. Lo que te falta es la aplicación de arena, que flotará o hundirá tu carrera y tu vida, sin importar dónde la apliques.

La programación, especialmente la programación en C ++, no es fácil de dominar. Espere cometer errores. Aprende de los errores. No hay magia en marcha. Si algo no tiene sentido para ti, profundiza en la búsqueda de un ¡Ajá! momento. Tus problemas para encontrar una subcadena probablemente valen un artículo de blog para describir lo que intentaste y cómo salió mal. Dada una descripción más detallada del proceso de pensamiento que condujo al programa no del todo correcto, espero que la gente pueda hacer sugerencias productivas para ayudarlo a resolver problemas similares en el futuro. Es muy posible que al armar la historia se encienda una bombilla y se encuentre un camino mejor.

Diferentes personas tienen diferentes estilos de aprendizaje, pero hablar sobre el problema es un enfoque que a menudo funciona para mí. Dada una tarea, a menudo hay más valor educativo en equivocarse en el primer intento y luego profundizar en el error para descubrir cómo no había detectado el problema antes. Una historia de mi propia lucha libre con una sorpresa que encontré en un pequeño programa de Python: ¿Tus antepasados ​​sufren de mutaciones no planificadas?

No renuncies a la programación solo porque lo encuentres desafiante. Diablos, su suministro interminable de desafíos es lo que me mantiene interesado en el tema. Menos relevante para su pregunta, pero también vale la pena tenerlo en cuenta: no se sorprenda cuando se encuentre con alguien que sea un mejor programador que usted. En lugar de tomar su habilidad como una señal de que debes huir de la programación, considéralo como una oportunidad para aprender de un experto. Lea su código y pregúnteles al respecto. ¿Puedes ver algunas áreas que necesitan mejoras en su código? ¿Ves algún error?

Lectura adicional: enséñese a programar en diez años

Me gustaría intervenir con un par de cosas.

Primero, tengo el doble de tu edad y acabo de empezar a crear sitios web. No por diversión, no como un cambio de carrera, sino por necesidad. ¡Sé menos de lo que sabía que no sabía! Y, sin embargo, cada día he aprendido algo nuevo. Y casi todo lo que he aprendido es el resultado de haber roto algo más y necesitar una corrección. Con cada error aprendo pequeños fragmentos de java y jquery y toneladas sobre html y css. En algún momento tal vez me expandiré para cometer errores con C, C ++, Python, tal vez Ruby. Y todo ese tiempo seguirás siendo 20 años más joven que yo con 20 años más de oportunidades que yo. Créeme cuando te lo cuente, saborea cada día y cada experiencia. Usted tiene un montón de tiempo. Disfruta de las victorias y supera los pasos en falso.

En segundo lugar, si puede tomar una sola acción hoy que cambiará el resto de su vida, será esta: elimine la palabra ‘dejar de fumar’ de su vocabulario. Dejar de fumar es un veneno, un virus. La única forma posible de fallar es renunciar. El ejemplo que proporcionó anteriormente no ilustra las acciones de un abandono. Lo mantuviste y cuando agotaste tus ideas, encontraste un recurso para ayudarte con la respuesta. ¡Eso es precisamente lo que hace un ganador! Un ganador no tiene todas las respuestas, un ganador encuentra las respuestas donde sea que estén.

Prefacio diré que mi experiencia de codificación se basa principalmente en sistemas embebidos y está bastante desactualizada. Aun así, miré su código como si estuviera revisando una de las revisiones de código de mi equipo, y tengo algunos comentarios crujientes que podrían ser ciertos para cualquier desarrollador en cualquier etapa.

Primero, como otros han mencionado, escriba su algoritmo en un buen formato de texto. No tome atajos, hágalo lo más completo posible. Mientras lo hace, resalte los lugares donde desee probar y mostrar resultados y valores provisionales a medida que avanza.

A medida que avanza por su algoritmo, piense en las condiciones de contorno y en cómo validaría sus datos entrantes para asegurarse de que puede gestionar las condiciones de error. Está esperando una cadena, entonces, ¿es importante abordar un tipo inesperado? Ese tipo de cosas no es tan importante en este código, pero al escribir partes del código del equipo se vuelve de vital importancia probar y validar cada fragmento de datos entrantes (y salientes).

Segundo, use su algoritmo como plantilla para su código. Con eso quiero decir que a medida que codificas cada línea de tu algoritmo, insertas esa parte del algoritmo en tu secuencia de comentarios para que puedas saber con todo detalle todo lo que intentas hacer. No puedo enfatizar demasiado el valor de los comentarios claros. (Su compañera de equipo lo enfatizará, la primera vez que trata de descifrar su código). Y cuando vuelva a hacerlo en dieciocho meses para agregar la tercera solicitud trivial de marketing, estará profundamente agradecido.

Lo que estás haciendo aquí con la manipulación de cadenas y el análisis es una habilidad terriblemente esencial. Pero lo que estás aprendiendo aquí en términos de metes y límites es mucho más valioso. La fase de prueba, particularmente la prueba de regresión, es al menos tan importante como cualquier otra parte del código.

Con eso en mente, Tercero. Para cada punto en su algoritmo que pensó que era importante mostrar el resultado de una prueba, incruste declaraciones simples de visualización / salida en un booleano global que pueda activar y desactivar. Los programadores a menudo integran una jerarquía de pruebas globales para que puedan activar y desactivar la visualización de varias secciones de su código durante las pruebas.

Estas condiciones comprobables a menudo se dejan en el código pero se comentan, de modo que durante la próxima crisis de Y2K puede desagregar y mostrar las condiciones de prueba a medida que modifica su código.

Esta es la clave para escribir código complejo que también es bueno, viable y mantenible. Comprende el problema por completo. Documételo tan a fondo como sea posible: aunque pueda pensar que es ridículo mientras lo escribe, cosechará elogios interminables cuando regrese a él. Y asegúrese de que puede probar cada parte de él.

Quédate con eso. La tarea creativa del desarrollo de software para mí fue fuente de gran alegría. Y si está con la compañía correcta, seguirá siéndolo durante toda su permanencia.

Hace mucho tiempo, tenía un instructor para la codificación de IBM Assembler que se refería al trabajo de todos los estudiantes como Código Brillante. Eso es tanto un gran elogio como una gran humildad: el código que funciona ES brillante; el código que funciona como anticipa es cada vez más. Es un triunfo y una fuente de gran orgullo y maravilla. Por otro lado, ese Código Brillante se burla de tus esfuerzos como el esclavo que susurró la mortalidad al oído de Vir Triumphalis a las puertas de Roma.

Tu historia es importante por dos razones. Primero, ya estás comenzando a lidiar con la frustración. Examina el enfoque “prueba un poco, codifica un poco”. Esto aprovecha la frustración para los buenos fines: encuentre un punto de falla, preocúpese, escriba una prueba que _prima_, comprenda, haga que las cosas funcionen, y luego siempre tendrá la prueba que falla como una forma de diagnosticar problemas con su código. Con toda tu documentación. Con este enfoque, incluso el código “más simple” se convierte en una experiencia de aprendizaje profunda, en lugar de un episodio frustrante. ¡Abraza el fracaso!
La segunda razón es que su historia demuestra ampliamente las limitaciones de aprender a programar en un solo idioma. Especialmente si eres un principiante, y especialmente si no has encontrado “prueba un poco, codifica un poco”, naturalmente tenderás a culparte a ti mismo. Una vez que haya aprendido a programar en varios idiomas (desde lo común hasta lo exótico y difícil), se dará cuenta de que cada idioma tiene sus puntos fuertes y débiles. Pruebe Javascript, Python, Perl, … o incluso Erlang y J. Luego puede reflexionar sobre el lenguaje y resistir la tentación de regañarse.
Recomiendo encarecidamente algunas “compras de comparación”. Explore el código de Rosetta. Intenta manipular cadenas en Perl y en Javascript. Aprende un poco de expresiones regulares. Es posible que de repente te sientas bastante crítico con C ++ y Java. (¡Google [Armstrong banana gorilla] para obtener más información!) Las facultades críticas que desarrolles te impedirán ser un programador más, limitado a pensar en un solo modo.
Feliz caza, Jo.

HaHa 🙂 Antes de decidirse a dejar de fumar, espere hasta depurar durante dos días y dos noches, señalando, revisando el algoritmo, inspeccionando los procesos y el flujo de la red, haciendo todo tipo de locuras, hasta que, durante un breve descanso en el inodoro, ¡Te darás cuenta de que es solo ese maldito punto y coma, que siempre ha estado frente a ti! ¡Y eso sucederá después de 15 años de haber estado haciendo este trabajo, después de un doctorado y muchas certificaciones!

Aparte de eso, sospecho que está siendo arrastrado por la mentalidad competitiva sangrienta que es corriente hoy en día: si no gano el Nobel (lo siento, el Premio Turing), no valgo nada. Tienes 17 años, ¿disfrutas lo que estás haciendo? ¿Estás progresando y obteniendo un grado razonable de éxito? Luego, piense que podría estar en el camino correcto para una vida feliz, que no es tan limitado como convertirse en el número uno, sin importar cuánta alegría, satisfacción y diversión tenga que renunciar para competir y lograrlo.

Además, piense que ser o no valer la pena, tener o no tener suficiente inteligencia, son ejemplos típicos de la forma incorrecta en que funcionan los sistemas educativos anglosajones. La neurociencia está demostrando que sus habilidades mentales se pueden mejorar mucho a través del entrenamiento, no importa desde donde comienzas. Por cierto, un joven de 17 años que está estudiando C ++ y tiene la humildad de hacerse la pregunta que hizo aquí debe ser bastante inteligente en primer lugar.

Finalmente, muéstranos el problema que causó tu frustración: puede que no sea tan simple como crees.

Echa un vistazo a esta línea dorada de código.

Es fácil para cualquiera resolverlo. Significa ” Si al principio no tienes éxito. ¡Inténtalo, inténtalo de nuevo! “. La programación es un arte y lleva tiempo descubrir los algoritmos, estructuras de datos y métodos correctos que se utilizarán. Una vez que entras en esta hechicería, no hay vuelta atrás y tienes que aprender constantemente todo para subir la escalera y convertirte en un maestro programador algún día. Recuerde, un programador nunca se cierra, solo se desconecta.

Hay algunos pasos excelentes para dominar el arte de la programación. Primero visualice el problema que se le ha dado en lógica matemática, dibuje diagramas y secuencias y luego intente convertir esas secuencias en algoritmos. Por último, traduzca los algoritmos a su idioma preferido de nivel superior. Aparte de esto, debe amar su trabajo al máximo, ya que cada línea que escriba va a impulsar su programa.

Enumeraré algunos pasos de mi propia experiencia que espero sean definitivamente útiles para usted. El secreto de escribir un código hermoso es aceptar, amar y apreciar su propio estilo de codificación.

  • Sigue tu propio estilo de codificación y nunca te dejes inspirar por otros en esto. Créame, definitivamente funcionará, ya que su propio estilo es algo original y siempre se sincronizaría con la línea de su pensamiento.
  • Refactorice a menudo para mantener el código en línea, en línea con las adiciones recientes.
  • Organice los archivos de clase en paquetes, archivos y carpetas. Hacerlo tiene dos beneficios, ya que agrupa los archivos y también facilita la búsqueda de una clase / archivo en particular.
  • Documente el código. Sí, agregue tantos comentarios para que cada línea sea comprensible. La belleza del código radica en la cantidad de intrincados comentarios agregados para explicar todo.
  • Sangra el código con frecuencia en un estilo consistente en toda la aplicación. A menudo nos olvidamos de esto y nos lleva a un desastre. Aunque no hay nada productivo al hacerlo, todavía embellece el código en gran medida.
  • Evite el anidamiento innecesario , ya que hace que el programa sea demasiado complicado para leer y comprender la lógica.

Al final de la línea, cuando pueda llamar a cualquier método (de una gran colección de clases) y recuerde que es completamente lógico , ¡alégrense! Ese es el momento, cada programador anhela experimentar y es el pináculo de escribir un buen código. En resumen, usted es el creador y con todas sus habilidades técnicas, va a crear algo que literalmente no tiene fin. Imagina la alegría de eso.

Por lo tanto, nunca deje de programar.

¡Feliz codificación!

Cuando tenía 17 años, lo estaba apagando con HyperCard. Eso fue mucho más indulgente y basado en secuencias de comandos, así que pude lidiar. Esto era 1994, por lo que no había mucho en la forma de “buscarlo en Internet”, incluso con un módem y acceso a BBS.

Aprendí PHP y luego Ruby (con la ayuda de varios amigos y salas de chat de IRC) y pasé mucho tiempo buscando cosas y tomando tutoriales. No soy un gran programador (ya que paso más tiempo en el lado del diseño) pero aprendí más al cometer muchos errores.

El consejo más importante que puedo dar:

  1. Aprende a leer errores. Los mensajes de error pueden ser crípticos. Una traza de pila puede ser más ruido que señal a veces. ¿Por qué no obtuve el resultado esperado? ¿A qué línea le falta un punto y coma (pasé 2 días en eso una vez antes de darme cuenta de que ese era el problema)?
  2. Aprende a investigar. Buscarlo en google no es renunciar, es un medio para un fin. Cuando estaba trabajando en el equipo de ingeniería, era “Llegar a la solución lo más rápido posible sin incurrir en deudas de código”. Muchos de los desarrolladores más inteligentes que conozco todavía tienen que buscar cosas. Hay mucho código que simplemente fluye, pero eso es después de VEINTE años de escribir software.
  3. Aprende un idioma diferente para comenzar. “Aprender a programar” de Chris Pine en Ruby es bastante bueno. La serie de Zed Shaw “Aprende [el idioma] de la manera difícil” también es buena. C ++ es una bestia. Básicamente, estás escribiendo todo tipo de cosas desde cero que se manejan en muchos idiomas modernos. Muchos de los patrones en el libro Gang of Four son manejados por el lenguaje en Ruby (por ejemplo, el patrón iterador se simplifica a Object.each). Básicamente, C ++ es difícil, y creo que sería mejor aprender conceptos y tener éxito fuera de algo como C ++, donde tienes que manejar la administración de memoria y todo tipo de cosas. El software de escritura se trata de resolver un problema del mundo real , no se trata de historias de guerra sobre cuántas líneas de código tenía que escribir. C ++ es totalmente bueno para muchas cosas, pero aprenderlo es tan divertido como un tratamiento de conducto.
  4. Aprende muchos idiomas, o al menos familiarízate con ellos. Los mejores ingenieros son los que pueden resolver un problema de manera abstracta y luego decir “está bien, ahora cómo abordamos eso mejor en [Idioma en el que estamos trabajando]. En LivingSocial, teníamos Ruby, JRuby (para alguna integración y pago de Java procesamiento), Clojure, R, Hadoop, Objective C y una variedad de otras cosas en el backend. La mayoría del trabajo de front-end es JavaScript. Ser capaz de saltar entre ellos y comprender las construcciones solo puede ayudarlo.
  5. Aprende a través de la construcción de cosas. Aprender en el resumen no funciona tan bien como cuando aprendes para que algo aparezca en la pantalla o para procesar un registro a través de la base de datos.
  6. Obtenga la mentalidad de “programador estrella de rock” y tírela a la basura. De Verdad. Puedes ser el próximo Linus Torvalds, pero no puedes. Pero decir “Debería dejar de fumar” porque no podías resolver un problema es ridículo. 10.000 horas Una vez que haya escrito software durante 10,000 horas (es decir, cinco años trabajando 40 horas semanales y dos semanas libres al año) estará en un nivel superior. Lea esto: Página en readwrite.com
  7. Siempre sé el peor músico en cualquier banda en la que estés. A medida que crezcas en tu carrera, terminarás en un punto en el que eres el programador más experimentado de la organización. Creo que eso generalmente significa que debe saltar a un proyecto de código abierto con personas a las que admira / deslumbra o necesita encontrar un nuevo trabajo. Para mí, poder trabajar con Rubyistas increíblemente talentosos me ha ayudado a aprender cómo escribir un mejor código.
  8. Obtenga un mentor y revise el código en cualquier idioma en el que esté trabajando. Esto a menudo también puede suceder a través del trabajo / pasantías. ¿Sería tan malo una pasantía de verano trabajando gratis para aprender código en un proyecto del mundo real con un mentor?

Todos los problemas son fáciles en retrospectiva. Siempre encontramos algo en el último lugar donde lo buscamos. Es fácil burlarse de nosotros mismos después del hecho o decir “No soy capaz” cuando, en realidad, todos éramos principiantes en un punto. La práctica y la colaboración crean un experto.