In thinking about what I think student’s should learn from Software Carpentry, I came up with a different kind of list of questions than Greg. One of the issues in Software Carpentry has been transferring or generalizing the skills taught in the workshop and online classes to participants’ real-world problems. Although these questions aren’t as straightforward to answer as Greg’s, maybe if we can find answers to the following questions, we might get closer to people applying the skills learned.
- What are the basic programming skills I need for my domain?
- Novice: Recognize key functions in existing code
- Intermediate: Put together bash, python or Matlab script calling existing functions
- Advanced: Write functions specific to your problem/goals
- What tools are available to help with question 1?
- Novice: Identify which tools/programs (e.g., bash, python, Matlab, R …) are used in my domain and how to open and look at scripts that use these programs
- *Intermediate:
* - Advanced: Identify the strengths and weaknesses of the software tools used in my domain
- How do I decide which tools/functions to use for my problem?
- Novice: Recognize the uses of various software tools and associated functions as applied to my domain
- Intermediate: Recognize the basis of the problem to be addressed/code to be written. Break down the problem into chunks that can be addressed with the tools and functions I am familiar with
- Advanced: Evaluate the best tool/functions to use based on my prior knowledge, the task to be completed, and the standards in my domain
- How do I keep track of what I’m doing?
- Novice: Record all steps in a laboratory notebook
- Intermediate: Annotate code to keep track of thought processes
- Advanced: Use version control software (svn, git, etc.) to record and track changes to both code and annotations
- How can I evaluate whether what I’m doing is working?
- Novice: Recognize bugs in commonly used code
- Intermediate:
- Advanced:
- If it isn’t working, how can I fix it?
- Novice: Format data to fit existing code (data structure)
- Intermediate:
- Advanced: Know the resources available to help you answer your problem (e.g., help/man pages, Software Carpentry website, Python programming manuals, web pages etc.) and where to go to find new tools to help answer your question even more efficiently