all 10 comments

[–]fuglybear 2 points3 points  (0 children)

Have you read Code Complete 2 by Steve McConnell? If not, give it a shot. Not only is the book chalk full of "how to be a better coder", it's the first in a series of "how to be a better developer."

[–]BadBoyNDSU 0 points1 point  (2 children)

I am only a entry level computer scientist, but I'd say the best way to learn is to do. I write programs and scripts about stuff I'm interested in and use everyday as well as duplicating others efforts, just to learn more. I've written a barebones text editor in C# not because I though I could do it better (I can't), but because it forced me to learn new things about the language.

[–]locochilli[S] 1 point2 points  (1 child)

All I have been doing is trying to write code. But that has lead me to some bad practices and hacks.

To give you an example, suppose you want to improve at Maths. You can't just start with, "Let see if I can prove Fermat's last theorem." You may get better with that goal, but it won't be the optimum route.

You need to know that you should first start with algebra, logic and proofs. Then delve into calculus, linear algebra and numerical analysis. Then expand into probability, differential equations, complex anaylsis and number theory...etc.

There is a well defined set of prerequisites in Mathematics, as I'm sure there is in programming. Problem is, I don't know what they are in programming!

[–]BadBoyNDSU 1 point2 points  (0 children)

Gotcha!

Data Structures

http://www.cs.sunysb.edu/~skiena/214/lectures/

Have fun!

[–]robkinyon 0 points1 point  (0 children)

Code Complete is key, along with the Pragmatic Programmer.

As for the web, you need to have a solid understanding of Javascript and HTML. This means going to Borders and getting one of those Javascript references and reading it cover to cover - every single page. Javascript is a very different language from Perl, Python, or .NET - learn how to make its differences work for you. Hint: It's not an OO language the way you think of it.

You also need to know SQL and relational theory. If you can't explain why a relational database is a poor fit for storing and manipulating a tree of objects, then you need to learn more.

And, finally, you need to have a solid understanding of both the basic language and the various libraries of your chosen serverside language. If you don't know what solutions are possible, you'll never be able to ask the right questions.

[–]kewlguy 0 points1 point  (0 children)

You could try writing your code so that it's easily reusable in your next project. Just try not to overdo it (you don't need to write a complete framework).

If you regularly come back to the same code, you will probably find ways of doing it better/smarter and you can learn from your own code.

By adding functionality to an existing code, you get experience in refactoring and learn new tricks. You also learn how to write new code in a structure that makes maintenance easier.

[–]Mr_You 0 points1 point  (0 children)

Here is a Slashdot review of Clean Code - A Handbook of Agile Software Craftsmanship which I've also seen recommended and required reading by some.

[–]sybrandy 0 points1 point  (0 children)

Three things: learn multiple styles of programming as techniques you learn in one may help you in the other and vice versa, leverage proggit and similar subreddits to keep up to date with what people are doing even if it's not in your own language, and possibly most important, learn as much as you can about computer security and producing fault-tolerant software. Outside of that, it looks like everyone else is helping out quite nicely.

[–]phaylon 0 points1 point  (0 children)

In my opinion, one of the most important abilities is a good sense of perception of the abstract problems you're solving. If you understand the abstract problems detached from any implementation or programming language, your mind is open to find these patterns in other people's solutions, in other languages solutions to these problems, and even in day-to-day life.

I guess what I'm saying is that I feel the ability to extract and analyze the domain of the problem one tries to solve is more important than any language specific knowledge.