¿Qué necesito saber para ser programador?

Si se ha inscrito en el curso Javascript, supongo que desarrollará más aplicaciones web o sitios web. Aquí hay algunas preguntas en orden cronológico que pueden darle una estructura para proceder de una manera más organizada (se puede seguir un patrón similar para cualquier dominio de aplicación).

  1. ¿Entiendes la aplicación que vas a construir? No pienses como un programador o un técnico por un tiempo. Como cualquier usuario, ¿sabes qué hacen los sitios web? ¿Cuáles son las diferentes cosas que los sitios web pueden hacer? Lo más probable es que lo hagas. Bien, estás en camino de ser un programador.
  2. ¿Entiendes la aplicación a nivel macro? Ahora estamos entrando un poco en tecnicismos. No, no necesita conocer los detalles, pero debe comprender la arquitectura básica. Por ejemplo, en el caso de un sitio web,
    a. La página que ve en este momento es solo un marcado: HTML. Para verificar, haga clic derecho en cualquier espacio vacío y seleccione “Ver código fuente”.
    si. Hay CSS, que hace que tu página sea hermosa.
    C. Hay un lenguaje de programación que maneja toda la lógica (bueno, casi). Principalmente también es responsable de dar la forma final al marcado que se muestra en la pantalla.
    re. Luego hay un servidor en el que se ejecuta el lenguaje de programación.
    Habría más campanas y silbatos, pero el anuncio cubre los conceptos básicos de casi cualquier sitio web.
  3. ¿Entiendes cómo los diferentes componentes interactúan entre sí? El punto 2 destaca los diferentes componentes necesarios para ejecutar el sitio web, pero ¿cómo interactúan? ¿Cómo sabe CSS qué página embellecer, cómo sabe el programa cuándo ejecutar una lógica y cuál, qué sucede si un servidor no está allí, cómo sabe el navegador qué página cargar, cómo asigna el URL a la marca?
    Es posible que no necesite conocer los detalles, pero alguna idea es buena para comenzar. Las cosas seguirán aclarándose con el tiempo.
  4. ¿Entiende dónde encaja su componente (en este caso, Javascript)? ¿Se ejecuta en el servidor o en la interfaz o en ambos? Por cierto, ¿qué es frontend y backend?
  5. ¿Por qué la gente usa este componente (Javascript)? ¿Cuáles son los casos de uso más comunes? ¿Tiene algún competidor? En caso afirmativo, ¿por qué se prefiere sobre ellos? ¿Qué dice la gente en sus críticas?
  6. ¿Cuáles son los componentes dependientes que puede necesitar aprender? ¿Necesitas aprender algún marcado para aprender JS? ¿Necesitará configurar un servidor? ¿Se puede crear una aplicación en JS puro sin usar ningún otro componente?

Las respuestas a estas preguntas se pueden buscar fácilmente en Google. No debería tomar más de un día para comprender decentemente estos conceptos.

Una vez que haya terminado con estos, el siguiente paso es comenzar a codificar. Aquí hay algunos consejos:

  1. Empieza pequeño. Cree programas fáciles que no tengan un uso práctico. ¡Imprimir ‘Hello world’ es de facto!
  2. Comprender conceptos básicos como bucles, condicionales, variables, operadores, objetos de funciones y matrices.
  3. Si no comprende un concepto y está completamente en blanco, no se preocupe. Hay demasiado tiempo para aprender. A veces las personas se desmotivan porque ni siquiera pueden comprender un concepto y mucho menos aplicarlo. No permitas que suceda. Recuerde, si conoce los conceptos básicos en el consejo 2, puede crear el 90% de las aplicaciones. Es un buen número para practicar y seguir adelante.
  4. Como una forma más fresca, enfóquese en hacer que las cosas funcionen que en hacerlas funcionar de la manera correcta. Ver su programa funcionando le da más motivación para improvisar de lo que puede imaginar.

Lo más importante ahora. Imagine una aplicación en su mente que le gustaría construir (sin tener en cuenta sus habilidades de programación). Documente y comience a trabajar para lograrlo. Te hará investigar, probar, fracasar, tener éxito y realizar más experimentos de los que harías mientras estudias tu curso. Créeme, una vez que completes esta aplicación, la sensación de logro sería tan grande que surgirán de la nada más pasos para ser un programador 🙂

Gracias por el A2A.

Estoy de acuerdo con la respuesta de Jacob Beasley, aunque creo que es un poco más clarividente de lo que necesitas al comenzar. Una cosa importante a tener en cuenta al comenzar es que los lenguajes de programación son fundamentales y sin importancia . Esto parece una paradoja, lo sé, pero tengan paciencia conmigo.

Los lenguajes de programación son fundamentales porque no puedes crear programas sin ellos. Cada idioma tiene sus propias reglas y peculiaridades, y estudiarlas en profundidad puede ser realmente fascinante. Algunos idiomas se adaptan mejor a algunos tipos de programas, y a medida que estudies más idiomas tendrás una idea de cuáles funcionan para ti en qué situaciones.

La razón por la que los lenguajes no son importantes es que lo que usted como programador está haciendo es construir máquinas virtuales . No me refiero a esto en el sentido del servidor de la máquina virtual, sino en el sentido más general. Cuando escribe un programa, está describiendo una máquina. Esa máquina necesita tomar entrada, hacer algo interesante o útil con ella y producir salida. Eventualmente, tomará muchas de estas máquinas y las conectará entre sí. El lenguaje que utiliza para describir estas máquinas virtuales es (en su mayoría) irrelevante respecto de qué tan bien hace su máquina su trabajo.

Si aprende a imaginar estas máquinas y luego las implementa utilizando el lenguaje de su elección, será un mejor programador que alguien que solo tiene una buena comprensión de cómo funciona el lenguaje. Aunque a medida que mejore en la parte de construcción de máquinas, su aptitud con los idiomas mejorará sin duda.

Te sugiero que modifiques tus objetivos eliminando la parte sobre aprender todo en freeCodeCamp y agregando “familiarízate con los patrones de diseño de software”. Los patrones de diseño son descripciones de estructuras e interrelaciones comunes que se encuentran en el software. El tema es tratado más famoso en el libro “Gang of Four”: Patrones de diseño – Wikipedia. Hay muchos otros libros y recursos más recientes que los discuten en detalle, algunos con muestras de idiomas particulares.

Junto con esto, querrá estudiar algoritmos y estructuras de datos, pero históricamente han recibido mucha más atención, por lo que es posible que ya lo sepa.

Otra lección que creo que vale la pena aprender es esta: no te involucres emocionalmente en tu código. Esto puede ser realmente difícil, porque después de pasar días y semanas describiendo meticulosamente una máquina en la que está trabajando, es natural desarrollar algún tipo de vínculo emocional con ella. La emoción puede ser amor o repulsión dependiendo de cómo vaya el proyecto, pero seguramente sentirás un sentido de propiedad o responsabilidad por el código. Puede estar justificadamente orgulloso de su trabajo. Pero estas son solo partes de la máquina, y a veces cambiamos drásticamente la estructura de las máquinas a medida que se construyen. Esto significa que una buena parte del código en el que derrocha su tiempo y atención nunca se acostumbrará. Entérate de esto y prepárate para volver a trabajar o descartar parte de tu trabajo.

Mientras hace esto, mire los listados de trabajo que le parezcan interesantes y verifique los requisitos de idioma. Eso debería decirle en qué idiomas es importante concentrarse. Comenzar con c es una buena idea, ya que muchos lenguajes comparten la estructura fundamental de c. Creo que el valor principal de aprender c ++ es la introducción de técnicas orientadas a objetos, pero personalmente recomiendo Python para eso. Es lo suficientemente diferente de c como para ser interesante y desestima la administración de memoria, lo cual es bastante agradable.

¡La mejor de las suertes para ti!

Lo más importante que debe saber es esto: todo lo que hacemos es crear valor para el negocio y, en última instancia, para sus clientes . Este valor puede consistir en hacer que las cosas sean más eficientes, más confiables o más agradables para los clientes de alguien. La conclusión es que todo lo que hacemos mejora la sociedad de una forma u otra.

Todas las decisiones tecnológicas que tome deben alinearse con este objetivo ; es decir, todo es algo circunstancial. No programa satélites de la misma manera que programa sitios web, y no programa para startups de la misma manera que programa para grandes empresas. Cada uno es su propio dominio con sus propios objetivos comerciales, y las herramientas y prácticas que utiliza cambiarán.

Recuerda esto, y nunca te quedarás sin trabajo. Es muy difícil encontrar programadores que estén dispuestos a humillarse, aprender el dominio del negocio y tomar decisiones que sean lo mejor para el negocio y no solo el último objeto brillante en el campo de la tecnología.

Además, si hace esto, encontrará que el trabajo será mucho más gratificante. Siempre es más divertido crear valor para otros en lugar de solo programar sistemas de software.

Esto es lo que he encontrado en la Guía técnica de Google. Lo encontré muy relevante:

Tome un curso de “Introducción a CS”

Centrarse en las instrucciones básicas de codificación

Recursos en línea:

  • Udacity – Introducción a la informática
  • Coursera – Informática 101

Codifique (al menos) UN lenguaje de programación orientado a objetos (C ++, Java®, Python®)

Recursos en línea para principiantes:

  • Coursera – Aprender a programar: los fundamentos
  • Introducción del MIT a la programación en Java
  • Clase Python de Google
  • Coursera – Introducción a Python, Python Open Source E-Book

Recursos en línea intermedios:

  • Diseño de programas informáticos de Udacity
  • Coursera – Learn to Program: Crafting Quality Code, Coursera – Lenguajes de programación
  • Brown University – Introducción al lenguaje de programación

Aprende otros lenguajes de programación

Añadir a su repertorio:

  • JavaScript®
  • CSS y HTML
  • Ruby®
  • PHP®
  • Perl®
  • Script de Shell®
  • Lisp®
  • Scheme®

Recursos en línea:

  • Codecademy
  • Udacity – Desarrollo web móvil
  • Udacity – Desarrollo de juegos HTML5

Prueba tu código

Aprenda a detectar errores, crear pruebas y romper su software

Recursos en línea:

  • Udacity – Métodos de prueba de software
  • Udacity – Depuración de software

Desarrollar razonamiento lógico y conocimiento de matemáticas discretas.

Recursos en línea:

  • MIT Matemáticas para Informática
  • Coursera – Introducción a la lógica
  • Coursera – Optimización lineal y discreta
  • Coursera – Modelos gráficos probabilísticos
  • Coursera – Teoría del juego

Desarrollar una sólida comprensión de algoritmos y estructuras de datos.

Aprenda sobre los tipos de datos fundamentales (pila, colas y bolsas), algoritmos de clasificación (clasificación rápida, combinación, clasificación), estructuras de datos (árboles de búsqueda binarios, árboles rojo-negros, tablas hash) y Big O.

Recursos en línea:

  • Introducción a los algoritmos del MIT
  • Coursera – Introducción a los algoritmos Parte 1 y Parte 2
  • Coursera – Lista de algoritmos
  • Coursera – Lista de estructuras de datos
  • Coursera – Libro: El manual de diseño de algoritmos

Desarrollar un sólido conocimiento de los sistemas operativos.

Recursos en línea:

Aprende diseño UX

Recursos en línea:

Udacity – Diseño UX para desarrolladores móviles

Aprende inteligencia artificial

Recursos en línea:

  • Universidad de Stanford – Introducción a la robótica
  • Universidad de Stanford – Procesamiento del lenguaje natural
  • Universidad de Stanford – Aprendizaje automático

Aprende a construir compiladores

Recursos en línea:

Coursera – Compiladores

Aprende criptografía

Recursos en línea:

  • Coursera – Criptografía
  • Udacity – Criptografía Aplicada

Aprende programación paralela

Recursos en línea:

Coursera – Programación paralela heterogénea

Trabajar en proyectos fuera del aula.

Cree y mantenga un sitio web, cree su propio servidor o cree un robot

Recursos en línea:

  • Lista de proyectos de Apache
  • Google Summer of Code
  • Grupo de desarrolladores de Google

Trabaje en una pequeña parte de un sistema grande (base de código), lea y comprenda el código existente, rastree la documentación y depure

GitHub es una excelente manera de leer el código de otras personas o contribuir a un proyecto

Recursos en línea:

  • GitHub®
  • Kiln ™

Trabaja en proyectos con otros programadores.

Esto lo ayudará a mejorar su capacidad de trabajar bien en equipo y le permitirá aprender de los demás.

Practica tus conocimientos algorítmicos y habilidades de codificación

Practique su conocimiento algorítmico a través de competencias de codificación como CodeJam o el Concurso Internacional de Programación Colegiada de ACM.

Recursos en línea:

  • CodeJam
  • ACM ICPC

Fuente : Estudiantes – Guía de desarrollo técnico – Carreras de Google

No, esos objetivos no son buenos. Esta es una crítica constructiva, no la tomes ofensivamente.

No te hagas experto en C. Eso no tiene sentido. ¿Estás tratando de convertirte en diseñador de idiomas? Todavía no tiene sentido.

Conviértase en un experto en escribir software en C. Este es un objetivo enormemente diferente. Ya estás perdiendo el tiempo pensando en esto y publicando en quora. Convertirse en programador es un proceso largo con muchos altibajos, izquierdas y vueltas.

Te prometo que no te quedarás con él si solo estudias esas materias de un libro de texto o tutoriales en línea. No hay satisfacción en eso. Incluso si encuentra satisfacción en resolver problemas que todos saben cómo resolver, eso no es lo que hacen los programadores.

Si hay un ejemplo en cualquier lugar de Internet que hace lo que necesitamos, lo copiamos / pegamos y seguimos adelante. Si ya se ha resuelto, no lo resolvemos nuevamente.

¿Por qué quieres aprender programación en C? ¿Qué desea hacer? No se Entonces, ¿por qué elegiste C? Yo no elegiría C. Muchos lo harían. No importa Solo decide lo que quieres hacer.

No tendrás éxito a menos que abandones la frase “voy a estudiar todo el día todos los días a partir de ahora, ¡aunque nunca lo hice antes!” Actitud. Reemplázalo con la actitud “eh, me pregunto qué hace”. Juega con las cosas. cosas sin razón, conviértete en un nerd.

Si no lo haces, no sobrevivirás el tiempo suficiente para lograr 1 de tus objetivos. El único de sus objetivos que se puede lograr en menos de una década es freecodecamp y eso suena como una tarea tan jodida en menos de una década de todos modos.

Debe saber que hay un Google que puede encontrar casi todo, si solo hace las preguntas correctas. Respuestas, ejemplos, libros, tutoriales (con tabla de contenidos para entender la idea, qué se puede hacer).

Busca en Google los términos que no entiendes hasta que tengas la idea. Como ” javascript dom” o similar.
Google para obtener más tutoriales de Javascript para comprender algo que no está del todo claro.
Demostraciones y bibliotecas de Google for Javascript para crear cosas geniales que no podrás hacer por ti mismo.

Me pagan para usar Google, hasta que pueda entender y poder implementar las cosas requeridas. Eso se llama programación: no solo te sientas en el desierto y inventas cosas de la nada. En cambio, aprende de las cosas que otras personas han hecho y puesto en Internet antes que usted. El aprendizaje lleva años, pero existe la prisa que sigue avanzando. Es “guau, hice esto, ¡funciona!”.

Desde una perspectiva más amplia: Javascript es solo una herramienta que hace que los objetos de las páginas web sean animados / puedan leer lo que el usuario elija instantáneamente.
Las páginas web están hechas en HTML y formateadas (coloreadas / con estilo) con CSS .
Las páginas web pueden ir un paso más allá y agregar comentarios / almacenar comentarios / limitar el acceso, hacer una búsqueda, todo eso utilizando una programación del lado del servidor (como aquí en Quora). Eso se hace a través de PHP / Python / Ruby u otro lenguaje del lado del servidor.

Y hay otro dominio: aplicaciones de escritorio, un mundo diferente. Como una MS Word o Photoshop.

Y también hay aplicaciones que se ejecutan en teléfonos inteligentes. Tú eliges, qué aprender.

Estoy de acuerdo con muchas de las otras respuestas aquí; estás enfocado en lo incorrecto. La programación es aprender a ser competente en C como arreglar autos es aprender a ser competente con una llave inglesa. Los idiomas son las herramientas que utilizamos, no son los objetivos.

En cambio, el conocimiento que necesita saber es cómo se hacen las cosas. Lo que es posible y lo que no es posible. La programación se trata de resolver problemas. Si fuera a aprender cómo reparar un automóvil, podría comenzar con “qué es un destornillador; qué es una llave inglesa “, pero el verdadero conocimiento proviene de comprender cómo se ensamblan los automóviles en general (y se pueden desmontar). Por ejemplo, qué significa cuando el automóvil emite ese sonido particular de chisporroteo, cómo se determina qué parte está haciendo el sonido, cómo se da cuenta de qué partes no están involucradas en hacer el sonido y cuál es la más rápida manera de arreglarlo para que permanezca fijo.

Esto es lo que hago día tras día. Obtengo objetivos que provienen de nuestros clientes (directa o indirectamente): “Necesito su software para resolver este problema” o “Cada vez que hago * esto * obtengo un error que no tiene sentido” o “¿Cómo podemos resolverlo? este problema sin que cueste tanto dinero cada trimestre ”o mil preguntas más. Abordo cada problema identificando lo que “realmente” necesitaba, qué herramienta utilizar para resolver el problema y luego obteniendo comentarios sobre qué tan bien o no funcionó. Gran parte del conocimiento que uso no estaba en los libros o en la escuela, es algo que aprendí escuchando miles de motores haciendo * este * ruido o aquel ™ y recordando lo que lo causó y lo que no.

Las mejores escuelas no te enseñan un idioma, te enseñan cómo aprender, cómo investigar, cómo comunicarte, cómo no perder el tiempo, cómo identificar callejones sin salida. Las peores escuelas te enseñan un idioma, te llaman desarrollador y te arrojan a los lobos.

En mi carrera, aprendí unas pocas docenas de idiomas, utilicé más bibliotecas y marcos de los que puedo contar, y ninguno de los idiomas / marcos que aprendí en mis primeros cinco años de programación está siendo muy utilizado ahora (y ciertamente no por mí) . Algunos de los idiomas que uso a diario ni siquiera existían cuando estaba llegando. He aprendido dos nuevos idiomas en los últimos tres años.

Cuando se trata de hacer que el software sea una carrera, tendrá que enfrentarse al hecho de que nunca dejará de aprender cosas nuevas (o si lo hace, es mejor asegurarse de que su plan de jubilación sea seguro). Diga “sí” a los nuevos desafíos, en lugar de “no, no sé cómo hacerlo”. Suponga que puede, fuerce los desafíos para mostrarle que no puede, saber cuándo y estar dispuesto a preguntar para ayuda, y aprende de cada fracaso!

Si realmente quieres hacerlo. Elija un libro, comience a seguir los tutoriales web, descargue un entorno de desarrollo móvil, lo que le apetezca. Si en tu corazón realmente quieres ser un programador, rápidamente te obsesionarás por dominar la habilidad. Si no desarrolla esa compulsión interna, no intente forzarla.