Aprenda a programar al revés, o "así que fallé la prueba de FizzBuzz". ¿Y ahora qué? ”[Cerrado]

94

Un poco de fondo

Hoy tengo 28 años y nunca he recibido capacitación formal en desarrollo de software, pero sí tengo dos títulos de educación superior equivalentes a un BA en Relaciones Públicas y un MBA Ejecutivo centrado en la Gestión de Proyectos. He trabajado en esos campos durante unos 6 años en total y luego, hace 2,5 años, dejé / perdí mi trabajo y decidí cambiar de dirección.

Después de un mes de reflexionar, decidí comenzar a desarrollar sitios web pequeños en WordPress. Aprendí por mi cuenta y hoy puedo decir que tengo una carrera humilde pero exitosa desarrollando temas y complementos desde cero para mis clientes, en su mayoría agencias que externalizan parte de su trabajo de desarrollo para sitios web medianos / grandes.

Pero a veces siento que no haber estudiado suficientes matemáticas o no tener una comprensión formal de las cosas realmente me detiene cuando tengo que competir o trabajar con desarrolladores más experimentados. Estoy constantemente buscando maneras de aprender más, pero parece que me faltan los conceptos básicos.

Desafortunadamente, pasar 4 años más en Ciencias de la Computación no es una opción en este momento, así que estoy tratando de aprender todo lo que pueda de los libros y los recursos en línea. Este método nunca hará que la NASA me emplee, pero realmente no me importa en este momento. Mi objetivo es pasar primero el listón y poder llamarme un verdadero programador.

Actualmente paso mi tiempo libre estudiando Java For Programmers (para obtener un idioma que todo el mundo dice que es difícil / exigente), leer extractos de Code Complete (para conocer las mejores prácticas) y también Code: The Hidden Language of Computer Hardware y software (para comprender el funcionamiento interno de las computadoras).

TL; DR

Entonces, mi situación actual es esta: básicamente soy capaz de escribir cualquier sistema completo en PHP (con la ayuda de Google y algunos libros), integrando Ajax, SQL y otras cosas, y tal vez un poco más lento de lo que esperaría un desarrollador experimentado. debido a toda la investigación involucrada.

Pero ayer me quedé atrapado tratando de encontrar una solución (no Google) para la prueba FizzBuzz porque no tenía memorizado el operador del módulo de if($n1 % $n2 == 0) método .

¿Qué sugeriría como una buena forma de resolver este dilema? ¿Qué materias / libros debería estudiar que me ayudarían a resolver problemas más rápido y tal vez más "de manera programada"?

EDITAR - Parece que hubo cierta confusión sobre lo que no sabía para resolver FizzBuzz.

Tal vez no me expresé bien: sabía los pasos necesarios para resolver el problema. Lo que no memoricé fue el operador del módulo. El problema estaba en transponer las matemáticas básicas al programa, no en saber las matemáticas básicas.

Tomé el examen por diversión, después de leerlo en Coding Horror . Simplemente decidí que era una buena línea de comparación de bases entre mí y los desarrolladores formados formalmente.

Acabo de usar esto como un ejemplo de cómo no haber tratado las matemáticas en un entorno informático antes me hace perder tiempo buscando cosas básicas como operadores de módulos para poder resolver problemas simples.

moraleida
fuente
63
Cuando leo esto: I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)y combino esto con usted sin saberlo if($n1 % $n2 == 0), me pregunto acerca de la exposición que ha tenido a las cosas escritas en PHP. Creo que la mayoría de las cosas que haces van más allá de un simple cálculo de módulo. ¿Podría darnos más información sobre lo que cree que puede hacer?
phant0m
10
También soy un programador autodidacta ... he estado en esto durante más de 10 años, todo web, todo el tiempo ... en aquel entonces no había clases de desarrollo web ... creo que hay algún beneficio en aprender solo. realmente querrás aprender sobre los principios fundamentales de OO y los patrones de diseño. te ayudarán mucho tenerlos en la parte de atrás de tu cabeza cuando ataques problemas. Generalmente encuentro que no siempre tengo el vocabulario que otros tienen, pero si disfrutas codificando y disfrutas escribiendo soluciones elegantes, eventualmente podrás codificar tu camino hacia lo que quieras
hanzolo
56
En relación con el stuck b/c I didn't memorize %problema, vale la pena señalar que hay otras formas de hacer esto: (suponiendo $ n2! = 0) if (is_int ($n1 / $n2))o if (($n1 / $n2) == (int) ($n1 / $n2))Conocer palabras clave es una cosa, y saber cómo expresar las ideas subyacentes en ausencia de una solución integrada es otro.
grossvogel
18
@grossvogel ¡Exactamente! Una de las razones por las que a la gente le gusta Fizzbuzz es que hay muchas maneras de resolverlo. No es solo un truco para ver si conoce el operador del módulo. Una habilidad clave de programación es la capacidad de traducir un problema de la forma en que se establece en la forma que mejor se
adapte
18
No conocer el operador del módulo no es una razón para fallar en FizzBuzz. Cuando encuentre que falta algo, debe poder solucionarlo.
Loren Pechtel

Respuestas:

144

En su caso, como es autodidacta y ya tiene lo que parece ser un enfoque de aprendizaje bueno, saludable y sin BS. Todavía algunas sugerencias ...

La práctica hace la perfección

Creo que deberías sumergirte en ejercicios de programación, como:

Incluso tome las preguntas del examen anterior de universidades conocidas a su alrededor, o de competencias de programación locales (o remotas). Por ejemplo, tenemos uno agradable en Francia para los aspirantes a programadores de secundaria que se llama Prologin , y proporciona cada año una buena serie de acertijos (probablemente solo en francés, lo siento, pero ese es el tipo de cosas a las que me refiero )

Para más información: ¿Dónde puedo encontrar acertijos y desafíos de programación?

Libros clásicos y referencias

También podríamos recomendar una lista muy larga de libros increíbles , pero diría que la respuesta Zen es que no hay una única forma correcta de Iluminación.

Sería difícil decirte cuáles son los primeros de la lista. Así que sigue leyendo un montón de cosas para aprender las trampas generales que debes evitar y las mejores prácticas a seguir, como lo estás haciendo correctamente ahora.

Para más:

Empujando los limites

Además, busque material para rascarse la cabeza, como:

No necesariamente debe tomarse como un ejemplo de cosas que hacer hoy en día, pero vale la pena intentar descubrir qué demonios está sucediendo allí.

Los sistemas de pares son motivacionales

También es posible que desee acechar (e involucrarse) en las siguientes comunidades para mejorar sus habilidades de manera incremental al ser confrontado con otros.

Educación a tiempo parcial

Si no tiene el tiempo o la motivación para participar en otro curso de 4 años o algo similar (que puede no ser necesario o gratificante de todos modos y costoso), podría considerar buscar material de enseñanza en línea. Por supuesto, estos no se limitan a la informática.

Gracias al esfuerzo original de MIT OpenCourseWare , ahora hay toneladas de universidades que siguieron su ejemplo , y puede encontrar una gran cantidad de material de cursos de nivel universitario de forma gratuita. No siempre es fácil navegar y leerlo solo, pero algunos están bastante bien hechos. Para comenzar desde cero e ir bastante alto, considere también mirar la Academia Khan .

Algunos van un poco más allá y ofrecen cursos reales en línea de forma gratuita, donde de manera similar tiene acceso al material del curso, pero donde también ofrecen conferencias a ritmo y autoevaluaciones regulares. Por ejemplo, visite Coursera o Udacity .

La mayoría de los anteriores a menudo publican sus conferencias en Youtube o iTunesU, por lo que encontrará mucho material si su sed de conocimiento no fue saciada por todos los enlaces anteriores.

Si desea algo que brinde una experiencia más cercana a la universidad "real", puede considerar universidades remotas, que también le permiten trabajar a tiempo parcial, pero requieren que siga el ritmo y que tenga autoevaluaciones y finalice exámenes anuales (a veces in situ), como con OpenUniversity y sus variantes internacionales.

La pasión te mantiene en marcha

  • Encuentre un proyecto favorito: cree el suyo o únase a uno o más proyectos de software existentes y contribuya.
  • Código, código, código. Y luego codifique un poco más.

(y obtenga suficientes globos oculares mirando su código para criticarlo y tener diferentes perspectivas)

Los franceses dicen:

C'est en forgeant que l'on devient forgeron.

Sigue haciendo lo que estás haciendo y eventualmente serás un experto. Toma tiempo y trabajo.

Consulte también Tengo problemas para aprender para obtener más sugerencias.


PD: Aunque es una herramienta muy controvertida para las entrevistas y no ayuda a identificar buenos candidatos, a menudo uso FizzBuzz para al menos eliminar a los increíblemente "malos". ¡Así que ponte manos a la obra con esto! :)

haylem
fuente
3
C'est super ça! :) Gracias por la lista. El proyecto Euler y los rompecabezas parecen muy bonitos. Y ya uso algunos otros sitios de SE. Se sumergirá en ello.
moraleida
@moraleida: Me alegra que te haya gustado la respuesta. De nada.
haylem
Acerca de su PD: No estoy realmente preocupado por las entrevistas en este momento, ya que realmente no quiero volver a ser un empleado. Tomé el examen por diversión, después de leerlo en Coding Horror. Simplemente decidí que era una buena línea de comparación de bases entre mí y los desarrolladores formados formalmente. :)
moraleida
44
+1 solo por qué FizzBuzz se usa justo al final ... Con demasiada frecuencia veo comentarios aquí o en blogs sobre personas que lo critican porque suponen que las empresas lo están utilizando para identificar a los súper codificadores. (A esas compañías: ¡Lo estás haciendo mal!)
Izkata
1
Esto aparece en algunos de los enlaces, pero creo que merece una llamada: también miraría rosettacode.org . Tiene una gran cantidad de problemas diferentes resueltos en una gran cantidad de lenguajes de programación. Es una buena práctica leer el código, que es tan importante como escribirlo, así como una excelente manera de ver muchos enfoques diferentes para resolver el mismo problema. Y si encuentra un problema que aún no se ha resuelto en un idioma que conoce o quiere aprender, ese es un desafío de programación para usted.
Mark Reed
60
I didn't have the if($n1 % $n2 == 0) method memorized.

No he estado codificando por mucho tiempo (comencé a enseñarme SQL hace unos 27 meses y comencé a codificar en Perl hace unos 20 meses), pero la cita anterior suena como algunas cosas que he escuchado de antiguos alumnos:

¿Cómo se supone que debo memorizar qué técnica de integración usar para cada problema?

No memoricé si debía sumar o multiplicar probabilidades, o usar "n elegir k" o usar factoriales.

¡Espera un minuto! ¡Dijiste que x equivalía a 2 ayer! ¿Ahora es igual a cero?

De acuerdo, el último probablemente fue un poco duro ... pero el punto que estoy tratando de hacer es que la resolución de problemas no es la memorización . Si lo fuera, entonces algún genio podría programar una computadora para resolver todos los problemas, y ninguno de nosotros tendría que volver a pensar (qué mundo tan infernal sería ...).

Ahora, es cierto que cualquier esfuerzo intelectual consiste en al menos un poco de memorización. En particular, si va a codificar en PHP, entonces debe comprender los tipos de datos básicos (números, cadenas, matrices), cosas básicas que puede hacer con ellos (para números: suma, resta, multiplicación, división y módulo; para cadenas: concatenación, subcadenas, reemplazo y al menos algún conocimiento de expresiones regulares; para matrices: concatenación, tachado de elementos, empalme de elementos, bucles, elementos de conteo, etc.) y las estructuras lógicas básicas que uno puede usar (sentencias if / then / else, bucles foreach, bucles while, etc.).

Luego, cuando encuentre un problema, utilícelo para proporcionar el contexto de las herramientas que necesita. Para FizzBuzz, necesita saber cuándo un número es divisible por 3, 5 o 15. Bien, entonces estamos tratando con números ... ¿qué herramientas básicas nos permiten saber cuándo un número entero es divisible por otro? Bueno, el operador del módulo. Entonces, usa eso. (Por supuesto, si su número es $n, podría ser elegante y ver si el último dígito de $nes 0 o 5, y / o si los dígitos de $nsuman algo divisible entre 3, pero estoy divagando ...) Necesita haga esto para cada número entre 1 y 100, por lo tanto, para evitar el túnel del carpelo, use un foreachbucle.

La moral de la historia es que si por un lado dice "Básicamente soy capaz de escribir cualquier sistema completo en PHP" y, por otro lado, no puede codificar FizzBuzz, entonces la primera afirmación es incorrecta. Algunos de mis antiguos alumnos de cálculo juraron de arriba abajo que entendían los conceptos, pero simplemente no podían resolver los problemas del examen ... o los problemas de la tarea ... o los problemas del examen. También estaban equivocados acerca de su comprensión.

Deja de poner excusas y aprende lo básico.


fuente
66
No memorizo, metabolizo y hago de estas cosas parte de mi intuición. Siempre busca expandir eso.
ncmathsadist
@ncmathsadist: Sí, ampliar la intuición es clave, pero incluso la intuición tiene que basarse en la memorización de un pequeño número de conceptos y hechos muy básicos.
para el registro, no tiene que multiplicar un número por 3 y luego agregar los dígitos para ver si es divisible por 3, simplemente puede agregar los números. por ejemplo, 864, 8 + 6 + 4 = 18 que es divisible por 3 y también lo es 864
Oztaco
@ leaf68 - ¡Duh! [golpea la frente] tienes toda la razón ... ¡déjame editar!
27

Puedes pensar que FizzBuzz es un problema de juguete; ¿Cuándo necesitaré utilizar el operador de módulo en un programa real? Pero realmente lo usas todo el tiempo. Tres ejemplos comunes:

  1. Está mostrando una tabla y desea alternar colores de fondo para diferentes filas. Verifica si una fila es par ( row_number % 2 == 0) y muestra un color para las filas pares y otro para las filas impares.
  2. Tiene una colección de objetos que está recorriendo y desea imprimir una tabla con N objetos por fila; entonces el criterio para agregar un salto de línea es (item_number% N == 0). De hecho, tenía una pregunta SO sobre este comportamiento exacto, aunque en ese lenguaje de plantillas la condición if item_number % N == 0se escribió como el equivalente ( if item_number|divisbleby: N).
  3. Está realizando varias operaciones que desea agrupar en una transacción que solo se confirma cuando el grupo alcanza un cierto tamaño por razones de eficiencia. Tal vez esté utilizando la API de datos de google y no desee el encabezado HTTP / sobrecarga de autenticación para crear una nueva transacción para cada operación, por lo que los agrupa en grupos de 50 operaciones. O está guardando registros en su base de datos y desea confirmar la transacción cuando tiene un tamaño razonable. Algo así como if cur_item_number % 50 == 0 then commit_data.

Claro que hay otras formas de hacer todas estas cosas. Pero puede hacer zumbidos sin usar el operador de módulo o comparar la división flotante con la división entera. Por ejemplo, para FizzBuzz podría hacer algo como el siguiente pseudocódigo.

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

Para concluir, si quieres ser un gran programador algún día, no te metas en aprender libros de idiomas. Sí, un libro PHP / Java le permitirá obtener respuestas de google / stackoverflow y programas que funcionan a medias mucho más rápido que cualquier otra cosa. Pero para poder saber realmente cómo escribir programas óptimos de calidad y pensar como un programador, necesitas un poco de exposición a libros de CS reales.

Comience con un libro de CS que introduzca un lenguaje de programación y los antecedentes de CS, con el famoso ejemplo de Estructura e interpretación de programas de computadora (que enseñará Scheme - un dialecto de Lisp) o posiblemente algo más como Think Python How to Think Like a Computer Científico (que no he leído). Ambos son gratuitos en línea.

Eventualmente, debe leer un buen libro de algoritmos, el mejor es Algoritmos de CLRS (no gratis), aunque este libro de algoritmos en línea gratuitopodría ser un reemplazo de bajo costo (aunque si solo puede comprar CLRS). El libro de algoritmos le enseñará cómo pensar para resolver problemas informáticos y le presentará una variedad de estructuras de datos (matrices / listas enlazadas / montones / árboles binarios / árboles B / tablas de hash) y algoritmos importantes que necesita saber cómo usar de manera óptima . No necesita memorizar cada prueba o saber cómo escribir perfectamente cada algoritmo (quien alguna vez use un montón de Fibonacci); pero debe saber intuitivamente que dos bucles for anidados son O (N ^ 2); los tipos de comparación son, en el mejor de los casos, O (N lg N), la búsqueda binaria es O (lg N), puede encontrar la mediana en O (N), por qué las bases de datos del disco duro usan B-Trees, etc.). Como mínimo, un sólido conocimiento del libro de algoritmos lo ayudará a realizar entrevistas de programación técnica de la variedad google / facebook. Cuando lea libros de programación, no solo lea / lea; tú'

También recomendaría un libro sobre ingeniería de software (ya sea Code Complete o Pragmatic Programmer) después de leer el CS y el libro de algoritmos, que enseñará las mejores prácticas sobre cómo escribir un buen código que se pueda mantener (nombres claros; comente solo cuando sea necesario) ; mantener el código juntos; refactorizar cuando sea necesario; usar el control de versiones; etc.).

dr jimbob
fuente
44
El mejor comentario aún; mientras veo a mucha gente decir práctica, práctica, práctica, ese no es el camino a seguir. La práctica hace la perfección, dicen, pero eso solo impone malos comportamientos. Para el OP: exponerse a otros conceptos, aprender por qué se prefiere una clasificación rápida sobre una clasificación de burbujas. Sólo la practica perfecta hace la perfección. Obtén ese curso de CS.
Pieter B
2
Gracias por publicar ese código de ejemplo, ya pensé que tendría que hacerlo yo mismo. - Podemos construir cualquier circuito lógico complejo utilizando puertas NAND solo; tenemos idiomas con muy pocas operaciones simples que se completan con Turing; no necesitamos esos operadores sofisticados para resolver problemas. Resolver un problema no es solo conocer las herramientas correctas, poder trabajar en un problema, encontrar una solución que funcione para su propio conocimiento es lo que hace que un programador.
meter
22

Pero ayer me quedé atrapado tratando de encontrar (no google) una solución para la prueba FizzBuzz porque no tenía memorizado el método if ($ n1% $ n2 == 0).

Nadie memoriza esa cosa. Se supone que debes inventarlo por tu cuenta. Si conoce el operador de módulo y sabe lo que hace, entonces trivialmente encaja perfectamente con el problema de FizzBuzz.

Voy a salir de apuros aquí y generalmente sugiero que el problema es PHP. Me gusta decir que Java es el peor lenguaje jamás diseñado, y PHP es el peor lenguaje , porque incluso sus creadores admiten que nunca fue diseñado. Es difícil aprender buenas prácticas de ingeniería de software cuando su entorno es prácticamente la definición de cómo no hacerlo. Y depender de un marco para hacer todo no es decir mucho.

Actualmente paso mi tiempo libre estudiando Java para programadores (para poder aprender un idioma que todo el mundo dice que es difícil / exigente)

Java es uno de los lenguajes más fáciles y peores que existen. Solo tiene una cosa: herencia manual recolectada de basura. Si sus amigos o asesores dicen que Java es difícil, busque nuevos amigos. C ++ es un lenguaje difícil que incluye muchos conceptos y que nadie discutirá. También podría hacer C #, que al menos tiene algunos genéricos y lambdas.

¿Cómo va a aprender a codificar, cuando sus idiomas fueron diseñados e implementados por personas que no pueden codificar, y usted depende de los marcos para todo lo que hace?

DeadMG
fuente
14
@moraleida: no hay vergüenza en buscar la sintaxis de un operador que no ha tenido motivos para usar.
DeadMG
2
@moraleida: en ese caso, estoy de acuerdo, no hay ningún problema real. No creo que a ningún profesional, entrevistador o de otro tipo, le importe si no puede identificar exactamente la sintaxis de un idioma diferente, siempre que pueda expresar claramente cuál es su intención.
haylem
55
Está de acuerdo con la mayoría de los puntos, pero ¿por qué considera que Java es "el peor lenguaje jamás diseñado"? No soy un gran admirador de Java, pero esto suena muy obstinado.
Casey Kuball
77
-1 por usar la pregunta como una excusa para el PHP bastardo cuando tiene una relación cero con lo que se le preguntó.
StasM
1
@Darthfett: podría escribir un ensayo sobre eso. Ven al chat SO C ++ y puedes leerlo: P
DeadMG
11

Creo que debes analizar detenidamente por qué estabas varado tratando de descubrir FizzBuzz. Entonces, supongamos que recuerdas que hay un operador que $nte dice si es divisible por un número. Y tienes mala suerte para olvidar lo que es. Bien, ¿por qué no intentas hacerlo de otra manera? Si sabe algo sobre el código, debería poder encontrar una docena de otras formas de hacerlo. Algunos de ellos pueden parecer extraños, como, por ejemplo, poner cada múltiplo de 5 en una matriz y luego verificar si $nestá entre ellos, y es una mala solución, pero aún así sería una solución. Sin embargo, estás diciendo que no tenías ninguno, solo estabas atrapado. Puede ser un síntoma de un problema mayor.

Hay dos cosas en la programación que debes aprender.

  1. Bolsa de trucos. Cómo leer archivos en PHP, cómo analizar XML en Java, cómo conectarse a la base de datos en Python. Algunas personas lo memorizan, pero en realidad vale la pena memorizar estas cosas solo si las usa todos los días. De lo contrario, simplemente vaya a los documentos y búsquelo. Estas cosas no tienen ninguna sustancia, excepto su forma literal: solo necesita saber cómo suena el encantamiento mágico particular y cuál será el resultado.
  2. Mentalidad Esta es la cosa más importante. Así es como se programa, y ​​esto no tiene nada que ver con la memorización. Debes entender cómo explicar las cosas que quieres que se hagan a la computadora, qué formas hay de hacerlo y cuáles usar en un caso particular. Ahora, dadas las herramientas modernas y la documentación moderna, es plausible que uno pueda escribir un CMS completo en PHP usando el enfoque de "bolsa de trucos", pero una vez que encuentre una tarea que no tiene una solución preparada, está "atascado".

Según su descripción, parece que comenzó con la primera parte, pero le falta algo en la segunda parte. Un buen curso de CS generalmente ayuda mucho con eso, pero no es la única forma. Tratar de resolver diferentes problemas y leer acerca de cómo deben resolverse estos problemas, leyendo libros fundamentales citados aquí, todo eso ayudaría. Una vez que tenga la mentalidad del programador, descubrirá que comenzar a usar una nueva bolsa de trucos no será un gran problema. Tendría que buscar en Google aquí y allá, por supuesto, pero nunca se quedará varado.

StasM
fuente
1
“Y lea sobre cómo deben resolverse estos problemas” . De hecho, busque diferentes soluciones para el mismo problema. Intenta entender cada uno de ellos, compara lo que tienen en común y lo que hacen de manera diferente. Comprenda esas cosas y automáticamente aprenderá diferentes formas de pensar sobre el mismo problema.
meter
Estoy completamente de acuerdo con la mentalidad. Una vez que comprenda la mentalidad y los conceptos, aprender las construcciones del lenguaje subyacente es mucho más fácil, y comenzará a pensar en formas alternativas de hacer las cosas como algo natural. (Por ejemplo, para fizzbuzz, todos los números divisibles por 5 terminarán en 5 o 0, por lo que no es necesario el módulo operando en esa parte)
JohnP
9

Te vuelves bueno en el desarrollo de la misma manera que te haces bueno en cualquier otra cosa: practica. Hay un buen concepto en el mundo de la programación llamado código kata . Este es esencialmente un ejercicio en el que codifica una solución a un problema relativamente pequeño, analiza lo que está bien y lo que está mal, lo descarta todo y lo vuelve a hacer. FizBuzz es un kata por derecho propio. Entonces, hazlo y haz más. Cuando encuentre cosas que no parecen ser muy buenas o que simplemente no funcionan, investigue y sea minucioso al respecto. Haga preguntas en los sitios de preguntas y respuestas, lea artículos y blogs, vea cómo otros manejan esto y luego practique lo que ha aprendido.

En el curso de esta práctica, aprenderá cuántos antecedentes matemáticos / teóricos adicionales podría necesitar. Si te topas con conceptos que simplemente no puedes entender, entonces lee sobre ellos y sus conocimientos previos y decide caso por caso si quieres tomar un curso o lo que tienes para expandir tu antecedentes teóricos.

Erik Dietrich
fuente
1
¡Este código kata también parece increíble!
moraleida
8

... porque no tenía el método if ($ n1% $ n2 == 0) memorizado.

Estoy interpretando que eso significa que no sabías y / o no recordabas el operador del módulo. Si este es el caso, el lugar para comenzar es revisar las construcciones del lenguaje en el idioma que está utilizando. Revisa todo lo que no "conozcas en frío" y aprende todo lo que no sabes.

John MacIntyre
fuente
44
+1. Si bien las otras respuestas hablan sobre cómo convertirse en un mejor artesano, posiblemente sea aún más importante saber qué herramientas existen realmente. ¿Alguna vez trató de quitar un tornillo roto sin una salida fácil ? Hay otras formas de hacerlo, pero es un golpe en la frente cuando finalmente aprende la herramienta que está hecha para ello. Yo diría que el OP debería haber examinado cualquier lista de operadores PHP hace mucho tiempo y haber jugado con los que no estaban familiarizados.
Tim Lehner
5

Sigue codificando, sigue aprendiendo. Eventualmente, con suficiente dedicación, mirarás a FizzBuzz y te preguntarás por qué incluso tienes que pensarlo. Muchas empresas hacen una pregunta al estilo de FizzBuzz como una parte muy temprana de sus entrevistas, por lo que fallar esta vez significa que al menos has aprendido algo sobre el proceso de contratación.

Simplemente siga escribiendo código, proponiendo ideas de proyectos e investigando.

joshin4colours
fuente
4

¿Puedo recomendar aprender JavaScript antes de Java, C ++? Razones para ti:

  1. Se utiliza en el diseño front-end (jQuery, algunos de sus complementos de WordPress, feeds de Twitter, carga de bases de datos en su navegador a través de JSON con poco o ningún trabajo de back-end, validación de formularios, etc.)
  2. Se puede usar del lado del servidor a través de Node.js
  3. Se puede utilizar para crear aplicaciones híbridas para iOS, Android, Win8, etc.
  4. Estudiar JS lo ayudará a comprender mejor el rendimiento de la página web en diferentes navegadores y dispositivos
  5. JS fue diseñado para ser más amigable para los novatos
  6. Ya sabes HTML y CSS (espero;), así que eso ayuda con JS

Recursos gratuitos para novatos

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info
Tenía unos 10 enlaces más, pero SE no me permite publicarlos hasta que llegue a 10 rep.

Aprender C ++, Java, etc. también es útil, pero no en mi humilde opinión no tiene el impacto general en la programación web como lo hace JS, ya que puede usarlo tanto en el front-end como en el back-end. ¡Que te diviertas!

tomByrer
fuente
3

Puede encontrar y ayudar a otros, por ejemplo, dando código (divulgación: mi sitio) o Código para América o lo que sea. Esta es una excelente manera de obtener más exposición a problemas de creación de páginas web que no sean PHP y sentirse bien también.

Cuando tiene que resolver un problema, o ayudar a resolverlo, o simplemente comprenderlo, el recoger el código es algo natural en el camino. Tener una meta es la mejor manera de aprender algo.

Será
fuente
1
¡Increíble! ¡Esta es realmente una buena forma de estudiar!
moraleida
0

Entonces no pudo resolver el problema de FizzBuzz. Vaya cosa. Ahora puedes, y apuesto a que nunca olvidarás todas las innumerables formas de hacerlo. Intenta no estar tan ansioso por marcarte un mal programador simplemente porque no pudiste resolver un estúpido problema de la cabeza.

Ese es un problema. La otra es que parece que se siente un poco detrás de la curva de aprendizaje de programación. Como otros han dicho, sigue codificando y sigue leyendo. Cuanto más lo hagas, mejor serás. Es tan simple como eso. Comience con lo que sienta que es el mayor agujero en su fondo y continúe desde allí.

Nick Spreitzer
fuente
(Esto fue destinado a sonar edificante No está seguro de lo logré allí lol...)
Nick Sprietzer
0

No creo que me niegue a recomendar a alguien por contrato porque no sabían que era el operador del módulo siempre que:

  1. Sabían que era un operador de algún tipo.
  2. Podrían decirme qué "módulo" era una vez que los solicité.

No siempre es (aunque generalmente)%, y algunos idiomas son raros. Y diablos, después de una década, no puedo decir honestamente que conozco a todos los operadores de Perl (¿y qué hace la nave espacial otra vez?) Ni puedo recordar siempre perfectamente a los operadores bit a bit. Han pasado algunos años desde que hice algo que incluso los requeriría.

Lo que podría hacerme dudar en recomendar a alguien sería si les causara un ataque de pánico por fallar esa pregunta / prueba. Eso podría darme la impresión de que estaban demasiado verdes (a menos que fuera una posición muy básica). Nadie necesita a alguien que memorice (o sienta la necesidad de) memorizar esas cosas. Necesita a alguien que entienda conceptos mucho más amplios. A nadie le importará si buscas eso en Google, pero en la entrevista tendrás que estar seguro de que saber% no es gran cosa y que sabes usar "operador" como palabra clave cuando haces un google rápido buscar.

Además, esto es solo una idea ... pero si su colegio comunitario local tiene un programa de compsci, todos sus otros créditos se transferirán, y es probable que solo necesite unos 20 créditos para el título de 2 años. Casi podría terminar eso en un semestre. Tendrían que hacer un curso de estructuras de datos, también con suerte los algoritmos ... podrían hacerte un poco más fuerte.

John O
fuente
-1

Aquí hay un curso de muestra: http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html

Sugiero leer primero lo siguiente: programación orientada a objetos (muy común, utilizada en cualquier lugar, aquí es donde entra Java) Concurrencia (para escribir programas de Java que no se bloqueen misteriosamente en el mundo real, aprender sobre puntos muertos) Conceptos de base de datos (la mayoría de las aplicaciones necesitan guardar datos, la teoría es importante aquí) Paradigmas de programación (lea sobre al menos un lenguaje que no sea Uy, preferiblemente funcional, para expandir su pensamiento y aprender cosas nuevas)

Cuando miro los 4 años de educación en ciencias comp, para ser honesto, creo que solo hay un puñado de cursos que debes tomar en serio.

Las estructuras de datos y los algoritmos (y necesita matemáticas aquí para ser realmente bueno y ser tomado en serio por otros programadores), las redes de computadoras y los sistemas operativos vienen a la mente como los más importantes. Podría decirse que otros temas que se ocupan del código de nivel inferior, como poder codificar en ensamblado, no son tan importantes para usted. La ingeniería y las pruebas de software lo exponen a conceptos que son útiles y puede aprenderlo con el tiempo.

Simplemente descargue un pdf que explique estos conceptos de manera intuitiva y estará en camino.

En algunos cursos de ciencias de la computación, al menos en el mío, el primer año es una introducción a todos los campos de la ingeniería, como mecánica, eléctrica, civil, etc. Hay muchas matemáticas complicadas, fíjate, que de nuevo pueden ser relevantes o no. para la mayoría de los programadores de aplicaciones de hoy. Entonces, muchos de los ingenieros actuales tienen solo 3 años de educación científica real (espero que esto te haga sentir mejor :)

El quid de la respuesta: puede tomarse un tiempo para estudiar todos los días, digamos una hora más o menos, y con el tiempo se convertirá en un buen programador. Solo sigue aprendiendo. Y recuerde escribir algún código todos los días.

Abhijeet Kashnia
fuente
-3

Para mí, mi estrategia es que solo ataque el problema que es relevante para lo que estoy trabajando, así que mi consejo es que no tengas que aprenderlo todo, solo lee las cosas que son relevantes para lo que estás trabajando, porque si trataste de aprenderlo todo de una vez, hay una tendencia a postrarte y terminar odiando la programación.

Paz

Bryan Bojorque
fuente