MESSAGE
DATE | 2008-06-29 |
FROM | email
|
SUBJECT | Re: [NYLXS - HANGOUT] C Programing Workshop
|
any thoughts on teaching a course on Python?
its way more friendly to new programmers, its quick to use and provides some instant gratification while forcing good techniques
i know c is the baseline of cs, but, especially in todays webby world, its a tough first starter when a lot of the 'fun' projects are web stuff
i know linux is c, but the new programmer doesn't even have to compile any software in linux these days. wasn't always so.
plus python has lots of c extension modules providing a warm entry to static coding once understanding and skills are honed a bit
just a thought if you're looking to introduce new people to programming
Ronny Abraham wrote: > If you're going to teach a class, I think it's important to also go > into makefiles. Personally, I hate makefiles and prefer to use scons > (it's python based and a hell of a lot simpler). Nevertheless, you > need to know how makefiles work if you want to do anything usefull > with the majority of projects out there. I would sign up for a class > if you intend to explore that aspect. > > Also, if you are going to go into C++, it's better to stick with Bruce > Eckels book Thinking > in C++ It's downloadable and free (as in beer), so there is no > reason not to use it. It's also the best book you are ever going to > find on the language. > > He has a second volume covering the Standard Template Library, but > unfortunately I never found the time to go through it. > > The thing that makes Eckel stand out is that he explains why things > are done in a certain way. And since he was on the standards board > for 10 years, he also has no problem being open about what is wrong > with the language. > > -ron > > On Sat, Jun 28, 2008 at 10:04 PM, Ruben Safir wrote: >> The C programming language was invented side by side with Unix. The King text goes through >> much of the history of the language. Here I'd like to make a few points both in the general >> and specific to GNU/Linux as a platform for C development. >> >> Oxymoronic as it sounds C language is a bare bones specification without anything useful. >> All it requires is the keyword main, which defines the root function that everything else >> is piled into. Everything that C does is imported from external libraries. These libraries >> are defined, in the simplist case, on top of your program. >> >> For example, on page 10 of the King book is the following program: >> >> #include >> >> main(){ >> printf("To C, or not to C: that is the question \n"); >> } >> >> which was inherited from the K&R text. The first line defines the >> library stdio.h which c is to import. The main keyword is present >> (which defines the required function main() to be explained later, >> and the function printf which is defined in the library stdio.h. >> >> Unlike programming languages such as Perl, Python and Rudy, C is a compiled >> programming language. It needs a compiler to make a binary program that >> can then be executed. The binary has machine like instructions which your >> computer can directly understand. Unfortunately, your computer doesn't speak >> English (or Spanish, Russian, Japanese, Manderin, Hebrew, or Udo). It speaks >> binary. C is the interface between human language and machine code. The binaries >> are very low level and C as a language, today, is considered to be very close to >> the machine. You'd have to write programs in Assembly to get much close to your CPU. >> >> Therefor, you need a C compiler to translate your C Programming text into machine code. >> At one time suc compilers were expensive and hard to get. Thanks to Richard Stallman and >> friends, today we have compilers on almost every GNU based system. That compiler is called >> gcc. Compilers do three things: Parse, compile and link. >> >> When you call: >> >> gcc file.c >> >> It loads file.c into the compiler. It then parses the programming you created and checks >> for errors. It then analysis the symbols in your program and looks for their programming >> definitions in the libraries that you call with #include. It then the different code >> machine code peices it finds into a single binary. >> >> The gcc compiler is very complex and learning C includes learning much about the compiler >> and also the debugger, called gdb. Both are documented with man pages, and have full books >> which are available from the Free Software Foundation and worthy additions to your library. >> Both are included in the NYLXS library as references. >> >> Any editor can be used to make C programs, but I strongly recommend learning either EMACS >> or VI. EMACS has a GNU version, and VI has a version called VIM which can be downloaded and >> used. I perfer the VIM editor and will use in in example and demonstrations. No editor >> wars are needed here. I will say, however, if your using EMACS, then LEARN it. It is not >> Microsoft Notepad. >> >> After editing this first program run the following command on the command line: >> For this workshop, the "$" or "ruben-at-www2:~/cprog>" is the shell prompt. Your prompt >> on the NYLXS server will look like the second example. >> >> >> $ gcc -Wall file1.c -o file1 >> >> the output will look like this: >> ruben-at-www2:~/cprog> gcc -Wall file1.c -o file1 >> file1.c:3: warning: return type defaults to `int' >> file1.c: In function `main': >> file1.c:5: warning: control reaches end of non-void function >> ruben-at-www2:~/cprog> >> >> >> The compiler gives you 3 warning messages. I won't go into them currently, but in a few >> weeks it should make sense to you. We will, however, fix the warnings later. For now, if >> you look at your directory >> >> ruben-at-www2:~/cprog> ls -l >> total 12 >> -rwxr-xr-x 1 ruben staff 7041 2008-06-28 21:45 file1 >> -rw-r--r-- 1 ruben staff 86 2008-06-28 21:35 file1.c >> >> file1.c is the file we are editing. You see it has no permisions to be executed. >> file1 is the new executable we created. In addition. you see that it is executable. >> gcc makes it executable permisions for us in most systems. We run our new program >> on the command line like this: >> >> ruben-at-www2:~/cprog> ./file1 >> To C, or not to C: that is the question >> >> The C language defines the function main() and not much else. However, it is defined >> as a function that returns an integer. We didn't return anything. We can fix this with >> a "return function". >> >> We return a 0 by convention unless we are trying to indicate an error or other message. We also >> put the keyword 'int' infront of main which explicitly defines that main returns integers. >> >> Our program not looks like this: >> >> #include >> >> int main(){ >> printf("To C, or not to C: that is the question \n"); >> return 0; >> } >> >> and when we compile: >> >> ruben-at-www2:~/cprog> gcc -Wall file2.c -o file2 >> ruben-at-www2:~/cprog> >> >> No warnings. >> >> and when we run it, it looks like this: >> >> ruben-at-www2:~/cprog> ./file2 >> To C, or not to C: that is the question >> ruben-at-www2:~/cprog> >> >> >> >> Next - Comments and C varriable basics. >> >> >> >> -- >> http://www.mrbrklyn.com - Interesting Stuff >> http://www.nylxs.com - Leadership Development in Free Software >> >> So many immigrant groups have swept through our town that Brooklyn, like Atlantis, reaches mythological proportions in the mind of the world - RI Safir 1998 >> >> http://fairuse.nylxs.com DRM is THEFT - We are the STAKEHOLDERS - RI Safir 2002 >> >> "Yeah - I write Free Software...so SUE ME" >> >> "The tremendous problem we face is that we are becoming sharecroppers to our own cultural heritage -- we need the ability to participate in our own society." >> >> "> I'm an engineer. I choose the best tool for the job, politics be damned.< >> You must be a stupid engineer then, because politcs and technology have been attached at the hip since the 1st dynasty in Ancient Egypt. I guess you missed that one." >> >> (c) Copyright for the Digital Millennium >> >
|
|