![]()
This page covers practical guidance on writing good code, choosing and using software tools, transferring files, and understanding key technical terminology. These topics apply across all the computational work in this course and beyond.
Scripts
Have you ever wasted time trying to understand someone else's code? Have you ever struggled to find a bug because you were lost in your own script from months ago? It is easy to improve your scripts. Adopting a consistent code style and using comments to explain and structure your code will help both you and others. Start writing code with style and be generous with comments.
Nice Code
Good developers write good code. Great ones also write good comments.
Freeware
Most of the tools used in bioinformatics are free and open source. We rely heavily on these solutions. But just because a tool is free does not mean there are no restrictions. Many applications are free for academic use only. Freeware comes with licence agreements — always read them.
Free also does not mean free of bugs or limitations. The longer a tool has been around and the larger its user community, the more thoroughly it has been tested. But even a bug-free tool has limitations.
Not every new tool is better than its predecessors, despite what the authors might claim. Choose your tools carefully and critically. Using the latest application is not always the wisest strategy.
Even a free program is of limited use without a proper manual and regular maintenance. Developers maintain tools until release, but often stop updating them soon after. This is a lot of work. Show your appreciation with a friendly email or a citation. You might even consider donating to keep a tool alive.
Choosing and Using Applications
It is often easier to find an existing solution than to develop your own. However, there are some important things to consider before downloading whatever you find first.
Before you click Download:
What to look out for?
- Licence type and copyright restrictions
- Input and output formats
- Limitations of the tool
- Dependencies and resource requirements
- Quality of documentation
- Release history and maintenance status
Once you have found and installed the right tool:
How to get started?
- Verify the installation and check the logs
- Run an example or simplified test using dummy or toy data
- Use the verbose option (
-vor--verbose) to understand what the tool is doing - Evaluate performance in terms of speed and memory consumption
- Explore the limitations before processing your real data
If you encounter a problem you cannot solve:
Where to get help?
- Developer webpage
- Manual and vignettes
- Help option (
--help) - README files
- User community or forum
- Contact the developer directly
Once you have successfully processed your data:
What information do you need to provide for reproducibility?
- Scripts and command lines, well commented
- Software version (
-vor--version) - Parameters and options used
- Full reference to the tool
File Exchange
There are many ways to transfer files to or from a remote server. Choosing the right tool depends on your specific needs, preferences and environment.
Command-Line Tools
scp (Secure Copy Protocol)
Transfer files securely between local and remote systems over SSH.
rsync (Remote Sync)
Synchronise files and directories between two locations over SSH. Only transfers the parts that have changed, making it efficient for large or frequently updated datasets.
sftp (SSH File Transfer Protocol)
Interactive file transfer over SSH. Works like a file browser in the terminal, allowing you to navigate, upload and download files.
wget
Download files from the web or via FTP. Supports HTTP, HTTPS and FTP, can resume interrupted downloads, and can download directories recursively.
curl
Transfer data to or from a server using various protocols. Highly configurable and suitable for more complex tasks beyond simple downloads.
GUI Clients
For those who prefer a graphical interface, Cyberduck and FileZilla are both excellent options. See the Requirements page for connection settings.
Tech Terms
Source: TechTerms
Server
A server is a high-performance computer built to manage or store data, devices and network systems. The term can refer to a physical machine, a virtual machine (VM), or software performing server functions. A VM is an emulated computer system that uses physical resources such as CPU, RAM and disk storage but is isolated from other software on the host machine. VMs are easy to create, modify and scale without affecting the underlying hardware.
FTP Clients
FTP clients are used to upload, download and manage files on a remote server. Common examples include Cyberduck and FileZilla.
RAID
RAID stands for Redundant Array of Independent Disks and is a method of storing data across multiple hard disks. The computer sees them as one large disk, but they work more efficiently and reliably than a single disk. The key technique is striping, which splits stored data among the drives for speed, redundancy, or both.
Shell
The shell is a text-based command-line interface. Users enter commands to run programmes, manage directories, and control processes. Because the shell operates one layer above the operating system, it enables operations that are not always possible through a graphical user interface.
VPN
VPN stands for Virtual Private Network. It establishes a protected network connection over a public network by encrypting your internet traffic and masking your online identity. This makes it more difficult for third parties to intercept data or track activity. The encryption takes place in real time.