Computational Science Basics for Astronomers: Computational Astronomy Abstract: A course aimed at empowering astronomers such that they can succesfully function in the computer rich environment of the future and understand the language and paradigms of contemporary computer science. Instead of teaching a collection of tricks and computer languages, the course would emphasize the basic computational paradigms and algorithms that are universally useful. I tried to collect the absolute minimu, or survival knowledge that Lecture 1 A Practical Guide To Coding Principles Programming Paradigms Structured Programming Demonstration of The Top-Down Approach Lecture 2 Testing and Debugging Concepts of Object Oriented Design Selected Data Structures linked lists/stacks/queues Lecture 3 More on Data Structures trees/hash tables. etc Algorithmic Analysis Lecture 4 KD-trees Searching and Sorting Lecture 5 More on Sorting Selection/Heap/Merge/Quick Sort Lecture 6 Sorting cont'd (bucket and radix sort) Order statistics (median, etc) Lecture 7 Graphs Representation Connectivity Spanning Trees Brute Force and Backtracking Lecture 8 Mathematical insights Greedy Algorithms Algorithmic Paradigms and Complexity Theory Lecture 9 Artificial Intelligence Selected Search Algorithms from AI Lecture 10 Monte Carlo and related methods Markov Chains and MCMC The principal language of the course is python. If you're unfamiliar with python, the first step could be: http://docs.python.org/tutorial/ There is an abundance of beginner tutorials (google) in addition, choose one that you like. For in depth knowledge (possibly after taking the course) you can learn from this tutorial http://greenteapress.com/thinkpython/thinkpython.html A useful python data analysis tutorial including topics like pyfits and matplotlib that will be useful specifically in astronomy http://stsdas.stsci.edu/perry/pydatatut.pdf Programming can only be learnt by actually doing it, therefore it would desirable for the students to apply and internalize the culture of computer science absorbed from the course. To promote this, after each lecture there is an optinal homework problem. There are two ways to obtain grades A) Solve 5 (i.e. 50%) of the homework problems (only solutions submitted on time count) ====OR==== B) Instead you can demonstrate their understanding of the above concepts by completing a project by the end of the semester. The project will have approximately the following components: 1) retrieving some data from the internet or a database, e.g., PS1 data -optionally simulate data can be used. Writing a simple simulation is also an option instead of retrieving data. 2) writing, testing a program that analyses the data and uses some of the above concepts. Incorporation of standard libraries is encouraged (i.e. e.g. instead of writing fft from scratch, one would use fftw, etc.) 3) running the above program possibly in scripting environment many times with changing parameters, input, etc. 4) Display the results graphically using a graphics package, 5) Present 6-10 slides about the results using presentation package (e.g. powerpoint) The idea is that the project would be a smaller, and less demanding than a science project leading to a paper, but it should a smaller scale simulation of the computational aspects of the full process. Instead of scientific results, the emphasis would be on finding and internalizing your favorite tools, and algorithms. You are expected to identify the necessary algorithms, read and understand manuals, and learn to use at least one tool from each category (a scripting language, a programming language, a graphics package, and a document authoring package, like emacs with latex, or word). In your slides should identify where you used concepts learned in the class (e.g. scaling, memory and CPU, linear search, depth first search, etc). The project will preferably be from your actual research, s.t. you can use the software you create in the future.. E.g. I can imagine you write a library manipulating spectra of your observations, etc. You will have to get the project approved in advance, and if you cannot come up with a project, I will suggest some. E.g. of sample projects: --retrieve stars from a PS1 data and plot color magnitude diagrams --calculate the two-point correlation function of SDSS galaxies as a function of color. --calculate skewness from simulated data --find the C_l's from a series of MAP simulations --fit cosmological parameters from data using MCMC --write a Zeldovich simulation and follow the collaps of a sine-wave --put together a simple pipeline to find stars in images, and plot their colors --retrieve spectra from the SDSS database and find principal components