5

I am looking for a resource/book suggestion on more effectively writing software. I just finished a couple python courses, c++, and data structures, and I know the basics of how to program now, but I have room for improvement. I would say I have about 100 hours of experience. I am looking for where to go from here... the goal being building my coding skill.

I don't want a book that is just for reading but a book with concrete examples I can learn from. I think my biggest problem is I've made up my own design methodologies and written all my code myself, and I need to expand my horizons to see how other people do it.

I am a beginner programmer (python and c++), and I feel I am spending way too much time debugging and refactoring my code and teaching myself design methods. My longest project has been 500 LOC, and I need a good book preferably with concrete examples, rather than reinventing the wheel myself. The highest priority thing I need is on designing software. I've heard various talks about the gang of four book. Is that something I should look into at this point?

I am learning a lot for certain, but I think my progress would be much faster if I could study from a well written book. Everything I have learned so far has been "in order to finish my project" for other classes, and I would like to become more proficient at coding. I imagine my eventual job will involve significant aspects of coding.

Thank you for taking the time to answer or discuss this open ended question.

edit: is there an equivalent list for python? -- The Definitive C++ Book Guide and List

Community
  • 1
  • 1
SwimBikeRun
  • 4,192
  • 11
  • 49
  • 85
  • 2
    For C++, stay away from GoF. The C++ code in it is full of memory leaks, and is not even remotely idiomatic C++. Also, see [the definitive C++ Book List](http://stackoverflow.com/q/388242/485561). – Mankarse Mar 14 '12 at 00:08
  • 1
    This question is off-topic here (as you indicate your knowledge of, it's open-ended and will result in discussion); it's specifically mentioned in the [FAQ](http://stackoverflow.com/faq) as being inappropriate here. Voting to close as "not constructive". (It's also clear you knew it was not proper to ask here; if you're aware, you shouldn't do it. Please help keep this site a useful resource; it's not designed to be a chatroom or discussion group, and it shouldn't be treated as one. Thanks.) – Ken White Mar 14 '12 at 00:19
  • Excellent I'll check that out. Now I don't necessarily want to get good at c++ but programming in general. I've heard c++ is for professional coders in situations where execution speed is mission critical. For what I want to do, development time is mission critical. That's what steered me to python in the first place. I searched for an equivalent list for python but couldn't find one – SwimBikeRun Mar 14 '12 at 00:24
  • @KenWhite Thanks for the FAQ link to the SO chat. I didn't explicitly know it wasn't allowed here, but I knew that these types of questions weren't numerous on SO. – SwimBikeRun Mar 14 '12 at 00:26

3 Answers3

2

Stay away from the GoF book in the beginning. The book that really helped me to get off the ground was the much easier to digest ...

http://www.amazon.com/Design-Patterns-Explained-Perspective-Object-Oriented/dp/0321247140/ref=pd_sim_b_20

It is a gentle primer for the GoF book. This will get you in the right mindset and provides useful information for any OO language. Best of luck.

learnvst
  • 15,455
  • 16
  • 74
  • 121
1

Design is Important. Very Important. But why? So that you dont run into scalable problems later on, so that when you leave the organization your code can be easily grasped and maintained by other people and so on.

However before going to the above stuff what is really more important is writing good Algorithms & constructing scalable data structures. So even if you have extremely great & well designed code however below average Algorithm it serves no purpose as you are not giving design to your customers but Great Algorithms. Design is for you and your company & for the future. Again people may say that once there is good design backend Algorithms you can change anytime. Thats not right Developers are procrastinators (Read the three virtues of a great programmer by creator of Perl :)). Even Alex Stepanov, who created C++ STL wrote a quadratic routine for some Algorithm, which he says was shipped till long with STL and he agreed that had he not been lazy he would have done a better complexity stuff.

I am not saying that Design is not important (please read the starting line of my answer), however everything including Algorithms (with great space/time complexity), scalable data structures go hand in hand with Design. These two should be mastered or learnt well and practised well before you go into Design (and trust me you will hit anti patterns while coding and you will yourself convert them to good design patterns automatically). Over the course you will yourself invent design patterns (however book like GOF or Head First Design Patters may give you a good start).

I would recommend as a first read, a book by Jon Bentley titled "Programming Pearls". Try writing that stuff in Python if you wish to. Solve those problems and you will gain a lot. Then go in for design stuff.

Yavar
  • 11,883
  • 5
  • 32
  • 63
0

How To Design Programs was really helpful for me, and it's available for free on the internet (http://www.htdp.org). It uses scheme/racket, which is very different from languages such as c++ and python, but the design principles still apply and afaik it is a book that is commonly used at universities for beginner/intermediate software design courses.

Moritz
  • 4,565
  • 2
  • 23
  • 21