¿Cuánta codificación necesito saber antes de comenzar con los algoritmos?

No tanto como piensas.

Ciertamente, debe estar un poco más allá de “Hello World” … pero probablemente será suficiente una comprensión firme de las construcciones básicas del lenguaje (bucle, ramificación, E / S de archivo, E / S de pantalla, etc.).

Las lecciones de programación más útiles que aprendí en un salón de clases llegaron cuando estaba en la universidad … y ahora tengo más de 50 años.

En esa clase, mi profesor nos enseñó a completar proyectos de programación mediante un proceso que él llamó muy simplemente, “refinamiento gradual”.

Empiezas expresando, en inglés simple, lo que tu programa necesita para lograr. Y luego divide esa idea (posiblemente bastante compleja) en los componentes más pequeños que se requieren para hacerlo. Y luego haces lo mismo con cada componente más pequeño sucesivo … hasta que finalmente llegas al pseudocódigo basado en inglés, pasos lo suficientemente triviales como para que incluso una máquina pueda entenderlos. Solo cuando su pseudocódigo haya sido aceptado como “lo suficientemente simple”, se le dirá en qué idioma debe codificarse su proyecto … y la elección no fue la misma para todos.

Esta es la esencia de la programación. Está tomando una idea compleja y convirtiéndola en un algoritmo. Ver un par de proyectos de tamaño decente hasta el final de esta manera lo capacitará para dividir instintivamente ideas complejas en trozos más pequeños. Y esa es una habilidad que te servirá bien como desarrollador de software para siempre.

De hecho, a menudo es liberador decidir la mejor manera de hacer algo sin verse limitado por lo que sabe de la sintaxis de un idioma en particular que interrumpe constantemente su proceso de pensamiento. También es mejor, cuando sea posible, dejar que el algoritmo elija el lenguaje de codificación, ya que algunos proyectos resultarán mucho más fáciles de lograr usando uno sobre el otro.

Pero hay un poco de un síndrome de “pollo contra huevo” pasando aquí. No puede saber que un idioma se adapta mejor a un algoritmo particular que otro, a menos que sepa algo sobre codificación en cada idioma. Por lo tanto, se requiere cierto nivel de familiaridad, y a medida que avanza en su conocimiento, puede pensar en cada idioma con el que adquiere familiaridad superficial como otra herramienta en su cinturón.

Y al igual que un carpintero o artesano, estará adquiriendo nuevas herramientas todo el tiempo. Míralo de esta manera: si la única herramienta en tu cinturón es un martillo, tendrás la tendencia a tratar cada problema como si fuera un clavo. Puede ser divertido, y eventualmente podrás hacer cosas con ese martillo con el que nadie más soñaría, y mucho menos intentarlo. ¡Pero nunca serás tan eficiente, digamos, conduciendo un tornillo, como el tipo que tiene un destornillador!

Además, fuera del aula y en el mundo real, a menudo se le dirá en qué idioma va a codificar antes de que le presenten alguno de los algoritmos necesarios. Así es como funciona. Pero si tiene un manejo sólido de la programación (es decir, convertir ideas complejas en algoritmos), esto nunca lo pondrá en fase. A medida que avanza, puede aprender, y con frecuencia lo hará, los entresijos de la codificación en el idioma requerido. Los idiomas (y particularmente los utilizados para la programación web) cambian y evolucionan todo el tiempo. Es simplemente la naturaleza de la bestia.

Muy poco si quieres. El “aprender a codificar” es básicamente dos cosas. Una es aprender la sintaxis de un lenguaje: cómo escribir un bucle, declarar una función, cómo usar funciones recursivas, este tipo de cosas. Esta es una fase muy corta, dos noches tal vez. La segunda fase es ejercitar la escritura del código, para que realmente exprese lo que quería, se sienta a gusto programando, que no cometa muchos más errores que otros. (Luego, la tercera fase es la programación de objetos, el diseño OO y otras cosas, pero no es relevante por el momento). Esta segunda fase lleva mucho más tiempo, y necesita algo para codificar como ejercicios en esta fase, especialmente si está aprendiendo a sí mismo a encontrar tareas interesantes. Puede que no sea tan trivial. Por otro lado, uno aprende mejor los algoritmos si realmente los codifica, de lo contrario, a menudo cree que comprende todo y solo cuando todas las piezas deben estar escritas para que un programa funcione, verá los problemas en los que no pensó. Por lo tanto, uno de los escenarios razonables es aprender los conceptos básicos de un idioma, hacer varios ejercicios del tutorial y luego tratar los algoritmos de aprendizaje como sus ejercicios en el dominio de la programación, de esta manera no desperdicia el control si comienza a aprender algoritmos codificarlos sería una tarea demasiado fácil para usted. Además, es más probable que encuentre un juez automático para verificar si su programa es correcto si su ejercicio fue escribir esto y este algoritmo que si fuera una tarea de su propia invención. Por supuesto, vaya a otras cosas algún día, escribir algoritmos no es todo lo que quiere hacer, pero ese es un buen comienzo para un tiempo de aprendizaje bastante significativo.

La verdadera respuesta a esto es ninguna. De hecho, diría que no tener experiencia en codificación tiene algunas ventajas. Mira, la cosa es que los algoritmos deben ser independientes del lenguaje. Muchos de ellos los encontrará escritos en psuedocode, lo que le permitirá implementarlos en el idioma que elija. También diría que si puede escribirlo en inglés, también puede implementarlo en el idioma que elija. Solo necesita comprender realmente lo que está haciendo el algoritmo. Si saltas directamente, puedes saltar fácilmente el paso de aprendizaje.

Ahora, tener algo de experiencia en codificación le permite codificar estos algoritmos y verificar que realmente puede implementarlos. Pero puedes aprender eso junto con tus algoritmos. Significará que no está haciendo cosas geniales de forma inmediata, pero obtendrá una comprensión más profunda de los algoritmos que está estudiando.

More Interesting

¿Cuáles son las buenas implementaciones de búfer circular sin bloqueo en Java?

¿Qué es mejor si necesito elegir un camino para mi carrera, algoritmos y estructuras de datos, o tecnologías de big data, en las que estoy trabajando actualmente?

¿Por qué es Forth el lenguaje de programación para practicar la escritura de algoritmos?

¿Qué tan importante es para el hombre en el medio saber la técnica de cifrado?

¿Cuáles son los algoritmos de clasificación considerados algoritmos codiciosos?

¿Cuál sería el mejor algoritmo para generar números aleatorios únicos para cupones de recarga?

¿La programación a nivel del sistema se ha vuelto obsoleta?

¿Cuáles son los beneficios de los algoritmos? No los encuentro importantes.

Cómo mejorar en algoritmos, estructuras de datos y programación competitiva, solo por puro aprendizaje, así como por ubicaciones en empresas de primer nivel, en un año

¿Cuáles son las cosas adicionales además de DS y Algo serían buenas para la entrevista?

¿Cuáles son algunas aplicaciones del algoritmo de clasificación de burbujas?

¿Existe un algoritmo ML para verificar qué tan bien coinciden 3 objetos de diferentes tipos?

¿Cuáles son los mejores algoritmos de aprendizaje sin supervisión para la corrección de errores tipográficos?

¿Qué algoritmo (s) de aprendizaje automático es el mejor para la regresión no lineal con un número limitado de datos?

Si uno es un desarrollador JS (comprende algoritmos, estructuras de datos, patrones), ¿qué tan difícil sería cambiar al desarrollo Java o C ++?