BE.180: Difference between revisions

From OpenWetWare
Jump to navigationJump to search
Line 51: Line 51:
# Automated design and layout
# Automated design and layout
#* If I have a circuit with some repressors, I'd rather a system automatically determine which repressors work best together. How to best determine a kind of family fitness?
#* If I have a circuit with some repressors, I'd rather a system automatically determine which repressors work best together. How to best determine a kind of family fitness?
# Explicit vrs implicit algorithms: A computer program [generally] embodies an explicit algorithm ie a very specific logic flow that is spelled out in the code. Biological systems, in contrast, embody implicit algorithms -- there is no "master intelligence" making sure that the right things happen at the right time, it all happens as a consequence of the basic laws of physics and chemistry ie the behavior is emergent, at a very basic level. From that perspective, it might be instructive to compare "designed" programs with "evolved" programs ie programs produced via Genetic Programming. See, for example, [http://hampshire.edu/lspector/push.html PushGP] - [[Alex Mallet | AM]]


==Concepts in system design and implementation, and computer programming==
==Concepts in system design and implementation, and computer programming==

Revision as of 15:47, 24 October 2005

BE.180 -- Biological Engineering Programming

BE.180 is a new course that will be offered for the first time in the Spring of 2006. This is a required course for second semester sophomores who are majoring in Biological Engineering. Drew Endy is leading the development of the course.

The current course description is: "Example problems from biological engineering are used to develop structured computer programming skills and explore the theory and practice of complex systems design and construction."

After thinking a bit, talking with Tom Knight, and thinking some more, the theme of the course is starting to focus on the idea of designing and coding the CAD environment for Biological Engineering (aka, Engineering of Biology. aka, "synthetic biology: an engineering technology based on living systems." The way this might work is for a different CAD environment feature to be used each week as a motivating problem for exploring concepts in structured system design and implementation, and computer programming. As a result of this approach, there may not be any *single* language used in the course -- we'll use the languages best suited to the problems.

Current Tasks

  1. Collect list of features that can serve as motivating examples (finish at 11/3 meeting)

Future Tasks

  1. Prioirtize list of features, evaluating on coverage of concepts, fun factor, and feasibility
  2. Develop teaching modules

Next Planning Meeting

  1. Thursday November 3, 2005, 6-7:30 (immediately following BE.526), 56-614

Feature Sandbox (add features ideas here, no idea is bad in the sandbox)

  1. Analysis of Sequence Data for Patterns / Features
    • Manipulation of data/text
    • Pattern Recognition (regular expressions), Logic
  2. Tuning Codon Usage
    • Codon tables
    • Expression optimization
    • Watermarking/Sign your work
    • Restriction site removal/addition
    • Design a genetic code such that every point mutation is non-sense (HINT: should you use a 4-base code?)
  3. Some sort of graphing/visual depiction
  4. Some sort of modeling/dynamic systems
  5. Biological information representation (note, this is a half-baked idea, please contribute/revise - RS)
    • There are hierarchies of biological components (parts, devices and systems) and associated information. There are hierarchical data structures. How should biological information be represented? How do you search this information? Such a topic could conceivably cover topics/concepts like data structures, searching, object-oriented programming etc.
  6. Search part-part junctions for secondary structure (e.g., ORF/RBS/Operator junctions)
    • Call-out to external tool
  7. Clustering of parts, devices and systems
    • How do you group or categorize parts? How do you measure "distances" between systems? This becomes important as the registry gets bigger and as we move to a network of registries. I want to find all BioBricks that are "similar" to mine.
    • clustering methods
    • distance measures
  8. Homology modeling (useful for synthetic transcription factors or designing linkers?)
    • Call-out to external tool
    • Simulated annealing, energy minimization, MD
  9. Designing sequences to be synthesized subject to various constraints (e.g. design overlapping oligos with similar melting temps)
  10. Obfuscating Biological Programming
    • Ok, I know this is probably a terrible idea, but this is something I'd be interested in AC
    • What's the worst way to design a biological system?
    • How do I design a sequence that will have the functionality of poliovirus that could not be detected by current algorithms (e.g. whatever Blue Heron uses)
    • Cellular Perl to solve everyone's quick hacking needs
  11. Automated design and layout
    • If I have a circuit with some repressors, I'd rather a system automatically determine which repressors work best together. How to best determine a kind of family fitness?
  12. Explicit vrs implicit algorithms: A computer program [generally] embodies an explicit algorithm ie a very specific logic flow that is spelled out in the code. Biological systems, in contrast, embody implicit algorithms -- there is no "master intelligence" making sure that the right things happen at the right time, it all happens as a consequence of the basic laws of physics and chemistry ie the behavior is emergent, at a very basic level. From that perspective, it might be instructive to compare "designed" programs with "evolved" programs ie programs produced via Genetic Programming. See, for example, PushGP - AM

Concepts in system design and implementation, and computer programming

In parallel with developing a features list, it may be appropriate to generate a list of fundamentals that students should take away from the course. (Credit to Bree for also suggesting this.) Features could be matched with concepts from CS (and lessons from biology) as appropriate. Started brainstorming a list here. -- RS

I think that it's important to make the teaching of programming concepts the primary goal, and the applications to biological engineering should be secondary. So students should all take away how to program, and in the process they may develop interesting and/or useful tools. Maybe the way to do it is to decide on the relevant programming concepts, and then come up with features as teaching examples and assignments that cover these concepts (not the other way around). I think that there is nothing wrong with teaching it like a normal introductory programming course, but using all biologically relevant examples and problems along the way. -- TMT
[this is a good suggestion, but if your primary goal is to learn how to program computers you should take 6.001 -- Endy 20:04, 6 Oct 2005 (EDT)].
What are the prerequisites for the course? If you don't explicitly require 6.001 or 1.00, you'll probably get a number of students who effectively don't know how to program. I don't think that you can require either of those courses without adding them to the BE SB requirements, which isn't currently the case. So you may need to teach it as an intro programming course. -Jkm 15:52, 10 Oct 2005 (EDT)

  1. Data structures: linked lists, trees, stacks etc. Classes and inheritance?
    • Abstraction
  2. Searching: depth-first, breadth-first, heuristic
    • Backtracking, pruning, efficiency analysis
  3. Sorting
  4. Computation: FSM's, Turing machines etc.
  5. Documentation
    • Readable commenting and coding styles
    • How not to program like biology

Prioritized Feature List

(vote for features here. HINT: use your intitials)