¿Son buenos los físicos para programar?

Tengo un doctorado en física, trabajé durante 15 años en investigación y luego me cambié a un trabajo en la industria del software.

La sorpresa para mí, que quizás no debería ser una sorpresa, fue que mi carrera como físico programador no me había preparado para el desarrollo de software.

Para empezar, el desarrollo de software no se trata solo de escribir código; Es el flujo de trabajo de planificación, manejo de tickets, pruebas, diseño del trabajo en equipo, comunicación con el cliente o propietario del producto. Ahora programa para alguien más, no solo para usted.

En segundo lugar, incluso cuando escribe código, lo hace a una escala mucho mayor: ¿creía que un proyecto de 1000 líneas en 4 archivos era grande? – y se da cuenta del valor del código limpio y de seguir las mejores prácticas, así como el control de versiones y un buen IDE.

Luego, dependiendo de dónde trabajes, tendrás que ser más versátil; Un producto de software comercial no es una simulación. Lo más probable es que implique cierta comunicación a través de las computadoras y una interfaz gráfica de usuario, por lo que incluso si trabaja principalmente como desarrollador de back-end, no puede salirse con la suya sin saber qué es un puerto o los componentes básicos de una GUI, y podrá tiene que aprender al menos algunos Javascript y HTML.

Por último, y en realidad lo más difícil para mí, fue tener que dominar no solo dos o tres lenguajes de programación, sino también mantener y manejar bibliotecas y paquetes que los acompañan, obtener las versiones correctas de esos y las herramientas para manejar todo eso. Luego, asegúrese de que funcione y se pueda implementar en la computadora de otra persona, tal vez incluso en diferentes sistemas operativos. En la investigación de física, es posible que deba aprender a vincular a LAPACK o FFTW; eso no te prepara.

Dicho todo esto, solo puedo estar de acuerdo con todos aquellos que han enfatizado que los físicos a menudo son muy aptos para convertirse en programadores. Tienen una mentalidad analítica y saben cómo resolver problemas. Aprenden rápido y, por lo tanto, no tienen problemas para adaptarse a las diferentes condiciones que describí anteriormente. Sí, los físicos a menudo son buenos programadores, o pueden aprender fácilmente a serlo.

Imagine un programador que no ha tomado clases de ingeniería de software, que es el único usuario de su código, que no tiene que mantener ningún fragmento de código durante más de unos pocos meses, y nunca se le ha pagado por escribir con calidad de producción. código.

Ese tipo de programadores escriben códigos incorrectos, y eso es algo bueno. Puedes hacer física increíble con un conocimiento rudimentario de C, y obligar a la mayoría de los físicos a convertirse en buenos programadores solo significa que se hace menos física.

Una vez que el código tiene que funcionar para más de una persona durante más de un año, los físicos comienzan a convertirse en buenos programadores.

Realmente depende del físico. Algunos físicos toman cursos de informática en la universidad o si están haciendo un trabajo numérico después, intentan educarse más adelante. Por ejemplo, tomé casi suficiente curso de CS en Waterloo para obtener un CS CS y he intentado mucho mientras tanto para mejorar mis habilidades. Me considero un buen programador (aunque Richard Muller no cree que sea un físico real). Otros físicos se contentan con piratear códigos Matlab no estructurados e indocumentados sin ningún intento de eficiencia porque, oye, “hace el trabajo”.

Una gran cantidad de código científico es de calidad abismal y creo que es un gran problema. Por ejemplo, una vez trabajé en un GCM oceánico que consistía en aproximadamente medio millón de líneas de código Fortran en su mayoría indocumentado. Todas las opciones estaban codificadas mediante las directivas #ifdef y se tardó más de media hora en compilar. Uno de los postdoctorales dijo que le llevó más de un año lograr que funcionara correctamente. No me sorprende que cuando descubrí que tampoco funcionaba para mí, comencé a codificar mi propio GCM en C ++. ¡En un año puedo codificar fácilmente mi propio GCM!

Cualquier tiempo dedicado a hacer que el código sea legible, hacerlo eficiente y fácil de usar será más que recompensado en el tiempo ganado mientras se ejecuta el código. También se devolverá cuando llegue el momento de modificar o extender el código o pasarlo a sus colegas, ya que no lo molestarán preguntándole cómo ejecutarlo o hacer esta o aquella modificación.

Un físico que haga un poco de programación aquí y allá para apoyar su investigación no será muy bueno en eso por las razones que han declarado las personas que ya respondieron a su pregunta.

Sin embargo…

Es muy probable que un físico que quiera cambiar de carrera y que participe en una capacitación adecuada (ya sea en un entorno académico o en el trabajo) se convierta en un muy buen programador porque las habilidades que hacen a un buen científico también lo convierten en un buen programador. , incluida la lógica, el razonamiento deductivo y la capacidad de lidiar con la complejidad.

La visualización del código a menudo es similar a tener en mente los detalles de un problema complejo, una especie de estructura cristalina intrincada, a medida que elabora una solución línea por línea. Un físico ha sido entrenado en el tipo de pensamiento disciplinado necesario.

Pero esa no es toda la historia. La creatividad también juega un papel importante, y allí vemos mucha más variabilidad de un individuo a otro, independientemente de sus antecedentes.

Yo creo que si.

Dennis Ritchie, el inventor de C y coinventor de UNIX fue físico.

Tim Berners-Lee, el inventor de la Web, es licenciado en física.

Douglas McIlroy, a quien puede agradecer por las tuberías UNIX y varias utilidades UNIX, también tiene un título en física.

Los físicos tienden a sobresalir en el tipo de pensamiento abstracto / lógico / lingüístico que se requiere para escribir software, y generalmente serán más aptos para ajustar el rendimiento del software que escriben, ya que los físicos generalmente se sienten bastante cómodos con los números, la experimentación y los datos. evaluación.

Escuché a alguien decir que los físicos tienden a escribir códigos más legibles que las personas de TI, porque los físicos llegan a la “física” de la tarea computacional en lugar de centrarse en la basura del modelo de objetos (como podría llamarlo Linus Torvalds) y otras veces cuestionables ” mejores prácticas “que solo sirven para ofuscar lo que realmente está sucediendo.

Los físicos con los que trabajé eran programadores terribles (junto con graduados en matemáticas). Pero finalmente entendí por qué.

Como contratista, solía desarrollar software para varios bancos comerciales diferentes, por lo que a menudo trabajé estrechamente con el analista cuantitativo, personas que construyen los modelos de negociación bancaria utilizados para calcular el precio de los derivados financieros. Los analistas cuantitativos eran en su mayoría graduados de matemáticas y física.

A veces insistieron en escribir el código ellos mismos. Su código siempre era horrible: inestable, lleno de fugas de memoria

Formulé una teoría y pregunté a algunos de los Quants, tenía sentido para ellos.

El problema es que su entrenamiento es fuertemente reduccionista. Cuando un graduado de Matemáticas o un graduado de Física ve una ecuación que se puede simplificar, no pueden evitarlo, todo su entrenamiento exige que simplifiquen esa ecuación a la expresión mínima irreducible.

Pero en la codificación, simplificar algunas estructuras es un desastre.

Por ejemplo, los punteros inteligentes ayudan a evitar pérdidas de memoria, al envolver punteros simples en la memoria de datos con un código adicional que ayuda al compilador a identificar cuándo esa memoria ya no es necesaria, por lo que la memoria no utilizada puede liberarse de nuevo al conjunto de memoria disponible.

Ninguno de los físicos o matemáticos usó punteros inteligentes, o cuando lo hicieron, los usaron mal. Incluso cuando les expliqué lo que eran, les mostré muestras de su código reelaborado para usar punteros inteligentes, no pudieron evitarlo: no les gustó la “complejidad” adicional, tuvieron que usar punteros crudos peligrosos, su entrenamiento, su condicionamiento, los obligó a pensar en los punteros inteligentes como desorden que había que simplificar.

Déjame responder con una pregunta filosófica. ¿Un físico que pasa su tiempo escribiendo software no físico sigue siendo físico o se convierte en programador?

Mucha gente termina trabajando fuera del campo que estudiaron en la escuela. Estudié ingeniería eléctrica y siempre he trabajado en software (eso es extremadamente común). Aquí tenemos una gran cantidad de especialidades en física, no porque necesitemos sus habilidades en física, sino porque necesitamos personas inteligentes y estaban disponibles. .

Si está preguntando si un físico recién salido de la escuela será un buen programador, la respuesta generalmente será no. Al mismo tiempo, una especialización en ciencias de la computación recién salido de la escuela tampoco suele ser un muy buen programador. Ambos tienen mucho que aprender. El físico tiene más que aprender.

Podrías usar un lenguaje como REXX o algo así, hace el trabajo bastante bien.

Creé un trozo de código bastante robusto que estaba escrito en tres idiomas diferentes y cuatro o cinco scripts, y luego introduje algunos archivos exe en la mezcla. Funcionó con algunas modificaciones durante más de un año en segundo plano.

Verá, no está implementando 1–2–3 en C o un solo archivo EXE de paquete. Estás reuniendo una multitud de scripts que están escritos en el programa más fácil que conoces, y solo los fragmentos apretados están escritos en algún script especializado.

Este era un programa de factorización matemática, escrito en el script dos COMMAND, un script REXX y un script UBASIC. Command-com comienza todo y gestiona las cosas tsr básicas que se necesitan. Todo lo que hizo este script fue iniciar un script rexx si existía un archivo, retomarlo desde donde se detuvo y luego iniciar el script UBASIC que hizo el programa REXX.

REXX es lento, pero tiene capacidades de manejo de cadenas buenas y buenas, por lo que se utilizó para crear un script UBASIC a partir de la configuración INI, las actualizaciones de bucle y algunas otras cosas extrañas. Creó la bandera en proceso.

Los scripts UBASIC básicamente se ejecutaron sin interruptores, porque los datos necesarios (como números de 140 dígitos) se crearon en REXX. Corrió rápido, pero cuanto menos escribía para él, más rápido corría.

Algunos contratiempos operativos me convencieron de la necesidad de crear archivos de semáforos de seguridad, por lo que solo se podía ejecutar una instancia a la vez en ese directorio.

Nada de esto es algo sofisticado de CS. No usamos tuberías o lo que sea, simplemente archivos de texto viejos, dentro y fuera, la salida final fue escrita por una variedad de programas, pero el código UBASIC se mantuvo al mínimo, porque era un código rápido y feo.

Tengo un BSC en física y decidí que quería ser desarrollador.

Hubo una pequeña cantidad de codificación cubierta en los laboratorios, pero finalmente iv tuvo que / aprender mucho sobre el buen código de Wright.

El simple hecho de ser físico no lo convierte en un buen desarrollador, ya que no se centra en escribir código, pero el haber estudiado física no le impide aprender cómo codificarlo, lo que hace que las cosas sean más fáciles de entender en los niveles más bajos y las matemáticas pueden ser útiles. para soluciones personalizadas y supongo que en una situación en la que la optimización se vuelve muy importante, aunque trato de no reinventar la rueda, solo la uso si lleva mucho tiempo encontrar la biblioteca correcta. También tuve que hacer un seguimiento de grandes ecuaciones en modelos como el análisis y esa habilidad es aplicable a los programas que planean la estructura y cuando estoy reelaborando el código.

Dudo que mi capacidad como desarrollador y mis programas hayan hecho las cosas de manera eficiente, existen errores de seguridad y luego mis programas anteriores que conozco lo estructuraron mal y cómo solucionarlo, pero no vale la pena refactorizarlo. También tengo muchas áreas que me gustaría mejorar y necesito que mi código sea revisado más, más proyectos conjuntos para la crítica constructiva, pero creo que sería peor y lo entendería menos sin mi título de física de 3 años, suponiendo que no estudié algo relacionado con la programación. sitio.

La mayoría de mis colegas de la universidad se han convertido en programadores. Entonces diría que los físicos pueden ser muy buenos en la programación, si deciden o se ven obligados a hacerlo. Estudiar física generalmente abre la mente más que casi cualquier otra cosa, por lo que aprender cosas se vuelve más fácil. Sin embargo, un físico que trabaje como físico no será muy bueno programando. Probablemente hay excepciones.

¿Estás buscando una correlación entre los dos por alguna razón? Porque para mí parece similar a preguntar si los jugadores de fútbol son buenos para patinar sobre hielo. Son atletas y el patinaje sobre hielo requiere algo de habilidad atlética después de todo. Pero no veo por qué asumirías o incluso buscarías esa correlación.

No definitivamente por sus genuinos intereses científicos. Quizás sus habilidades de abstinencia matemática sean útiles para evaluar nuevos algoritmos. En primer lugar, los informáticos tienen que pensar formal y estructuralmente.

En general, sí, porque el estilo de pensamiento para la física y la programación (y las matemáticas) es similar en comparación con alguien a quien le va bien en literatura o artes.

¿Son buenos los chefs en bicicleta? ¿Son buenos los maestros para conducir? ¿Son buenos los matemáticos en Karate?

Algunos son algunos no lo son.

More Interesting

¿Cuál es el estado de la computación cuántica?

Física: en la mecánica cuántica, muchas cosas están en estado 'desconocido' hasta que el observador real comienza sus observaciones. ¿Esto sucede cuando el observador es un animal? ¿Qué piensas?

¿Es posible construir una computadora cuántica muy primitiva en casa?

¿Se puede usar el enredo cuántico para eliminar el calor?

¿Cuánta mecánica cuántica debes aprender para poder construir una computadora cuántica (D-Wave)?

El universo tiene 10 ^ 80 átomos, pero el algoritmo de Shor puede factorizar en 10 ^ 500. ¿Cómo podría funcionar el algoritmo de Shor? ¿Podría ser QM 'interpretación de muchos mundos'?

Cómo entender qubits

¿Es [x, p] = ih / 2pi un axioma en mecánica cuántica?

Elegir un interés de investigación para la admisión a la escuela de posgrado en física: ¿Información cuántica o teoría cuántica de campos?

¿Qué trabajo en computación cuántica le entusiasma más?

Estudiante de primer año en Física y ya tomó la mecánica AP Physics C y E&M. ¿Cuál es el mejor libro introductorio sobre mecánica cuántica que tiene un gran contenido y lo explica de una manera para que yo pueda comprender y pueda inspirarme?

¿Jack Fraser resolvió el problema de la mecánica cuántica de David Griffith?

¿Qué ventaja obtenemos de usar Double DFS (DFS desde ambos extremos del gráfico) al resolver un cubo Rubik 2 × 2?

¿Por qué los operadores hermitianos están asociados con cantidades físicas en la mecánica cuántica?

¿Cómo medimos la velocidad de ejecución de cualquier programa?