Request for Help: Need better guidance for beginners

This morning I happened to see the article “.NET Coding Standard & Code Review Points” linked from the good folks over at DotNetKicks.com.  I was horrified to see some of the very bad guidance being offered here. While I appreciate and applaud the effort and time put in by Mr. Narayan, I feel very strongly that some his guidance can cause great harm to those beginners who might follow it seriously. I hope that you, my dear reader, at least partially agree that many of the elements of this article are just plain wrong, if not dangerous.

To try to turn a negative into a positive, I believe it is incumbent upon us to offer better guidance. Apparently there is a need here and we all are failing to deliver it.  Producing high quality blog posts, contributing to mailing lists and community sites such as CodeProject, Stack Overflow, DotNetSlackers.com, and even the linked site (DotNetFunda.com) is a good start.   It would also be nice, I think, to begin to collect these bits of wisdom and knowledge into a Wiki or some sort of permanent library/collection.

There’s currently the AltNetPedia Wiki which has a lot of material on design, values, and practices but not so much on fundamentals.  Is this a good place to start contributing, or is there another, better place that we should start contributing?  Please let me know or post in comments and let’s get something started here.  Let’s find a home and let’s all contribute at least a little bit to it.

We should welcome differing views and try not to make this library espouse a specific view and note these differences wherever possible. In the same vein, however, I will say that there are some practices and methods that are objectively wrong and harmful (such as not using the using(){} keyword when dealing with IDisposable implementations except in very specific circumstances) and these should also be noted in whatever literary artifacts are produced by this effort.

The Plan

First we need to identify a home for this content.

Second, we need contributors and we’ll need some reviewers and editors to handle any glaring obvious problems (typos, spammers, trolls, etc).

Third, we need a higher level of reviewer/editor to try to pull things together, categorize/tag/organize, etc.

Fourth, we’ll need to encourage people to refer to this material and get the word out and encourage more contribution and review from the wider world.

Fifth, I don’t know yet, but I think we’ll be doing pretty good if we get to this point :)  We’ll figure it out later.

Related Articles:

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

About Chad Myers

Chad Myers is the Director of Development for Dovetail Software, in Austin, TX, where he leads a premiere software team building complex enterprise software products. Chad is a .NET software developer specializing in enterprise software designs and architectures. He has over 12 years of software development experience and a proven track record of Agile, test-driven project leadership using both Microsoft and open source tools. He is a community leader who speaks at the Austin .NET User's Group, the ADNUG Code Camp, and participates in various development communities and open source projects.
This entry was posted in .NET, Design, Guidance, Programming. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • http://www.buddylindsey.com Buddy Lindsey

    If you remember, you might not, that was the purpose of my blog. The unfortunate thing was that I ran out of topics to continue on the basics. I have tried to push for a long time for beginner topics and that is kind of why I named by blog Beginnermediate. I would be glad to help in this. In fact if I own beginnermediate.com and that would be a great name for a site since that is actually what the kind of content is needed.

    Basically, content to get the beginner to the intermediate coding level. Beginnermediate content is a passion of mine I just ran out of topics and a bit of guidance. I would love to help with this. I am currently at the paintball field but would love to talk later tonight when I get hom about this more to help if you want.

  • http://paulbatum.blogspot.com Paul Batum

    // Begin the comment, communicate dislike for article
    Whoa, I’m not surprised that article spurred you into action, it is quite awful in many places.

    // Ask about ALT.NET
    Assuming the content found a home other than the ALT.NET wiki, would it be ALT.NET branded?

    // Express interest
    I would like to see the idea explored further and would be interested in lending a hand – perhaps not in an authoring role but maybe in an organisational or review capacity.

    // Mention presentation
    I think the presentation of the content should be considered carefully – I don’t find wiki format that altnetpedia uses to be very accessible.

  • http://www.buddylindsey.com Buddy Lindsey

    @Paul personally I think that it has a place, wiki articles, but most effective I have seen are tediously long blog posts. Take a look at some of my TDD articles on my blog. Also video tutorials are very very effective as long as they aren’t powerpoint presentation code snippet type videos that you would see at a .NET presentation. Take a look at Summer of NHibernate for that. I found NHibernate killer until those videos that explained step by step every line of code.

    The biggest thing in my experience of helping people and learning myself is line by line explanations.

    @Chad hope I am not stepping on toes just wanting to give my opinion from experience of being a beginner trying to move to the intermediate stage which is what I see as the content needs to be geared towards.

  • http://craniometrics.blogspot.com J Healy

    Chad, I’ve mentioned elsewhere of the need for an ALT.NET version of MS P&P guidance. And I believe that guidance should be delivered at all levels – beginning, interemediate, and expert. The content of an ALT P&P site should, however, reflect some form of ‘best practices’ consensus. Such a site should not be a place of debate, there are plenty of the usual venues for that.

    I believe developing [consensus] ALT P&P guidance has been a real challenge for the community and how it might be accomplished remains a bit of a puzzler. I suspect you’d have to have some form of community review or an editorial board.

    I’m not sure of the process within Microsoft for their P&P – they have no shortage of debate within the company on all these same topics – but, in the end, they do arrive at a consensus. Without a similar [stable, and succinct] set of published best practices artifacts fronting the ‘ALT-churn’, then adoption will likely remain challenging for the many folks wanting to take a run at it all, but are faced with a lot of ‘chaotic wading’ through the all material and opinion that’s out there today.

  • http://chadmyers.lostechies.com Chad Myers

    @Buddy: I’m glad you commented, I was hoping you would. Good stuff and good suggestions. The problem with blog posts is that they’re temporal and fall off the end after awhile. A wiki format (and I’m not pushing wiki per se) is more of a book/library format which lasts longer.

    @Paul: It wasn’t my intention to make this “ALT.NET” specifically, though my personal bias suggests that ALT.NET principles will naturally bubble up to the top just because they’re good :)

    @J Healy: Good comments all around. Though I think we’ll be doing well if we get to a point where we need to start having some serious community review. In the mean time, I’d be happy having a central place to gather this content.

    So I’ve heard one “nay” against a Wiki format. Any other ideas for content that will meet the requirement of being easy to read and navigate while also easy for people to submit material?

  • http://www.buddylindsey.com Buddy Lindsey

    I have been putting some thought in to it. And I do very much agree about blog posts falling away. After a while they aren’t very discoverable. I am not saying a wiki can’t be used I just haven’t seen one done effectivly yet I guess.

    I was thinking what would be great is something like MSDN. Once you figure out MSDN it is very effective and great because of how discoverable and organized things are. Well for me I cna seem to find things quickly.

    So the next thought I have is do a wiki but keep it as organized as possible.

    Oh also good examples involve real world scenarios and real world’ish code. I have been having a hard time with JQuery lately because I can’t find good info like that.

  • Raif harik

    I’m game but that was some pretty simple stuff that they were butchering. A good deal of it falls under common sense and lessons learned from early experiences. If you have to tell someone not to nest if then statements ten deep, then perhaps there are bigger problems.
    As per format, I have always learned best by banging my head against a problem until I can’t see for the blood and then haveing someone show me the propper way. Perhaps a “common roadblocks and how to blow them up” format would be helpful.
    Also having a sample project broken down into several small stories that a person could attempt to code and then compare to several versions written by author using solid techniques would be a nice learning tool as well.

  • http://beckelman.net Bill Beckelman

    @ Raif

    Being a self taught one man shop in a sense, I agree with you. There are so many coding samples on the net, but normally for brevity coding standards go by the wayside along with proper error handing. It would be nice to have some examples to work with that presented the full story with explanation in regards to following a standard.

    Scott Hanselman’s reading source code to become a better programmer is a great idea. Just have to make sure the source code is worth reading I guess.

    Bill

  • Sheo Narayan

    Hi Chad,

    I am happy that you have written your thought on the article. There are a lot of points to discuss on Coding standard and covering all of them in a single article is tough. However, it would be nice if you write an article on the topic and let me know. I would be more than happy to replace your article from mine. If you want to write on DotNetFunda.Com you are welcome.

    Please let me know.


    Regards,
    Sheo Narayan

  • http://sheonarayan.blogspot.com Sheo Narayan

    Oops! Typo.

    Please read “I would be more than happy to replace your article from mine.” as “I would be more than happy to replace my article with yours”.

  • http://paulbatum.blogspot.com Paul Batum

    Well my earlier attempt at humour seemed to fall flat. Too bad.

    Thinking about this a little more Chad, how does the type of content you are picturing differ from Karl Seguin’s foundations of programming ebook? Are you looking for something less opinionated? More broader in scope? More detailed? All of the above?

  • http://chadmyers.lostechies.com Chad Myers

    @Paul: Karl’s book has some great stuff and we should definitely link-to/reference it a lot. But I don’t think it covers everything, necessarily. Some more details need to happen.

    @Sheo: It’s great to have you here and we welcome your contributions. I know I would love to have you participate and assist us all in this effort. Thank you for your contributions and willingness to raise the bar of .NET development! I think we should set up a special site just for this going forward. We can syndicate content to/from DotNetFunda and other sites and collaborate with them which would be helpful. Right now, I think there’s a lot of great info spread out all over the web and it’s confusing for people.

    There have been other attempts at doing what I’m proposing but they end up being mostly user contribution sites (think CodeProject or DotNetSlackers) without a lot of heavy critical feedback, editorial review, etc. I think that this is what’s lacking.

    I’m thinking something closer to the C2 wiki (C2.com) where it has ideas and counter ideas presented together. I’d like to see articles on this new site like “Limit the number of conditional statements in a single method” with a section in the article dedicated to the counter point of view or any caveats/exceptions to that guidance. C2 was great, but the format is kind of poor and difficult to navigate. Maybe we could do a C2, but with better presentation and organization?

    @Everyone:
    My idea here is not for any personal gain or anything. My idea of setting up a special site is to not try to take away from any of the other great efforts going on out there. I imagine we’ll have some ads to pay for hosting and then any surplus we can donate to open source projects or something like that. I’d like to keep this thing totally community-serving and community-driven.

  • http://www.chrisholmesonline.com Chris Holmes

    It appears the original article on DNK is gone. And judging from the comments on DNK, that’s a good thing.

  • Chuck M

    “I will say that there are some practices and methods that are objectively wrong and harmful (such as not using the using(){} keyword when dealing with IDisposable implementations except in very specific circumstances)”

    Can you explain this further?

    My understanding is that the using statement should always be used when working with IDisposable objects. You seem to be suggesting otherwise?

  • http://www.codersbarn.com Anthony Grace

    At which point did this suddenly become “ALT”, whatever that is?

  • http://chadmyers.lostechies.com Chad Myers

    @Chuck:

    I think you misread my statement and that we’re actually in agreement.

    Harmful: *NOT* using the using() keyword

    I’m sure if we thought long enough, there might be a few circumstances where using the using() keyword is actually not appropriate, and these should be noted with extreme caution.

    But by and large, please, please, PLEASE use the using(){} keyword!!! :)

    @Anthony: They’re not ALT, or at least shouldn’t be :) I only suggested the AltNetPedia because it’s already fairly well established and has some decent seed content. I’m not pushing it and won’t stick on that point if someone else has a better suggestion.

  • http://www.elegantcode.com Chris Brandsma

    The article is still available in google cache:
    http://209.85.173.104/search?q=cache:Pu4lJxeo09QJ:www.dotnetfunda.com/articles/article62.aspx+.NET+Coding+Standard+%26+Code+Review+Points&hl=en&ct=clnk&cd=7&gl=us

    I’d love to help out. But how about you guys start by putting the Los Techies SOLID Principles series on AltNetPedia.

  • http://sheonarayan.blogspot.com Sheo Narayan

    Hi Chad,

    Thanks and Nice to hear you. Good Luck for your thought. Please let me know how can I contribute to that.

    Till we finalize our way to go for your thought I think its better to give something than nothing; thinking that can I suggest to provide your points on “.NET Coding Standard & Code Review Points” topic and send it to me so that I can modify current points wherever applicable and add yours as suggestions from you (featuring your name) in the article?.


    Thanks
    Sheo Narayan

  • http://theruntime.com/blogs/jacob/Default.aspx Jacob

    I think this is a good idea and the broader the base of contributions the better it will be. Particularly if it can live up to your ideal of presenting each practice with both sides represented fairly.

    How about a concrete proposal: I happen to have the duhvelopment.com domain (in anticipation of something along these lines, actually). I’d be happy to get it set up for something community-contribution driven (I’d favor a ScrewTurn wiki setup) to get us started. Yeah, I’m an Alt.Net heretic, but that might be an asset here. It’ll ensure this isn’t an Alt.Net branded community that can become something with that broader reach you’re asking for.

  • http://www.infusion.com Kyle

    One thing we would need to do is show not only HOW to do something, but WHY. Jacob makes a good point about it being hosted by an Alt.Net anti-hero – that would make it easier to put into a sort of debate format, which it sounds like you want to do already, Chad.

    Another possibility, rather than simple point-counter-point is essay-counter-essay, though that’s likely to be a lot more tedious.

    Some questions I present: Do we have judges or moderators (not e.g. for swearing and such, we obviously need those, but rather in terms of a debate)? What criteria can be used to judge each side of the debate? Is this going too far, the debate format?

  • http://www.infusion.com Kyle

    Oh, forgot. Dimecasts.net has a lot of interesting beginnermediadvanced stuff up, which I’m sure all of you know. It would be good to at least link to them, as they can shed light on quite a few of the tools and what not that we all use to make ourselves a lot more productive and better coders.

  • http://www.buddylindsey.com Buddy Lindsey

    I like the essay-counter-essay idea as tedium in explanations helps us all. The writer to make sure they convey the message, and the reader to give them as many points as possible to learn from.

    I am personally at a stuck point on debate style since that can get VERY long and people can get lost, but I like the idea since it will help to flesh out concepts and ideas better.

  • http://chadmyers.lostechies.com Chad Myers

    @Sheo:

    I agree, we should put up something similar in its place. I’ll try to get something to you asap. Unfortunately I’m snowed under right now preparing for the Pablo’s Days of TDD event this weekend, but after that my schedule will free up a bit.

    I’ll try to get something to you this week with something more meaty next week, is that OK?

    @Jacob: I’d love to have your help. I’m not crazy about that domain name (actually, I love it, but not for this particular effort, we should talk off-line about some other ideas for that awesome domain name).

    I just registered “Startingwith.net” What do ya’ll think?

  • http://www.thefreakparade.com Nathan

    Startingwith.net is a good domain name, but possibly a little bit limiting. I completely agree that the community could use a rallying point, with some good editorial oversight, but something beyond a Wiki. I think it is a tall order though – to do any better than what already exists – in an ad hoc way. Not that there isn’t always room for one more community site, one ALT.NET oriented or “fundamentals” oriented if you want it to be, but there is, as you have identified, a real need for something different, more professional, more polished, but also something beyond a Wiki, that takes advantage of modern social networking and at the same time ties together the myriad sources of top quality content already on the web. For a new website to really fill the hole that exists it will have to be very well conceived, well executed, and be backed by a significant investment of time, if not capital.

    I believe achieving your goal will be more complicated than throwing up yet another site and giving it a try. Why not set up a community site, using one of the many crowd-sourcing or community tools available on the web, to collaboratively design this thing? Beyond taking comments on your blog, why not set up a space to formally flesh out and publicly debate what needs to be done differently than what already exists? There are so many brilliant, passionate minds in this neck of the woods, I think the potential is there for something amazing to emerge.

  • http://theruntime.com/blogs/jacob/Default.aspx Jacob

    Happy to help and it’s an effort I can get behind. I’d be happy to do moderation work and admin if needed or useful. Bonus being that I’m not in any particular time-crunch at the moment so can get something up while this particular iron is still hot. Also, I understand what you mean about the domain and while I like startingwith.net ‘okay’, I share Nathan’s concern that it is perhaps too limiting. I’d prefer something with connotations that go beyond mere beginners.

    re: wiki or not. Using a wiki format gets us up fast and you can use conventions and active moderation to overcome most of the objections–at least to start. For example, there is no practical difference between an essay and a wiki entry–an essay is simply a specific format for an article. A CMS of some kind might work, but I’d rather *not* go with any of the community/forumy things out there (although I foresee an eventual need for some kind of discussion format type space to discuss issues, policies, etc.).

  • http://BuddyLindSey.com Buddy Lindsey

    Personally I think a good appraoch to start is to maybe setup a forum or something on the site to start with and gets ome discussion to really maybe nail down the site needs.

    I can see the use of a wiki maybe as a starting point and as we find problems or come up with better ways to solve problems we can maybe write a custom site or something if that is needed. I see however the biggest problem to getting this going is to get bogged down in allt he details upfront and discouraging anything from happening because we arne’t doing it the right way to begin with.

    Personally I have a lot of ideas that I just want to brain dump somehwere that i think could really help make this successful but they need to be discussed, weighed and thought out.

    Again we aren’t going to get it right out the shoot, but the biggest msitake is doing nothing at all. We can make it right eventually. Besides we are coders we never do it right the first time ;) I mean just go look at code you wrote 6 months ago. hehe.

  • http://theruntime.com/blogs/jacob/Default.aspx Jacob

    @Buddy: I couldn’t agree more. I got duhvelopment.com set up as a wiki if you want to start dumping your ideas there. I’ll leave it up as long as it is useful. I’m sure we can export to whatever domain we end up with–though exports from wikis aren’t uncomplicated (if the new space is using Screwturn wiki, it’s an easy process).

    P.S. I’m not trying to pre-empt Chad’s domain input by getting duhvelopment.com going. We’ll work out getting things translated when needed. I agree with Chad’s ideas, so please don’t take this as hostile action.

  • http://chadmyers.lostechies.com Chad Myers

    @Jacob:

    I think it’s great that you’re getting something going! Let’s try out a few things and I believe the community will decide and things will shake themselves out naturally.

    One idea I had for the article format was something like this (imagine better typeface, better organization with boxes and colors around the Caveats and Alternative Viewpoints, etc):

    http://duhvelopment.com/(X(1)S(ovbyxr450uvaedqhibkqfjf5))/Article_Format.ashx

  • http://theruntime.com/blogs/jacob/Default.aspx Jacob

    Nice. I like the thoroughness and the presentation (from a macro perspective). I’m pretty sure ScrewTurn allows you to futz with styles in a way that we can maybe leverage to get closer to what you imagine on the formatting. Are there any specifics on fonts, boxes and colors that you want to suggest?

  • http://BuddyLindsey.com Buddy Lindsey

    I added to ideas I have had and linked them on the front page along with Chad’s page. Also i left a discussion point on chad’s page. I like the way to do discussions on wikis without having to interfere with the main article but is all there to be specific to the article.

  • http://graysmatter.codivation.com Justice~!

    I like this idea, let’s chat more about it when you have some cycles free.