auto populate common columns of all tables using triggers
You didn't post what you tried for a simple row level trigger so it isn't obvious how you got an infinite recursion error.  My assumption is that you tried to insert into the table in your trigger rather than simply setting the column values.  Creating a view and an instead of trigger is vastly overcomplicating the problem.
My assumption is that you want something like this.  I'm not clear why modified_by and modified_date are not null since there is logically no modification date or user if a row has just been inserted.  If you want to populate modified_by and modified_date on the initial insert, you can add that to the inserting branch.
create or replace trigger course_trg
  before insert or update on course
  for each row
declare
begin
  if( inserting )
  then
    :new.created_by := user;
    :new.created_date := sysdate;
  elsif( updating )
  then
    :new.modified_by := user;
    :new.modified_date := sysdate;
  end if;
end;