Becoming a good programmer:

jread

Senior member
Jan 20, 2005
544
0
0
Looks like I'm going to get to start doing some of the more fun stuff here at work in the programming side of things. I'm being sent to a 2-day training seminar in Python (which I've heard is a great intro language) and hope to expand from there. We have a lot of custom tools in our software (ArcGIS) and all are written in Python and VB. I'd like to start learning more about programming and try to get halfway decent at it. Can anyone recommend a good place to start, good books to read, etc.? What languages should I learn to become more well-rounded?

I'd kinda like to do this on the side while I"m going through school. I know that a lot of programmers have Computer Science degrees but that's not the way I want to go. I personally don't feel like I need to take Calculus VIII to be able to write code.

All replies are appreciated :)
 

mugs

Lifer
Apr 29, 2003
48,920
46
91
My favorite programming books have always been O'Reilly books.

To get the basics you'd want something like Learning Python
For more detail you'll want Programming Python
To see how experienced programmers handle common tasks Python Cookbook would be good.
Python in a Nutshell would be a handy reference, but would not be best suited for learning the language.

I don't know Python or own any of those books, but I own all of their equivalents for Perl.
 

notfred

Lifer
Feb 12, 2001
38,241
4
0
The language you write in is almost irrelevant. If you're really a godd programmer, you'll be aboe to pick up any language fairly quickly. The big stack of books at your local bookstore on "How to use X particular language/technology" will help you become a faster programmer, but they're not going to do a whole ton to help you write *better* code.

If yo uwant to be *good* you have to study things like:
Algorithm Analysis
Data structures
more "advanced" programming techniques with things like pointers and recursion
Basics about how hardware works

None of which are language-specific, and none of which are taught in a "programming python" or "programming java" book. The only place I know of to learn this stuff is in a Computer Science program at a university. Maybe there's another place to learn them, but either way - it doesn't really matter if you learn them in Python or VB or any other language.
 

fs5

Lifer
Jun 10, 2000
11,774
1
0
Originally posted by: mugs
My favorite programming books have always been O'Reilly books.

To get the basics you'd want something like Learning Python
Highyl recommend this book. The BEST book for learning python. Also pick up the cookbook once you actually start doing work.
 

ngvepforever2

Golden Member
Oct 19, 2003
1,269
0
0
Originally posted by: jread
Looks like I'm going to get to start doing some of the more fun stuff here at work in the programming side of things. I'm being sent to a 2-day training seminar in Python (which I've heard is a great intro language) and hope to expand from there. We have a lot of custom tools in our software (ArcGIS) and all are written in Python and VB. I'd like to start learning more about programming and try to get halfway decent at it. Can anyone recommend a good place to start, good books to read, etc.? What languages should I learn to become more well-rounded?

I'd kinda like to do this on the side while I"m going through school. I know that a lot of programmers have Computer Science degrees but that's not the way I want to go. I personally don't feel like I need to take Calculus VIII to be able to write code.

All replies are appreciated :)

but ...you need Calculus X to actually be a kick ass programmer :D

Regards

ng
 

Theb

Diamond Member
Feb 28, 2006
3,533
9
76
I really like Herb Schildt's intro to Java book. It really helped me a lot because the book I had to get for my programming classes was terrible.
I think the best way to get really good is to read really good code. There are lots of open-source applications out there with decent documentation. So just read code. Figure out how people did things, why they did them that way, and how they could be done better.
I really like a book called Code Reading by Diomedus Spinellis, but it's not for everyone.
When you feel like you're a competent programmer it would probably be good to take a Systems Analysis class at a college.
 

HBalzer

Golden Member
Jul 17, 2005
1,259
1
0
Best way to learn is to program. VB is simple to teach yourself go get a book or 2 and just do it the more hands on programming you do the better you will be.
 

jread

Senior member
Jan 20, 2005
544
0
0
Thanks for the advice everyone.

Would you say that programming is either something you "get" or you "don't get"? I heard a lot of people say that most programmers have a natural talent for it and it's not something that just anyone can do.

Originally posted by: notfred
The language you write in is almost irrelevant. If you're really a godd programmer, you'll be aboe to pick up any language fairly quickly. The big stack of books at your local bookstore on "How to use X particular language/technology" will help you become a faster programmer, but they're not going to do a whole ton to help you write *better* code.

If yo uwant to be *good* you have to study things like:
Algorithm Analysis
Data structures
more "advanced" programming techniques with things like pointers and recursion
Basics about how hardware works

None of which are language-specific, and none of which are taught in a "programming python" or "programming java" book. The only place I know of to learn this stuff is in a Computer Science program at a university. Maybe there's another place to learn them, but either way - it doesn't really matter if you learn them in Python or VB or any other language.

The problem is that it would be a huge pain for me to switch to CS. I'm a year away from a public administration degree, which really has no computer-related courses at all (unless I cram in a couple of last-minute electives). There is a very good MS in Computer Science program I could enter after I finish my bachelor's, but it will require 39 hours of "background courses" in CS before I can actually enter the program. That's an entire graduate degree's worth of courses just to *enter* the program. Doesn't seem very time/cost effective to me. I work full time and am not getting any younger. 5 (or more) of more school just isn't sounding too great. There is a MS in Computer Information Systems at my current university that I could finish in two years, but I've heard from everyone that CIS is not what you want unless you want to go into management. Most CS guys think CIS is a load of crap from what I understand.
 

mugs

Lifer
Apr 29, 2003
48,920
46
91
Originally posted by: jread
Thanks for the advice everyone.

Would you say that programming is either something you "get" or you "don't get"? I heard a lot of people say that most programmers have a natural talent for it and it's not something that just anyone can do.

I think there is some natural ability involved. You have a lot of people switching to other fields because they just don't "get it." And then there's a lot of people who never "get it" but try to do it anyway. :)

The problem is that it would be a huge pain for me to switch to CS. I'm a year away from a public administration degree, which really has no computer-related courses at all (unless I cram in a couple of last-minute electives).

Don't worry about it. You can learn the stuff he desribes in books - the same books they use in the college classes. You can also learn a lot by looking at and understanding the code of more experienced programmers.
 
Aug 25, 2004
11,151
1
81
Originally posted by: notfred
The language you write in is almost irrelevant. If you're really a godd programmer, you'll be aboe to pick up any language fairly quickly. The big stack of books at your local bookstore on "How to use X particular language/technology" will help you become a faster programmer, but they're not going to do a whole ton to help you write *better* code.

If yo uwant to be *good* you have to study things like:
Algorithm Analysis
Data structures
more "advanced" programming techniques with things like pointers and recursion
Basics about how hardware works

None of which are language-specific, and none of which are taught in a "programming python" or "programming java" book. The only place I know of to learn this stuff is in a Computer Science program at a university. Maybe there's another place to learn them, but either way - it doesn't really matter if you learn them in Python or VB or any other language.

QFT
 

torpid

Lifer
Sep 14, 2003
11,631
11
76
If you want to be good as a general programmer, stop thinking about VB unless you mean VB.net. It's going to poison your understanding of good programming practices.

Design Patterns by the gang of four, Patterns of Enterprise Application Architecture by Fowler, and core J2EE patterns have taught me a lot (and I don't use J2EE). But you probably need some good books on general OOP practices if you are coming from VB.
 

agnitrate

Diamond Member
Jul 2, 2001
3,761
1
0
Originally posted by: jread
Thanks for the advice everyone.

Would you say that programming is either something you "get" or you "don't get"? I heard a lot of people say that most programmers have a natural talent for it and it's not something that just anyone can do.

I don't believe that this is true. A lot of people can do the programming (although many can't, but these are the people who 'hate math' and just don't have the mindset for it), but many just don't enjoy it. Some people find it tedious or unrewarding. Only trying it out for yourself will let you know if you like it. It's great that you're taking the initiative to check it out.

Originally posted by: notfred
good advice

Concern over degrees

Don't worry about necessarily having to take courses in programming to pick it up. While it helps your motivation, you really don't have to have it. Do as notfred suggests and read books about good programming techniques. Here's an example of the courses I took in order for my CS program:
-----------------
Java - Some crappy Java book by a guy named Savitch, you learn to code but not the concepts

Foundations of Computer Science - learn about algorithm time, code efficiency, probability, number theory, etc

Data Structures and Algorithms - learn about all the good stuff like stacks, heaps, queues, binary trees, red-black trees, hashing, efficient algorithms, etc. This class taught you the 'why' side of programming.

C/C++ - a much more rigorous focus on the language, pointers, recursion, classes, inheritance, good program design, etc. This taught you how to actually code in a useful language that required some knowledge not to break your programs (Java holds your hand in a lot of places, which can be helpful but doesn't help you understand the program as much.)

Computer Architecture - We learned SPARC assembly in this class, how computers work, how all the hardware works with the software, etc. This was a very useful course in understanding WHY certain algorithms are better than others. You learn about caching, instruction processing, etc.

Compilers - Programming class from hell. Focus on efficient programming and large amounts of classes working together in complex ways.

Analysis of Algorithms - Mathematically intense algorithm analysis. Understanding the limitations of algorithms such as why searching can't be done faster than n log n, how to dissect an algoritm, etc.

Operating Systems - OS programming and understand how the OS works. Helpful once again when designing programs since you know what's actually going on underneath.

Numerical Methods - How to compensate for the computer's lack of abstraction. Basically generating algorithsm for doing stuff like solving equations, graphing, finding zeroes, and in general getting around the shortcomings of hardware.

Cryptography - Sweet class about how we keep data private. Little focus on programming, mostly mathematical.

Software Engineering - Large scale project focusing on several different programming projects coming together.

-----------------
Whew, OK that was a lot. I'm sure I forgot a few, but no biggie. You can see the progression of 'learning to code' starts small and works its way up. Programming is more than just learning the languages, but that's usually the starting point for most people. If you think you like Python, give Java a shot. Then maybe take it up a notch with C/C++.

If you're still interested, start getting into the stuff like algorithm design and run time and efficiency and all that. You could read about more efficient data structures and learn about some of the math behind it.

Basically, learning to become a programmer is all about baby steps and having fun along the way. Create a few programs that do stuff that you think is cool! That's what makes it interesting. When you get the small stuff done, you start wondering if you're able to do more. So you read a bit more about it and gain even more knowledge. Then you tackle that problem, get stumped, read some more, and work on it again.

Programming is just a lot of problem solving done with a computer with interesting results. If you enjoy it, stick with it. If you don't like it, well then at least you tried and you can tell those CS majors just how boring you tihnk their work is after having done it :)

Good luck with your endeavor and I hope you have some fun with it!
 

Glavinsolo

Platinum Member
Sep 2, 2004
2,946
0
0
Originally posted by: jread
I personally don't feel like I need to take Calculus VIII to be able to write code.

Calculus and Physics are used in Computer Science because it is an engineering degree. You are using applied mathematics to write code. With experience in Calc and Physics you are gaining problem solving skills by applying what you have learned. Its not like memorizing quotes out of a book to finish an exam, it works out the problem solving side of your brain that is used when programming.
 

jread

Senior member
Jan 20, 2005
544
0
0
Thanks for all of the very informative replies :)

I must admit that the mathematics are scary to me. I used to be one of those who "hates math", though I've begun changing my attitude. I realize now that I just had horrible math teachers in highschool and this significantly affected my development in the subject. I guess I should take college algebra and then go from there.
 

Glavinsolo

Platinum Member
Sep 2, 2004
2,946
0
0
Originally posted by: jread
Thanks for all of the very informative replies :)

I must admit that the mathematics are scary to me. I used to be one of those who "hates math", though I've begun changing my attitude. I realize now that I just had horrible math teachers in highschool and this significantly affected my development in the subject. I guess I should take college algebra and then go from there.

Well it was mathematicians that created Computer Science...
 

xtknight

Elite Member
Oct 15, 2004
12,974
0
71
Originally posted by: jread
Thanks for the advice everyone.

Would you say that programming is either something you "get" or you "don't get"? I heard a lot of people say that most programmers have a natural talent for it and it's not something that just anyone can do.

I guess you have to think logically, but most people have the ability to do that. Most. ;)

Originally posted by: torpid
If you want to be good as a general programmer, stop thinking about VB unless you mean VB.net. It's going to poison your understanding of good programming practices.

Design Patterns by the gang of four, Patterns of Enterprise Application Architecture by Fowler, and core J2EE patterns have taught me a lot (and I don't use J2EE). But you probably need some good books on general OOP practices if you are coming from VB.

That's like saying .NET is going to 'poison' you because it doesn't output native apps. Some languages are just different, and the 'practices' all depend on which one you intend on using. If there is garbage-collecting involved it doesn't really matter sometimes, but that's just the environment one was accustomed to programming in. I could show you a lot of people who use C++ when they don't need to (abstract WAY too much).

My point is VB(6) is still a great place to start. You learn later about how to use resources efficiently when you have to deal with C. The language itself kind of coerces you into that as you read tutorials on it, so no previous language will necessarily have an imprint. Prove you can think logically by doing some stuff in VB, then once you know you can handle that, go on to more advanced languages and optimize your algorithms, etc to perform well. The people who think you should start with assembler (there are some), well, I think they are insane. Starting with something you don't understand at all will get you flustered and likely drive you away from programming altogether.

Maybe these days, VB.NET is ideal because it uses simple English terms, yet is still object-oriented. Personally I'm not a huge fan of .NET, but I'll use it somewhat (for prototyping things it's awesome). The RAD factor in it makes programming insanely easy.

The way I learnt was by starting with VB (I still use it frequently), then moving onto C. I read some introductory books on VB5 (I was quite young at the time), then with C I just read code and inferred what it was doing. I then read cplusplus.com's tutorial which helped fill in the chasms about C. Right now I'm trying to learn C++. While I know some C++, I haven't gotten to the point where I'm confident about it like VB6 (still not quite with C either).
 

sourceninja

Diamond Member
Mar 8, 2005
8,805
65
91
The best way to learn how to fight is to fight. The best way to learn how to program is to program. Give yourself a project not a goal of learning a language. Programing in one language is no different then another, just learning the terms. Pick a tool, pick a project, then make it. Maybe contribute to the OSS community, fix some bugs, write a piece of software for windows/linux. Learn some tool kits. Anything really. It doesn't matter. Just program.

My only recomendation is to go with a object oriented language. Because that seems to be the long term focus of your career.
 

kamper

Diamond Member
Mar 18, 2003
5,513
0
0
Originally posted by: jread
Thanks for the advice everyone.

Would you say that programming is either something you "get" or you "don't get"? I heard a lot of people say that most programmers have a natural talent for it and it's not something that just anyone can do.

Originally posted by: notfred
The language you write in is almost irrelevant. If you're really a godd programmer, you'll be aboe to pick up any language fairly quickly. The big stack of books at your local bookstore on "How to use X particular language/technology" will help you become a faster programmer, but they're not going to do a whole ton to help you write *better* code.

If yo uwant to be *good* you have to study things like:
Algorithm Analysis
Data structures
more "advanced" programming techniques with things like pointers and recursion
Basics about how hardware works

None of which are language-specific, and none of which are taught in a "programming python" or "programming java" book. The only place I know of to learn this stuff is in a Computer Science program at a university. Maybe there's another place to learn them, but either way - it doesn't really matter if you learn them in Python or VB or any other language.
I mostly agree with that but... Certain people "get" certain languages and not others. Certain people "get" certain platforms and not others. Just as a blatant example, I wouldn't want a kernel programmer working on a business application using databases and webservices, etc. and the same is true in reverse (of course, it is possible to be good at both, but then you have two different skill sets).
The problem is that it would be a huge pain for me to switch to CS. I'm a year away from a public administration degree, which really has no computer-related courses at all (unless I cram in a couple of last-minute electives). There is a very good MS in Computer Science program I could enter after I finish my bachelor's, but it will require 39 hours of "background courses" in CS before I can actually enter the program. That's an entire graduate degree's worth of courses just to *enter* the program. Doesn't seem very time/cost effective to me.
You can do a grad degree with 39 hours of course time? I'll admit, I haven't looked, but that's only a few weeks of undergrad.
 

kamper

Diamond Member
Mar 18, 2003
5,513
0
0
Originally posted by: Glavinsolo
Originally posted by: jread
Thanks for all of the very informative replies :)

I must admit that the mathematics are scary to me. I used to be one of those who "hates math", though I've begun changing my attitude. I realize now that I just had horrible math teachers in highschool and this significantly affected my development in the subject. I guess I should take college algebra and then go from there.

Well it was mathematicians that created Computer Science...
That may be, but it doesn't mean you need to be a mathematician to program now, 'specially not in python or vb as they're not really number crunching platforms.

I only had to go to Calculus II, forgot it all right afterwards and I've been just fine. I'm not proud of it, and there's times I wished I was better at it, but by no means do you need it to survive.
 

jread

Senior member
Jan 20, 2005
544
0
0
Originally posted by: kamper
You can do a grad degree with 39 hours of course time? I'll admit, I haven't looked, but that's only a few weeks of undergrad.

I'm not sure what you mean.....

The 39 hours are background courses, undergrad courses in Computer Science. 39 hours would be the equivalent of 13 classes. At 3 or so classes per semester, it would take two years to finish the undergrad requirements.

THEN, you get to apply for the Master's program. If accepted, that's 36 more hours of graduate work.

So it looks like this:

- Finish my Bachelor's degree

- 39 hours of background courses in Computer Science

- 36 hours of graduate courses in Computer Science.

That would take another four years after my bachelor's degree.. basically.
 

kamper

Diamond Member
Mar 18, 2003
5,513
0
0
Originally posted by: jread
Originally posted by: kamper
You can do a grad degree with 39 hours of course time? I'll admit, I haven't looked, but that's only a few weeks of undergrad.

I'm not sure what you mean.....

The 39 hours are background courses, undergrad courses in Computer Science. 39 hours would be the equivalent of 13 classes. At 3 or so classes per semester, it would take two years to finish the undergrad requirements.

THEN, you get to apply for the Master's program. If accepted, that's 36 more hours of graduate work.

So it looks like this:

- Finish my Bachelor's degree

- 39 hours of background courses in Computer Science

- 36 hours of graduate courses in Computer Science.

That would take another four years after my bachelor's degree.. basically.
Alright, I'm downright confused here. is there some kind of "per week" factor that was implicit but went over my head? You're saying 3 hours per class and I took that to mean that you go to a single 3 hour class and you're finished the course in a day. :confused: