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.
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!
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.
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.
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.
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.
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?
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.
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.
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.
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...
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:
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. =(
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.
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.
Posts
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.
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.
I'd second Code Complete. I've not read it myself, but I've heard good things about it.
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.
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.
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.
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.
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.
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.
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...
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++
Pragmatic Programmer (http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&s=books&qid=1241875820&sr=1-1)
Mythical Man Month (http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8&s=books&qid=1241875829&sr=1-1)
AC City folk=2965-2082-7154
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. =(
http://www.amazon.com/Sams-Teach-Yourself-Days-5th/dp/0672327112
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.
AC City folk=2965-2082-7154