Introduction to Nonsmooth Optimization:Theory, Practice and Software