Programación Competitiva… ¿Qué es lo primero que te viene a la mente…? lo más probable es que asocies la idea de resolver las preguntas de codificación en GeeksforGeeks , Codechef, Topcoder, Codeforces, Hackerrank, etc.
¿Qué pasa con el desarrollo de software…? Lo más probable es que imagine a una persona que crea una aplicación, un sitio web, aplicaciones móviles o una persona que maneja algún problema de back-end o escalabilidad de una aplicación.
Muchos sitios lo alientan a participar en la programación competitiva y practicar preguntas de codificación. Después de todo, abre tantas oportunidades para entrevistas de trabajo. Bueno, eso es cierto, pero algunos de ustedes también saben que algunas personas ganan muy bien en el desarrollo de software sin tener experiencia en programación competitiva. Entonces, la pregunta que molesta a mucha gente, especialmente a los estudiantes, es… donde deboinvertir mi tiempo?
Antes de profundizar en este tema, hablemos primero de los deportes… Tome el ejemplo de cualquier deporte que le guste… críquet, baloncesto, tenis, bádminton o cualquier otro juego al aire libre.
Muchos buenos jugadores ( ¡Sí!… estamos hablando de buenos jugadores ), involucrados en estas actividades deportivas, no solo practican baloncesto o cricket o cualquier otro juego todo el tiempo, sino que también pasan tiempo en el gimnasio para mantenerse en forma. Pues correr en cinta, levantar pesas, hacer flexiones, dominadas no te garantiza tener éxito en el deporte pero te da muchas ventajas frente a quien no las practica.
Lo mismo sucede en la ingeniería de software cuando ingresas al mundo del desarrollo de software como un programador competitivo… ( espero que hayas entendido el mensaje que queremos transmitir a través del ejemplo anterior… ).
Elegir uno no es solo una decisión confusa para los estudiantes de informática, sino que también es una decisión difícil para los desarrolladores experimentados que buscan mejores oportunidades o crecimiento en las empresas. Hoy hablaremos sobre este tema en detalle e intentaremos resolver esta confusión. Antes de dar una opinión, veamos cuál es la opinión de algunos ingenieros que trabajan en algunas grandes empresas tecnológicas. Según el ingeniero de Microsoft, Satendra Verma , “ Aunque aumenta sus habilidades, un buen ingeniero de software requiere mucho más de lo que la programación competitiva tiene para ofrecer. La programación competitiva no es una necesidad para ser un buen ingeniero de software. “Si hablamos del lado opuesto, muchos ingenieros también estuvieron de acuerdo en que participar enla programación competitiva los ayudó a aprovechar una oportunidad laboral y convertirse en ingenieros de software.
¿Ambos no son lo mismo? Si no es así, ¿por qué las empresas dan preferencia a los programadores competitivos cuando se trata de contratar para el puesto de trabajo de un ingeniero de software?
¿Puede un programador competitivo convertirse también en un buen desarrollador?
¿No es un buen desarrollador un buen programador competitivo?
Sabemos que muchas preguntas como las anteriores están apareciendo en tu mente… surge la misma pregunta nuevamente… ¿qué debo elegir y dónde debo invertir mi tiempo?
¿Qué pasa si decimos que debes elegir ambos y puedes convertirte en ambos?… Vamos a tener una discusión detallada sobre este tema ahora…
Programación Competitiva
La mayor ventaja de hacer CP es que te hace la vida más fácil y descifrar las entrevistas de codificación se convierte en pan comido para ti. Puede enfrentar el rechazo en las entrevistas, incluso si es un buen desarrollador de software pero no un buen programador competitivo. CP lo convierte en un buen solucionador de problemas que es muy importante en el desarrollo de software.
Es fácil para un buen solucionador de problemas trabajar en algunos proyectos desafiantes y complejos. Cuando trabaja en un gran proyecto, es importante dividir el problema en unidades más pequeñas y resolver cada una de ellas individualmente para que el proyecto funcione para los usuarios. La habilidad para resolver problemas es algo natural para un programador competitivo. Pueden dividir los problemas en unidades más pequeñas, visualizar las soluciones en su cabeza fácilmente y convertirlas en código con muy pocos errores. Esta capacidad es muy necesaria en el desarrollo de software. Un buen programador competitivo también escribe el código correcto y no comete muchos errores, lo cual es otra ventaja.
CP desarrolla las habilidades fundamentales básicas y se trata de aprender el arte y la cultura de la programación. Resolver los problemas de codificación es un ejercicio para tu cerebro y también es un juego divertido para mucha gente. Un programador competitivo siempre tiene un buen dominio del pensamiento analítico, la habilidad para resolver problemas, las estructuras de datos, el tiempo y la complejidad del espacio del código. Cuando resuelven preguntas de codificación en diferentes sitios web, mejoran estos conjuntos de habilidades y en problemas del mundo real, es muy importante… ¿¿cómo?? Lea el ejemplo que se da a continuación…
Suponga que está trabajando en un gran proyecto en el que necesita manejar una base de datos a gran escala con TB de datos. Aquí, leer y escribir será un proceso lento y puede ralentizar el rendimiento de la aplicación. Para mejorar el rendimiento de la aplicación y ahorrar muchos recursos, necesita escribir un código eficiente. Puede mejorar la complejidad temporal de la función en su código y puede reducir las llamadas de lectura almacenando los datos más frecuentados en un caché. Hacer programación competitiva te ayuda a encontrar la solución más óptima en el menor tiempo posible. Ayuda a hacer estas compensaciones y, en este escenario, esta habilidad es muy necesaria cuando necesita mejorar el tiempo y la complejidad de su código y necesita encontrar la solución óptima para el problema.
Aquí podemos concluir que un programador competitivo puede resolver problemas de una mejor manera utilizando su pensamiento analítico. Son buenos para seleccionar la estructura de datos correcta para un problema específico. Ellos saben cuál es el más adecuado para un problema específico.
Lea más sobre la importancia de la estructura de datos y los algoritmos en el artículo ¿Por qué es importante aprender las estructuras de datos y los algoritmos?
Desarrollo de software
Pregúntele a un desarrollador de software y le dirá qué tan satisfactorio es el viaje para crear software real que usen los usuarios finales.
Hemos discutido CP y las ventajas de CP también, pero ahora vamos a discutir el otro lado de CP que no puede compararse con el desarrollo de software. A las personas que aman el CP generalmente no les gusta el desarrollo de software. La razón es que la mayoría de las veces tendrán que trabajar en algunas bibliotecas, marcos o algunas herramientas para construir software real donde las cosas ya están implementadas. En estos casos, no encuentran ningún caso de uso de su conjunto de habilidades de programación competitivo.
Ser un programador competitivo si cree que el desarrollo de software se trata de buscar la solución en Stack Overflow o de recibir la ayuda de algunas comunidades en línea, entonces está equivocado. Ser un desarrollador es una posibilidad remota. Toma tiempo. Requiere una cultura de codificación y desarrollo de cosas. Pasará mucho tiempo en varios sitios y blogs para conocer todas las herramientas, tecnologías y bibliotecas para hacer las cosas en su trabajo. Debe averiguar por su cuenta qué herramienta, biblioteca o marco es el adecuado para elegir para resolver sus problemas (por ejemplo, cuándo usar MongoDB , cuándo usar MySQL o cuándo es bueno usar Elastic Search). Los mejores ingenieros son los que son lo suficientemente inteligentes como para utilizar las herramientas más adecuadas para resolver un problema específico.
Un desarrollador de software también se ocupa de la complejidad del sistema, el problema de escalabilidad y algunas técnicas para tratar el problema de rendimiento de la aplicación (por ejemplo, el mecanismo de almacenamiento en caché).
En el desarrollo de software, la mayor parte del tiempo trabajas en equipo y tu código no es solo tu código (pero los programadores competitivos suelen ser sus maestros). Por lo tanto, es muy importante en el desarrollo de software escribir un código limpio y mejor que sea fácil de leer, fácil de modificar, fácil de mantener y fácil de ampliar. A nadie le gusta trabajar en un código desordenado escrito por un desarrollador XYZ en un equipo. Recibirá el odio de otros desarrolladores si deja un código desordenado en la base de código. Entonces, esta habilidad es una de las habilidades más importantes que debe tener un desarrollador de software. Viene con la práctica, la paciencia, mirar el código del otro desarrollador y cuando llegas a disfrutar de la construcción de algunos proyectos del mundo real. Desafortunadamente, la programación competitiva no puede enseñarte este conjunto de habilidades.
También debe ser bueno en patrones de diseño , sistemas operativos. redes informáticas, sistemas distribuidos y algunos otros conceptos fundamentales de la informática. El desarrollo de software lo mejora en múltiples áreas. Mejora su habilidad de comunicación porque necesita hablar con sus gerentes o colegas sobre los requisitos del producto o las tareas en su proyecto. En CP, solo eres tú quien escribe el código y aumenta la calificación. No hay participación de otros.
Una de las mejores cosas del desarrollo de software es que haces la vida más fácil para los demás y tienes un gran impacto en la vida de las personas. Solo mire a su alrededor, hay tantas aplicaciones que nos hacen la vida más fácil. Uber, Zomato, Swiggy, Ola están creando un gran impacto en la vida de las personas. Estas cosas no son posibles haciendo solo CP. El desarrollo de software también abre la oportunidad de trabajar independientemente, que es otra buena fuente de ingresos para muchas personas.
¿Qué pasa con las oportunidades de trabajo?
Sí, tenemos que hablar sobre este tema… después de todo, al final se trata de ganar dinero.
Si hablamos de las startups, los requisitos son diferentes para ellas. La mayoría de las veces necesitan un desarrollador que pueda comenzar todo desde cero. Necesitan configurar y construir todo desde cero. Por lo tanto, sus requisitos cuando contratan son diferentes. Están en la fase inicial de desarrollo, por lo que el número de usuarios es limitado para su producto y, por lo tanto, a veces no requiere un conocimiento profundo de la estructura de datos y los algoritmos. Por lo general, contratan a un desarrollador calificado que ha trabajado en algunos proyectos y puede comenzar desde el primer día con un tiempo mínimo o nulo para prepararse.
Una experiencia de codificación decente es suficiente para estas nuevas empresas, pero más que eso prefieren a alguien que ya tenga el conocimiento de toda la tecnología, la metodología de codificación, la herramienta, la biblioteca o el marco con el que necesitan trabajar. Se preocupan más por lanzar su producto en el mercado para los usuarios lo antes posible. Estas nuevas empresas pueden necesitar programadores competitivos más adelante cuando comiencen a notar algunos problemas de velocidad y escalabilidad debido al creciente número de usuarios. En ese caso, hacer la aplicación más rápida y eficiente será la preferencia por ellos.
Si hablamos de las grandes empresas gigantes tecnológicas Google, Amazon, Microsoft, Apple, Facebook, Walmart, etc., los requisitos de estas empresas son diferentes. Tienen una gran cantidad de usuarios en todo el mundo y se preocupan mucho más por la eficiencia y el rendimiento de la aplicación. Necesitan algunos programadores competitivos con sólidos conocimientos de estructuras de datos y algoritmos. Por supuesto, los programadores competitivos son los más adecuados para ellos porque pueden pensar y resolver problemas difíciles de una manera más eficiente. Un programador competitivo podrá elegir la estructura de datos y los algoritmos correctos para hacer las cosas por ellos. Estas empresas se centran más en la complejidad del código. Porque de todo lo demás ya se encarga personal especializado.
Conclusión
Bueno, un desarrollador puede crear un buen software sin la experiencia de la programación competitiva, pero ¿piensa que sin el conjunto de habilidades de CP y el conocimiento de las estructuras de datos y los algoritmos puede hacer que la aplicación sea más rápida, eficiente y con una mayor complejidad de tiempo y espacio? Por supuesto que no …
El punto es… si solo se dedica al desarrollo de software, se perderá algunas ventajas de la programación competitiva que pueden ayudarlo a crear un buen software. Por otro lado, si solo te dedicas a la programación competitiva, también te resultará difícil adaptarte a la cultura del desarrollo de software.
Ambos se necesitan mutuamente . Así que mejor convertirse en ambos y ayudarse a sí mismo . Debe dedicar tiempo a la programación competitiva y luego debe usar este conocimiento adquirido para convertirse en un buen desarrollador. Si eres un estudiante, es bueno pasar tiempo en CP para construir la base, pero ensúciate las manos en la construcción de algún proyecto real, incluso si es uno más pequeño. Los desarrolladores experimentados pueden tomar estos desafíos de codificación como un pasatiempo y como una parte divertida de su vida cotidiana. Al igual que ir al gimnasio puede ser parte de la vida diaria de alguien para mantenerse en forma, resolver la cuestión de la codificación también debe ser parte de la vida del desarrollador. Después de todo , se trata de ejercitar tu cerebro .
Incluso si hemos sugerido elegir ambos, aún puede elegir uno sobre el otro y hacer lo que le gusta hacer. Se trata de su satisfacción y está completamente bien si solo desea concentrarse en una cosa específica. Hay muchas oportunidades en ambas áreas y se le pagará lo suficiente si da su 100% en algo que le encanta hacer.
Publicación traducida automáticamente
Artículo escrito por anuupadhyay y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA