¿Qué cursos / conceptos de CS necesito entender bien para construir mi propio cliente bittorrent?

He pasado los últimos 2 años construyendo un cliente de torrent desde cero en JavaScript, así que puedo decirte los conceptos exactos que necesitas dominar:

  • Redes : cómo funcionan TCP, UDP, HTTP y (opcionalmente) WebRTC
  • Crypto : cómo funciona el hashing, ya que SHA1 se usa en torrents
  • Sistemas / SO : cómo leer / escribir archivos, procesos, (opcionalmente) hilos dependiendo del idioma que use
  • Rendimiento : perfiles para encontrar código lento, complejidad algorítmica
  • Arquitectura de software : cómo estructurar grandes proyectos de software para mantenerlos, cómo no dispararse en el pie con una complejidad esencial
  • Analizadores : cómo analizar protocolos de cable binario, ya que los torrents usan “bencoding”
  • Diseño : cómo hacer una interfaz de usuario, qué es un buen diseño, usabilidad

Si desea ver el resultado de mis esfuerzos, consulte WebTorrent (navegador) y WebTorrent Desktop (OS X, Windows, Linux).

En general, recomiendo construir su propio cliente torrent, si está interesado. Ha sido una experiencia increíble e interesante. El proyecto me enseñó muchísimo sobre cómo hacer un buen software, cómo funciona el código abierto (y cómo obtener contribuciones de la comunidad) y cómo modularizar el código.

Si desea profundizar más, le recomiendo mirar los módulos que componen WebTorrent. La mayor parte del desarrollo activo está ocurriendo dentro de pequeños paquetes npm que utiliza WebTorrent.

Te sugiero que domines las estructuras de datos, las redes, los algoritmos y el diseño de UX.