Las estructuras de datos inmutables son una técnica importante para reducir los errores de software, y lo hacen simplemente estando muy limitados sobre lo que puede hacer con ellos. Hay una y solo una cosa que se puede hacer con una estructura de datos inmutable: los datos se pueden leer de ella.
En casi todos los idiomas, una operación de lectura no tiene ningún efecto secundario (es decir, no causa que suceda nada). Se puede realizar una operación de lectura en cualquier momento. Se puede hacer repetidamente. O no se puede hacer en absoluto, si el resultado no es necesario.
Por el contrario, piense en todas las cosas que se pueden hacer con una estructura de datos mutable. Las estructuras de datos mutables típicas admiten múltiples operaciones. Estos son solo algunos de los detalles que debe tener en cuenta:
- ¿Es realista el salario base de 160k para un ingeniero de software en Salesforce.com en el Área de la Bahía?
- ¿Vale la pena aprender WordPress en 2017?
- ¿Debo dejar mi trabajo de desarrollo de software y hacer freelance a tiempo completo?
- ¿Puedes aprender programación / ingeniería de software gratis en casa y aún así conseguir un trabajo en una empresa líder en Silicon Valley (por ejemplo, Google) sin un título universitario?
- ¿Puedo obtener trabajos de prueba de software después de cambiar mi dominio?
- ¿Qué hace una operación? ¿Qué le hace la operación a la estructura de datos? ¿Qué le hace la operación al medio ambiente?
- ¿Cuándo puedes realizar una operación? ¿Siempre puedes realizar la operación? ¿O solo bajo circunstancias específicas?
- ¿En qué orden deben realizarse las operaciones? ¿Quizás
initialize()
siempre debe llamarse antes destart()
? - ¿Cuántas veces se pueden realizar operaciones? Quizás
initialize()
solo se puede llamar una vez. O tal vez se puede llamar una vez por cada vez que se llama areset()
. - ¿Se necesita realizar una operación? Si no planea llamar a
start()
, ¿aún necesita llamar ainitialize()
?
¿Qué tan bien puede responder estos detalles sobre una estructura de datos mutable que está utilizando? ¿Están estos detalles completamente documentados? En la gran mayoría de los casos, estos detalles están muy poco documentados y entendidos. Las estructuras de datos inmutables no tienen ese problema.
Es por eso que aunque diseñé Stanza (LBStanza) para soportar completamente las estructuras de datos mutables, animo a mis alumnos a usarlas con moderación y solo después de haber pensado mucho en los detalles anteriores.
– Patrick