Rest assured, my professor is not wrong. I also quite share his opinion personally. Concurrent programming using current models such as semaphores, monitors, and higher level concepts such as Linda tuple spaces really is hard for anything but the simpler cases. While many of the usual uses of concurrent programming, such as GUI workers thread separation, are well explored and not that difficult, anything more complex soon gets very hairy, especially when greater multi processor utilization is the goal. There is a lot of research going on to provide better concurrency support in new programming languages. Efforts such as Oz and Erlang mark progress in that direction.