- #1
Simfish
Gold Member
- 823
- 2
http://weareallinthegutter.wordpress.com/2010/12/22/astronomy-bottlenecks
What are your thoughts on this?
What are your thoughts on this?
Simfish said:What are your thoughts on this?
D H said:Dead on. From my experience, most scientists and engineers make for incredibly bad programmers. My opinion: The only reason computer science majors are not used to write our scientific /engineering programs is that most computer scientists fare even worse at doing science and engineering than we do at doing programming.
It isn't that hard to program well. We know what a good engineering design or a solid scientific theory looks like. We can learn what a well-constructed program looks like. It does take some training, however. It is a bit arrogant on our part to think that training is not required.
It's also a bit arrogant to think that it's not hard to program well.D H said:It is a bit arrogant on our part to think that training is not required.
Because bad programs cannot be fixed, they must be written as if the original had never existed. The difference between a program that works and one that works well is vastly greater than that between a program that works and one that doesn't work at all.darkhorror said:If they already have the programs that "work" why not just give them to a programmer and have them make it work well..
Negatron said:Because bad programs cannot be fixed, they must be written as if the original had never existed. The difference between a program that works and one that works well is vastly greater than that between a program that works and one that doesn't work at all.
That sounds awesome in theory, but works out rather badly when you actually have to figure out somebody's scientific computing code full of all sorts of crazy math, almost no comments, and lots of hacks to keep the code from crashing. I spend a good chunk of time using and rewriting a labmate's code to make it robust enough for my purposes and it's like pulling teeth to get an explanation of the code that makes any sense to me.darkhorror said:This is why you give the programs to the programmers and have them see what the program actually does. They can then make a program that gives the same results, but works much better and has more features.
In theory code cleanup would be a great task to farm out to undergrads, but the math involved in the programming makes it totally unfeasible a lot of the time.The people who write the astronomical codes discussed in the article are predominantly astronomy grad students.
One of the fun things about working with very large datasets is that I'm usually the only person in the room who cares about the space complexity as much (if not more than) the time complexity of any of the algorithms used to do the number crunching.Figuring out how to store, reference, and analyze that is all a programming task of large magnitude.
darkhorror said:If they already have the programs that "work" why not just give them to a programmer and have them make it work well.
Negatron said:It's also a bit arrogant to think that it's not hard to program well.
It is not hard to write effective code, merely to write efficient code. This was an issue 30 years ago when memory was expensive. This is no longer true. You can now write horribly inefficienct code and no one cares - aside from waiting for it to process.
I have a number of problems with the above. I am having a very hard time parsing your first sentence. For one thing, you are using two words, effective and efficient, that are synonyms / near synonyms of one another. For another, that parenthetical remark is a bit hard to parse. I think you are saying "It is not hard to write effective code. What is hard is writing efficient code." If that is the correct interpretation, I take exception to it.Chronos said:It is not hard to write effective code, merely to write efficient code. This was an issue 30 years ago when memory was expensive. This is no longer true. You can now write horribly inefficienct code and no one cares - aside from waiting for it to process.
D H said:Very few require students of science and engineering to take anything beyond an introductory computer programming class. A lot don't require *any* classes in computer science.
Chronos said:I trust an astrophysict's 'plodding' algorithms more than I would ever trust a programmer's ability to figure out what it is they are trying to calculate. Yes, the astrophysicist will not write programs as efficiently as an IT major, but, they still work.
Chronos said:It is not hard to write effective code, merely to write efficient code. This was an issue 30 years ago when memory was expensive.
This is no longer true. You can now write horribly inefficienct code and no one cares - aside from waiting for it to process.
And personally I think that's a good thing, since CS classes are often terrible for teaching application programming. What's not surprising is the number of astronomy Ph.D.'s that are terrible programmers, what is more surprising is the number of CS Ph.D.'s that are terrible programmers.
AMATH 581 Scientific Computing (5)
Project-oriented computational approach to solving problems arising in the physical/engineering sciences, finance/economics, medical, social, and biological sciences. Problems requiring use of advanced MATLAB routines and toolboxes. Covers graphical techniques for data presentation and communication of scientific results.
AMATH 582 Computational Methods for Data Analysis (5)
Exploratory and objective data analysis methods applied to the physical, engineering, and biological sciences. Brief review of statistical methods and their computational implementation for studying time series analysis, spectral analysis, filtering methods, principal component analysis, orthogonal mode decomposition, and image processing and compression. Offered: W.
AMATH 583 High-Performance Scientific Computing (5)
Introduction to hardware, software, and programming for large-scale scientific computing. Overview of multicore, cluster, and supercomputer architectures; procedure and object oriented languages; parallel computing paradigms and languages; graphics and visualization of large data sets; validation and verification; and scientific software development. Offered: Sp.
AMATH 584 Applied Linear Algebra and Introductory Numerical Analysis (5)
Numerical methods for solving linear systems of equations, linear least squares problems, matrix eigen value problems, nonlinear systems of equations, interpolation, quadrature, and initial value ordinary differential equations. Offered: jointly with MATH 584; A.
AMATH 585 Numerical Analysis of Boundary Value Problems (5)
Numerical methods for steady-state differential equations. Two-point boundary value problems and elliptic equations. Iterative methods for sparse symmetric and non-symmetric linear systems: conjugate-gradients, preconditioners. Prerequisite: AMATH 581 or MATH 584 which may be taken concurrently. Offered: jointly with MATH 585; W.
AMATH 586 Numerical Analysis of Time Dependent Problems (5)
Numerical methods for time-dependent differential equations, including explicit and implicit methods for hyperbolic and parabolic equations. Stability, accuracy, and convergence theory. Spectral and pseudospectral methods. Prerequisite: AMATH 581 or AMATH 584. Offered: jointly with ATM S 581/MATH 586; Sp.
CSE 410 Computer Systems (3)
Structure and components of hardware and software systems. Machine organization, including central processor and input-output architectures; assembly language programming; operating systems, including process, storage, and file management. Intended for non-majors. No credit to students who have completed CSE 351, CSE 378, or CSE 451. Prerequisite: CSE 373.
CSE 417 Algorithms and Computational Complexity (3)
Design and analysis of algorithms and data structures. Efficient algorithms for manipulating graphs and strings. Fast Fourier Transform. Models of computation, including Turing machines. Time and space complexity. NP-complete problems and undecidable problems. Intended for non-majors. Prerequisite: CSE 373.
CSE 446 Machine Learning (3)
Methods for designing systems that learn from data and improve with experience. Supervised learning and predictive modeling: decision trees, rule induction, nearest neighbors, Bayesian methods, neural networks, support vector machines, and model ensembles. Unsupervised learning and clustering. Prerequisite: either CSE 326 or CSE 332; either STAT 390, STAT 391, or CSE 312.
CSE 415 Introduction to Artificial Intelligence (3) NW
Principles and programming techniques of artificial intelligence: LISP, symbol manipulation, knowledge representation, logical and probabilistic reasoning, learning, language understanding, vision, expert systems, and social issues. Intended for non-majors. Not open for credit to students who have completed CSE 473. Prerequisite: CSE 373.
CSE 373 Data Structures and Algorithms (3)
Fundamental algorithms and data structures for implementation. Techniques for solving problems by programming. Linked lists, stacks, queues, directed graphs. Trees: representations, traversals. Searching (hashing, binary search trees, multiway trees). Garbage collection, memory management. Internal and external sorting
Antiphon said:There are engineers who specialize in writing scientific code. They are fully capable of taking the differential equation (or whatever) and programming the discretized solution. The better ones can do it in any type of hardware. They are fully capable of debugging the physics on their own as long as the physicists supply the test problem and expected answer.
The terabytes/day of data problem is totally different. For this you must use computer scientists. It's just not what engineers or physicists do.
Simfish said:What about applied math courses?
You essentially are talking about the difference between software engineering and computer science. And yes, computer science classes past the introductory CS classes are for the most part terrible about teaching software engineering concepts. The introductory CS classes teach some very basic concepts common to computer science, software engineering, scientific programing, and even IT. Some schools require there students to take at least an introductory CS class, some don't (my undergrad school still does).twofish-quant said:And personally I think that's a good thing, since CS classes are often terrible for teaching application programming.
Not all that surprising. I've learned the hard way that resumes from CS and IT grads with no education in engineering or the sciences are best filed circularly.What's not surprising is the number of astronomy Ph.D.'s that are terrible programmers, what is more surprising is the number of CS Ph.D.'s that are terrible programmers.
That problem does not pertain just to computer science classes. Failing to teach how to work collaboratively is in my opinion a shortcoming of a lot of science programs. Engineering curricula on the other hand offer lots of opportunities for undergrads to work in team projects, with a lot of the project lead activities performed by a grad student. Participation in such projects, and having some kind of lead role in particular, is something I look for in evaluating prospects.twofish-quant said:The big problem with those courses is that they generally don't give you experience in working on hundred-person project teams with millions of source lines of code.
Simfish said:What about applied math courses?
You're looking at the wrong courses. The sciences really should take a look at engineering education. Cube sats, autonomous vehicles, robots, ... The students work as a part of a team on what is often a multi-year project. That might mean dropping a course on some advanced concept, but that's what grad school is for. Besides, the stereotype of a scientist being someone who works on his own with only a blackboard for company is for the most part fifty years out of date. Most scientists, like most engineers, work in large teams nowadays.twofish-quant said:The problem is not with course content, but course format. The way that courses are structured just doesn't lend itself to teach "real world" programming.
Have to start from scratch? Get to start from scratch is more like it. There is nothing like being able to start on something from scratch. No CMMI 3 stuff, very few constraints other than getting the job started. Some other saps have to deal with making that initial design real. Getting that kind of opportunity doesn't happen very often.in the real world, you have to work with a pre-existing system, and you never are in a situation in which you have to start from scratch.
Or a poor design by the people who don't want to deal with all that CMMI 3 nonsense.Also sometimes you have to deal with something that is badly written.
Eh. The question raised by Simfish immediately arises on seeing stuff like that:jsiples said:This is a website I found a while back, its a great comparison of programming languages and their speed.
The answer is (at least) twofold:Simfish said:Wow, very interesting link! Why is FOTRAN Intel so slow? My professors always told me to use either C/C++ or FORTRAN since they were the fastest.
Bad programming skills can significantly hinder progress in astronomy research. It can lead to incorrect data analysis, errors in simulations and models, and difficulty in reproducing results. This can ultimately delay or even prevent the advancement of scientific knowledge in the field of astronomy.
Astronomical data is often complex and requires sophisticated programming skills to analyze and interpret accurately. Bad programming skills can result in incorrect data analysis, leading to inaccurate conclusions and potentially misleading results. This can have a significant impact on the validity and reliability of research findings.
Yes, bad programming skills can hinder collaboration among astronomers. In order to work together effectively, astronomers need to be able to understand and use each other's code. If one member has poor programming skills, it can be challenging for others to work with their code, leading to delays and potential misunderstandings in the research process.
For aspiring astronomers, having good programming skills is essential for success in the field. Without these skills, it can be difficult to analyze data, create models, and collaborate with other researchers. This can limit opportunities for research and career advancement in the field of astronomy.
To improve programming skills in astronomy research, one can attend workshops or courses specifically geared towards scientific programming. Collaborating with experienced programmers and seeking feedback on code can also help improve skills. Additionally, regularly practicing and staying updated on programming techniques and tools can also contribute to improvement in this area.