Como desarrollador junior de software, ¿cómo puedo desarrollar mis habilidades de desarrollo algorítmico y resolución de problemas?

Tomé prestado esto de otra pregunta que respondí, pero espero que sea útil:

Un poco de práctica cada mañana definitivamente puede mantener la mente aguda y tus habilidades progresando. Aquí hay algunos recursos que nuestros estudiantes han disfrutado, pero la otra cosa que recomendaría es potencialmente más útil: resolver los problemas de la vida real que haya encontrado. Casi todos tienen tareas repetitivas que tienen que completar, ya sea personal o profesionalmente, así que procure automatizarlas tanto como sea posible. Aquí hay un artículo interesante sobre el tipo que “automatizó su trabajo durante 6 años”.

Estrictamente algoritmos y desafíos de código:

Top Coder: Algoritmos de crowdsourcing y desarrollo

Codewars: entrena tus habilidades de codificación

CoderByte: desafíos de codificación

HackerRank: desafíos del código

CodeEval: desafíos de codificación

Los 10 sitios web de desafío de codificación más populares de 2016

Aquí hay algunos recursos de aprendizaje adicionales que nos gustan:

Una forma más inteligente de aprender JavaScript

John Duckett – Diseño web con libros HTML, CSS, JavaScript y jQuery.

Lo siento, tengo que decir esto, pero no hay una forma real de desarrollar sus habilidades de resolución de problemas que no sea escribir el código real. Sé que los algoritmos y tales son muy populares en el Silicon Valley ahora, pero para ser honesto, es lo que más se necesita para atravesar la puerta . Desarrollo software y rara vez pienso: “Hmm, ¿qué algoritmo debo usar hoy?” Es más como enfrentar un desafío y luego tratar de resolverlo usando sus habilidades (y no con el conocimiento de la construcción de algoritmos ). No me malinterpreten, conocer algunos conceptos algorítmicos ayuda, pero no es una panacea .

Lo que le recomendaría que haga es escribir un software que cree que beneficiaría a alguien más. Obviamente, elija algo que pueda lograr en un tiempo razonable. Intenta que sea bueno, libre de errores, seguro y fácil de usar. Luego, la parte más importante: publíquelo en línea y vea si las personas comienzan a usarlo. Si es así, obtenga sus comentarios. ¡Es muy importante! Esto te dará una aplicación real de tus habilidades. Si el software que escribió resulta útil para muchas personas, adquirirá muchos conocimientos útiles. Y si eres realmente bueno en eso, puedes comenzar tu propio negocio basado en lo que creaste.

¡Buena suerte!

Fácil: colaborar o competir, sin días libres.

Supongo que tiene al menos un conocimiento básico de casi todos los conceptos básicos, incluidos los algos más populares, las estructuras de datos, el paradigma de programación, etc. Si no, cursos como los Algoritmos del Profesor Roughgarden: Diseño y Análisis pueden hacer maravillas.

Espero que esto ayude, ¡no dejes de preguntarte si puedes mejorar las cosas y la codificación feliz :)!

Problemas archivados – Proyecto Euler

Hay muchos problemas interesantes para practicar aquí. Estás tratando de desarrollar una habilidad, las habilidades se desarrollan a través de la práctica deliberada.

Como con todas las cosas, solo tienes que esforzarte. Si desea un esquema, podría verse algo así como …

  • Encuentra problemas. Es decir, problemas reales, no problemas ideados para tener soluciones claras.
  • Trabaja para resolver esos problemas.
  • Compare notas con otras personas e incorpore sus comentarios.

Cuando comencé, reuní pequeños idiomas y escribí compiladores e intérpretes para ellos. Eso me interesó. También tenía un programa de acciones que usaba como banco de pruebas para cualquier concepto con el que quisiera jugar.

Y tenga en cuenta que también tiene un equipo, ya que se refiere a sí mismo como un “desarrollador junior”. Interesarse en lo que están trabajando e involucrarse más allá de lo que se les asignó. Escuche los problemas que están teniendo, especialmente, y cómo los resuelven. (Utilizo las reuniones para ello, personalmente. Si mi equipo va a tener reuniones de una hora solo para una verificación de estado, voy a aprovechar el tiempo).

No hay sustituto para resolver problemas reales con un diseño real usando código real. El caso ideal es trabajar en un proyecto paralelo de ruta no crítica en el trabajo que es técnicamente desafiante. Tal vez en la línea de una utilidad o programa de verificación. Básicamente la práctica hace al maestro. Hay que intentar y completar con éxito tareas técnicas cada vez más difíciles. Hacer que el código funcione de manera confiable no es valioso ni interesante. El objetivo deseado es hacer el mejor trabajo del que sea capaz. El mejor diseño y la implementación más limpia es el objetivo.

Me gusta la respuesta de Jeff, sin embargo, no creo que haya sido muy directa y fue un consejo más general para los desarrolladores junior. Tiene razón, el buen diseño, la convención y la resolución práctica de problemas son algo que necesita practicar.

Sin embargo, en términos de practicar algoritmos, sugeriría buscar algoritmos populares e intentar crear su propia implementación. Intente escribir un solo algoritmo en varios idiomas diferentes. Por ejemplo, escribiría un algoritmo en Python, JavaScript, C, Scala y tal vez un nuevo lenguaje que estaba probando en ese momento. Esto funciona como una repetición para recordar el algoritmo y también le permite repasar otro idioma.

Personalmente disfruto de Hacker Rank. Aunque no lo uso de manera competitiva, es una herramienta realmente ingeniosa para tratar de desafiarte a ti mismo.

Hay un libro: James Edward, II Gray: 9780976694076: Amazon.com: Libros llamados Best of ruby ​​quiz.

Aunque el libro trata sobre la programación de Ruby, tiene excelentes crackers y acertijos para resolver, con respuestas de algunos de los mejores programadores. Por supuesto, no tiene que usar Ruby, pero este libro está entre los mejores para los rompecabezas y también hay un sitio web con aún más rompecabezas. Cuando puedes terminar estos acertijos, eres bueno, muy bueno.

Code Katas! 🙂

CodeKata

More Interesting

¿Cómo puede un ingeniero de software ordinario obtener una oferta de las compañías de Big Tech? Competí en algunas competencias de programación similares al ACM-ICPC, pero solo llegué al nivel nacional y no al internacional.

Si comienzas tu carrera trabajando para una empresa de consultoría, ¿es más fácil hacer la transición a una empresa de software en el futuro?

¿Qué es lo mejor que puede hacer una carrera profesional para un ingeniero de software en este largo fin de semana?

Cómo encontrar el ingeniero de software adecuado para construir una plataforma de compraventa de divisas

¿Qué son las pruebas ETL y cuáles son sus operaciones en ingeniería de software?

¿Por qué me maltratan como empleado de ingeniería de software pero me respetan como contratista de ingeniería de software?

¿Cuáles son algunas buenas historias sobre ingenieros de software y equipos de ingeniería?

¿Puedes conseguir un trabajo de programador sin un título universitario (y si tu especialidad es negocios y no informática)? ¿En qué idioma debes aprender tu primer concierto de programación? ¿Y qué títulos de empleo buscarías en los sitios de búsqueda de empleo?

¿Cómo debo prepararme para ser un ingeniero de software autodidacta?

Outsourcing de código: ¿Cuánto cuesta contratar a un ingeniero de software de contrato a tiempo parcial de India o China?

¿Es importante el Grado 11 para seguir una gran carrera en ingeniería de software?

Cuando los ingenieros de software hablan de 'migrar' algo, ¿a qué se refieren típicamente?

¿Qué debo hacer si quiero construir un sistema de pago basado en etiquetas RFID para una fiesta que usa pulseras con MIFARE Classic?

Me colocaron en MNC como ingeniero de software pero quiero hacer más, aparte de esto. ¿Qué tengo que hacer?

¿Puedes convertirte en ingeniero de software como matemático?