Tenemos muchas herramientas excelentes que ayudan mucho a la hora de programar, como buenos programadores, editores de texto, IDEs, depuradores, sistemas de control de versiones, etc. Algunas de las herramientas son herramientas más o menos "imprescindibles" para hacer el trabajo (por ejemplo, compiladores) .
Siempre hay herramientas que ayudan mucho, pero que no reciben tanta atención, por varias razones, por ejemplo, cuando se lanzaron, se adelantaron a su tiempo y ahora están más o menos olvidadas.
¿Qué tipo de herramienta de programación crees que es la más subestimada? Motiva tu respuesta.
tools
developer-tools
Anto
fuente
fuente
Respuestas:
Un pato de goma. Sí, en serio.
http://en.wikipedia.org/wiki/Rubber_duck_debugging
fuente
Bolígrafo y cuaderno.
fuente
Las herramientas de diferencias parecen estar subutilizadas cuando se comparan salidas de registros o datos en archivos de texto plano. ¿O tal vez eso es solo un nicho? Me parece muy útil y útil para la depuración comparar grandes registros de ejecuciones de programas y señalar uno o dos detalles que cambiaron.
Las herramientas de creación de perfiles de rendimiento también son muy buenas, especialmente cuando golpeas un cuello de botella crítico, pero parece que muy pocas personas están familiarizadas con ellas (y me reconozco hasta cierto punto en esta categoría).
Las buenas herramientas XML son vitales: si está trabajando con archivos XML más de una docena de líneas o esquemas múltiples. A veces necesita algo más que la sintaxis básica que resaltan otros editores. Además, cuando se trabaja con XML, aprender XSL puede ser muy útil. Muchas veces veo lo que podría hacerse en una simple transformación XSL realizada en muchas líneas en el código de la aplicación. Aunque para aclarar: yo no sugiriendo que el propio XML es una "herramienta de programación subestimado"; Sugiero que el valor de los buenos editores XML se subestima, por lo que he visto.
fuente
diff
se subestima. Sobre el tema de la elaboración de perfiles, no está solo al pensar que deben ser útiles, pero usted mismo no sabe cómo. Mira esto.<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>
Expresiones regulares
Son muy útiles. Ayudan a la hora de buscar a través de archivos de registro, analizar texto, etc. Son extremadamente útiles.
Me resulta extraña la cantidad de personas que conozco que nunca las usan porque hay una pequeña curva de aprendizaje asociada a ellas. Muchas veces veo que la gente hace las cosas de la manera difícil (Nota: antes de la expresión regular, hice las cosas de la manera difícil) cuando una expresión regular simple podía reducirla rápidamente.
fuente
Tus compañeros de equipo. Cuando tengas una idea innovadora y olvides incorporar a tu equipo, nunca escucharás sus preocupaciones o ideas sobre por qué no funcionará o por qué podría ser aún mejor.
Digo esto, porque es fácil pensar que la programación es algo antisocial que la gente hace en las esquinas con sus brillantes ideas. Las personas que piensan que esto subestima el valor de los equipos y sus compañeros de equipo para ayudar a que las ideas / proyectos se hundan / naden.
fuente
Google Hay muy pocos problemas que aún no se han resuelto y documentado. Una consulta de Google bien ajustada puede ahorrarles mucho tiempo a todos.
fuente
De lejos, la herramienta menos apreciada para encontrar "cuellos de botella" es Ctrl+ Co el botón "Pausa", en un depurador.
Revise el último párrafo de esta publicación , y esta publicación , y esta publicación , para empezar.
Muchas veces veo / escucho que la gente dice "¡El programa es demasiado lento! ¿Qué puedo hacer al respecto? Probé un generador de perfiles (si lo hicieron), pero no entiendo lo que dice. ¿Alguien tiene alguna idea? ¡Ayuda! " Bueno, las conjeturas son solo eso. Lo que siempre he hecho, y otros también, es ponerlo en marcha, interrumpirlo y examinar la pila de llamadas. Si el problema es realmente malo, bingo , está justo frente a ti. Si el problema es solo leve, lo haces varias veces. Todo lo que aparece en más de una muestra, que puede evitar, es un cuello de botella que puede solucionar.
Sí, esto es un cebo a favor, pero funciona.
fuente
El compilador.
La mayoría de las personas no se toman el tiempo para comprender lo que hace su compilador elegido. Simplemente sienten que convierte el código en un programa ejecutable y eso es todo lo que pueden llegar. En la mayoría de los modernos, hay varias configuraciones que puede alimentar para que haga lo que necesita. Aquí hay un ejemplo, apuesto a que la mitad de los desarrolladores en su oficina no tienen idea de cómo configurar la advertencia como nivel de errores (suponiendo que realmente tenga uno). ¿Qué opciones tiene para generar símbolos de depuración? ¿Qué optimizaciones (o qué nivel de) desea que haga? La lista continua.
fuente
-pedantic -Wall -Wextra -Werror
... aunque puede ser difícil construir algo entonces: pTu cerebro. Otras herramientas no tendrían mucho significado sin él.
fuente
Buen viejo:
A veces es útil un depurador o perfilador o un diagrama de flujo UML. Y a veces te vuelven loco. Siempre me encuentro recurriendo al uso de declaraciones de impresión (o trace o NSLog o what-have-you) solo para asegurarme de que mi código está haciendo lo que creo que está haciendo cuando creo que lo está haciendo.
fuente
Scripts viejos y sencillos ... no importa cuántos lenguajes de la próxima generación que desarrollemos, seguimos dependiendo en gran medida de los scripts, también la mayoría de las tareas diarias se pueden lograr escribiendo algunas líneas de scripts.
fuente
Lápiz y pizarra.
No se puede superar la baja tecnología cuando se trata de explicar algo
fuente
ack . Es como
grep -r
, pero está diseñado para buscar a través de su código fuente.fuente
Perl y otros lenguajes de script. Ideal para tareas que son demasiado complicadas para herramientas GUI como Agent Ransack.
fuente
Métodos abreviados de teclado que permiten una refactorización rápida, frecuente y segura. Aprender a extraer (o en línea, etc.) variables, métodos, constantes o clases al presionar algunas teclas cambió radicalmente la forma en que codifico. Solo refactorizará con frecuencia (es decir, suficiente) cuando el costo sea mínimo, por lo que, en lo que a mí respecta, es esencial hacer que estos atajos sean una segunda naturaleza.
Por lo tanto, generalmente, use buenas herramientas (IDE / editor) y aprenda a aprovechar al máximo las funciones que ofrecen.
Las pruebas unitarias y TDD vienen después, para mantener su código comprobable y evitar el miedo a la refactorización.
Úselos y avanzará fácilmente hacia la escritura de un código mantenible correcto que se ajuste al principio DRY y se auto documente.
fuente
Las pruebas unitarias ofrecen los siguientes beneficios:
fuente
Generadores de código
Los generadores de código pueden crear una gran cantidad de código eficiente y sin errores desde una definición simple. Los usos de tipo ORM son los más obvios para crear clases de acceso a datos, pero hay muchos más usos potenciales.
El soporte de generación de código parece estar todavía en pañales tanto desde el punto de vista del programador como del marco, pero creo que es algo que veremos más y más. En .NET puede comenzar a incursionar con las cosas de CodeDOM .
fuente
Yo uso AgentRansack en gran medida. Es una gran ayuda buscar miles de archivos muy rápidamente. Me ha ahorrado mucho tiempo, pero no conozco a muchos programadores que lo conozcan o lo usen.
fuente
Métodos formales
http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X
http://www.amazon.com/Science-Programming-Monographs-Computer/dp/0387964800/ref=pd_sim_b_1
Es difícil exagerar su importancia. Cada ciclo y cada declaración if comienza como una idea que requiere algún tipo de "prueba". La mayoría de los programadores hacen esta prueba la mayor parte del tiempo en sus cabezas. Usted pregunta qué hace la declaración if y pueden articular, de manera sólida y lógica, cuáles son las opciones y por qué las opciones son completas, consistentes y exclusivas.
Pero algunos parecen adivinar al azar. Necesitan más ayuda y los métodos formales podrían ser el tipo de ayuda que necesitan.
Es solo álgebra (y cálculo) para el código. Nada demasiado complejo o sofisticado.
fuente
Los patrones de diseño físico, como salir de la silla para correr rápidamente a la luz del sol y el aire fresco, mantienen nuestros cerebros funcionando al máximo.
fuente
Bueno, es Half Life 2 (inserta tu juego favorito aquí). Si tengo un problema que no puedo resolver, simplemente renuncio y empiezo a jugar con mi juego favorito y, de repente, la solución aparece en mi mente. Entonces, para ser honesto, no es un juego o algo así, sino hacer otra cosa . A menudo veo personas sentadas en un problema durante horas sin resolverlo y todo lo que deben hacer es desconectar su cerebro por un corto período de tiempo.
fuente
Desbordamiento de pila : ayuda rápida de expertos cuando está atascado
fuente
Creo que es Notepad / TextPad / simples programas de edición de texto. Todos tienen un momento en el que necesitan una solución rápida que no requiere abrir un IDE y solo necesitan una edición rápida. Y todas las computadoras tienen algún tipo de programa de edición de texto simple.
fuente
Afirma y una buena
alwaysAssert()
función. En mi humilde opinión, estos son más importantes que las pruebas unitarias, porque las pruebas unitarias solo pueden encontrar errores en los casos específicos que pensaste probar. Si el mismo programador escribe el código y las pruebas, probablemente perderá los mismos casos extremos en ambos. Además, a veces las pruebas unitarias no son prácticas porque el entorno en el que funciona el componente y / o los datos en los que opera es demasiado complicado para encontrar un caso de prueba artificial.La belleza de las afirmaciones radica en su capacidad para documentar supuestos y probarlos en entradas no inventadas . Si alguno de estos supuestos es incorrecto, su código falla en lugar de "funcionar" pero produce resultados sutilmente incorrectos. También falla más cerca de la raíz del problema que sin las afirmaciones. En la práctica, si declara explícitamente suficientes suposiciones sobre un fragmento de código y todas estas suposiciones son correctas, entonces el código generalmente es correcto.
Una queja común acerca de las afirmaciones es que se pueden desactivar. En mi humilde opinión, cada idioma o biblioteca estándar debe tener una
alwaysAssert()
función o equivalente aproximado que haga lo mismoassert
pero que no se pueda desactivar. Esto se puede utilizar para verificar supuestos en áreas de código que no son críticas para el rendimiento, donde los beneficios de desactivar las afirmaciones son insignificantes.fuente
La tecla F1. - Útil para programas que no conoces y para programas en los que estás trabajando. (Suponiendo que es una aplicación grande).
Potentes para filtrar los problemas cuando los usuarios informan de errores en función de su interpretación de cómo debería funcionar el software. Por supuesto, podría ser que el diseño en sí fuera defectuoso. Pero esa es otra historia.
fuente
Varias utilidades de núcleo UNIX, pero principalmente
find
y de vez en cuandogrep
oed
. La capacidad de encontrar cosas en nidos profundos de archivos es invaluable, particularmente cuando de repente heredas una base de código y tienes que arreglarla. Incluso si dicho código está bien documentado, probablemente tendrá que cazar, y una gran comprensión defind
esto lo mata.fuente
Curiosidad
Llámalo el "Enigma de la programación". ¿Qué es una herramienta en comparación con la persona que la maneja? El deseo de saber cómo y por qué algo funciona o no funciona expande el conocimiento de uno más que cualquier herramienta específica y eso es cierto más allá de la programación.
fuente
¡Ahorramos incontables horas en todo el mundo!
fuente
Cola
Tail se puede usar para monitorear el archivo de salida del registro del programa en tiempo real. Ha sido de gran ayuda al desarrollar sistemas que no proporcionan a otros medios para leer el registro.
Los programas de ejemplo son;
fuente
Reuní un generador de gráficos de llamadas de Perl una vez. Fue extremadamente útil, pero cayó demasiado en código no procesal o rutinas fuera de archivo.
fuente