| Biomedical Informatics 214 (also listed as Computer Science 274) Representations and Algorithms for Computational Molecular Biology Spring 2008 |
| Code / Language Policy |
Requirement 1:
Your code must be written in one of the following six languages: Python, C, C++, Java, Perl, Ruby.Requirement 2:
Your code must run from the command line on a cardinal machine. (See http://www.stanford.edu/services/cluster/ and http://www.stanford.edu/services/cluster/which.html for more information on various campus machines.)To test your code on a cardinal machine:
You are free to develop software anywhere, on any platform. However, we will only grade code that runs on cardinal machines.ssh username@cardinal.stanford.edu cd your/bmi214/directory python yourprogram.pyYou must EXPLICITLY state how to run the program in your README file. If we are unable to run your code, your grade will suffer.
Requirement 3:
You must submit source files, which should be readable, so that we can verify and give partial credit in the case that your code is broken. Do not submit the binaries; instead, give instructions on how to compile/run the source file into a binary executable (if applicable).
Requirement 4:
Your code must be accompanied by a separate README file explaining how to compile/run your program, and, if your code is broken, an explanation of the problem and a justification of why you deserve partial credit. See the instructions for each project for more details on its README.
This is largely a matter of personal preference. Any of the six languages above is fine, as long as you can meet the requirements. However, we do have some suggestions for your own good.
Suggestion 1: Use a high-level language.
Using a prototyping language like perl or python will make your life much easier. Sure, the code may be more "inefficient," but since you'll finish coding and debugging sooner, your "inefficient" code will probably run to completion sooner than if you took the time to write it in C. Additionally, when using a high-level language, you are usually more able to see the task in high-level terms, which often allows you to simply use better algorithms.Note: Java lives in a gray area between high-level and low-level languages. It is much easier to use than C or C++, but it still shares a lot of that heritage, including the annoying compilation step. So if you are a java afficionado, feel free to use java. In the same vein, if you have your heart set on C, C++, or java, PLEASE use java, for your own sake. On the other hand, if you would need to learn java -- don't. Instead, learn python.
Suggestion 2: Good comments are key for partial credit.
If your code is broken, we TA's will have to manually look at the code and assign partial credit. You will only receive partial credit if your code is well-commented and easilly readable. Remember, its your responsibility to make your code as understandable as possible.
Suggestion 3: Use python.
If you have no preference for languages, or don't already know a high-level prototyping language, it is highly recommended that you learn python. It has an interactive interpreter (like matlab or lisp) making it very easy to develop. It has a clean syntax for imperative and object-oriented code. It even borrows some of the fun stuff from lisp (simple anonymous lambda expressions)! There's a huge library of code for regular expressions, network I/O, and really most anything else you could want.
So, in summary, We don't really care if you torture yourself using C for these assignments. Anything that complies with the requirements is fine. But you'll be a lot happier if you use the highest-level-possible language, trust us.