The new forums will be named Coin Return (based on the most recent vote)! You can check on the status and timeline of the transition to the new forums here.
The Guiding Principles and New Rules document is now in effect.

Essential Programming Books

GrundlterrorGrundlterror Registered User regular
edited May 2009 in Help / Advice Forum
I'm a Computer Science major in my senior year. I'll be finishing up in the fall. I get fantastic grades, but I'm worried that my coding isn't exactly up to snuff. I can figure out pretty much every problem thats been thrown my way, but coding just isn't second nature to me. I need to learn from the ground up.

I'm looking for some good books to prepare me for the future. I've been using mostly C++ and Java. Recommend me the essentials for building up my coding strength!

steam_sig.png
Grundlterror on

Posts

  • underdonkunderdonk __BANNED USERS regular
    edited May 2009
    I'm a Computer Science major in my senior year. I'll be finishing up in the fall. I get fantastic grades, but I'm worried that my coding isn't exactly up to snuff. I can figure out pretty much every problem thats been thrown my way, but coding just isn't second nature to me. I need to learn from the ground up.

    I'm looking for some good books to prepare me for the future. I've been using mostly C++ and Java. Recommend me the essentials for building up my coding strength!

    Reading books is all fine and good, but chances are you've probably done a lot of that in college by now. I suggest getting involved in one or two active and large open source projects. Maybe even start your own if you feel you have an idea that might warrant the involvement of others you can learn from. Essentially, there is no better way to learn how to program than actually doing it.

    underdonk on
    Back in the day, bucko, we just had an A and a B button... and we liked it.
  • VThornheartVThornheart Registered User regular
    edited May 2009
    Hmm... it depends on what you mean by coding.

    Do you mean like understanding the syntax and problem solving?

    Or do you mean more like you need help designing a system well versus throwing it together any way you can?

    The other thing you might want to think about learning (that caught me by surprise when I graduated) is knowledge about development methodologies. Getting the hang of developing with various methodologies (that is, approaches that change the way you do even the programming work itself) like Test Driven Development for example, can also potentially be important.

    I personally recommend Code Complete (http://cc2e.com/) as a good general book on how to improve your development practices (not just programming, but also requirements analysis, processes... everything).

    EDIT: Also, I agree with the above statement that if it's just coding itself that you're having trouble with, doing it is the best thing.

    When it comes to higher levels of thought than just how to code, however, it can help to have a good book on the subject. That's where books like Code Complete come in.

    EDIT 2: I also can't stress how good the book Domain Driven Design was to understanding how to grasp and conceptualize projects (http://books.google.com/books?id=7dlaMs0SECsC&dq=Domain+Driven+Design&printsec=frontcover&source=bn&hl=en&ei=2nMESp-GMdXgtgfEsuiJBw&sa=X&oi=book_result&ct=result&resnum=4). This is a book that, like a novel, I couldn't put down until I'd read every single page. It may sound cheesy to say that a technical book was life-changing, but for me it was. I recommend it highly.

    VThornheart on
    3DS Friend Code: 1950-8938-9095
  • LewishamLewisham Registered User regular
    edited May 2009
    Yeah, sounds to me that you don't want programming books, you want software engineering books, so you know how to write code well.

    I'd second Code Complete. I've not read it myself, but I've heard good things about it.

    Lewisham on
  • VThornheartVThornheart Registered User regular
    edited May 2009
    Aye, Code Complete is where it's at from a higher level than "how do I print a string?" and a lower level than Domain Driven Design's "What is our ubiquitous language?", which is a sweet spot that they don't cover in school and every developer ought to learn.

    For example, Code Complete has a whole chapter about when and why it's appropriate to make a subroutine, and how to design them in such a way that their use is optimally obvious and independent. College teaches you that you should compartmentalize your program, but they never really tell you why or how to do it optimally... Code Complete is the kind of book that helps you see those underlying reasons that College glosses over or ignores entirely.

    But once you're ready for a higher level look at general design and at solving problems with software in general, definitely hit up Domain Driven Design. Just hit Code Complete first. I did it the other way around, and after reading Code Complete I feel like I need to re-read Domain Driven Design with its principles in mind. =)

    VThornheart on
    3DS Friend Code: 1950-8938-9095
  • BitTWistBitTWist Kitsap CountyRegistered User regular
    edited May 2009
    Ive been programming for almsot 20+ years now, professionally for 11 years. Got my BS in CSCI back in 98. Best advice I ever got on getting your programming skills up and running, is to just program. Come up with an idea and do it. If you can't think of something to write. Take a program out there and rewrite it yourself.

    Writing code is writing code. Like any skill, you get better the more you do it. Don't just write code you get for homework. You will learn more from writing your own IM program, then anything you do for school. Being able to solve a coding problem many different ways is what makes a good programmer.

    There is no one book that will give you all the answers. Each new programming task will have its own solution, unigue to you. Its the foundation you build from trying tons of different things that will make you a good programmer.

    One thing that is important about programming books though. Never throw one out. I still have every coding book I have ever bought. Even ones going back to Fortran and Assembler design. You never know when something will come up that requires that kind of info. And you cant buy those books anymore.

    BitTWist on
    3DS:2552-1222-3225 / PSN:BitTwist
  • GrundlterrorGrundlterror Registered User regular
    edited May 2009
    Awesome, the layered approach! I love it!

    Yeah, I mean like I said.. I can code but when I get down to it I never feel like my code is optimized.

    I've actually heard about Code Complete before as well. I've heard great things. Seems like thats one layer up from just learning how to code. After that its off to Doman Driven Design! Sounds awesome!

    Also, getting involved in some sort of open source project would be an amazing experience for me. Only problem is I have no idea where to start, exactly. How does one go about this sort of thing?

    Grundlterror on
    steam_sig.png
  • PapillonPapillon Registered User regular
    edited May 2009
    Awesome, the layered approach! I love it!

    Yeah, I mean like I said.. I can code but when I get down to it I never feel like my code is optimized.

    I've actually heard about Code Complete before as well. I've heard great things. Seems like thats one layer up from just learning how to code. After that its off to Doman Driven Design! Sounds awesome!

    Also, getting involved in some sort of open source project would be an amazing experience for me. Only problem is I have no idea where to start, exactly. How does one go about this sort of thing?

    Don't worry about writing optimized code; worry about correct code. If you run into speed problems, you can optimize later.

    Use the C++ STL for the building blocks if possible. It's going to be at least as fast as your own code 90% of the time, and it's 99% bug free.

    For Open Source project, I've never really gotten involved, but I would suggest finding a big project that interests you, go through bugzilla, start fixing bugs and submitting patches. Don't bother getting involved in small projects unless you personally know the other developers. In my experience it's not worth it.

    Papillon on
  • VThornheartVThornheart Registered User regular
    edited May 2009
    Aye, they do say that the wisest thing is to only worry about optimization if actual real-world tests (such as running through a profiler tool) prove that it is inefficient... and then just fix what the profiler says is inefficient.

    But that is just from a speed perspective. I get the feeling you may mean "inefficient" as in "not well designed for maintenance or understandability". In that case, books like Code Complete can definitely help I think... or at least get you thinking in the right direction.

    VThornheart on
    3DS Friend Code: 1950-8938-9095
  • CelestialBadgerCelestialBadger Registered User regular
    edited May 2009
    This website:

    http://www.parashift.com/c++-faq-lite/

    It answered so many of my questions about C++ when I was learning it. However, despite the name, it is pretty heavy going.

    CelestialBadger on
  • mrcheesypantsmrcheesypants Registered User regular
    edited May 2009
    I'm looking for some good books to prepare me for the future. I've been using mostly C++ and Java. Recommend me the essentials for building up my coding strength!

    Might want to learn another language or two. My programming skills have gone up quite a bit since I learned python mostly because it makes programming fun and I've found my self programming more. Some people have recommended me to learn a functional language as well but I've never really had the time to study LISP/Scheme/Haskell.

    Also if you're planning on doing any C++ you probably want stroustrup's book and K&R if you don't have them already. Much easier to navigate those books when having troubles with C/C++ than navigating through 100s of threads via google.

    Also project euler has some fun programming challenges that might help.

    mrcheesypants on
    Diamond Code: 2706 8089 2710
    Oh god. When I was younger, me and my friends wanted to burn the Harry Potter books.

    Then I moved to Georgia.
  • DrFrylockDrFrylock Registered User regular
    edited May 2009
    Essentially, there is no better way to learn how to program than actually doing it.[/url]

    If your goal is for coding to become "second nature" to you, then you need to do it. A lot. For five or ten years. Then it'll be second nature. The books above are fairly good starting points, but there's a lot to learn. Understanding a language like Java syntactically is a nice start. Understanding the (massive) runtime library that actually allows you to build things in Java is something you'll have to do. Neither of these will help you build good software in Java, of course. That requires substantial understanding of algorithms and data structures (which I assume you covered in your first course in CS?) as well as domain-specific solutions to problems.

    Design patterns are critically important to understand, although they vary by programming paradigm and domain. The "Gang of Four" Design Patterns book is useful for strongly-typed Object-Oriented languages, but not necessarily languages like Python. At this point you have building blocks, beyond this you want to start sturying software design and architecture...

    DrFrylock on
  • CaswynbenCaswynben Registered User regular
    edited May 2009
    If you're programming in C++ and you haven't read these books, you don't know what you are doing :
    http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0321334876/ref=pd_sim_b_2
    http://www.amazon.com/More-Effective-Addison-Wesley-Professional-Computing/dp/020163371X

    Meyers will blow your mind about C++

    Caswynben on
  • TheBigDaddyDowdTheBigDaddyDowd Registered User regular
    edited May 2009
    I finish my first class in C++ this week, so could anyone recommend a book for a c++ beginner?

    TheBigDaddyDowd on
    TheBigDaddyDowd.png
    AC City folk=2965-2082-7154
  • VThornheartVThornheart Registered User regular
    edited May 2009
    Hmm, for just starting out, I recommend websites more than books. I bought two books a long time ago when I was trying to refresh myself on C++, but I've found that I've almost never even opened them because of sites like this:

    http://www.cplusplus.com/

    It provides all the info you could want in a more convenient form.

    However, if you want to sit on the couch and read, I had been told that "C++: The Complete Reference" (http://www.amazon.com/C-Complete-Reference-Herbert-Schildt/dp/0078824761) was really good.

    Sadly, due to the usefulness of website above to resolve most of my beginner problems, it's one of the books I was mentioning that I haven't even bothered to open, so I can't really comment on its quality from personal experience. =(

    VThornheart on
    3DS Friend Code: 1950-8938-9095
  • CaswynbenCaswynben Registered User regular
    edited May 2009
    I finish my first class in C++ this week, so could anyone recommend a book for a c++ beginner?

    http://www.amazon.com/Sams-Teach-Yourself-Days-5th/dp/0672327112

    Caswynben on
  • VThornheartVThornheart Registered User regular
    edited May 2009
    Ah, I must admit... that particular 21 days book is one I had read (an older edition... I think it was the second edition when I read it) when I *first* learned C++ (the scenario I described above was about 8 years later, after not having used C++ for like 7 of those 8 years =) ), and unlike most "21 days" books, I do remember it being very good.

    There's also "C++ Primer Plus" (http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326973/ref=sip_rech_dp_5) that was another one that came well recommended to me.

    If you can, try to find them in an actual bookstore and pick which one (just one) you find easiest to learn from.

    VThornheart on
    3DS Friend Code: 1950-8938-9095
  • DrFrylockDrFrylock Registered User regular
    edited May 2009
    Having read half a dozen C++ books, the one that was far and away better than the others was Prata's C++ Primer Plus. Prata is an excellent teacher, and I can safely say that although I had read other authors (Schildt, Stroustrup) on C++ before I got to Prata, Prata explained the concepts in a way that I could really understand. This was about 15 years and three editions ago now, but the Amazon reviews seem to indicate this is still the case.

    DrFrylock on
  • TheBigDaddyDowdTheBigDaddyDowd Registered User regular
    edited May 2009
    Thanks guys.

    TheBigDaddyDowd on
    TheBigDaddyDowd.png
    AC City folk=2965-2082-7154
Sign In or Register to comment.