Por favor, manténgase en problemas técnicos , evite problemas de comportamiento, culturales, profesionales o políticos.
52
Por favor, manténgase en problemas técnicos , evite problemas de comportamiento, culturales, profesionales o políticos.
Respuestas:
El error está en su código, no en el compilador o en las bibliotecas de tiempo de ejecución.
Si ve un error que no puede suceder, verifique que haya creado y desplegado correctamente su programa. (Especialmente si está utilizando un IDE complicado o un marco de compilación que intenta ocultarle los detalles desordenados ... o si su compilación implica muchos pasos manuales).
Los programas concurrentes / multiproceso son difíciles de escribir y más difíciles de probar adecuadamente. Es mejor delegar todo lo que pueda a bibliotecas y marcos de simultaneidad.
Escribir la documentación es parte de su trabajo como programador. No lo deje para que "alguien más" lo haga.
EDITAR
Sí, mi punto # 1 está exagerado. Incluso las plataformas de aplicaciones mejor diseñadas tienen su parte de errores, y algunas de las menos bien diseñadas están plagadas de ellas. Pero aun así, siempre debe sospechar su código primero , y solo comenzar a culpar a los errores del compilador / biblioteca cuando tenga evidencia clara de que su código no tiene la culpa.
En los días en que hice el desarrollo de C / C ++, recuerdo casos en los que supuestos "errores" del optimizador se debieron a que yo / algún otro programador había hecho cosas que las especificaciones del lenguaje dicen que tienen resultados indefinidos. Esto se aplica incluso para lenguajes supuestamente seguros como Java; Por ejemplo, eche un vistazo al modelo de memoria Java (JLS capítulo 17).
fuente
fuente
Los cálculos de coma flotante no son precisos.
fuente
No dejes de aprender.
fuente
Que lo # 1 que puede hacer para aumentar la calidad y la facilidad de mantenimiento de su código es REDUCIR LA DUPLICACIÓN.
fuente
Habilidades de solución de problemas y depuración
Casi no dedican tiempo a este tema en ninguno de los cursos de programación que tomé, y en mi experiencia es uno de los principales determinantes de cuán productivo es un programador. Te guste o no, pasas mucho más tiempo en la fase de mantenimiento de tu aplicación que en la nueva fase de desarrollo.
He trabajado con tantos programadores que depuran cambiando aleatoriamente las cosas sin una estrategia para encontrar el problema. He tenido esta conversación docenas de veces.
Otro programador: Creo que deberíamos intentar ver si lo soluciona.
Yo: Bien, suponiendo que eso lo arregle. ¿Qué le dice eso sobre dónde está el origen del problema?
Otro programador: No lo sé, pero tenemos que intentar algo .
fuente
fuente
Los basicos. Actualmente los programadores aprenden tecnologías, no conceptos. Está incorrecto.
fuente
Its wrong
debería serit's wrong
, por ejemplo.Todo programador debe saber que está poniendo suposiciones en el código todo el tiempo, por ejemplo, "este número será positivo y finito", "este código podrá conectarse al servidor todo el tiempo en un abrir y cerrar de ojos".
Y debe saber que debe prepararse para cuando se rompan esas suposiciones.
fuente
assert()
- en todas partes.assert()
lo ayudará a documentar sus suposiciones y lo salvará cuando esté equivocado.Todo programador debe saber sobre las pruebas.
fuente
Aprender conceptos . Puedes buscar en Google la sintaxis.
fuente
Pensamiento crítico y lógico. no puedes hacer nada bueno sin eso.
fuente
Examen de la unidad. Esta es una excelente manera de codificar sus suposiciones sobre cómo se va a utilizar el código.
fuente
El mínimo absoluto que todo desarrollador de software debe saber absolutamente, positivamente sobre los conjuntos de caracteres y Unicode (¡sin excusas!) .
fuente
Eso es más difícil de lo que piensas.
Si bien es fácil (ish) armar algo que funcione cuando se usa normalmente, hacer frente a entradas erróneas, todos los casos de borde y esquina, posibles modos de falla, etc. lleva mucho tiempo y probablemente será la parte más difícil del trabajo.
Entonces también debes hacer que la aplicación se vea bien.
fuente
Conocimiento del dominio. La especificación nunca es 100%; Conocer el dominio real con el que se está desarrollando SIEMPRE aumentará la calidad del producto.
fuente
Gran notación O y sus implicaciones.
Algunas referencias útiles
fuente
Punteros, obviamente. :)
fuente
L = [[]] * 2; L[0].append(42)
Diferentes idiomas usan diferentes nombres, pero la indirección es esencial en todas partes.Code Complete 2 - de principio a fin
fuente
Los datos son más importantes que el código.
Si sus datos son inteligentes, el código puede ser tonto.
El código tonto es fácil de entender. También lo son los datos inteligentes.
Casi cada dolor algorítmico que he tenido se debe a que los datos están en el lugar equivocado o se abusa de su verdadero significado. Si sus datos tienen significado, ponga ese significado en el sistema de tipos .
fuente
Qué idioma y entorno es más adecuado para el trabajo. Y no siempre es tu favorito.
fuente
Divide y conquistaras. Por lo general, es la mejor manera de resolver cualquier tipo de problema práctico, desde la programación hasta la depuración.
fuente
La verdadera habilidad se refleja en la capacidad de ejecutar bien un diseño simple, no en la capacidad de hacer que un diseño complicado funcione en absoluto.
Esta habilidad proviene de un mayor dominio de los fundamentos, no del dominio de lo arcano. Un programador de alto calibre no se define por su capacidad para codificar lo que otros no pueden (utilizando funciones de nivel superior, programación funcional avanzada, lo que sea que tenga), sino más bien por su capacidad para refinar la codificación perfectamente mundana. Elegir la descomposición apropiada de la funcionalidad entre clases; construyendo en robustez; utilizando técnicas de programación defensiva; y usando patrones y nombres que conducen a una mayor autodocumentación, estos son el pan y la mantequilla de la programación de alto calibre.
Escribir un buen código al que usted u otra persona pueda volver en una semana, un mes o un año y comprender cómo usar, modificar, mejorar o extender ese código es crucial. Le ahorra tiempo y esfuerzo mental. Acelera las ruedas de la productividad al eliminar los obstáculos que habría tropezado antes (tal vez interrumpir su tren de pensamiento, o tal vez quitar horas o días de esfuerzo de otro trabajo, etc.). Hace que sea más fácil concentrarse en los problemas difíciles , y a veces hace que los problemas difíciles desaparezcan.
En una palabra: elegancia. Cada clase, cada método, cada condición, cada bloque, cada nombre de variable: lucha por la elegancia.
fuente
Nunca culpe al usuario de lo que podría solucionarse con una experiencia de usuario más limpia o una mejor documentación. A menudo, los programadores asumen automáticamente que el usuario es un idiota que no puede hacer nada bien, cuando el problema es una mala experiencia general o falta de comunicación. Los programas están destinados a ser utilizados, y tratar al usuario con desprecio es perder el punto de programación en primer lugar.
fuente
Todo programador debe saber cómo usar el depurador y saber cómo usarlo bien .
fuente
Estructuras de datos
fuente
Cómo usar Google
fuente
Evaluación de cortocircuito, aunque es una de las primeras cosas que le enseñan sobre los operadores booleanos.
fuente
Cómo calcular con precisión cuánto tiempo llevará implementar una característica. Más importante aún, cómo transmitir que no estás mintiendo cuando envías esa estimación.
fuente
El estilo de codificación importa:
... y el buen diseño importa.
Idealmente, el programador aprende estas cosas antes (o durante) su primera revisión de código. En el peor de los casos, el programador los aprende cuando el jefe le dice que haga cambios no triviales a un código horrible a toda prisa.
fuente