blender2.8でいくつかapiが変わっているようですね。
とりあえずは、上記の選択部分の行と一つ下の行を下記に差し替えれば動くと思います。
bpy.context.collection.objects.link(obj)
obj.select_set(True)
その他、下記のドキュメントに Scene/Object のAPIの変更点がまとめられています。
Blender 2.80: Scene and Object API
【補足】
プログラミングの練習ということで、色々とネット上のコードを参考にしているかと思いますが、Blender2.8の情報はまだそこまで多くないと思います。できれば Blender2.79 などで進めていったほうが「プログラミングの練習」としてはスムーズに学習できるかと思います。