¿Debo dejar de programar si he estado aprendiendo durante varios meses, y cuando me enfrento a un nuevo problema de Ruby en Codewars o Codequizzes, mi cerebro inevitablemente se apaga? Tengo que mirar la solución para seguir adelante.

Bueno, eso depende de cuánto tiempo seguiste intentándolo antes de continuar. Hay un punto en el que un programador profesional simplemente no podrá resolver un problema. En ese punto, es importante reconocerlo y pedirle a un colega que lo ayude a analizar el problema, para que no pierda más tiempo. La programación de cualquier sistema no trivial es un esfuerzo de equipo, después de todo.

Dicho esto, si siente esto después de, digamos, solo 15-30 minutos, entonces debería comenzar a buscar mejorar su propio proceso de resolución de problemas.
El cerebro apagado al que te refieres le sucede a todos los programadores profesionales, y una de las principales habilidades de un programador es ser capaz de … golpear tu cabeza creativamente contra un problema hasta que lo entiendas. Ser un programador requiere una gran tenacidad y disposición para resolver un problema y desarrollar un proceso personal para resolver problemas difíciles.

Ve a tomar un café. Ve a respirar. Su cerebro no está hecho para pensar (hablar evolutivamente), está hecho para predecir y planificar movimientos. Los estudios han demostrado que su cerebro se volverá dócil, no se activará, cuando se siente a pensar por períodos más largos (lea el libro Spark si está interesado). Así que juega ping pong. Juega squash en tu almuerzo.

También encuentro que escribir un problema o explicarlo en voz alta a un animal de peluche (un colega también funciona, pero es menos costoso usar el tiempo de un animal de peluche, ya que la solución a menudo lo golpea sin que el colega tenga que hacerlo). diga una palabra, está explicando el problema en voz alta que lo sacará de allí).

En pocas palabras, trabaje para mejorar su proceso de resolución de problemas personales. Te será útil en general, no solo la programación.

Estoy de acuerdo con Scott Berry, y te sugiero que veas esto de una manera completamente diferente.

No memorices soluciones. En cambio, aprenda a programar y memorizar solo la sintaxis del idioma.

Aprenderá más escribiendo código incorrecto, que ni siquiera funciona *, que memorizando un código bueno. De aquí en adelante, todas sus soluciones son completamente suyas.

Para tomar el ejemplo que da (busque la aparición de todas las letras posibles en una cadena), la solución dada es muy compacta y elegante, pero no instructiva en absoluto. Está utilizando las características del lenguaje incorporado al máximo; ocultando lo que realmente está sucediendo.

Así que toma tu propia puñalada. Escribe un mal código. Recorre la cadena, un carácter a la vez. Solo busca la presencia de una ‘a’. Ahora busque una ‘A’ mayúscula o una ‘a’ minúscula. Imprimir ‘lo encontró!’ Si está ahí.

Ok, ahora para un código más malo. Busque la aparición de todas las letras y componga una cadena de 26 1/0. ¿Estás a punto de escribir 26 declaraciones ‘si’? Detente, hay una mejor manera. Piénsalo. Sigue pensando en ello, incluso si lleva días (¿cómo manejarías un alfabeto con 20,000 letras diferentes?)

Síguelo. Ya lo entenderás.

Luego escriba su código que da el resultado deseado. Felicítate a ti mismo. Resulta que eres “lo suficientemente inteligente” después de todo.

Ahora compare su código con el proporcionado. Tienes 50 líneas y ellas tienen una. Usaron algunas características del lenguaje mágico. ¿Qué son?

¿Qué | carta | ? ¿Qué es el mapa? Busque estas cosas y considere dónde podrían haberle ayudado en su solución.

De esta manera, está aprendiendo a programar primero, aprendiendo el matiz del idioma en segundo lugar, y finalmente usando ambos para escribir un buen código.

Sus criterios para rendirse no son los mejores. Otros han comentado sobre eso. Es necesario que te guste la resolución de problemas en la programación. Ese sería un criterio para programar la carrera entre muchos discutidos a menudo en Quora. No necesita resolver el problema basándose en la solución de otra persona para sentir que lo hizo correctamente. La única excepción podría ser una pregunta de ejercicio o prueba que lo lleve a mostrar conocimiento de un algoritmo específico, patrón, función, llamada a la API, etc. Luego debe usarlos para obtener la calificación o demostrar su competencia en los artículos específicamente mencionados. De lo contrario, una solución es una solución y seguimos adelante.

Algunas otras observaciones:

1. Resolver el problema mirando la solución y resolviendo el problema en función de su nivel actual de habilidades y experiencia son valiosos y utilizables como prueba de progreso. La clave es saber cuándo es el enfoque apropiado.

2. Las entradas y salidas claramente definidas son clave. El medio, a quien le importa tanto tiempo que no causa un problema de rendimiento o errores, este último significa que no realizó una prueba de banco del rango de entradas y salidas esperadas adecuadamente.

3. A medida que resuelve problemas de programación y luego encuentra diferentes soluciones, su habilidad es hacer una comparación y conocer las diferencias, ventajas y desventajas de cada uno.

4. La tecnología de software cambia continuamente y cuál es la mejor solución en las versiones actuales, versiones y así puede ser reemplazada en el futuro. Acostúmbrate a eso y vuelve a visitar el # 3.

La programación es completamente un esfuerzo comunitario. Las cosas que un programador pierde, otro las resuelve en un instante y viceversa. Esta es la fuerza detrás de la programación de código abierto. Siempre revise su código y siempre consulte a un colega cuando esté atascado.

La mayoría de la programación también está más cerca de resolver acertijos que inventar la rueda. Al unir lo mejor que otras personas han hecho, su propio código se mejora diez veces. Esta es una de las principales razones por las cuales las computadoras avanzan tan rápido, que el nuevo software y hardware siempre se basa en el trabajo de otras personas.

Las 2 preguntas importantes que debe hacerse es qué tan ingenioso es para encontrar una solución (no necesariamente encontrarlas usted mismo) y qué tan paciente es para resolver problemas. Esa es la mayor parte del trabajo.

Por supuesto, cualquier buen programador debe ser creativo. Ahí es donde se rompe la metáfora del rompecabezas, porque aunque muchos de nosotros estamos usando las mismas piezas, las estamos uniendo de maneras muy divergentes.

Finalmente, recuerde que es infinitamente más difícil encontrar soluciones elegantes, muy pocas personas son capaces de eso, generalmente pasan mucho tiempo en el problema y consultan a otros. Cada vez que ve un código (o un algoritmo) que parece tan simple que está seguro de que un niño de 6 años podría haber pensado en eso, generalmente es un equipo de Google o MIT que trabaja un tiempo. Si puedes ver la belleza en tales obras de arte, entonces eres un programador de corazón.

No lo creo.

Por lo general, estas cosas pueden ser decepcionantes, porque miras la respuesta y piensas “no hay forma de que se me ocurra eso”. Así que no trates de pensar en eso. No es “la respuesta”, es “una respuesta”.

Cuando esté aprendiendo a codificar, su código será terrible. Está bien. Adelante, escribe un código terrible. Escribe código ineficiente. ¿Puedes averiguar si “A” está en la cadena en alguna parte? ¿Puedes devolver ‘0’ o ‘1’ dependiendo de si es así? Continúa y escribe un código horrible.

Cuando comience a responder mal estas preguntas, es un buen momento para volver a analizar y ver si puede mejorar el rendimiento o hacer que su código sea más general. Buena suerte.

Solo lo veo como cuestión de tiempo hasta que pueda crear aplicaciones como esta desde la memoria. ¿Es esto más importante que poder resolver problemas como los presentados por codewars?

¡Absolutamente!

La experiencia le enseñará cómo abordar los problemas estándar. Pero es importante comprender que no existe una “única forma” de resolver un problema o crear una función / aplicación. Existen varias variables externas que influirán en las decisiones que debe tomar.

Lo más importante que debe comprender son los principios detrás de los idiomas, el diseño de software y la arquitectura de software.

Parece que estás entendiendo la idea, pero solo necesitas un poco de tranquilidad. ¿Has encontrado un mentor del que puedas aprender y hablar? Es genial tener un amigo que lo guíe a medida que desarrolla sus habilidades. Desearía poder decirte lo verde que era cuando comencé. Si no fuera por varias personas maravillosas que me ayudaron en el camino, las cosas habrían sido mucho más difíciles.

Bienvenido a la vida de un programador 🙂

El tipo de memorización de la que creo que estás hablando se parece mucho a la programación de culto de carga. Sería mejor esforzarse por comprender el código profundamente, y no depender de la memorización, aunque si se trata de técnicas específicas (y no secuencias de código) que está tratando de memorizar, entonces está bien.

Por lo que vale, la respuesta de muestra en su pregunta no es (en mi opinión) la mejor solución al problema. Así es como lo codificaría:

def change(str)
str.each_char.group_by(&:downcase).values_at(*'a'..'z').map {|x| x ? 1 : 0}.join
end

Esto tiene la ventaja de escanear la cadena solo una vez, no 26 veces.

La programación no es para todos. En este momento observamos una fiebre del oro que trata de convencer a todos de convertirse en programadores profesionales. Pero, si no te gusta estar sentado durante largos períodos de tiempo, la programación no es para ti. Si le preocupa verse obligado a trabajar duro durante largas horas para cumplir con plazos poco realistas, la programación no es para usted. Si se siente incómodo cuando las personas que no saben nada de programación intentan microgestionar su programación, entonces posiblemente la programación no sea para usted.

Todo depende de tus objetivos. Incluso si la programación profesional no es para ti, puede ser un gran pasatiempo. ¿Tu cerebro se está apagando debido al estrés? ¿Estás persiguiendo algún modelo ideal?

¿Qué tan pronto después de comenzar a trabajar en un rompecabezas tu cerebro se apaga? ¿Intentaste tomar un descanso en 2/3 .. 3/4 de ese período?

¿Te gusta el pensamiento abstracto? Incluso si la programación no es para ti, ¿por qué no tomas las matemáticas como un pasatiempo? Las verdaderas matemáticas no están cerca de la asignatura que te enseñaron a odiar en la escuela. Esa fue una aritmética mal enseñada.

Oh, conozco este sentimiento: cuando intentas encontrar una buena solución y pierdes

pero:

– Este tipo de desafíos de código son difíciles. a veces escrito por personas de educación formal. Seguir su método es bastante difícil. Los maestros de los cuestionarios son siempre especialistas.
¿Por qué crees que tienes que resolver todos los problemas de la Tierra? (Solía ​​responderme esta pregunta en las mismas situaciones).
– Personalmente comencé con Pascal, más tarde Python, ahora con Java y algo de código PHP. Después de Pascal fue más fácil entender los conceptos básicos de Python, después de Python fue más fácil entender las variables, y OO de Java, etc. Creo que es bueno aprender más idiomas. No en el mismo nivel, pero verifique los problemas básicos desde una vista diferente. Igual que los lenguajes naturales.
– nunca te rindas. siempre mantenga lápiz y papel en su bolsillo. a veces encuentro la solución en el tren, o cuando camino por la calle. Dibujarlo
– Guarde el conjunto de problemas, déjelo a un lado. Simplemente haga lo que quiera, y en lo que sea bueno, y haga ejercicio, necesita buenos comentarios, para sentirse fuerte y motivado. Después de medio año o un año, verifique el problema nuevamente.

En realidad, depende de lo que estés estudiando.

Verán, muchos estudiantes abandonan la escuela CS sabiendo mucho sobre pilas, colas, algoritmos, eso es genial, pero muchos de ellos no tienen idea de cómo conectar el backend de una aplicación a una base de datos, por ejemplo.

Lo que estoy diciendo es: si estás aprendiendo desde un punto de vista práctico y centrado en la web, entonces no te preocupes por no poder resolverlos fácilmente. Es una bestia realmente diferente, y tienes que estudiar los algoritmos para poder resolverlos.

Primero, como han mencionado otras personas, la memorización no te ayudará con nada. Imagínese tratando de aprender a escribir mejor memorizando párrafos. Todas las veces que vea el primer párrafo de Un cuento de dos ciudades , no mejorará mucho su estilo.

Más aún, si alguna vez tiene algo que escribir que pueda hacer de memoria, probablemente esté perdiendo el tiempo escribiéndolo.

Entonces, debes renunciar a las flashcards, sin duda.

Los conceptos son mucho más importantes que el código en sí. En lugar de copiar las soluciones de otras personas como referencia, asegúrese de que puede ver lo que ve y comprender cómo funciona, y tómese un tiempo para ver qué puede hacer para modificar la solución existente para hacer cosas diferentes.

Para mí, estás haciendo exactamente lo correcto al buscar las respuestas.
Si las respuestas están a una búsqueda en la web, estás siendo muy inteligente para aprender de ellas.

Es una forma mucho más rápida de construir su repertorio, y estará expuesto a un pensamiento mucho más grandioso que tratar de reconstruir toda la cultura humana desde cero cada vez que se enfrente a un problema.

No puedo contar la cantidad de problemas de programación que pasé por alto cuando, después de un par de años más y otro idioma más tarde, finalmente se resolvieron. ¡Pero siempre hay más problemas que parecen estar fuera de alcance! ¡Solo sigue así!

Sería bueno recordar que no todos los problemas tienen una única solución posible. También es posible que una solución tenga muchas formas de manifestarse. Así que no solo memorice las respuestas.

Te sugiero que te concentres en desarrollar tus habilidades desde el grupo. Si se siente abrumado aprendiendo ruby ​​y desafíos de programación competitivos al mismo tiempo, es posible que desee dar un paso atrás y centrarse primero en el ruby. Intenta trabajar en algunos desafíos más simples y trabaja desde allí.

La programación de aprendizaje es como la solución a los problemas de programación también. Hay más de una forma de resolverlo.

Nah Solo necesitas un mejor plan para aprender.

Recomiendo pasar menos tiempo en Codewars y Codequizzes y más tiempo trabajando en su propio proyecto. Le ayudará a mantenerse interesado, lo que, a su vez, lo ayudará a mantener la cabeza en alto y seguir trabajando.

¡La mejor de las suertes!

Pare con las competencias de programación.

Elige un problema que te interese. Escribe un código para resolverlo. Repetir.

Tus primeros intentos serán una mierda, pero no te darás cuenta. Su décimo intento será menos basura, pero aún así le ofrecerá mucho horror / alegría si lo mira después de su centésimo intento.

En su centésimo intento, probablemente habría decidido un lenguaje o paradigma diferente y volverá a estar al principio, pero con una base más sofisticada para razonar.