<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Miguel de Icaza's blog - Latest Comments in Public Service Announcement - Miguel de Icaza</title><link>http://migueldeicaza.disqus.com/</link><description></description><atom:link href="https://migueldeicaza.disqus.com/public_service_announcement_miguel_de_icaza/latest.rss" rel="self"></atom:link><language>en</language><lastBuildDate>Tue, 07 Oct 2008 06:09:22 -0000</lastBuildDate><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2915417</link><description>&lt;p&gt;You raise a fair point here, but I'd rather group my modifiers by Access type.&lt;br&gt;My personal preference is in order of accessibility, private, protected, internal, public.&lt;/p&gt;&lt;p&gt;Actually, I'd prefer to have a C++ like keyword where you could  just write&lt;/p&gt;&lt;p&gt;private:&lt;br&gt;    bool _viewState;&lt;br&gt;    bool _viewStateMac;&lt;/p&gt;&lt;p&gt;internal:&lt;br&gt;    int mode;&lt;/p&gt;&lt;p&gt;Maybe one day :)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Russ C.</dc:creator><pubDate>Tue, 07 Oct 2008 06:09:22 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2764836</link><description>&lt;p&gt;Personally, I agree with Mr. Mono.  Omitting "private" makes the code easier to read because it reduces the amount of noise.  I don't have an airtight argument supporting my position, but I did see a bunch of bad arguments against it and would like to address those.&lt;/p&gt;&lt;p&gt;Some people presupposed that symmetry/explicitness are always good and omitting the modifier reduces symmetry/explicitness.  I agree that leaving out the modifier is somewhat less symmetric/explicit (but hey, what about looking at it as "members are private, but you can optionally use a modifier like 'public' or 'protected' to promote it to a higher visibility"?)  If you want to be really pro-symmetry/explicitness, then consider the asymmetry of the "static" modifier.  Why not require the modifier "instance" in front of every non-static field?&lt;/p&gt;&lt;p&gt;The analogy to prefixing fields with "this" is weak.  Looking at a variable reference "x", it isn't instantly identifiable whether the reference is to a local variable or a field -- you need to look for variables definitions that are in scope.  That's why "this.x" helps.  Field declarations are a completely local thing -- it's instantly clear what the visibility is.  If it's lacking a modifier, it's definitely "private".  IDE syntax coloring can help you sort through large blocks of definitions with different access modifiers.&lt;/p&gt;&lt;p&gt;You might say "but my IDE highlights member field accesses differently from local variable accesses."  That's great.  Now you can quickly see that "x" refers to, for example, a field.  But let's say you come around later and add a local variable "x" to the method -- then the variable reference silently changes from referring to the field to referring to the local.  Note that I'm not necessarily arguing in favor of using the "this" prefix, I'm just saying that the issue is more complex than the default access level issue.&lt;/p&gt;&lt;p&gt;Finally, I noticed people making a mistake that I see quite often in discussions about syntax.  People, please get it into your heads that verbosity doesn't always make things easier to read.  Miguel said he didn't like "private" because it "makes your code more difficult to read."  Now, whether it is easier to read or not is up for debate.  But saying something like "why make your code less readable just to save a few characters of typing" is completely missing the point.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Kannan Goundan</dc:creator><pubDate>Tue, 30 Sep 2008 18:25:18 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2747423</link><description>&lt;p&gt;I do understand them. But the point is valid: You need to look at the entire declaration to find that out while otherwise you will see the fact much faster.&lt;/p&gt;&lt;p&gt;Also another (more common) example (nearly) straight from Mono Code:&lt;/p&gt;&lt;p&gt;	bool _viewState;&lt;br&gt;	bool _viewStateMac;&lt;br&gt;	string _errorPage;&lt;br&gt;	bool is_validated;&lt;br&gt;	bool _smartNavigation;&lt;br&gt;	int _transactionMode;&lt;br&gt;	internal int mode;&lt;br&gt;	ValidatorCollection _validators;&lt;br&gt;	bool renderingForm;&lt;br&gt;	string _savedViewState;&lt;br&gt;	ArrayList _requiresPostBack;&lt;br&gt;	ArrayList _requiresPostBackCopy;&lt;br&gt;	ArrayList requiresPostDataChanged;&lt;br&gt;	IPostBackEventHandler requiresRaiseEvent;&lt;br&gt;	IPostBackEventHandler formPostedRequiresRaiseEvent;&lt;br&gt;	NameValueCollection secondPostData;&lt;br&gt;	bool requiresPostBackScript;&lt;br&gt;	bool postBackScriptRendered;&lt;/p&gt;&lt;p&gt;	private bool _viewState;&lt;br&gt;	private bool _viewStateMac;&lt;br&gt;	private string _errorPage;&lt;br&gt;	private bool is_validated;&lt;br&gt;	private bool _smartNavigation;&lt;br&gt;	private int _transactionMode;&lt;br&gt;	internal int mode;&lt;br&gt;	private ValidatorCollection _validators;&lt;br&gt;	private bool renderingForm;&lt;br&gt;	private string _savedViewState;&lt;br&gt;	private ArrayList _requiresPostBack;&lt;br&gt;	private ArrayList _requiresPostBackCopy;&lt;br&gt;	private ArrayList requiresPostDataChanged;&lt;br&gt;	private IPostBackEventHandler requiresRaiseEvent;&lt;br&gt;	private IPostBackEventHandler formPostedRequiresRaiseEvent;&lt;br&gt;	private NameValueCollection secondPostData;&lt;br&gt;	private bool requiresPostBackScript;&lt;br&gt;	private bool postBackScriptRendered;&lt;/p&gt;&lt;p&gt;In the second example you imho immediatelly see that one of the fields has a different modifier. In the first you only see that if you actually look line-by-line.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Foxfire</dc:creator><pubDate>Tue, 30 Sep 2008 02:59:23 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2744633</link><description>&lt;p&gt;LOL if you mean that as a joke you have my full respect.&lt;/p&gt;&lt;p&gt;I'll stick with Ruby.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Steve</dc:creator><pubDate>Mon, 29 Sep 2008 23:42:38 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2740097</link><description>&lt;p&gt;You do not understand the rules for Explicit Interface Implementations.&lt;/p&gt;&lt;p&gt;Private members can not just become an explicit private implementation, you  *always* need to include the type they are implementing explicitly.  If they are just private, they do not form part of the interface.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">migueldeicaza</dc:creator><pubDate>Mon, 29 Sep 2008 16:59:08 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2739727</link><description>&lt;p&gt;All the points you mention are imho STRONGLY supporting the use of explicit private declaration.&lt;br&gt;explicit interface implementations 1)&lt;br&gt;If you do not declare private methods you cannot directly distinguish between a private method an an explicit interface implementations because in code they might look completely identical although they ARE semantically different. If you use explicit private declaration for private methods and none for explicit interface implementations you can easily spot the difference. Greatly enhances readability.&lt;br&gt;partial types 2) &lt;br&gt;Same thing as in 1) is also true for partial types.&lt;br&gt;top level types 3)&lt;br&gt;Well a top-level type without modifier is obviously NOT PRIVATE (see original post). So you cannot just assume that always when you do not use the modifier it means "private". Just writing what you means cleans up things (and in fact would result in a compiler error if you do something wrong, although that would obviously be a beginners problem. But nevertheless it doesn't harm anything).&lt;/p&gt;&lt;p&gt;&amp;gt;My point was that stating obvious you decrease readability and it does not matter if your code is 20 lines symmetrical or not.&lt;br&gt;Sorry, but imho it DECREASES readability GREATLY if you omit private modifiers. I have ABSOLUTELY no idea how it should (obviously???) enhance readibility when not writing them.&lt;br&gt;I write vocals in written english, too altough you could read everything if you omit them. But just making something shorter does not make something more readable.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Foxfire</dc:creator><pubDate>Mon, 29 Sep 2008 16:38:13 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2734177</link><description>&lt;p&gt;Hi,&lt;/p&gt;&lt;p&gt;To clarify, I didn't say software-engineering beginner, that's really something else.&lt;/p&gt;&lt;p&gt;Just think of partial methods (already showed in my previous post), explicit interface implementations, top level types.&lt;/p&gt;&lt;p&gt;My point was that stating obvious you decrease readability and it does not matter if your code is 20 lines symmetrical or not.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Marek Safar</dc:creator><pubDate>Mon, 29 Sep 2008 13:28:19 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2732845</link><description>&lt;p&gt;Sorry if I differ, but If somebody omits private declarations then he is likely a software-engineering beginner. If saves virtually nothing (2 keypresses with an IDE) and creates less readable, less consistent and insymmetric code:&lt;/p&gt;&lt;p&gt;public int DoSomething ();&lt;br&gt;private int DoPublic ();&lt;br&gt;public void DoNothing ();&lt;/p&gt;&lt;p&gt;public int DoSomething ();&lt;br&gt;int DoPublic ();&lt;br&gt;public void DoNothing ();&lt;/p&gt;&lt;p&gt;Why specify just access modifiers?&lt;br&gt;Well because your HAVE to specify them in 70% of the cases anyways. It just makes no sense to be inconsistent, insymmetrical and less readable just to save a few characters in the rest 30%. Or do you write every program in one single file in one single line? Just because files and linebreaks have no meaning?&lt;br&gt;Why not just standardize on what everybody does:&lt;br&gt;Access-Modifier, Special-Modifiers, Return, Methodname&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Foxfire</dc:creator><pubDate>Mon, 29 Sep 2008 11:59:35 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2731889</link><description>&lt;p&gt;Incorrect. "Int32" depends on the context, as Marek just pointed out "String" in that case refers to a different data type than System.String.&lt;/p&gt;&lt;p&gt;Marek knows a thing or two about the C# language, considering that he implemented most of C# 3, and about 40% of our compiler.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">migueldeicaza</dc:creator><pubDate>Mon, 29 Sep 2008 10:54:40 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2731652</link><description>&lt;p&gt;&amp;gt;&amp;gt; What is 1.0 for you double, float, or decimal ? I think you rely on C# compiler to decide.&lt;/p&gt;&lt;p&gt;You say that like that matters. A programmer won't particularly care if it's a double or a float or a decimal--just that it's not an integer.&lt;/p&gt;&lt;p&gt;&amp;gt;&amp;gt; You decided for option `s2', and it takes me hard time to check your source code to be sure what String is.&lt;/p&gt;&lt;p&gt;Nonsense. "int" is C#, "Integer" is VB, but Int32 is unambiguous across all .NET languages (and more descriptive, too).&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ed Ropple</dc:creator><pubDate>Mon, 29 Sep 2008 10:37:07 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2731307</link><description>&lt;p&gt;I like var, but I do not like omitting private.&lt;/p&gt;&lt;p&gt;I think it is because var is *about* the variable declaration I am performing, but private is a modifier which works in entirely different space than the declaration itself. Additional reason is that omitting access modifiers does different things in different contexts (think namespace-level classes), so I always have to consider context when reading code.&lt;/p&gt;&lt;p&gt;I also use 'this' for all references.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrey Shchekin</dc:creator><pubDate>Mon, 29 Sep 2008 10:08:52 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2730251</link><description>&lt;p&gt;"this.some_variable" makes sense for instance variables to differentiate them from local variables, but why "this.do_something()"? For static methods I use "ClassName.static_method()".&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anonymous</dc:creator><pubDate>Mon, 29 Sep 2008 08:09:41 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2730178</link><description>&lt;p&gt;100% disagree with your initial blog.&lt;/p&gt;&lt;p&gt;The less context switches you have to make while reading code, the better.  Especially when bouncing between languages which may not have the same default access.  To me, it is a context switch if I have to stop and recall what the default access is and then continue reading.&lt;/p&gt;&lt;p&gt;var needs to be used in moderation.  There are many times where it is extremely inappropriate to use, even though you can.&lt;/p&gt;&lt;p&gt;I am starting to take a shine to Ruby but sometimes I get creepy Perl vibes from some of the things you can abuse in the language.  Monkey patching is the devil itself.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ted</dc:creator><pubDate>Mon, 29 Sep 2008 07:57:12 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729837</link><description>&lt;p&gt;&amp;gt;&amp;gt; For the casting example, that's a little disingenuous because "1" is still a number; the cast follows, so to speak. I'd be more likely to use 1.0, though, than just "1".&lt;/p&gt;&lt;p&gt;What is 1.0 for you double, float, or decimal ? I think you rely on C# compiler to decide.&lt;/p&gt;&lt;p&gt;&amp;gt;&amp;gt;For the "var x" example, I always write&lt;/p&gt;&lt;p&gt;&amp;gt;&amp;gt;List&amp;lt;string&amp;gt; x = new List&amp;lt;string&amp;gt;();&lt;/p&gt;&lt;p&gt;&amp;gt;&amp;gt;Well, no, that's not quite true--because I have a personal quirk of always using the System.* names for the various base types, so I'd use List&amp;lt;string&amp;gt;, myself.&lt;/p&gt;&lt;p&gt;Wow, that's pretty bad. This makes your code very hard to read and you rely heavily on compiler to decide what is String because it's context dependent name.&lt;/p&gt;&lt;p&gt;Consider this&lt;/p&gt;&lt;p&gt;using System;&lt;br&gt;using System.Collections.Generic;&lt;/p&gt;&lt;p&gt;namespace N&lt;br&gt;{&lt;br&gt;	class String {}&lt;/p&gt;&lt;p&gt;	class Test&lt;br&gt;	{&lt;br&gt;		public static void Main ()&lt;br&gt;		{&lt;br&gt;			var s = new List&amp;lt;string&amp;gt; ();   // System.String&lt;br&gt;			var s2 = new List&amp;lt;string&amp;gt; ();  // N.String&lt;br&gt;		}&lt;br&gt;	}&lt;br&gt;}&lt;/p&gt;&lt;p&gt;You decided for option `s2', and it takes me hard time to check your source code to be sure what String is.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Marek Safar</dc:creator><pubDate>Mon, 29 Sep 2008 06:50:11 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729607</link><description>&lt;p&gt;When reading C# code which is peppered by private declarations, useless initializations, etc. it  just means that the code was written by C# beginner (no offense) which itself has a value. However, it does not add any real value to the code readability or maintainability. Everything what is over specified just distract the reader and makes the code less readable, understandable (is private temporary hack or not).&lt;/p&gt;&lt;p&gt;Arguments like "Implicit statements are considered "wrong" because they leave the choice to the compiler", shows just misunderstanding the problem. Why specify just access modifiers? Do you explicitly state everything where compiler could fall back to C# standard behaviour? Do you declare all your namespace types public, or internal ? Do you avoid type inference? Do you specify best conversion? Do you fully classify types when they are referenced? The list could go on and on.&lt;/p&gt;&lt;p&gt;Also, there is maybe better example than Miguel showed.&lt;/p&gt;&lt;p&gt;Consider this code:&lt;/p&gt;&lt;p&gt;public partial class C&lt;br&gt;{&lt;br&gt;	partial void Foo ();&lt;br&gt;}&lt;/p&gt;&lt;p&gt;public partial class C&lt;br&gt;{&lt;br&gt;	partial void Foo ()&lt;br&gt;	{&lt;br&gt;	}&lt;br&gt;}&lt;/p&gt;&lt;p&gt;I like consistency and this sums the problem nicely, if you understand C# you know that the method is a private. If you try to explicitly override method accessibility you got a compiler error for C# specific reasons.&lt;br&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Marek Safar</dc:creator><pubDate>Mon, 29 Sep 2008 05:53:06 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729593</link><description>&lt;p&gt;That wasn't a spelling flame btw :)&lt;br&gt;I just wondered what you meant. Omitting 'private' consistently would be homogeneous too... I suppose. I don't think the word is applicable in either case.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">commenter</dc:creator><pubDate>Mon, 29 Sep 2008 05:48:59 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729581</link><description>&lt;p&gt;Sorry. I forgot to put another comment against class Foo: /*this class is garbage collected*/&lt;/p&gt;&lt;p&gt;Some people might not know that.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">commenter</dc:creator><pubDate>Mon, 29 Sep 2008 05:44:50 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729573</link><description>&lt;p&gt;With knowledge of C#, we know that that cast isn't required. With knowledge of C#, we know that 'private' isn't required. Both make something explicit but are unnecessary for the compiler.&lt;/p&gt;&lt;p&gt;So, you do indeed appear to be confused.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">commenter</dc:creator><pubDate>Mon, 29 Sep 2008 05:43:26 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729557</link><description>&lt;p&gt;Do you realise how absurd it is to guard against the possibility that Anders Hjelsberg might decide to change the default access on members in C#? :-)&lt;/p&gt;&lt;p&gt;If anyone is 'programming defensively' at that level of paranoia (agh - even the compiler writer is against me!) , then their code is going to be incomprehensible. &lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">commenter</dc:creator><pubDate>Mon, 29 Sep 2008 05:38:44 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729540</link><description>&lt;p&gt;Homogenous?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">commenter</dc:creator><pubDate>Mon, 29 Sep 2008 05:33:46 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729530</link><description>&lt;p&gt;Yes. What Miguel said.&lt;/p&gt;&lt;p&gt;Adding 'private' is kind of like putting in an inline comment that states the obvious, since it has zero effect on what gets compiled.&lt;/p&gt;&lt;p&gt;NB: this assumes your code is being maintained by C# programmers (ie - people who know C#)&lt;/p&gt;&lt;p&gt;/*reference semantics*/ class Foo&lt;br&gt;{&lt;br&gt; string /*is return type*/ Bar(int a, int b, int c) /*method has 3 parameters*/ &lt;br&gt; { ... }&lt;br&gt;}&lt;br&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">commenter</dc:creator><pubDate>Mon, 29 Sep 2008 05:31:35 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729315</link><description>&lt;p&gt;A simple table explaining this and other (default) modifiers:&lt;br&gt;&lt;a href="http://blogs.oberon.ch/tamberg/2007-10-30/understanding-csharp-access-modifiers.html" rel="nofollow noopener" target="_blank" title="http://blogs.oberon.ch/tamberg/2007-10-30/understanding-csharp-access-modifiers.html"&gt;http://blogs.oberon.ch/tamb...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Regards,&lt;br&gt;tamberg&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tamberg</dc:creator><pubDate>Mon, 29 Sep 2008 04:27:38 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729250</link><description>&lt;p&gt;"someone could not read that code, because he is not so good as we are" or "someone could not read that code, because he is much better than we are" ?&lt;br&gt;We are not living on Saturn. On Earth no one's knowledge/understanding is same/equal to anyone else's. Software parameters are not static. Everything is open to change. Software requirements, design, implementation and developers themselves too. Different developers may try to read the code. And non of them are equal in anyway. So there must be some mid-way to make things/changes/readability be easier. I believe this mid-point is in somewhere private is coded explicitly.&lt;br&gt;If 4 lines of code is not enough 10/20/30 must be written, just to make readability/change easier.&lt;br&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">rovsen</dc:creator><pubDate>Mon, 29 Sep 2008 04:08:54 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2729075</link><description>&lt;p&gt;Totally disagree. While I wouldn't drop dead if working somewhere whose convention was to omit the private, your bringing Ruby into the discussion along with your numeric code example is a great example of how relying on implicit defaults can be dangerous (i.e., giving Ruby an integer when you meant it as a double runs a real risk of losing precision). If one is moving between languages on a regular basis, such as Ruby and C#, relying on default access modifiers and implicit casts is a recipe for trouble. If it's a feature unique to C#, then go ahead and rely on the defaults, but if it's a nearly universally available feature in related languages, and those languages have varying defaults, then being explicit trumps brevity.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anthony</dc:creator><pubDate>Mon, 29 Sep 2008 03:23:38 -0000</pubDate></item><item><title>Re: Public Service Announcement - Miguel de Icaza</title><link>http://tirania.org/blog/archive/2008/Sep-28.html#comment-2723867</link><description>&lt;p&gt;Some analogies:&lt;br&gt;Do you use {} in an if block even when the block only contains a single statement?&lt;br&gt;Do you use operator precedence parenthesis even when your expressions do not need parenthesis?&lt;br&gt;In JavaScript, do you terminate lines with a semicolon;?&lt;/p&gt;&lt;p&gt;Programmers do all of these, because the risk of mistyping and getting it wrong produces hard-to-find bugs. So in the long-run, it is simpler to state the obvious. Adding private onto members and internal onto types, even though they're the default is just keeping the code homogenous.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">RichB</dc:creator><pubDate>Mon, 29 Sep 2008 02:02:40 -0000</pubDate></item></channel></rss>