views:

1064

answers:

35

I've read some of the recent language vs. language questions with interest... Perl vs. Python, Python vs. Java, Can one language be better than another?

One thing I've noticed is that a lot of us have very superficial reasons for disliking languages. We notice these things at first glance and they turn us off. We shun what are probably perfectly good languages as a result of features that we'd probably learn to love or ignore in 2 seconds if we bothered.

Well, I'm as guilty as the next guy, if not more. Here goes:

  • Ruby: All the Ruby example code I see uses the puts command, and that's a sort of childish Yiddish anatomical term. So as a result, I can't take Ruby code seriously even though I should.
  • Python: The first time I saw it, I smirked at the whole significant whitespace thing. I avoided it for the next several years. Now I hardly use anything else.
  • Java: I don't like identifiersThatLookLikeThis. I'm not sure why exactly.
  • Lisp: I have trouble with all the parentheses. Things of different importance and purpose (function declarations, variable assignments, etc.) are not syntactically differentiated and I'm too lazy to learn what's what.
  • Fortran: uppercase everything hurts my eyes. I know modern code doesn't have to be written like that, but most example code is...
  • Visual Basic: it bugs me that Dim is used to declare variables, since I remember the good ol' days of GW-BASIC when it was only used to dimension arrays.

What languages did look right to me at first glance? Perl, C, QBasic, JavaScript, assembly language, BASH shell, FORTH.

Okay, now that I've aired my dirty laundry... I want to hear yours. What are your language hangups? What superficial features bother you? How have you gotten over them?

+5  A: 

Java, and its checked exceptions. I left Java for a while, dwelling in the .NET world, then recently came back.

It feels like, sometimes, my throws clause is more voluminous than my method content.

Michael Petrotta
The java exception constructor has a "cause" parameter so that you can do exception chaining, precisely to prevent this. You should only throw exceptions which are relevant at the abstraction level of your class.
Wim Coenen
+2  A: 

In C/C++, it annoys me how there are different ways of writing the same code.

e.g.

if (condition)
{
   callSomeConditionalMethod();
}
callSomeOtherMethod();

vs.

if (condition)
   callSomeConditionalMethod();
callSomeOtherMethod();

equate to the same thing, but different people have different styles. I wish the original standard was more strict about making a decision about this, so we wouldn't have this ambiguity. It leads to arguments and disagreements in code reviews!

LeopardSkinPillBoxHat
Languages aren't designed to prevent arguments, they're designed to provide abstractions from machine level code in order to tell a computer what to do. If you make the standard strict in one situation, you'll get arguments elsewhere. The example you give is a corner-case for single line statements.
Jeff Yates
Yes, I agree that this was a corner-case situation. It was intended to be a single example of my gripe ("In C/C++, there are different ways of writing the same code"). It was not my sole problem.
LeopardSkinPillBoxHat
"In C/C++, there are different ways of writing the same code"Man, did you ever program in Perl? =)
Seiti
Don't argue about it in code reviews. Let the people who care do the work. Don't do any formatting work yourself, be productive instead, and then *you* will get a raise ;-)
Jonas Kölker
+2  A: 

It irritates me sometimes how people expect there to be one language for all jobs. Depending on the task you are doing, each language has its advantages and disadvantages. I like the C-based syntax languages because it's what I'm most used to and I like the flexibility they tend to bestow on the developer. Of course, with great power comes great responsibility, and having the power to write 150 line LINQ statements doesn't mean you should.

I love the inline XML in the latest version of VB.NET although I don't like working with VB mainly because I find the IDE less helpful than the IDE for C#.

Jeff Yates
Good point! c# is great for tasks involving any non-trivial amount of work, but other than that it's a pain to use. That's why i learned a scripting language :)
RCIX
+25  A: 

I hate Hate HATE "End Function" and "End IF" and "If... Then" parts of VB. I would much rather see a curly bracket instead.

Wayne
At least it has one benefit - you can see what construct is ending without having to search for a matching bracket which might be off the top of the screen.
Hugh Allen
Multiple nested END IFs in VB would have the same problem... I tend to use comments on the closing brace in code with many nested blocks, like "// end for y", etc.
Jared Updike
I hate END Funtions too. I prefer bash syntax (if/fi, case/esac) or curly braces...
Seiti
Yeah, I really hate how verbose VB is.
cdmckay
Seiti: You would want to see NOITCNUF at the end of a function? And ERUDECORP? and SSALC? How about ECAFRETNI? For POO (er, I mean OOP) languages?
jmucchiello
+8  A: 

Pascal's Begin and End. Too verbose, not subject to bracket matching, and worse, there isn't a Begin for every End, eg.

Type foo = Record
    // ...
end;
Hugh Allen
Any Pascal/Delphi IDE worth its salt will bracket-match `begin..end`, and a lot of advanced plain text editors do it as well. Mine does (it also bracket-matches `If...Then..End If` in BASIC, etc).
Pavel Minaev
+6  A: 

Although I'm mainly a PHP developer, I dislike languages that don't let me do enough things inline. E.g.:

$x = returnsArray();
$x[1];

instead of

returnsArray()[1];

or

function sort($a, $b) {
    return $a < $b;
}
usort($array, 'sort');

instead of

usort($array, function($a, $b) { return $a < $b; });
deceze
The latter is doable in php 5.3
orlandu63
+2  A: 

I found Perl's use of "defined" and "undefined" values to be so useful that I have trouble using scripting languages without it.

Perl:

($lastname, $firstname, $rest) = split(' ', $fullname);

This statement performs well no matter how many words are in $fullname. Try it in Python, and it explodes if $fullname doesn't contain exactly three words.

Barry Brown
Yeah, this is a bit of a PITA in Python. I usually do something like:fields = fullname.split();fields += [None]*(len(fields)-3);lastname, firstname, rest = fields . Definitely not as convenient.
Dan
Exactly! Do What I Want, darn it! :)
Barry Brown
+1  A: 

Java's packages. I find them complex, more so because I am not a corporation. I vastly prefer namespaces. I'll get over it, of course - I'm playing with the Android SDK, and Eclipse removes a lot of the pain. I've never had a machine that could run it interactively before, and now I do I'm very impressed.

Bernard
How much of a difference is there between packages and namespaces?
Zifre
Well, conceptually, not much. What I was commenting on was the way packages rely on filesystem structure, and the way you're supposed to base it off your domain (com.google.Whatever) instead of namespace MyProject { whatever }.
Bernard
Ok, I guess I agree with you there on the filesystem structure thing, but at least com.google.Whatever helps prevent conflicts.
Zifre
Well, basing package names off your domain name is just a convention and not enforced in any way. It's still a good idea, because it avoids name clashes. Also, I personally find the parallelism between package and fs structure rather useful, as it makes classes easier to find. But that might be debatable...
sleske
I will admit that the package/fs parallelism has grown on me, somewhat.
Bernard
+6  A: 

C and C++'s syntax is a bit quirky. They reuse operators for different things. You're probably so used to it that you don't think about it (nor do I), but consider how many meanings parentheses have:

int main()        // function declaration / definition
printf("hello")   // function call
(int)x            // type cast
2*(7+8)           // override precedence
int (*)(int)      // function pointer
int x(3)          // initializer
if (condition)    // special part of syntax of if, while, for, switch

And if in C++ you saw

foo<bar>(baz(),baaz)

you couldn't know the meaning without the definition of foo and bar.

  • the < and > might be a template instantiation, or might be less-than and greater-than (unusual but legal)
  • the () might be a function call, or might be just surrounding the comma operator (ie. perform baz() for size-effects, then return baaz).

The silly thing is that other languages have copied some of these characteristics!

Hugh Allen
Consistent and smart use of whitespace can help clear up some of the ambiguities... but no one cares.
yodie
+17  A: 

PHP's function name inconsistencies.

// common parameters back-to-front
in_array(needle, haystack);
strpos(haystack, needle);

// _ to separate words, or not?
filesize();
file_exists;

// super globals prefix?
$GLOBALS;
$_POST;
Dean
Wow, I just read my example comment "// _ to separate words, or not?" and realized the word "separate" - although always having the same meaning - is pronounced differently in 2 different contexts. One is like an assignment and the other is a comparator... I suppose English is a pretty bad too.
Dean
Yeah, I don't understand why they don't they just keep all the functions that pollute the global namespace (i.e. strpos, etc.) but also include new classes that clean them up (like a String class, a Number class, etc.)
cdmckay
For that matter, Python's naming inconsistencies. That's one thing I will give Java. EVERYTHING in Java is named "right."
Daniel Straight
Except that sometimes it's `.length`, and sometimes it's `.length()`, and yet other times it's `.getLength()` ~
Pavel Minaev
If only naming was the worst of PHP's inconsistencies!
Evgeny
@Dean, in case you haven't already seen it yet: http://stackoverflow.com/questions/282329/what-are-five-things-you-hate-about-your-favorite-language/282394#282394.
Jeff Sternal
+2  A: 

If Microsoft had to invent yet another C++-like language in C# why didn't they correct Java's mistake and implement support for RAII?

David Holm
RAII depends on having deterministic destructors, which aren't feasible in a garbage-collected language.
Ferruccio
RAII just requires an interface with language support. The interface (call it Resource) has one method void Release(). The language support would be a variable keyword "acquired File foo = new File()". When an acquired variable leaves scope, Release is automagically called. Simple.
jmucchiello
That sounds like IDisposable to me.
David
sleske
+3  A: 

SQL, they say you should not use cursors and when you do, you really understand why...
its so heavy going!


    DECLARE mycurse CURSOR LOCAL FAST_FORWARD READ_ONLY
     FOR
     SELECT field1, field2, fieldN FROM atable

    OPEN mycurse
    FETCH NEXT FROM mycurse INTO @Var1, @Var2, @VarN

    WHILE @@fetch_status = 0
    BEGIN
     -- do something really clever...

     FETCH NEXT FROM mycurse INTO @Var1, @Var2, @VarN
    END
    CLOSE mycurse
    DEALLOCATE mycurse

ThatBloke
+1 for "mycurse" - LOL
Christian Hayter
+3  A: 

There's nothing in the world I hate more than php.

  1. Variables with $, that's one extra odd character for every variable.
  2. Members are accessed with -> for no apparent reason, one extra character for every member access.
  3. A freakshow of language really.
  4. No namespaces.
  5. Strings are concatenated with ..
  6. A freakshow of language.
Vasil
Now that I think it, . can't be used instead of -> because it's concatenation... mmm...
asterite
And the extra characters ($ and >) require you press shift which is annoying and increases typos.
Jared Updike
PHP 5.3+ have namespaces =)
Seiti
What's wrong with 5?
jmucchiello
not much, if you don't think operators in a programming language should be intuitive. Most proper OO languages have . for member access and + for string concatenation. So you'd expect similar behaviour. But then, php is not an OO language, let alone a proper language.
Vasil
What is a "proper" OO language? There are plenty of OO language that use neither . nor -> to access data members. And what is a "proper" language? Show me a definition. Brainfuck is extremely consistent. Is that a "proper" language?
jmucchiello
+2  A: 

Case sensitivity.

What kinda hangover do you need to think that differentiating two identifiers solely by caSE is a great idea?

Yuvi
In Java it's quite conventional to name your classes with a capital first, and your instances in lower case. It is very common to see something like: Person person = new Person();
Dean
It's seems every language designer except for Bill Gates was hungover.
Vasil
I totally have the opposite view! I like how in Haskell, case sensitivity is used sort of as part of the syntax (types and constructors always uppercase, variables always lower). I find it to be extremely elegant.
Jared Updike
I think case sensitivity is great in statically-typed languages, but for dynamic ones where there is no compiler to catch your errors, it can get really annoying.
Edan Maor
A: 

I have a practical one from years of code revewing and debugging other people's code. I would remove (from all languages) the ability to group logical operations in a conditional statement. This comes from a specific gripe about the AND operator e.g...

if (a and b)
{
  do something
}

There are four cases, three of which have not been handled. The programmer may well have considered all 4 cases and deliberately chosen to write the code this way, but we have no indication that is the case unless they commented the code - and normally they don't.

It may be a bit more verbose, but the following is unambiguous...

if (a)
{
    if (b)
    {
        do something
    }
    else
    {
        what about this case?
    }
}
else
{
    if (b)
    {
        what about this case?
    }
    else
    {
        do something else
    }
}

As the poor person following up a year later at least I will know exactly what is supposed to be going on.

Simon
But if you took that out of the language, programmers would roll their own version. And that would not be pretty.
finnw
I don't really follow. The first statement seems perfectly clear to me - you only want to "do something" when both a and b are true. In all other cases you want to do nothing. Having empty else statements just seems wrong.
Dan Diplo
*shudders* i would NOT want to maintain code you wrote...
RCIX
-1. (it's community wiki so I don't feel bad) that is so utterly pointless. Hey, try managing `if((a and b) or (c and d) and e))` for me. I bet you'll stab your eyes out whenever you get to the end when there is something like this `}}}}}}}` This does NOT make code more readable or improve reliability/code-correctness. It is just more typing that the programmer could have made a mistake at typing.
Earlz
+15  A: 

I never really liked the keywords spelled backwards in some scripting shells

if-then-fi is bad enough, but case-in-esac is just getting silly

loudej
Heh, I have to agree with you on this one... and why do for and while loops end with "done" rather than "rof" or "elihw" :-P
Dan
"rof"would be great!!
Seiti
I so want a language where `rofl` is a keyword
Earlz
Maybe in lolcode?
Sean McMillan
+3  A: 

Coding Style inconsistencies in team projects.

I'm working on a large team project where some contributors have used 4 spaces instead of the tab character. Working with their code can be very annoying - I like to keep my code clean and with a consistent style.

It's bad enough when you use different standards for different languages, but in a web project with HTML, CSS, Javascript, PHP and MySQL, that's 5 languages, 5 different styles, and multiplied by the number of people working on the project.

I'd love to re-format my co-workers code when I need to fix something, but then the repository would think I changed every line of their code.

Dean
+8  A: 

I just thought of another... I hate the mostly-meaningless URLs used in XML to define namespaces, e.g. xmlns="http://purl.org/rss/1.0/"

Dan
+1  A: 

Prolog's if-then-else syntax.

x -> y ; z

The problem is that ";" is the "or" operator, so the above looks like "x implies y or z".

Hugh Allen
Wow, that is indeed inscrutable!
Dan
A: 

I hated the parentheses in Lisp and Scheme, because after C, C# and languages like that it seemed very obfuscated, and it wasn't really clear how things are related. However, now that I know something about Scheme, and it's usual formatting guidelines, I wouldn't say that I like the way it works, but at least I understand, and overcome my fears when reading code written in List/Scheme.

I think if you learn something and use it for a while(maybe even a few hours are enough, at least it was for me), you can actually overcome your dislike in the syntax, and will be able to concentrate on what you are supposed to do really with the tool which is the language.

rhapsodhy
For the parenthesis-haters, there is now Clojure. It cuts down on unnecessary parentheses and uses square brackets and braces in place of some of them - it makes coding more approachable for the less parenthetically inclined.
Carl Smotricz
+1  A: 

Although I program primarily in python, It irks me endlessly that lambda body's must be expressions.

I'm still wrapping my brain around JavaScript, and as a whole, Its mostly acceptable. Why is it so hard to create a namespace. In TCL they're just ugly, but in JavaScript, it's actually a rigmarole AND completely unreadable.

In SQL how come everything is just one, huge freekin SELECT statement.

TokenMacGuy
+3  A: 

I hate semi-colons. I find they add a lot of noise and you rarely need to put two statements on a line. I prefer the style of Python and other languages... end of line is end of a statement.

cdmckay
I'd say they're more useful the other way round - when the end of the line is *not* supposed to be the end of the statement, so you can break up long lines.
Benno
I used to dislike semicolons, but then I saw VB which does the opposite. YUCK!
Christian Hayter
A: 

Applies to several languages:

  1. Case sensitivity - whoever's idea was that ?! (And people who use SeveralWordsThatMeanSomething as well as severalwordsthatmeansomething for different meanings should be shot :)

  2. Array indexing starting from 0. I come from fortran background, so that is another reason, but in mathematics array indexing always starts with 1, so it tends to create a lot of headaches (expecially when debugging) when implementing a larger model.

  3. Semicolons - just junk in code. If you're careful writing code (fortran, python, ...) you don't need them. If you're not, they're not gonna save you.

  4. Curly brackets - see 3.

p.s. All of you out there. Don't get mad. If you don't like the answer, you shouldn't have asked.

ldigas
Re: 1) I agree that using different casing schemes to differentiate identifiers is an abomination, but I also think that allowing different casing for the /same/ identifier can also be a PITA. I don't want to have to look for VARNAME, VarName, varname, VARname, etc when scanning for an identifier.
Adam Bellaire
http://stackoverflow.com/questions/509129/why-do-arrays-start-from-zero/509142
Ólafur Waage
Olafur: I know why they start from zero. I just don't like the fact that they do :)
ldigas
Adam: Why not ? You just ignore case, and search away ... ? I think that allowing different casing for the same identifier can be a nice "relaxing" syntax feature. Or am I missing something ?
ldigas
Re 2: see lua.org for another language that does 1-based indexing. As far as case insensitivity, it opens up far worse avenues for programmers to make hard to read code: See `VaRnAmE`...
RCIX
@RCIX - (if I undestood your point correctly) then just convert everything to small caps ... (analogy with tabs/spaces, over which so many dramatize over nothing ...)
ldigas
+6  A: 

I like object-oriented style. So it bugs me in Python to see len(str) to get the length of a string, or splitting strings like split(str, "|") in another language. That is fine in C; it doesn't have objects. But Python, D, etc. do have objects and use obj.method() other places. (I still think Python is a great language.)

Inconsistency is another big one for me. I do not like inconsistent naming in the same library: length(), size(), getLength(), getlength(), toUTFindex() (why not toUtfIndex?), Constant, CONSTANT, etc.

The long names in .NET bother me sometimes. Can't they shorten DataGridViewCellContextMenuStripNeededEventArgs somehow? What about ListViewVirtualItemsSelectionRangeChangedEventArgs?

And I hate deep directory trees. If a library/project has a 5 level deep directory tree, I'm going to have trouble with it.

Jordan Miner
Seriously. Why make it 99% object-oriented and then throw some random non-OO stuff in there for no apparent reason? GAH!
Daniel Straight
+4  A: 

All the []s and @s in Objective C. Their use is so different from the underlying C's native syntax that the first time I saw them it gave the impression that all the object-orientation had been clumsily bolted on as an afterthought.

Crashworks
It freaks me out, it's C, but it aint grandpa's C
seanb
It was bolted on as an afterthought. It started basically as a preprocessor for C. The @'s were there because @ was not legal for anything else, so they could be sure that any new keyword starting with @ (@interface, @implementation, etc.) would not conflict with any C keywords.Objective-C is terribly ugly, which is unfortunate, because the underlying object-oriented model and frameworks are pretty nice.
Kristopher Johnson
A: 

tsql begin & end...damn that's annoying...

dotjoe
A: 

In most languages, file access. VB.NET is the only language so far where file access makes any sense to me. I do not understand why if I want to check if a file exists, I should use File.exists("") or something similar instead of creating a file object (actually FileInfo in VB.NET) and asking if it exists. And then if I want to open it, I ask it to open: (assuming a FileInfo object called fi) fi.OpenRead, for example. Returns a stream. Nice. Exactly what I wanted. If I want to move a file, fi.MoveTo. I can also do fi.CopyTo. What is this nonsense about not making files full-fledged objects in most languages? Also, if I want to iterate through the files in a directory, I can just create the directory object and call .GetFiles. Or I can do .GetDirectories, and I get a whole new set of DirectoryInfo objects to play with.

Admittedly, Java has some of this file stuff, but this nonsense of having to have a whole object to tell it how to list files is just silly.

Also, I hate ::, ->, => and all other multi-character operators except for <= and >= (and maybe -- and ++).

Daniel Straight
I love =>! can you do this in VB? `myEvent += (sender, args) => {MessageBox.Show("it worked!")};`
RCIX
`AddHandler myEvent, Function() MessageBox.Show("it worked!")` or something like that - don't have the IDE in front of me to check.
Christian Hayter
+3  A: 

Any language that can't fully decide if Arrays/Loop/string character indexes are zero based or one based.

I personally prefer zero based, but any language that mixes the two, or lets you "configure" which is used can drive you bonkers. (Apache Velocity - I'm looking in your direction!)

snip from the VTL reference (default is 1, but you can set it to 0):

# Default starting value of the loop
# counter variable reference.
directive.foreach.counter.initial.value = 1

(try merging 2 projects that used different counter schemes - ugh!)

scunliffe
A: 

My big hangup is MATLAB's syntax. I use it, and there are things I like about it, but it has so many annoying quirks. Let's see.

  • Matrices are indexed with parentheses. So if you see something like Image(350,260), you have no clue from that whether we're getting an element from the Image matrix, or if we're calling some function called Image and passing arguments to it.
  • Scope is insane. I seem to recall that for loop index variables stay in scope after the loop ends.
  • If you forget to stick a semicolon after an assignment, the value will be dumped to standard output.
  • You may have one function per file. This proves to be very annoying for organizing one's work.

I'm sure I could come up with more if I thought about it.

BigBeagle
A: 

[Disclaimer: i only have a passing familiarity with VB, so take my comments with a grain of salt]

I Hate How Every Keyword In VB Is Capitalized Like This. I saw a blog post the other week (month?) about someone who tried writing VB code without any capital letters (they did something to a compiler that would let them compile VB code like that), and the language looked much nicer!

RCIX
A: 

In Ruby, I very strongly dislike how methods do not require self. to be called on current instance, but properties do (otherwise they will clash with locals); i.e.:

def foo()
   123
end

def foo=(x)
end

def bar()
    x = foo() # okay, same as self.foo()
    x = foo   # not okay, reads unassigned local variable foo
    foo = 123 # not okay, assigns local variable foo
end

To my mind, it's very inconsistent. I'd rather prefer to either always require self. in all cases, or to have a sigil for locals.

Pavel Minaev
A: 

I got one.

I have a grudge against all overly strict static typed languages.

I thought C# was awesome until I started being forced to write code like this:

void event...(object sender,EventArgs e){
  int t=(int)(decimal)(MyControl).Value); //Value is an object which is actually a decimal to be converted into an int
}

Oh, and attributes are fugly. Could Microsoft seriously not think of anything uglier than [MyAttribute(Argument)] void function... Seriously. wtf? Don't even get me started on XAML markup..

I can't take Python seriously because of the whitespace issue..

At times I have trouble taking Ruby seriously because

a) I taught myself from Why's Poignant Guide

b) Identifier type is determined by case in some instances. I've grown past this though cause it's sensible and more clean than a const keyword. Now in every language when I make a constant it's uppercase.

Oh and I also hate the

if(a)
  b();

syntax. You have no idea how many times I've just done

if(a)
  b();
  c();

by accident with code written like that.. Actually it can be worse with

if(a)
  b(); c();

The only place it should ever be able to be used is

if(a){ ....
}else if(b){ ...
Earlz
+4  A: 

I abhor the boiler plate verbosity of Java.

  • writing getters and setters for properties
  • checked exception handling and all the verbiage that implies
  • long lists of imports

Those, in connection with the Java convention of using veryLongVariableNames, sometimes have me thinking I'm back in the 80's, writing IDENTIFICATION DIVISION. at the top of my programs.

Hint: If you can automate the generation of part of your code in your IDE, that's a good hint that you're producing boilerplate code. With automated tools, it's not a problem to write, but it's a hindrance every time someone has to read that code - which is more often.

While I think it goes a bit overboard on type bureaucracy, Scala has successfully addressed some of these concerns.

Carl Smotricz
`System.out.Println` is ridiculous for what most languages call `puts`
Earlz
+3  A: 

In no particular order...

OCaml

  • Tuples definitions use * to separate items rather than ,. So, ("Juliet", 23, true) has the type (string * int * bool).

  • For being such an awesome language, the documentation has this haunting comment on threads: "The threads library is implemented by time-sharing on a single processor. It will not take advantage of multi-processor machines. Using this library will therefore never make programs run faster." JoCaml doesn't fix this problem.

  • ^^^ I've heard the Jane Street guys were working to add concurrent GC and multi-core threads to OCaml, but I don't know how successful they've been. I can't imagine a language without multi-core threads and GC surviving very long.

  • No easy way to explore modules in the toplevel. Sure, you can write module q = List;; and the toplevel will happily print out the module definition, but that just seems hacky.

C#

  • Lousy type inference. Beyond the most trivial expressions, I have to give types to generic functions.

  • All the LINQ code I ever read uses method syntax, x.Where(item => ...).OrderBy(item => ...). No one ever uses expression syntax, from item in x where ... orderby ... select. Between you and me, I think expression syntax is silly, if for no other reason than that it looks "foreign" against the backdrop of all other C# and VB.NET code.

LINQ

Every other language uses the industry standard names are Map, Fold/Reduce/Inject, and Filter. LINQ has to be different and uses Select, Aggregate, and Where.

Functional Programming

Monads are mystifying. Having seen the Parser monad, Maybe monad, State, and List monads, I can understand perfectly how the code works; however, as a general design pattern, I can't seem to look at problems and say "hey, I bet a monad would fit perfect here".

Ruby

GRRRRAAAAAAAH!!!!! I mean... seriously.

VB

Module Hangups
    Dim _juliet as String = "Too Wordy!"

    Public Property Juliet() as String
        Get
            Return _juliet
        End Get
        Set (ByVal value as String)
            _juliet = value
        End Set
    End Property
End Module

And setter declarations are the bane of my existence. Alright, so I change the data type of my property -- now I need to change the data type in my setter too? Why doesn't VB borrow from C# and simply incorporate an implicit variable called value?

.NET Framework

I personally like Java casing convention: classes are PascalCase, methods and properties are camelCase.

Juliet
A: 

I hate that in Python I never know if something is a method on an object, or some random function floating around (see built-in functions). It feels like they started to make the language object-oriented but then slacked off. It makes more sense to me to have such functions be methods on some base class, like Object.

I also hate the __methodName__-style methods, and that if I really want to, I can still access private stuff in a class from outside the class.

The whitespace requirement bugs me; I don't want the language designer making me code a certain way.

I don't like the one-right-way-to-do-something ideal to which Python adheres. I want options.

Sarah Vessels