design = `// Where's open? digraph scb { // Properties. rankdir = "LR"; node [shape="rect", fontsize=12]; // ---------------------------------------- // Questions. // ---------------------------------------- q_avoid_losing_work [label="How can I avoid losing work?"]; q_find_use_others_data [label="How can I find and use\nother people's data?"]; q_find_use_others_software [label="How can I find and use\nother people's software?"]; q_improve_productivity [label="How can I be more productive?"]; q_make_collaboration_easy [label="How can I make it easy for people\nto collaborate with me?"]; q_make_data_findable [label="How can I make it easy for people\nto find and use my data?"]; q_make_data_usable_by_programs [label="How can I make it easy\nfor programs to use my data?"]; q_make_software_findable_usable [label="How can I make it easy for people\nto find and use my software?"]; q_results_correct [label="How can I tell if my results are correct?"]; q_results_reproducible [label="How can I make it easy for people\nto reproduce my results?"]; // ---------------------------------------- // Answers. // ---------------------------------------- a_add_assertions [label="Add assertions to the software to document invariants."]; a_add_human_work_to_repo [label="Put everything created by people into version control."]; a_atomic_values [label="Make every value atomic."]; a_automate_tasks [label="Automate repetitive tasks."]; a_avoid_duplication [label="Avoid duplicating functionality within modules."]; a_build_and_smoke_tests [label="Provide simple re-runnable end-to-end test cases."]; a_build_tools [label="Build tools."]; a_choose_primary_communication_channel [label="Choose a primary communication channel."]; a_choose_visualization [label="Choose an appropriate visualization."]; a_clean_up_data [label="Clean up data."]; a_code_reviews [label="Do code reviews."]; a_commit_checklist [label="Maintain a checklist of things to do before sharing a change."]; a_consistent_project_organization [label="Organize the project consistently."]; a_data_doi [label="Submit data to a reputable DOI issuer."]; a_debugging [label="Debug programs."]; a_document_function [label="Begin programs with explanatory comments."]; a_dont_duplicate_code [label="Don't duplicate code."]; a_dont_duplicate_large_data [label="Don't duplicate large data."]; a_eliminate_redundant_calculation [label="Only do as much calculation as necessary."]; a_explicit_requirements [label="Make requirements/dependencies explicit."]; a_foster_welcoming_environment [label="Foster a welcoming environment."]; a_get_orcid [label="Get an ORCID."]; a_give_code_meaningful_names [label="Give values, functions, and classes meaningful names."]; a_good_commit_comments [label="Write good commit comments."]; a_have_computer_repeat_things [label="Have the computer repeat things."]; a_include_readme [label="Include a README file explaining project scope."]; a_isolate_dependencies [label="Isolate project dependencies."]; a_keys_for_records [label="Give every record a unique key."]; a_master_manuscript_online [label="Keep the master copy of every manuscript on the web."]; a_meaningful_path_names [label="Use meaningful path names."]; a_normalize_data [label="Normalize data."]; a_prefer_open_text [label="Prefer open text formats to proprietary non-text formats."]; a_profile_performance [label="Find performance bottlenecks."]; a_project_todo_list [label="Maintain a to-do list for each project."]; a_record_analysis_steps_textually [label="Represent every analysis step textually."]; a_record_data_provenance [label="Record provenance in data."]; a_record_publishing_steps [label="Record publishing steps in machine-usable form."]; a_regular_spreadsheet_layout [label="Use regular layout for spreadsheets."]; a_remove_unused_code [label="Remove unused code."]; a_represent_each_fact_once [label="Represent each fact once."]; a_reuse_libraries [label="Re-use libraries rather than writing equivalents."]; a_run_precommit_checks [label="Run tests automatically before each commit."]; a_search_answer_sites [label="Search question-and-answer sites."]; a_search_data_repositories [label="Search data repositories."]; a_separate_models_from_views [label="Separate models from views."]; a_set_up_development [label="Make it easy to set up a development environment."]; a_software_doi [label="Submit software to a reputable DOI issuer."]; a_sortable_matchable_path_names [label="Use path names that are easy to sort and to match."]; a_specify_citation [label="Make the preferred citation for projects explicit."]; a_specify_license [label="Make the project's license explicit."]; a_store_raw_data [label="Store raw data exactly as it arrived."]; a_store_work_remote_repo [label="Store work in a remotely-hosted version control repository."]; a_treat_metadata_like_data [label="Treat metadata like data."]; a_use_dictionaries [label="Use dictionaries."]; a_use_more_hardware [label="Use more hardware."]; a_use_config_files [label="Use configuration files and conditionals rather than commenting."]; a_use_efficient_data_structures [label="Use efficient data structures."]; a_use_functions [label="Break programs into short, self-contained functions."]; a_use_matchable_text [label="Use text values that are easy to match with regular expressions."]; a_use_package_manager [label="Use a package manager."]; a_use_relational_database [label="Store data in a relational database."]; a_write_readable_software [label="Write readable software."]; a_write_unit_tests [label="Write unit tests to specify and check behavior."]; // ---------------------------------------- // Topics. // ---------------------------------------- t_add_to_repository [label="Adding Files to a Repository"]; t_aggregating_data [label="Aggregating Data"]; t_blogging [label="Publishing a Blog", fillcolor="honeydew", style="filled"]; t_boilerplate_citation [label="Specifying Citations", fillcolor="honeydew", style="filled"]; t_boilerplate_license [label="Specifying a License"]; t_boilerplate_readme [label="Writing a README File"]; t_boolean_operators [label="Boolean Operators"]; t_call_stack [label="Understanding The Call Stack", fillcolor="honeydew", style="filled"]; t_choosing_good_path_names [label="Choosing Good Path Names", fillcolor="honeydew", style="filled"]; t_choosing_repository_host [label="Where to Host a Repository"]; t_choosing_visualization [label="Choosing a Good Visualization", fillcolor="honeydew", style="filled"]; t_code_of_conduct [label="Creating a Code of Conduct"]; t_code_reviews [label="Doing Code Reviews", fillcolor="honeydew", style="filled"]; t_commit_checklist [label="Creating a Commit Checklist", fillcolor="honeydew", style="filled"]; t_computer_architecture [label="Computer Architecture", fillcolor="honeydew", style="filled"]; t_conditionals [label="Conditional Expressions"]; t_continuous_integration [label="Continuous Integration", fillcolor="honeydew", style="filled"]; t_coverage [label="Coverage Analysis", fillcolor="honeydew", style="filled"]; t_creating_database [label="Creating a Database"]; t_creating_integrity_tests [label="Creating Integrity Tests", fillcolor="honeydew", style="filled"]; t_creating_repository [label="Creating a Repository"]; t_csv_intro [label="Introducing CSV", fillcolor="honeydew", style="filled"]; t_data_design [label="Data Design", fillcolor="honeydew", style="filled"]; t_data_hygiene [label="Data Hygiene", fillcolor="honeydew", style="filled"]; t_data_types [label="Basic Types and Conversion"]; t_defensive_programming [label="Defensive Programming"]; t_documenting_requirements [label="Documenting Software Requirements", fillcolor="honeydew", style="filled"]; t_environment_variables [label="Environment Variables", fillcolor="honeydew", style="filled"]; t_exporting_openrefine_history [label="Exporting OpenRefine History", fillcolor="honeydew", style="filled"]; t_filename_extensions [label="Filename Extensions", fillcolor="honeydew", style="filled"]; t_filesystem_layout [label="How the Filesystem is Laid Out", fillcolor="honeydew", style="filled"]; t_filtering_data [label="Filtering Data"]; t_finding_files [label="Finding Files"]; t_finding_software [label="Finding Software", fillcolor="honeydew", style="filled"]; t_formatting_spreadsheets [label="Formatting Spreadsheets", fillcolor="honeydew", style="filled"]; t_getting_doi [label="Using DOIs", fillcolor="honeydew", style="filled"]; t_getting_orcid [label="Using ORCIDs", fillcolor="honeydew", style="filled"]; t_good_commit_comments [label="Writing Good Commit Comments", fillcolor="honeydew", style="filled"]; t_handling_missing_data [label="Handling Missing Data"]; t_identify_starting_points [label="Identify Starting Points"]; t_ignoring_files [label="Ignoring Files"]; t_installing_software [label="Installing Software", fillcolor="honeydew", style="filled"]; t_introducing_openrefine [label="Introducing OpenRefine", fillcolor="honeydew", style="filled"]; t_introducing_relational_databases [label="Introducing Relational Databases"]; t_introducing_version_control [label="Introducing Version Control"]; t_issue_tracking [label="Issue Tracking", fillcolor="honeydew", style="filled"]; t_joining_data [label="Combining Data Using Join"]; t_learn_about_barriers [label="Learn About Barriers to Participation", fillcolor="honeydew", style="filled"]; t_logging [label="Logging Program Execution", fillcolor="honeydew", style="filled"]; t_managing_files [label="Creating, Deleting, and Managing Files"]; t_merging_changes [label="Merging Changes"]; t_metadata [label="Storing Metadata", fillcolor="honeydew", style="filled"]; t_models_vs_views [label="Models vs. Views", fillcolor="honeydew", style="filled"]; t_navigating_file_system [label="Navigating the File System"]; t_nobles_rules [label="Noble's Rules for Organizing Projects", fillcolor="honeydew", style="filled"]; t_pipes_filters [label="Pipes and Filters"]; t_plotting [label="Plotting", fillcolor="honeydew", style="filled"]; t_profiling [label="Profiling Performance", fillcolor="honeydew", style="filled"]; t_program_configuration [label="Configuring Programs", fillcolor="honeydew", style="filled"]; t_programming_databases [label="Programming Databases"]; t_programming_style [label="Programming Style", fillcolor="honeydew", style="filled"]; t_python_dictionaries [label="Python Dictionaries", fillcolor="honeydew", style="filled"]; t_python_lists [label="Lists in Python"]; t_read_csv [label="Reading CSV Files"]; t_reading_error_messages [label="Reading Error Messages"]; t_recording_history [label="Recording History"]; t_reproducibility [label="Reproducibility and All That"]; t_reviewing_version_history [label="Reviewing Version History"]; t_search_online [label="Searching Online", fillcolor="honeydew", style="filled"]; t_selecting_data [label="Selecting Data"]; t_setting_up_for_development [label="Setting Up for Development", fillcolor="honeydew", style="filled"]; t_taschuks_rules [label="Taschuk's Rules for Project Dependencies", fillcolor="honeydew", style="filled"]; t_task_farming [label="Task Farming", fillcolor="honeydew", style="filled"]; t_trace_execution [label="Tracing Program Execution", fillcolor="honeydew", style="filled"]; t_tracking_provenance [label="Tracking Provenance", fillcolor="honeydew", style="filled"]; t_update_data [label="Updating Data"]; t_update_repository [label="Updating a Repository"]; t_use_package_manager [label="Using a Package Manager", fillcolor="honeydew", style="filled"]; t_using_branches [label="Using Branches", fillcolor="honeydew", style="filled"]; t_using_editor [label="Using a Plain Text Editor", fillcolor="honeydew", style="filled"]; t_using_libraries [label="Using Libraries"]; t_using_make [label="Using Make"]; t_using_numpy [label="Using NumPy", fillcolor="honeydew", style="filled"]; t_using_openrefine [label="Using OpenRefine", fillcolor="honeydew", style="filled"]; t_using_pandas [label="Using Pandas", fillcolor="honeydew", style="filled"]; t_using_regular_expressions [label="Using Regular Expressions", fillcolor="honeydew", style="filled"]; t_using_web_authoring [label="Using Web-based Authoring Tools", fillcolor="honeydew", style="filled"]; t_variable_scope [label="Variable Scope"]; t_variables_assignment [label="Variables and Assignment"]; t_what_not_to_store [label="What Not to Put in Version Control"]; t_writing_functions [label="Writing Functions"]; t_writing_programs [label="Writing Programs"]; t_writing_python_loops [label="Writing Loops in Python"]; t_writing_shell_loops [label="Writing Loops in the Shell"]; t_writing_shell_scripts [label="Writing Shell Scripts"]; t_writing_unit_tests [label="Writing Unit Tests", fillcolor="honeydew", style="filled"]; // ---------------------------------------- // Questions to answers. // ---------------------------------------- q_avoid_losing_work:e -> a_add_human_work_to_repo:w; q_avoid_losing_work:e -> a_good_commit_comments:w; q_avoid_losing_work:e -> a_prefer_open_text:w; q_avoid_losing_work:e -> a_store_work_remote_repo:w; q_find_use_others_data:e -> a_reuse_libraries:w; q_find_use_others_data:e -> a_search_data_repositories:w; q_find_use_others_software:e -> a_code_reviews:w; q_find_use_others_software:e -> a_reuse_libraries:w; q_find_use_others_software:e -> a_search_answer_sites:w; q_find_use_others_software:e -> a_use_package_manager:w; q_improve_productivity:e -> a_automate_tasks:w; q_improve_productivity:e -> a_build_tools:w; q_improve_productivity:e -> a_eliminate_redundant_calculation:w; q_improve_productivity:e -> a_have_computer_repeat_things:w; q_improve_productivity:e -> a_profile_performance:w; q_improve_productivity:e -> a_use_efficient_data_structures:w; q_improve_productivity:e -> a_use_more_hardware:w; q_make_collaboration_easy:e -> a_add_assertions:w; q_make_collaboration_easy:e -> a_build_and_smoke_tests:w; q_make_collaboration_easy:e -> a_choose_primary_communication_channel:w; q_make_collaboration_easy:e -> a_commit_checklist:w; q_make_collaboration_easy:e -> a_foster_welcoming_environment:w; q_make_collaboration_easy:e -> a_get_orcid:w; q_make_collaboration_easy:e -> a_master_manuscript_online:w; q_make_collaboration_easy:e -> a_project_todo_list:w; q_make_collaboration_easy:e -> a_record_publishing_steps:w; q_make_collaboration_easy:e -> a_set_up_development:w; q_make_collaboration_easy:e -> a_specify_citation:w; q_make_collaboration_easy:e -> a_specify_license:w; q_make_data_findable:e -> a_clean_up_data:w; q_make_data_findable:e -> a_data_doi:w; q_make_data_findable:e -> a_dont_duplicate_large_data:w; q_make_data_findable:e -> a_meaningful_path_names:w; q_make_data_findable:e -> a_normalize_data:w; q_make_data_findable:e -> a_regular_spreadsheet_layout:w; q_make_data_findable:e -> a_separate_models_from_views:w; q_make_data_findable:e -> a_store_raw_data:w; q_make_data_findable:e -> a_treat_metadata_like_data:w; q_make_data_findable:e -> a_use_relational_database:w; q_make_data_usable_by_programs:e -> a_atomic_values:w; q_make_data_usable_by_programs:e -> a_avoid_duplication:w; q_make_data_usable_by_programs:e -> a_keys_for_records:w; q_make_data_usable_by_programs:e -> a_sortable_matchable_path_names:w; q_make_data_usable_by_programs:e -> a_treat_metadata_like_data:w; q_make_data_usable_by_programs:e -> a_use_matchable_text:w; q_make_software_findable_usable:e -> a_document_function:w; q_make_software_findable_usable:e -> a_dont_duplicate_code:w; q_make_software_findable_usable:e -> a_explicit_requirements:w; q_make_software_findable_usable:e -> a_give_code_meaningful_names:w; q_make_software_findable_usable:e -> a_include_readme:w; q_make_software_findable_usable:e -> a_isolate_dependencies:w; q_make_software_findable_usable:e -> a_remove_unused_code:w; q_make_software_findable_usable:e -> a_reuse_libraries:w; q_make_software_findable_usable:e -> a_software_doi:w; q_make_software_findable_usable:e -> a_store_work_remote_repo:w; q_make_software_findable_usable:e -> a_use_config_files:w; q_make_software_findable_usable:e -> a_use_dictionaries:w; q_make_software_findable_usable:e -> a_use_functions:w; q_results_correct:e -> a_add_assertions:w; q_results_correct:e -> a_build_and_smoke_tests:w; q_results_correct:e -> a_choose_visualization:w; q_results_correct:e -> a_code_reviews:w; q_results_correct:e -> a_debugging:w; q_results_correct:e -> a_run_precommit_checks:w; q_results_correct:e -> a_write_readable_software:w; q_results_correct:e -> a_write_unit_tests:w; q_results_reproducible:e -> a_consistent_project_organization:w; q_results_reproducible:e -> a_record_analysis_steps_textually:w; q_results_reproducible:e -> a_record_data_provenance:w; q_results_reproducible:e -> a_set_up_development:w; // ---------------------------------------- // Answers to topics. // ---------------------------------------- a_add_assertions:e -> t_defensive_programming:w; a_add_human_work_to_repo:e -> t_add_to_repository:w; a_add_human_work_to_repo:e -> t_update_repository:w; a_atomic_values:e -> t_data_hygiene:w; a_automate_tasks:e -> t_writing_shell_scripts:w; a_avoid_duplication:e -> t_programming_style:w; a_build_and_smoke_tests:e -> t_creating_integrity_tests:w; a_build_tools:e -> t_pipes_filters:w; a_build_tools:e -> t_writing_programs:w; a_build_tools:e -> t_writing_shell_scripts:w; a_choose_primary_communication_channel:e -> t_blogging:w; a_choose_visualization:e -> t_choosing_visualization:w; a_clean_up_data:e -> t_data_hygiene:w; a_clean_up_data:e -> t_introducing_openrefine:w; a_code_reviews:e -> t_code_reviews:w; a_commit_checklist:e -> t_commit_checklist:w; a_consistent_project_organization:e -> t_nobles_rules:w; a_data_doi:e -> t_getting_doi:w; a_debugging:e -> t_logging:w; a_debugging:e -> t_reading_error_messages:w; a_debugging:e -> t_trace_execution:w; a_debugging:e -> t_writing_unit_tests:w; a_document_function:e -> t_programming_style:w; a_dont_duplicate_code:e -> t_programming_style:w; a_dont_duplicate_large_data:e -> t_what_not_to_store:w; a_eliminate_redundant_calculation:e -> t_using_make:w; a_explicit_requirements:e -> t_documenting_requirements:w; a_foster_welcoming_environment:e -> t_code_of_conduct:w; a_foster_welcoming_environment:e -> t_learn_about_barriers:w; a_foster_welcoming_environment:e -> t_identify_starting_points:w; a_get_orcid:e -> t_getting_orcid:w; a_give_code_meaningful_names:e -> t_programming_style:w; a_good_commit_comments:e -> t_good_commit_comments:w; a_have_computer_repeat_things:e -> t_writing_python_loops:w; a_have_computer_repeat_things:e -> t_writing_shell_loops:w; a_include_readme:e -> t_boilerplate_readme:w; a_include_readme:e -> t_documenting_requirements:w; a_isolate_dependencies:e -> t_taschuks_rules:w; a_keys_for_records:e -> t_python_dictionaries:w; a_keys_for_records:e -> t_data_hygiene:w; a_master_manuscript_online:e -> t_using_web_authoring:w; a_master_manuscript_online:e -> t_introducing_version_control:w; a_meaningful_path_names:e -> t_choosing_good_path_names:w; a_meaningful_path_names:e -> t_filename_extensions:w; a_normalize_data:e -> t_formatting_spreadsheets:w; a_normalize_data:e -> t_introducing_relational_databases:w; a_prefer_open_text:e -> t_csv_intro:w; a_prefer_open_text:e -> t_read_csv:w; a_profile_performance:e -> t_profiling:w; a_project_todo_list:e -> t_issue_tracking:w; a_record_analysis_steps_textually:e -> t_exporting_openrefine_history:w; a_record_analysis_steps_textually:e -> t_recording_history:w; a_record_analysis_steps_textually:e -> t_using_make:w; a_record_analysis_steps_textually:e -> t_writing_programs:w; a_record_analysis_steps_textually:e -> t_writing_shell_scripts:w; a_record_data_provenance:e -> t_tracking_provenance:w; a_record_publishing_steps:e -> t_using_make:w; a_record_publishing_steps:e -> t_writing_shell_scripts:w; a_regular_spreadsheet_layout:e -> t_formatting_spreadsheets:w; a_remove_unused_code:e -> t_coverage:w; a_represent_each_fact_once:e -> t_data_hygiene:w; a_reuse_libraries:e -> t_finding_software:w; a_reuse_libraries:e -> t_using_libraries:w; a_run_precommit_checks:e -> t_continuous_integration:w; a_search_answer_sites:e -> t_search_online:w; a_search_data_repositories:e -> t_search_online:w; a_separate_models_from_views:e -> t_models_vs_views:w; a_set_up_development:e -> t_setting_up_for_development:w; a_set_up_development:e -> t_use_package_manager:w; a_software_doi:e -> t_getting_doi:w; a_sortable_matchable_path_names:e -> t_choosing_good_path_names:w; a_specify_citation:e -> t_boilerplate_citation:w; a_specify_license:e -> t_boilerplate_license:w; a_store_raw_data:e -> t_nobles_rules:w; a_store_raw_data:e -> t_tracking_provenance:w; a_store_work_remote_repo:e -> t_choosing_repository_host:w; a_store_work_remote_repo:e -> t_ignoring_files:w; a_store_work_remote_repo:e -> t_introducing_version_control:w; a_treat_metadata_like_data:e -> t_metadata:w; a_use_dictionaries:e -> t_python_dictionaries:w; a_use_config_files:e -> t_conditionals:w; a_use_config_files:e -> t_program_configuration:w; a_use_config_files:e -> t_programming_style:w; a_use_efficient_data_structures:e -> t_python_dictionaries:w; a_use_efficient_data_structures:e -> t_python_lists:w; a_use_efficient_data_structures:e -> t_using_numpy:w; a_use_efficient_data_structures:e -> t_using_pandas:w; a_use_functions:e -> t_programming_style:w; a_use_functions:e -> t_writing_functions:w; a_use_matchable_text:e -> t_using_regular_expressions:w; a_use_more_hardware:e -> t_computer_architecture:w; a_use_more_hardware:e -> t_task_farming:w; a_use_package_manager:e -> t_use_package_manager:w; a_use_relational_database:e -> t_aggregating_data:w; a_use_relational_database:e -> t_creating_database:w; a_use_relational_database:e -> t_data_design:w; a_use_relational_database:e -> t_filtering_data:w; a_use_relational_database:e -> t_handling_missing_data:w; a_use_relational_database:e -> t_introducing_relational_databases:w; a_use_relational_database:e -> t_joining_data:w; a_use_relational_database:e -> t_programming_databases:w; a_use_relational_database:e -> t_selecting_data:w; a_use_relational_database:e -> t_update_data:w; a_write_readable_software:e -> t_programming_style:w; a_write_unit_tests:e -> t_writing_unit_tests:w; // ---------------------------------------- // Topics to topics. // ---------------------------------------- t_add_to_repository:e -> t_creating_repository:e; t_add_to_repository:e -> t_introducing_version_control:e; t_aggregating_data:e -> t_handling_missing_data:e; t_blogging:e -> t_using_web_authoring:e; t_call_stack:e -> t_variable_scope:e; t_choosing_good_path_names:e -> t_filename_extensions:e; t_choosing_good_path_names:e -> t_finding_files:e; t_choosing_repository_host:e -> t_introducing_version_control:e; t_choosing_visualization:e -> t_plotting:e; t_code_of_conduct:e -> t_learn_about_barriers:e; t_code_reviews:e -> t_merging_changes:e; t_code_reviews:e -> t_reviewing_version_history:e; t_code_reviews:e -> t_using_branches:e; t_computer_architecture:e -> t_data_types:e; t_continuous_integration:e -> t_commit_checklist:e; t_creating_database:e -> t_joining_data:e; t_creating_repository:e -> t_introducing_version_control:e; t_data_design:e -> t_joining_data:e; t_data_hygiene:e -> t_data_design:e; t_data_types:e -> t_variables_assignment:e; t_exporting_openrefine_history:e -> t_introducing_openrefine:e; t_filtering_data:e -> t_introducing_relational_databases:e; t_finding_files:e -> t_filesystem_layout:e; t_finding_software:e -> t_search_online:e; t_good_commit_comments:e -> t_add_to_repository:e; t_handling_missing_data:e -> t_selecting_data:e; t_identify_starting_points:e -> t_issue_tracking:e; t_ignoring_files:e -> t_add_to_repository:e; t_installing_software:e -> t_environment_variables:e; t_introducing_openrefine:e -> t_formatting_spreadsheets:e; t_joining_data:e -> t_handling_missing_data:e; t_managing_files:e -> t_using_editor:e; t_plotting:e -> t_using_libraries:e; t_plotting:e -> t_using_pandas:e; t_profiling:e -> t_computer_architecture:e; t_program_configuration:e -> t_environment_variables:e; t_program_configuration:e -> t_boolean_operators:e; t_programming_databases:e -> t_selecting_data:e; t_programming_style:e -> t_writing_functions:e; t_read_csv:e -> t_csv_intro:e; t_read_csv:e -> t_using_pandas:e; t_reproducibility:e -> t_program_configuration:e; t_reproducibility:e -> t_documenting_requirements:e; t_reproducibility:e -> t_metadata:e; t_reproducibility:e -> t_tracking_provenance:e; t_search_online:e -> t_boolean_operators:e; t_selecting_data:e -> t_introducing_relational_databases:e; t_taschuks_rules:e -> t_program_configuration:e; t_taschuks_rules:e -> t_environment_variables:e; t_task_farming:e -> t_computer_architecture:e; t_task_farming:e -> t_writing_shell_loops:e; t_trace_execution:e -> t_call_stack:e; t_trace_execution:e -> t_logging:e; t_trace_execution:e -> t_variables_assignment:e; t_tracking_provenance:e -> t_recording_history:e; t_update_data:e -> t_selecting_data:e; t_update_repository:e -> t_add_to_repository:e; t_use_package_manager:e -> t_filesystem_layout:e; t_use_package_manager:e -> t_installing_software:e; t_using_libraries:e -> t_variables_assignment:e; t_using_make:e -> t_writing_shell_scripts:e; t_using_numpy:e -> t_data_types:e; t_using_numpy:e -> t_using_libraries:e; t_using_openrefine:e -> t_introducing_openrefine:e; t_using_openrefine:e -> t_using_regular_expressions:e; t_using_pandas:e -> t_data_types:e; t_using_pandas:e -> t_using_libraries:e; t_variable_scope:e -> t_variables_assignment:e; t_writing_functions:e -> t_conditionals:e; t_writing_functions:e -> t_variable_scope:e; t_writing_programs:e -> t_using_libraries:e; t_writing_programs:e -> t_using_numpy:e; t_writing_programs:e -> t_using_pandas:e; t_writing_programs:e -> t_writing_functions:e; t_writing_python_loops:e -> t_python_lists:e; t_writing_shell_scripts:e -> t_managing_files:e; t_writing_shell_scripts:e -> t_navigating_file_system:e; t_writing_shell_scripts:e -> t_pipes_filters:e; t_writing_shell_scripts:e -> t_using_editor:e; t_writing_unit_tests:e -> t_defensive_programming:e; t_writing_unit_tests:e -> t_writing_functions:e; }`