http://qs1969.pair.com?node_id=88441

Now that I've accepted that I've been sucked in to the world of software (not entirely unwillingly despite the occasional bit of pining for electronics) I decided to improve my knowledge of how to do things properly.

Seeing as my chances of being sent on a course weren't high I bought a couple of books instead: 'The Pragmatic Programmer' and 'Programming Pearls'. I thought I would start 'Programming Pearls' first.

The things is, I just don't seem to be getting anywhere. I'm seldom able to solve the exercises, and being tired after a day of DSP coding in C is just an excuse (not even a good one). I just don't seem to think the right way.

Does anyone else have this problem? Is it possible to be a good programmer without being able to instantly devise the most efficient algorithms on the spot? Should I return to working on the checkouts at my local supermarket?

I suspect part of the problem might be that I'm missing some of the knowledge assumed by these books. I've never been taught the theory of programming, I just learned it because I needed to to get a job done, then I found Perl and started programming for fun.

Update:Thanks for the responses, I'm glad I gave in to my urge to whinge :-) Just to clarify: I'm not a complete beginner at Perl but thought I needed to improve my approach to programming. Your suggestions should help me towards my goal, thanks again. Kev

--
Kevin O'Rourke

Edit 2001-06-16 ar0n -- Edited title

Replies are listed 'Best First'.
Re: Is it just me...?
by VSarkiss (Monsignor) on Jun 14, 2001 at 19:40 UTC
    Hate to tell you, Kevin, but it is just you. All the rest of us were born knowing how to program. I personally flashed on an incredible CFD routine in Fortran while suckling at my mother's breast.

    (Sorry, just had to do that ;-)

    You have the right method -- study the works of others -- and the desire. Have patience. It may seem like you're getting nowhere, but keep at it. As the I Ching admonishes, "perseverance furthers".

    Consider some alternate resources. For example, you may have picked books that aren't appropriate for your stage of growth. Some other possibilities to consider:

    • "How to solve it" by Georg Polya. A true classic: one of the best all-around books on problem solving.
    • "The Perl Cookbook" by Christiansen and Torkington. Instead of a reference, consider just reading it, or studying one or two techniques a day.
    • My personal favorite, Effective Perl Programming by Hall and Schwartz, is a great way to rise to "the next level" in Perl. It's the same "item-at-a-time" format as Pragmatic Programmer.
    One thing that helped me a lot when I was learning programming: read other people's code. One of the best things about using Open Source and Free software is that you can read the programs for education. For example, if you're curious how something in Perl works, try to track it down in the source, and see how it's accomplished. (Warning: this may warp your thinking for life. ;-) Or read some of the modules in your Perl distribution and see how they work.
      I want to follow-up on the point to read from a variety of different sources. This has been working for me, at least. In the last 4 months I have purchased:
      Learn Perl in 21 Days
      Teach Yourself CGI
      Programming the Perl DBI
      Network Programming Perl
      Object-Oriented Perl
      The Perl CD Bookshelf (only $60!) which includes:
      Learning Perl
      Programming Perl
      Perl Cookbook
      Perl in a Nutshell
      Learning Perl on Win32 Systems
      Advanced Perl Programming

      And of course there is all the great documentation and tutorial here on PM and elsewhere online. I'm not recommending these particular books to you, I'm just saying having a wide and diverse library has done me well. Have I read all of them through? No. Do I understand all that I read? No. But relying on the work of more than one or two has helped me tremendously in piecing it all together. Many of the books cross paths and seeing the same concept described a little differently produces those magic "Oh I see!" moments quite well.

      $PM = "Perl Monk's";
      $MCF = "Most Clueless Friar Abbot";
      $nysus = $PM . $MCF;

Re: Is it just me...?
by azatoth (Curate) on Jun 14, 2001 at 19:08 UTC
    I tried to learn how to program about 5 or 6 times before I found Learning Perl. I feel your pain, as I never had any programming experience before Perl.

    I used web-tutorials, borrowed books, code examples - you name it, I tried it. My brain (left-side, not right) has a lot of trouble with facts, figures, black characters on a white screen, etc etc. I was beginning to think I should stick to art and stuff.

    Without wishing to sound like a total creep, Learning Perl was the first book I understood as I read through it. When I found Perlmonks, the first thing I did (after I found out he was here), was /msg merlyn and thank him for writing it. After all, without that book, I wouldn't be in the job I am now in. Sure, there are tons of great books out there, written by some very talented authors. But for me, the thing that finally made everything go *click*, was the Llama book. Try it. It works.

    Believe me.

    This is coming from a guy who was in Geometry I in his Senior Year in high school.

    Azatoth a.k.a Captain Whiplash

    Make Your Die Messages Full of Wisdom!
    Get YOUR PerlMonks Stagename here!
    Want to speak like a Londoner?
      I agree wholeheartedly... Where I work we set up a 1.5 hour meeting every week to start learning perl using the Learning Perl book. Some of us are complete newbies, others are a bit more adept. I have to admit though, it is pretty hard to learn the concepts without someplace to apply what you are learning. We are actively looking for good beginner projects to help jumpstart the learning curve, and have a few good ideas currently on the table. The most important thing I'd like to get across though is this: I am a VERY lucky bastard... My boss did not have to do this for us, but he has taken the time to create lessons based on each chapter, and has taught them to us. I would encourage other perl 'newbies|monks' (and everything in between) to try and do this for your own co-workers. It has made a huge difference in my life.

      Spartan 'perl newbie'

      Very funny Scotty... Now PLEASE beam down my PANTS!
Re: Is it just me...?
by larsen (Parson) on Jun 14, 2001 at 19:42 UTC
    I just don't seem to think the right way.

    The main characteristic in the best programmers I know is not a lot knowledge about theory and similar things, but the ability to analize the problem. They are "calm". They analyze every single aspect of the problem: the coding phase is seen as a less important aspect of programming.

    Another aspect of their demeanor is the ability to teach themselves.

    My advise is: get a problem you like or you need to solve and try to solve it. Simply. At the beginning, you'll be faced with a lot of problems that will lead you to a lot of aspects of programming and of the programming language you chose. As long as you keep solving new problems, you'll learn new things and you will return on issues you've already learnt, often seeing them from different points of view.

    Another advice, if you can, is to study with someone else: talking with someone about a problem is a very good way to comprehend better what are you dwelling with.

Re: Is it just me...?
by LD2 (Curate) on Jun 14, 2001 at 19:33 UTC

    First off, no.. it's not just you. :)

    I think the difficult part, is wanting to learn everything at once. This can include:

    • Good programming practices
    • Programming Theory
    • OOP
    • Languages (in general)
    • etc.
    I like you, have not been formally trained. In order to learn good practices as well as theory, one depends on some excellent books, classes, and sometimes co-workers (depending on who they are). All in all, it takes time and lots of patience. Programming isn't one of those things that one can do well without practice, time and like I said before patience (for all those times that it takes hours to debug or figure out a trival problem). You may want to read 'The Pragmatic Programmer' and 'Code Complete' before or at the same time as reading 'Programming Perl.' This will give you a chance to learn some good practices as well as having the opportunity to actually put those practices in motion. What may be a better idea than doing the exercises in the book or books is to find a clear goal/task that you would like to meet and code that. It's great practice, as well as accomplishing a goal/task. I had a difficult time with Perl and doing the exercises - it wasn't until I had to actually create a program for work - that I was able to really understand some of the concepts and ideas that I had read. Good luck and remember: we were all once there.

(jeffa) Re: Is it just me...?
by jeffa (Bishop) on Jun 14, 2001 at 19:27 UTC
    Progamming Pearls is an excellent book, but i would not recommend to someone as a first progamming book. It's more like the book you read AFTER you 'know it all' - many of the problems are way way complex . . .

    I have been programming for a good 4 years now - i am only on chapter 4! :D

    Jeff

    R-R-R--R-R-R--R-R-R--R-R-R--R-R-R--
    L-L--L-L--L-L--L-L--L-L--L-L--L-L--
    
Re: Is it just me...?
by chromatic (Archbishop) on Jun 14, 2001 at 21:17 UTC
    Is it possible to be a good programmer without being able to instantly devise the most efficient algorithms on the spot?

    The nice thing about software is that, unlike traditional hardware, you can correct a mistake in seconds. (The same goes for interpreted versus compiled languages.)

    When you're facing a problem, break it into tasks. Tackle the most important one first. Then do the second. As you're putting them together, look for how you can improve things. Get rid of duplicate code. Move things into functions. Share what you can. Slough off the rough edges that stick out.

    Cultivate those habits, get some practical experience of how you can improve things, and continue to read up on your theory. That's a great way to improve.

Re: Is it just me...?
by feloniousMonk (Pilgrim) on Jun 14, 2001 at 20:39 UTC
    --
    I used to feel the same way. Now I'm in the field
    full time after quite a bit of learning on my own.

    The way I feel is that you can read volumes of books
    and you won't get anything from them until you use it.
    Try examples to get yourself familiar with the language.
    Then, figure out your own problems so you know how to
    approach and solve the problem.

    What I mean is, some of the best "programmers" don't know
    any code anymore, but they know the programming
    structure well enough so code translation
    is simple.
    This many of us find to be
    the hardest part.

    I was told once by a wise person, that in IT, you
    know you've learned something when you realize how much
    you don't know. This is a good sign.

    -felonious
Re: Is it just me...?
by stephen (Priest) on Jun 14, 2001 at 22:34 UTC
    I'd recommend Steve McConnell's Code Complete. While merlyn's Learning Perl got me started in programming, Code Complete turned me from a beginning programmer into a professional (of sorts), even though it generally deals with languages I rarely use. The Pragmatic Programmer is another excellent book... but you've already got that. :)

    Also, I've rarely had to come up with algorithms on my own, since there are such nice algorithm books out there.

    stephen

      kevin, were u referring to bentley's programming pearls or the o'reilly's perl book(programming perl)?

        It's the Bentley book.

        I used the O'Reilly book to learn Perl though.

        --
        Kevin O'Rourke
        
Re: Is it just me...?
by E-Bitch (Pilgrim) on Jun 15, 2001 at 02:15 UTC
    Kevin-

    I have found that experience is the best teacher... find something that you like and cannot stop. I know it seems silly, but writing command line utilities (okay, scripts and such that *act* like command line utilities) fascinate me. If I write something that *looks* like a utility (and can fool its user), that gives me no end of pleasure. My first major perl script I almost got fired for, because I went waaaay overboard with it... (and besides, there are a million broken link checkers that I could've used.). Bottom line, find a project, find people that have done projects similar to yours, and emulate, change, and make it work... most of all, though, have fun. If you can't stare at a screen for 8 hours and have fun, you're in the wrong business.
    hope this helps!
    E-Bitch

      If you can't stare at a screen for 8 hours and have fun, you're in the wrong business.

      Not only do I spend >8 hours a day staring at a screen at work I then go home and do it for fun.

      Next challenge (after becoming a better programmer): get a life! ;-)

      --
      Kevin O'Rourke
      
        Whew! Tell me about it! I do the same thing! I've been doing that very thing for ohhh, 6 years? I work for about 9 hours and then go home and mess about for another 4 to 5 hours! I'm such a nerd! Idn't it great!?

        ----------
        - Jim

Re: Is it just me...?
by mattr (Curate) on Jun 15, 2001 at 17:19 UTC
    Don't worry, it's not just you!

    While the basic concepts of programming are something you should understand, there is a lot that is just experience. There is a lot of good documentation but I'd also recommend going to the book store and skimming the Tables of Contents of as many seemingly relevant books as you can find (after reading the ones people recommend here, they seem just what you need really).

    If you try to solve real problems and learn a bit at a time, you can teach yourself. Even something simple like trying to do a simple thing in a program of maybe 5-10 lines and trying a few ways to do it. When you wonder why something doesn't work, try and find out by experimenting and by looking for where relevant info may be. The best weapon I could recommend is reading voraciously until you find something that speaks to you. That's when you start having fun.

    By the way you will find there is an idiom that fits perl thinking just the way there are ones for electronics engineering. The author of Perl recommends laziness as a programmer's friend, so I wouldn't worry about agility. Another great motto of perlfolk is TMTOWTDI (There's More Than One Way To Do It) which you may have heard. Much of learning is looking at a problem from a few perspectives to get a handle on it. Much of experience is making a heck of a lot of mistakes (I know). Peace!

Re: Is it just me...?
by Anonymous Monk on Jun 14, 2001 at 22:06 UTC
    I have had some experiences where electrical engineers had exceedingly strange views of how software works -- they used circuit diagrams to explain it. They kept talking about finding bugs in programs by "chopping a circuit in two", and the analogy was completely inappropriate. Would we saw a wristwatch in half to find out what's wrong with it? If your education has been in electrical engineering, you'll need to de-program yourself first. Software is about arrows that point from one box to the next, not 12 squares with circuits connecting all of them.
      If your education has been in electrical engineering, you'll need to de-program yourself first. Software is about arrows that point from one box to the next.

      Your view of programming looks awfully like flow charts. That is not so far away from electrical engineering. Probably you need to de-program yourself too. :)

      -- stefp

Re: Is it just me...?
by seanbo (Chaplain) on Jun 15, 2001 at 18:18 UTC
    Definitly not just you.

    I recently replied to another post about books. 'Effective Perl Programming is great. Take a look at this node. I highly recommend it, merlyn is one of the co-authors.

    seanbo
    Ahh..the odd dog is a strange beast indeed, nobody wants him, but he always seems to be there.