Many rules in Unix philosophy explicitly or implicitly including those of simplicity and modularity encourage writing simpler smaller programs with limited scope and to avoid unneeded complexities. I understand the advantages to that and I think it is one of the things that becomes intuitive with more programming experience. What I actually had issues with was that so far, all communication I have seen between small programs was limited to input output files being shared or the sort of resources sharing between different threads running on the same program. The assignment about Pipes and Forks was a very good introduction of a new method of inter-process communication which I was not aware of before. While I was able to have a good enough understanding to complete the assignment, just the sheer potential utility of the mechanism for creating programs tells me I have a lot more to learn about it. Another good reason to keep using Ubuntu.