{"id":20944705,"url":"https://github.com/transientlunatic/notes-software","last_synced_at":"2025-06-15T00:34:54.566Z","repository":{"id":69839195,"uuid":"290451868","full_name":"transientlunatic/notes-software","owner":"transientlunatic","description":"Notes on software engineering principles for the natural sciences","archived":false,"fork":false,"pushed_at":"2022-10-31T10:56:11.000Z","size":71,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-13T04:17:12.161Z","etag":null,"topics":["containers","docker","htcondor","lecture-notes","notes","python","python-package","scientific-computing","singularity","software-development","software-engineering","testing","tutorial","unit-testing","version-control","versioning"],"latest_commit_sha":null,"homepage":"https://notes.daniel-williams.co.uk/software","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/transientlunatic.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-26T09:20:48.000Z","updated_at":"2022-01-31T12:20:10.000Z","dependencies_parsed_at":"2023-06-01T01:45:08.127Z","dependency_job_id":null,"html_url":"https://github.com/transientlunatic/notes-software","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/transientlunatic/notes-software","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transientlunatic%2Fnotes-software","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transientlunatic%2Fnotes-software/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transientlunatic%2Fnotes-software/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transientlunatic%2Fnotes-software/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/transientlunatic","download_url":"https://codeload.github.com/transientlunatic/notes-software/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/transientlunatic%2Fnotes-software/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259905429,"owners_count":22929917,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containers","docker","htcondor","lecture-notes","notes","python","python-package","scientific-computing","singularity","software-development","software-engineering","testing","tutorial","unit-testing","version-control","versioning"],"created_at":"2024-11-18T23:44:55.715Z","updated_at":"2025-06-15T00:34:54.524Z","avatar_url":"https://github.com/transientlunatic.png","language":"Python","readme":"Software Engineering for Scientists\n===================================\n\nAs scientists we spend most of our time thinking and learning about how various parts of the universe--be they atoms, molecules, or even galaxies--work.\nFor most of us that also means that we need to turn to computer programming and writing software to help analyse data and perform research.\nMost of us, however, don't spend much time thinking about what the best way to do this is, and while many undergraduate science courses teach the fundamentals of programming in a language like C, python, or R, very few have the scope to cover good practices once you start writing *lots* of code.\n\nThey assume you have some knowledge of a programming language; most of the concepts discussed will work for any language, but most of the examples will use Python.\nThis means that you'll need to figure out the best way to do some things in your own language, but hopefully I'll have provided the scaffolding for that learning.\n\nNo part of these notes is specifically intended to be more important than any other, but if you're very pressed for time I strongly recommend reading the chapter on **version control**, which is something it's helpful to understand before you start working on even the simplest scripts.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftransientlunatic%2Fnotes-software","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftransientlunatic%2Fnotes-software","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftransientlunatic%2Fnotes-software/lists"}