{"action":"created","comment":{"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments/33412757","id":33412757,"diff_hunk":"@@ -0,0 +1,141 @@\n+:author: Brian E. Chapman, Ph.D.\n+:email: brian.chapman@utah.edu\n+:institution: Department of Radiology, University of Utah\n+\n+:author: Jeannie Irwin, Ph.D.\n+:email: jeannieirwin@gmail.com\n+:institution: Unaffiliated\n+\n+\n+---------------------------------------------------------------\n+Python as a First Programming Language for Biomedical Scientist\n+---------------------------------------------------------------\n+\n+.. class:: abstract\n+\n+We have been involved with teaching Python to biomedical scientists since 2005, In all, seven courses have been taught: 5 at the University of Pittsburgh, as a required course for . Student have primarily been biomedical informatics graduate students with other students coming from human genetics, molecular biology, statistics, and similar fields. The range of prior computing experience has been wide: the majority of students had little or no prior programming experiences while a few students were experienced in other languages such as C/C++ and wanted to learn a scripting language for increased productivity. The semester long courses have followed a procedural first approach followed by an introduction to object oriented programming. By the end of the course students produce an independent programming project on a topic of their own choosing. \n+\n+The course has evolved as biomedical questions have evolved, the Python language has evolved, and online resources have evolved. Topics of primary interest now focus on biomedical data science with analysis and visualization using tools such as Pandas, scikit-learn, and Bokeh. Class format has evolved from traditional slide-based lectures supplemented with IDLE programming demonstrations to flipped-classrooms with IPython notebooks with an active learning emphasis. Student evaluations indicate that students tend to find the class challenging, but also empowering. The most difficult challenge for most students has been working with their computers (installing software, setting environment variables, etc.) Tools such as Canopy, Anaconda, and the IPython notebook have significantly reduced the extraneous cognitive burden on the students as they learn programming.\n+\n+In addition to reviewing the nature of the course, we will review the long-term impact the course has had on the students, in terms of their retrospective evaluation of the course and the current nature of their computational toolbox. We will also discuss how our experience with these courses has been leveraged in designing a Python-centric summer-school for biomedical data science.\n+\n+.. class:: keywords\n+\n+   education, biomedical informatics, biomedical sciences\n+\n+Introduction\n+-------------------------\n+\n+Python has become the most popular language for majors at the top computer science departments (`Philip Guo, \"Python is Now the Most Popular Introductory Teaching Language at Top U.S. Universities\" <http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext>`_). Motivations for Python as the first language are its simple semantics and syntax [Stefik2013], leading to students making fewer mistakes, feeling more confidence, and having a better grasp of programming concepts relative to peers taught with more traditional, lower-level languages such as C or Java [Koulouri2014]. Since Python is a multi-paradigm programming language, it offer great pedagogical flexibility. Python is also an active language with many open source projects and employers looking for Python programmers (`\"Is Python Becoming the King of the Data Science Forest?\" <(http://www.experfy.com/blog/python-data-science/>`_, `\"The RedMonk Programming Language Rankings: January 2015\" <(http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/>`_).\n+\n+These same characteristics make Python well-suited for teaching programming to students without a computational background. The biomedical sciences are increasingly becoming computationally oriented. The installation of electronic medical records, digital public health registries, and the rise of -omics (e.g. genomics, proteomics, biomics) means biological discovery and healthcare delivery increasingly requires the storage and analysis of digital data. That is, these disciplines increasingly require the application of computation. However, students in biomedical sciences largely arrive in graduate school without computational skills. For example, biomedical informatics graduate students have diverse backgrounds including medicine, nursing, library science, psychology, and linguistics. In order to be successful in their graduate studies, the students must quickly pick up programming skills relevant to the biomedical problems they are addressing in their graduate studies.\n+\n+Rather than asking students to take multiple undergraduate computer science courses, we have designed a one semester Python programming course that allows the students to develop programming skills for their graduate studies. In this paper we first provide a brief summary of the course. Using both our personal observations and surveys of past teaching assistants and students, we then summarize our experiences with this course over the past ten years. Finally, we provide suggestions for future teaching of biomedical graduate students.\n+\n+Course Objectives\n+-------------------------\n+\n+The course we describe here was originally created as a required programming course for biomedical informatics students at the University of Pittsburgh. Most recently it has been offered at the University of Utah as a required course for an applied genomics certificate and as an elective for a variety of biomedical science graduate programs including biomedical informatics, biology, human genetics, and oncological science. One of us (BEC) has seven years experience as the course designer and instructor, the other (JI) has one year experience as a student (with a prior instructor) and four years experience as a TA with BEC at the University of Pittsburgh. \n+\n+As we conceive the course, it has two intended purposes. First, the course is intended to provide the students sufficient programming experience that they can use programming in their graduate studies, meaning they should be able to \n+\n+a. continue to learn and improve their Python programming skills on their own, \n+b. successfully use Python in other programming-oriented courses during their graduate studies, \n+c. use Python in their thesis or dissertation work, \n+d. use their experience with the Python course to teach themselves another programming languages as needed. \n+\n+Second, the course was intended to introduce students to the nature of biomedical data: what it looks like, what some of the standards associated with it are, and how to represent and model the data. For example, with clinical lab values, students would be asked to address whether integers, floating point numbers, or strings would be most appropriate for representing the depicted values, what type of meta-data  should be associated with the value (e.g. units, method of measurements), and what sort of data structure would be most appropriate to store the data and meta-data (e.g. list, tuple, or dictionary).\n+\n+Simultaneously, the course tried to illustrate biomedical problems that researchers were currently addressing. Through this it was hoped that students were not learning programming in a vacuum or purely abstractly but in the context of problems in their fields.\n+\n+The course was described to the students as a “boot camp” to get students with little or no programming experience up to speed for starting their graduate work. Consequently, as a \"boot camp\" the students should expect to spend more time than in an average three-credit course. Because this course was viewed as the foundation for subsequent graduate studies that the student had voluntarily enrolled in, it was assumed that the students wanted to learn and consequently were more interested in learning than in the grade received in the course. \n+>","path":"papers/brian_chapman/brian_chapman.rst","position":52,"original_position":52,"commit_id":"553100399f008ac710a72e07ea421373291e7bce","original_commit_id":"553100399f008ac710a72e07ea421373291e7bce","user":{"login":"prabhuramachandran","id":272585,"avatar_url":"https://avatars.githubusercontent.com/u/272585?v=3","gravatar_id":"","url":"https://api.github.com/users/prabhuramachandran","html_url":"https://github.com/prabhuramachandran","followers_url":"https://api.github.com/users/prabhuramachandran/followers","following_url":"https://api.github.com/users/prabhuramachandran/following{/other_user}","gists_url":"https://api.github.com/users/prabhuramachandran/gists{/gist_id}","starred_url":"https://api.github.com/users/prabhuramachandran/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prabhuramachandran/subscriptions","organizations_url":"https://api.github.com/users/prabhuramachandran/orgs","repos_url":"https://api.github.com/users/prabhuramachandran/repos","events_url":"https://api.github.com/users/prabhuramachandran/events{/privacy}","received_events_url":"https://api.github.com/users/prabhuramachandran/received_events","type":"User","site_admin":false},"body":"Unnecessary \">\".","created_at":"2015-06-27T13:36:07Z","updated_at":"2015-06-27T13:36:07Z","html_url":"https://github.com/scipy-conference/scipy_proceedings/pull/160#discussion_r33412757","pull_request_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160","_links":{"self":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments/33412757"},"html":{"href":"https://github.com/scipy-conference/scipy_proceedings/pull/160#discussion_r33412757"},"pull_request":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160"}}},"pull_request":{"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160","id":37815693,"html_url":"https://github.com/scipy-conference/scipy_proceedings/pull/160","diff_url":"https://github.com/scipy-conference/scipy_proceedings/pull/160.diff","patch_url":"https://github.com/scipy-conference/scipy_proceedings/pull/160.patch","issue_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/160","number":160,"state":"open","locked":false,"title":"Paper: Python as a First Programming Language for Biomedical Scientist (Chapman)","user":{"login":"chapmanbe","id":1020182,"avatar_url":"https://avatars.githubusercontent.com/u/1020182?v=3","gravatar_id":"","url":"https://api.github.com/users/chapmanbe","html_url":"https://github.com/chapmanbe","followers_url":"https://api.github.com/users/chapmanbe/followers","following_url":"https://api.github.com/users/chapmanbe/following{/other_user}","gists_url":"https://api.github.com/users/chapmanbe/gists{/gist_id}","starred_url":"https://api.github.com/users/chapmanbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chapmanbe/subscriptions","organizations_url":"https://api.github.com/users/chapmanbe/orgs","repos_url":"https://api.github.com/users/chapmanbe/repos","events_url":"https://api.github.com/users/chapmanbe/events{/privacy}","received_events_url":"https://api.github.com/users/chapmanbe/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-06-16T16:43:38Z","updated_at":"2015-06-27T13:36:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"337a1a9fcc1b7ff1f6f1ae1dd7ef9d00973d3ff5","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160/commits","review_comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160/comments","review_comment_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/160/comments","statuses_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/553100399f008ac710a72e07ea421373291e7bce","head":{"label":"chapmanbe:2015","ref":"2015","sha":"553100399f008ac710a72e07ea421373291e7bce","user":{"login":"chapmanbe","id":1020182,"avatar_url":"https://avatars.githubusercontent.com/u/1020182?v=3","gravatar_id":"","url":"https://api.github.com/users/chapmanbe","html_url":"https://github.com/chapmanbe","followers_url":"https://api.github.com/users/chapmanbe/followers","following_url":"https://api.github.com/users/chapmanbe/following{/other_user}","gists_url":"https://api.github.com/users/chapmanbe/gists{/gist_id}","starred_url":"https://api.github.com/users/chapmanbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chapmanbe/subscriptions","organizations_url":"https://api.github.com/users/chapmanbe/orgs","repos_url":"https://api.github.com/users/chapmanbe/repos","events_url":"https://api.github.com/users/chapmanbe/events{/privacy}","received_events_url":"https://api.github.com/users/chapmanbe/received_events","type":"User","site_admin":false},"repo":{"id":37429361,"name":"scipy_proceedings","full_name":"chapmanbe/scipy_proceedings","owner":{"login":"chapmanbe","id":1020182,"avatar_url":"https://avatars.githubusercontent.com/u/1020182?v=3","gravatar_id":"","url":"https://api.github.com/users/chapmanbe","html_url":"https://github.com/chapmanbe","followers_url":"https://api.github.com/users/chapmanbe/followers","following_url":"https://api.github.com/users/chapmanbe/following{/other_user}","gists_url":"https://api.github.com/users/chapmanbe/gists{/gist_id}","starred_url":"https://api.github.com/users/chapmanbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chapmanbe/subscriptions","organizations_url":"https://api.github.com/users/chapmanbe/orgs","repos_url":"https://api.github.com/users/chapmanbe/repos","events_url":"https://api.github.com/users/chapmanbe/events{/privacy}","received_events_url":"https://api.github.com/users/chapmanbe/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/chapmanbe/scipy_proceedings","description":"Tools used to generate the SciPy conference proceedings","fork":true,"url":"https://api.github.com/repos/chapmanbe/scipy_proceedings","forks_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/forks","keys_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/teams","hooks_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/hooks","issue_events_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/issues/events{/number}","events_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/events","assignees_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/assignees{/user}","branches_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/branches{/branch}","tags_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/tags","blobs_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/git/refs{/sha}","trees_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/statuses/{sha}","languages_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/languages","stargazers_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/stargazers","contributors_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/contributors","subscribers_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/subscribers","subscription_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/subscription","commits_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/commits{/sha}","git_commits_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/git/commits{/sha}","comments_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/comments{/number}","issue_comment_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/issues/comments{/number}","contents_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/contents/{+path}","compare_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/merges","archive_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/downloads","issues_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/issues{/number}","pulls_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/pulls{/number}","milestones_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/milestones{/number}","notifications_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/labels{/name}","releases_url":"https://api.github.com/repos/chapmanbe/scipy_proceedings/releases{/id}","created_at":"2015-06-14T20:59:17Z","updated_at":"2015-06-14T20:59:17Z","pushed_at":"2015-06-16T16:39:39Z","git_url":"git://github.com/chapmanbe/scipy_proceedings.git","ssh_url":"git@github.com:chapmanbe/scipy_proceedings.git","clone_url":"https://github.com/chapmanbe/scipy_proceedings.git","svn_url":"https://github.com/chapmanbe/scipy_proceedings","homepage":"","size":790,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scipy-conference:2015","ref":"2015","sha":"e3df71a5659ce32396b7c520b89109716a3210fa","user":{"login":"scipy-conference","id":4884274,"avatar_url":"https://avatars.githubusercontent.com/u/4884274?v=3","gravatar_id":"","url":"https://api.github.com/users/scipy-conference","html_url":"https://github.com/scipy-conference","followers_url":"https://api.github.com/users/scipy-conference/followers","following_url":"https://api.github.com/users/scipy-conference/following{/other_user}","gists_url":"https://api.github.com/users/scipy-conference/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy-conference/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy-conference/subscriptions","organizations_url":"https://api.github.com/users/scipy-conference/orgs","repos_url":"https://api.github.com/users/scipy-conference/repos","events_url":"https://api.github.com/users/scipy-conference/events{/privacy}","received_events_url":"https://api.github.com/users/scipy-conference/received_events","type":"Organization","site_admin":false},"repo":{"id":1825629,"name":"scipy_proceedings","full_name":"scipy-conference/scipy_proceedings","owner":{"login":"scipy-conference","id":4884274,"avatar_url":"https://avatars.githubusercontent.com/u/4884274?v=3","gravatar_id":"","url":"https://api.github.com/users/scipy-conference","html_url":"https://github.com/scipy-conference","followers_url":"https://api.github.com/users/scipy-conference/followers","following_url":"https://api.github.com/users/scipy-conference/following{/other_user}","gists_url":"https://api.github.com/users/scipy-conference/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy-conference/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy-conference/subscriptions","organizations_url":"https://api.github.com/users/scipy-conference/orgs","repos_url":"https://api.github.com/users/scipy-conference/repos","events_url":"https://api.github.com/users/scipy-conference/events{/privacy}","received_events_url":"https://api.github.com/users/scipy-conference/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scipy-conference/scipy_proceedings","description":"Tools used to generate the SciPy conference proceedings","fork":false,"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings","forks_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/forks","keys_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/teams","hooks_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/hooks","issue_events_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/events{/number}","events_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/events","assignees_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/assignees{/user}","branches_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/branches{/branch}","tags_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/tags","blobs_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/refs{/sha}","trees_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/{sha}","languages_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/languages","stargazers_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/stargazers","contributors_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/contributors","subscribers_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/subscribers","subscription_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/subscription","commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/commits{/sha}","git_commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/commits{/sha}","comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/comments{/number}","issue_comment_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/comments{/number}","contents_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/contents/{+path}","compare_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/merges","archive_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/downloads","issues_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues{/number}","pulls_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls{/number}","milestones_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/milestones{/number}","notifications_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/labels{/name}","releases_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/releases{/id}","created_at":"2011-05-31T10:26:48Z","updated_at":"2015-06-22T07:22:47Z","pushed_at":"2015-06-27T10:59:43Z","git_url":"git://github.com/scipy-conference/scipy_proceedings.git","ssh_url":"git@github.com:scipy-conference/scipy_proceedings.git","clone_url":"https://github.com/scipy-conference/scipy_proceedings.git","svn_url":"https://github.com/scipy-conference/scipy_proceedings","homepage":"","size":148024,"stargazers_count":76,"watchers_count":76,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":142,"mirror_url":null,"open_issues_count":38,"forks":142,"open_issues":38,"watchers":76,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160"},"html":{"href":"https://github.com/scipy-conference/scipy_proceedings/pull/160"},"issue":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/160"},"comments":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/160/comments"},"review_comments":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160/comments"},"review_comment":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/160/commits"},"statuses":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/553100399f008ac710a72e07ea421373291e7bce"}}}}