Telling children 'hard work gets you to the top' is simply a lie - <AUTHOR> https://www.theguardian.com/commentisfree/2017/apr/14/children-hard-work-social-mobility-estate-background <comment><USER2> More straw-man crap trying to pitch the ridiculous idea that hard work doesn't matter at all. OK, sure, you can argue that you're _more likely_ to reach the _very highest echelons_ of society if you are lucky enough to be born rich, etc. But:

a. "more likely" doesn't mean it isn't possible to achieve if you _aren 't_ "born right"

and perhaps more to the point:

b. "success" is measured on a continuum; it's not a binary proposition. And there's a lot of room between "Becoming a Supreme Court justice" (just to pick an example) and winding up as a barista at Starbucks. Like, plenty of lawyers who make a nice living for their families, or all the thousands of local district and superior court judges out there, or the hundreds of federal circuit judges who don't _quite_ make it to the _very_ top.

This kind of article is boring and pointless because it's selling a dangerous idea: that nothing you do matters at all, and, ergo, you might as well do nothing. I mean, if hard work doesn't matter, why bother working hard to begin with, right?

As the old saying goes: _" It is better to shoot for the stars and miss than aim at the gutter and hit it"_. Or another take on it: _" Shoot for the moon. Even if you miss, you'll land among the stars."_

So yeah, tell your kids to dream big and work hard. They'll probably go further than if you tell them "life sucks, you have no chance, so just go ahead and do nothing but play video games and smoke weed all day".

<comment><USER3> "As the old saying goes: "It is better to shoot for the stars and miss than aim at the gutter and hit it". Or another take on it: "Shoot for the moon. Even if you miss, you'll land among the stars." "

These are fine. However, there is also the belief that all people who have reached the stars have worked hard or that people who haven't reached stars just haven't worked enough. These are wrong. Success is a combination of hard work and a good portion of luck. You most likely won't be successful if you don't work hard but if you don't succeed it's not necessarily because you haven't worked hard.

To me it's a call for successful people to be more compassionate with people who aren't successful.

<comment><USER4> So do you propose we give free scholarships, jobs, and tax breaks to those who end up unlucky?

I was unlucky and had medical problems in college. I deserve some relief. But I'm also a co-founder of a decent startup. Am I lucky or unlucky?

<comment><USER3> You were lucky and unlucky. You have probably worked hard but you may also have been co-founder of a bad startup and lost everything. Or you could have gone bankrupt because of medical bills.

You definitely should work hard but by no means there is a guarantee you will succeed. You also need some luck.

<comment><USER5> co-founder of a startup, I'd interpret that as he has nothing and he lives in the most expensive area in the world.

<comment><USER6> What makes you think that a startup can only be founded in SV?

</comment></comment></comment></comment></comment></comment><comment><USER7> There are two really big problems with this outlook. First if everyone achieves a high level education, the competition for high skilled jobs also goes up, making the higher education mean less and requiring further education to beat the crowd. This is something millennials are experiencing right now. Second, if employers take more risk and hire more people from underprivileged backgrounds, it just means that someone from a privileged background missed out on the job and just shifts the resentment from one group to the other. It doesn't really solve the fundamental problem.

Working hard will move you forward. How forward is hard to determine, and it varies. The reality is that some people in their lifetime won't achieve success but they lay the foundation for their children too...ex his mothers struggle to get from Africa to the UK laid the foundation for him to achieve his success. Their is little chance that he will become say the Prime Minister, but his children may...thanks to their dad being able to provide them with a privileged life.

<comment><USER8> The job market isn't static like that. If there are lots of highly educated people, there will be new jobs created to take advantage of their skills. There might be more competition or there might not be, and it's definitely not a linear correlation.

<comment><USER9> There is a lot more to entrepreneurship than a high education level. Young people are more educated than ever, yet small business creation is lower than ever[1]. A business requires startup capital, which is tough to gain when you must start your career in $40k-$100k in debt. The salaries of recent grads have been lower, too. Cost of living, especially in housing and medical expenses, is going up every year. With dwindling social stability and a hobbled ability to save, the only ones who can safely risk starting a business nowadays are those who already have capital.

[1] [https://www.washingtonpost.com/news/on-small- business/wp/201...](https://www.washingtonpost.com/news/on-small- business/wp/2015/02/12/the-decline-of-american-entrepreneurship-in-five- charts/)

<comment><USER10> Your first point depends on your definition of "educated." I'm unconvinced that young people are more educated than ever, because education includes broad critical/creative thinking. It's not cookbook mimicry bounded by a narrow set of choices in a common problem space.

It's the difference between "I made a new web framework" and Vannevar Bush or John von Neumann.

As for cost of debt - yes, it gets much harder to innovate when access to free capital is rationed. Rationing and hoarding capital is actually one of the dumbest things a capitalist culture can do. "Hard work" won't fix this.

</comment></comment></comment></comment><comment><USER11> One of my pet peeves is when someone takes issue with an oversimplification of something, but instead of dealing with the oversimplification, they keep the same level of oversimplification but assume that the opposite view must be true.

Just because something's not 100% true doesn't mean it's 0% true. In this case, a more appropriate level of granularity would be: "if you work hard, you are more likely to be successful than if you don't work hard." That kind of nuance doesn't really resonate with children though, which is why we don't tell them that.

Complaining that it's all a big lie is akin to someone growing up, realizing that there is no Santa living in the North Pole, and concluding that the North Pole must also be a lie.

</comment><comment><USER12> Quite so. Hard work will absolutely help you advance in your endeavors, but if your hard work advances others more than it advances you - which is true for an awful lot of people - then you are being used and when your utility is exhausted you will be cast aside without a second thought.

This argument is not, as some have claimed, an excuse for apathy. Rather, it argues that accepting the prevailing socioeconomic norms is foolish for anyone who is not close to the apex of society. The level playing field and other such political tropes are false, there is abundant evidence of this, and anyone who tells you otherwise either lying to you or to themselves.

</comment><comment><USER13> Is "the top" the goal? Shouldn't be for every child. Telling every child they can reach "the top" is a lie.

I grew up in a very poor part of the country, certainly bottom 5%. And eventually paid my own way through an Ivy League school... I would say that the lessons my dad taught me were solid.

1) It's important to work hard. You don't work hard to get ahead... you work hard so you are satisfied that you gave it your all. Take pride in your accomplishments -- however small. Work until you're happy with what you have done.

2) Be careful what you wish for -- what you choose to dedicate your life to doing is important, but know that luck plays a huge role. You can't count on luck, but you can be immensely thankful for it and humble accepting it.

3) The world is yours to make what you will out of it. You're the only one who can determine what is right for you. Nobody is better than you are, but you're no better than anyone else -- stand up for yourself, and be kind to those you run into along the way.

</comment><comment><USER14> > What I have learned in this short period of time is that the pervasive > narrative of "if you work hard you will get on" is a complete myth. It's not > true and we need stop saying it. This is because "working hard, and doing > the right thing" barely gets you to the starting line

The author misses the point. It's true that _only_ saying "if you work hard you will get on" is not enough. But it's only half the picture - working hard will only get you somewhere - the starting line. Then you need to continue and improve and adapt. Whether it's worth that time and effort is another question.

But simply accepting a half truth as a whole and ignoring the whole picture is harmful "It's not true and we need stop saying it." is the completely wrong thing to say. Better: "it's not the only thing that counts, and we need to give tell our children what they really need to do"

<comment><USER15> I suggest you read the end of that paragraph, because he ends it by saying essentially what you said he missed.

> _So much more is required_.

While he does not explicitly state what is required, he is obviously saying that we need to stop using that statement alone.

</comment></comment><comment><USER16> "The harder I work the luckier I get." comes to mind.

<comment><USER12> People in coal mines work pretty hard. Are they getting luckier, do you think? This is an absolutely great maxim for people who are fortunate or wise enough to be working on developing their own abilities and position. For the majority of people who are working hard to get paid to pay bills to have life's necessities, but don't have much energy or idea what to do beyond that, it's a cruel joke.

<comment><USER17> I don't know about elsewhere, but here in Australia, miners get to use heavy equipment to do what used to be back-breaking labour, and salaries tend to start at twice the national median. Modern miners are _not_ the poorest-of- the-poor picture of yesteryear.

<comment><USER12> Brilliant evasion of the point there

<comment><USER17> I was just suggesting you update your mental image of coal miners from the 1950s to the 21st century.

I remember one politician here a couple of years ago defending miners in his electorate as 'battlers' (aussie slang for poor who are trying to make ends meet)... and at a time when the national median wage was $57k and median household income was $77k, the 'battler' he was defending made $110k...

<comment><USER12> It's not so much that I have a particular image of coal miners as people still do the more traditional back breaking labor sort of coal mining in the country where I live. The point is that people do heavy manual labor and it doesn't necessarily advance their economic interests, not to comment on the state of the coal industry in 2017.

</comment></comment></comment></comment></comment></comment><comment><USER17> The title doesn't match the content ("gets you to the top" versus "get on in life") and makes the mistake that the only way to consider yourself a success is to become upper-middle class. It is wrong to teach all underprivileged youth that the only thing standing between them and their own professional practice is working hard, but it's not wrong to teach them that a good work ethic will make other things in their life easier.

</comment><comment><USER18> Telling children 'hard work won't get you to the top' is simply a lie, also. Success has an endless number of variables and they are all weighted differently for every individual. Fact is, your work ethic is a variable you control - Teaching children that is important.

Alas, teaching children (and adults) they're but one of a larger group of victims is, and will always be, a political juggernaut.

</comment><comment><USER19> If there are equal outcomes, then we have succeeded at creating equal opportunity. Not as individuals; but statistically.

Individually preferences, choices, dumb luck, etc. of course would lead to unequal outcomes -- as it should be. But when taken as a whole, those differences should disappear.

It is an ideal, but I like it because it is a measurable ideal.

</comment><comment><USER20> I don't think I've ever heard anyone tell their children "hard work gets you to the top". I believe what is actually more often said is "if you don't work hard, you won't get to the top". Subtle, but crucial difference.

</comment><comment><USER21> I think the more important insight is that what you work on is as important as how hard you work. This is especially true in today's world of automation, where things that took one person literally a year can now be done by machines in a few hours.

</comment><comment><USER22> Interesting to compare and contrast American and European attitudes toward social mobility [1].

Apparently Americans are far more likely than Europeans to believe that hard work gets you to the top.

However, these expectations are apparently quite divorced from reality. Apparently hard work is far more likely to get you to the top in Europe (especially continental Europe) than in the US.

[1] [https://en.m.wikipedia.org/wiki/Socio- economic_mobility_in_t...](https://en.m.wikipedia.org/wiki/Socio- economic_mobility_in_the_United_States)

<comment><USER5> Depends where you are.

Europe and USA are large continents, comprised of many environments and sub cultures.

</comment></comment><comment><USER23> What's needed is tons of hard work on exactly the right thing at the right time, or some half-assed work on a different kind of right thing at the right time.

</comment><comment><USER24> What I tell my kids is that among the behaviors that contribute to success, the one the makes the most impact is working hard.

Luck matters, intelligence matters, natural skill matters, social circumstances matter, but hard work matters more.

You can be blessed with all of those behaviors and still fail, but hard work moves the odds in your favor more than the others.

</comment><comment><USER25> Inculcating a culture of work ethic into the majority of the population produces a surplus that may then be extracted and utilized by a specific class of people who do not wish to work hard.

 _Arbeit macht frei._

As far as I am aware, every human culture has always demanded more work than strictly necessary from the working class in order to support a relatively small proportion of non-workers or light workers. At the band/tribe level, that is generally very young children and very old elders. Larger organization units tended to reserve some of the light work and non-work for administrators and enforcers. For a while, we have had concepts such as "education" and "retirement" that take the place of child labor and dying at your workstation, made possible by improvements in productivity in the working class.

So for those whose hands never acquired a callus, it has long been necessary that other people do harder work. Indeed, we even had more odious lies, such as "you must work hard, because you are my property," or "work hard, or you will be removed, and your family will starve."

Sometimes, the promise of promotion was not a lie. The very best of the hard workers were elevated to encourage the others, but never quite far enough that they might question _what is really done_ with all that hard work.

We have robots and power generators now. None of us can work harder, faster, or more cheaply than a fully automated factory running on raw materials and electricity. The former economic necessities are no longer required. But no one is prepared to come out and say "no one really needs to work hard any more, and you will only be able to reach the top by owning the most productive capital" because there are so many people out there who have been toeing that line their whole lives, working hard without reaching even a local maximum. The economy isn't _entirely_ automated--not yet--and we still collectively need _some_ people to work. No one wants to be the one chump in ten that has to bust their ass every day while everyone else just lies around goofing off.

So we have the "bullshit job" phenomenon, to distribute and obfuscate who is doing all the actual work, making the other 9 put up the appearance of work for the sake of the one still actually doing the critical labor, or dividing up the work so that 10 people each do 10% of a real job and 90% flimflammery.

What we should be telling the kids is " _own_ something now, before it is too late."

</comment><comment><USER26> The most common way to get to the top is being born at the top.

<comment><USER27> That's true -- but the top is a harder place to stay at than you think. China, the West, and the Middle East all have variations of "from shirtsleeves to shirtsleeves in three generations"; most fortunes don't last past the grandchildren of the people who earned them -- and this was even true under feudalism, where new titles had to be continually granted, and the fourth generation after the man who was first granted arms was hardly ever armigerous, if it existed at all.

The few who make it past the third generation, generally continue on indefinitely (the Roosevelts, who bought a 40-acre farm on Manhattan Island in the 1600s and still own it today, should come to mind; likewise the Rothschilds and Rockefellers in more recent times); but getting over that three-generation hurdle is a formidable task.

</comment></comment><comment><USER28> I somewhat agree with the premise, but then I read "going home to a bedroom which you share with many other siblings" Yes, surely sharing a room with your brother and sister hampers your chances of success (sarcasm). Did he mean a cramped room? Even so, I don't agree.

There is no guarantee for anything in life, it's an absolute certainty that you will get nothing without some semblence of hard work.

</comment><comment><USER29> Who's telling children hard work will get them to the TOP?

I thought we tell children that hard work pays off and is more likely to get you into a better position than being a slacker.

</comment><comment><USER30> Logic 101: (A => B) != (B => A)

I don't know when it became OK to use these logical fallacies online to support propaganda.

I also don't know at which point even the people with above average intelligence (AND definitely know about what a logical fallacy is) decided that they will pretend it suddenly doesn't exist.

Lastly, I don't know why the HN readers who I'm sure know ALL about all this AND even more end up going all groundhog day and have the same battle every time this type of article comes up.</comment>


List of Mac OS X Keyboard Shortcuts & Keystrokes - <AUTHOR> http://www.danrodney.com/mac/ <comment><USER2> Or... Just get Keycue. It pops up the keyboard shortcuts that are available in any application, or in OS X.

<http://www.ergonis.com/products/keycue/></comment>


Can Users Control and Understand a UI Driven by Machine Learning? - <AUTHOR> https://www.nngroup.com/articles/machine-learning-ux/ <comment><USER2> If the system is up front about what the inputs are then I think most of the problems evaporate. The user doesn't need to understand the math behind how 0-5 star ratings get translated into movie suggestions, if the user understands that the star rating is the input and not dumb implicit stuff like dwell time, then the user will have a more agreeable experience with the system.

I've recently created a system for assigning tags to files. The system recommends tags that might be applicable to a file given what the file is already tagged with and what other files are tagged with. There are no other inputs, I'm not trying to extract information from the filename or running image recognition on images or anything like that. It's straight forward multi-label classification similar to a naive bayes spam filter. Straight forward but effective; the relevant tags are often at the very top of the suggestions list.

I've had a few non-technical users try it out and so far the response has been very positive. They don't know how the tag suggester works. All I told them is that when they enter a tag, the suggestions for other tags are refined. If all they know about the algorithm is what inputs it takes, they're comfortable with it. If the inputs are well defined, then the whole thing becomes "just a machine". Similar to how a non-technical user doesn't need to understand how magnetrons work to be comfortable with microwaving some popcorn, a user doesn't need to know how machine learning works to be comfortable with a program employing it. Just make sure they understand the general relationship between the buttons on the front and what the outcome is going to be.

Don't make a microwave that tries to be clever by turning up the power if the user is standing impatiently in front of it. If you do that, the users will start to get paranoid/superstitious about the microwave (and rightfully so!)

</comment><comment><USER3> This is a cool topic, but the examples - FB feed, Netflix, etc. - don't really apply. Those systems aren't trying to maximize user control, they are trying to sustain engagement while giving as much control back to the platform as possible. I'd like to see more work on ML driven UI that is specifically trying to enable user -driven intent.

<comment><USER2> That's a good distinction; those systems are fundamentally adversarial and I think a lot of users pick up on that, at least unconsciously. Many of the ways users interact with these systems could be described as defensive.

</comment></comment><comment><USER4> The article talks about how the problem is users don't know how to change the inputs to effect the outputs but I don't think this is really desirable. Users shouldn't be thinking "If I hover my mouse over this for too long then it will stuff up my suggestions" that ends up with users altering their behaviour to suit the AI when the AI should just give you correct suggestions without the user having to understand how it works.

<comment><USER5> That's a great ideal, but the technology just isn't there.

With any system that tries to adapt to my preferences, I find myself thinking constantly about how my behaviour will influence it. I'm careful about what I upvote, I try to avoid pausing scrolling on uninteresting things, I even avoid reading articles which I don't want to see more of, even if I find the article itself interesting (remember that users are not necessarily logical - e.g. I don't wait clickbait even though I'm just as drawn as anyone else by the titles).

I would happily trade all of that mental load for a couple of buttons after each item "more like this" or "less like this" and a guarantee that nothing else affected the algorithm. No advance in the last ten years has changed my mind about that, and my hopes aren't high for the next ten doing so either.

I think there's a case to be made that even hard AI wouldn't be sufficient to solve the problem. When my bank manager suggests a product to me, I'm doing the same thing - wondering "why are you suggesting this to me, what's motivating this?". I still want inputs and reasoning exposed, not merely for the answer to be, on reflection, correct.

</comment></comment><comment><USER6> For those like me who expected this to be an article about ML-generated UI layouts, this is not the case.

</comment><comment><USER7> I argue that pie menus are much easier for users to operate, understand how they work (selection base purely on the direction between clicks, not the path), and predict how they will respond, and thus trust, than general gesture recognition (often implemented with a black box based on machine learning). Because the pie menu gesture recognition algorithm is obvious, transparent, and Fitts' Law friendly.

Pie menus completely saturate all of "gesture space" with valid easy to distinguish gestures of uniform and high area. But gesture recognition systems like Palm's Graffiti only uses a small subset of all possible gestures, each with different areas and distances from each other (i.e. how easy is it to make each gesture and how distinct each gesture is varies), and most gestures are invalid. There are no possible invalid pie menus gestures -- they all map to well defined selections, so no gesture space is wasted.

Ideally each gesture should have a large area in "gesture space" so it's easy to make, and be as distinct (well separated) from other gestures as possible, so it's harder to make mistakes (like confusing an "n" with a "u"). Pie menus optimize for those ideals. It's also extremely useful that you can correct mistakes in-flight (i.e. reselection, browsing, moving out further to get more "leverage"), so no matter how much you mess up the gesture, you can always correct your mistake and refine your selection.

Once you start writing a sloppy "n" and realize that it may think you're writing a "u", there's no way to correct your mistake, and all you can do is scribble to make sure you input an invalid gesture that's ignored (and hope it isn't mistaken for the "delete all" gesture!), then try again.

[https://medium.com/@donhopkins/gesture- space-842e3cdc7102](https://medium.com/@donhopkins/gesture-space-842e3cdc7102)

</comment><comment><USER8> Preference is mostly social. A good recommendation system would need to feel more like a friend than an algorithm. Not only does it need to understand your preferences, it needs to convince you that it understands "where you're coming from" in general so you can relax and be honest with it. And even if that can be achieved technology-wise, how could you comfortably accept an AI system as your friend if its being "controlled" on the back end by a whole organization of people you don't know? There's more than just tech missing from this equation.

</comment><comment><USER9> Ugh, I accidently watched a skateboarding video on facebook about a month agi. Now my feed is full of skating videos and I can't figure out how to tell facebook to calm down with skating videos and adverts

</comment><comment><USER10> should have swallowed the drive</comment>


$10,000 invested in Bitcoin 6 years ago is worth over $38M today [chart] - <AUTHOR> http://nader.io/2017/01/09/10000-invested-bitcoin-6-years-ago-worth-38-million-today/ <comment><USER2> This is great if you want a speculative investment. As a replacement for cash? Not so much.</comment>


Mustry - Are you an early adopter? - <AUTHOR> http://www.mustry.co/ Find out NOW! <comment><USER2> annoying geek captcha -- early adopters don't use Yahoo! mail ...

<comment><USER3> Yeah, I totally agree. Early adopters would have gotten an invite to Gmail when it was still in Beta</comment></comment>


Python Enums on Crack, Part II - <AUTHOR> http://www.acooke.org/cute/PythonEnum0.html

<comment><USER2> Here's one of the main discussion threads from python-ideas about adding enums:

[https://groups.google.com/forum/?fromgroups=#!searchin/pytho...](https://groups.google.com/forum/?fromgroups=#!searchin/python- ideas/enum/python-ideas/OfG-Q0SBgxU/25DDOAx-Ni0J)

It goes into a lot of detail about why it's so hard for an enum type to be all things for all people.</comment>


Try Linux - <AUTHOR> https://www.trylinux.today/ <comment><USER2> I think too many distributions is part of the problem. Especially starting out, you don't really know/understand what the difference is between each other. You just want something that works for your case and skill level.

I wouldn't put all these options together, but rather focus on a few distributions that are easy to setup and work well. If we want ppl to move to linux, we should focus on them. Present them with a few options that work really well, with guides on how to start up coming from windows/mac and solving their problems. Just presenting a list of options doesn't make the decision easier.

Personally, I'm using Pop_OS! because its easy to setup, works well on laptops, gets out of your way, and its more or less Ubuntu underneath, so its much easier to find software and help for it. But the distribution that really converted me over was Manjaro

<comment><USER3> Too many distributions is also part of a bigger problem and why there will never be a "year of the Linux desktop". We are looking at insane amounts of developer & administrative resources being wasted by every doing mostly the same thing in a slightly different way. Imagine the progress that could be made if all of this workforce was actually united and was working on _one_ (or a handful, think server/workstation/tablet editions) good distribution.

<comment><USER4> This is one of the core points of the "Linux Sucks" series of presentations [1]. If you haven't seen any of them, I think a TLDR might be "technology is not holding the linux desktop back; lack of cooperation and other social issues are". And though slightly different and about about a separate domain, I think "The Lisp Curse" [2] has a similar thesis as to why lisp is not mainstream.

The linux kernel is a huge success because there is exactly one kernel and its monolithic architecture ensures that the only way to accomplish anything is to cooperate with everyone else so you can get your thing added in. If you want to do your own thing, that's fine, but it will never be a part of linux.

If the linux kernel had a micro kernel design, with different competing projects for the different layers of the kernel, the linux kernel would not be the success it is today. It would be a niche tool, like the linux desktop. In linux userland, the plethora of distributions, GUI toolkits, desktop environments, init systems, applications and so on ensures that none of the projects can ever succeed.

1\. [https://www.youtube.com/watch?v=QKwWPQ1Orzs](https://www.youtube.com/watch?v=QKwWPQ1Orzs)

2\. [http://winestockwebdesign.com/Essays/Lisp_Curse.html](http://winestockwebdesign.com/Essays/Lisp_Curse.html)

</comment></comment></comment><comment><USER5> After being Linux exclusive on my personal laptop(s) for over a decade, I just went back to Windows + WSL 2.

With WSL 2, there's very little reason to use Linux desktop any more. The windows cleartype, touchpad driver and sleep work a lot better while giving you a regular Linux environment and you don't have to dual boot to get Office and creative software

<comment><USER6> > With WSL 2, there's very little reason to use Linux desktop any more.

My personal reasons to stick to Linux:

\- my DE is fully keyboard-driven (Windows is mouse-centric to be point of being unusable to me)

\- better support for complex networking (NAT, multiple route tables/VRFs/netnses, etc - just last week I had to run my entire network uplink through USB tethering, which was a breeze on Linux)

\- system update when I want it, zero system-mandated reboots

\- easy debuggability of software failures (Windows, when fails, is a black box and your only option to fix things is to enter black magic commands from random forum threads - without possibility of actually understanding what failed, looking at source code, etc)

\- no feeling of always fighting against malicious, privacy-disrespecting software (it's not that I can't disable ads and tracking, but I really don't want to have to do that)

<comment><USER7> > Windows is mouse-centric to be point of being unusable to me

I find that very relateable. I have gotten used to doing everything with my keyboard and windows just doesn't allow that to the same extent.

<comment><USER8> Can you give some examples? I've found it to be pretty good with the basic stuff like switching applications or workspaces, snapping windows to the left or right half of the screen, opening and closing arbitrary things. I can think of some ways I'd like it to be better though, like making the left/right halves arbitrary sizes with the keyboard.

<comment><USER7> I have yet to figure out how I can quickly move one window to another workspace in windows. Under mint, I just do Ctrl+Alt+Sfit+H/L to move a window to the previous or next workspace. I also have Windows+T mapped to open a terminal, which I do everything in these days.

<comment><USER9> ALT-TAB doesn't do what you want?

</comment></comment></comment></comment></comment></comment><comment><USER10> I've personally switched to using Ubuntu 20.04 on my desktop, and honestly the switch has been uninteresting - which is a good thing. Works perfectly as a software engineering environment.

I know it has been controversial in the Linux community and among long-term Ubuntu users, but Snaps are what made my switch relatively painless. Everything I need on my daily driver (Firefox, VSCode, Slack, Spotify...) is just there waiting for me. Don't need to fuss around with a package manager, third-party repositories etc.

I am not completely Linux however, I still maintain my MacBook Pro for on-the- go work and an iPad down-time/multimedia purposes.

</comment><comment><USER11> Interesting page but maybe overwhelming to newbies. How is a beginner going to select a distribution from that huge list? choosing 'beginner' distros still leaves you with a long list of options, and no other easy means of comparing between them.

Let alone how to figure out which desktop environment to choose from...

<comment><USER12> IMHO a beginner has very few choicie. He should choose ubuntu. Fedora is about as good as ubuntu for beginners, but it is more difficult to find other users to get help. A beginner may choose fedora if he is using redhat at work and could get some directions from IT staff. The variants of ubuntu introduce some confusion and do not give much benefit in return. The other distributions do not fit beginners (either lack of polish or lack of users or both).

<comment><USER7> I think Mint is a better choice than ubuntu; out of the box it resembles windows, with a menu button in the lower left corner and a window list in the bottom.

</comment></comment></comment><comment><USER13> Well - all the options are part of the problem. I use Pop!_OS because it was the balance between getting things done and spending hours tinkering with my machine.

It's not that I don't enjoy it. It's just a question of where I need to be spending my time.

<comment><USER14> I've tried many different distros (Ubuntu, Arch, Fedora, OpenSUSE, etc) and I actually find it much harder to get things done with Ubuntu or Debian than I do Arch or other lightweight distros like Alpine. The reason is that I often have to (or want to) do things that aren't supported by Debian or Ubuntu because it either requires using very new versions of software or it requires modifying a bunch of system configuration files. When you try to do that on Debian/Ubuntu you'll quickly run into problems because you're doing something outside what they expect you to do. Everything is hidden behind a big layer of abstraction (like a maze of symlinks and custom patches, etc).

So, you may find things like Pop! easier to get things done with because you're ok staying within the realm of what they support, but once you try to do something outside that, I guarantee you will quickly get very frustrated.

<comment><USER7> That's usually a slow transition though. I started out using linux mint a few years ago and since then I've gotten annoyed more than once at the way things are structured. What I've ended up with a "One box, two systems" aproach, where I do most stuff "the ubuntu way", but compile certain software from source and install it however I want it. The separation of `/usr` and `/usr/local` that's already common on Linux makes this work very well.

</comment></comment></comment><comment><USER15> _Unlike Windows and MacOS Linux gives you options_

I'd rather say Linux gives you choices. Choices that you have to make, rather than options with (sensible) defaults. This is a big reason for why I've been unable to switch from macos to Linux as a daily driver every time I've tried in the past ten years.

Ironically, it's simply too costly. Macos has been degrading over the past 6-7 years, but it's still pretty good at standing out the way.

I'm gladly proven wrong if you can point at a path I've missed.

<comment><USER16> One of the "options" is Ubuntu. Looks like a sensible "default" to me. Just works. Stays out of your way.

<comment><USER17> Until you upgrade the kernel and your wifi stops working. Or the desktop stops loading and you have to spend time going through logs and googling what's broken this time. Or when you plug it to a secondary screen and it freezes. This happened when I was a desktop Linux user and this still happens (less frequently nowadays though). I'm mainly talking about Ubuntu which is supposed to be beginner-friendly and not some obscure distro.

When I was younger I was very happy to deal with these issues because I learned a lot and probably made me the professional I am nowadays. Over time however I realized much of this knowledge doesn't contribute to my day-to-day work anymore and it's just an annoyance - I now want to turn on my laptop and work right away.

<comment><USER18> If you want to run linux, buy from a manufacturer with decent linux support. In my experience, all my dell laptops worked seamlessly with linux. No driver hackery required. WiFi never stopped working. However, HP seemed to have very poor support for linux, and you need to install drivers for WiFi manually, which need to be recompiled on each kernel upgrade.

</comment></comment></comment></comment><comment><USER19> Don't understand why Debian would be listed as "Intermediate", while Ubuntu is listed as "Beginner". IMHO lots of problems just vanish once you switch from Ubuntu to Debian …

<comment><USER20> Except for the problem of out of date software... :)

<comment><USER21> Maybe on Stable. Sometimes. Not so much on Testing.

<comment><USER22> One is forced to wonder why they must choose between "stable" and "up to date" at an OS level.

<comment><USER23> For the same reasons that production, staging, and dev environments are standard.

<comment><USER22> Outside of Linux Desktop, the operating system and applications are considered separate beasts, so you're able to have a stable OS and a mix of stable/up-to- date applications as you see fit.

The package manager/distro model that Linux employs only ever seems to give you the choice of one or the other, because it doesn't have a clear differentiation between "OS" and "application".

</comment></comment></comment></comment></comment></comment><comment><USER24> >> While it may seem overwhelming to see all your OS options on Linux, you may instead find it comforting

This is probably less common on HN, but I already have so many technology decisions to make, I don't really want to continually experiment with my OS. I just want it to disappear into the background, not be the star (or even really a conscious thought)

EDIT: huh, I added this comment when I saw no others, but it turns out my reaction isn't too uncommon, considering the audience here.

Too clarify, there are lots of situations where the OS should be a real first class concern, I'm just not convinced we'll ever get much traction at the general user PC level.

<comment><USER25> It's not only you.

I wonder what the target group for this page is. Obviously not the main mass of people who use Windows today because if they'd be forced to chose, they'd probably take the first on the top left. If they won't be forced, they'd leave the page right away because it doesn't say why they SHOULD change.

The rest of people probably knows already about linux and don't get any relevant information from this...

</comment></comment><comment><USER26> Once you get bored with a regular distribution you can go and try Linux from Scratch.

Me, personally, this was the tool that really introduced me to Linux OS. Understanding how everything is put together and how it bootstraps will make you a better user of whatever distro you choose in the end. (No, don't use LFS on your workstation.)

<comment><USER27> I enjoy arch for the same reasons, but I am not familiar with Linux from Scratch.

you say not to use it on your workstation -- is it more of an tutorial than a distro?

<comment><USER3> LFS wouldn't have a package manager (as far as I know) so it would be an insane amount of effort to keep all the software up to date (by recompiling everything manually).

Arch is actually a nice middle-ground. It's got a lot of learning potential (you still build the system from scratch by installing everything manually and creating the right files and mount points - there is no installer) but it's not as tedious as LFS and can actually be usable day to day (spend years on Arch before moving to proprietary OSes).

<comment><USER26> I would add that the last time I used LFS was almost 20 years ago. I don't know if the procedure got more complex. From what I skimmed it looks manageable (I guess that's the whole point).

The reason for not using LFS would actually be security. It is possible to just install whatever you want and then use it for a long time (akin to LTS Ubuntu distribution). But you still need to somehow notice there are critical security updates and you definitely don't want to miss them.

Another reason is that distro developers create a huge amount of convenient mechanisms and choices for the users.

As an example, getting software X to work might not be a problem, but getting X to work along Y and Z when they might have conflicting dependencies might already be a headache. Distro developers will ensure various dependencies are tested and make sense together. If you install something on Gentoo (sorry, I don't have experience with Arch) and it doesn't work, there is a good chance it is possible to make it work and you can Google the solution. When you install something on LFS and it doesn't work you are pretty much on your own.

</comment></comment></comment></comment><comment><USER28> Kernel has been ready for prime time for ages now. It's the distros - fragmentation and quality - that's still the problem.

</comment><comment><USER29> What people don't seem to realize is that an increase of popularity of Linux will lead to a tragedy of the commons situation. Desktop Linux currently is mature enough to be usable for most everyday tasks, but has a small enough market share to generally not fall prey to adware, spyware, malware, telemetry, backdoors, EEE type strategies, closed source blobs creeping into the ecosystem and so forth. As its market share increases, the more viable a target it becomes for such things.

<comment><USER30> Desktop Linux in general seem to have a very large amount of probable vulnerabilities, but it also has a very large community of companies that sponsor work and rely on it for servers.

Would be interesting to see how quickly an open back-door is fixed after it's discovered. Is the maintainer available? If not, can the package be replaced? Will it be vulnerable for months, years? So many uncertainties make me not want to rely on Desktop Linux for sensitive work.

<comment> em-bee from my past experience, faster than on windows or mac. the application maintainers need not be available. the distribution maintainers can step in and apply fixes to the versions they distribute.

if a 3rd party windows application has a security issue, good luck getting any fixes.

</comment></comment></comment><comment><USER31> So I tried the linux thing off and on for about 6 years. After sun os, unixware, solaris, HP/UX, irix, bsd/freebsd, macOS, windows 3.1, 95, 98, NT and so on.

The issue is every time I buy hardware (primarily laptops) there was a lot of research in to the components and the quality.

I kept finding myself going back to OSX. It was just easier to in many many ways.

But now OSX is bloated nagware.

</comment><comment><USER32> I'd. Really. But every time there is a problem (and usually I have more problems than under Windows or MacOS) I have to search forums and obscure blogs for hours and tinkering in the terminal while praying to not break something else too. Maybe I'm just too "casual" for the Linux experience.

<comment><USER33> It can be annoying to have to chase down help for Linux problems, but nothing is worse than trying to Google issues with Windows. Recently I spent a couple hours trying to figure out how to get Windows Firewall to log dropped packets, and never did get it to work. On Linux, its a single command to the firewall frontend I use, and documented clearly in the relatively concise documentation.

</comment></comment><comment><USER34> The problem is not enough people trying Linux. The problem is that it is not compelling for non-geeks or non-free software activists. Mainstream users don't have problems that Linux solves. If anything, it adds problems.

</comment><comment><USER35> Of all the Linux distros out there, the one that calls to me the most is NixOS.

Do people use NixOS as their main OS? Does it have a "default desktop flavour", like Ubuntu does? (the manual seems to suggest XFCE - [https://nixos.org/nixos/manual/index.html#sec- xfce](https://nixos.org/nixos/manual/index.html#sec-xfce))

<comment><USER36> I do. When I installed it the default configuration had no desktop enabled but had commented-out lines to enable KDE. I think it's best to think of it as not having a default or preferred one, and you are instead required to pick one.

(I haven't tried everything, so I don't have firsthand knowledge that they all work equally smoothly.)

<comment><USER35> That's good to know, thanks for answering.

> not having a default or preferred one, and you are instead required to pick > one.

If you don't mind my asking: how well did NixOS work for you, as a desktop environment, out of the box? Did you have to do annoying IT work when you installed it (screen resolution, wifi, sound, maintenance mode...)? How often do you need to fix issues like that?

<comment><USER36> Nothing related to screen resolution. Wifi worked via the command-line tools mentioned in the manual, or the KDE interface. Similar for other things. I didn't stick with KDE--I switched to sway--so there were a number of things to deal with because of that, but that won't matter if you do use one.

If you do encounter an issue it will be more work to deal with, because you both have to figure out the underlying issue and then figure out how to fit that into the Nix way of doing things.

The biggest factor is handling downloaded pre-built binaries that assume various libraries will be in typical locations. Those generally require patchelf and then they work fine. I would only recommend NixOS for now for people who are willing to tinker a bit and learn how it works.

</comment></comment></comment></comment><comment><USER37> See your "advanced"; raise you [http://linuxfromscratch.org/](http://linuxfromscratch.org/)

Which isn't a great idea for any business scenario, much less, personal productivity context.

However, if you want to level up in your Linux-fu, it cannot be recommend highly enough.

</comment><comment><USER38> openSUSE "intermediate"? Huh? I've been using openSUSE for the past ~5 years. Sure enough, the repos are not as rich as the popular distros but everything always works out of the box, including proprietary software(which can be a nightmare even on mainstream distros).

<comment><USER39> And YAST makes system administration easier than any other distro. I would certainly set it as beginner.

</comment></comment><comment><USER40> Ah exactly what I was looking for — a quick summary of the specificities/main features of each distribution. Thank you! I'm considering running one of these in a VM to play with Linux again. The last time was elementary OS on a Chromebook and I really enjoyed that.

</comment><comment><USER41> Don't be thinking there's only 30 of em:

      https://distrowatch.com/

</comment><comment><USER42> This website shows the exact reason I don't use Linux out of virtual machines. In terms of desktop, there are so much whatever from whoever and they are all broken horribly that it's not even a joke anymore.

Unlike Windows and MacOS Linux gives you options. That is the exact reason why I don't use Linux in desktop.

</comment><comment><USER43> Cars and computers:

"You can have any color you like, so long as it's black." = "Too many distributions"

But look outside. What do you see? One size and color of motor vehicle? Definitely not. There are multiple brands of cars, there are multiple brands of trucks. There are multiple body shapes, there are multiple different seating capacities, there are multiple colors, there are multiple 'add-on' options.

Somehow we never say "There are too many different cars available". Why not?

It's time we got over the denigration of Linux. It's time we got over putting Linux on a pedestal.

Linux is Linux. Select what flavor you want.

Windows is Windows. Some people prefer it.

MacOS is MacOS. Some other people prefer that.

Who cares what other people want and use? As long as YOU are happy with what _car_ you drive, or what _computer OS_ you drive, it's nobody's business but yours. And it's no business of yours what the next guy chooses.

</comment><comment><USER44> Desktop Linux will stay in the hobbyist domain forever if so much effort is spent on polishing separate "options" i.e. Distributions, window managers etc. when fixing the tools used by most users would be more important.

Are the differences between package managers and keeping them really so important that it's not possible to do everyone a favour and agree on using just the best one? Sure, it's nice to have "options" but as the decades fly by, people seem to use that mostly as an excuse for still not having a user- friendly desktop Linux.

<comment><USER33> > fixing the tools used by most users would be more important

This supposes that said tools are broken, which doesnt match my experience at all. Sure, there are obscure bugs in all software, but major issues are rare. If by fixing, you mean "I want tool A to be more like tool B", that's just a matter of opinion, and I personally find the relative abundance of opinionated software on Linux to be a benefit, not a hindrance.

> do everyone a favour and agree on using just the best one

Trying to decide on the "one best tool" and dumping the rest and is like trying to pick the "one best programming language" and dumping the rest.

</comment></comment><comment><USER45> Has anyone had success doing mobile development on linux? Thanks to XCode it seems it's a no-go for a lot of mobile developers.

<comment><USER46> I do this for Android. Works like a charm.

</comment></comment><comment><USER47> linux evangalism is counter productive. In each of these threads, all the mac/windows people will come out of the woodworks and talk about how if only linux did xyz better, they would switch. Unfortunately, it doesn't, so they can't. Nobody learns anything new. The cycle repeats even if xyz is solved later with some new xyz. And in my experience, you cannot "convert" people to linux except for people who really are a blank slate (young and old people fit in this bucket, but average people do not). They have too much baggage, and nobody wins. People need to discover their own things.

</comment><comment><USER48> Why is Debian intermediate and ubuntu beginner?

<comment> em-bee because ubuntu provides a more polished desktop experience. as does fedora. at least that was the case in the past. i using debian for decades on servers, but haven't used it on desktops for a while now.

</comment></comment><comment><USER49> This whole page is basically insulting the intelligence of users.

> It's about time you try Linux

implying that while you did have heard of Linux, you misjudged it.

> Unlike Windows and MacOS Linux gives you options

This is factually wrong, anyone knows that both Windows and macOS give you a lot of options.

> The major operating systems put their users in a box, while Linux allows you > to choose an OS that fits your needs and skill level.

implying that you can't run macOS or Windows by choice. No, obviously zombie Steve Jobs forced you to buy a Mac for a lot of money.

> and "free" here refers not to the cost of the software but to its liberty—as > no one entity owns the software it essentially belongs to everyone, without > restriction

This is factually wrong but okay, copyright law is a complicated thing and it wouldn't make much sense to discuss that here.

> So, in part, making the switch to Linux is an ethical decision about the > software you use on a daily basis, and the rights you and others have to the > information and things you use.

implying that if I choose to buy a software for money to support its developers because I think they're doing a good job, this is somehow unethical. Actually, there were no ethics discussed in the previous paragraph, so this is a conclusion without foundation.

> Most open source operating systems are completely free both in price & > licensing. There are typically no upfront fees, lengthy legal agreements, or > restrictive copyright protections.

Um, did they ever see the GNU GPL?

> Free software is developed completely transparently which means the source > code is out there in the open for anyone to look at. This means, if you > wanted to, you can have a meaningful influence over the software development > process.

That is not generally true. If you look for example at SQlite, you'll find that while this is a piece of free software used by millions, they generally don't accept patches or any other kind of influence.

> There are thousands of free software applications available to install > without the need to browse the web. All this software undergoes scrutinous > review before it reaches you, so you can find and use what you like with > confidence.

implying that either non-free software isn't reviewed or that somehow I should trust people I don't know that review free software, but not people I don't know that review non-free software.

> With LibreOffice, you can also open and edit any Word, Powerpoint, or Excel > files you may already have.

Anyone who ever tried opening a non-trivial Excel sheet with LibreOffice would disagree on that.

> On other platforms, the creative field is dominated by proprietary > applications, but there are several capable free and open source > alternatives.

… which also run on Windows and macOS.

\---

There are a lot of good arguments you can make in favor for Linux. This page totally botches it.

</comment><comment><USER50> _jokingly_

Oooh...! I _really_ want to... But Windows is getting so good! It is where I have my fluff and stuff.

I use it serverside, is that ok? I also own a MacBook which I use frequently, does that count a little?

<comment><USER24> not sure if you're joking, but windows (IMO) did get better up until Win 7, then took a couple of misteps and a big backwards step with win 10 trying to tie all the loose concepts together into a single OS. It's really too bad we couldn't have some of the under-the-hood improvements with a stripped back WIn 7 style UI and just leave it at that...

<comment><USER50> I completely agree with you. There are issues with Windows. But it is not terrible anymore.

I use windows as my desktop, it is convenient and pleasant. It works with my games and plays well with my devices.

I have been borderline crossing over to Linux Desktop for many years, but the user experience is not convincing me.

It is not that I haven't tried Linux on the Desktop, but only through virtualization - there is always so much configuration I need to set up in order to get up to a comfortable level, and then something changes or breaks.

I have a few headless Linux servers which is a joy to use and manage, but I do that from my Windows or MacOS computer usually.

I love how Windows and MacOS is starting to become more and more similar, makes synchronization of content and experiences much easier.

</comment></comment></comment><comment><USER34> I recommend trying OSes in this order:

\- iOS/iPadOS

\- Android

\- ChromeOS

\- MacOS

\- Windows

Only if none of these work would I recommend trying a Linux distribution. Even then I'd try a more modern OS like Fuchsia or seL4 first, just for kicks.</comment>


Microsoft details secret 'pocketable' Surface device in leaked email - <AUTHOR> https://www.theverge.com/2018/6/29/17518582/microsoft-surface-dual-screen-andromeda-device-pocketable <comment><USER2> Reminds me of a Nintendo DS or the old T-Mobile Sidekick

</comment><comment><USER3> Please oh please!</comment>


In defence of Objective-C - <AUTHOR> http://splinter.com.au/in-defence-of-objective-c <comment><USER2> Does Objective-C really need defending?

After doing a couple of projects with it I've found it to be a really beautiful language from a code formatting point of view.

The whole 'overly verbose' thing is probably just because you are encouraged to give your methods and arguments good _descriptive_ names, and often when you do need short variable names for some maths calculations or something it will be while inside a method block using good old C style anyway.

I don't know, it's flexible, (arguably) attractive and it runs fast.

Yay Objective-C! :)

<comment><AUTHOR> Wow - this is fantastic! I'm glad i submitted this now, just reading the comments here is very heartening. I was beginning to think i was the only guy in the world who liked obj-c :) (i work in a c#/java predominaated environment where most people troll me about obj-c all day!)

<comment><USER2> I'd always considered myself a C++ guy before picking up obj-C, but looking at the result I get from the two I'm finding I'm just a lot faster with obj-C.

Now I have no desire to incite a language flamewar (to each their own blub!), so I will leave it at that ;)

</comment></comment></comment><comment><USER3> _For example, to filter an array is lovely:_

      filteredArray = [allRecords filteredArrayUsingPredicate:
        [NSPredicate predicateWithFormat:@"someField == %d", someFieldFilterValue]];

A four-word name for _filter_ and filtering for equality by using a string formatting DSL are not really on my list of lovely things. I'm sure Objective-C does something well but this guy is not pointing it out.

<comment><USER4> Yeah, I found that line hideous - ridiculously unintuitive and hard to read compared to the equivalent in say, ruby.

Maybe the whole essay would have been better framed something like: "Objective C: not quite as bad as Java!"

<comment><USER5> Just curious, for comparison: what would the equivalent be in Ruby?

<comment><USER6>
        filteredArray = [allRecords filteredArrayUsingPredicate:
            [NSPredicate predicateWithFormat:@"someField == %d",   someFieldFilterValue]];

in ruby:

        all_records.select {|r| r.some_field == some_field_filter_value}

in clojure:

        (filter #(= % some-filter-value) all-records)

in haskell:

        filter (\someField -> x == someFilterValue) allRecords

<comment><USER7> Let's be fair, in Objective-C, this could be actually more like

      NSIndexSet *indicies = [allRecords indexesOfObjectsPassingTest:^ (id obj, NSUInteger idx, BOOL *stop) { return [obj someField] == someFieldFilterValue; }];
      filteredArray = [allRecords objectsAtIndexes:indicies];

rather than what the article had in mind.

EDIT: oh, someFieldFilterValue was an integer, wasn't it. Fixed.

</comment></comment></comment></comment></comment><comment><USER8> I don't think these are the real problems with Objective-C.

To quickly address this issues, before discussing the real problems: "Ugly" - get over it, "Verbose" - get over it, "Memory Management" - Obj-C memory management is in fact super simple as long as you follow some really simple rules, especially with ARC.

Now the real problems I have:

1\. Lots of unnecessary code. With the old runtime, you had to modify your code at four (!) places to introduce a new property in a class. With the new runtime, that has decreased to three, with ARC, to only 2, but that's still one more than what should really be necessary (@synthetize should go).

2\. The whole header file thing. I know that Obj-C is a descendant and strict superset of C but I still find separating header files from .m files somewhat tedious and unnecessary. This leads to

3\. Having to declare methods and properties before you use them. I mean, this is 2011, this shouldn't be necessary.

4\. The syntax for having "private" methods and properties is awkward even by Obj-C standards. Basically you have to create an anonymous category in the implementation file.

5\. Properties (with ARC) should default to strong for objects, assign for everything else.

6\. The [[X alloc] init] way to construct objects; I understand that from a theoretical point of view it's cool to separate allocation from initialisation but I've never ever needed to allocate an object with anything other than the alloc message.

7\. The debugger. GDB and Xcode are atrocious. Have a look at the C# debugger in Visual Studio; that's how a debugger should look like.

Overall, while a lot has been improved recently in Obj-C, my main gripes with the language all come from the facts that it's a C superset (which is also a massive advantage) and that it's an almost 30 years old language; the programming world was very different 30 years ago.

<comment><USER9> Very true, all of this would improve the language a lot. I have often thought about writing a language that does these kind of things and compiles to Obj-C.

Also, I would love to be able to do some kind of metaprogramming without resorting to strings.

<comment><USER10> I'm trying to do just that with a project I started a few days ago called Khaki. It's a bit of a learning exercise and quite early, but you might find it useful in a month or two.

<https://github.com/dominikhofmann/khaki>

</comment></comment></comment><comment><USER11> There is one thing in Objective-C that still gets my goat, even after 8 years of working with it: it's the lack of syntax for container-types:

[NSMutableDictionary dictionaryWithConstructorIDontWantToType:...]

is just a huge pain in the ass. Other problems with the syntax have been solved by introducing sugar at the right place. Why not

      id hash=@{ @"key" : @"value };

and

      id array=@[ @"value1", @"value2", @"value3"];

<comment><USER12> Can't get rid of the issue completely, but at least we can have:

#define MD(val, key, vals...) [NSMutableDictionary dictionaryWithObjectsAndKeys:val, key, ## vals , nil]

then do:

NSMutableDictionary* dict = MD(@"value1", @"key1", @"value2", @"key2")

And so on. Courtesy of <http://news.ycombinator.com/item?id=1789839>.

<comment><USER13> That _## vals_ syntax is new to me. What's the difference with the following?

      #define MD(...) [NSMutableDictionary dictionaryWithObjectsAndKeys:__VA_ARGS__, nil]

<comment><USER12> Both of them wouldn't work for MD() due to the trailing nil.

But for MD(val, key, vals...), it'd give you a slightly better error, complaining about the number of arguments when you do MD().

Otherwise they are the same in this case.

## removes one non-whitespace character – often the comma – before the ## if vals or __VA_ARGS__ is empty.

e.g

      #define MO_LogDebug(fmt, ...) NSLog((@"DEBUG " fmt), ##__VA_ARGS__)

      MO_LogDebug(@"This works as expected %d", resultCode);

      // Removes the comma automatically in here:
      // NSLog((@"DEBUG " @"This works too without args"), );
      MO_LogDebug(@"This works too without args");

</comment></comment></comment></comment><comment><USER14> I wonder if I'm the only person that thinks that Xcode is the problem, not ObjC. Having experience with C I feel just fine writing code in Objective-C, but only the thought of trying to use Xcode instead of Emacs is painful.

I'd love to know what Eclipse/VS/NetBeans users think about it, maybe it's easier if you're already used to working inside a huge IDE.

<comment><USER2> No, you're not the only one.

Most of the problems I've hit with iOS development are Xcode-isms.

I've recently been sent on a merry hunt to get the built-in git integration from imploding, and the project groups vs folders ambiguity has caused mistakes of the "what actual file is this name pointing too again?" variety (and this in turn leads back to the git integration issues when a file is not where you think it is).

It would also be nice if Objective-C++ was a first class citizen with regards to refactoring tools (I understand this might be hard to implement however).

Rarely has it been a problem with the actual language itself.

<comment><USER15> I believe JetBrains have an Obj-C IDE now. Haven't tried it yet but I know they are pretty good at the whole refactoring thing (I use ReSharper at work all the time).

</comment></comment></comment><comment><USER16> I'm (some what) proficient in many programming languages. Some more than others. I've worked in languages like Python, Eiffel, C#, C++, Prolog, Java, OCaml, F#, Ruby and as of recently, after a long hiatus, Haskell.

I have such a strong dislike for Objective-C, I can't explain it. I mean C++ is insane in a way, and Haskell is a pure Mindbender. But Objective-C's syntax, to me, is indeed so verbose, I'd rather read the EU regulations on "the common organisation of agricultural markets".

I had to create a couple of iPhone apps, and I probably will have to create some more in the future.

Is there any way for me to overcome my unnatural dislike for this language?

And yeah, this article did not work for me, as you would have already guessed.

<comment><USER17> > Is there any way for me to overcome my unnatural dislike for this language?

Grow some taste?

</comment></comment><comment><USER18> _Go and look at some Lisp, then come back – obj-c will suddenly look better :) ... For example, to filter an array is lovely_

      (filter foo? all-records)

Yeah, maybe not so much.

</comment><comment><USER19> As someone who likes Objective-C a lot, I have to say this is a pretty bad defense of it. No offense, clearly we are both fans of the language, I just don't think this will convince anyone on the other side. In fact, I find very little defense of it at all in this post. It seems his fundamental argument is "its a matter of taste", which while true, in no way conveys the many "whys" of the choices made in this language. This is sad because most of the things people are initially turned off by actually have very logical reasons behind them, which over time you do grow to love and miss when you leave.

1\. The first major point (which is found at the end of this post) in any "defense of Obj-C" should be that this is a very pragmatic language. It makes a lot of wise tradeoffs and rarely strives for "purity" or "religion". This helps to put a lot of the language choices in context, and actually is the strongest reason its a great language in my opinion.

2\. "Ugly" - The point is certainly not that you "see through the brackets", that's a terrible argument! The point is to understand why we have brackets, because they allow for named arguments without colliding with existing C syntax. Additionally, they make it clear to the user that what is about to happen is _not_ a traditional method call, it is a message send. This is because you can do _both_ in Obj-C (not to mention Obj-C++).

3\. "Verbose" - First off this is a framework decision. It's possible to take Obj-C without Cocoa, and write a framework that is just as non-verbose as Python (and vice versa). But fine, you could make the argument that the named parameters "encourage" verbosity if you want. The key here is not to hand wave this away as a matter of "taste", but to understand the logic behind this: its _very easy to read_. I can show lots of non-programmers Obj-C code, and it really reads like english. In fact if you just read aloud many Obj-C snippets, it often sounds very close to English. 80% of coding is reading code, and if you work on a big project, its reading _other people's code_. You never run into a piece of code that has 4 arguments and have no idea what the last "true" is for. Similarly, you never have appendChild(node1, node2) moments where you're not sure which is the node you're appending and which is the one being appended next to. Apple's SDK's are repeatedly praised and a big part of that is that the frameworks are very friendly. I personally find the opposite trend of terseness incredibly strange: why do we focus so much on shrinking variable names.

4\. "Memory Management" - This I will admit was more or less fair. The MM story just isn't that great with Obj-C. I have to admit I thought it wasn't a big deal before spending a lot of time in a dynamic language, but it really is annoying coming back to it. And while I'm not 100% sure yet, ARC is not the be all end all. I have to say I think about memory almost just as much with ARC (perhaps simply because I'm not used to it). At least with explicit management I knew exactly what was going on, with ARC I kind of feel that its half magic and half really hard situations. I really hope I'll eat my words about this soon. Now, the counter argument is that _this_ is why Obj-C is so fast. I honestly don't know if that's true. I know enough smart people on both sides of the argument to say that I simply don't know enough about it.

<comment><USER20> I stopped reading at: "Things like factories, adapters, and other design patterns are all thankfully not there."

Huh? Design patterns are "thankfully not there"? What does that even mean?

<comment><USER21> Not that I agree with him, but I do understand what he meant by that, and might be able to explain slightly: many people believe that "design patterns" are something that languages like Java (quite in particular, this language is held up during these conversations) require to work around design deficiencies.

Arguably, this is true: many of the patterns simply "fall away" if you have access to features like multi-method dispatch (Lisp+CLOS), message passing with transparent proxying (as in SmallTalk, and to some extent Objective-C), or continuations (Lisp/Scheme).

However, the argument often goes even further into the realm of complaints against "all kinds of patterns, even those that tend to exist in all abstractions, even mathematical ones", deriding things like factories as "overly-complex" (in the same concept of "overly-complex" that make some people choose NoSQL over RDBMS not for scalability, but due to the common lack of schemas).

<comment><USER22> Factory is actually perfect example of pattern that is mostly used to overcome the fact that passing classes around is unnecessarily complex in Java and thus it's favorable to wrap code calling constructor in it's own class and pass instances of it. In "dynamic" languages (including ObjC) you can simply use use the class object (and if the need arises: things that behave like class objects) itself instead of factory in most cases.

</comment></comment></comment></comment><comment><AUTHOR> Is it considered poor form around here to submit your own articles? If so, i'm terribly sorry and will remove, however i feel strongly that a lot of people write off obj-c based on superficial weaknesses, and that it has a lot of strengths that are very underrated, and i wish i'd known a lot of this stuff when i started off in iphone development.

<comment><USER23> The guidelines[1] just say to submit something interesting/relevant, and this is. Besides, no one knows better than you where to find your content. :)

[1] <http://ycombinator.com/newsguidelines.html>

</comment></comment><comment><USER24> -quote- Go and look at some Lisp, then come back – obj-c will suddenly look better :)

Trust me, it grows on you. You'll soon learn to see through the brackets – just like the green vertical text in the matrix, it becomes invisible after a while. -end quote-

Its ironic that a Lisp/Scheme person would say the same as to why s-expressions are good (the parens become invisible!) so I don't see why objective-c syntax is better but somehow uses the same reasoning.

<comment><USER25> _"You'll soon learn to see through the brackets"_

@I @hope @that @also @applies @to @the @the @at-@signs. ;-)

<comment><USER17> Huh? Obj-C only uses @ signs at a couple of places, like to denote a native @"dasdasda" string and in compiler instructions...

</comment></comment></comment><comment><USER26> If you have worked in smalltalk _and_ C (a somewhat rare combination these days, I must admit) , Objective C is trivially readable.

<comment><USER27> And even if you haven't, you can learn how to read it in ten minutes. Say what you want about Obj-C, but I think its _readability_ is really outstanding.

<comment><USER28> [[perhaps [[not] a always] that [readable[though]]]]]

</comment></comment></comment><comment><USER29> I really hope Apple promotes MacRuby to first class citizen for both OS X and iOS development. That would make things a whole lot more modern and easier. Who knows, once we have quad core CPUs on even the lowliest of iDevices we could see this happening.

</comment><comment><USER30> _There's a philosophy here: user happiness is prioritised over developer happiness._

See also the App Store policies. Apple's priorities tend to be it's users, Apple, then any 3rd party developers. I don't tend to think this is a bad thing...

<comment><USER31> Make no mistake Apple's priorities are: Apple, Users, Developers.

<comment><USER32> If you're a developer (or a business), what's your priority? If it's not your users (or your customers) then you're doing it wrong.

<comment><USER33> late comment that will probably never get read:

This is overly simplistic. In their heyday MS catered to developers first and their users second. You can make some snarky comment about this, but at the time it allowed them to become one of the largest and most powerful tech companies out there.

Google catered to it's own engineers first.

The point is there are different ways of building a business; don't blindly choose the Apple path just because they're currently at the top of the heap.

</comment></comment></comment></comment><comment><USER34> I love it too for its readable and descriptive method names. It is also surprisingly flexible considering its age. (I guess what I am saying is that Apple kept it up-to-date pretty well.)

</comment><comment><USER35> I love Obj-C message send syntax and I miss it dearly when using any other language. I love that a method implicitly documents itself at the call site, and that the delimiters occur between calls rather than in the middle of them.

And it works great with code completion. You just type '[' and the editor immediately knows what you are doing. Choose a method and the parameters are right in front of you. No documentation required, unless you actually need in- depth information.

<comment><USER36> > And it works great with code completion. You just type '[' and the editor > immediately knows what you are doing.

Whereas in other languages you'd have to write... "."?

> Choose a method and the parameters are right in front of you. No > documentation required, unless you actually need in-depth information.

Pretty much every somewhat advanced IDE does that, especially for mostly- statically-analyzable languages.

<comment><USER17> > Whereas in other languages you'd have to write... "."?

You write "." AFTER you've written the method name. In ObjC "[" immediately tells that you want a method/class name for autocompletion.

</comment></comment></comment><comment><USER37> Looking at the example given of how lovely obj-c is:

       filteredArray = [allRecords filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"someField == %d", someFieldFilterValue]];

Makes me wonder if the author has ever seen languages that do this like so:

       let filteredArray = Seq.filter (fun f -> f = "foo") allRecords

</comment><comment><USER38> I didn't find this very convincing at all. For starters, the code presentation reinforces the verbosity and difficulty working with it. Don't most languages support named parameters and in an easier to understand way? I'm not qualified to discuss memory management but that point also left me confused.

</comment><comment><USER39> Remember Smalltalk?

Xerox PARC, GUI, inspired Steve Jobs, all that fun stuff.

Objective-C is a sort of nerfed Smalltalk bolted onto the side of C. Yes you can see the seams and it's clunky-looking, but it works. Smalltalk semantics means it's much easier to build robust and loosely-coupled programs than in C++, and you don't even occur that much runtime overhead.

I do all my game dev in Objective-C, and I don't even have a Mac that I use actively. In fact I defy people to write significant Objective-C programs that don't use or need the Cocoa or NS libraries. I think they will have an easier and more fun time of it than when working in C++.

</comment><comment><USER40> After having spent a couple years doing embedded OS development in C, Objective C is beautiful. The verbosity makes it much easier to read than typical C code and the memory management is brilliant compared to doing it yourself. It walks the line between static and dynamic types quite well, with most things being static except when dynamic makes things a lot easier. I think Objective C is brilliant considering what they were able to add to C while maintaining great speed and full compatibility with C.

</comment><comment><USER41> I dislike the NextStep libraries (and all of Apple's subsequent creations) far more than Objective-C itself. The completely unnecessary verboseness is what drives me up the wall.

If the libraries were designed more like C++'s (say what you will about STL, but at least set<> is called set<>), I'd probably have no issues whatsoever.

<comment><USER42> You may dislike the verbosity, but it's hardly "completely unnecessary." A typical Objective-C program is inherently self-documenting. It's nice knowing what a group of arguments is used for without having to look up the method prototype.

</comment></comment><comment><USER43> For me the problem isn't Obj-C. It's cocoa. (Unless things have changed,) if everything was consistent in cocoa from a language perspective i.e. every library / framework is accessible with Obj-C from the start as opposed to being only C. If I remember correctly the Addressbook portion is one of the culprits.

</comment><comment><USER44> The only argument I'm buying into is this one...

[someInstance doSomethingWithObject:a andAnotherParam:b];

It just reads beautifully. Otherwise working with Objective-C was like pulling teeth at times. It had been a long time since I had to write so much code to get such simple things done.

<comment><USER45> Exactly. I once worked with a very smart Obj-C guy. I asked him if he could document all the method calls so I knew what they did.

He said: there is no need. In Obj-C the selectors should document themselves.

</comment></comment><comment><USER46> I guess, the way to defend it would be by demonstrating expressiveness. Syntax hardly matters.

\- Closures (I guess blocks might achieve the same, never worked in Obj-C)

\- Lambdas

\- Dynamic Typing or Type Inference. You need at least one of those.

\- Or any other construct that enhances expressiveness.

</comment><comment><USER47> Not a fan of the syntax, but my real gripe is with the header files, and all the DRY that entails. If I were Apple that's the first thing I'd aim to fix, rather than giving us ARC.

</comment><comment><USER48> "Things like factories, adapters, and other design patterns are all thankfully not there."

Not sure I understand this? How does Obj-c enable the developer to avoid factories?

<comment><USER49> Agreed. I've had to use factories in Obj-C plenty. I guess the argument that I would make is that they are much easier to implement in Obj-C and require less boilerplate (especially if you use blocks), not that the pattern doesn't exist in Obj-C.</comment></comment>


The story of Amstrad's amazing CPC 464 - <AUTHOR> http://www.theregister.co.uk/2014/02/12/archaeologic_amstrad_cpc_464/

<comment><USER2> The CPC is by no means dead. E.g. check out:

[https://github.com/Octoate/cpc-sdcc-rom](https://github.com/Octoate/cpc-sdcc- rom)</comment>


The slow death of Dopplr at Nokia - <AUTHOR> http://www.guardian.co.uk/technology/pda/2010/sep/10/slow-death-of-dopplr

<comment><USER2> I really miss the utility that Dopplr provided and while Tripit does provide a good service it is not the same service.

I find it really sad when a startup that was providing such an excellent service is bought up a dies like this.

If it really was just a talent acquisition and they have no desire to maintain the service why not put the business up for sale while it still has some users or at least let everyone know what the plans for it are.

<comment><USER2> Thinking about this some more over lunch today I think that a merge of the functionality of Dopplr and FourSquare would be a really interesting thing.

Combining the social gaming and tips from FourSquare with the trip information and tips from Dopplr would probably be a really useful result.</comment></comment>


I landed a job as a software developer at 17, should I dropout of high school? - <AUTHOR> Hi guys! I'm a pretty bizzare situation. I managed to land a job as a software developer 3 months ago. I'm mostly working on React Native and different JavaScript technologies ( both frontend and backend). My problem is that I love my work, but I have to spend like 6-7 hours in High School everyday, and I hate it. I feel like I'm wasting my time, time that can be used to learn new things related to Computer Science. So I'm thinking about dropping out of high school, I'm confused and I feel lost. I just can't resist three more years in High School. Any opinions? <comment><USER3> You are very fortunate to have that role and experience it will provide; to drop out of high school would be a colossal mistake. Please don't do it!

Every job worth having expects people to have a completed high school degree or better (queue the edge case anecdata). Dropping out now because of this job is highly risky.

Your next job would have to not care that you didn't graduate from high school (you will be 20 at that point)...most jobs who see a 20 year old that didn't complete high school only see a 'loser' whether that moniker is earned or not, for the hiring process, perception is reality.

I've been in a similar situation as well (got a Jr. SysAdmin job at 17, promoted to plain at 18, but had to split it between high school hours and later working on my 4-yr degree at college) thus, I understand your point of view.

The feelings of being held back by school are very real. They are not fun to experience. You are almost certainly robbing your older self down the road in lost job opportunities and more if you don't get that HS degree. Don't do it! Your 25+ year old self will thank you for making the painful, sucks to do, mature decision.

<comment><USER4> If he/she been able to get a job doing dev work, and that's the career he/she wants, what more is he/she going to learn that he/she could not learn him/herself later if they wanted (online or books). As a hiring manager I'd usually check out where the person has worked before if they have already started working. If it's the first job, yes the education matters because there's nothing else to go on. If it can be managed they may as well complete it, especially if there's any chance they want to do a degree.

</comment></comment><comment><USER5> A few years ago I worked with a 14 year old on work experience. He had some impressive sounding personal projects on the go, and after a few months throughout the years of working for us, we gave him a job at 16, which he accepted.

He got pretty good in a certain niche, and over time he built up legitimate experience - good enough to land senior developer roles in this market, and to be well-known to other developers in these circles.

The problem, for him, came when he decided that he wanted to try something new. Suddenly, his 7-8 years of real-world experience didn't matter for much, and he was struggling to get roles ahead of fresh graduates, because he didn't have a degree, but mostly because his experience was around this one language and one CMS. He'd hit a ceiling in this role, and couldn't really find a way out.

He's earned some solid money, but since leaving his current role he's struggled to find any meaningful work outside of what he's good at - <USER2> builds, and now that he wants to do something different he's struggled to find work. He's still young enough to not be classed as a mature student, so he's going back to college and then onto uni part-time while he does contract work.

In your case it might make sense to take the job now instead of building up a ton of student debt to get that job in a few years time, but jobs don't last forever. This job might be amazing, but you might face redundancies, or find yourself isolated from your friends/peers, or find what my friend discovered - he doesn't really enjoy what he's doing.

</comment><comment><USER6> No!!! Don't sacrifice the long-term for the short-term. Talk to your employer and see what they'll do to work with you so you can finish school. You don't necessarily need a college education, but not having a High School diploma will be like a millstone around your neck for the rest of your adult life.

One thing to check into - see what your state offers for early completion of school. In California, you can take the CHSPE - at least, that's what I did years ago. It's a simple test that, if passed, grants you the equivalent of a diploma. It's NOT a GED, it's an actual diploma and colleges don't look unfavorably upon it. Please look into it, ask your counselor at school.

</comment><comment><USER7> I went through a very similar situation 10 years ago. Got a high paying software developer job at 16 and had to pick between dropping out and leaving the job. I ended up dropping out, and had to finish highschool few years later. If you think 3 years of highschool is a nightmare now, try doing it when you are 22.

Also, no matter how good current job is, it will end eventually. Without a degree you will have much harder time getting the next job, while fresh graduates with 0 experience will get picked over you.

</comment><comment><USER8> I'm going to take a contrarian view. My answer is, "it depends."

You have a GED as an option. It is considered a high school equivalency. It's a single test that covers a battery of subjects. Pass it, and you're effectively done with high school.

I didn't finish high school in a traditional fashion. I ended up going into foster care as a teenager and bouncing from home to home before I aged out of the system. I _had_ to go to work early.

Here's the kicker: since I went to college later and had _some_ college experience, the GED is forgotten. No employer in my 20+ year career has ever asked about it. I eventually ended up getting a 4-year degree, and even though it took a long time for me to get to that point, it didn't hamper my career in the least.

I just finished a 4 year project freelancing as an automation coder for a telecom company. I did VERY well over those 4 years, in terms of income. Now I am an employee of that telecom.

"Success" for you will depend on how you define your goals. Your path there will very likely not be linear. Grit is required along the way, no matter what decisions you make.

I would recommend you take a long-term view, and not only think about the moment. That may very well mean taking the developer job. But if you do that, and curtail your formal education for now, remember you'll want to address that later. In my case, the experience FAR outweighed the formal education.

Feel free to email me, I'm happy to talk with you more about this.

</comment><comment><USER9> If you do it, I'll anticipate your HN post 12 years later

"Hey, I dropped out of highschool to work as a developer. I'm really good at [language, framework], but my coworkers all have more formal CS skills. I'm thinking of going back to school, but it feels too late now. Any advice"

...Having said that, _some_ dropouts do go on to do amazing things with their extra time. But think very carefully if you think that would be you.

</comment><comment><USER10> I was in a similar situation. I started working at 17 as well, and felt like I wasting my time at school. I stuck with it and put in minimal effort, just enough to pass all the classes and the exams. Depending on where you are in the world, this is a good idea or not. This worked against me a little bit later in life, when after a long break, I applied to a university abroad and I had a hard time explaining my relatively low grades.

I am glad I stuck with it. Not having a high school degree is frowned upon and it'll not be fun to explain that down the road. Society does not take kindly to people who don't finish high school. You are already going to have a harder time being a youngster in the industry, don't make it harder by not having a high school diploma.

It's going to suck. I know. But please, do us a favor and stick with it. If you want to talk, contact me by e-mail (see my profile).

In the mean time, maybe you could talk to your school. At my high school they were pretty appreciative and they let me do some software projects for the school. It was extra work for me, but at least it made me feel going to school was not a total waste of time.

</comment><comment><USER11> Finish high school. Then get a degree.

Don't destroy your future to build some CRUDs with popular technologies (in the worst possible sense) every day and earn _peanuts_.

The wast majority of us hated it most of the times too, just go to school, do what you must and then start doing the stuff you care about once you get out. But get a degree, you'll need it.

</comment><comment><USER12> Seems an expensive proposition. Experience is great, but what you can learn on a job tends to be very narrowly focused. You will learn a lot more broadly useful stuff from high school & future employers will take you more seriously, especially if you add a CS degree (or higher).

High school just gives you more opportunities down the road, which is the most important thing at your age. Finally what happens if you lose the job? Then you would be left high & dry.

PS - At your age I spent most of my spare time programming on my own which gave me a lot of freedom to explore different things, not something you get in a job. [Edit - formatting]

</comment><comment><USER13> Not having a highschool degree will probably come back to bite you. How do you have 3 years of highschool left if you're 17?

</comment><comment><USER14> It's great that you landed a job, but basic education is more important than being capable of using React Native. Just do both at the same time, which is what I did.

<comment><USER14> If for purely pragmatic reasons: governments around the world will assess your accessibility to various things based on stuff like the papers an institution will give you. If you think formal education is useless; that's cool but the world is still going to use these dumb papers. So if you're any smart, suck it up and play the game.

In any case, I don't think formal education is useless, I'm just making the argument in extremis.

</comment></comment><comment><USER15> Hey, I dropped out of high school when I was 16 to move to Silicon Valley. Feel free to email me at email@example.com if I can be helpful with anything.

More than happy to hop on the phone to talk about my experience and introduce you to others who made similar life decisions that can talk about their experiences.

</comment><comment><USER16> No.</comment>