Una Guía Completa para Convertirse en un Programador Autodidacta
Parte II: Piense, Planifique y Ejecute como un Programador
Ahora que sabe cómo resolver problemas, razonar sobre la solución y comunicar sus ideas con fluidez, es hora de que ponga estas habilidades en práctica, como lo hace un programador.
En esta parte, hay tres cosas que debe aprender. En primer lugar, aprenderá C++ como segundo lenguaje, que está más cerca de las descripciones a nivel de máquina en comparación con Python. Python está más cerca del espectro del inglés simple, mientras que C++ está más cerca del final del espectro de 0s y 1s. Aprender C++ le hará familiarizarse con más construcciones de programación como punteros. En segundo lugar, mejorará su velocidad de codificación practicando intensamente, leyendo documentación y ajustando aún más sus habilidades de depuración. Finalmente, aprenderá la recursividad, que es la magia que usan los programadores y los científicos de la computación para aprovechar el poder de la computación.
Aprende C++ y empieza a escribir programas simples
Ya has aprendido Python en la parte anterior. Python es un lenguaje amigable para el programador, ya que oculta muchos detalles de bajo nivel del programador para facilitar su uso. Sin embargo, si desea progresar, es absolutamente necesario aprender los fundamentos de la programación en C++.
En qué centrarse: Escribir código en C++ te hará sentir más como un programador, porque vas más hacia descripciones a nivel de máquina. Aprenda la diferencia entre sintaxis y semántica. Dedique tiempo a aprender escritura estática y dinámica, administración de memoria y punteros. Aprende a implementar condicionales, bucles, funciones, tipos de datos y cosas que aprendiste en Python de nuevo en C++. Si todo esto parece griego y latín, no te preocupes. La sección de recursos le aclarará todo.
Manejo de errores: Siempre que se produzca un error, no se desanime. Incluso los programadores más experimentados tienen errores y errores en sus programas. Todo lo que tienes que hacer es leer el error, hacer una búsqueda rápida en Google y solucionar el problema en tu código. Mientras hace esto, comprenda dónde cometió un error, corrija su comprensión y proceda. A veces hay que leer un poco de documentación. Revisa la siguiente sección.
Leer documentación debería ser una segunda naturaleza para ti
Al igual que hacer una búsqueda en Google, la habilidad de un programador se decide por lo bien que puede entender la documentación y escribir programas útiles. A medida que aprenda a leer documentación, también aprenderá a comentar su código, escribir código legible y escribir documentación para el código que escriba.
¿Por qué deberías aprender esto? Muchas personas tienen dificultades para aprender nuevas tecnologías y buscan cursos listos para aprender. Si bien esto está bien en las etapas iniciales, a medida que se profundiza su conocimiento, no encontrará tutoriales listos para alimentarse con cuchara. Tendrá que leer la documentación y recoger lo que necesita. Una vez más, aprenda a filtrar la información y tomar exactamente lo que necesita para hacer el trabajo.
Practica. Repetir. Practicar.
Ahora solo tienes que seguir practicando. Dirígete a Hackerrank y resuelve todos los problemas fáciles en la sección de calentamiento e implementación. Si hay un problema que no puede resolver, lea las discusiones, lea el editorial y vea cómo puede resolverlo usted mismo. Si hay algo que no entiendes, usa Google.
Si ha realizado las lecturas de la parte anterior, no debería tener ningún problema aquí. Si estás luchando, te sugiero que regreses y vuelvas a visitar esas secciones. Debes ser bueno escribiendo código, así que no te saltes esta parte. La idea es expresar con fluidez sus soluciones en inglés sencillo en sus equivalentes de programación. Una vez que no esté empantanado por los detalles del idioma, puede continuar. Tome todos los programas que escribió en Python y codifíquelos en C++.
Es posible que te encuentres con el bombo alrededor de la programación competitiva, te recomiendo que te mantengas alejado de ella en esta etapa porque hará más daño que bien. Una vez que termine la Parte III, puede experimentar con ella y, si se hace bien, puede mejorar enormemente sus habilidades para resolver problemas.
Entender la recursividad también
El corazón de un científico informático radica en la capacidad de comprender la recursividad. Recurrir significa expresar algo en términos de sí mismo. Todo lo que puedes hacer usando bucles se puede hacer recursivamente y de maneras muy elegantes. Trate de entender esto intuitivamente y vea los videos que he proporcionado en los recursos. Si eres un desarrollador de software que no entiende la recursividad lo suficientemente bien, te recomiendo hacerlo de inmediato.
Resumen
Hasta ahora, conoces un lenguaje de bajo y alto nivel y puedes apreciar suficientemente las diferencias en el «control» que tienes sobre tus programas. A estas alturas, debería ser capaz de escribir programas simples utilizando Python y C++ y apreciar la diferencia entre ambos lenguajes.
A partir de aquí, muchas personas entran en la rutina de aprender más idiomas, lo que no es más que un ejercicio inútil en sí mismo. Una de las preguntas más comunes que me hacen los principiantes es » ¿Cuántos idiomas conoces?», lo que me lleva a darme cuenta de lo equivocados que son los principiantes en general, ya que relacionan la destreza de programación con el conocimiento de más idiomas. La programación no se trata de conocer muchos idiomas. El idioma que utiliza es solo una forma de expresar y resolver su problema de manera efectiva. En esta etapa, eres un «programador», pero eso no es suficiente. Ahora necesita aprender Informática para llevar su conjunto de habilidades al siguiente nivel.
Parte III: Su cita con la Informática
Una comprensión sólida de los recursos en esta etapa lo hará mejor que la mayoría de los programadores de su grupo de pares. Incluso puede llegar a ser mejor que la mayoría de los estudiantes de ingeniería de 2º/3º año en la India. Su progreso a partir de aquí depende de su sed por el material en esta sección. Así que concéntrate.
la Mayoría de los temas de esta sección están cubiertos en el 2do año de pregrado de Ingeniería informática curso. Me he acercado a ellos de manera un poco diferente para que se adapten mejor a los objetivos de esta guía.
¿En qué se diferencia esto de un plan de estudios de pregrado regular? Los currículos regulares de pregrado están muy cargados de teoría. Los cursos que he sugerido en la sección de recursos tienen una buena mezcla de teoría y práctica. Si bien esto puede ser algo bueno para los aspirantes a ingenieros, para el profano, no es muy útil. Pierdes la noción de dónde termina la teoría y dónde comienza la práctica. Señalaré exactamente lo que necesitas aprender en teoría para que puedas seguir adelante y practicar. Theory es solo una herramienta para ayudarte a escribir mejor código en esta etapa, así que no te quedes atascado demasiado.
Dato curioso: En mi 2do semestre de ingeniería, tuvimos una asignatura llamada DBMS (Sistemas de Gestión de Bases de datos). Me sorprendió encontrar gente que dibujara los mejores diagramas de emergencias para sus diseños de bases de datos, pero cuando se trataba de diseñar una base de datos para aplicaciones prácticas, fallaban miserablemente. Estaban tan enfocados en obtener los detalles del diagrama bien, que olvidaban la razón por la que lo estaban haciendo en primer lugar. No los culpo, porque nunca se les enseñó que el diagrama está ahí para construir mejores bases de datos, no para mejorar sus habilidades de dibujo.
Matemáticas discretas
Ya has estado usando matemáticas discretas sin saberlo. La matemática discreta es una combinación de áreas en matemáticas aplicadas que se utilizaron repetidamente en ciencias de la computación. Los expertos en el campo decidieron agruparlo todo y ponerle un nombre — que ahora llamamos matemáticas discretas.
Cuando el aprendizaje de la matemática discreta, siguen el mismo principio que describí en la Parte I. Pensar en términos de estructuras matemáticas y los procedimientos utilizados para manipular. Las matemáticas discretas simplemente aumentan el número de herramientas a su disposición para abordar problemas. Si ha superado su miedo a las matemáticas, disfrutará a fondo del curso que he vinculado en la sección de recursos.
Estructuras de datos y algoritmos
Esta es la columna vertebral de todo su viaje. De hecho, ya ha estado utilizando estructuras de datos y algoritmos todo este tiempo, de nuevo sin saberlo. Ahora lo formalizaremos y estudiaremos esto con más detalle.
Como un programador experimentado, usted va a utilizar las estructuras de datos y algoritmos en todas partes. Entenderlo lo suficientemente bien ampliará sus habilidades y herramientas matemáticas para construir estructuras computacionales efectivas para abordar problemas comunes. También aprenderá diferentes técnicas de diseño de algoritmos, que son como planos para resolver algunos temas en ciencias de la computación.
Muchos tutoriales le indicarán que comience a aprender algoritmos y estructuras de datos directamente. La razón por la que no hice esto es porque entrarías en Einstellung, que es tener una mentalidad fija y un enfoque de los problemas. Confía en mí, eso paraliza tu forma de pensar porque no piensas fuera de la caja. Al final de esto, serás un gran solucionador de problemas y codificador.
Las mejores prácticas
El software de escritura no se trata solo de armar código al azar para hacer las cosas. En la mayoría de los entornos profesionales, no será el único programador que trabaje en una base de código. Es importante que siga ciertas pautas y convenciones para que la programación de la base de código sea más fácil para todos en el equipo. Esto hace que sea más fácil entender el código escrito por otra persona y, posteriormente, hace que sea más fácil para otros entender su código. Si eres un desarrollador de software junior, enfócate en esta sección.
¿Qué puedes hacer? Dedique tiempo a comprender y poner en práctica el Principio de la SEQUEDAD (No se Repita). No escribas código repetitivo, ya que esto te ralentiza y te hace más propenso a cometer errores. Escribe comentarios y documentación útiles siempre que puedas. Cuando empecé, pensé que esto era una estupidez hasta que, un día, abrí un viejo proyecto y me di cuenta de que todo mi código era ininteligible. Como programador, no necesitas memorizar mucho. Memorizas lo que es importante y buscas lo que se necesita.
Control de versiones (Git)
Esto es algo que empecé a hacer temprano y que ayuda enormemente a mantener el código organizado. Realiza un seguimiento de los cambios y sabe exactamente qué cambios necesita para implementar ciertas características. También aprenderá a prevenir y corregir errores rápidamente. Veo a muchos jóvenes ingenieros que ni siquiera saben qué es Git, y eso es extremadamente triste. Pasarán toda su carrera usando el control de versiones; si eres uno de ellos, dirígete directamente a los recursos a continuación.
Programación orientada a objetos
Una introducción a una forma completamente nueva de programación. Hasta ahora, hemos estado haciendo programación de procedimientos. Ahora cambiamos a la programación orientada a objetos, que es un nuevo paradigma en conjunto. Una introducción a la encapsulación y abstracción de datos le ayudará a apreciar la forma en que se ha diseñado esta guía. En OOP, todo es un objeto y la idea es separar claramente la interfaz y la implementación. Aprenderás Clases y Herencia también. Al final, comenzará a diseñar soluciones orientadas a objetos y aprenderá a construir cajas negras inteligentes para resolver problemas. Aprender Java es una buena manera de comenzar con este nuevo paradigma de programación. Python también es compatible con OOP, ¡así que intenta explorar eso!
Practica duro
Practica todas las habilidades / conceptos / algoritmos de esta sección escribiendo fragmentos de código. Reescriba el código antiguo con el nuevo conocimiento que ha adquirido. Sigue escribiendo pequeños programas y aprende algo nuevo de ellos en cada etapa.
Siga aprendiendo a medida que avanza. He construido calculadoras, sistemas de gestión de bibliotecas, scripts de computación numérica de muchas maneras diferentes, y cada vez, aprendí algo diferente. Eventualmente se dará cuenta de que no hay bala de oro para arreglarlo todo. La vida está llena de compensaciones. Esa es la belleza de la imperfección.
Resumen
Sabes más que suficiente para crear un software que cambia el juego. Debes internalizar todo hasta aquí para ir al siguiente paso. A partir de aquí, más teoría no te servirá de nada. Solo debe invertir tiempo en practicar y construir proyectos útiles. La programación es una ciencia aplicada: siga la regla 80/20, lo que significa pasar el 80% del tiempo practicando y el 20% leyendo teoría.
Parte IV: Es hora de que construyas Algunas Cosas geniales
Si has seguido la guía hasta aquí, estás bien equipado para seguir adelante y construir algunos grandes proyectos que puedes poner en tu CV, presumir ante tus amigos o incluso generar ingresos de tu trabajo. En esta etapa, quiero enseñarte a aprender cosas a lo largo del camino. Cada nuevo proyecto que emprendas o al que te asignen exigirá aprender algo nuevo. Es importante que abordes esto con la actitud correcta.
Hay algunas pautas que se pueden seguir cuando usted toma cualquier proyecto. Desarrollé esta rúbrica para mí y me di cuenta de que sería útil para ustedes, amigos, para emprender nuevos proyectos.
- Identifique el problema en el que está trabajando y sea muy específico sobre los detalles. Sea claro acerca de sus metas y objetivos.
- Busque proyectos existentes o similares e identifique dónde sobresalen y dónde carecen. Vea dónde encaja su idea, cómo se alinea el proyecto con las metas y objetivos que tiene en mente y tome nota de todo.
- Haga una lista de todas las habilidades que necesita aprender para hacer el proyecto y la medida en que necesita desarrollar la habilidad para hacer el proyecto. Conoce tus fortalezas y debilidades.
- Crear un plan para aprender las habilidades necesarias. Identifique a las personas adecuadas para ayudarlo y los tutoriales necesarios para comenzar. Concéntrese exclusivamente en desarrollar la habilidad para hacer su proyecto. Es fácil dejarse llevar por ir en profundidad. Recuerde, está aprendiendo la habilidad para completar el proyecto y no escribir una tesis de doctorado sobre él. A menos que ese sea tu objetivo.
- Comience con el proyecto, actualice sus metas y objetivos y sea muy claro sobre sus fortalezas y debilidades. Divida el proyecto en sub-tareas factibles y asigne una métrica de objetividad para cada una. Esto significa que necesita saber cuándo dejar de perseguir la perfección y centrarse en el panorama general.
- Ejecutar con impaciencia. Repita hasta que se cumplan todos sus objetivos.
Lea esto para obtener consejos y trucos sobre cómo convertirse en un mejor alumno.
Dado su conocimiento existente, puede aprender a crear sitios web, aplicaciones móviles, juegos, pequeños scripts, complementos de Chrome, aplicaciones de escritorio y software de análisis de datos. Proporcionaré más información sobre esto en el próximo post. Una vez que tenga algunos proyectos completados en su haber, será un desarrollador lo suficientemente bueno como para trabajar por cuenta propia y ganar dinero, lo que es una gran fuente de ingresos si es estudiante. Si eres de otro campo, esto te da una base lo suficientemente sólida como para poder aumentar tu trabajo actual con tecnología. Lo que puedes con tu conjunto actual de habilidades es infinito, incluso una publicación de blog completa no puede hacer justicia a eso.