Gracias por el A2A. Espero que mi respuesta aquí lo lleve a avanzar en el camino para convertirse en desarrollador web.
PREÁMBULO A LA RESPUESTA
Permítanme comenzar clasificando el “desarrollo web” en dominios más pequeños, y luego tratar de dar una idea de lo que se necesita para dominar cada uno de ellos. En mi opinión, la mayoría del “desarrollo web” se enmarca en una de estas categorías:
- ¿Por qué necesito ingenieros incluso después de construir mi plataforma?
- ¿Qué recursos necesito para desarrollar un navegador web personalizado?
- Quiero desarrollar un sitio web para una escuela. ¿Qué tecnología o CMS debería preferirse?
- Hice un excelente formulario de contacto. ¿Cómo hago (usando HTML y CSS), que cuando alguien presiona 'enviar', me envían el formulario completo por correo electrónico?
- JavaScript: ¿Cómo convierto la hora de la fecha UTC en horas EST utilizando Javascript puro?
- Poner en funcionamiento un sitio web simple en un dominio
- Obtener un portal basado en el Sistema de gestión de contenido (CMS) en funcionamiento en un dominio
- Extender un CMS existente para proporcionar algunas funciones personalizadas que no están disponibles listas para usar
- Desarrollar un portal personalizado desde cero, con el único propósito de satisfacer necesidades comerciales específicas
- Desarrollar una “plataforma” (o marco) extensible que otros portales puedan usar.
[Hay varias otras formas en que uno puede dividir todo este “desarrollo web”, por supuesto, pero, aquí, voy a seguir con los tipos de proyectos más comunes para desarrolladores]
Dada mi categorización [simplista] de los esfuerzos de “desarrollo web”, ¿cómo se puede llegar a ser competente? Aquí va…
1. Obtener un sitio web simple en funcionamiento en un dominio:
Teóricamente, lo único que necesita para esto es HTML. Sin embargo, dependiendo del navegador utilizado para ver el sitio web, puede o no verse como se pretendía.
Por lo tanto, debe agregar CSS a la mezcla: restablecer los estilos definidos por el navegador / agente de usuario y luego aplicar estilo a todos los elementos HTML de la forma en que desea que se vean. En este punto, tendrá un sitio web simple que se ve y se siente como lo imaginó, sin importar el navegador o la plataforma que se utiliza para verlo [en su mayor parte, ya que existen diferencias en la visualización / representación del navegador. mismo CSS].
Según los estándares actuales, un sitio web bonito que no hace nada es, básicamente, inútil, lo menos que se espera es cierta interactividad. Aquí es donde entra JavaScript, algo que le permite crear interactividad en una página HTML …
Pero JavaScript, como la mayoría de los lenguajes, consta de utilidades primitivas, y puede ser muy frustrante tener que escribir varias líneas de código solo para asegurarse de que un botón proporcione un indicador visual al hacer clic. Afortunadamente, ese es un problema que se ha resuelto varias veces, y hay bibliotecas que lo ayudan a hacerlo en 1-2 líneas de código. Como “desarrollador web”, uno necesita conocer al menos una [o más] biblioteca de JavaScript … no como un prerrequisito técnico, sino por el bien de la productividad.
En esencia, todos los “desarrolladores web” necesitan saber, al menos, los conceptos básicos de HTML / CSS / JavaScript, y una biblioteca de JavaScript. Aquí hay algunos recursos para aprender HTML / CSS / JS:
- Tutoriales web en línea de W3Schools
- Red de desarrolladores de Mozilla
Aquí hay una lista de las bibliotecas / marcos JavaScript populares de uso común [con los que he trabajado]:
- jQuery
- Herramientas inmejorables de JavaScript: el kit de herramientas de Dojo
- Biblioteca YUI
- Marco de JavaScript para crear aplicaciones web de escritorio enriquecidas
2. Poner en marcha un portal basado en CMS en un dominio:
¿El sitio web simple que describí en el n. ° 1? Se ve bien y hace algo cuando se hace clic en un botón, etc. ¡Excelente!
Sin embargo, hay un gran problema: no es fácil agregarle más contenido / páginas o cambiar el texto en el sitio web. Lo que necesitamos es un sistema que permita que varias personas cambien el contenido [según los permisos de acceso, por supuesto] fácilmente. Este es el problema que los sistemas de gestión de contenido resuelven …
Si la definición de “desarrollador web” equivale a “alguien que construye sitios web donde las personas inician sesión, agregan / modifican / eliminan contenido y luego cierran sesión”, todo lo que uno necesita agregar a la caja de herramientas es saber cómo manipular uno [ o más] marcos en esta Lista de sistemas de gestión de contenido
En esencia, uno puede “desarrollar” sitios web que brinden mucha funcionalidad al agregar componentes estándar de FOSS en un CMS conocido, y luego diseñar las páginas web para que se ajusten a las pautas de marca del Cliente.
Personalmente, he trabajado solo en el siguiente CMS basado en PHP, y todos son bastante buenos:
- Drupal.org | Fontanería comunitaria
- Joomla! El CMS en el que confían millones para sus sitios web
- Open Source CMS / Framework
- WordPress ›Herramienta de blog, plataforma de publicación y CMS
Uno puede detenerse aquí si el objetivo es ganarse una vida digna, esencialmente, ser un “experto en desarrollo web” sin hacer ningún “desarrollo” real en el día a día.
3. Extender un CMS para proporcionar una funcionalidad personalizada no disponible de fábrica
El problema con detenerse en el n. ° 2 es que, cuando un Cliente regresa con un requisito específico basado en casos de uso de negocios, puede o no haber un módulo comercial que se integre en el CMS de elección que ya cumple los requisitos.
Cumplir los requisitos específicos de casos de uso de negocios es donde la “programación real” comienza a entrar en juego … y, dependiendo del CMS de elección, uno necesitará agregar PHP / RoR / Java / Python / et al. a la caja de herramientas.
Esto requiere aprender un lenguaje de programación y, en la mayoría de los casos, cierto conocimiento de la persistencia / recuperación de datos, ya sea un sistema de almacenamiento basado en un sistema de archivos, un RDBMS o NoSQL.
En mi experiencia, PHP parece ser el lenguaje / marco de elección más popular para desarrollar sistemas CMS, mientras que MySQL y MongoDB parecen constituir las opciones populares para los almacenamientos RDBMS y NoSQL respectivamente. Uno puede aprender sobre cada uno de estos en sus respectivos sitios web:
- Preprocesador de hipertexto y tutorial de PHP 5
- La base de datos de código abierto más popular del mundo.
- El manual de MongoDB 2.6
Tener un conocimiento profesional de PHP / MySQL / MongoDB y el servidor web utilizado para alojar el CMS (generalmente, Apache) es otra etapa en la que uno puede detenerse y ser un experto en “desarrollo web”. Sin embargo, esta etapa implicará algo de programación, y ayudará a extender / modificar el CMS para garantizar el cumplimiento de casos de uso comerciales específicos …
4. Desarrollar un portal personalizado desde cero
Esta es la categoría en la que la programación “real” es absolutamente necesaria: no se tiene nada para comenzar y se necesita instalar un portal web que implemente casos de uso de negocios específicos del cliente, según lo definido por algún tipo de documentos de requisitos.
Dado que los casos de uso de negocios se pueden ejecutar desde el simplista [capturar datos del perfil del usuario durante el registro, por ejemplo] hasta los muy complejos que involucran flujos de trabajo que duran más de días [el proceso de originación del préstamo, nuevamente, por ejemplo], supondré aquí que desarrollo “implica desarrollar solo el portal, y no las capas de lógica de negocio / middleware.
En ese supuesto, el “desarrollador web” es responsable de:
1. Las páginas HTML reales con las que el usuario ve / interactúa en cada visita al portal
2. El código del lado del servidor que recupera los datos que muestran las páginas en el n. ° 1 (de un medio de almacenamiento o de otro sistema)
3. El código del lado del servidor que almacena los datos ingresados por el usuario en las páginas del n. ° 1 (en un medio de almacenamiento o en otro sistema)
El desarrollo de las páginas HTML requiere el mismo conjunto de habilidades que las enumeradas en la categoría # 1: desarrollar sitios web HTML simples. Sin embargo, es posible que se necesiten algunas habilidades adicionales, a saber, cierta familiaridad con los Patrones de experiencia del usuario, Principios de diseño: Jerarquía de patrones de información y el uso de la biblioteca JavaScript antes mencionada para obtener / almacenar datos del servidor web.
El desarrollo del código del lado del servidor para enviar datos a pedido y almacenar datos según sea necesario es otra área donde entra en juego la “programación real”. Es posible que el “desarrollador web” deba tomar varias decisiones incluso antes de escribir la primera línea de código.
Por ejemplo:
1. ¿Cuál es la plataforma de elección para desarrollar el servidor? Las opciones obvias son Java (y cualquier cosa escrita encima de la JVM), .NET, PHP, RoR, Erlang y node.js
2. ¿Se debe optar por la programación orientada a objetos, la programación funcional, la programación dirigida por eventos o algún otro estilo? La respuesta a esta pregunta influirá en la elección de la plataforma …
3. Si, por ejemplo, la plataforma elegida es Java, ¿se va con J2EE, es decir, la ruta “tradicional”? ¿O se va con algo nuevo como Vert.x? ¿Qué tal la búsqueda ha terminado. o The Scala Programming Language, que tienen un uso bastante extendido?
4. ¿Es más sencillo llenar las páginas HTML / CSS / JavaScript completamente en código, o debería uno de los motores de plantillas desde aquí: Comparación de motores de plantillas web?
5. ¿Cuál es el mecanismo de almacenamiento de datos? ¿Un sistema existente que es responsable del almacenamiento / recuperación de datos en varios otros sistemas? ¿Un RDBMS como MySQL o PostgreSQL? ¿Una solución NoSQL como MongoDB o Cassandra? ¿Una combinación de los tres (Autorización / Autenticación en un sistema existente, con algunos datos en RDBMS pero datos transaccionales en NoSQL, por ejemplo)?
6. ¿Qué tipo de escalabilidad / fiabilidad / rendimiento necesita el lado del servidor? ¿Es necesario un caché (como Memcached o Redis)? ¿Cómo va a escalar el sistema y qué mecanismos deben establecerse para garantizar que varias instancias del servidor con equilibrio de carga no operen en la misma pieza de datos al mismo tiempo, produciendo diferentes salidas?
7. ¿Cómo se logra la comunicación entre el servidor web y el navegador – Formulario antiguo POSTS / SOAP Requests / RESTful API? ¿Cuál es el mecanismo de formato de datos – XML / JSON? ¿O hay un requisito para el intercambio de datos en tiempo real usando WebSockets?
[NOTA: no estoy haciendo otras preguntas que definitivamente necesitan ser respondidas; en su mayor parte, otros especialistas se encargan de esas operaciones, y no los desarrolladores web. Diseño de esquema RDBMS, por ejemplo, o topología de red]
No existe una respuesta única para todas estas preguntas, y cualquier combinación de las tecnologías mencionadas en esas 7 preguntas es una combinación válida.
Los “grupos” tecnológicos más comúnmente conocidos son:
1. Pila Java / J2EE: con múltiples variaciones según el cliente.
2. La pila de Microsoft: esencialmente, todo en .NET e IIS
3. La pila LAMP, con Memcached como caché
4. MEAN stack, con Redis como caché
Uno podría, por supuesto, tener una pila como la siguiente:
1. node.js / express.js como marco
2. Redis como el caché
3. PostgreSQL como el RDBMS
4. Dojo Toolkit como la biblioteca de JavaScript de elección en las páginas HTML
O este:
1. ERuby como lenguaje, ejecutándose en una JVM, como framework
2. Memcached como el caché
3. SQL Server como el RDBMS
4. MooTools como la biblioteca JavaScript elegida
La segunda es una pila más peculiar, pero el punto es que funcionará, y probablemente funcionará tan bien como la primera pila. Sin embargo, en mi experiencia, un “desarrollador web” puede sobrevivir aprendiendo cualquiera de los “grupos” tecnológicos mencionados anteriormente.
¿De dónde aprender cada pila? Varias fuentes en Internet, pero, hasta donde yo sé, no hay un sitio web “canónico” para aprender ninguno de ellos.
5. Desarrollar una “plataforma” extensible
Esto es, básicamente, una extensión a la categoría # 4, en el sentido de que las decisiones que el “desarrollador web” debe tomar son exactamente las mismas.
El único caso de uso adicional que admiten las plataformas es que varios otros sistemas [y no solo el HTML “incorporado”] pueden acceder a los datos de los que es responsable este portal.
Desarrollar una plataforma, por lo tanto, requiere una decisión adicional: ¿Cómo se expone la API a sistemas de terceros? ¿JABÓN o DESCANSO? ¿Y cuál es el formato de datos? XML o JSON?
La tendencia actual parece ser JSON sobre RESTful API. Aquí hay algunos recursos para comenzar con el diseño de RESTful API:
- Diseño API | Apigee
- Transferencia de estado representacional
FIN DE PREÁMBULO A LA RESPUESTA
Ese fue un largo preámbulo, estoy de acuerdo, espero que haya sido útil para explicar mis puntos de vista sobre lo que implica el “desarrollo web”. Como se puede ver, hay varias cosas que intervienen en él, y ninguna persona puede ser verdaderamente un “maestro” en absoluto. Lo mejor que se puede esperar es elegir una “pila de tecnología” e intentar dominar esa pila.
LA RESPUESTA
La pregunta que se hace es qué libros, cuando se leen, harán de uno un maestro del “desarrollo web”. A eso, mi respuesta es:
Hay demasiadas cosas involucradas en el “desarrollo web” para que cualquier conjunto de libros sea realmente útil. Sin embargo, lo que será útil es el mismo conjunto de habilidades que hacen de cualquier persona un buen desarrollador:
- Algún sentido estético: las páginas HTML deben verse bien. Por lo tanto, aproveche los marcos como Bootstrap y El marco front-end receptivo más avanzado de ZURB para garantizar que el portal esté utilizando estilos de aspecto y sensación [casi] estándar de la industria
- Algunos pensaron en diseñar las estructuras de datos RESTful API y JSON que pasan de un lado a otro: seguir las mejores prácticas aquí ahorrará mucho tiempo en el futuro cuando un cliente de terceros necesite usar los datos de los cuales el portal web en cuestión es responsable, o cuando las nuevas versiones de la API necesitan ser desarrolladas y lanzadas.
- Una buena y sólida comprensión de los patrones de diseño, algoritmos y estructuras de datos, para garantizar que el código sea mantenible y extensible a largo plazo.
- Una buena y sólida comprensión de los modelos de concurrencia, factores que afectan la escalabilidad y la confiabilidad, para garantizar que el centro de datos pueda implementar instancias agrupadas y con equilibrio de carga de su portal sin experimentar dificultades.
Puede recoger las habilidades mencionadas anteriormente en los libros, por supuesto, y para los desarrolladores principiantes, definitivamente serán útiles. Sin embargo, mi consejo para usted será que elija una pila, piense en un proyecto de software libre que sea popular en una pila diferente y el puerto: nada lo ayuda a aprender a escribir código mejor que escribir código.
Aquí hay algunas ideas [aleatorias] sobre lo que puede hacer para practicar:
- Puerto http://www.joomla.org/ o http://www.redmine.org/ a la pila MEAN
- Puerto http://expressjs.com/ para, por ejemplo, eRuby o vert.x
La idea aquí no es completar la transferencia, sino poder aprender 2 pilas diferentes casi al mismo tiempo. Si logras terminar el puerto, eso será increíble, aunque 🙂
Espero que esto ayude. ¡La mejor de las suertes!
PD: Es una respuesta larga, larga, y puede haber varios errores ortográficos y gramaticales aquí. Mis disculpas por cometer errores de comisión y omisión, y siéntase libre de editar / corregir, según sea necesario.
EDITAR: Por alguna razón, algunas partes de mi respuesta original se repitieron en el texto. Entonces, con suerte, la respuesta se vuelve más corta y más legible ahora. Disculpas por lo que haya causado ese error.