Software Development

Why do C# developers look down on VB.NET?

Justin James is surprised that most of the anti-VB.NET talk he hears is from C# developers. He argues that it's particularly baffling because the language that most resembles VB.NET from a technical standpoint is C#.

As you may remember, last year I moved from VB.NET to C#. This year, it looks like I will be doing a lot of work in VB.NET. Some of the people I told this to acted like I said I was forsaking my family and joining a wacky cult in Nepal or something. If it was coming from Java or Ruby or PHP folks, I could understand -- VB.NET is sufficiently different in philosophy and style from those languages for there to be a point of contention -- but the people who seem to hate VB.NET the most are C# developers. I just don't understand.

When I made the move to C#, the final motivator was not a deficiency with VB.NET, it was the fact that I was working on customizing a product that was already written in C#. Re-reading that article from June 2008, even then I had no overwhelmingly good reason to stop using VB.NET; on the whole, it was meeting my needs. Most of the pressure that I was feeling to start using C# was social pressure from other developers. In the .NET world, it feels like VB.NET people are often considered to be less capable or less experienced than C# developers, or that C# is a substantially better language than VB.NET.

Don't mistake me here; I know where the anti-VB sentiments traditionally come from. The VB family up through VB6, VBA, VBScript, and the other variants is a wretched language on all technical fronts. As far as I can tell, the only good thing about VB was that it was easier to get things done in it than the alternative at the time, which was C++. I always was baffled that VB beat Delphi, which was just as easy to use and much better on a technical level.

But folks, pinning the sins of VB on VB.NET is factually unsupportable. Remember the stink that VB developers made when VB.NET came out? It's because VB and VB.NET are truly two entirely different languages that happen to share enough common syntax to be visually identical at a casual glance. I am not going to enumerate all of the differences between VB and VB.NET here; it would take a book to list all the differences. It is safe to say that, other than syntactic similarities, VB and VB.NET are different languages.

In fact, the language that most resembles VB.NET from a technical (not a syntactic) standpoint is C#. Thanks to the .NET Framework, VB.NET and C# have identical libraries; this means that anything you can do in one language can be done in the other in terms of library calls. At a functionality level, C# offers a few things that VB.NET does not (multi-line lambdas are a big one), and VB.NET has some features that C# does not (like optional and named parameters, which are important). In .NET 4.0 (which is coming out next year, if not sooner), most of these gaps will be closed. The typical business developer will probably never use something in C# that is not in VB.NET, or vice versa.

At the end of the day, the practical differences between VB.NET and C# are items that fall under the category of personal opinion. There is nothing wrong with that; some developers prefer a more verbose language like VB.NET, while some like one that is a bit more terse. There are pros and cons to each viewpoint. But to act like VB.NET is some pariah language and C# is the bee's knees... that just does not make sense.

J.Ja

Disclosure of Justin's industry affiliations: Justin James has a working arrangement with Microsoft to write an article for MSDN Magazine. He also has a contract with Spiceworks to write product buying guides. --------------------------------------------------------------------------------------------------------------- Get weekly development tips in your inbox Keep your developer skills sharp by signing up for TechRepublic's free Web Developer newsletter, delivered each Tuesday. Automatically subscribe today!

About

Justin James is the Lead Architect for Conigent.

187 comments
nomadicfox
nomadicfox

Before answering this question, let explore how VB Projects come to live: So, you starting a new .NET project... As many said, C# and VB.NET produce the same result, but you still have to decide which language to go with for your development. If you are VB.NET developer or C# developer then it's easy, you just go with your expertise. But lets say you impartial, i.e. you never programmed in C# or VB.Net, how do you pick the language then? You have to choose based on your previous experience (you are professional developer after all), so if you had experience with VB6 you probably will pick VB.NET and if you had experience with C, C++ or Java you probably will go with C#. Once you pick the language you become C# or VB developer on this project. It is also more likely(given number of developers out there) that you didn't start the project, you joined the group that works on existing products and you enhance them using whatever language was picked for development. So who picked that language? - most likely senior developers in the group. So your Senior developers have many years of experience with background that either goes back to VB or C, C++, Java. Which brings us to my point: it doesn't matter what language YOU using, it matters what background people that make decisions have. You more likely to have better designed and structured project with people that come from solid OO languages. So even if you are better than average C# developer but working on VB project your senior members probably weaker than senior members on C# project and they make you look bad as well. And that's why C# developers look down on ALL VB developers. If you were a car dealer it would make a huge difference whether you selling Porsches or Hondas although you essentially doing the same job.

David Stratton
David Stratton

Ths is a farily regular topic that comes up on Stack Overflow, a web site by and for developers. I posted an opinion there that is relevant to this discussion. In that context, the question was from a VB6 developer who wantd to choose between using C# and VB. The answer can be found here: http://stackoverflow.com/questions/1249550/1249600#1249600

motohead400
motohead400

First and foremost, any language that doesn't use conditional logic is garbage. By conditional logic, what I'm talking about is when you have multiple conditions in an if statement. Depending on what you're doing if it fails or succeeds on the first condition it should NOT evaluate the others (such as if (something != null && something.property != ""). In VB.NET it evaluates everything, which means wasted processing and you have to nest statements. This is absurd. VB.NET allows you to write garbage code. I've seen things that would not come close to compiling if converted appropriately to C#. I've worked with .dll's written in VB.NET that were so bad you couldn't even use the methods from a C# app. If MSIL really makes them all the same, it shouldn't matter. In VS2005 intellisense doesn't work with VB.NET as well--variables don't come up without typing "Me" first. Why should I have to type Me? I thought VB.NET should be just as efficient to write. I've had to work good deal with VB.NET (unfortunately) and can't believe any real programmer would ever use it. Why not spend your time and learn syntax that applies to many more modern languages instead of the proprietary garbage of VB.NET?

chris
chris

I have no experience with Delphi at all, but I'd guess that the answer to this statement "I always was baffled that VB beat Delphi, which was just as easy to use and much better on a technical level." is that MS wanted it beaten. They convince everyone (and I mean business people) that their language and tools are required if you want anything good. Sorry, I just get that a lot. I have to dic around with patching vb.net and c#.net stuff that I could so much more easily do if my bosses didn't say you must use this. The reason? We have this tool we use for consistency sake (studio, right). Well, anyone knows that programmers don't just drag and drop, they tweak too, which just brings us back to having to manually figure out what has gone before and fix it....just like anything else I might have chosen to use. Sorry, I feel better now.

CodeCurmudgeon
CodeCurmudgeon

It is a matter of history: I'm sufficiently ancient to remember pre-microcomputer BASIC. BASIC of that time was essentially a lobotomized, simplified FORTRAN. Remember BASIC is an acronym and the "B" stands for "Beginner's." As such, programmers working in "professional" programming languages like FORTRAN or COBOL (or PL/1 or C or. . .) have tended to look down on it. Further, there is the fact that VB is not a language which was really designed to have the capabilities it now has, resulting in a language which is often more than a bit irrational in its organization. Indeed, I would argue that the only reason VB even exists is that Microsoft's BASIC interpreter for 8080 microcomputers was Microsoft's first product, the product that was the root of Microsoft's success, so they kept adding features to BASIC 'till they wound up with what is now VB.net.

robocso
robocso

I started programming with Borland C++ and quickly became a C++ evangelist. One evening a colleague invited me to attend a VB6 meeting. Now being a outspoken member of the C++ church I felt it a bit of a sacrilege but they promised beer and good food so I went. My faith was shaken to the core, not only could they do in 15 minutes what I needed 2 hours for but it actually seemed fun to do. The next day I bought a copy of VB6 and in the anonymity of night started to practice the dark art of visual basic. Once I was proficient I accepted a VB6 gig and thereafter I only used C++ when I needed to feel righteous and religious again. I moved to VB.NET the moment it was released and was pleasantly surprised by how object orientated it had become. I also started feeling that old religious fervor stirring in my soul when I saw C# code for the first time. Longing for the curly brace and the semicolon inter spaced with terse spartan code that was so clean and pure cleansed of all impure basic words, I created my first C# project. While not the cruel unforgiving C++ faith I had once evangelized it gave me what I desired, the righteous feeling that I had returned home and was once again a real developer untainted by impure basic thoughts and cluttered code. I still write a lot of VB.NET code ,which is a necessary evil to pay the bills, but the thrill of being able to write code the way it was meant to be written, terse and sexy, lets me sleep well again. Even the CoolAid tastes better now. Repent your old ways and move to C#!

inet32
inet32

The whole premise of your post is that C# programmers look down on VB.NET. I'm a C# programmer and I don't look down on VB.NET. Are you just having a slow day coming up with something to blog about? I've never even heard any C# programmers put down VB.NET. Professional SW engineers know that there are many factors that influence what language to choose for an assignment and they have better things to do than "put down" other prgramming languages. I'm sure if you turn over enough stones you can find C# programmers who don't like VB.NET, but you can also find ones who don't like broccoli, or who will give you an argument about curly-braces or how many spaces to indent. But that doesn't mean there's a statistical pattern to base a blog post on.

mikifinaz1
mikifinaz1

I have yet to hear two mechanics argue about whether the screwdriver is better than the hammer or wrench. A tool, is a tool, is a tool and it has a generally accepted purpose as well as use. The same is true of languages. However, I have yet to actually talk to a progammer who can compare a number of languages with insight and accuracy as to their use and utility. So, it would seem that the mechanics still have the edge. At least they can do this type of comparison.

XDotNet
XDotNet

I see Microsoft finishing this argument within the next two versions if they eliminate ALL the differences between the two. Where would this argument be if you could write code in either language and simply toggle the IDE between the two. "Blah blah C# better than VB blah blah" ok...(click the toggle) my VB just became C# :-) It could happen within a few years don't you think?

nonimportantname
nonimportantname

I'm no programming guru, by choice. But I have to say that VB has always been (as a previous poster put it) a bastardization of true OOP. I liked VB6 for its simplicity and C++ seemed so very arcane. BUT, having looked at the .net suite, I have to say that I was much much much more comfortable with C# than I was vb.net for one simple reason: vb.net is VB's first true foray into the world of OOP and is almost unrecognizable. At least when it came to OOP, I could always identify with what it was C++ was trying to accomplish. And of course, there is also the memory management thing that C++ has had all along. So from a relative novice like myself, I appreciate a less verbose, straight to the guts, programming language such as C# because it is more familiar to me than vb.net. Make sense?

chrisfalter
chrisfalter

I have been in C# shops and in VB.NET shops, and I feel that the quality of my code has not suffered from using VB.NET. The VB.NET language capability is about the same as C#'s. However, I have encountered much more bad smells in VB.NET than in C#. I think it's because C# developers generally came from an OO background (C++, Java), whereas the VB.NET folks generally didn't (they came from VB). There's a lot of stuff you need to understand well to do OOP (Bob Martin's SOLID principles + design patterns come to mind). It seems that a lot of the folks who transitioned to VB.NET from VB thought that a rudimentary understanding of inheritance plus familiarity with the .NET Framework was all they needed to write clean VB.NET code. Sadly, this is not true.

R_K_T_ASHOKA
R_K_T_ASHOKA

Your words... 'Some of the people I told this to acted like I said I was forsaking my family and joining a "wacky cult" in Nepal or something' dont you see any offense in this sentence? I am not from Nepal, but.. Think..

R_K_T_ASHOKA
R_K_T_ASHOKA

Your words... 'Some of the people I told this to acted like I said I was forsaking my family and joining a "wacky cult" in Nepal or something' dont you see any offense in this sentence? I am not from Nepal, but.. Think..

Tony Hopkinson
Tony Hopkinson

types into .Net. Not sure how successful it was at that, but 1% would be too much. For all those who want leap up and down yelling foul, VB6 was good (technically), I'll refer them to all the posts they sent to MS, saying not fair, this is too hard. I have to declare variables, instantiate objects before I use them, make my casts explicit, not use variants, boo hoo etc. I've never done VB.Net, as far as I'm aware, in terms of language features it's caught up with C#. All they have to do now, is drop those silly syntactical features they put in to con VB6ers into switching, and VB.Net will get the rep it deserves. Option explicit, being an option = being looked down upon, your choice....

johndecoville
johndecoville

Wow! Tantrums, rages... even yelling. More than a stink.

TechRepublic
TechRepublic

I would encourage VB.NET programmers to learn C# because changes the way you structure code, for the better. When I switched to C#, I began structuring my code in smaller, more manageable chunks. I began thinking of classes in a new way, and separated business logic from presentation in as more coherent way. I don't know why learning C# and modeling code differently happened concurrently, but it did. Is there any reason why better code practices and patterns can't be observed in VB.NET? I don't think so. I think a lot of it had to do with the quality of the code examples and literature available for the two languages. Maybe it is because today's literature uses better coding patterns. Maybe it is because code examples I have read of VB and C# come from different caliber of coders (not that it has to be). I also feel that the IDE for VB encourages writing code where the logic resides in the UI, rather than in a separate class. Is this a shared experience, or is this a poor carpenter blaming his tools? I was wondering if this has been the experience of other coders? J.Ja - have you noticed a change in the way you write VB after writing C#? I haven't written any VB since moving the latest projects to C#, but I know any new VB I write would look very different. Cheers, Chris Disclaimer: I am a hack. I am a photographer by trade and I write small WinForm tools that allow me to do things like device control and file conversion and management. I write apps for myself and a small number of clients that benefit from the same types of activities. I don't really have to write code that anyone else will have to read, but I try to code like I am coding for others to follow.

aikimark
aikimark

Delphi most closely resembles C#, not VB.Net

jpdecesare
jpdecesare

Forget VB6, it has nothing to do with VB.net. Both C# and VB.Net compile to MSIL using the same CLR, correct? Ba Da BING, both are REAL languages. So what's the problem with VB.Net? The answer is: NOTHING. The PROBLEM is the VB6 guys writing code and THINKING VB6 when they get into VB.Net. I use and prefer VB.Net, but I allow ZERO VB6 "thinking" in my code (that took a while after years of VB4/5/6). See, C# developers did the right thing: they came of of the chute THINKING .Net. It was the native language to the .Net paradigm and they took full advantage of it. All that is there in VB.net, but the VB6 programmers (me included at first) didn't change their thinking, they tried to fit the old ugly ways of VB6 into this wonderful new Rolls Royce of dev environments. That's the problem. The people, not the language. Every time I hear a C# user do the "Bash VB" thing, I instantly realize how much they have no clue about what they're talking about (and how unprofessional they are). They really don't know the .Net Framework nor the two flagship languages that run on it. They're just trying to be on the winning team. So, C# guys, put a lid on it. VB6 guys, STOP CODING LIKE IT'S VB6! Learn the Framework already!

cyclo
cyclo

I guess any developer worth his/her salt don't want to be labeled a BEGINNER :-) Let me add too that most developers who transitioned from VB6 to C# when .NET 1.0 was released almost 10 years ago (that includes me) have just had it with C++/Java guys looking down on VB6 programmers who they thought were inferior because the language they are using (VB) is not a true OO language... Note that I could only be imagining this... I am paranoid which is why I have survived this long as a programmer. Even though VB.NET is now fully OO, the stigma that was attached with the word BASIC is probably burned many developer's psyche. However, I myself do VB.NET scripting from time to time (SSRS's code modules can only be written in VB.NET) and indeed, if you stick to scripting and not OO type programming, VB.NET syntax is almost the the same as C#.

Tony Hopkinson
Tony Hopkinson

fulfilled your requirements to the point where C++ became too painful, you didn't really need C++'s more powerful features. Threading for instance.... Resource optimisation Critical lifetime management True OO VB6's principal attraction was that you could bash together simple applications with next to no programming knowledge at all. Lots of unqualified people found it very attractive. as did those who were employing them at cheaper and cheaper rates as theere became more and more and more of them. If that's good enough, then fair enough.

hercules.gunter
hercules.gunter

As with most forms of discrimination, if you're not on the receiving end, you probably don't notice it. If, like Justin, you're squarely in both camps, you still notice it. Did you ever notice the Beta/VHS thing, and how superior Beta owners thought they were? Objectively they were wrong (VHS has better picture and sound quality), but that's not the point. Have you ever noticed Mac enthusiasts talking about PCs? C#ers sneer at VBers. Really. Not all, just a high proportion of those I've met.

Tony Hopkinson
Tony Hopkinson

I know lots who can talk about about the utility of different languages. Your analogy is flawed, it's more like discussing the differences between fixing together two things with a nut and bolt or a screw. Why did VB.net have exceptions, when VB6 did not? Why is On Error Goto deprecated in VB.net and non existent in C#? What impacts does managed vs unmanaged on a language. What does only being able to return an integer in C do and not do for you in vanilla C. Strong vs weak typing, dynamic vs static... They all have their strengths and weaknesses, some are simply preference, some historical, some environmental, some aimed at a particular class of uses. Regards A Growanup.

hercules.gunter
hercules.gunter

A spanner and a screwdriver are not interchangeable (although you can use a chisel as a screwdriver, which I have seen done and which curled my spine - the chisel was never the same again). Mechanics must of necessity switch tools depending on the task. A programming language is not a single-purpose tool. It's a mutable tool which can be applied to a variety of tasks, and can be used to make new tools. They're not necessarily interchangeable, but in the .NET world, they mostly are. If you just have to have lambda functions, you're probably obliged to use C# for that function (until the next release of VB.NET, probably). Other than, it's surely a matter of what you're most effective in?

XDotNet
XDotNet

Thanks for the comparison chart BTW. Very good resource.

herlizness
herlizness

> my understanding is that's precisely what they intend to do ... at a *functional* level

Sterling chip Camden
Sterling chip Camden

Something as simple as semi-colon versus end-of-line breaks every line of existing code in one language or the other.

Tony Hopkinson
Tony Hopkinson

was better off moving completley away from VB, which meant Java or C# at the time, certainly in windows gui world anyway. The similarites, coupled with some VB6 like syntactic stupidities mislead the VB6er in to thinking littel had chnaged, whereas in reality almost everything had. I did two years of VB6, coming mainly from Delphi. I never considered is simple, stoopid on a regular basis, definitely It wasn't that I couldn't write good code in it, but that it went out of it's way to encourage me to write drivel.

Sterling chip Camden
Sterling chip Camden

C# walks. Good C code runs. Python soars. Ruby teleports. Lisp was already there.

hercules.gunter
hercules.gunter

The part of the world most renowned for wacky cults is California, but for someone actually in California, it's not a geographic stretch. The place offered is irrelevant - Timbuktu, Nepal, Outer Mongolia, in the Australian Outback ... doesn't matter, as long as it's far from everywhere! I suspect that if Justin had named Alpha Centauri, someone would object that he had no grounds for insulting the indigenes of any of its planets (if any).

jck
jck

a bit too much PC training...and I don't mean Personal Computer. Lighten up...it was meant lightly as an allusion to the multiple sects of reclusive groups there...not an insult to them. Christ...if I have to start making everyone call me an Anglo/Celtic/Germanic/Nordic/Native American, I'm gonna go drown myself in some muriatic acid.

alaniane
alaniane

behind not declaring your variables. I hate it when I run across old VB code that basically says dim x. What in the world is x supposed to be? Maybe, it's the C background that makes me insist on changing the code. Another thing I hate is when a function doesn't have a return statement. I know it's legal to say functionFoo = result, but it's very confusing to try and figure out if they've forgotten to return a value or not especially when functionFoo = result is layered about n levels deep into a if-else clause.

Justin James
Justin James

I don't think that learning C# changed the way I write VB.Net, but only because I never picked up a lot of the C#-isms which have suddenly come into practice, like using "var" and lambdas. I think the reason why, is because I learned C# by seeing side-by-side examples in documentation, which focus on showing the exact same thing in two languages, instead of showing how to do things in each language's preferred style. J.Ja

aardvark92
aardvark92

Which should not be surprising, since Anders Hejlsberg developed both.

Tony Hopkinson
Tony Hopkinson

My impression of VB comes from teh code I've seen written in it. When 90% is complete shyte, you start associating it with the language. Just to cap it off. Initially all examples to use .Net were in VB, and a good stick of them were written by VB6ers to make it easier for their mates... Both compiling down to MSIL, does not make them the same. That argument would mean any language that compiled is the same. They all end up as assembly eventually after all.

herlizness
herlizness

> for a given arbitrary, isolated task I'm more or less indifferent to which language is used ... but, if you present me with a choice of two programmers to learn to do something in C# or VB.NET, one with ten years professional experience writing C++ and the other with the same writing VB6, knowing nothing more, I'll pick the one who wrote C++ every time .... all given that this is the ONLY information I have about the two programmers. My estimate is that I'll pick the better person 7-8 times out of ten. For better or for worse the C++ programmer per force knows more about the machine s/he's coding to and had to have invested far more than the VB6 programmer to reach base proficiency in their craft. Let me say it once more, though: I will make the wrong decision some of the time.

Tony Hopkinson
Tony Hopkinson

I'll sneer at your, C#, Delphi, C, C++, VB6, VB.Net, Fortran, Perl, javascript, ... Not because of the language but because of what 'you' wrote in it and why. My problem with VB6 was it was always easier to do something poorly, than well. Deferred instantiation for instance, helped bad code limp along, and caused all sorts of problems in good code with a wee error in it. It all depends on whether you see deferred instantiation as a mechanism to reduce the level of resources you use, or to help some numpty write a lump of code, with no knowledge of lifetime management. VB.Net's reputation is fairly undeserved, but it was designed to take on all the people who didn't know what lifetimes were....

XDotNet
XDotNet

My standard disclaimer is "there is much I don't know" :-) But if both languages get compiled into the same machine code, why can't that machine code be un-compiled and the proper construct be built in the other language? Both of these get compiled into the same machine code right? Dim i as integer = 1 { int i = 1; } So you should be able to construct one from the other. There are already converters out there to convert C# to VB and vice versa. I use this one all the time. http://www.developerfusion.com/tools/ Why not just close all the differences between C# and VB and build a converter into the IDE, and be done with this better language nonsense?

R_K_T_ASHOKA
R_K_T_ASHOKA

Anyways mentioning about a location spreads a trend of using same style by many without understanding the feelings of people belonging to the place... Allast my point is.. there is no wacky cult in Nepal.. if it is why dont you people tell the name of it?

R_K_T_ASHOKA
R_K_T_ASHOKA

I dont know what is PC training.. you cannot call the reclusive groups in Nepal as wacky cults... every culture is different... it might appear for you like this and is not correct... and will surely hurt the people there.. whatever we write should not hurt any I am sure you cannot write the same words in Times magazine or any such international media..

chris
chris

but if they aren't working with the variables like an experience (mature) programmer, they aren't going to write good documentation.

Tony Hopkinson
Tony Hopkinson

that you could do VB with dynamic typing, which is fine. Unfortunately some feeble minded idiot misread the explanation and had dynamic = untyped... A bit after that screw up, someone said the untyped dynamically typed variables are too static, and invented variants.... Function returns, I got used to Delphi defaulting it's. C# keeps me on my toes with that one which is a good thing, because sometimes I forget. Why is Function Return1to10 : Integer returning 0 ? Oops...

Tony Hopkinson
Tony Hopkinson

myself. That's the sort of thing that will come in really handy at a 'low level', if you want to do your own generic class hierarchy for instance. Over use of it though, will be muppet territory. Linq, eval, reflection, all really clever and very handy, but if there's a lot of it visible at the top level of your code, your design sucks. They are meant to make your abstractions more powerful, not your code more abstract.

Sterling chip Camden
Sterling chip Camden

The language is for the programmer, not for the machine. For the programmer, it must be expressive and concise. C# is better than VB.NET in both categories, but neither one is all that good IMHO.

Sterling chip Camden
Sterling chip Camden

We should all try to learn new languages to keep our skills honed, but a C++ developer also have plenty of ground to cover in her or his primary language to keep them busy learning new things.

herlizness
herlizness

> negligent? ya think? don't know if I'd use that word but it would suggest to me a person so utterly lacking in intellectual and professional curiosity that I wouldn't be inclined to hire them one question: would you say the same thing of someone who had programming exclusively for ten years in C++ ?

Sterling chip Camden
Sterling chip Camden

Anyone who has been programming exclusively VB6 for the last ten years has been negligent about taking care of their own skill set -- even if they weren't given any choice of language for their paying work.

Tony Hopkinson
Tony Hopkinson

back to the original langauge or an other, .net language. Some of it will look damn strange though. A lot of it will depend on how you write, also there are a considerable number of optimisations in the compiler, so you might see loops rolled out, functions inlined etc. You'll see that sort of thing even taking it back to the original. There's some intersting stuff in there though.

jck
jck

they're a secretive wacky cult and they don't want interlopers coming there for vacation and the fine dining :^0

jck
jck

whenever it is meant in a light tone, sure I can See, you understand English grammar okay but not tone, humor, etc. PC = Politically Correct Meaning, someone who tries to meet every form of correctness to appease all facets of society as not to seem in any way imperfect or corrupted. Justin is not a bad guy, and does not make a habit of trying to hurt anyone. So, you didn't understand the imagery he used in English to set a mental concept of a situation that most native English speakers would.

Editor's Picks