A Beginner's Guide to Scala, Object Orientation and Functional Programming