Which will be more helpful for a CS graduate if they intend to work in companies like Google, Facebook in future: keep problem solving and participating in algorithm competitions or fully focus on software development (learning technologies, work in open source projects)?