GNU parallel Updated +Created
The author Ole Tange answers every question about it on Stack Exchange. What a legend!
This program makes you respect GNU make a bit more. Good old make with -j can not only parallelize, but also take in account a dependency graph.
Some examples under:
man parallel_exampes
To get the input argument explicitly job number use the magic string {}, e.g.:
printf 'a\nb\nc\n' | parallel echo '{}'
sample output:
a
b
c
To get the job number use {#} as in:
printf 'a\nb\nc\n' | parallel echo '{} {#}'
sample output:
a 1
b 2
c 3
c 3
{%} contains which thread the job running in, e.g. if we limit it to 2 threads with -j2:
printf 'a\nb\nc\nd\n' | parallel -j2 echo '{} {#} {%}'
sample output:
a 1 1
b 2 1
c 3 2
d 4 1
The percent must be a reference to "split the inputs module the number of workers", and modulo uses the % symbol in many programming languages such as C.
To pass multiple CLI argments per command you can use -X e.g.:
printf 'a\nb\nc\nd\n' | parallel -j2 -X echo '{} {#} {%}'
sample output:
a b 1 1
c d 2 2
It must be easy to change your area of study Updated +Created
If the choice of what to learn depend on a years long dependency graph of other obligations, which currently are the increasingly interlinked:
you end up without much choice at all.
The lock-in periods must be much more fluid and shorter term than those, otherwise it makes the almost inevitable pivots to success impossible.
This is something that Ciro Santilli has heard from several people at the end of their undergrad/PhD degrees. Some online mentions:
When I realized the biggest reason to continue my pdh was to be dr helps, that's when decided I should probably leave.
The side effects of ambitious goals are often the most valuable thing achieved Updated +Created
A quote by Ciro's Teacher R.:
Sometimes, even if our end goals are too far from reality, the side effects of trying to reach them can have meaningful impact.
If the goals are not ambitious enough, you risk not even having useful side effects so show in the end!
By doing the prerequisites of the impossible goal you desire, maybe the next generation will be able to achieve it.
This is basically why Ciro Santilli has contributed to Stack Overflow, which has happened while was doing his overly ambitious projects and notice that all kinds of basic pre-requisites were not well explained anywhere.
This is especially effective when you use backward design, because then you will go "down the dependency graph of prerequisites" and smoothen out any particularly inefficient points that you come across.
Going into such productive procrastination is also known informally as yak shaving.
There are of course countless examples of such events:
  • youtu.be/qrDZhAxpKrQ?t=174 Blitzscaling 11: Patrick Collison on Hiring at Stripe and the Role of a Product-Focused CEO by Greylock (2015)
The danger of this approach is of course spending too much time on stuff that will not be done enough times to be worth it, as highlighted by several xkcds:
Figure 1.
xkcd 974: The general problem
. Source.
Figure 2.
xkcd 1205: Is it worth the time
. Source.
Figure 3.
xkcd 1319: Automation
. Source.