Si hoy fuera a escribir un sitio web de tipo de medios sociales como Facebook, Twitter o incluso Quora, ¿sería más inteligente usar C ++, Scala, Python (estoy pensando) o cualquier otro idioma como Haskell – Opiniones?

Como usted, A2A, y no tengo experiencia en la creación de un sitio de redes sociales, le daré esta mejor oportunidad. No voy a recomendar ninguno de esos idiomas, excepto como base para implementar una nueva arquitectura que pueda usar para construir su sistema. Ya no soy fanático de usar los lenguajes existentes para implementar nuevos sistemas. Entiendo que la motivación de la mayoría de los desarrolladores es hacer que algo despegue rápidamente, llevarlo al mercado, comenzar a ganar dinero lo antes posible y preocuparse por las consecuencias arquitectónicas más tarde; o posiblemente poner en marcha algo, ganar dinero, reunir un equipo lo suficientemente bueno como para que pueda realizar mejoras / contribuciones a los proyectos de código abierto a medida que avanza (esta última opción es un poco éticamente mejor, en mi opinión, pero en términos de construir algo que dure, Todavía soy escéptico).

El modelo de desarrollo de software que utilizan la mayoría de los lugares se basa en la mercantilización del talento basada en herramientas estandarizadas. Compensan el mal diseño arquitectónico mediante la contratación de ingenieros muy talentosos que pueden superar las limitaciones de la arquitectura existente, simplemente “eliminando” algo que la gente encuentra interesante, porque parece “nuevo”, o mediante controles de gestión burocráticos, que controlan los costos a través de las economías. de escala en el mercado laboral. Pueden salirse con la suya, porque el mercado de consumo tiene expectativas relativamente bajas de tecnología informática (en comparación con lo que podrían ser), y la industria fomenta activamente estas bajas expectativas.

No estoy comentando sobre la ética de estas prácticas en términos de cómo se trata a los trabajadores, aunque sí estoy comentando sobre la ética de cómo se trata a la sociedad , y valoro el software como un depósito de conocimiento. Estoy hablando de cómo la práctica común es una estrategia a corto plazo que produce mucho esfuerzo desperdiciado y no contribuye significativamente a una mejor manera de hacer las cosas, excepto para optimizar las prácticas antiguas. Este modelo de producción produce “montones” muy grandes de código desechable que durará tal vez una década, si es así, después de lo cual todo se considerará inútil y será reemplazado por “lo nuevo”, lo que exigirá la reurbanización. de herramientas estandarizadas y / o API. Enjuague de lavado. Repetir.

Ahora creo que es mejor pensar y trabajar en su arquitectura para el proyecto primero (que es la parte difícil), y usar un lenguaje existente que se ajuste a sus requisitos arquitectónicos, que puede extender, cuando debe ser (de nuevo, por integridad arquitectónica), o desarrollar su propio lenguaje para representar esa arquitectura, y luego “desarrollar la aplicación”, que debería ser la parte fácil.

Re. la parte de la pregunta sobre “Si hoy fuera a escribir un sitio web de tipo de redes sociales”, he criticado el diseño de redes sociales existente. Mi principal crítica es que tienden a hacer que sea realmente difícil encontrar contenido específico que esté envejecido. Quora es un poco una mejora, pero creo que deja algunas cosas que desear también. Si alguien se pregunta a qué me refiero, animaría a la gente a ver de qué habló Ted Nelson hace muchos años. Es muy pertinente. Al menos, Quora le permite buscar contenido y vincular respuestas y conversaciones. Esa es una característica importante. Sería bueno si las entidades de contenido fueran direccionables internamente para que las porciones pudieran incluirse en otras publicaciones, con atribución automática, sin la necesidad de copiar / pegar manualmente, y luego incluir un enlace. También sería bueno poder clasificar las conversaciones por tema, que pueden buscarse, ya que las respuestas pueden ser puntos de partida para las discusiones sobre temas relacionados. Parte de esto podría ser categorizar las respuestas como nuevas “preguntas” (si son preguntas) que luego pueden conducir a más respuestas. Creo que un sitio como Quora comete un error al priorizar los perfiles y las preguntas como entidades especiales, con respuestas y conversaciones secundarias. Ciertamente, está bien filtrar por categorías (como “personas” y “preguntas”), pero las respuestas y los comentarios también deben poder buscarse e indexarse ​​(aunque las respuestas están indexadas, pero solo por las personas que las publicaron). Un sitio que es como Quora, IMO, debería ser un “universo” de contenido, cada uno vinculado de manera significativa.

Recuerde que elegir el idioma es la parte fácil.
En términos de desarrollo web, tienes que hacer muchos trabajos.
Elegir un sistema operativo para servidores, un servicio web (Apache / Lighttp / nginx / etc.), una buena ubicación para el servidor (¿de dónde vendrán 10.000 clientes?), En realidad escribir la aplicación y mucho más.
Para un equilibrio entre eficiencia y simplicidad, Python y sus famosos frameworks (Django, Flask) son excelentes opciones.
Le sugiero que comience a desarrollar y deje de adivinar.
Hay muchos puntos de referencia y comparaciones en internet. Búscalos como un experto.

Espero vivir lo suficiente como para poder ver su solicitud.

Tienes algunas opciones. Voy a enumerar las ventajas y desventajas de 3 de ellos.
PHP
Ventajas:

  • Fue claramente lo suficientemente bueno para Facebook
  • Preinstalado en muchos servidores web baratos

Desventajas

  • Sin herramientas de depuración, excepto echo y var_dump
  • Escribiendo $ delante de cada variable
  • Pobre soporte unicode
  • No corre muy rápido

Java.
Ventajas:

  • Bien conocido por muchos desarrolladores
  • Disponibilidad de frameworks y bibliotecas (especialmente Tomcat)
  • Eclipse
  • Más rápido que PHP

Desventajas

  • El marco web más popular depende de características oscuras del lenguaje
  • Utiliza mucha memoria en el servidor (es importante si se le factura por el uso de memoria)
  • Demasiado estrictamente OO (que puede conducir a un código detallado)

Haskell
Ventajas

  • Menos líneas de código que la mayoría de los otros idiomas
  • Se detectan muchos errores en el momento de la compilación en lugar de después de que se haya implementado (uno de los marcos web incluso se asegura de que no tenga enlaces internos muertos)
  • Muy rápido para aplicaciones concurrentes y paralelas, como servidores web.
  • La mayoría de las personas descubren que lleva menos tiempo desarrollarse
  • El mejor soporte unicode
  • Inferencia de tipos

Desventajas

  • Toma más tiempo aprender
  • Sensibilidad de espacios en blanco
  • Es más difícil razonar sobre el uso de la memoria.
  • No hay polimorfismo de subtipo (aunque sí tiene otros tipos de polimorfismo). Personalmente veo esto en ventaja, pero escucho que mucha gente lo extraña al principio.
  • Demasiadas bibliotecas de la competencia para elegir para muchas tareas comunes
  • Infierno Cabal

Mohammad Hossein Mojtahedi y Patrick Menlove mencionan algunos puntos importantes: considere que Facebook lo logró con PHP . Solo este hecho por sí solo debería terminar toda discusión sobre la importancia de los lenguajes de programación para el éxito de algún producto. Sin embargo, sigo pensando que al principio, cuando solo un par de programadores muy buenos trabajan para obtener la primera versión beta, la elección de un lenguaje de programación puede ser importante, en el sentido mencionado en las otras respuestas (usted debería sentirse cómodo con él, por lo que probablemente Mark Zuckerberg eligió PHP), y también en el sentido de que debería ser un lenguaje productivo.

¿Deberías aprender Haskell? Definitivamente ¿Deberías escribir tu aplicación web en ella? Tal vez, escuché que Yesod es un marco bastante bueno. Pero la mayoría de las cosas que aprenderá en Haskell serán aplicables a todos los lenguajes (funciones puras, valores inmutables, funciones de orden superior como una forma de componer un programa), y lo convertirá en un mejor desarrollador en general (en el sentido de que sus programas serán más fáciles de entender y tendrán muchos menos errores, especialmente difíciles de encontrar causados ​​por el acoplamiento accidental a través de valores mutables).

Acerca de qué idioma elegir para un proyecto como este, elegiría JavaScript y Meteor: este es un marco creado específicamente para aplicaciones web en tiempo real, que es lo que desea. Para hacerlo más interesante, rociaría un poco de programación funcional reactiva a través de RxJS o Bacon.js (biblioteca de programación funcional reactiva para JavaScript). Personalmente, para mí es importante divertirse mientras construye algo nuevo, y FRP parece tener un gran potencial para organizando flujos de trabajo asincrónicos como el anterior. Meteor tiene su propio mecanismo para valores observables, pero supongo que es menos poderoso que una biblioteca completa de FRP, y también supongo que funcionarán bien juntos. Cualquiera de esos dos supuestos podría no ser correcto. Tampoco estoy seguro de cómo funcionará la depuración, la creación de perfiles y las pruebas: las pruebas generalmente deberían ser fáciles, lo mismo para la depuración y la creación de perfiles del cliente, pero no estoy seguro de la situación con Node (es bastante popular, así que creo que esto no debería No sea un problema, pero todavía no he escrito ninguna aplicación Node).

No soy el mejor informado en este tema, pero creo que depende de con qué marco se sienta más cómodo trabajando. Su trabajo se dividirá entre front-end y back-end. El código de fondo para los usuarios y sus publicaciones / tweets / como los llames requerirá algo de trabajo con las bases de datos. El front-end tendrá que responder para que el sitio web esté disponible desde dispositivos móviles (desde donde la mayoría de las personas acceden a las redes sociales).

Por lo tanto, explore un poco los marcos e idiomas del lado del servidor y del lado del cliente, vea cuáles le gustan y cuáles tienen las características más adecuadas para lo que desea hacer. Tenga un plan y decida exactamente qué hará el sitio web terminado: cada funcionalidad. Buena suerte 🙂

More Interesting

¿Puede alguien que como ingeniero informático ha trabajado como programador? ¿Y qué tipo de programación aprenden los ingenieros?

¿Será la ingeniería de control la profesión más buscada, superando a la informática en la próxima década?

¿Por qué necesitamos rotar y cambiar en lenguaje ensamblador?

¿Es probable que un ingeniero eléctrico se convierta en senador de los Estados Unidos y cómo?

¿Qué temas de ingeniería informática son útiles en la ciencia de datos?

Cómo decidir entre informática e ingeniería informática

En términos de ingeniería informática, ¿cómo es CMU versus MIT?

Estoy en el séptimo semestre de un B.Tech. programa en CS. Anteriormente era un ávido programador en C ++. Debido a varias razones, perdí completamente el interés. ¿Cómo puedo adquirir algunas habilidades para poder encontrar un trabajo pronto?

¿Google solo contrata ingenieros informáticos?

¿Cuáles son los trabajos posibles para un ingeniero informático además de la programación?

¿Qué cursos en línea debo tomar, como estudiante de ciencias de la computación e ingeniero de software, para ampliar mi conocimiento y aumentar mi currículum?

¿Es seguro considerar tomar B.Tech CSE en un NIT sin tener ninguna educación en informática (sin experiencia en programación) en +2 y un poco menos de inclinación hacia las matemáticas (cálculo en particular), pero un interés significativo?

¿Existe algún tipo especial de medio de almacenamiento de respaldo que, bajo circunstancias especiales, pueda retener su contenido eternamente?

¿Qué es mejor para la ingeniería informática? SRM o UIT Burdwan?

Estoy confundido si tomar la ciencia o obtener un diploma en ingeniería informática. ¿Qué tengo que hacer?