I think you're underestimating network latency. If reading from the cache is like talking to a person face-to-face, then reading from disk is like sending a letter, and reading over the network is like sending a rocket to the moon :P
So for the example you gave, with 1 Gbps upload speed (pretty fast even by today's standards) then a 16Tb folder would take 16,000 seconds = almost 4 1/2 hours just to send to one other device. So unless the compression task would take over 9 hours and is completely parallel (no compression algorithm is) then its faster to just do it on one machine. You could send it over to more than one other device, but then the transmission time would increase (albeit non-linearly) and you'll see lower percentage gains in compute time due to Amdahl's Law.
That being said, solutions for what you're talking about do exist! See Hadoop/Apache Spark for a distributed, scalable, general-purpose mapreduce framework. I'm sure Azure/AWS have more modern solutions as well.
As for being burnt out on tutorials, I have always struggled to get through them myself. Have you tried downloading a complete working project and editing it to learn that way? I believe the Angular tutorial is very easy to set up, and renders a webpage with several buttons, animations, and textboxes you can play around with.
"what I need to know to build and piece together code"
Tough question to answer, this could mean several different things. It may be that you need to practice splitting up your code into well-defined units. This is done on several levels, but basically you should really try to have functions that do one specific thing, and classes that have some real-world meaning to them. This is vague, I know, but a good way to help you do it properly is to come up with good names for variables, functions, classes, filenames, etc. That way, instead of having "app.js" that contains 100% of the code for your project, you would have "helper.js", "main-page.js", "service.js", "model.js", etc. Instead of having function func1 which loads client data from a database, extracts some information from it, and displays it to the user in a textbox, split that up into 3 different functions which each do that thing only. I think if you practice this, it will become more clear how the pieces fit together, because the pieces will have sharp and well-defined edges, instead of being fuzzy and overlapping :D
I think you're underestimating network latency. If reading from the cache is like talking to a person face-to-face, then reading from disk is like sending a letter, and reading over the network is like sending a rocket to the moon :P
So for the example you gave, with 1 Gbps upload speed (pretty fast even by today's standards) then a 16Tb folder would take 16,000 seconds = almost 4 1/2 hours just to send to one other device. So unless the compression task would take over 9 hours and is completely parallel (no compression algorithm is) then its faster to just do it on one machine. You could send it over to more than one other device, but then the transmission time would increase (albeit non-linearly) and you'll see lower percentage gains in compute time due to Amdahl's Law.
That being said, solutions for what you're talking about do exist! See Hadoop/Apache Spark for a distributed, scalable, general-purpose mapreduce framework. I'm sure Azure/AWS have more modern solutions as well.
As for being burnt out on tutorials, I have always struggled to get through them myself. Have you tried downloading a complete working project and editing it to learn that way? I believe the Angular tutorial is very easy to set up, and renders a webpage with several buttons, animations, and textboxes you can play around with.
"what I need to know to build and piece together code"
Tough question to answer, this could mean several different things. It may be that you need to practice splitting up your code into well-defined units. This is done on several levels, but basically you should really try to have functions that do one specific thing, and classes that have some real-world meaning to them. This is vague, I know, but a good way to help you do it properly is to come up with good names for variables, functions, classes, filenames, etc. That way, instead of having "app.js" that contains 100% of the code for your project, you would have "helper.js", "main-page.js", "service.js", "model.js", etc. Instead of having function func1 which loads client data from a database, extracts some information from it, and displays it to the user in a textbox, split that up into 3 different functions which each do that thing only. I think if you practice this, it will become more clear how the pieces fit together, because the pieces will have sharp and well-defined edges, instead of being fuzzy and overlapping :D