La mejor respuesta
Mucha gente me pregunta cómo para aprender a programar desde cero. De esta respuesta aprenderá cómo hacerlo. Estoy programando desde hace 20 años. Comparto mis experiencias y las de las personas a las que he ayudado en el desarrollo de esta carrera.
La respuesta se escribió originalmente en mi blog. y recibió 30 000 visitas y 1 000 votos en Wykop, un sitio similar a Reddit polaco. ¡Disfruta!
Mucha gente me pregunta cómo aprender a programar desde cero. Todos los días leo comentarios de este tipo. Por ejemplo, alguien está trabajando en un área diferente y quiere convertirse en probador de software. O trabaja en TI, pero quiere saltar a un nuevo nivel y comenzar a programar. Todas estas personas tienen algo en común. Quieren comenzar el viaje de la programación. Pero esta área es tan amplia que no saben cómo empezar. Y todos dicen otras cosas sobre cómo hacerlo.
A partir de esta respuesta, aprenderá cómo comenzar a programar desde cero. También recibirás algunos consejos que te ayudarán en el progreso. Entonces, comencemos:
Para aprender a codificar, debe seguir estos pasos:
1. Mira a tu alrededor
Actualmente, la programación es un área muy amplia. Así que es bueno mirar a su alrededor y ver en qué direcciones puede ir. Porque si conoce las formas posibles, puede elegir la más adecuada para usted. También ayuda a elegir las tecnologías que debería aprender.
Para empezar, puedo hablar sobre programadores de sitios web . Estas son personas que usan, por ejemplo, WordPress u otro sistema de gestión de contenido (CMS) y con la ayuda de sus habilidades, ajustan el sitio web para que funcione como el cliente espera. Para hacerlo, estas personas necesitan saber principalmente JavaScript, HTML y CSS.
Desarrollador de sitios web: esta es probablemente la interpretación más popular de un «programador» en el mundo.
Pero programación no se trata solo de sitios web de WordPress. Es mucho más. La programación se divide en varios reales. Primero, les daré tres ejemplos de dominios frontend. La programación frontend es la programación de algo que ve el usuario / cliente. Una interfaz. En pocas palabras:
Programación de aplicaciones web : creación de aplicaciones comerciales en línea (como la aplicación de su banco o la aplicación de comparación de películas). Se trata de aplicaciones específicas que satisfacen las necesidades de un grupo específico de usuarios. No sirven para gestionar contenidos (como WordPress) sino para gestionar procesos (es decir: para que las personas puedan, en pocas palabras, completar algunas tareas). Además de JavaScript, los programadores de HTML y CSS necesitan conocer algunas tecnologías adicionales para la programación de aplicaciones web. Depende de un proyecto, por ejemplo: SCSS, TypeScript y cualquiera de los siguientes frameworks: Ember, Angular, Vue o React. (Framework es un esqueleto de una aplicación con características de compilación).
Programación de aplicaciones de escritorio, como arriba, pero se trata de programar aplicaciones que puede instalar, por ejemplo, en un sistema Windows. Este grupo se diferencia del anterior. Utiliza otras tecnologías. Por ejemplo, la programación para Windows puede usar lenguaje C # y .NET Framework.
Programación de aplicaciones móviles : se trata de escribir aplicaciones instaladas en dispositivos móviles . Principalmente en dispositivos con sistemas operativos Android e iOS. La programación para Android utiliza principalmente el lenguaje de programación Java y para iOS: el lenguaje Swift. Para cada sistema hay diferentes marcos. También hay marcos para ambos sistemas.
Estos fueron ejemplos de frontend reales. Ahora pasemos a los reinos de back-end. El backend es, más o menos, programando algo que el cliente / usuario no ve, pero es esencial para que el sistema funcione:
Programación de base de datos – bases de datos como MySQL y MSSQL. La base de datos es, más o menos, una hoja de cálculo avanzada. La base de datos almacena así más datos y permite manipularlos programáticamente. Agregue datos, elimínelos, cámbielos. Además, permite configurar diferentes formas de manejo de datos. Por ejemplo, rechace los datos incompletos o recopile datos de diferentes tablas. Los sistemas de bases de datos utilizan sus variaciones del lenguaje SQL (por ejemplo, T-SQL para MSSQL). El lenguaje permite codificar varias operaciones sobre los datos. También hay bases de datos que no utilizan lenguaje SQL. Usan un nombre místico: NoSQL.
Programación de backend : el desarrollador de backend procesa datos entre la base de datos y el frontend, o entre diferentes sistemas que necesitan cooperar. Casi todos los lenguajes de programación se pueden utilizar con fines de backend. Pero dado que el backend tiene casos de uso específicos, la gente tiende a usar lenguajes diferentes a los del frontend. Por ejemplo: PHP, Ruby, Python, Java, pero también JavaScipt.
La mayoría de los programadores se dividen en desarrolladores frontend y backend. Pero también hay desarrolladores fullstack.El desarrollador Fullstack es una persona que conoce las tecnologías frontend y backend. Él / ella puede encargarse de todo para configurar una aplicación: base de datos, backend e interfaz de usuario.
Pero estos no son todos reinos. Y en la mayoría de estas vistas generales se omiten otros reinos. Cada vez tenemos más dispositivos avanzados, sensores, que proporcionan datos a los sistemas de información. Estos también deben programarse. A esto se le llama programación integrada. La programación incrustada se realiza principalmente en lenguajes C y C ++, porque estos lenguajes le dan al programador acceso a abstracción de bajo nivel. Ahorra recursos de estos pequeños dispositivos.
Otro ámbito próspero de la programación es el análisis de datos. Los desarrolladores de análisis de datos utilizan grandes conjuntos de datos en las empresas y preparan resultados para extraer conclusiones comerciales sobre ellos. Estos programadores usan diferentes conjuntos de lenguajes, incluidos Python y R (sí, este es el nombre de un lenguaje de programación, solo una letra R. ¿A dónde está llegando el mundo, verdad?).
Otro reino es el legado programación. Los desarrolladores heredados conocen las tecnologías que se utilizaron para construir sistemas, pero ya no son populares. Admiten sistemas heredados que necesitan funcionar, pero que se construyeron hace años.
Hay muchos otros aspectos reales de la programación. No escribiré sobre todos estos aquí. Pero es posible encontrarlos.
Este es el final de este punto. ¿Por qué es tan importante? Si sabe en qué área está interesado, puede elegir tecnologías, debe aprender. Y es más fácil aprender algunas de las tecnologías que 200 de estas.
Supongamos que ya sabe en qué área está interesado, ¿de acuerdo? ¿Qué sigue?
2. Elija tecnologías
Para avanzar más, debe tomar una decisión informada sobre las tecnologías que debe aprender. Pero, sinceramente, es difícil obtener un buen consejo al respecto. Podrías preguntarle a alguien, ir a estudios o un bootcamp. Pero de cualquier manera, terminarás aprendiendo: a) qué es popular b) qué sabe la persona que te enseña c) qué usa la persona que responde. Y a menudo no es una buena elección. Pero tengo buenas noticias. Puede hacerlo mejor y hacerlo bien.
Lea sobre qué tecnologías utilizan las empresas que trabajan en el área que le interesan. Busque ofertas de trabajo, vea qué tecnologías se repiten. No pierda el entusiasmo porque hay 20 tecnologías allí. Es una ficción. La gente escribe cosas que no son necesarias más adelante para el trabajo.
A menudo, leo que la gente sabe un poco de esto, un poco de aquello. Y todavía no saben cómo convertirse en programadores. Están perdidos. Es totalmente cierto. La programación es un área muy amplia y no se puede aprender todo. Tienes que elegir la dirección y ceñirte a ella. De esa forma, aumenta sus posibilidades de éxito.
3. Elija el método de aprendizaje
Este punto es muy importante y escribiré por qué. Todos tienen su opinión sobre cómo debe aprender un desarrollador. Si buscaba la respuesta en línea, encontrará muchas ideas sobre lo que es correcto. Se aconsejará utilizar videos de YouTube. Otros dirán que el libro es el camino a seguir. Otra persona dirá que un bootcamp es lo mejor. ¡El desarrollador de software aprende de una documentación! Algunos desarrolladores dicen también que la educación universitaria es inútil. Me entristecen estas declaraciones.
No sabes qué es lo mejor. Y es completamente natural. Todos dicen cosas diferentes. Personalmente, podría recomendar libros electrónicos y tutoriales en video, porque me gustan. Pero esta no sería una respuesta adecuada ni útil.
En realidad, no importa cómo aprenda. Siempre que aprendas. ¿Y recuerdas cómo aprendiste en la escuela? ¿Cómo se veía? ¿Un profesor te pidió que aprendieras un poco de esto, un poco de aquello? ¿Cosas que no tienen conexión entre ellas? No. Y en la escuela aprendes cosas complicadas. Cosas que no te importaban. Pero todos recordaron un poco de esto.
Es porque el aprendizaje en las escuelas es sistemático y metódico. Paso tras paso. El sistema fue desarrollado a través de cientos de años de experiencia. Si crees que no es lo suficientemente bueno, pregúntate: ¿cómo hacer una batería de papa? ¡Este sistema es tan bueno!
Estás interesado en aprender a programar. Lo mejor que puede hacer por usted mismo es elegir un método que sea metódico y sistemático. Entonces respondamos a nosotros mismos, ¿cuál es el método de aprendizaje más metódico y sistemático? Obviamente es una educación secundaria. El personal docente de secundaria conoce muy bien la educación metódica y sistemática. Será difícil, pero aprenderá a programar.
Otra forma de aprender son los libros y los libros. Con un poco de cuidado, encontrará un libro que enseña cosas paso a paso. De las cosas fáciles a las difíciles. De la A a la Z. Pero necesita que le guste leer.
Tutoriales en video y cursos en línea – estos pueden ser excelentes si el autor los preparó metódicamente – lo ayudarán con el aprendizaje. Especialmente si te gusta mirar y aprender.
Bootcamp: una formación intensiva en programación. También puede beneficiarse de esto. Es una buena solución si te gusta trabajar con personas en un grupo.
Lo único que quiero que tengas en cuenta es que no utilices formas no metódicas, no sistemáticas e incompletas de aprender a programar. Imagina que aprendiste el 50\% de un tema en un curso de video de YouTube (porque es gratis). Pero no hay una última parte. Buscas otro curso. Pero en otro curso hay cosas que no sabes. También algunas cosas que sabes. Y el tema se explica de una manera totalmente diferente. ¡Es tan abatido! Entonces, para empezar: contenido que cubra el tema de la A a la Z.
Llegando pronto al final de este punto, también quería notar un tema que es extremadamente importante. Leí que la gente aconseja a los principiantes que utilicen contenido en inglés para aprender. Estas personas no saben lo que hacen. Cuando seas principiante, no te hagas la vida más difícil. Si tiene contenido en su idioma nativo, utilícelo. ¿Por qué debería aprender a programar en un idioma extranjero? Es una absoluta basura. También puede aprender español del libro alemán mientras habla inglés, o pulir del libro canadiense mientras habla japonés. ¿Es posible? Si. Pero, ¿por qué?
4. Establecer una meta
Establecer metas a menudo se omite al planificar una carrera laboral. La gente comienza a aprender un curso, luego se detiene y luego va a un campo de entrenamiento mientras el tiempo pasa inevitablemente. Después de varios meses, no recuerda lo que ha aprendido antes. Parece que aprendió algo, pero ¿qué logró exactamente?
Para facilitar el aprendizaje, es una buena idea establecer una meta. Por ejemplo, puede jurar que leerá un libro de 800 páginas en un mes. O terminarás estudios de posgrado o encontrarás un trabajo de desarrollador junior en 6 meses.
Todo va mejor, si te pones una meta. Es algo sobre nuestra naturaleza, que las metas hacen la vida más fácil. Aprender no es fácil. Programar no es fácil. El aprendizaje de la programación está fuera de lo común. Por eso es tan importante una meta. Y la satisfacción de alcanzarlo da motivación para seguir trabajando.
5. Aprenda sistemáticamente
Cuando ya tenga un objetivo, el siguiente paso es crear un programa de aprendizaje. Todos los días una hora. Pero todos los días, siempre una hora. Y no para tomar otro video tutorial o leer un artículo, sino para aprender algo significativo.
¿Hay alguna manera de hacerlo más fácil? Se requiere concentración mental para aprender a programar. Mucha concentración mental. Probar esto. Anuncio para todos: a las 6:00 p. M. Aprenderé a programar durante una hora y por favor no me molesten. Apague el teléfono, cierre la sesión de Facebook. Dale hijos a tus suegros. Dale un perro a un vecino.
¡Observa cuánto aprenderás! Necesita aislarse del mundo para comprender realmente la comprensión de la programación.
6. Codifique usted mismo
Estoy siguiendo a un increíble desarrollador de software principiante en LinkedIn. Encontró una excelente manera de practicar la programación. Todos los días se pone la meta de codificar algo. Por ejemplo: un día: calculadora simple. Día siguiente: página simple con portadas de películas. Crea un GIF animado con lo que hizo y lo pone en LinkedIn. Escribe lo que ha aprendido durante el día. Amo seguirla. Crea algunos miniproyectos brillantes. Por encima de esto, en los primeros días también hice lo que ella hace. Lo que hizo todo buen desarrollador de software que conozco. Elaboración de tareas y programación. Así es como te conviertes en desarrollador de software.
Obviamente, es más fácil cuando estás estudiando, trabajando o uniéndote a un bootcamp, o teniendo un libro con tareas de ejemplo. Porque no necesita resolver las tareas por su cuenta. Este también es un buen método. Pero a veces estas tareas son aburridas, no te obliguen a salir de tu zona de confort. ¿Y si descubres una tarea por ti mismo? Luego chocará con algunos obstáculos, eso le indicará lo que debe aprender para ir más allá con su práctica.
7. Pide ayuda
Ya que estamos hablando de problemas. Es difícil articularse con los problemas que tiene en los primeros días de la programación. Por ejemplo, cuando ocurre un error en una aplicación. ¿Cómo traducir el problema en palabras? ¿Cómo pedirlo? A veces es tan difícil que la gente no sabe qué frase poner en una búsqueda de DuckDuckGo. Hace años era más fácil. Había StackOverflow y grupos de soporte, donde podía hacer cualquier pregunta. Puede contar con la ayuda de otros.
Hoy en día puede enfrentarse a respuestas como «buscar en Internet», «esto se preguntó antes» o «otra vez». Esto es frustrante. Desafortunadamente. Internet está lleno de respuestas. Lo que los desarrolladores de software avanzados no comprenden es que es difícil nombrar un problema si eres un programador principiante. ¡Incluso si tuvieran exactamente el mismo problema! ¡Puedo asegurarle esto!
Por lo tanto, le recomiendo encarecidamente que haga preguntas. Encuentre un lugar agradable en Internet para los desarrolladores de software o busque un mentor. Y pregunte pregunte pregunte.A veces te encontrarás con una vacilación. Pero no te derribará. Y si es así, busque otro lugar que sea más agradable.
Cuanto más pida, más fácil será expresar con qué tiene problema. Mientras pase el tiempo, sus preguntas serán cada vez mejores, las respuestas aparecerán cada vez más rápido. Y más adelante, descubrirá que algunos problemas pueden resolverse simplemente formulando una pregunta adecuada.
8. Encuentre trabajo rápido
A menudo leo que la gente pospone la búsqueda de trabajo hasta que aprende algo más. Y pasa medio año. El desarrollo de software es un campo en el que necesita renovar sus conocimientos todo el tiempo. Supongamos que ha aprendido de 3 a 4 tecnologías que necesita. Empiezas a buscar trabajo y te metes en problemas. ¡Podrías buscar trabajo durante varios meses! Y mientras lo hace, olvidará la mitad de las cosas que ha aprendido.
Así que mi consejo es que comience a buscar un trabajo más o menos en la mitad de su camino de aprendizaje. Por varias buenas razones. En primer lugar, si acepta un puesto de pasante o un trabajo junior, su empleador asume que no sabe casi nada. En segundo lugar, el proceso de contratación requiere tiempo. Antes de que afine su CV, antes de aprender preguntas de prueba prefabricadas, disponibles en línea, pasará el tiempo. Pasará mientras usted agudiza su discurso de reclutamiento sin nerviosismo. Encontrar un trabajo también es algo que necesita aprender.
Entonces, en la mitad del camino de aprendizaje, comience a buscar trabajo. Envía CV, programa reuniones, acostúmbrate. Entonces su preparación técnica se encontrará con la preparación para el reclutamiento y no habrá retrasos.
9. Solicita tareas más complicadas
Ahora tienes un puesto de trabajo. Pero la mayor trampa de la programación está por delante. Ya que tiene un trabajo, puede poner libros en los estantes y simplemente hacer lo que se le pida.
¡No es así! Tenga en cuenta que a menudo a los pasantes / juniors no se les pide que realicen tareas complicadas, pero sí muy fáciles. Pronto lo notará, estos toman cada vez menos tiempo para completarse y comienzan a volverse aburridos. Si no hace nada al respecto, pierde tiempo. Puedes aprender cosas nuevas. No corra en círculos.
Por encima de eso, su empleador ve cuando el pasante / junior se detiene. Soy un patrón, está tan claro como el cielo. Y nadie quiere tener Internet / junior atemporal.
Entonces, cuando vea que está mejorando, pídale a su supervisor tareas más complicadas. Él / ella debería saber para darte algunos más complementos. Esto es importante para continuar aprendiendo y desarrollándose mientras trabaja.
Como pasante / junior, necesita aprender mucho, mucho más. Estoy 100\% seguro de que no quieres convertirte en uno de estos tipos en Internet que dicen que el puesto de pasante / junior no les dio nada, no aprendió nada. No aprendieron, porque no querían ir más lejos. Perdieron su tiempo y el de su empleador.
10. Domina las nuevas tecnologías
La programación es un campo asombroso, pero cambia todo el tiempo. Lo que ha aprendido hoy quedará obsoleto en un año. Y obsoleto en 5. Cuando encuentre un trabajo y se sienta cómodo con él, domine algo nuevo. Amplíe sus habilidades. No te quedes quieto con tu desarrollo profesional. Si abandona los estudios, tal vez valga la pena volver. Asiste a un bootcamp, lee un libro, participa en un curso en línea. Lo que sea que te permita estar al día con las tecnologías.
Actualización: si quieres memorizar métodos de programación busca el proyecto Summon The JSON. Actualmente hay una plataforma para programadores de JavaScript. Puede obtener más información aquí: Invocar JSON: JS Deck
Es todo lo que necesita aprender para comenzar a programar desde cero. Este fue un artículo muy largo, y estoy realmente sorprendido de que hayas llegado al final. Estoy seguro de que el 99\% de la gente no lo hizo. Parece que le interesa convertirse en desarrollador de software. Cuidar es el 99\% del éxito. Te deseo toda la suerte. La programación es fantástica y da mucha satisfacción profesional. No pierdas el corazón por eso. Seguir. Paso a paso.
El inglés no es mi lengua materna. Si encuentra algún error en la respuesta, corríjalo. Serás mencionado en la respuesta. ¡Gracias!
Respuesta
Un buen comienzo es descubrir cómo amar la programación. Para citar a un nuevo programador a quien estaba ayudando:
GASP, FUNCIONÓ, FUNCIONÓ, FUNCIONÓ, ¿CÓMO SE ENFRIÓ DE ESTE SENTIMIENTO? un objeto en su juego para cambiar de color y su color acababa de cambiar.
Escribir código es como pronunciar palabras mágicas que realmente hacen algo . Es atractivo y quizás un poco adictivo.También es difícil; encontrar estos pequeños momentos de motivación es muy útil para los momentos en los que necesitas aprender algo difícil; el recuerdo de lo que es posible puede ayudarte a superar lo aburrido.
Aún así, si va a llegar allí, necesita tener algunas experiencias divertidas y creativas con la programación. Aquí hay algunas ideas:
- Toma el editor de niveles de StarCraft (1 o 2) y descubre cómo usar los activadores. He pasado muchas horas felices pirateando mapas de StarCraft, y puedes escribir algunos juegos increíblemente involucrados dentro del juego usándolo.
- Descubre todas las mecánicas de Redstone en MineCraft y construye un máquina ridícula. Hacer mods que agregan nuevas funciones a MineCraft también es popular, pero aprende algunos conceptos básicos antes de probarlo; sus tutoriales ( Basic Modding – Minecraft Forge ) son mucho más fáciles de entender si ya conoces algo de Java.
- Descubre cómo construir algo asombroso en Factorio (advertencia: el video a continuación es ridículo; no esperes hacer esto de inmediato). Factorio también tiene una API de modificación bastante completa compatible con el desarrollador ( Tutorial de modificación ), aunque es posible que desee aprender algunos conceptos básicos antes de intentarlo.
- Descargue Scratch y cree algunos juegos sencillos con él (ese artículo también menciona varios otros lenguajes de programación educativos en la parte inferior). Scratch trata la programación como piezas de rompecabezas que encajan entre sí para desarrollar comportamientos, y es lo suficientemente simple como para que los niños más pequeños puedan crear programas de trabajo con poco esfuerzo. Es como programar con ruedas de entrenamiento.
Crédito de la imagen: por Lifelong Kindergarten Group en el MIT Media Lab.
- Encuentra uno de esos libros «aprende X en 21 días» y ponte manos a la obra. No es ni llamativo ni minucioso, pero puede darte una base suficiente para que algunas de estas otras ideas sean posibles.
- Toma una clase. Está bien, abucheo, pero descubrí que la presión de obtener una calificación me empujó a trabajar en los conceptos difíciles. Solo recomiendo esto si ya está seguro de que quiere aprender a programar; las clases son excelentes para introducir información en su cerebro, pero son bastante malos para motivarte. La mejor parte de tomar una clase es que te enseñarán cosas que nunca hubieras imaginado que existían; no puede autoaprender un concepto que no sabe que existe.
- ¿Le gustaría que sus programas afectaran el mundo real? Considere hacer algunos proyectos usando un microcontrolador, algo como esto: Los 10 mejores proyectos de Arduino de Kickass . Si el Arduino es demasiado intimidante, es posible que desee probar LEGO Mindstorms primero.
¿Sistema de seguridad? ¿Robots? ¿Estúpidas luces navideñas impresionantes? Este es tu dispositivo. Imagen de Arduino .
- Game Maker ( Yoyo Games ) es un entorno de desarrollo bastante bueno para videojuegos simples; es más avanzado que Scratch y más profundo que los editores de activación del editor de mapas de StarCraft. Es posible hacer una variedad de videojuegos 2d con él, y es posible hacer algo lo suficientemente bueno para venderse comercialmente.
- Si desea pasar a 3d, Unity ( Unity – Game Engine ) es un motor de juegos 3D de calidad decente. Necesitarás un poco más de habilidad en programación que Game Maker, y necesitarás alguna forma de crear activos, pero es lo suficientemente potente como para crear juegos de gama alta.
- Tu computadora de escritorio o portátil ya incluye un entorno de desarrollo medio decente: su navegador web. Si crea una página web en su propio disco duro, puede abrirla con su navegador web. Si esa página web contiene JavaScript, el navegador la ejecutará. Puede empezar a aprender sin necesidad de descargar o instalar cualquier otra cosa. Tutorial del juego HTML5: haz un juego de serpientes usando HTML5 Canvas y Jquery es un tutorial divertido sobre cómo hacer un juego básico.
- Aprende a jugar al Rompecabezas en línea de RoboZZle . De todos los juegos de programación que he jugado, este es posiblemente el más profundo. La mayoría de los juegos te enseñarán mucho sobre variables y objetos, pero este te enseñará a pensar profundamente sobre la recursividad. El cálculo de Lambda debería resultarle vagamente familiar si ha superado algunos acertijos de Robozzle de medio a difícil.
- Descargue la versión comunitaria de Visual Studio . Esta es una herramienta de nivel profesional, y es complicado hacer que su primer programa se ejecute. Sin embargo, una vez que la conozca lo suficientemente bien, puede hacer cualquier cosa.Si está en una Mac, el equivalente es XCode .
Con suerte, algunas de esas ideas le ayudarán a moverse. Eventualmente, si quieres ser bueno en eso, necesitarás descifrar los libros de texto y estudiar un poco, pero creo que funciona mejor si encuentras tu por qué primero.