Supuestos de programación incorrectos de larga data [cerrados]


281

Estoy investigando algunos errores comunes y suposiciones pobres hechas por ingenieros de software junior (y quizás senior).

¿Cuál fue su suposición más antigua que finalmente se corrigió?

Por ejemplo, entendí mal que el tamaño de un número entero no es un estándar y, en cambio, depende del idioma y el objetivo. Es un poco embarazoso decirlo, pero ahí está.

Ser franco; ¿Qué creencia firme tenía y aproximadamente cuánto tiempo mantuvo la suposición? Puede tratarse de un algoritmo, un lenguaje, un concepto de programación, pruebas o cualquier otra cosa sobre programación, lenguajes de programación o ciencias de la computación.


Respuestas:


545

Durante mucho tiempo supuse que todos los demás tenían este súper dominio de todos los conceptos de programación (patrones de diseño, el último lenguaje nuevo, complejidad computacional, expresiones lambda, lo que sea).

Leer blogs, Stack Overflow y programar libros siempre me hizo sentir que estaba detrás de la curva de las cosas que todos los programadores deben saber intuitivamente.

Con el tiempo me he dado cuenta de que estoy comparando efectivamente mi conocimiento con el conocimiento colectivo de muchas personas, no con un solo individuo, y eso es una barra bastante alta para cualquiera. La mayoría de los programadores en el mundo real tienen un caché de conocimiento que se requiere para hacer su trabajo y tienen más de unas pocas áreas que son débiles o completamente ignorantes.


68
¡Tan verdadero! Ese es el problema de esta edad. La información también es desalentadora. Tuve esta revelación hace unas semanas cuando me sentí como un completo perdedor en todo lo que hice (no la primera vez) con respecto a la investigación. Los chicos que publican sus artículos en IEEE Transactions no necesariamente tienen las mismas habilidades que los que trabajan en Google, se jactan de tener StackOverflow, son excelentes profesores o escriben excelentes blogs de programación. Por supuesto, los mejores chicos son exponencialmente más geniales que nosotros, pero no saben todo lo que sabes que tú no sabes. Entonces, mantente fresco.
jbasko

40
También ayuda a entender que esos blogueros tampoco están escribiendo todo de la cabeza. Los buenos blogueros investigan sus temas y aprenden cosas nuevas mientras escriben publicaciones.
JohnFx

47
Me obsesiono diariamente por las cosas que no tengo tiempo para leer y aprender. Me deja con un horrible sentimiento de culpa a veces.
brad

9
@ Zilupe: Amén a eso. He publicado algunos documentos y revistas de conferencias internacionales. A los ojos de algunas personas, eso sonaba genial. Hasta que te hayas dado cuenta de que realmente no toma mucho esfuerzo publicar un artículo. No somos genios. Somos como todos los demás. Cometimos errores y publicamos papeles basura. Bueno, excepto por algún grupo minoritario de verdaderos genios ...
Hao Wooi Lim

44
+1 Qué bueno que leí esto. Pensé que era el único.
Randell

308

Que la gente supiera lo que quería.

Durante mucho tiempo pensé que hablaría con la gente, ellos describirían un problema o flujo de trabajo y lo pondría en código y lo automatizaría. Resulta que cada vez que sucede, lo que pensaban que querían no era realmente lo que querían.

Editar: estoy de acuerdo con la mayoría de los comentarios. Esta no es una respuesta técnica y puede que no sea lo que el interlocutor estaba buscando. No se aplica solo a la programación. Estoy seguro de que tampoco es mi suposición más antigua, pero fue lo más sorprendente que he aprendido en los 10 años que llevo haciendo esto. Estoy seguro de que fue pura ingenuidad de mi parte, pero la forma en que mi cerebro está conectado y las enseñanzas y experiencias que tuve antes de ingresar al mundo de los negocios me hicieron creer que estaría haciendo lo que respondía; que podría usar código y computadoras para solucionar los problemas de las personas.

Supongo que esta respuesta es similar a la de Robin sobre que los no programadores entienden / se preocupan por lo que estoy hablando. Se trata de aprender el negocio como un proceso ágil, iterativo e interactivo. Se trata de aprender la diferencia entre ser un código de programación y ser un desarrollador de software. Se trata de darse cuenta de que hay una diferencia entre los dos y que para ser realmente bueno en el campo, no se trata solo de la sintaxis y la velocidad de escritura.

Editar: Esta respuesta ahora es community-wiki para apaciguar a las personas molestas por esta respuesta que me da rep.


9
O cambiar lo que quieren después de ver lo que antes querían. A la gente le gusta cambiar de opinión. Lo sé, porque soy un pueblo.
J. Polfer

13
Les estabas dando lo que pidieron, no lo que querían.
Brent Baisley

47
¿Por qué las aburridas respuestas incontrovertidas se votan de manera tan excesiva?
nes1983

39
Guau. Parece que alguien necesita un abrazo.
bzlm

24
Mi dios @ la gente se queja, el representante de stackoverflow no es una competencia. Vota a favor si te gustó la respuesta, no votes a favor porque estás celoso de no haberlo publicado primero.
Dmitri Farkov

292

Que sé dónde está el problema de rendimiento sin perfilar


10
Creo que es por eso que la optimización prematura es un lugar tan común.
Hao Wooi Lim

10
+1 Wow, alguien incluyó una respuesta que no era trivial o fuera de tema.
Mark Rogers

3
Tengo algunas pastillas que deben ayudar con la optimización prematura ...
AndyM

232

Que debería tener solo un punto de salida de una función / método.


9191
Excelente realización; salga tan a menudo como sea necesario. Uno debe abandonar una función tan pronto como no tenga sentido continuar más allá. Hacer esto puede reducir la complejidad y aumentar la legibilidad, por ejemplo, evitando condicionales profundamente anidados, cuando son condiciones previas necesarias para que el método se ejecute correctamente. En los lenguajes modernos con administración de memoria y construcciones de recursos como usar / finalmente, continuar hasta el final de un método dogmáticamente no tiene sentido.
Triynko

24
¿A quién se le ocurrió esto, por cierto? Es como una leyenda urbana de programación.
brad

49
Las personas que tienen que depurar el código de otras personas son las que se les ocurrió esto.
gatorfax

23
Creo que esta idea común pero errónea se basa en un malentendido. Cuando salga de una función, siempre debe volver al mismo punto. Esa era una regla importante en idiomas como BASIC que no la aplicaba: la regla significaba, por ejemplo, que debería usar GOSUB en lugar de GOTO. En lenguajes como C # o Java que llaman métodos, es automático. Pero debido a que es automático, creo que se transformó del lógico "solo un punto de retorno" al absurdo "solo un punto de salida".
Ryan Lundy

35
Desde lenguajes como C donde necesita liberar recursos manualmente. Múltiples puntos de salida eran una buena oportunidad para filtrar recursos. OMI no tiene sentido en idiomas con excepciones, ya que a menudo ya no conoce sus puntos de salida, o están en el medio de una declaración. - En estos idiomas, todo lo que queda es "estructura de legibilidad".
Peter

228

Que los no programadores entiendan de lo que estoy hablando.


243
entender / cuidar ..
nickf

8
Todavía tengo este a veces ... Pensé que al menos mi esposa ya habría comenzado a entender correctamente: P
workmad3

3
¡Dios mío, me temo que aún no puedo aprender esto!
thatismatt

3
Sí, a veces me olvido de mi público y terminar con un grupo de personas satisfechas con miradas en blanco en emabrgo Stairing cara a mí, es bueno cuando las personas muestran un interés aunque
Petey B

3
Esta es mi mayor frustración con la profesión.
Andres Jaan Tack

219

Ese software libre de errores fue posible.


35
+1, aunque la NASA casi lo logró
Patrick McDonald

55
Sí, pero el "casi" costó unos pocos millones de dólares :)
Jem

15
@Triynko tu "posible" y el "posible" de @ JaredPar no son lo mismo. La teoría y la práctica pueden ser iguales en teoría pero son muy diferentes en la práctica.
wilhelmtell

13
@Joseph, parte del problema es que la gente piensa que los programas Hello World están libres de errores. Ellos no están. La mayoría no verifica si hay errores en printf, por ejemplo, o no tiene en cuenta otros intentos fallidos de E / S.
JaredPar

9
@RussellH, no. No ha podido especificar un valor de retorno y el proceso resultante devolverá memoria basura aleatoria.
JaredPar

199

Que las variables miembro privadas eran privadas para la instancia y no para la clase.


192
Mantuve esa suposición hasta ... justo ahora.
TheMissingLINQ

9
@ebrown Por lo general, solo me resulta útil cuando escribo un método igual ()
Dave Webb

12
Ellos estan en Ruby.
Mike Kucera

17
Esto es tan normal para mí que esta respuesta no tuvo sentido las primeras veces que la leí. Ahora quiero aprender Ruby para que pueda confundirme de otra manera. :)
jmucchiello

16
@Kiewic Si tiene una variable miembro privada llamada myVar dentro de su clase, puede hacer referencia a other.myVar directamente en su código si otro es una instancia de esta clase. Supuse que porque era "privado" tenía que usar other.getMyVar () incluso dentro de la clase.
Dave Webb

166

Pensé que la escritura estática estaba muy quieta en tu teclado.


53
Sincero o no, esto me hizo reír mucho al final de un largo día de trabajo. : P
Olivier Tremblay

55
++ para una buena risa. suena como algo con lo que mi esposo (no técnico) podría pensar.
jess

11
+1! Pensé que escribir pato también implicaba escribir. O patos. O ambos.
SqlACID

162

Que puede comprender completamente un problema antes de comenzar a desarrollar.


32
Esto, mi amigo, debería ser: "Que puedes entender completamente un problema". Pero es muy cierto. Y aparentemente un concepto difícil de entender o incluso aceptar.
KarlP

44
No puede entender el problema "completamente", pero ciertamente DEBE entender el problema (en algún grado) antes de comenzar a desarrollarse. bit.ly/kLXgL
OscarRyz

A veces tienes que comenzar a desarrollar para comprender el problema. Y / o, el problema cambia cuanto más te desarrollas.
Evan Plaice

158

Las personas inteligentes siempre son más inteligentes que yo.

Realmente puedo vencerme cuando cometo errores y, a menudo, me regañan por autocrítica. Solía ​​mirar con asombro a muchos desarrolladores y a menudo asumía que, dado que sabían más que yo en X , sabían más que yo.

A medida que continúo ganando experiencia y conociendo a más personas, comencé a darme cuenta de que a menudo, aunque saben más que yo en un tema en particular, no son necesariamente más inteligentes que tú / yo.

Moraleja de la historia: nunca subestimes lo que puedes traer a la mesa.


Bueno uno! Actualmente estoy trabajando con un colega que realmente sabe MUCHO sobre el desarrollo de .NET. Me tomó un tiempo darme cuenta de que soy mejor para comprender lo que los clientes necesitan.
Treb

58
Y por otro lado, que sé más que otras personas. Resulta que solo saben cosas diferentes. La otra moraleja: nunca subestimes lo que alguien más puede aportar.
jueves

1
Aquí está esa vieja cosa de "Haz a los demás" otra vez ... Estoy acuñando una nueva frase: intimidación tecnológica ~ El estado de sentirse superior porque sabes algunas cosas y cometes el error de dejar que todos los demás lo sepan. @seealso: smartass.
corlettk

1
Excelente observación: mi versión es más negativa "Todo el mundo hace tonterías de vez en cuando". Algo relacionado con "no voltee el bozo".
Peter

2
Solo tienes que preocuparte cuando las personas estúpidas son más inteligentes que tú.
Brad Gilbert el

131

Durante mucho tiempo pensé que la mala programación era algo que sucedía al margen ... que hacer las cosas correctamente era la norma. No soy tan ingenuo en estos días.


30
Solía ​​pensar que la programación incorrecta solo la realizaban otros programadores, hasta que uno de mis programas malos terminaba. ¡Ahora hago las cosas correctamente! (Me crees esta vez, ¿verdad?)
Jared Updike

2
Totalmente. Pasé de "Eso nunca sucede" a "Eso nunca sucede excepto en este trabajo" a "Cada lugar tiene un código incorrecto".
Ryan Lundy

1
Hackear es la norma. La ingeniería es competencia de los verdaderamente competitivos. Si alguna vez conoces a un ingeniero de software, te lo haré saber.
corlettk

3
@corlettk: ¿Quieres decir que la codificación de mono es la norma, no? Hackear es un arte, un alto nivel de arte en tu mente, que estoy muy lejos de lograr.
hasen

2
@Hasen: No, piratear es una analogía de llevar un hacha a un árbol sin destreza, cortar pequeños pedazos en un loco pánico sin un plan real, y crear un gran desastre sangriento hasta que el árbol finalmente caiga sobre tu cabeza. Un "pirateo" es "uno que produce trabajo banal y mediocre con la esperanza de obtener éxito comercial". ¿Por qué fue que el campo de la computadora cambió "piratear" para significar "experto"?
Lawrence Dol el

113

Pensé que debería avanzar hacia la abstracción tanto como sea posible. Me golpearon en la cabeza principal con esto, debido a demasiados bits de funcionalidad entrelazados.

Ahora trato de mantener las cosas lo más simples y desacopladas posible. Refactorizar para hacer algo abstracto es mucho más fácil que predecir cómo necesito abstraer algo.

Por lo tanto, pasé de desarrollar el marco que los gobierna a todos, a fragmentos de funcionalidad que hacen el trabajo. Nunca miré hacia atrás, excepto cuando pienso en el momento en que ingenuamente pensé que sería yo quien desarrollaría la próxima gran cosa.


26
Desacoplado = verdadera abstracción. El resumen por sí mismo es ... optimización prematura.
Jared Updike

1
Esto va junto con lo que he encontrado haciendo ajustes de rendimiento. Puede haber un programa encantador con múltiples capas de abstracción. Entonces la carga de trabajo se vuelve pesada, y adivina lo que cuesta todo el tiempo ... todas las abstracciones. Las computadoras ejecutan instrucciones, no abstracciones.
Mike Dunlavey

55
La abstracción y la generalización son herramientas poderosas, lamentablemente utilizadas para generalizar un caso de uso abstracto con una sola implementación. Lo curioso es que cada vez que hay una necesidad de cambiar la implementación, las abstracciones y generalizaciones tienen que cambiar también ...
KarlP

Estoy totalmente de acuerdo con Jared ... si has logrado llegar a "simple y desacoplado", has logrado una verdadera abstracción. ¿Cómo se pueden desacoplar las cosas si no se han abstraído las cosas en interfaces y fábricas, etc.? ¿Cómo puede ser simple a menos que elimine todo el "if type = this y luego haga esto, o si el tipo es that y luego haga otra cosa?
Richard Anthony Hein

Igual que aquí. Creo que aprendí sobre la abstracción antes de hacer un montón de código de espagueti. Deberían haber enseñado cómo hacer las cosas, incluso si el código es espagueti, y luego nos han enseñado sobre OO y abstracción.
hasen

103

Que las mujeres encuentren a los programadores de computadoras sexys ...


70
¿¿¿Espera un segundo???
Çağdaş Tekin

44
he he he he .. okey, estaba buscando algo para mantener mi sonrisa por el resto del día. ¡Creo que lo he encontrado! :)
OscarRyz

17
"¡Oh, cariño! Sí, di 'si' - tírame algunas excepciones ... Sí, ya sabes cómo lo quiero": P
cwap

55
¿Qué? Los programadores son ricos? ¿Cuando esto pasó?
Filip Navara

3
Algunas mujeres (del tipo correcto) se sienten atraídas por los hombres inteligentes y perspicaces. Los cuales, menos la prototipo de barba del cuello y la tripa de salchicha, son rasgos bastante comunes de los programadores. Espolvorea un poco la preocupación por la autoimagen / higiene y la emoción / emoción ocasional de los deportes extremos y estarás en camino.
Evan Plaice

100

Que la calidad del software conducirá a mayores ventas. A veces lo hace, pero no siempre.


37
Venta de software? Eso es así 1999.
bzlm

Un montón de sitios web basados en suscripción ahora adays ...
CGP

11
Microsoft seguramente lo mata.
Bill Martin

Me encanta este, tan cierto.
dr. mal

18
Deseo que la mejora de la calidad / rendimiento de nuestro software cuente como una característica
Tom Leys

82

Que todos los idiomas son (en su mayoría) creados iguales

Durante un buen rato pensé que el lenguaje elegido realmente no marcaba una gran diferencia en la dificultad del proceso de desarrollo y el potencial para el éxito del proyecto. Esto definitivamente no es cierto.

Elegir el idioma adecuado para el trabajo es tan importante / crítico como cualquier otra decisión de proyecto individual que se tome.


13
Siento que elegir las bibliotecas correctas es lo que importa. Sucede que a menudo hay una correspondencia 1-a-1 entre idiomas y bibliotecas ...
Kevin Montrose

77
Pero si dos lenguajes de programación son Turing completos, ¿cuál es la diferencia? ¡Puedes escribir cualquier programa en cualquier idioma! ;)
Bill the Lizard

8
No estoy de acuerdo, la decisión de qué lenguaje usar es mucho menos importante que quién implementará realmente el proyecto. Como solo un ejemplo de muchas otras decisiones más importantes.
Boris Terzic

13
BrainFu ** es tan completo como Python.
hasen

9
Que los idiomas completos de Turing sean de alguna manera igualmente aplicables es un error común. Un lenguaje completo de Turing puede calcular todo lo que puede hacer una máquina de Turing (y a menudo también implica lo contrario). No hay absolutamente ninguna implicación con respecto al rendimiento. Una operación que lleva tiempo lineal en un idioma podría tomar tiempo exponencial en otro y ambos podrían estar completos. Hay una gran diferencia entre lo que en teoría es computable y lo que es factible en la práctica.
TrayMan

81

Que una buena relación comentario / código es algo bueno.

Me tomó un tiempo darme cuenta de que el código debería auto documentarse. Claro, un comentario aquí y allá es útil si el código no se puede aclarar o si hay una razón importante por la que se está haciendo algo. Pero, en general, es mejor pasar ese tiempo de comentarios cambiando el nombre de las variables. Es más limpio, más claro y los comentarios no se "sincronizan" con el código.


1
Estoy de acuerdo en el código real ... excluyendo los comentarios de javadoc (o equivalente).
corlettk

11
+1, ni siquiera me hagas comenzar con los tratados que solía escribir para 10 funciones de línea
wds

Para agregar a esto, una declaración de aserción () es mejor que documentar una precondición / postcondición. ¡Los contratos de código .NET 4 también pueden convertirse automáticamente en documentación!
Robert Fraser

66

Esa programación es imposible.

No es broma, siempre pensé que la programación era algo imposible de aprender, y siempre me mantuve alejado de ella. Y cuando llegué cerca del código, nunca pude entenderlo.

Entonces, un día, simplemente me senté y leí algunos tutoriales básicos para principiantes, y trabajé desde allí. Y hoy trabajo como programador y me encanta cada minuto.

Además, no creo que programar sea fácil, es un desafío y me encanta aprender más y no hay nada más divertido que resolver algún problema de programación.


77
¡Amén! Pero, oye, no proclames esta vista desde los tejados. No queremos que todos sepan que la programación es divertida, ¿verdad ? ;); P
Peter Perháč

9
MasterPeter: Nos daría más forraje para nosotros aumentar nuestro representante cuando vengan a hacer preguntas.
TheTXI

44
Yo diría que la programación es difícil de hacer bien . Sin embargo, es posible, lo que parece ser su punto.
Steve S

44
@Olafur: ¿Por qué quieres que la pregunta sea wiki, pero no tu respuesta?
gnovice

2
Esto refleja exactamente mi experiencia. Ojalá hubiera comenzado antes: P
Skilldrick

65

"On Error Resume Next" fue algún tipo de manejo de errores


66
Te siento ... pero en vbscript (especialmente asp.), Era la ÚNICA opción de "manejo de errores" disponible, combinada con una comprobación juiciosa de si realmente ocurrió un error, y una buena cantidad de oración.
plana

2
Sí ... es de algún tipo ... es un tipo del que nos alegra alejarnos
Matthew Whited

66
¡¿Bien?! pero es. Comienza su bloque de manejo de errores con Reanudar en caso de error A continuación, intente algo y luego If (número de error <> 0) luego
jpinto3912

¿No es este el único vbscript equivalente a un try catch?
James

-1: es un tipo de manejo de errores. Simplemente no es tan elegante.
JohnFx

64

Ese software de programación requiere una base sólida en matemáticas superiores.

Durante años antes de comenzar a codificar, siempre me dijeron que para ser un buen programador había que ser bueno en álgebra avanzada, geometría, cálculo, trigonometría, etc.

Diez años después y solo una vez tuve que hacer algo que un alumno de octavo grado no podía hacer.


55
Muy cierto. En la mayoría de los casos, no es necesario ser un experto en matemáticas. La única vez que realmente necesité saber matemáticas avanzadas fue cuando estaba haciendo programación 3D como hobby. De hecho, fue en realidad la programación 3D durante la escuela secundaria lo que me inspiró a prestar mejor atención en las clases de trigonometría y pre-cal. Sin embargo, aparte de eso, las matemáticas muy básicas suelen ser todo lo que necesitas.
Steve Wortham

29
Creo que estabas mal informado. Claro, para ser un buen programador , realmente no necesitas usar matemáticas de un nivel mucho más alto, pero para comprender y aplicar verdaderamente ciertos conceptos de informática, vas a necesitar algo más que matemáticas de octavo grado.
hbw

12
Creo que el énfasis en las matemáticas es enseñar habilidades de pensamiento crítico y resolución de problemas no como algo que usarías en la programación diaria de la computadora.
Zack

14
El tipo de abstracción que necesita para comprender las matemáticas avanzadas es muy similar a la abstracción que necesita para crear software.
OscarRyz

66
Creo que los conceptos de programación funcional son mucho más fáciles de entender si tienes una base más sólida en matemáticas, simplemente porque la sintaxis no te asusta tanto. Se ve familiar. Cometí el error de usar funciones matemáticas simples para demostrar los conceptos de programación funcional nuevos en C #. Algunas personas declararon de inmediato que era demasiado complejo.
Richard Anthony Hein

63

Esa optimización == reescritura en lenguaje ensamblador.

Cuando entendí realmente el ensamblaje (proveniente de BASIC), parecía que la única forma de hacer que el código se ejecutara más rápido era reescribirlo en ensamblador. Tomó varios años darse cuenta de que los compiladores pueden ser muy buenos en la optimización y especialmente con CPU con predicción de ramificaciones, etc., probablemente puedan hacer un mejor trabajo que un humano en un tiempo razonable. Además, pasar tiempo optimizando el algoritmo probablemente le dará una mejor ganancia que pasar tiempo convirtiendo de un lenguaje de alto nivel a uno de bajo nivel. También que la optimización prematura es la raíz de todo mal ...


8
Peek y Poke son tus amigos :)
Matthew Whited

44
¡Pervertido! ¡Dile eso al juez!
Shalom Craimer

1
Aquí es donde entra en juego la teoría de la complejidad. El ensamblaje es generalmente micro optimización. Reducir la complejidad del tiempo de sus algoritmos es donde se gana velocidad.
PeteT

@scraimer: Me alegro de verte aquí, nunca lo hubiera esperado ;-)
Robert S. Barnes

@ Matthew - "Peek and Poke son tus amigos :)": ** EXTREMADAMENTE celoso No escribí eso primero.
FastAl

63
  • Que los ejecutivos de la compañía se preocupen por la calidad del código.
  • Que menos líneas es mejor.

2
les importa, pero hay que combinar las habilidades artísticas con las habilidades de los trabajadores. Cada pieza de algoritmo no puede ser una obra de arte también. Algunos de ellos serán más intensos, así que reutilice los "menos usados". Recuerda la vieja regla 80/20. El 80% del programa se usa el 20% del tiempo. ¡Así que concéntrate 80% en el 20% del código y haz esa PIEZA DE ARTE REAL! : OP
BerggreenDK

71
¡Menos líneas son mejores! Parte de la razón por la que no me gusta Java como lenguaje es que hacer cualquier cosa requiere tantas líneas de código. menos líneas de código significa que es más fácil cambiar su código.
Claudiu

77
Depende de lo que esté eliminando para obtener menos líneas. Si el código sigue siendo legible con menos líneas, entonces está bien. Sin embargo, hay muchas maneras de reducir la cantidad de líneas de código que empeoran el código.
Herms

2
Excepto cuando las personas llevan la mentalidad de "menos líneas es mejor" a lo lejos con llamadas de método encadenadas de 7 de profundidad, de modo que cuando uno de ellos lanza un puntero nulo, no tienes idea de cuál era. O condensan tantas acciones en una línea que tiene 150 caracteres y realiza 4 operaciones. Esto hace que sea más difícil de leer y más difícil de depurar, pero no es más rápido ni usa menos memoria durante la ejecución.
Trampas Kirk

17
Si su línea termina en))))) y no está escribiendo Lisp, tiene muy pocas líneas.

58

Diría que almacenar el elemento de año de una fecha como 2 dígitos fue una suposición que afligió a toda una generación de desarrolladores. El dinero que se gastó en Y2K fue bastante horrible.


1
Esta es la única respuesta que voy a upvote, aunque es un CW por lo que no importa ...
Dan Rosenstark

44
IIRC algunos sistemas en los años 60 y quizás en los 70 solo usaban un dígito porque usaban menos memoria. Incluso he visto formularios en papel donde se imprimieron "196_" y "197_".
Algunos

3
Todavía veo formularios con 200_ y presumiblemente hay algunos ahora con 201_ impreso.
Macha

55
La parte triste es ... Unix tendrá su segunda ronda en esto en 2038
Evan Plaice

44
@Billy El hecho de que la arquitectura de la máquina cambie no significa que el formato de datos sí lo hará. El almacenamiento de 2 dígitos de resolución en formato int generaría un formato de fecha de byte (8 bits) y, sin embargo, afectó a toneladas de máquinas de arquitectura de hardware de 32 bits en 2k. Este es solo un ejemplo más de por qué no permite que los técnicos de hardware de bajo nivel especifiquen formatos de datos. Penny pinch bits con el conocimiento de que habrá un SNAFU programado en un futuro lejano.
Evan Plaice

57

Que cualquier otra cosa que no sea inserción / burbuja fue simplemente magia oscura.


Jaja, me gusta este, ya que golpea cerca de casa. ¿Ordenar más rápido que el tiempo n cuadrado? ¡Imposible!
Ross

Es sorprendente lo simple y obvio que parecen la mayoría de los algoritmos de clasificación una vez que tienes una fuerte sensación de recursión y divide y vencerás. Hasta entonces, la mayoría de ellos se sienten como magia negra.
Brian

74
¡Soy un INVESTIGADOR en algoritmos de clasificación! Y TODAVÍA se sienten como magia oscura.
SPWorley

14
Una vez tuve una línea de código en mi programa que era larga y complicada y no tenía ganas de dividirla o explicarla (era una fórmula de iluminación complicada), así que puse todo en una línea y #define ' d ser DARK_MAGICK, y el único comentario fue una advertencia contra el intento de desentrañar los misterios de la magia oscura
Alex

2
Bogosort es el más misterioso de todos.
Alex Beardsley

50

Ese XML sería un formato de datos verdaderamente interoperable y legible por humanos.


77
XML no es una panacea, pero no me gustaría volver a los días en que regularmente veía aplicaciones que trataban de comprimir datos relacionales en archivos csv únicos.
Tony Edgecombe

44
es una sintaxis interoperable, de eso no hay duda. Es solo que la sintaxis es a menudo el aspecto menos importante de cualquier solución.
Simon Gibbs

2
+1, también puede agregar pequeño y rápido a la lista de deseos.
MarkJ

1
Es cierto, pero una mejora con respecto a CSV y longitud fija donde sin la documentación está jodido.
PeteT

77
Me encanta XML por la estandarización que trajo a los formatos de datos y por manejar correctamente las codificaciones de caracteres. Sin embargo, odio lo que a veces se hace usando XML.
Joachim Sauer

48

Ese C ++ era de alguna manera intrínsecamente mejor que todos los demás lenguajes.

Esto lo recibí de un amigo un par de años antes que yo en la universidad. Lo guardé conmigo durante un tiempo embarazosamente largo (me estoy sonrojando en este momento). Fue solo después de trabajar con él durante 2 años más o menos antes de que pudiera ver las grietas de lo que eran.

Nadie, y nada, es perfecto, siempre hay margen de mejora.


55
"mejor" te traerá toneladas de comentarios menos que odiosos. Pero diría que es uno de los más rápidos, flexibles y libres de obstáculos. También es uno que lleva a tu juventud a aprenderlo adecuadamente, solo para descubrir que puedes hacer más o menos la misma aplicación. (aunque requiere un poco más de una tonelada o dos de carbón generador de electricidad) con Java o C #.
jpinto3912

@JP: Estoy contento con mi elección de palabras :)
Binary Worrier

La productividad es más importante en el mundo de las aplicaciones empresariales. Por supuesto, hay algunos nichos que requieren C ++, y la única opción.
Shaw

77
Siempre he asumido que C ++ es peor que el ANSI C directo, simplemente porque el tipo de problema en el que he visto entrar a los programadores de C ++ es mucho más complicado que el tipo de problema en el que he visto entrar a los programadores de C ++.
Nosredna

1
En realidad, el lenguaje que es mejor que todos los demás es Common Lisp. C ++ no es malo, sin embargo.
David Thornley

47

Creí que crear programas sería exactamente como lo que se enseñó en clase ... te sientas con un grupo de personas, revisas un problema, encuentras una solución, etc. etc. En cambio, el mundo real es "Aquí está mi problema, lo necesito resuelto, ve "y diez minutos después obtienes otro, dejándote sin tiempo real para planificar tu solución de manera eficiente.


24
Creo que eso se llama vida.
Robin Day

9
hmmm .. es hora de que rescates a esa compañía. ..
jpinto3912

8
@ jpinto3912: No. Porque la próxima compañía también será parte de la vida (ver comentario anterior).
Treb

42

Pensé que los patrones de diseño convencionales eran increíbles, cuando se introdujeron en una clase de CS. Había programado unos 8 años como pasatiempo antes de eso, y realmente no tenía una comprensión sólida de cómo crear buenas abstracciones.

Los patrones de diseño se sentían como magia; podrías hacer cosas realmente buenas. Más tarde descubrí la programación funcional (a través de Mozart / Oz, OCaml, luego Scala, Haskell y Clojure), y luego entendí que muchos de los patrones eran simplemente repetitivos, o complejidad adicional, porque el lenguaje no era lo suficientemente expresivo.

Por supuesto, casi siempre hay algún tipo de patrones, pero están en un nivel superior en lenguajes expresivos. Ahora he estado haciendo codificación profesional en Java, y realmente siento el dolor cuando tengo que usar una convención como visitante o patrón de comando, en lugar de la coincidencia de patrones y las funciones de orden superior.


"Muchos de los patrones eran simplemente repetitivos, o complejidad adicional, porque el lenguaje no era lo suficientemente expresivo". La expresividad es simplemente un código repetitivo integrado en el idioma.
Desconocido

44
No es cierto, ¿cómo es normal tener cosas de primera clase en lugar de limitar las capacidades de un programador, como en el caso de las funciones de orden superior? Lisps son un hermoso ejemplo de esto.
egaga

38

Durante los primeros años que estuve programando no entendí que 1 Kbyte es técnicamente 1024 bytes, no 1000. Siempre estaba un poco perplejo por el hecho de que el tamaño de mis archivos de datos parecía ligeramente diferente de lo que esperaba ser.


114
Los fabricantes de discos duros todavía no se han dado cuenta ...
Michael Myers

10
@mmyers Creo que te refieres a los vendedores de discos duros, ¿verdad? ¿O los discos están realmente construidos así?
Instantsoup

16
Oye, deja de odiar a los kibi. MeBi y KiBi son al menos unbambiguobus.
bzlm

21
Kilo significa 1000, Mega significa 1000000, Giga significa 1000000000. Son los fabricantes de RAM y sistema operativo los que se equivocaron, no los fabricantes de unidades.
Mark Ransom

39
¿Nadie lo va a hacer? ¿Seriamente? Bien, lo haré ... xkcd.com/394
Erik Forbes

36

Esa condición se verifica como:

if (condition1 && condition2 && condition3)

se realizan en un orden no especificado ...


15
¿En que idioma? Lenguajes como C / C ++, Java y Python garantizan que las condiciones se evalúan de izquierda a derecha y que la evaluación se detiene en la primera condición que devuelve falso. Es parte de la especificación de idioma. Supongo que la mayoría de los otros idiomas ofrecen la misma garantía.
Clint Miller

44
@Clint: Sí, por lo tanto, "eso resultó ser incorrecto".
bzlm

Sí, este es genial. hace que las cosas de la arruga como si (myList! = null && myList.Count> = 0) {do stuff ();} sea mucho más fácil
Zack

44
en realidad, este depende del idioma y evaluará todas las condiciones (no el acceso directo). Y he visto a muchas personas usar And (&) en VB en lugar de AndAlso (&&)
Lucas

2
. . . En realidad, también se bloqueará en VB.net a menos que use el comentario de AndAlso re Lucas
Binary Worrier

35

Que mi programación sería más rápida y mejor si la realizara sola.


Pero no se puede conseguir tan feo como par- Programación :-) excepto quizás su código
Huevo

33
Todo eso depende de la otra persona. =)
JohnFx
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.