Cosas que deberías haber aprendido en la escuela pero a las que no les prestaste atención en ese momento [cerrado]

42

Esta pregunta me hizo pensar que había una mejor pregunta que hacer.

¿Qué aprendiste en la escuela que no te importaba en ese momento, pero que resultó ser útil o que tuviste que volver a aprender en el lugar de trabajo porque lo tenías en la escuela, pero no retenías la información y la necesitabas? (Me refiero a trabajos relacionados con software).

Creo que esto podría ayudar a los estudiantes universitarios a identificar algo de lo que realmente deberían prestar atención mientras están en la escuela.

HLGEM
fuente
16
Lamento no haber pasado más tiempo aprendiendo idiomas hablados (solo hizo clic para mí 10-20 años después), pero esto no está relacionado con la programación.
LennyProgrammers

Respuestas:

36

La mayoría de los desarrolladores que he visto recién salidos de la escuela no tenían mucha experiencia con el desarrollo OO . Han oído hablar de él, pero lo más importante es 'poner cosas en las clases'.

En la escuela obtienes muchos ejemplos sobre autos y personas que se pueden colocar en el marco OO. Esto te enseña polimorfismo, sobrecarga y cosas así. Más bien cosas "básicas". Es bueno saber estas cosas y cómo funcionan, pero nunca obtuve un ejemplo de uso en el mundo real para esto. Creo que es importante mostrar a los estudiantes algunos escenarios del mundo real en los que se usa algún diseño.

Otra cosa que me perdí en la universidad es el uso (o mal uso) de patrones de diseño utilizables . Creo que en estos días los patrones más importantes deberían introducirse en algún lugar a fines del primer año o principios del segundo año. Los estudiantes deben familiarizarse con ellos.

Escribir código limpio es algo que no se enseña (suficiente) en la escuela. Podríamos hacer un verdadero desastre del código y aún así obtener un A +. "Si la aplicación funciona, está bien". Era el lema. Los estudiantes deben aprender a escribir código limpio y de alta calidad y recibir recompensas por ello, esto también significa refactorizar y usar los patrones o las mejores prácticas que han aprendido.

Por supuesto, los estudiantes ansiosos aprendieron todas estas cosas por sí mismos, pero otros que no estaban tan ansiosos no lo hicieron. Esto podría colocarse por falta de motivación, o simplemente no sabían dónde o cómo mirar. Cuando pagas mucho dinero por una escuela, creo que realmente deberían enseñarte estas cosas semi-avanzadas.

Además, algo de escritura decente (profesional) es una habilidad que falta para la mayoría de las personas. Lástima, ya que es muy importante en el mundo real. Lo más importante es poder aclararse en su idioma nativo. Si no puede escribir claramente en su idioma principal, es difícil comunicarse en una empresa.

No sé si puedes enseñarle a alguien a escribir a esta edad, ya debería estar familiarizado con esta habilidad. Se podría repetir lo que se enseña en la escuela secundaria. Tal vez enseñar a los estudiantes cómo escribir comentarios y documentación técnica. Todavía me resulta difícil escribir documentos técnicos, ya que nadie parece saber cómo hacerlo o cuál es el formato predeterminado.

Jan_V
fuente
1
Esta respuesta no es OP, pero a su complemento: lo que en caso de que te han enseñado mejor / más profunda
davka
1
El propósito de una educación de pregrado es presentar al estudiante la amplitud de un campo. La especialización es lo que se hace a nivel de posgrado. Espero que los candidatos recién salidos de la universidad sean expertos en cualquier cosa. Espero que los recién graduados universitarios tengan un conjunto completo de fundamentos que abarquen la brecha entre la organización informática y el análisis de algoritmos básicos. No me importa si un candidato ha memorizado los límites asintóticos de todos los algoritmos de búsqueda y clasificación. Prefiero un candidato que pueda determinar los límites asintóticos para una pieza de código del mundo real.
bit-twiddler
3
¿Soy el único que se avergüenza cuando se usa 'aprender' (incorrectamente) en lugar de 'enseñar'?
dr-ene
1
@ dr-jan: Gracias por señalarlo. Editado
Jan_V
1
En mi opinión, la única forma en que se podría enseñar la escritura seria de software es tener cursos de varios años en los que puedas ver tus errores pasados.
Paul Nathan
120

Chicas. Puedes pensar que estoy bromeando pero no lo estoy.

No te vuelvas loco ni nada, aún necesitas aprender las cosas académicas. Pero también necesita pasar un tiempo aprendiendo sobre las personas, de las personas que lo rodean.

Eso incluye a la mitad de la humanidad que tiene intereses y actitudes completamente diferentes a las de usted y sus amigos, pero con quienes aún querrá llevarse bien.

Ben
fuente
16
Desearía poder darle más votos a favor.
5arx
3
Pasar más tiempo con personas que no asimilan las computadoras en general es algo bueno (tm)
Rob Allen
16
Más de 48 personas que votaron por esto simplemente suspiraron en silencio.
George
De lo contrario, se conoce como 'Usuarios'.
Gary Willoughby
61

Siento que debería haber puesto un 42% más de energía en las estadísticas.

FrustratedWithFormsDesigner
fuente
10
Mi hermano y yo le dijimos a nuestra madre el año pasado que desearíamos haber estudiado más estadísticas. Soy un cuant y él es médico. Ah, y mi madre es un profesor de estadísticas ...
chrisaycock
44
@davka: aparece más a menudo en las pruebas, especialmente las pruebas de rendimiento. También en análisis de datos, que tengo muchos de estos días.
FrustratedWithFormsDesigner
44
@davka: trabajo en una empresa basada en datos y un buen análisis estadístico sería útil para que los desarrolladores puedan presentar sus hallazgos sobre 'por qué el código x es mejor que el código y', o 'sí, puedo demostrar que si me lo permiten para invertir 2 semanas para mejorar esto, el análisis estadístico muestra que se acelerará en un x% '. Saber cómo aplicar técnicas estadísticas para diseñar sus experimentos es realmente el objetivo aquí.
wkl
3
Creo que hay un 70 +/- 2% de probabilidad de que debería haber tomado estadísticas.
Zachary K
10
El 60% del tiempo, funciona todo el tiempo.
Mateo leyó el
51

Escribir sería uno de los más grandes para mí. Sin embargo, no creo que esto se limite solo a los desarrolladores.

Irlanda
fuente
el desbordamiento de pila y los blogs me han ayudado mucho en eso.
Svish
36

Programación funcional En ese momento parecía un enjambre de paréntesis que no podía hacer nada útil. Ahora que las expresiones lambda están llegando a un uso generalizado, he tenido que volver a entrenar mi cerebro para pensar de esa manera. En la universidad solo quería llevar a LISP y Scheme lo más lejos posible en el espejo retrovisor y nunca mirar atrás. Si tuviera alguna idea de cuán útiles podrían ser algunos aspectos de la programación funcional, habría prestado más atención.

Jason
fuente
99
+1. Creo firmemente que para alguien que no sabe programar, la programación funcional es más fácil de aprender que la programación imperativa, que la programación imperativa es fácil de aprender si conoce la programación funcional, y que la programación funcional es difícil de aprender si usted aprendí la programación imperativa primero. Por lo tanto, tiene sentido no sólo para enseñar programación funcional, pero la tecnología es primero , y lo más importante no hacen tal trato f-ing fuera de él ! Me encanta cómo lo hace SICP. La primera tarea no aparece hasta un par de cientos de páginas, y ni siquiera te das cuenta.
Jörg W Mittag
1
+1. Scheme me apagó los paradigmas funcionales durante varios años en la universidad, ya que tenía experiencia en C y C ++ antes de tomar ese curso. No lo mencioné como algo a lo que sentí que debería haber prestado más atención porque en mi último año, tomé un curso de idiomas y usé SML y realmente lo disfruté, y también disfruté de Lisp. Probablemente sea solo el producto de las experiencias en la universidad, lo que me hace mucho más fácil entender cómo usar esos paradigmas. También me enseño Scala ahora y lo disfruto mucho. : D
wkl
1
Generalmente estoy de acuerdo (más funcional en la escuela) pero es imposible demostrar que es más fácil o más difícil aprender programación funcional basada en el estilo que aprendiste primero.
Kevin
34

Expresiones regulares. Recuerdo claramente haberlos volado en la universidad. Han sido indispensables para el trabajo.

patrickmcgraw
fuente
2
Sin embargo
billy.bob
¡Sí! Recuerdo haber pensado cuánto lo odiaba en ese entonces ... Lo aprendí para la clase y lo eliminé de mi mente hasta que lo volví a necesitar varios años después. Luego me estaba maldiciendo porque tenía que volver a aprenderlo.
Bmw
44
@ m.edmondson, las expresiones regulares son excelentes para tareas simples. Es posible que esté haciendo algo mal si los está usando en su código (después de todo, analizar los combinadores es mucho mejor), pero para su búsqueda y reemplazo típicos en un editor de texto están bien.
SK-logic
3
Las expresiones regulares son una gran herramienta para usar en la línea de comandos y en editores potentes como vim o emacs. No solo para usar en código.
Stephen Paulger
1
@ m.edmonson, no, ¡las expresiones regulares son herramientas fantásticas que deben elegirse primero ! Para aquellas situaciones en las que se aplican, saber cuándo no lo hacen es donde se requiere experiencia.
33

Se toma mi respuesta favorita (estadísticas), así que daré mi segunda respuesta favorita. Notación Big-O y conocimiento de la eficiencia de varios algoritmos clave. Para mí es menos un "arma secreta" que las estadísticas, pero sigue siendo muy valioso.

btilly
fuente
2
Tal vez simplemente no estoy escribiendo cosas lo suficientemente complejas, pero la única vez que tuve que conocer a Big O fue en una entrevista en una empresa de tecnología de punta. Entonces, aunque lo aprendí hace 20 años, ya que no lo uso, pero una vez cada 10 años más o menos no lo recuerdo.
Bill Leeper
2
@ bill-leeper: Mi experiencia es que Big-O no es algo que usas todos los días, pero es algo que, cuando lo sabes, de vez en cuando te ayuda a resolver un problema que no sabías que tenías, o de lo contrario no habría descubierto. Si no lo sabes, nunca tienes esos conocimientos y no sabes lo que te estás perdiendo.
btilly
1
@bill, big-O es solo una forma formal de decir que debes tener cuidado con la cantidad de bucles que colocas dentro de otro cuando necesitas escalar. La mayoría de los programadores aprenden eso de una forma u otra sin tener que saber el nombre formal.
23

Desearía haber escuchado lo que mi maestra me dijo cuando tenía 14 años. Desafortunadamente no puedo decirte qué fue, porque no escuché.

usuario4051
fuente
21

Tiene que ser el curso de Lenguaje Finito y Teoría de Autómatas.

Pensé que era demasiado teórico, hasta que mi trabajo me exigió hacer un compilador de lenguaje específico de dominio desde cero.

Fanático23
fuente
44
Whoa Que haces exactamente ? Si no te importa que pregunte =)
Fouronnes
1
@otibom: trabajo con semiconductores, y tiene sus propios lenguajes específicos de dominio con requisitos de rendimiento razonablemente estrictos.
Fanatic23
18

Yo diría C, así como UNIX. Aunque aprendí UNIX poco después de la universidad, creo que me habría beneficiado haberme enraizado más con UNIX y C antes.

Craig Maloney
fuente
UNIX? ¿Eso todavía se enseña en las universidades?
apoorv020
1
Debería ser ... o bueno, más como Linux. Cualquier programador debe saber un poco de bash (u otro shell).
Por Wiklander
17
  • Inteligencia artificial / Minería de datos: tomé la clase, me aburrí, años después estoy aprendiendo sobre temas como la inteligencia colectiva por mi cuenta. El análisis de grandes conjuntos de datos es un gran problema en mi trabajo y en trabajos anteriores.
  • Teoría / diseño de bases de datos: una vez más, tomé la clase, me aburrí, así que he estado aprendiendo cosas sobre bases de datos.
  • Solo matemática de alto nivel y técnicas matemáticas interesantes en general: tomé 4 clases de cálculo, álgebra lineal, estadística, probabilidad, discreta ... pero sentí que también debería haberlo hecho:
    • Métodos numéricos
    • Métodos estadísticos avanzados, incluso cosas como las cadenas de Markov, de nuevo, relacionadas con el análisis de grandes conjuntos de datos.
  • Interacción humano-computadora: en la escuela no sentí que esto fuera de ninguna manera útil para lo que estaría haciendo en mi trabajo (me gustaba trabajar en un nivel bajo o detrás de escena), pero en cualquier trabajo que he tenido, la usabilidad ha sido un foco en ocasiones.
  • Un segundo idioma: siempre he tenido un don para los idiomas, pero en la universidad no aprendí un idioma y me resulta difícil tratar de enseñarme japonés.
wkl
fuente
13

Escritura técnica. Paso mucho tiempo escribiendo requisitos, comunicándome con clientes y compañeros de trabajo. Esta es un área en la que tuve una clase de 1 crédito en la universidad. La única otra clase que realmente ayudó en mi carrera fue otra clase de 1 hora de crédito. Eso fue en la programación C. El resto, aunque interesante y probablemente ayudó a mis habilidades analíticas generales, no ha sido realmente un beneficio directo para mi carrera.

De acuerdo, fui a la escuela hace 20 años y C era considerado vanguardista en el departamento de Ingeniería Eléctrica. La gente de CS estaba haciendo algunas cosas con Lisp y C ++, pero probablemente todavía no tanto OO como espero que suceda con los graduados de hoy.

Bill Leeper
fuente
11

Documentos de diseño

Siempre asumí que alguien más sería el que crearía estas cosas, o que solo serían documentos simples. No son simples en absoluto y mi equipo es lo suficientemente pequeño como para hacer mis propios documentos de diseño.

Rachel
fuente
alguien más los escribirá si no soy bueno en eso, que es lo que me gusta.
Kevin
10

Segunda lengua extranjera. Ruso en mi caso. Muchos libros, recursos y más en este idioma en particular en mi espacio circundante.

lfx
fuente
@FrustratedWithFormsDesigner sí ahora, pero cuando era niño ... :)
lfx
Estudié francés y alemán personalmente, y de hecho pasé algún tiempo en Alemania. Es algo que todos deberían experimentar.
Ken
12
De Verdad? ¿Recursos relacionados con la programación en ruso? Soy un hablante nativo de ruso, pero casi nunca uso eso cuando busco cosas en la programación. La mayoría de las veces, escribir una consulta en inglés en Google me da una respuesta. Además, los libros técnicos en ruso suelen ser muy malas traducciones del inglés.
Dima
@Dima, qué situación es hoy en día no lo sé, pero cuando estaba en collage y en la escuela, todos los maestros decían eso.
lfx
3
@FrustratedWithFormsDesigner: eso lo creeré. Ciertamente hay mucho material relacionado con las matemáticas en ruso. Pero si está hablando de temas relacionados con la computadora, es mejor que sepa inglés.
Dima
8

Desde el lado CS de las cosas:

  • Diseño de interfaz de usuario
  • Pruebas
  • Control de versiones
  • Concurrencia

De la categoría de todo:

  • Escritura técnica
  • Comunicación del habla
  • Habilidades de estimación de tiempo
Tyanna
fuente
+1 para pruebas y control de versiones. En serio, escuchamos mucho que las pruebas eran muy importantes ... aunque nunca aprendimos cómo hacerlo ... (y eso no fue nuestra culpa. Simplemente nunca tuvimos nada al respecto)
Svish
7

Vector de matemáticas y cálculo. Los tenía, pero mis profesores eran terribles y en realidad no enseñaban las materias. Pero como alguien que está muy interesado en la programación de gráficos ... una mejor base de matemática vectorial habría ayudado.

Gran maestro B
fuente
7

Obviamente, Historia y Literatura. El problema es a menudo, la escuela no los hace interesantes.

jokoon
fuente
Cuando aprendan a aquellos que estudian en casa, pueden ser mucho más interesantes.
Matthew Rodatus
6

Electrónica

No tenía muchas cosas relacionadas con el software en la escuela . Ah, informática, pero lo cancelé. :) Pero fue fácil aprender más tarde. Mientras que la electrónica, a menudo no lo entiendo. Microcontroladores, PWM, GPIO - wtf? Desearía entender las cosas.

usuario desconocido
fuente
Tomé electrónica en la escuela secundaria (el equivalente a la UE) porque no había una opción de TI "pura". Todavía contento hasta el día de hoy que no solo sé cómo usar las computadoras y su hardware periférico, sino también cómo funcionan.
Vincent Vancalbergh
5

Redes distribuidas / informática . La programación no es un desafío, pero los requisitos previos en la arquitectura actual son un conocimiento profundo de los conceptos distribuidos.

Se ofreció un curso detallado como optativo, pero tuvo que elegir entre esto y AI: por lo tanto, no es realmente un arrepentimiento.

CMR
fuente
5

Patrones de diseño: la forma en que se presentaron en realidad no te dijo cuán útiles son, desde entonces he leído un par de libros sobre ellos y creo que son increíblemente útiles.

Omar Kooheji
fuente
Esto me molesta en general acerca de la programación de capacitación, somos aceptables para explicar el cómo pero no el por qué. Y no hay buenos ejemplos prácticos. Es por eso que tenemos personas que usan las técnicas de trabajo para el problema, escogen la primera que se les ocurre que funcionará sin el conocimiento para decir que esta otra técnica es mejor para este problema en particular.
HLGEM
4

Unix, Shellscripting, C. Tuve la oportunidad de aprenderlo bien en la escuela, pero tuve que hacerlo más tarde en el trabajo.

usuario281377
fuente
4

Material no informático:
Personalmente, desearía tener un idioma nativo como la mayoría de las personas normales por aquí. Con eso quiero decir que la mayoría de las personas nacieron hablando un idioma principal y tal vez eligiendo uno o dos más tarde. En esta situación, los idiomas adicionales generalmente no afectan el idioma nativo porque ya tiene una base sólida que abarca el habla, la escritura y la escucha. Crecí hablando, escribiendo y escuchando tres idiomas distintos simultáneamente. Aunque siempre me fue bien en las clases de idiomas tanto en la escuela como en la universidad, desearía tener fluidez completa en UN idioma. Esto hace que tenga que pensar un poco por una fracción de segundo antes de formular una respuesta. Algunas personas lo notan y concluyen que soy demasiado tímido (lo cual no está mal hasta cierto punto).

chiurox
fuente
4

Ciencias económicas. Puede ser aburrido (y un poco cruel), pero de todos modos es el único que es realmente esencial en esta sociedad. Después de eso, estadísticas.

Víctor Pimentel
fuente
4

Creo que las tres clases que me dieron la mayor comprensión de cómo operan las computadoras en la ejecución de software (que esta comprensión permite una programación más óptima) fueron:

Compiladores de sistemas operativos en lenguaje ensamblador

Quizás sea muy fácil pensar que estas clases no son tan útiles a menos que entres en una carrera específicamente enfocada en cualquiera de estas cosas, pero incluso si eres un desarrollador web y no utilizas ninguna de estas directamente esa comprensión subyacente aún sería extremadamente útil para codificar de manera efectiva.

Kenneth
fuente
3

Hay alrededor de una docena de clases que desearía haber tomado en la universidad pero no lo hice. Principalmente no CS. Fotografía, General Chem, ¡más escritura!

Zachary K
fuente
3

Es curioso el número de personas que dicen artes liberales: yo era un experto en ciencias cognitivas (Filosofía / CompSci / Anatomía) ... Terminé cambiando a Filosofía / CompSci con una gran especialización en inglés (podría haber obtenido un BA, pero no me molesté en tomar los 101 que me había saltado).

Me llevaría una semana de historias contarles sobre toda la basura que recibí de mis compañeros de CS por tomar esas clases de artes liberales. No importa que media docena de clases de lógica hicieran más por mi programación que cualquier cantidad de cálculo. No importa que todos mis mejores cursos de IA fueran cursos de filosofía. No importaba que hubiera NIÑAS en mis clases de inglés. No, no, era una especie de poser poco serio para tomar esos cursos.

Sin embargo, anímate. Al menos que no tiene que explicar su educación cada vez que alguien se ve en su hoja de vida.

Satanicpuppy
fuente
¿Podría explicar qué quería decir con "mis mejores cursos de IA fueron cursos de filosofía"?
Mark C
@ Marcos: "Ciencia Cognitiva", que era mi principal original, es básicamente nada , pero la IA, y en gran parte compuesta de la filosofía. Hay dos tipos de filosofía: analítica y continental. Toda la estúpida mierda es continental. Analítico es lógico, engranaje. ciencia, lingüística y cosas así.
Satanicpuppy
+1: Como estudiante de filosofía, tomé una clase llamada Filosofía de la mente. Esta clase se dedicó básicamente a las máquinas de Turing. Mi asesor de Filosofía era un estudiante de CS en pregrado y mi asesor de CS en realidad tenía su Doctorado en Filosofía.
Morgan Herlocker
+ 1: "no tienes que explicar tu educación". Y ahí estaba, pensando que las cosas eran diferentes en los Estados Unidos / Reino Unido ... Sé exactamente lo que quieres decir.
Raveline
3

Ecuaciones cuadráticas y trigonometría.

Muy importante en la escritura de software para las disciplinas de ingeniería tradicionales.

angryITguy
fuente
No computa ... dado que la mayoría de los buenos programadores son ingenieros, ¿por qué alguien que carece de sus habilidades aritméticas básicas escribe software para disciplinas de ingeniería cuando hay un montón de ingenieros que entienden las matemáticas, la física y la informática? ?
Ben Voigt
@Ben. Lo creas o no ... MUCHAS personas lograron entrar en el desarrollo de software y no tienen capacitación formal. Esto es probablemente antes de "tu tiempo". Yo siendo uno ... logré aprenderlo, pero habría sido mucho más fácil si hubiera prestado atención en la escuela.
angryITguy
En caso de que no fuera obvio, estoy abogando por que el software de ingeniería sea escrito por ingenieros que no estén capacitados en desarrollo de software. La ingeniería de software no es difícil de aprender si has sido entrenado para pensar lógicamente. OTOH aprender a resolver problemas de ingeniería automáticamente, si uno carece de habilidades matemáticas básicas como ecuaciones cuadráticas, será casi imposible.
Ben Voigt
@ben. Aquellos que carecen de habilidades de "matemáticas básicas" ahora se llaman consultores de redes sociales y hacen mucho más que ingenieros.
angryITguy
@ guilio: estoy respetuosamente en desacuerdo. Hay algunos ingenieros en la parte superior que ganan una cantidad increíble de dinero (generalmente los llamamos "inventores", pero utilizaron habilidades de ingeniería para diseñar el producto). Luego hay un pequeño grupo de los consultores de medios más buscados. Luego, el resto de los ingenieros competentes, debajo de ellos, los ingenieros incompetentes y los consultores de medios de base se mezclan. Y todos ganan más que un graduado universitario promedio con un título en matemáticas que enseña ecuaciones cuadráticas a la próxima generación de ingenieros.
Ben Voigt
1

Ya no presté mucha atención a los compiladores como debería haberlo hecho.

usuario6791
fuente
1

CS / Math: más lógica, álgebra, teoría de categorías. Cosas más fundamentales y menos aplicadas: comprender las cosas aplicadas cuando conoces bien los fundamentos es mucho más fácil que al revés, y más fructífero.

(Tenía A en las estadísticas, pero tardé mucho en vincularlo con las necesidades reales de programación, olvidé mucho).

'Humanidades': lenguaje natural, escritura, formulación, comprensión y comprensión. No parece importante hasta que te unes a un equipo de más de 2-3 compañeros piratas informáticos, es decir, en la llamada "vida real".

9000
fuente
1

Gráficos por computadora (representación 3D en opengl / directx)

Sinceramente, estaba muy interesado en ello, pero estaba tan ocupado que no podía dedicar el tiempo que me hubiera gustado. Se convirtió en una tarea en lugar de un hobby. Creo que tendré que recoger un libro para que me interese de nuevo.

Joe Phillips
fuente