¿Las grandes corporaciones como Microsoft reescriben desde cero al hacer una versión web de su software, por ejemplo, Office? Si no, ¿cómo lo hacen?

Los principios de diseño de software recomiendan separar el código de interfaz y de fondo incluso en software de escritorio.

En los días previos a las aplicaciones web brillantes llamamos a eso que separa la lógica de negocios y teníamos varios principios como MVVM Pattern. Cuando migra una aplicación a la web, el código de back-end puede permanecer prácticamente intacto, ya que se ejecuta en el servidor en un entorno compatible con el proveedor, solo el código de la interfaz debe portarse al entorno web.

Además de eso, muchas aplicaciones de escritorio usan frontend HTML / CSS / Js desde hace años, porque era más fácil crear, modificar y mantener un frontend ejecutándose en un navegador integrado (que está disponible automáticamente en todas las plataformas de destino) luego varios frontends dependientes de la plataforma. Si su interfaz ya es HTML / CSS / Js, se puede portar a la web sin problemas serios.

En el caso de Microsoft, el backend es principalmente C # y C ++ en contenedores administrados y Microsoft tiene su propio sistema operativo de servidor que admite tiempos de ejecución C # y C ++, por lo que el código de back-end podría ejecutarse fácilmente en un servidor remoto. Además, Microsoft finalmente está trabajando para portar C # bajo Linux, por lo que muy pronto los servidores que no sean MS también podrán alojar aplicaciones web C #.

Entonces, no, no tiene que volver a escribir su aplicación desde cero si la escribió de acuerdo con las pautas sensatas en primer lugar.

Supongo que depende mucho del proyecto y las tecnologías involucradas, pero las bases de código son caras de desarrollar y mantener, por lo que esperaría que incluso las grandes empresas reutilicen la mayor cantidad posible de su base de código.

Por ejemplo, desde que lo mencionó, Microsoft Office tiene una base de código C ++ compartida entre todas las plataformas en las que se lanza (Windows, MacOS, iOS, Android y Web, IIRC) que forma la lógica central de la aplicación.

Sin embargo, tienen que implementar diferentes front-end para cada plataforma, de modo que la aplicación todavía se sienta bien en su entorno, básicamente, eso significa volver a hacer la interfaz de usuario para usar componentes nativos para que se vea como las otras aplicaciones.

Todo esto se menciona en esta charla:

Otra forma de lograr esto es mediante el uso de Electron, como lo hace Slack. Es un entorno basado en NodeJS que le permite escribir la interfaz de su aplicación en JS + HTML + CSS, hacer el backend en JS o C ++, o supongo que incluso otros idiomas con los enlaces correctos, y luego implementarlos en el escritorio.

Con este enfoque, debe ser bastante fácil portar su front-end a la web, ya que ya está escrito con tecnologías web

Si desea ver Electron en acción, aquí hay un tutorial rápido de un ingeniero de Slack:

No puedo hablar por Microsoft, pero, en teoría, es por eso que debes separar tu lógica en módulos y componentes separados. Por ejemplo, el corrector ortográfico solo debe ocuparse del texto. Destacar palabras mal escritas es una preocupación de GUI separada del componente del corrector ortográfico. Entonces, en teoría, el código podría reutilizarse llamando a componentes en el back-end que ya implementan parte de la funcionalidad. Luego, nuevamente, pueden haber decidido reescribir todo en Javascript en el front-end, pero lo dudo.

Pueden reescribir todos los códigos para las versiones web, pero no tienen que comenzar desde cero porque ya conocen la audiencia, la lista de características y casi el comportamiento del usuario (el comportamiento web es diferente de la aplicación pero similar).

Así que casi su trabajo es adaptar la versión de PC a la versión web. Pero ahora, Office Word y Excel de la versión web son muy malos, detrás de Google Docs y Google Sheet.

No, eso habría llevado mucho tiempo, lo que hicieron fue cambiar el back-end del software para que se ejecutara dentro de un navegador y no de forma nativa.

Luego, el resto del front-end del software simplemente permanece igual.