The most important thing to consider is your level of expertise in bioinformatics.
As an educator with quite a bit of experience teaching bioinformatics, I believe that there are huge challenges when learning either NextFlow or Snakemake. These systems were developed for different needs than a typical life scientist has.
These tools are built by experts and for experts that know the commands and methods like the back of their hands. They have been doing bioinformatics for a long time and intimately understand the various interconnected datatypes, parameters, and ancillary information. Their problem is that they cannot scale their work up to hundreds of tasks with a flick of the wrist.
For a beginner, both NextFlow and Snakemake present a steep learning challenge as all their features, complexities, and abstraction are added on top of and in addition to doing bioinformatics.
GenoMax has already linked to a post I recently made here: bash program with two subprograms. How to use getopts in all of them? where I show how good old makefiles are simpler and more readable than either of these approaches
I strongly suspect that none of the people that recommend that you start with a full-grown pipeline engine have themselves learned to write pipelines that way. Most likely all of them started with the process I describe below. Thus I think you should do the same:
- Learn to write bash scripts
- Add the bioinformatics code you run into these bash scripts
- Once you bash scripts work, learn to refactor your scripts to make them reusable. For example, move hardcoded paths into variables that can be easily edited
- Learn to write documentation that explains in detail what each step does, why each parameter was chosen a certain way, and how your scripts should be used.
- Now keep running your scripts and start the note the pain points; what is not sufficiently automated? What is overly automated and keeps causing troubles?
Once you have the above and your scripts run fine, you've already learned how to write a bioinformatics pipeline, now, learn to write a simple Makefile.
Once you have your scripts and/or your makefile, if you still feel that it is not automated enough, then pick snakemake or nextflow
While a
pipelinecan mean different things you may want to learn a workflow program instead. Here isnextflow: https://www.nextflow.io/docs/latest/index.htmlYou could also use simple
makefilesto great effect as demonstrated here by @Istvan --> bash program with two subprograms. How to use getopts in all of them?see my answer for Generating shell scripts