skysight-inc/HackerNews huggingface dataset:
In Python, OOP boils down to a style choice, which is exactly as it should be, IMO, and is very helpful to beginners.

In Java, you're forced to use OOP for every problem. No beginner understands why to define "hello, world", you also need a class, and a 'static' method on that class, and to invoke a weird-looking special class called "System".

It isn't obvious why there are "String[]" types and "ArrayList" types, and why I should care about the difference. Why does "main()" take "String[]" yet I am encouraged to use "ArrayList" in my code? This is just a sampling of difficult-to-answer questions that a beginner encounters in using Java that don't have a grounding in computer science, but just in Java.

It just so happens that among design choices, the choice to implement your Python code using OOP is a trade-off. It always is, but Python makes the trade-off clear as day.
The win is increased ability to implement interfaces, language protocols, inheritance, polymorphism, the ability to bundle state and behavior, and the ability to bundle related behavior together. The loss is reduced readability and reduced beauty. Since these latter things are counter to The Zen of Python (PEP 20), idiomatic Python programmers will tend to torture themselves over OOP usage, to the point where only data structures that truly demand OOP's features come into existence.

This means that beginners will more often see a useful_function than a UsefulClass in Python's stdlib and associated ecosystem, and this is A Good Thing, since functions are much more composable than classes are (not to mention simpler).

I think Python will therefore also teach beginners vigilance in the use of classes, which the entire software community could use a little more of!
Placebo-philes
Sometimes feminism, as practiced by those who call themselves feminists, is the advocation of social and political equality regarding areas where women are disadvantaged, ignoring and even opposing those areas where men are disadvantaged.

Source: here's[0] the best example I've seen, skip to minute two to see a man get physically prevented from entering a talk about some men's issues. You can also watch the actual event[1] and decide for yourself if it was or was not misogynist. You can also read about Warren Farrell, the speaker, and decide for yourself if he is for or against rape.

I am a feminist by your definition, but I am also concerned with, e.g., statistically more men seem to commit suicide and thought that talk was interesting, so those feminists in the video might say I was a rape apologist.

[0] https://www.youtube.com/watch?v=iARHCxAMAO0

[1] https://www.youtube.com/watch?v=P6w1S8yrFz4
But how do you avoid it in today's world? How do you actually build an app without a large code base?
Exactly. It fucks everything up: As soon as you teach OO with real world stuff as examples, all they see are inheritance relationships. It is really hard to make 'em stop creating extremely complicated hierarchies in order to solve simple problems.
Are we in the Matrix? Science looks for signs we're not real
I'm not yet living in the world I'm advocating.

If I were an anti-Putin Russian advocating a world in which everyone could safely use real-name accounts for their anti-Putin propaganda, you wouldn't argue that my advocacy was false or insincere, just because I was using an anonymous account, now would you?
TBH, your example is not too different from

openwindow(window);
Line aLine = make_line();
addwindowtoline(aLine);

A small pet peeve of mine is people insisting that encapsulation and abstraction are exclusive to object orientation even though abstract data types are also a core concept in prodecural or functional programming.

To make your example "trully OO" you would need to be using dynamic dispatching and polymorphism in those method calls. But are we really going to need multiple Window and Line classes and even if we do, is this really going to be the best way to architecture our code?
This is too funny. Thanks HN for bringing some much needed amusement to my morning :D
would be nice if this eventually turned into something similar to sass or less
Visual Story-Telling Simplified
Your points in the post above are clearly, unambiguously directed at the victim. It's bizarre for you to claim otherwise.

>"you should internalize the fact that it shouldn't matter one bit what a few random internet commentators say or think about you."

Emphasis mine, words yours.

>"These are pictures of you naked. Why is that a problem?"

What the fuck? That's really the cogent response I can muster to this.
>First, I disagree with your premise that PHP's flaws can be attributed primarily to lack of OO design.

That's not my premise. I just point to PHP (and its community) as it has some examples of it.

>The reason OOP should not be taught to beginners is that it is an advanced concept.

I've never quite got this. Spend any time writing code that's not using classes and you end up reinventing OOP anyway.
Read the previous paragraph in the article. The point was that "everyone" assumed they understood how well he was doing, while being unable to evaluate that. (E.g. never heard of github.)
I eat between 1-2 apples and a banana a day. From what I can remember they have never had the strong affect of having a slice of cheese cake (with out the bread) or other deserts have. They affect me in maybe a subtle way but not enough for me to take notice. I should probably try eating like 10 apples and see if its enough sugar to put my brain in ADHD mode. But honestly, I really try to avoid doing that. I really, really hate having my brain in ADHD chemistry mode. I would rather have both my ankles throbbing in pain from sprains for the whole day than be in ADHD mode. At least I could get work done (albeit it in a wheel chair). Though, I would rather be in ADHD mode than have a migraine, so that tells you somewhat where on the pain scale it sits for me.

After writing this post yesterday, I went to the store and bought some gluten free bread (rice and potato flower) for the first time. I had a few pieces and it didn't seem to affect me much if at all. So even though I eat pure paleo, it might really just be the Gluten and Sugar (in decent quantities) that do me in.

I haven't really tried a bunch of experiments because I know what is safe for me. And the idea of trying something that will ruin my whole day (or longer) is not a fun prospect. So I stay pretty conservative and eat pure paleo for the most part. I cheat and eat cheese or beans some times. They don't seem to affect me.
Also, if you're passing data between two processes (e.g. your code fork()d a child), you can be sure that the data format is going to match, no packing required. (still need to ensure alignment in memory though)
CSS variables are the only reason I started using Sass and LESS in the first place. But although these preprocessors come with other interesting features, I never managed to truly incorporate them in my workflow.

The way I ended up solving the CSS variables issue (i.e. replacing the same property/value combination in multiple locations) was to actually regroup selectors.

For example, I'd have:

#title,
.nav a,
.post-title em {
color: #db4e44;
}

The only annoying thing is that it can result in a long list of selectors (although I'd put them on one line anyway). But one thing I truly appreciate with this approach is that you can edit any value with your browser's inspector, and see it instantly update all instances at once. It's great to test out new colors for example.

The other option would be to have a specific class that would apply this style. But then, you'd move the styling from the CSS to the HTML, and I've always tried to prevent myself from breaking this golden rule.
As someone from a Hindu family - this was very interesting. Thanks for sharing.
That example isn't specified enough to show the problem. It's either too simple or too hard. Since we're talking about a beginner, I'll assume you meant it at too simple. But even then you're assigning it to a person with a reasonably technical background. In which case, the LCR circuit is the object and you are asking for a method.
There's no equivalent in class action suits in germany. And then, the company claiming the copyright violation is a swiss company, so to counter-sue and receive a compensation for your costs and fees, you'd have to sue them in switzerland under swiss law. The claimed amount is low enough that it's way less costly to just pay up and leave it at that.

For the general good it would be better if everybody countersued. However, what I can see coming in this case that the matter may proceed to become a criminal case against "The Archive" which then would be a different story. There's still hope.
http://philip.greenspun.com/flying/foreign-airline-safety
That's using a metaphor to explain OOP, not teaching OOP modeling with examples from the physical world.
I'm using that single line as a summary, not the sole evidence.

> [The pilot] "stated it was very difficult to perform a visual approach with a heavy airplane."

From http://www.cbsnews.com/news/ntsb-asiana-crash-pilot-very-con...

This is, of course, complete bullshit.

From the same article:

> Lee said he told his instructors about his concerns in the flight's planning stages. He told investigators that as he realized his approach was off, he was worried he might "fail his flight and would be embarrassed."

More:

> Since “everyone else had been doing the visual approach … he could not say he could not do the visual approach,” according to NTSB

From http://atwonline.com/safety/asiana-777-pilot-sfo-visual-appr...

Would I feel better if he said he was "not concerned at all"? Of course I would. He was performing an easy landing in completely benign weather at an airport with nothing at all tricky or unusual about its approach. There was no reason whatsoever to be concerned.
Github based report card (here's mine)
Though this was kinda cool. Not sure how accurate it is but stumbled upon it.
I like that you can overwrite the var(headersize) in a different style. That makes these pretty powerful. However, var(headersize) is a lot to type, compared to @headersize (like LESS) or $headersize (like SASS). CSS allows for a lot of shorthand (#AABBCC = #AAA, table tr td a ~= table td a, * {}). Would be nice if there was a shorthand for variables too since they'll be used so much.
Austrian developer conference opened their CFP
Js2-mode is an interesting case of an author (Steve Yegge) going against the fold of how Emacs is supposed to interact with programming modes -- by writing his own parser and syntax highlighter and eschewing the built-in way, which is to use Emacs's font locking, which itself is driven by regular expressions and the odd lisp function.

It's a shame Emacs lacks the facility to properly capture the more complex requirements of languages today - especially files with mixed content, such as HTML, Javascript and templating tools. The few that do support this do it using a variety of clever hacks to work around this problem; and still, using regular expressions to capture the nuances and complexities of some languages make it an error-prone way of writing major modes in Emacs. Not to mention you lose out on the many advantages of having an AST in memory for code jumping, refactoring, syntax checking and what have you.

Emacs could do with a shake-up in this space. The proposed solution (Semantic Mode / CEDET) has never really caught on, even though it adds much of the same functionality to Emacs; my suspicion is that this is because Semantic/CEDET is ridiculously complex and lacking in documentation.
The article is arguing that abstractions like OOP are unnecessary for a beginner. It is only after you understand procedural code that OOP "makes sense".
I wonder why he obfuscated the "validOptusUsername" key in the screenshots
> Given that feminism is the advocation of social and political equality twixt genders,

I'm afraid that isn't actually given.

That is your working definition, however, over the years there have been numerous "waves" of feminism and numerous often contradictory interpretations of what feminism and, even equality means.

Andrea Dworkin for example identified as a feminist, and is identified by some others as such, yet has written extensively about things that are far from simple equality. (Quite frankly, in some cases, anti male hate-speech)

Erin Pizzey, the founder of UK's first domestic violence shelter for women received bomb and death threats when she realised that equal protection from dv meant men should have shelters too. The self identified feminists who campaigned against her did not have the same definition of equality.

Even online dictionaries disagree with you on the meaning of feminism.

Google define feminism and you'll see that it says that it is the advocation of women's rights with respect to men.

Equality is in the definition, but what it leaves out is the acknoedgement that there are some conditions where women have significant advantage over men.

There are branches of (self proclaimed?) feminism that have different interpretations of that.

There are some branches that blame men for all the worlds woes.

Some that say a woman could never have as much privilege as a man.

The definition of feminism is so diluted as to be virtually meaningless without secondary descriptors.

What 'wave' or type of feminist? Radical? Radical trans exclusionary? Sex positive? Second wave? Third wave?

I'm sorry, I can't accept that "feminism means"

Why what about the campaign "feminism is simply the belief that women are people"?

Yet another definition.

Stienham through Paglia to Hanna Roisin (who recently declared men not equal but obsolete), feminism means a lot of things.
I don't know. Do you?
Unlike many HN'ers, I'm a big fan of OOP (yes, even in the Java sense). Still, I think the author is absolutely right.

OOP is useful because it helps tackling some common non-functional concerns, mostly modularity and as a result extensibility, reusability and, to some extent, maintainability. These are architecture concerns. They're vital to take into account when you're writing any piece of non-trivially large software (and OOP is one, though not the only one, good approach to deal with them). They're entirely unimportant in small little programs, which includes nearly anything a beginning programmer makes when learning.

This also means that languages that religiously enforce OOP, like Java and C#, might not be the best starting points indeed.
Yes, definitely this. If there are hundreds of warnings, there's no motivation to fix any of them. If there are none, hopefully no-one wants to add the code that creates one.

Perhaps they now need to compile the project with warnings-as-errors to enforce clean code?
Wow man! I think you have a really bad attitude.

I am a programmer. I am not a software Engg. I am actually a Production Engg. However, I am a programmer. I'm a little bit older than you....27.

Let me tell you what I spend my days doing. I sit in a CCD (Cafe Coffe Day) with my best friend from 10:30 - 1 pm and code and work on making a beautiful product. Our product caters to the Indian market. We make a decent amount of money. Enough to allow me to buy my first house and go for vacations every few months.

My problem with your post is your attitude. India is an amazing country to me cause the market is so insanely large that if you capture a niche of a niche of a niche.... you can live a great life. In fact, I will argue, you can have a more beautiful life than you would in countries like the US etc. You will be able to delegate all boring aspects of your life (to maid and cooks and helpers and assistants who are all very cheap because labor is cheap) and just focus on what you want to do. That is the beauty of India. I could go on and on. But, let me assure you, that you are missing out if you think its a bad thing to be a skilled programmer in India.
The pilot expressed his concerns about performing a visual approach to his instructor before the flight. The instructor let him fly anyway instead of instantaneously grounding him and saying, "WTF? This is Piloting 101, go get your shit together."

The instructor let this person fly when he was lacking such a basic skill, and that the instructor came from the same system that allowed this incompetent pilot to attain command of a large airliner. This to me indicates that the system is broken and there's no reason to think it couldn't produce an instructor who was also completely useless at performing a visual approach.
Not the grandparent, but in my view it distracts from what the code actually needs to do. OOP is a tool to structure code and data. It gives us some useful ways to deal with responsibilities, namespaces, some kinds of polymorphism, etc. We should use it in a pragmatic way, and making a class hierarchy reflect the real world often puts aesthetics above practical considerations.
It's great to see SmarterEveryDay http://www.youtube.com/user/destinws2 get some press. Be sure to check out the Deep Dive play lists.
Ahh, the old "my comment would make perfect sense if only we weren't talking about Earth" gambit.
It doesn't. That's why I uninstalled it, the same way I do every other app that feature creeps its way towards demanding greater and greater access to my information.
I watched the video of him describing the app, and it seems as though he'd have trouble with a job interview. Is that just my impression? Do you disagree?
I think you're misunderstanding it. JS2-mode is a few years old and a generic javascript mode with a built-in AST and all the goodness that comes from that.

It does not inherently understand require.js. Nor does ST. With Emacs's JS2-mode, thanks to its AST, it is possible to augment the library so that it does understand require.js -- and the author does so without resorting to piles-upon-piles of regexp hacks.
"I am Cameron Winklevoss and I love me some Bitcoin AMA"
The Streaming Media Way Back Machine – My Strategy for Broadcast.com from 1999
The important things for writing modular code in a big codebase is defining clear interfaces and making "black box" modules. An important thing for this is abstract data types but, unlike what many people seem to say, those are not exclusive to OOP - you can also have abstract datatypes in procedural or functional languages.

The core concept of OOP is adding dynamic method-based dispatching to your abstract data types but I would argue that while this is useful a lot of times, its not really fundamental. IN fact, there as many cases when dynamic dispatching will not be able to solve the problem on its oown: a good example is generics in Java and C# - parametric polymorphism helps enforce abstractions but isn't really object oriented.
Isn't it tied together? If a new programmer can't structure their code they can't write it.
Sorry, but this literally the same headline about video games we've seen since at least the mid 90's.
A lot of programmers don't like/know/care about SOLID or good code design/architecture and also end up complaining when their codebase is a big, huge mess. Often times, just following good OOP principles (and some FP principles) makes it easy to clean up most messes.

The biggest thing I think many programmers suffer from is wanting to have too few objects with big, ugly methods inside.

More objects, fewer methods, smaller methods is often the answer to managing complexity, but it seems like humans don't like appropriately recognizing the complexity of the problems they are working with, even when confronted with the mess they make to solve them.
So You Think You Have a Power Law
Where I see mental illness is in the use of the word "power" (here "social power") to confer adversarial standing to anything that makes you uncomfortable, Michael. You do that a lot. It is extremely worrisome.

In actual fact, writing a sex blog did not harm you or anyone else one iota. It was not in fact a provocation to harm the author. Rational adults can see this. You seem not to be able to. Your posts often seem like a cry for help. Please find some.
I'd reinvent a universe where what people achieve is considered more important than the programming language used to do it...
Arguing this angle is pointless. I'm a marxist, and so face the same battle of the tons of people who use the term in a completely different way to myself. Including people who self-identify as marxists.

I've had conversations with people who also considered themselves marxists where our only point of agreement was that in "their" ideal society I'd probably be considered a criminal dissident, and would probably be involved in armed uprisings, and that they'd very much enjoy to see me locked up.

For a while I tried to fight the "wrong" usage of the term and related terms. Then I thought about picking other terms myself.

But eventually I realized that what worked best was simply to acknowledge the "wrong" usage, and distance myself in suitable way depending on what I write. E.g. by also using a more descriptive term, such as liberal socialist or left-communist, that most people either know or have to look up, that does not have the same immediate connotations.
Indeed. But it's still a nice thing to be able to do; this is, after all, the Emacs way -- for good or ill!

One useful technique to make Emacs appear cleverer than it is vis-a-vis code searching and navigation is to navigate by syntax highlighting - most of which is assigned one of several types (constant, keyword, statement, etc.) -- and simply use that. It's hardly perfect, but it's good enough for 90% of the basic navigation you need to do.
That's what the people that harassed Lena Chen said!

He had a "right" to say how he felt, and, as an adult, the responsibility to deal with the consequences of saying it.
That is absolutely NOT my experience. People look at the real world and see concrete types, not hierarchies of abstractions.

New programmers will only try to build deep inheritance trees if they are told that's what they're supposed to do.
"Strongly consider taking a backup of your current working directory and .git to avoid any possibility of losing data as a result of the use or misuse of these instructions."

WTF?

What is the point of a version control system if you have to take backups of it to avoid losing data when performing certain operations?

I use git, I like git, but certain aspects of it are fundamentally broken.
To take that example even further down the "procedural with OO-ish conventions":

Window_open(window);
Line aLine;
Line_make(aLine);
Window_add(window, aLine);
It starts out that way. But then it turns out that to achieve equality, you mostly need to improve women's position in society. And then people only remember the second part and forget about the equality thing.

And finally, this happens: http://www.smbc-comics.com/?id=2939
Yes, thank you. The lunatics of whom you speak utterly rely on the shadows in which they hide. The article makes it seem as though minimal effort has been put into pursuing the attacker, which is maddening if true. Libel and defamation are very much actionable in the U.S., especially as civil matters.
I don't think Python is a good first language. It's far too abstracted. I've always felt that learning lower level languages first then moving up the ladder is the better approach.
It's bizarre for you to claim my points are directed at the victim, when I'm arguing that isn't my intention.

My point is: if someone would have internalized that, what happened would be less of a problem. However, internalizing such things is more likely if everyone around you has internalized those things, which would already go a much longer way towards making what happened less of a problem.

The train of thought starts at the first point, suggests a solution, but doesn't say that only that single point is the solution. The entirety of the post suggests a solution, in which most people would not consider what happened a problem anymore. And only the entirety is the message. That single point out of context isn't.
Is this still ongoing?
How Facebook's New Machine Brain Will Learn All About You From Your Photos