I don’t know C, but as a seasoned Java programmer (not to mention that I do a lot of scripting) I really didn’t expect:
Makefile are idiotic (tab is significant!)
You need those stupid header files
Shared Objects are a mess
The order of the arguments on the GCC command line matters!