¿Cuánto tiempo tomaría antes de que pudiera comenzar a construir aplicaciones web complejas?

Tienes razón, es subjetivo. Y no en el corto plazo.

Si no has dominado tu idioma principal, es obvio que estás lejos de estar listo. Pasé aproximadamente una década dominando PHP (sí, espero algunos ceños fruncidos) antes de mudarme a Ruby. Ya has comenzado a considerar a Ruby y Python. Puedo entender tu ambición de ser un mejor desarrollador, pero ¿crees que asumir demasiado te ayudará a largo plazo?

Quizás Ruby on Rails (marco web) sea lo mejor para ti. Es un marco basado en Ruby (lenguaje de programación), genera el código básico para que usted pueda construir ciertas características ‘geniales’ y tiene una gran cantidad de complementos para admitir muchas características comunes (es decir, sistema de usuario, diseño básico).

PD: un indicador amigable: no diría lo que estás describiendo como complejo, sino más bien como un sitio web funcional .

En nuestro programa BSc, cuando se especialice en desarrollo web, podrá crear una “aplicación compleja” con backend, frontend, login, base de datos (evitando riesgos de seguridad como inyección SQL o XSS) para el final del primer año.

Por supuesto, hay muchas otras cosas que aprender en un programa de grado, por lo que, por un lado, podría ser más rápido que mis estudiantes porque puede centrarse en los aspectos muy prácticos del desarrollo web.

Por otro lado, no tienes ayuda cuando te quedas atrapado en un problema simple y será difícil aprender algunas de las cosas avanzadas que requieren trabajo en equipo.

Vea también ¿Cuánto tiempo tomaría aprender Ruby on Rails? Si tuviera que pasar 20 horas a la semana con un libro como railstutorial.org, ¿cuánto tiempo me llevaría llegar al punto en que pudiera obtener un trabajo de nivel de entrada o una pasantía remunerada como desarrollador?

Depende de muchas cosas. Yo diría que podrías lograr una implementación básica en 6 meses, buscando técnicas de Google para cada problema a medida que los abordes. Evite técnicas complejas para iniciar sesión, etc., y en su lugar mantenga una tabla de base de datos simple.

Por supuesto, aunque podría lograr una implementación perfectamente funcional, no será lo suficientemente sofisticada para la implementación pública. Los problemas estarán relacionados con la seguridad y la eficiencia, y con la experiencia también mejorará la elegancia y probablemente la reutilización. Piense en este primer borrador como un ejercicio de capacitación para definir un proyecto de este tipo y aprender formas simplistas de lograr las cosas. Muy poco de eso llegará a su primer sitio web público.

El primer problema será tu SQL. Probablemente primero aprenderá a ejecutar las instrucciones Seleccionar, Actualizar y Eliminar individualmente. No puede hacer esto en un sitio web comercial, debido a los ataques de inyección SQL. Aquí es donde un pirata informático inyecta SQL en las partes variables de una declaración SQL que construye en la aplicación web, para hacer cosas no intencionadas. Por ejemplo, “Seleccione el nombre de Usuarios donde nombre de usuario = ‘Fred’ y contraseña = ‘secreto’; seleccione nombre de usuario + ‘:’ + contraseña de usuarios;”, para enumerar todos los nombres de usuarios y contraseñas incluyendo SQL en el campo de contraseña en la página de inicio de sesión.

Puede pensar que puede anticipar todos los ataques posibles y limpiar sus entradas antes de construir su SQL. No puedes En su lugar, debe escribir procedimientos almacenados en SQL y configurar derechos de acceso específicos para ejecutar los procedimientos almacenados desde la aplicación web, y denegar a su usuario SQL de la aplicación web todos los demás derechos para que no pueda ejecutar la selección, actualización y eliminación al azar, deje solo crear usuario u otros comandos. Por lo tanto, necesitará aprender más sobre SQL que solo los conceptos básicos. Es difícil estar seguro con solo algunos consejos de mí o Google, por lo que deberá comprender el modelo de seguridad de su base de datos. En general, cualquier tarea que manipule una gran cantidad de datos será más eficiente como un procedimiento de almacenamiento de todos modos, por lo que es una práctica general de sangre.

Del mismo modo, si la seguridad es importante, probablemente no debería enviar las contraseñas de sus usuarios desde su navegador a su aplicación web, sin cifrar, y docenas de computadoras intermedias pueden verlo, y puede aparecer en los registros web. El método común (aunque lejos de ser totalmente seguro) es codificar la contraseña en un hash MD5 con sal agregada (una codificación adicional exclusiva de su sitio), antes de enviarla. Podrías Google esto, pero definitivamente es una complejidad extra.

De manera similar, probablemente también debería cifrar las contraseñas y otros datos confidenciales en la base de datos.

Si permite que el contenido de un usuario se almacene y luego se vuelva a mostrar (como su nombre de usuario), debe verificar si hay HTML incrustado o secuencias de comandos que puedan interferir con la visualización de su sitio web en un navegador (eG “<\ div>“), o ejecuta scripts maliciosos e infecta la PC de tus usuarios. Probablemente su mejor opción es escapar de “<" y ">“, pero realmente necesita saber lo que está haciendo para evitar que Google lo incluya en la lista negra, sin mencionar que se convirtió en un sitio de ataque sin su consentimiento.

A estas alturas, probablemente se habrá dado cuenta de que podría implementar partes de su aplicación web de manera más eficiente, por ejemplo, probablemente todo el contenido generado por el usuario debería pasar por una rutina de filtro común.

Estos puntos son los más obvios que vienen a la mente, el hecho es que, a medida que gane más experiencia, aprenderá y creará mejores aplicaciones web. Este proceso continuará sucediendo durante décadas, y solo comenzará una vez que comience a construir tales aplicaciones web, así que no tenga miedo de comenzar, pero tenga en cuenta que la implementación de una aplicación web es una empresa arriesgada y será atacada por terceros que quieran para usarlo como una forma de destrozar sus datos e infectar a sus usuarios, por lo que debe planificar esto y tomar medidas contrarias. Y esto requiere experiencia; mientras más, mejor.

Después de algunos años de experiencia, debería tener la mayoría de las técnicas en el camino, pero siempre hay algo nuevo que aprender. Para empezar, es posible que desee agregar la integración de redes sociales …

Y realice copias de seguridad periódicas y mantenga varias generaciones en caso de que la última ya esté dañada. Incluso los desarrolladores experimentados quedan atrapados.

Muy bien, supongamos que aprende rápido.
Lo más importante que debe comprender, antes de aprender cualquiera de esas habilidades individuales, es el panorama general:
Cómo funciona una aplicación web, dónde reside, cómo se comunica el usuario con su aplicación, la diferencia entre el cliente y el servidor, cómo interactúan, dónde vive el código, etc.

Si tuviera que definir un orden en el que se debería aprender cada habilidad, sería:

1) HTML y CSS:
Van juntas y deben considerarse como una habilidad única. Estas son las habilidades más básicas que necesita saber para poner un sitio web simple (dije “sitio”, no aplicación) en la web.
HTML define cada elemento en su página (texto, párrafos, botones, formularios, etc.) mientras que CSS define la apariencia de cada elemento y su lugar dentro de una página.
Con un conocimiento básico de HTML + CSS, puede crear un sitio web estático bastante complejo (un sitio estático es aquel que no interactúa con el usuario. Simplemente muestra texto e imágenes).

2) Una vez que sepa cómo construir un sitio estático básico, debe aprender cómo agregar algo de interactividad. Por ejemplo, cómo crear un efecto de desplazamiento sobre un botón, una imagen o un enlace. Esto se hace con javascript, que es el único idioma admitido por todos los navegadores web.
Tenga en cuenta que hoy en día, es posible crear una aplicación web compleja completa utilizando solo JavaScript, pero hablaremos de ello más adelante. Describamos cómo se crearon las aplicaciones web hasta hace 5 o 6 años …

Javascript solía ser un pequeño lenguaje, solo compatible con navegadores web, destinado a ser utilizado para agregar interactividad simple a elementos html (efectos de desplazamiento y validación de formularios, por ejemplo).
Cualquier otra tarea compleja, se codificó en otros idiomas (como java, php, c, c ++, perl, python, etc.). Como ninguno de estos idiomas era compatible con los navegadores, las aplicaciones fueron ejecutadas por los servidores.
Un servidor, es la máquina donde se aloja su sitio. Contiene todos los archivos de su sitio web / aplicación que se envían al cliente (el navegador web de los usuarios cuando se accede a su URL).

Cuando codifica una aplicación en un idioma del lado del servidor, este idioma actúa como un “preprocesador”. Eso significa que la aplicación realiza un proceso o cálculo bajo demanda, formatea el resultado en html adecuado y envía la salida al navegador a través de Internet.
Eso tenía la ventaja de que podía usar cualquier idioma imaginable que quisiera, ya que puede configurar su servidor a voluntad. Al final, la salida es siempre un código HTML que puede ser interpretado por cualquier navegador.

La desventaja de este enfoque es que cada pequeña solicitud debe transmitirse a través del cable del navegador al servidor, y la salida de nuevo del servidor al navegador. Esto lleva tiempo y consume mucho mal.

En los últimos años, Javascript creció. Solía ​​ser un perro lento, pero ahora es un lenguaje bastante rápido y eficiente. Así que ahora es más conveniente codificar toda la lógica de su aplicación en javascript. Javascript es interpretado por el navegador en lugar del servidor.
Eso significa que todo el proceso se realiza directamente en la computadora del usuario, como si fuera una aplicación de escritorio (como Word o Excel).
Esto hace que las aplicaciones sean más rápidas, más receptivas y se comporten de manera similar a las aplicaciones de escritorio tradicionales instaladas en su computadora.
Para ver un ejemplo, solo use Gmail para ver a qué me refiero. Hace unos años, todos usaban aplicaciones como Outlook para administrar sus correos electrónicos, mientras que ahora la forma más común es a través de Gmail u otras aplicaciones basadas en la web.

Entonces, por las razones anteriores, diría que la segunda habilidad que debes aprender es Javascript.

3) Conocer HTML, CSS y JAVASCRIPT por sí solo no es suficiente para crear una aplicación, ya que casi el 99% de ellos necesitan administrar la información extraída de algún tipo de fuente de datos (esto podría ser una base de datos relacional o un almacén de datos NoSQL).
Las bases de datos relacionales son las tradicionales, las bases de datos más comunes, y todas usan un poco de lenguaje para administrar sus consultas: SQL.
Entonces, si desea escribir un motor de blog, por ejemplo, tendrá que almacenar miles de publicaciones, así como los perfiles de sus usuarios y la información de inicio de sesión.
También deberá tener todas estas publicaciones disponibles para cualquier persona que visite estos blogs.

Entonces, la base de datos es el lugar donde almacena toda esta información.
Su aplicación (que podría codificarse en javascript, ruby, python, etc.) tendrá que interactuar con su base de datos para extraer información y luego procesarla antes de enviarla a la pantalla del navegador. SQL es el pequeño lenguaje que realiza estas consultas.

4) Como dije, puedes crear una aplicación web completa con solo conocer un lenguaje de programación: javascript. Javascript ahora se puede usar en el lado del servidor gracias a Node, un proyecto que aprovecha el motor V8 js (creado por google) y lo transfirió al lado del servidor.

Sin embargo, hay miles de buenos lenguajes que son más “para todo uso” (no solo para la web), más maduros y, en muchos sentidos, más potentes y expresivos que javascript.
Además, siempre debe saber cómo codificar en el lado del servidor, ya que hay muchas situaciones en las que este es el mejor enfoque (por ejemplo, si desea mantener la seguridad total para aplicaciones críticas, como la bancaria).

Por lo tanto, recomiendo aprender al menos un lenguaje de programación de propósito general. Le servirá bien para otras tareas no relacionadas con la programación web.

Mi favorito personal es Python. Altamente legible, fácil de escribir y mantener, potente, sucinto y muy divertido.
Otro lenguaje con características similares es Ruby. Ambos compiten en el mismo nicho (pequeños lenguajes divertidos y potentes).

Los últimos 2 comentarios:
a) Hay otro lenguaje que está de moda entre los desarrolladores, que es Coffeescript.
Es un lenguaje que se compila en Javascript (por lo que se ejecuta en todos los navegadores), y que toma muchas ideas de Python y Ruby, lo que lo hace tan divertido como estos lenguajes. Lo recomiendo si quieres divertirte mientras desarrollas.

3) Ya mencionaste jQuery. jQuery no es un lenguaje, es una biblioteca javascript creada para que trabajar con javascript sea mucho más fácil, rápido y divertido. ¡Es obligatorio! Pero primero, debes saber javascript, ya que es un complemento de este lenguaje.

Ahora volvamos a su pregunta: ¿Cuánto tiempo llevaría aprenderlo todo?

¡Depende de ti amigo!
Solo puedo intentar predecir cuánto tiempo tomaría crear una aplicación SIMPLE, pero completamente funcional y completa.

Algunas habilidades son transferibles. Por ejemplo, una vez que conoce un lenguaje de programación, aprender un segundo es relativamente fácil, ya que la programación generalmente se basa en los mismos principios, solo que con una sintaxis diferente.

HTML y CSS se pueden aprender en una semana, o incluso menos. No tienen ninguna dificultad, solo necesitas tomar un tutorial y seguir los ejercicios.

Aprender javascript significa aprender el arte de la programación. Para un principiante completo, es difícil de decir. Diría que puede aprender lo suficiente para escribir aplicaciones simples en un mes o dos, siempre que aprenda rápido y disfrute de la experiencia.

HTML + CSS + un conocimiento básico de JAVASCRIPT + una base de datos simple (como SQLite) son las habilidades básicas que necesita saber para crear una aplicación web totalmente funcional.
Para un estudiante inteligente y rápido como usted, yo diría que 3 a 4 meses.

Si ya aprendió HTML + CSS + JAVASCRIPT, no veo ninguna razón para creer que tendrá algún problema para aprender lo que queda, así como la gran cantidad de herramientas, editores, marcos y bibliotecas que utilizará en sus desarrollos.

La mayoría de estas herramientas se crean para facilitarle la vida y no son obligatorias (por ejemplo, jQuery). Pero pronto se dará cuenta de que necesita estas herramientas para evitar reinventar la rueda una y otra vez.

¡Buena suerte!
Luis

En realidad, a menudo me lo pregunto. Actualmente estoy aprendiendo Django y quiero convertirme en desarrollador web. La creación de una aplicación web compleja requiere mucho trabajo y conocimiento (¡duh!), Pero lo que más requiere es una comprensión clara de cómo funcionan las cosas. Un consejo que te daré es que no asaltes las cosas. Tómese su tiempo para aprender cada uno de ellos (HTML, CSS … etc.) de manera efectiva. Practica, practica y practica!

Acerca de las aplicaciones web complejas, tomaré el ejemplo de Facebook. Lanzaron un sitio bastante básico (considerando su estado actual) en 2004. Continuamente lo mejoraron con feeds, fotos y ¡qué no! Mira donde están hoy. Por lo tanto, intente agrupar cosas básicas e iterar sobre ellas para crear aplicaciones complejas. Un consejo más es leer el código de los proyectos de código abierto. ¡Realmente ayuda mucho!

Para ayudarlo después de que aprenda todo esto, lo remitiré a esto
La respuesta de Dhiraj Thakur a ¿Hay algún consejo para aprender Python y Ruby al mismo tiempo?
Busque la parte de desarrollo web en la respuesta.
——-
¡Buena suerte! 🙂

Es difícil decir que sus detalles son incompletos, pero debería poder hacer algo con todo lo que se describe en 6 meses de estudio y experimentación, o tal vez más cerca de 12 si desea aprender modelado relacional y SQL también.

Pero esto es realmente solo el comienzo, como la respuesta de Bilawal Hameed a ¿Cuánto tiempo tomaría antes de que pudiera comenzar a construir aplicaciones web complejas? implica. Para convertirse en un buen programador web, e ingeniero de software, tomará mucho más tiempo: el Director de Investigación de Google, Dr. Peter Norvig, tiene esto que decir: enséñese a programar en diez años.

Aprender y estudiar nunca se detiene.

  • Para sitios web no necesita Python y Ruby. Quédese con Javascript y node.js.
  • Si te enfocas en un idioma, una buena estimación es de 6 meses a un año.
  • El diseño de UX lleva algún tiempo y luego la conversión del diseño al sitio de trabajo lleva mucho más tiempo.
  • Si usa plantillas y diseños de buenos libros / web, entonces ese trabajo es más rápido y reduce los errores.