Learning From The GNU Project--Programming From The Ground Up