Learning to think critically about data from foundational principles to crafting data-intensive applications