Re: [CODE4LIB] Advice on a class
Sender: CODE4LIB@LISTSERV.ND.EDU On-Behalf-Of: sesunc...@gmail.com Subject: Re: [CODE4LIB] Advice on a class Message-Id: cfd505f2-8dec-47e8-b0d3-b0bd0a759...@gmail.com Recipient: jcost...@trinity.edu.test-google-a.com, Forwarded: jane.costa...@trinity.edu Recipient: jdon...@trinity.edu.test-google-a.com, Forwarded: jeremy.don...@trinity.edu ---BeginMessage--- On Jul 27, 2011, at 10:32 PM, Bill Janssen wrote: If I'm hiring a programmer, I want them to know C and Python. [...] Various flavors of C are acceptable: Objective-C is OK with me, and C++ is a plus -- it's an order of magnitude more difficult than C to use properly, and people who can sling it properly are rare. I wouldn't say that C++ is an OOM harder than raw C to use properly; it just adds so many more ways to use it improperly, and templates are the work of the devil. The problem with learning C++ is that it can be hard to predict what sort of code will be generated for very similar constructs, which is not a good thing for a low level language. It's still always possible to fall back on C and inline assembler when you need it. That's really the advantage of learning straight C as as low level language- it lets you see what sort of machine code corresponds to what sort of source code. When combined with a good performance measuring suite you can get a much better feel for how different types of data access have completely different performance, what sort of things get optimized/vectorized cleanly, etc. It also gives you an appreciation for how nice it is to be able to ignore these things most of the time when using higher level languages. Objective-C (counting the NS Foundation classes as part of the language) is a cleaner language, with a more dynamic object model; however, in current implementations the overhead of method calling is much too high, making the OO features only usable for relatively coarse grained methods. One thing that the Foundation classes show is how valuable it can be to have long method names. Additional languages which carry weight with me on a resume are OCaml, Processing, and any of Common Lisp, Scheme, or Clojure. Did you mean Clozure? The other two are kinds of lisp. :-P Also, java should no more be considered in isolation from IntelliJ Idea that a lisp should be used without an emacs. Simon ---End Message---
Re: [CODE4LIB] Advice on a class
Well, those are cute quotes and it's not difficult to find criticisms of any programming language online. But the point remains that you can write almost all of C within a C++ context, and in terms of learning fundamentals an introduction to programming with C++ is going to cover more relevant material for library programming purposes than a pure C class - you'll get some OOP, be spared explicit memory management (well, using 'new' instead of 'malloc') etc. All of which transitions more seamlessly to languages where the real action is in library terms - Java, Ruby, Python etc. because of the code libraries available (and look at the huge number of library / archives related projects written in PHP). Of course, this supposes that you're not aiming for systems level programming, in which case C/C++ would a typical choice (but certainly not for beginners). But if your only option is a class on C programming, and you've had no other low-level exposure, then I think it's worth it for the reasons others have mentioned. Mark Cooper, Sonoma County Library On Sat, 30 Jul 2011 06:38:22 -0300, Luciano Ramalho luci...@ramalho.org wrote: On Tue, Jul 26, 2011 at 4:18 PM, Genny Engel gen...@sonoma.lib.ca.us wrote: C++ might be a better choice if you want to start off with a grounding in object-oriented programming. �Or maybe Java. �I'm about to start the C++ course at the local junior college. �Which reminds me to mention, it probably doesn't matter which programming course you take right now -- if you then go through life taking more programming classes like I do! Here are a few quotes from computer science notables about C++: I invented the term Object-Oriented, and I can tell you I did not have C++ in mind (Alan Kay) There are only two things wrong with C++: The initial concept and the implementation (Bertrand Meyer) Whenever the C++ language designers had two competing ideas as to how they should solve some problem, they said, 'OK, we'll do them both'. So the language is too baroque for my taste (Donald E Knuth) To really learn OOP, Ruby, Java, Python and particularly Smalltalk are much better choices, IMHO. OK, you won't find much practical use for Smalltalk, but neither for C++ in this day and age (not in a library setting, anyway). And learning C then Smalltalk is a great path to Objective-C, the main language used to program iPhones and iPads. Putting aside the OOP issue, learning C is totally worthwhile as a grounding for any other language. Its what C++ adds to C that is not worth the trouble, as there are better alternatives. Cheers, -- Luciano Ramalho programador repentista || stand-up programmer Twitter: @luciano
Re: [CODE4LIB] Advice on a class
It's always good to know C if you ever need to write an Apache module! Juan Madrigal Web Developer University of Miami Richter Library On Jul 30, 2011, at 5:39 AM, Luciano Ramalho luci...@ramalho.org wrote: On Tue, Jul 26, 2011 at 4:18 PM, Genny Engel gen...@sonoma.lib.ca.us wrote: C++ might be a better choice if you want to start off with a grounding in object-oriented programming. Or maybe Java. I'm about to start the C++ course at the local junior college. Which reminds me to mention, it probably doesn't matter which programming course you take right now -- if you then go through life taking more programming classes like I do! Here are a few quotes from computer science notables about C++: I invented the term Object-Oriented, and I can tell you I did not have C++ in mind (Alan Kay) There are only two things wrong with C++: The initial concept and the implementation (Bertrand Meyer) Whenever the C++ language designers had two competing ideas as to how they should solve some problem, they said, 'OK, we'll do them both'. So the language is too baroque for my taste (Donald E Knuth) To really learn OOP, Ruby, Java, Python and particularly Smalltalk are much better choices, IMHO. OK, you won't find much practical use for Smalltalk, but neither for C++ in this day and age (not in a library setting, anyway). And learning C then Smalltalk is a great path to Objective-C, the main language used to program iPhones and iPads. Putting aside the OOP issue, learning C is totally worthwhile as a grounding for any other language. Its what C++ adds to C that is not worth the trouble, as there are better alternatives. Cheers, -- Luciano Ramalho programador repentista || stand-up programmer Twitter: @luciano
Re: [CODE4LIB] Advice on a class
On 29 July 2011 14:00, Cowles, Esme escow...@ucsd.edu wrote: I think most of the focus on C in this discussion is because that's what the OP had available. The consensus seems to be: C isn't the language you would pick if you had your choice, but if that's what's available, it's a fine language to use to learn the fundamentals, and you can learn the rest later. Most important: learning a programming language is not the same thing as learning to program. If your course has a good teacher, then you will learn to program, whatever the language. Applying the concepts and principles that you learn to some other programming language down the line will be easy, relatively speaking. Learn to program. Take a COBOL or FORTRAN course if that's what's on offer. Just become a programmer. After that, it's all just minor adjustment. -- Mike.
Re: [CODE4LIB] Advice on a class
Simon Spero sesunc...@gmail.com wrote: Additional languages which carry weight with me on a resume are OCaml, Processing, and any of Common Lisp, Scheme, or Clojure. Did you mean Clozure? The other two are kinds of lisp. :-P ;-). Nothing wrong with Clojure -- presumably JSR 292 in Java 7 will make it even better. I thought I'd covered Clozure under CL, though. Bill
Re: [CODE4LIB] Advice on a class
Bill Dueber b...@dueber.com wrote: Unless you're in a very, *very* different library than mine, all the low-level stuff written in C and variants are at a low-enough level (and in very specialized domains) that I'd never have an expectation that anyone working in the library would mess with it. I presume there are people in research libraries that muck around with C/C++, rolling their own libraries and what not, but I've been at Michigan for six years and I haven't heard of it, here or elsewhere. For most of us, I think, doing something in C is premature optimization. Completely agree with most of this. The issue comes up when you need to *fix* something in one of these libraries that someone else has provided, or hook one of them up to your higher-level language. I hear the assertion often that a programmer needs to know C/assembly so they can truly understand how the machine is working at a deep level, and I've grown over the years to dismiss that assertion. Yes, I'd say needs is too strong. Almost no one who makes a living programming in libraries is going to do a better job by hand than a modern optimizing compiler, certainly not if you take ROI into account. Data structures and Big-O is enough to tell you if you're moving down the right path, and then it's just a matter of being smart enough to use existing libraries where applicable --- and, again, avoiding premature optimization, at the code level or at the selection-of-a-language level. If you're hiring someone who's going to have to know the details of cache misses and how far to unroll loops or whatnot, you know exactly what you're hiring him/her for and don't need advice about hiring a generic programmer. Yep, and yep. For stuff where you need not access to the bare metal but just raw speed, Java is mature, super-fast, and has lots of optimized libraries available. Here's where we differ. Java is mature, and very well-optimized (though super-fast is perhaps a bit much), but the language itself is rather poorly designed, and the libraries available are in my experience a sad hodge-podge of brilliance and stodge. I've spent far too much time working around inexplicably years-old bugs in J2SE's standard library. Some of the J2EE systems are very good, though. It also turns out many of us are using Solr these days, so Java has snuck into the library infrastructure already. :-). I used Doug's text-indexing library when he and Jan wrote it in Common Lisp at PARC in the early 90's, and I was happy to see it appear again in more commercially acceptable form as Lucene. Lucene, and parts of Solr, are important contributions to the technical landscape, and Lucene is an example of an excellent Java library (I don't know Solr well enough to comment). But I use Lucene through Andi Vajda's excellent PyLucene, and I use a couple of other Java libraries via JCC, Vajda's wrapper for those Java libraries worth using. 90% of my argument for doing green-field projects in Ruby is that I can access low-level Java libraries to do the heavy lifting and get an optimizing VM for free. The thing I've found about Python is that one rarely needs to stoop to using Java libraries, as there are generally superior Python libraries available. This is perhaps just a comment on the relative novelty of Ruby, which is a fine programming language in its own right. Though if my goal was to exploit the Java ecosystem, I imagine I'd use Clojure or Jython instead. I don't care what scripting language you use, as long as you use it well. Python, Ruby, Perl, whatever. If you know one, you can learn the others. I tend to agree about the learning, but that doesn't make them equally useful. The size and shape of the user community and the variety of offerings and third-party libraries available are important considerations. A good programmer is aware of that and reflects that awareness in his skill set. I would never foist a project in, say, OCaml or Scheme on my library, because who the hell is going to maintain it (and its environment)?? What kind of programmer can I hire 'off the street'? This is an important and unfortunate commercial consideration which sometimes forces a trade-off with the quality and functionality benefits available with higher-level boutique languages. But I sure want someone who understands side effects and their effect on multi-threaded programming, because I've got a lot of idle cores sitting around waiting for work. Yep. Some nice features in Clojure for exploiting that. Finally, I always ask someone what their favorite programming environment is. I've had a few candidates tell me that they just use Notepad, and I don't mind admitting that that's almost a dealbreaker for me. Using a good editor or an IDE is a critical part of taking advantage of the language ecosystem. A good programming editor is a must. Yep. Not having at least syntax highlighting and checking is, to me, a sign that
Re: [CODE4LIB] Advice on a class
Until the Singularity happens, anyway. I'd think there will always be lots of enterprise Java jobs around. The Singularity will be written in Java. Jason On 11-07-27 7:32 PM, Bill Janssen jans...@parc.commailto:jans...@parc.com wrote: If I'm hiring a programmer, I want them to know C and Python. C because all the low-level stuff is written in that, Python because it's simply the most useful all-around programming language at the moment, and if you don't know it, well, how devoted are you really to your craft? Various flavors of C are acceptable: Objective-C is OK with me, and C++ is a plus -- it's an order of magnitude more difficult than C to use properly, and people who can sling it properly are rare. Additional languages which carry weight with me on a resume are OCaml, Processing, and any of Common Lisp, Scheme, or Clojure. If I was hiring a digital *librarian*, I'd also expect them to know Javascript, the language at the heart of the EPUB format. But Javascript is kind of tricky; it's a subtle powerful language with bad syntax and weak libraries. I certainly wouldn't recommend it to start with. Cary Gordon listu...@chillco.commailto:listu...@chillco.com wrote: There are still plenty of opportunities for Cobol coders, but I wouldn't recommend that either. Java is the COBOL of the 21st century, so if you know Java well, there will be a job in that for the next 20-30 years, I'd expect. Until the Singularity happens, anyway. I'd think there will always be lots of enterprise Java jobs around. Bill
Re: [CODE4LIB] Advice on a class
On Jul 27, 2011, at 10:32 PM, Bill Janssen wrote: If I'm hiring a programmer, I want them to know C and Python. [...] Various flavors of C are acceptable: Objective-C is OK with me, and C++ is a plus -- it's an order of magnitude more difficult than C to use properly, and people who can sling it properly are rare. I wouldn't say that C++ is an OOM harder than raw C to use properly; it just adds so many more ways to use it improperly, and templates are the work of the devil. The problem with learning C++ is that it can be hard to predict what sort of code will be generated for very similar constructs, which is not a good thing for a low level language. It's still always possible to fall back on C and inline assembler when you need it. That's really the advantage of learning straight C as as low level language- it lets you see what sort of machine code corresponds to what sort of source code. When combined with a good performance measuring suite you can get a much better feel for how different types of data access have completely different performance, what sort of things get optimized/vectorized cleanly, etc. It also gives you an appreciation for how nice it is to be able to ignore these things most of the time when using higher level languages. Objective-C (counting the NS Foundation classes as part of the language) is a cleaner language, with a more dynamic object model; however, in current implementations the overhead of method calling is much too high, making the OO features only usable for relatively coarse grained methods. One thing that the Foundation classes show is how valuable it can be to have long method names. Additional languages which carry weight with me on a resume are OCaml, Processing, and any of Common Lisp, Scheme, or Clojure. Did you mean Clozure? The other two are kinds of lisp. :-P Also, java should no more be considered in isolation from IntelliJ Idea that a lisp should be used without an emacs. Simon
Re: [CODE4LIB] Advice on a class
Thank the FSM!!! No Singularity in our lifetime! On Thu, Jul 28, 2011 at 11:01 AM, Fowler, Jason jason.fow...@ubc.ca wrote: Until the Singularity happens, anyway. I'd think there will always be lots of enterprise Java jobs around. The Singularity will be written in Java. Jason On 11-07-27 7:32 PM, Bill Janssen jans...@parc.commailto:jans...@parc.com wrote: If I'm hiring a programmer, I want them to know C and Python. C because all the low-level stuff is written in that, Python because it's simply the most useful all-around programming language at the moment, and if you don't know it, well, how devoted are you really to your craft? Various flavors of C are acceptable: Objective-C is OK with me, and C++ is a plus -- it's an order of magnitude more difficult than C to use properly, and people who can sling it properly are rare. Additional languages which carry weight with me on a resume are OCaml, Processing, and any of Common Lisp, Scheme, or Clojure. If I was hiring a digital *librarian*, I'd also expect them to know Javascript, the language at the heart of the EPUB format. But Javascript is kind of tricky; it's a subtle powerful language with bad syntax and weak libraries. I certainly wouldn't recommend it to start with. Cary Gordon listu...@chillco.commailto:listu...@chillco.com wrote: There are still plenty of opportunities for Cobol coders, but I wouldn't recommend that either. Java is the COBOL of the 21st century, so if you know Java well, there will be a job in that for the next 20-30 years, I'd expect. Until the Singularity happens, anyway. I'd think there will always be lots of enterprise Java jobs around. Bill -- Cary Gordon The Cherry Hill Company http://chillco.com
Re: [CODE4LIB] Advice on a class
Interestingly, I disagree with almost everything you say below. Of course PARC is unlike almost everywhere else :-) Unless you're in a very, *very* different library than mine, all the low-level stuff written in C and variants are at a low-enough level (and in very specialized domains) that I'd never have an expectation that anyone working in the library would mess with it. I presume there are people in research libraries that muck around with C/C++, rolling their own libraries and what not, but I've been at Michigan for six years and I haven't heard of it, here or elsewhere. For most of us, I think, doing something in C is premature optimization. I hear the assertion often that a programmer needs to know C/assembly so they can truly understand how the machine is working at a deep level, and I've grown over the years to dismiss that assertion. Almost no one who makes a living programming in libraries is going to do a better job by hand than a modern optimizing compiler, certainly not if you take ROI into account. Data structures and Big-O is enough to tell you if you're moving down the right path, and then it's just a matter of being smart enough to use existing libraries where applicable --- and, again, avoiding premature optimization, at the code level or at the selection-of-a-language level. If you're hiring someone who's going to have to know the details of cache misses and how far to unroll loops or whatnot, you know exactly what you're hiring him/her for and don't need advice about hiring a generic programmer. For stuff where you need not access to the bare metal but just raw speed, Java is mature, super-fast, and has lots of optimized libraries available. It also turns out many of us are using Solr these days, so Java has snuck into the library infrastructure already. 90% of my argument for doing green-field projects in Ruby is that I can access low-level Java libraries to do the heavy lifting and get an optimizing VM for free. I don't care what scripting language you use, as long as you use it well. Python, Ruby, Perl, whatever. If you know one, you can learn the others. If you're a Python shop and want someone who can hit the ground running, that's fine, but Python's not ubiquitous. I don't speak Python except at the most superficial level, and yet I consider myself to be devoted to my craft. People who have seen my code may disagree :-) For languages that are, shall we say, less commercial, I think they're useful as an analog for formal computer science training. There are plenty of people who gain great skills and knowledge purely through experience, but formal training is basically designed to short-circuit experience, and I think a formal computer science degree (and esp. a master's) does a great job of training people to think hard (and correctly!) about algorithms and data structures. I expect someone with a CS degree to have been exposed to functional programming, s-expressions, and a variety of data structures. Substantial experience with Erlang or Haskell or Scheme or whatever tells me (as long as the project truly was *substantial*) that the candidate has at least thought hard about issues deeper than the ones one often runs across dashing off a program in PHP or Perl. I would never foist a project in, say, OCaml or Scheme on my library, because who the hell is going to maintain it (and its environment)?? But I sure want someone who understands side effects and their effect on multi-threaded programming, because I've got a lot of idle cores sitting around waiting for work. Finally, I always ask someone what their favorite programming environment is. I've had a few candidates tell me that they just use Notepad, and I don't mind admitting that that's almost a dealbreaker for me. Using a good editor or an IDE is a critical part of taking advantage of the language ecosystem. A good programming editor is a must. Not having at least syntax highlighting and checking is, to me, a sign that you haven't written enough code for the lack of such functionality to drive you nuts yet. Java without an IDE is insanity. And if the candidate proudly tells you that she uses vi, well, make sure she really knows how to push it around. You don't get street-cred for using a 30 year old program shittily. -Bill- On Wed, Jul 27, 2011 at 10:32 PM, Bill Janssen jans...@parc.com wrote: If I'm hiring a programmer, I want them to know C and Python. C because all the low-level stuff is written in that, Python because it's simply the most useful all-around programming language at the moment, and if you don't know it, well, how devoted are you really to your craft? Various flavors of C are acceptable: Objective-C is OK with me, and C++ is a plus -- it's an order of magnitude more difficult than C to use properly, and people who can sling it properly are rare. Additional languages which carry weight with me on a resume are OCaml, Processing, and any of Common Lisp, Scheme, or Clojure. If I was
Re: [CODE4LIB] Advice on a class
If I'm hiring a programmer, I want them to know C and Python. C because all the low-level stuff is written in that, Python because it's simply the most useful all-around programming language at the moment, and if you don't know it, well, how devoted are you really to your craft? Various flavors of C are acceptable: Objective-C is OK with me, and C++ is a plus -- it's an order of magnitude more difficult than C to use properly, and people who can sling it properly are rare. Additional languages which carry weight with me on a resume are OCaml, Processing, and any of Common Lisp, Scheme, or Clojure. If I was hiring a digital *librarian*, I'd also expect them to know Javascript, the language at the heart of the EPUB format. But Javascript is kind of tricky; it's a subtle powerful language with bad syntax and weak libraries. I certainly wouldn't recommend it to start with. Cary Gordon listu...@chillco.com wrote: There are still plenty of opportunities for Cobol coders, but I wouldn't recommend that either. Java is the COBOL of the 21st century, so if you know Java well, there will be a job in that for the next 20-30 years, I'd expect. Until the Singularity happens, anyway. I'd think there will always be lots of enterprise Java jobs around. Bill
Re: [CODE4LIB] Advice on a class
If you're looking to do web programming, C is probably not going to directly benefit you - it's not that it's a bad language to learn, or that it doesn't have uses, but you'd probably be better off trying to improve your PHP or RoR skills. That being said, if you need to get lower-level knowledge of how memory management and other close-to-the-metal concerns work, a decent C course wouldn't be a bad thing at all. If you're an autodidact, there are some good resources available on the web - I can work up a list, and I'm sure other people have suggestions. I also have a fondness for O'Reilly's *Programming PHP*, if you want to pick up a book. I've heard really good things about The Pragmatic Programmer's Ruby book, but Ruby isn't (thus far) something I've worked with, so that's secondhand advice. - Dave On Tue, Jul 26, 2011 at 2:54 PM, Lepczyk, Timothy tlepc...@wustl.eduwrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Thanks, Tim Lepczyk
Re: [CODE4LIB] Advice on a class
On Tue, Jul 26, 2011 at 01:54:36PM -0500, Lepczyk, Timothy wrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Will you share this `time-freezing device` ? How does one get free time for this? :-) I personally think a class is what you make of it. If you are keen on learning C Programming you are likely to be a good student and make the class worth your while. I may be completely missing the timbre of your question however. If the question is `will this be worth your employers while` it is harder to justify a C programmer in most organization (where's that asbestos suit?) I personally find myself writing less and less of it that I added it on my `do more of` list for the year. Unsurprisingly that is the one thing I haven't done. Not to worry still 5 more months. :-) This however isn't about me though. regards, ./fxk Thanks, Tim Lepczyk -- Duct tape is like the force. It has a light side, and a dark side, and it holds the universe together. -- Carl Zwanzig
Re: [CODE4LIB] Advice on a class
It kind of depends on what you want to do. If you're going to stick with web programming, I'm not sure C is very practical, but it will give you exposure to concepts that may give you a better theoretical understanding of programming and computer science concepts overall. If you want to get into say, iOS application development, it's a great idea. marijane white On Tue, Jul 26, 2011 at 11:54 AM, Lepczyk, Timothy tlepc...@wustl.eduwrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Thanks, Tim Lepczyk
Re: [CODE4LIB] Advice on a class
Tim- As someone who learned to program by myself, I found taking a similar class very helpful (my circumstances sound the same as yours, except in my case the language was Java). It gave me a good foundation to learn new languages, new technologies, etc. The general approach and concepts will be transferable across languages, though of course the syntax and such will vary quite a bit. -Esme -- Esme Cowles escow...@ucsd.edu Information wants to be anthropomorphized. -- /. sig On 07/26/2011, at 2:54 PM, Lepczyk, Timothy wrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Thanks, Tim Lepczyk
Re: [CODE4LIB] Advice on a class
Thanks everyone. The reasons I thought of taking the C course is a) it's free, b) concepts might be transferrable to other languages. I may continue to focus on Ruby on Rails. Tim Lepczyk -Original Message- From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf Of Genny Engel Sent: Tuesday, July 26, 2011 2:19 PM To: CODE4LIB@LISTSERV.ND.EDU Subject: Re: [CODE4LIB] Advice on a class When I was in library school, the programming classes there were in C (this was quite a while ago!). I've found it actually quite useful to have that background when learning things like JavaScript, PHP, and even VB. They all build on the concepts I originally learned from C. [Note: this does not work at all as a basis for learning Perl. Nothing does.] C++ might be a better choice if you want to start off with a grounding in object-oriented programming. Or maybe Java. I'm about to start the C++ course at the local junior college. Which reminds me to mention, it probably doesn't matter which programming course you take right now -- if you then go through life taking more programming classes like I do! Genny Engel Sonoma County Library gen...@sonoma.lib.ca.us 707 545-0831 x581 www.sonomalibrary.org -Original Message- From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf Of David Mayo Sent: Tuesday, July 26, 2011 12:12 PM To: CODE4LIB@LISTSERV.ND.EDU Subject: Re: [CODE4LIB] Advice on a class If you're looking to do web programming, C is probably not going to directly benefit you - it's not that it's a bad language to learn, or that it doesn't have uses, but you'd probably be better off trying to improve your PHP or RoR skills. That being said, if you need to get lower-level knowledge of how memory management and other close-to-the-metal concerns work, a decent C course wouldn't be a bad thing at all. If you're an autodidact, there are some good resources available on the web - I can work up a list, and I'm sure other people have suggestions. I also have a fondness for O'Reilly's *Programming PHP*, if you want to pick up a book. I've heard really good things about The Pragmatic Programmer's Ruby book, but Ruby isn't (thus far) something I've worked with, so that's secondhand advice. - Dave On Tue, Jul 26, 2011 at 2:54 PM, Lepczyk, Timothy tlepc...@wustl.eduwrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Thanks, Tim Lepczyk
Re: [CODE4LIB] Advice on a class
On Jul 26, 2011, at 3:31 PM, Lepczyk, Timothy wrote: Thanks everyone. The reasons I thought of taking the C course is a) it's free, b) concepts might be transferrable to other languages. I may continue to focus on Ruby on Rails. Before everyone manages to scare you away from learning C, if you're going to be doing a lot of programming, it's useful to learn other languages so you can see how they handle different tasks. C is particularly useful as a lot of other language's implementations were primarily written in C. In college, I took a 68k assembly course ... I've never done *any* assembly since then, but it makes you appreciate the issues in optimization, and just how low-level you need to get when talking to processors. With C, pointers and pointer arithmetic are a bit of a pain, and strongly-typed languages aren't the greatest for all tasks ... and don't get me started on C-strings ... but you'll learn a lot ... even just where to look for people screwing up their assumptions creating security problems because of off-by-one issues or screwing up the length of their strings or neglecting their garbage collection. ... and, understanding C will also help you when it comes time to install stuff, especially if you're trying to port someone's linux-centric code to Solaris or MacOS. As for the stuff that translates: searching for the missing semi-colon error messages that make no sense finding the 'smart quote' that your lab partner pasted in because they do their editing in MS Word. um ... I'm not selling this very well, am I? Anyway ... C is a useful language ... almost all higher languages have some way of binding to C code, and if nothing else, learning it means you'll be able to port over someone's 1k line C program into 20 to 40 lines of whatever other modern language you prefer. -Joe
Re: [CODE4LIB] Advice on a class
I think that by taking the C class, it will start you on a long road towards programming - some of the topics you may encounter may not be immediately applicable to your RoR or PHP learning experiences, but it should provide you a nice foundation in problem solving (from a programming perspective) and possibly a starting base in object-oriented programming. The ability of working and learning with others in a classroom setting could potentially provide insight and feedback as a collective learning environment. I suppose the only thing I would worry about in a classroom setting would be the pace. Sometimes if I'm really gearing up to learn something new, I'd prefer doing my own research through StackOverflow and a Wrox intro book rather than a classroom. That way, it lets me move along at my own pace, skipping the rudimentary lessons and focusing more intently on what it is I'm there to learn. Mark A. Pernotto On Tue, Jul 26, 2011 at 1:02 PM, Joe Hourcle onei...@grace.nascom.nasa.gov wrote: On Jul 26, 2011, at 3:31 PM, Lepczyk, Timothy wrote: Thanks everyone. The reasons I thought of taking the C course is a) it's free, b) concepts might be transferrable to other languages. I may continue to focus on Ruby on Rails. Before everyone manages to scare you away from learning C, if you're going to be doing a lot of programming, it's useful to learn other languages so you can see how they handle different tasks. C is particularly useful as a lot of other language's implementations were primarily written in C. In college, I took a 68k assembly course ... I've never done *any* assembly since then, but it makes you appreciate the issues in optimization, and just how low-level you need to get when talking to processors. With C, pointers and pointer arithmetic are a bit of a pain, and strongly-typed languages aren't the greatest for all tasks ... and don't get me started on C-strings ... but you'll learn a lot ... even just where to look for people screwing up their assumptions creating security problems because of off-by-one issues or screwing up the length of their strings or neglecting their garbage collection. ... and, understanding C will also help you when it comes time to install stuff, especially if you're trying to port someone's linux-centric code to Solaris or MacOS. As for the stuff that translates: searching for the missing semi-colon error messages that make no sense finding the 'smart quote' that your lab partner pasted in because they do their editing in MS Word. um ... I'm not selling this very well, am I? Anyway ... C is a useful language ... almost all higher languages have some way of binding to C code, and if nothing else, learning it means you'll be able to port over someone's 1k line C program into 20 to 40 lines of whatever other modern language you prefer. -Joe
Re: [CODE4LIB] Advice on a class
Quick side note -- there are still job opportunities for C developers as C seems to still be the language of choice in the microprocessor/microdevice world (think gas pumps, vending machines, coffee pots, etc). So, while job opportunities in the library world for C programmers may be limited, C is far from being an antiquated language. David K. Uspal Technology Development Specialist Falvey Memorial Library Phone: 610-519-8954 Email: david.us...@villanova.edu -Original Message- From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf Of Lepczyk, Timothy Sent: Tuesday, July 26, 2011 3:31 PM To: CODE4LIB@LISTSERV.ND.EDU Subject: Re: [CODE4LIB] Advice on a class Thanks everyone. The reasons I thought of taking the C course is a) it's free, b) concepts might be transferrable to other languages. I may continue to focus on Ruby on Rails. Tim Lepczyk -Original Message- From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf Of Genny Engel Sent: Tuesday, July 26, 2011 2:19 PM To: CODE4LIB@LISTSERV.ND.EDU Subject: Re: [CODE4LIB] Advice on a class When I was in library school, the programming classes there were in C (this was quite a while ago!). I've found it actually quite useful to have that background when learning things like JavaScript, PHP, and even VB. They all build on the concepts I originally learned from C. [Note: this does not work at all as a basis for learning Perl. Nothing does.] C++ might be a better choice if you want to start off with a grounding in object-oriented programming. Or maybe Java. I'm about to start the C++ course at the local junior college. Which reminds me to mention, it probably doesn't matter which programming course you take right now -- if you then go through life taking more programming classes like I do! Genny Engel Sonoma County Library gen...@sonoma.lib.ca.us 707 545-0831 x581 www.sonomalibrary.org -Original Message- From: Code for Libraries [mailto:CODE4LIB@LISTSERV.ND.EDU] On Behalf Of David Mayo Sent: Tuesday, July 26, 2011 12:12 PM To: CODE4LIB@LISTSERV.ND.EDU Subject: Re: [CODE4LIB] Advice on a class If you're looking to do web programming, C is probably not going to directly benefit you - it's not that it's a bad language to learn, or that it doesn't have uses, but you'd probably be better off trying to improve your PHP or RoR skills. That being said, if you need to get lower-level knowledge of how memory management and other close-to-the-metal concerns work, a decent C course wouldn't be a bad thing at all. If you're an autodidact, there are some good resources available on the web - I can work up a list, and I'm sure other people have suggestions. I also have a fondness for O'Reilly's *Programming PHP*, if you want to pick up a book. I've heard really good things about The Pragmatic Programmer's Ruby book, but Ruby isn't (thus far) something I've worked with, so that's secondhand advice. - Dave On Tue, Jul 26, 2011 at 2:54 PM, Lepczyk, Timothy tlepc...@wustl.eduwrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Thanks, Tim Lepczyk
Re: [CODE4LIB] Advice on a class
On Tue, Jul 26, 2011 at 20:40, Gabriel Farrell gsf...@gmail.com wrote: If the textbook is KR, take the class. And if the professor is GR, bang your head.
Re: [CODE4LIB] Advice on a class
There are still plenty of opportunities for Cobol coders, but I wouldn't recommend that either. I would recommend that you take a course that concentrates on the fundamentals of modern programming and uses a modern language. I like writing in languages that let you write clean code and be as object oriented as you want to be. Dynamic languages such as Python and Ruby are really great for that and are fun to work with. PHP, which I work with daily is a big tent, and while it does a lot of things, it does not provide much structure. If PHP had been my first language, I might have gone into a different business. PHP now has some OO features, but like C++ and Java, it is, at its core, procedural. Procedural is not a bad thing… unless you want to be OO. Thanks, Cary On Tue, Jul 26, 2011 at 11:54 AM, Lepczyk, Timothy tlepc...@wustl.edu wrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Thanks, Tim Lepczyk -- Cary Gordon The Cherry Hill Company http://chillco.com
Re: [CODE4LIB] Advice on a class
On 27/07/11 06:54, Lepczyk, Timothy wrote: Hi All, I work in a digital library and am transitioning to something more like a programmer and less like a librarian. My strengths are in xslt and unix, but I've been working some with php and ruby on rails. I'm trying to learn as much as I can, and am considering enrolling in an intro to C programming class (free through my university's night school). Is this worthwhile, or should I focus my attention elsewhere? Lots of people have recommendations for this or that technology. If you want to learn computer science, rather than this or that technology, I recommend that you start at http://csunplugged.org/ cheers stuart -- Stuart Yeates Library Technology Services http://www.victoria.ac.nz/library/