views:

503

answers:

8

I'm a non CS graduate and have often heard that CS grads do great programming with languages like C#. I guess they understand the low level details (closer to the metal) so they probably code better.

I come from business application background and I may not require the knowledge a CS education gives you but still it won't hurt to learn them.

Is there a checklist for a non CS grad that will tell them what all things to learn to become more efficient at programming? I went through some books that will be used by hard core CS grads and that had topics like Stacks, Queues, trees, graphs, advanced tables etc. I'm not sure if I'll benefit by learning them.

Any ideas?

+2  A: 

Read other people's code.

There are many open source examples that are great learning resources. To name just a few:

See Scott Hanselman's blog post on the subject.

Mitch Wheat
+2  A: 

I guess this really depends on what you're looking to do with programming. If you are learning to write business applications you likely don't need to learn the in depth details of stacks, queues and such. However it will help you greatly to know the different characteristics of the structures.

My advice would be to start with a book like CLR Via C#. This is a great book for learning C#. It does get into several more advanced parts of C# but those are pretty easy to spot and you can skip over them.

JaredPar
I wouldn't use CLR via C# so much to learn C# as to learn the concepts underlying it. In particular, it doesn't contain any C# 3 features (and won't - Jeff has indicated that he'll wait until there's a new CLR before writing a new edition). CLR via C# in parallel with a good C# book = winning combo.
Jon Skeet
It's been a long time since I read CLR via C# and I didn't realize there wasn't a 3.0 version.
JaredPar
Thanks. I'm learning only to write business applications in ASP.NET. I have read about the importance of learning CS principles before coding. I'm not sure if they apply to commonly used business applications but sometimes people almost rant about it. So, I thought let me hear from the experts :)
Shaw
+7  A: 

It's well worth understanding data structures like stacks and queues even if you don't need to implement them yourself - and most of them are really not that hard. There's a book currently under development which you might find useful. At the moment you can download it for free.

Beyond that:

  • Make sure you really understand the concepts of the language. For instance, for C# you should grok the difference between a reference, an object and a value type value. Distinguish between events and delegates, etc.
  • As mentioned by JaredPar, CLR via C# is an excellent book for getting to grips with the underlying concepts of .NET.
  • Learn other, very different languages. For instance, learning F# will give you a feel for functional programming - and those concepts can then be applied in C# too.
  • Learn your chosen language thoroughly. For instance, iterator blocks were introduced in C# 2, and many developers still don't know what they are. (I don't really blame them - there's a lot to get to grips with these days.) The better you know the language, the more options you'll have available to you when tackling any problem.
  • Answer questions here and in other community forums. It's a great way of learning.
  • Read Effective Java (2nd edition) by Josh Bloch. Even if you're not writing Java, it's a fabulous book with many insights into writing robust object-oriented code.
Jon Skeet
+5  A: 

I am a little confused about the specific information you are looking for, but here are some books that might help, depending on your experience level.

  • Design Patterns by Gamma, Helm, Johnson, Vlissides. This is great because it shows you how to create modular code.

  • Code Complete 2 by Steve McConnell. This book shows you how to code "cleanly" and allow for reuse.

As a programmer, you aren't coding for yourself, you are coding for the person that maintains it later. I also agree with Mitch about reading other people's (good) code.

David Ackerman
+1 Code Complete also contains suggestions for assessing your own knowledge about subjects like data structures, and suggests further reading.
MarkJ
A: 

It won't hurt to learn the fundamentals but to be successful it requires a complete understanding. If you are not coming from CS background I suggest just jump in and start programming- the other things will come.

If you program C# things will be a lot easier for you: visual studio does a lot of work for you with auto complete and has a lot of built in help. Even if you don't know what you are doing you will at least see patterns a lot easier when programming in C# with Visual Studio.

I suggest starting with a basics book in whatever languages you think you will be working in.

Klathzazt
+5  A: 

Are you passionate about creating beautiful applications? Are you planning on programming for a long long time? If yes I definitely recommend you first study 1) Data Structures 2) Algorithms 3) OOPS Concepts.

Alternatively, you could start by reading some books on C#. I recommend you read CLR via C# by Jeffery Richter. It is a beautiful book. It might not be for the immediate beginner, but you would definitely want to read it eventually.

I also occasionally enjoy listening to DotNetRocks. Just pick a few items in the archived list and listen to them. It is an effortless way to keep in touch with what’s happening in the programming world.

And of course you need to practice, practice and practice! Glossy recipe books don’t fill your stomach ;-)

Preets
It would be better to get the second edition of Richter's book, which is called "CLR via C#". That covers the v2 features like generics.
Jon Skeet
Nice ! Thank You.
Preets
A: 

There's no single silver-bullet that you need to learn to be good in any kind of programming.

Take C# 3.0 with Visual Studio 2008 and .NET 3.5.

To be good in this environment, you need to look at:

  • The .NET 3.5 runtime
  • The .NET 3.5 BCL (base class library)
  • The C# 3.0 language
  • Visual Studio 2008 itself

You're asking for a checklist to be efficient at programming. "Programming" doesn't really say much at all.

Are you going to be making class libraries for other developers to consume, like helper classes and utility methods?

Are you going to be making components and controls for other developers to consume, like grid, combo-type boxes, etc.?

Are you going to be making forms that solve customer problems? If so, what kind of forms (main category: web or windows, secondary category: wpf or web/winforms)?

Are you going to employe some specific framework, like ASP.NET MVC?

There's so much to know, learn, and get a grasp on, that "becoming an efficient C# programmer" is just years away.

However, becoming a proficient programmer in some specific areas, that might be different.

But then, judging from your question, it's hard to know what your real question is.

Of course, you can look at data structures like queues, lists, hash tables, dictionaries, sets, heaps, sparse structures, whatnot, and it'll get you there, or nowhere, depending on your task at hand.

I know programmers who wouldn't know a queue from a heap if they ever saw either one and they make enterprise-level software, and I know people who don't know what a stack looks like opposed to a queue, and couldn't program their way out of a wet paper bag if their life depended on it.

There's no single answer to your question. What to learn to be an efficient programmer?

Well, how wide can you jump?

Lasse V. Karlsen
A: 

I'd endorse the books listed by David Ackerman but I'd probably read "Head First Design Patterns" before the Design Patterns by Gamma, Helm, Johnson, Vlissides because it's a lot more accessible. There are other Head First books that are probably worth a look, as well.

serialhobbyist