4 ms·
It was my job for a while to work with scientists and their spaghetti Fortran codebases. One esteemed fellow still stuck to the FORTRAN IV of his youth (the ori
by stevedonovan 10y ago
It was my job for a while to work with scientists and their spaghetti Fortran codebases. One esteemed fellow still stuck to the FORTRAN IV of his youth (the original pasta language). It was amazing how much they could do with such old technology. The overriding impression ultimately was: "Never keep intellectual property just in code"
- walrus1066 10y agoI feel your pain. Scientists & data scientists are notorious for spaghetti code. Refactoring scientists code was how I got into software engineering. I used to be a scientist, and I found restructuring/modularizing the analysis code more fulfilling than the actual analysis.
- MereInterest 10y agoAs someone who is currently in that exact situation, and is considering switching away from science, how did the actual switch from science to software go?
- dfgasfjhjhsdojj 10y agoReally well. Dev work is way more fun than science! If you want some advice then: - Take some time to learn some CS fundamentals. - Make sure you know a language that someone that might employ you knows (just so they have a point of reference). - Write some toy applications in the field you want to move to.
- MereInterest 10y agoThank you, and it is very good that the path I'm looking towards is possible. I've been brushing up on algorithms, mostly as I run into them in things that I have been writing on nights and weekends. Primarily C++ and Python, with a smattering of C, bash, javascript, and php. I have probably about 6-9 months before graduation, so I've been starting to look at fields in more detail, rather than the nebulous concept of "industry" that you typically hear about in academia.
- walrus1066 10y agoFor me, the key things were : - get really proficient in a language, for me it was python, it is a solid, flexible, minimal boilerplate, can use it already for science applications (amazing libraries for it, like pandas, scipy etc) - understand databases, and how to interact with them - start testing (unit, integration and acceptance), this is super important, and key difference with scientist programming. When doing a take home test for a job interview, always include tests, even if you get the solution wrong, they will give you massive points for having tests. - start applying! You'll fail a lot, but you gain experience with each test and interview you do.
- MereInterest 10y agoThank you. I've been primarily working with C++ and Python, and consider myself proficient in both, so it is good to hear that Python is usable. I've been meaning to work more with databases, as I haven't interacted with them in particular. Maybe writing a mini-library catalog, as my bookshelves are starting to outgrow the haphazard google spreadsheet where their contents are currently recording. And yeah, testing is something that I try to do in my home projects, but 95% of the coding for research is throw-away code, and so I don't get much of a chance there.
- walrus1066 10y agoC++ and python are a suburb combo, they complement each other really well. If you master both, by that I mean not just the syntax, but the different patterns and styles you need to employ in static vs dynamic typed, understand the tradeoffs of both, you've pretty much mastered programming. Python also glues v. nicely with C, if a part of your code is v. CPU heavy, you can write it with cython, and then call the compiled code from python, as you would a normal python function, and it would run just as fast as native c. This is how all those python data libraries work under the hood (pandas, sklearn etc) Library catalogue is a great idea for DB learning, you'll learn how to model data, and the relations between them, using tables, foreign keys, primary keys etc. I'd recommend postgres for the DB. Again, python would be an excellent language for this, you can use sqlalchemy to define your tables, and query them. You can then use flask to provide a web interface for the catalogue.