12 Replies - 4660 Views - Last Post: 31 May 2010 - 12:02 AM

#1 trvr  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 34
  • Joined: 09-March 09

Book Suggestions

Posted 25 May 2010 - 09:27 PM

Hey I am currently on summer break and headed off to college in the fall, and I was just wondering if anyone could recommend some books to read over the summer that would help me get ahead of the curve. For example, any titles relating to better programming, algorithm design, internet security, Linux/Unix, or other related topics is what I am looking for. Thanks :).

Is This A Good Question/Topic? 0
  • +

Replies To: Book Suggestions

#2 pbattisson  Icon User is offline

  • New D.I.C Head

Reputation: 4
  • View blog
  • Posts: 11
  • Joined: 29-January 10

Re: Book Suggestions

Posted 26 May 2010 - 02:01 AM

The Art of Programming by Donald Knuth if you can, otherwise just spend it programming as much as you can. Start helping on an Open Source project or something similar.
Was This Post Helpful? 0
  • +
  • -

#3 Sergio Tapia  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 1253
  • View blog
  • Posts: 4,168
  • Joined: 27-January 10

Re: Book Suggestions

Posted 26 May 2010 - 05:33 AM

Code Complete

Read it, love it, learn it.
Was This Post Helpful? 0
  • +
  • -

#4 xTorvos  Icon User is offline

  • D.I.C Regular
  • member icon

Reputation: 61
  • View blog
  • Posts: 271
  • Joined: 23-October 09

Re: Book Suggestions

Posted 26 May 2010 - 06:11 AM

If you want to get ahead of the curve, you should find out what language your college will have you programming with. From there, go out and find a book (whether it's a "C++ For Dummies" or a "Learn Java in 21 Days" book) that will teach you how to use that language.

While you are reading this book, begin to write as much code as possible. I would say that as soon as you get to the chapter on conditionals (if, if/else statements) then you should start writing your own programs.

A great place to test your skills is projecteuler.net. The first couple challenges are pretty easy for anyone with experience, but they can also be used to test the basics for a novice.

The main thing here is to just get out there and do some programming. A book about algorithms and theories isn't going to help you unless you can write some code.
Was This Post Helpful? 0
  • +
  • -

#5 trvr  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 34
  • Joined: 09-March 09

Re: Book Suggestions

Posted 26 May 2010 - 06:23 AM

View PostxTorvos, on 26 May 2010 - 05:11 AM, said:

A book about algorithms and theories isn't going to help you unless you can write some code.


Thanks for those suggestions, but I forgot to mention I already have a few years of programming under my belt (AP Computer Science courses). So, that is why I am looking for book suggestions on some more "advanced" topics.
Was This Post Helpful? 0
  • +
  • -

#6 Oler1s  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 1395
  • View blog
  • Posts: 3,884
  • Joined: 04-June 09

Re: Book Suggestions

Posted 26 May 2010 - 09:20 AM

Quote

but I forgot to mention I already have a few years of programming under my belt (AP Computer Science courses)
What programming have you done aside from your AP CS courses?

Tell us the following:

- Give us a rundown of what experience and knowledge you have so far.
- Give examples of programs you have written recently, that have challenged you as a programmer
- Do you have any preferences on what you want to tackle next, or are you just trying to be ahead of the CS curriculum? In which case, did you check your college's CS courses, and see the next few courses you have to take?

EDIT: Oh, and, what languages do your college CS courses demand from you. I assume Java is one of the earlier courses. Anything else?

This post has been edited by Oler1s: 26 May 2010 - 09:24 AM

Was This Post Helpful? 0
  • +
  • -

#7 dorknexus  Icon User is offline

  • or something bad...real bad.
  • member icon

Reputation: 1256
  • View blog
  • Posts: 4,618
  • Joined: 02-May 04

Re: Book Suggestions

Posted 26 May 2010 - 09:46 AM

What's most important in software development is not the language but how you architect a system. A good software developer can pick up a new language in a very short period of time (maybe a week). Design patterns for a given paradigm are universal though.

I would learn something like Java, C, or C++ (if you haven't already) as many languages take influence from their syntactic style. You'll find that once you've learned one language the learning curve on others will be drastically reduced.

Also, try dipping your toes into different paradigms if you've only done imperative programming (like a Lisp dialect or Haskell). Or try something more modern and toy-like such as Ruby or Python.

Here are my recommendations:
Design Patterns: Elements of Reusable Object-Oriented Software
The Pragmatic Programmer: From Journeyman to Master
Introduction to Algorithms

Here is a random reference that you might also find useful:
Mastering Regular Expressions

This post has been edited by Dark_Nexus: 26 May 2010 - 09:46 AM

Was This Post Helpful? 1
  • +
  • -

#8 trvr  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 34
  • Joined: 09-March 09

Re: Book Suggestions

Posted 26 May 2010 - 10:57 AM

View PostOler1s, on 26 May 2010 - 08:20 AM, said:

What programming have you done aside from your AP CS courses?

Tell us the following:

- Give us a rundown of what experience and knowledge you have so far.
- Give examples of programs you have written recently, that have challenged you as a programmer
- Do you have any preferences on what you want to tackle next, or are you just trying to be ahead of the CS curriculum? In which case, did you check your college's CS courses, and see the next few courses you have to take?

EDIT: Oh, and, what languages do your college CS courses demand from you. I assume Java is one of the earlier courses. Anything else?


- If you have read the post "Getting better at programming Java" (URL: Click here), then I would tell you I'm a stage 2 currently looking to move onto stage 3.

- Outside of school projects/assignments I have not done a lot of programming. For my senior project, we were required to use the Twitter API and make some useful application with it. My group created a UI for seeing your followers, timeline, recent trends, etc. We also ended up creating a Twitter "Profiler." This part of the program basically searched through user's posts and found words that they commonly used, so that a company or some other large media agent could target that user with specific ads and such that are tailored to that specific user.

- No real preference of any kind. I am really looking to just jump ahead of the curriculum, or just learn about something new that I should know but never knew I should know. Also, to just give you an idea of the curriculum I am going to be completed is a list of some of the classes I will be taking in the next 2-3 years.

Quote

Discrete Math and Applications
Computer Architecture I
Data Structures and Algorithms
Software Engineering Concepts
Advanced Object Oriented Programming/Design
Database Systems
Operating Systems Analysis


- As for programming languages I started with C++, and then moved onto Java once I hit the later courses in high school. As for the college I am attending, they currently use Java for the into classes, and C++ for the later classes (not sure why they do it backwards).

Hope this helps. :)
Was This Post Helpful? 0
  • +
  • -

#9 PsychoCoder  Icon User is offline

  • Google.Sucks.Init(true);
  • member icon

Reputation: 1641
  • View blog
  • Posts: 19,853
  • Joined: 26-July 07

Re: Book Suggestions

Posted 26 May 2010 - 11:11 AM

As already suggested go with Code Complete. I own it and have read it, some nice insights in it. I would also check out Writing Secure Code
Was This Post Helpful? 1
  • +
  • -

#10 Oler1s  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 1395
  • View blog
  • Posts: 3,884
  • Joined: 04-June 09

Re: Book Suggestions

Posted 26 May 2010 - 12:47 PM

Quote

If you have read the post "Getting better at programming Java" (URL: Click here), then I would tell you I'm a stage 2 currently looking to move onto stage 3.
Then it means mostly you are still bound to syntax. You still problems and solutions in terms of the syntactical constructions in Java.

Quote

Outside of school projects/assignments I have not done a lot of programming. For my senior project, we were required to use the Twitter API and make some useful application with it. My group created a UI for seeing your followers, timeline, recent trends, etc. We also ended up creating a Twitter "Profiler."
That's not bad. That's a real world application, and you've been exposed to some elements of such applications. One of them is third party APIs (in this case, a RESTful API), and the kind of design issues that come up in making a UI.

But, ultimately, what will take you ahead of others is your work outside of class. Do not rely on classes to learn. They provide information and inspiration, but understand comes from tackling programming challenges. Upper level classes, especially those that are basically mentored projects are useful, but you won't really encounter them until you near graduate level competence. Furthermore, what you gain from class is theory. CS academics are about theory, which is important, but they do so at the cost of actual programming. The CS classes you listed are standard fare for the early classes in a CS degree.

If you want to get ahead of the curriculum itself, focus on data structures and algorithms. Ultimately, what you are doing is determining how data should be stored or operated upon. There's a couple of good textbooks to buy. Go through them.

If you just want to get better as a programmer, as in the actual code you write, you must write code. Think of a program you want to write. Make that program. Think of something else, that's a bit more complicated. Make that program. And so on. Endlessly.

What books should you buy? Depends on what you're trying to do.
Was This Post Helpful? 0
  • +
  • -

#11 trvr  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 34
  • Joined: 09-March 09

Re: Book Suggestions

Posted 26 May 2010 - 02:21 PM

View PostOler1s, on 26 May 2010 - 11:47 AM, said:

Then it means mostly you are still bound to syntax. You still problems and solutions in terms of the syntactical constructions in Java.


Ok I really like the advice you are giving, but my question now is what do you mean when you make this statement? What should I be attempting to immerse myself in, or do besides strictly coding to start thinking outside of this "syntactical" state of mind?
Was This Post Helpful? 0
  • +
  • -

#12 Oler1s  Icon User is offline

  • D.I.C Lover
  • member icon

Reputation: 1395
  • View blog
  • Posts: 3,884
  • Joined: 04-June 09

Re: Book Suggestions

Posted 26 May 2010 - 05:03 PM

Quote

Ok I really like the advice you are giving, but my question now is what do you mean when you make this statement?
You've learned Java in a certain manner. That means, whenever you see a programming problem, you will ask yourself, "how do I solve this in Java?" But that's a bad approach. Consider a commonly used programming analogy: the beginning carpenter.

This carpenter has started out by learning to use a hammer. One day, he realizes he needs to take a wooden board and split it in half. So he sits down and asks, "how can I use my hammer to split this board?" Obviously, this is a flawed question to ask. The carpenter should have realized that he needs a tool that can cut. So some kind of saw. A hammer imparts blunt force, which is good for pushing nails into something.

The same problem applies to beginning programmers. You start out by learning one programming language from a few different books and teachers. But what programmers really need to do is take a problem, figure out what is required to form a solution, and then choose the tools they need. That's why good, experienced programmers have learned more than one language. Most really experienced programmers have actually used quite a few, even if most of their work is done in only one or two languages.

Quote

What should I be attempting to immerse myself in, or do besides strictly coding to start thinking outside of this "syntactical" state of mind?
There is no one thing, or some book, or anything like that, that gets you this mode of clarity. That's why we keep saying experience is important. There's a few things that move you away from this narrowminded approach to problem solving. This is what experienced programmers have been doing for years.

More algorithmically complex problems

Such problems prevent you from rushing to code, because you have absolutely no clue what to code. That's when you start focusing on getting pen and paper work done right. Code is ultimately a representation of your pen and paper design. If you read blogs from various programmers (I mean some very notable programmers), they can talk about programming challenges with an incredible amount of clarity. If you can't explain, and defend your ideas in plain English, your code isn't going to be very good.

More design complex programs

Of course, this is hard to anticipate, but you can just keep pushing in new directions. For example, a GUI application exposes you to certain design challenges. So does anything with real-time graphics. Combine the two: create a game with an in game GUI. Aside from algorithm challenges, you start to see a lot of programming challenges.

New domains

This ties into my previous point. For example, if you have been writing low level programs, do something high level like web development, or text processing. Or the reverse. When you take on problems very different from what you have been doing so far, you make it harder for yourself to run to familiar tools.

New programming languages

Languages themselves are solutions to certain problems. By using different languages, you make it easier to solve different problems, or the same problem with a different approach. Learning a new language encourages you to draw upon the aspects of programming that are not tied to a language (in other words, the aspects that are not about syntax), and has a similar effect of taking on new domains. For example, if you have been programming in Java, you've more or less seen how OO is taught in Java, and have had a very procedural + Java OO kind of way of approaching problems. Moving to a functional language can push you to rethink how you solve problems. Your functional language quite likely doesn't even for loops. Or if it does, it's not very idiomatic…Mutating variables may not be possible, or if it's possible, it's awkward and discouraged…You solve problems with a very different approach.

-- And two other points that are simply about getting better, but are still relevant.

Reflection

Think about the code you write. Think about the problems you solved, and evaluate your solutions. Think about how people solve problems, and consider if you could do better. Question your work, and see where you could improve.

Be ruthlessly critical about what you do

If you directed a movie, and it was bad, you will get shredded. People will see it and say it's bad. If you make bad music, expect bad reviews. Bad at drawing? Ignored, or mocked. But, at the same time, there's no illusion. You get feedback. Here's the thing about programming. Your work isn't so visible. People see an end product, but they don't see you as a programmer. So if you want to get better, you need to do two things. The first is to be ruthless about how you solved problems. Rip apart your own work for flaws. Don’t accept "it worked" or "good enough". Shred your work for all the flaws it has.

The second is to seek out opportunities to get external feedback. Work on open source projects, where your work is publicly displayed. Work on real projects with real deliverables. There's going to be opportunities in your college. Take on programming challenges. There's various competitions to participate in. You can get practice or previous years problems online. This is harder, and there are fewer opportunities as a beginner. That's why developing a self-critical attitude is so important. If you actively seek to excel, to do better than what you are doing, you will get better.
Was This Post Helpful? 3
  • +
  • -

#13 calvinthedestroyer  Icon User is offline

  • D.I.C Lover

Reputation: 167
  • View blog
  • Posts: 1,908
  • Joined: 13-October 07

Re: Book Suggestions

Posted 31 May 2010 - 12:02 AM

I recommended these two books:

Ugly's Electrical References ISBN= 0-9623229-7-0

and

Pocket REF by Thomas J. Glover ISBN= 769344000496

Although they do not fit in with your subjects, they can prove very useful in every day live.

I would also recommend the Boy Scout Hand Book 3229 pb
1990's boy scout handbook
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1