¿Debería un desarrollador verse obligado a memorizar detalles? [cerrado]

33

Muchas veces olvido cosas de mi aplicación. No memorizo ​​los nombres de las tablas o lo que hizo una consulta y busco para obtener lo que quiero. El líder de mi equipo me dijo que debía memorizar los nombres de las tablas que uso.

¿Se requiere que el desarrollador memorice los nombres de las tablas en la base de datos, los nombres de las clases, etc.? Y si la respuesta es "Sí, todo el tiempo", ¿qué debo hacer para recordar esas cosas?

Anyname Donotcare
fuente
27
Desearía poder olvidarlos.
JeffO
66
Dígale que debe escribir con la mano izquierda (lo cual es extremadamente fácil para algunos y bastante difícil para otros).
Trabajo
44
"Obligado a memorizar nombres de tablas" ??? WTF !? “¡Todos deben aprender estos diez mil nombres de columnas para el final de la semana! Entonces habrá una prueba; ¡cualquiera que no obtenga el 100% será alimentado a la fuerza primero con mi orgullo privado de leones rabiosos! Bwahahahahaa !!!!! ”
Donal Fellows
44
Cuando era un estudiante cooperativo, trabajé con un chico que me exigió exactamente eso, me dijo que estaba "perdiendo el tiempo" cuando busqué cosas, dijo "¡dijiste que habías estado estudiando esto!" cuando no podía recitar los nombres de las tablas (y sus contenidos) de memoria, y usaba mi falta de compromiso para memorizar los nombres de las tablas como una excusa para dejar de guiarme por completo. Lo ataqué en mi informe cooperativo.
user16764
2
No memorices, memoriza.
tylermac

Respuestas:

63

No debería necesitar memorizar explícitamente estas cosas. Con eso me refiero a sentarse y aprenderlos como lo haría con una lista de palabras para un examen de ortografía. En primera instancia, los nombres deben ser memorables y reconocibles para que pueda encontrarlos nuevamente sin demasiado esfuerzo.

También debe tener acceso a herramientas que lo ayuden aquí con la finalización automática y similares.

En un sistema grande de más de 100 tablas, no se puede esperar que recuerde cada nombre de tabla y nombre de columna, sin embargo, con nombres memorables y reconocibles y uso regular, debe recordar los detalles más importantes y aquellos que utiliza cada día.

ChrisF
fuente
66
Después de haber trabajado en una aplicación con tablas de 4k, puedo dar fe de la utilidad de este consejo. La memorización no ayuda, las convenciones de proyectos sí (especialmente cuando se aplican; y si no, debe confiar en su memoria).
Vineet Reynolds
1
Para ayudar a la capacidad de descubrimiento, cree hojas de trucos y / o diagramas (modelo) de las cosas que necesita. De esa manera, solo tendrá que mirar su documento o documento / imagen y puede escanear en busca de los nombres de tabla y columna que necesita.
Kissaki
34

Einstein dijo "nunca memorices lo que puedes buscar [en los libros]", y estoy completamente de acuerdo.

Use su memoria para cosas abstractas (técnicas y principios de desarrollo), no hechos que pueda encontrar cuando los necesite.

Gato feliz
fuente
sí ... no lo memorices, vendrá cuando uses la información. Sin embargo, tenga los documentos de referencia para esto a mano en todo momento.
Newtopian
17

Es vergonzoso admitir que he estado usando C durante casi 30 años, pero nunca recuerdo cómo declarar punteros de función. Siempre tengo que salir de K&R para verificar la sintaxis.

Aún más vergonzoso, tengo que pensar mucho sobre cómo funciona typedef: ¿es así?

 typedef foo int;

o

 typedef int foo;

Estos son mis puntos ciegos personales. No me preocuparía si tienes otros similares.

Neil Butterworth
fuente
2
+1: Comencé a programar C en 1985, y todavía tengo que buscar cómo declarar punteros de función. Hice una puñalada el otro día y funcionó, y quedé bastante satisfecho conmigo mismo. (Recuerdo cómo hacer typedefs ... :-)
Bob Murphy
2
Estoy feliz de que en el lenguaje con el que trabajo (C #) el equivalente de los punteros de función sea realmente analizable por los humanos, no solo por el compilador.
svick
@svick Oh, no tengo problemas para leer los punteros de las funciones, es recordar cómo escribirlas con lo que tengo problemas.
Neil Butterworth
3
Deliberadamente no memoricé las tablas de precedencia C o C ++. Los tengo a mano para referencia inmediata si los necesito, y realmente no quiero escribir código que confundirá a alguien más que no los haya memorizado.
David Thornley
El código que depende de reglas de precedencia no obvias es un código incorrecto.
Gort the Robot
9

Las computadoras son buenas para recordar cosas exactamente. Las computadoras también son buenas para encontrar cosas que hayan recordado previamente.

Entonces, la habilidad clave es usar la computadora como una extensión de su memoria. Escriba código limpio, documente, aprenda a usar las herramientas de búsqueda de manera efectiva, configure su entorno de desarrollo para que sea fácil encontrar cosas, etc.

Un buen efecto secundario es que también facilitará que otros lean su código.

tdammers
fuente
5

La memoria es importante

Una memoria fuerte es de hecho uno de los mejores talentos que puede tener un desarrollador; en realidad que cualquiera puede tener. Es realmente algo especial y envidio y admiro a los bendecidos con él. Definitivamente puede ayudar a una persona a ser un desarrollador más fuerte, abogado, mecánico o (inserte el trabajo de su elección aquí).

¿Cuánto debe ser requerido?

Pero no creo que sea un requisito justo exigir la memorización de todas las cosas. Creo que comenzarás a guardar cosas en la memoria como parte natural de las cosas. Es por eso que leer un libro sobre un idioma y usarlo en un entorno de producción no es lo mismo. A medida que trabajas diariamente con algo (algunos lo llamarían "práctica") comenzarás a hacer que algunas cosas sean de segunda naturaleza.

Al igual que con los otros carteles, creo que memorizar partes clave de la aplicación ayuda. Sin embargo, no estoy seguro de que invertir en memorizar todo valga la pena cuando puede aprovechar características como intellisense, que es cada vez más común en las herramientas modernas.

¿Cómo puedes mejorar?

No soy un experto en memoria, pero algunos creen que puedes mejorar la memoria a través de ejercicios mentales como juegos mentales (crucigramas, sudoku, rompecabezas, etc.). La teoría es que su cerebro es como un músculo y si lo usa de diferentes maneras y lo ejercita, puede fortalecerlo.

Sería interesante ver estudios sobre cómo cosas como hacer juegos mentales, programación y actividades interactivas afectarían a un cerebro con el tiempo. ¿Podrían esas cosas ayudar a combatir la aparición de pérdida de memoria provocada por la edad o la demencia?

Bernard Dy
fuente
5

De donde vengo, hay un viejo dicho que dice algo así en inglés: "Un tonto memoriza, un hombre inteligente escribe". Básicamente, no importa cuán buena sea su memoria, lo olvidará . Eres solo humano. Y esto, como consecuencia, hace que confiar en la memoria humana ... bueno, no sea confiable. Incluso si crees que recuerdas esos nombres de tablas, ¿puedes estar 100% seguro? Necesita solo unos segundos para buscar los nombres de las tablas, pero podría necesitar horas, o incluso días, para localizar errores causados ​​por errores ortográficos.

Como conclusión, no, es un requisito ridículo, especialmente en proyectos grandes, que pueden tener miles de tablas y clases.

Davor Ždralo
fuente
3

Si se trata de algo en lo que está trabajando y es una tarea a largo plazo, entonces sí, debería estar trabajando para aprender y poder recordar varios nombres de tablas y columnas, clases, variables y métodos. Esto es algo que vendrá a través del tiempo mientras trabajas con ellos. No los aprenderá todos de la noche a la mañana, pero debe esforzarse por saber todo lo que pueda sobre el sistema en el que está trabajando. Además, en un sistema grande, no hay forma de que puedas memorizar todo, pero no hay razón para no aprender y recordar tanto como puedas.

Tener que buscar todo todo el tiempo es solo un éxito para la productividad: si está trabajando en una tarea y tiene que detenerse y buscar cosas cada pocos minutos, eso es un descanso en la concentración. Use las herramientas apropiadas para ayudarlo y aprenda / memorice lo que pueda. Mejorará en gran medida su productividad.

Thomas Owens
fuente
1
Estoy totalmente en desacuerdo con recordar detalles. Debes recordar conceptos y funciones. Es decir, sepa lo que puede hacer su sistema y sepa cómo saber cuál es el método / variable / nombre exacto de la columna.
edA-qa mort-ora-y
1
No esperaría que lo supieras todo, pero esperaría que cualquiera que trabaje en un subsistema en particular conozca ese subsistema por dentro y por fuera. Consideraría ese conocimiento preocupado por su trabajo.
Thomas Owens
3

¿Tiene algún sentido memorizar nombres de clase exactos? No lo creo.

¿Tiene algún sentido saber qué tipo de términos usa su proyecto en los nombres de clase, para que pueda buscarlos más rápido? Seguro.

Scott McIntyre
fuente
2

No estoy de acuerdo en que deba memorizar los nombres de las tablas, pero deberían ser fáciles de adivinar. Para que sea fácil de adivinar, sea consistente. De esta manera, no se preguntará a sí mismo "Hmm ... ¿la tabla foo es plural o singular? ¿La clave principal es ID o RID o FooRID?"

Earlz
fuente
2

No sé cómo podría consultar una base de datos en cualquier momento sin conocer los nombres de tablas principales y los nombres de columnas críticas (pero ciertamente no todo). Conozco a las personas que sí saben estas cosas sin tener que resolverlo cada vez que se vuelven más valiosas para la organización y se convierten en las personas que "recurren" cuando otros están atrapados.

Encuentro que a menudo cuando las personas no comienzan a aprender estas cosas, cometen errores en las consultas sin darse cuenta. Errores que a menudo veo instantáneamente en las revisiones de código porque entiendo la estructura de nuestra base de datos y cómo las tablas se relacionan entre sí y cuáles son las reglas críticas del negocio sin tener que buscarlas.

Personalmente, encuentro que las personas que no se molestan en aprender la estructura a menudo se quedan en el nivel de principiante al consultar esa base de datos en particular. También tienden a no sobrevivir a los despidos. Creo que tu jefe está tratando de hacerte un favor para que prestes más atención.

HLGEM
fuente
1

Más que la memoria fuerte, la que ayuda mucho es el diseño impulsado por el dominio y seguir convenciones sencillas como nombres de tablas y nombres de clases para que sean iguales. Si el dueño de su negocio le habla sobre el requisito, los términos específicos de dominio utilizados por él / ella deben estar allí en el código. En este caso, no tenemos que recordar las asignaciones entre términos comerciales y nombres en el código. Este hábito lleva un tiempo para ponerse al día, pero es muy útil, ya que también reduce los errores de traducción de un lado a otro entre los propietarios de negocios y los desarrolladores.

Junto con esto, si la duración del proyecto es muy larga, sentirse cómodo con la base del código durante un período de tiempo inconscientemente ayudará a la memoria.

Vinod R
fuente
disculpe, ¿podría explicar cuál es el significado de domain driven design?
Anyname Donotcare
1
@just_name Empecé con este martinfowler.com/bliki/EvansClassification.html
Vinod R