Coding Skill and the Decline of Stagnation - <AUTHOR> http://notch.tumblr.com/post/15782716917/coding-skill-and-the-decline-of-stagnation <comment><USER2> There are two truths I try to keep in mind whenever I start feeling either extreme:

1\. There are people who are so much better at programming than me, that I could work my entire life and never be as good as they are right now.

2\. There are people who are so much worse at programming than me, that they could work their entire lives and never be as good as I am right now.

Its a continuum, a hill. Feel the gradient, walk uphill.

<comment><USER3> I empathize with not wanting to become cocky, but I feel like you're lying to yourself. I could see them as truths if we were talking about triathlon, but something intellectual and logical as programming? If you are able to reach the point where you find yourself enjoying programming, then I think there's good chances that it's only a matter of time - and rightly focused effort - until you are able to produce work of any level of quality, including the current level of the best programmer, and beyond. What sort of limitations make you think otherwise?

<comment><USER4> Project this onto math, and we all could be Ramanujan or Galois with the right investment of time, right? Of course not. People differ in level of intelligence, and this is a fact. Some programmers are just brilliant people - had they chosen math they would probably be professors churning out papers. Some others just don't have the mental skills required.

This isn't about race or gender or whatever - just innate difference between individuals.

<comment><USER5> _> People differ in level of intelligence, and this is a fact._

Define intelligence.

<comment><USER6> Which seems to underscore his point.

<comment><USER5> "Intelligence" isn't some stat you train to make your spells do more damage. It's a complex mix of what you've learned, how you learn, and who's teaching you. "Intelligence" is just as hard to define as "consciousness".

</comment></comment></comment></comment></comment></comment><comment><USER7> Does anybody know if Notch is self taught? I thought he had a CS Degree from somewhere?

I can fluctuate between thinking I am a fairly competent developer to thinking that I am possibly the worst programmer there is. I'm not sure which is a better attitude to have, hopefully I am somewhere in the middle.

I think the issue with reading some of the discussion on HN is that you get people talking in detail about things like functional programming languages , systems with huge scalability , hardcore math problems and the finer points of memory management in the Linux kernel that you feel it is obvious that you should understand this stuff.

I have been trying to do some more book reading to improve, of course the issue is that whenever you read any book recommendation threads of HN there is always at least 30 or so recommendations of some pretty thick books and no chance I'd have time to read them all.

There is also a difference between having deep knowledge of the tools and libraries that you are using right now and having a deeper understanding of theory for example learning git vs learning graph theory etc.

<comment><USER8> _Does anybody know if Notch is self taught? I thought he had a CS Degree from somewhere?_

I can't say with any degree of authority, but based on what I've read of his code, I'd guess he's self-taught.

My bigoted preconception is that when it comes to abstraction in code, people with CS degrees err on the side of doing too much, creating extremely elaborate object frameworks that close down options as much as they help reuse code. Self-taught folks, on the other hand, err on the side of doing too little, relying on cut and paste, util packages, and promiscuous sharing of data.

When it comes to algorithm design, people with CS degrees tend to pull in libraries of esoteric things, sometimes overengineered for the purpose at hand. Self-taught folks tend to write something from scratch that almost, but not quite, does the job right.

Based on what I've read from decompiled Minecraft, I'd guess Notch is self- taught. The abstraction is just _barely_ enough to get the job done, and the algorithms are decidedly homebrew. That's neither praise nor criticism, just a comment on style.

<comment><USER9> > My bigoted preconception [...]

Well, I would have called you on this, but I guess I don't have to.

> The abstraction is just barely enough to get the job done [...]

Or, in other words, the perfect amount...

<comment><USER8> _Or, in other words, the perfect amount..._

Philosophically, I agree. I view premature abstraction in the same light as premature optimization. I believe both abstraction and optimization are incarnations of your understanding of the problem. You want them in important places, not necessarily everywhere, and hence you want them late enough in the engineering process that you understand which places are important.

That said, within the comfort zone, there are high and low levels of abstraction. For example, in a project the size of Minecraft, I would expect CS major code to contain an ObjectFactoryFacadeCollection or two. Minecraft has nothing of the sort. It sticks almost exclusively to the Mob::HostileMob::Zombie inheritance we all grew up with. This is not bad or good[1], it's simply a reflection of the low-abstraction style of attacking problems that I associate with self-taught programmers.

On the other hand, its Magic Number to Constant ratio is downright scandalous . . . ;) Though it's possible that some of that is an artifact of the compilation/decompilation process.

[1] I'm lying, in this case it's a good thing.

<comment><USER7> _Philosophically, I agree. I view premature abstraction in the same light as premature optimization._

It's usually easier to optimize later since optimisations are often just taking sections of code independantly and making them quicker. There is the whole 90/10 rule (or whatever it's called) that says it's better to highly optimise a few sections of bottleneck code rather than the whole thing.

Trying to retrofit an abstraction to a piece of code is almost always a horrible experience frought with mess and compromise.

<comment><USER8> _Trying to retrofit an abstraction to a piece of code is almost always a horrible experience frought with mess and compromise._

Yes, and unless the problem is trivial or your experience in the domain is such that your foresight borders on the clairvoyant, this is guaranteed to happen. No matter how much (or little) design you do up front.

The key is to recognize the right time to stop and refactor, so as to keep the pain that comes with learning the problem space to a minimum.

</comment></comment></comment></comment></comment></comment><comment><USER10> "I still stubbornly believe the whole "private members accessed via accessors" thing in java is bullcrap for internal projects. It adds piles of useless boilerplate code for absolutely no gain when you can just right click a field and chose "add setter/getter" if you NEED an accessor in the future."

Is this a controversial stance? It seems like common sense, unless I'm misunderstanding something.

EDIT: To clarify: I assume he's saying "don't add accessors by default for all private members unless you need to, because you can always go back and add it if you really need it", which is common sense for any project, external or internal. I'm pretty sure he's not saying "don't add accessors, just use public members", which is controversial, IMO, even for internal projects.

<comment><USER11> Controversial might be too strong a word, but there is a counterargument to be made.

Suppose you have a member named "x." Someday, you might want to stop storing x, and instead make it a calculated value. At which point you'll need a method. Or, when setting x, you may someday want to increment a counter, or transform the input data, or take some other action. Again, you'll need a method.

Yes, it's very easy to add an accessor later. But then you'll most likely have to edit every line of code that accessed the now-defunct member variable. Your IDE may make this easy, but I'd still prefer not to have to do it.

That's not to say writing accessors is _always_ the best choice. I'm just saying there _can_ be good reasons to do it. Like all things in software engineering, there's no one-size-fits-all rule about this. Notch is right about the bloat accessors create, so you have to weight the advantages and disadvantages yourself in each case.

<comment><USER12> IMHO most software 'service life' it's not long enough to justify the annoyance of the accessors.

Most software are outdated after a couple of years.

But I still think that accessors are a must if you know that the software will be immortal (like Internet banking applications)

<comment><USER13> That's a pretty brutal stance. :|

I can't say I know the average shelf life of a software component in various languages, but I can say that at least things like Java have managed to justify their use of accessors by that metric. Maybe the focus should be on writing less throwaway code than deciding whether to "invest" a few extra minutes or not on accessors.

</comment></comment></comment></comment><comment><USER14> When watching Notch code I noticed a lot of code smelly habits, relying on inheritance over composition is one example. But my god his level of productivity and ability to get shit done is lightyears ahead of your average programmer, and you got to respect that more than anything.

<comment><USER15> Show me someone who doesn't have code smelly habits and I'll show you a book author or a pedantic blogger -- not a production coder.

<comment><USER16> Amen Borther "forgive me father I used 5 GOTOs last week"

</comment></comment></comment><comment><USER17> I died laughing when I read, "Point is, SOPA sucks."

<comment><USER18> As did I. Wish more authors rewarded you like that for reading to the end

<comment><USER19> Haha that was awesome

</comment></comment></comment><comment><USER20> Interesting post. A couple of observations:

1\. I think programming is a multi-disciplinary task. Notch is obviously among the best at "writing a lot of working code". He's pointing out that he could improve in software design. I've work with many folks who are obviously strong in one area but weaker in others.

2\. I think his coding sloppiness comes through in minecraft: it's an incredible game, but I've stopped playing at times due to frustration with crashes and corruption.

...oh, and 3. My guess is that the "large US based game developer" was Valve.

<comment><USER21> Just guesswork, but I'd imagine it was EA, who have a subsidiary (DICE) in Stockholm, where Notch lives. Valve (as far as I know) don't have any Scandinavian subsidiaries.

</comment></comment><comment><USER22> "I had to work on programming more carefully and think things through before diving in, or I'd have a hard time working in a large group." This pretty accurately describes what I went through before joining a larger organization. However sometimes larger companies train you into a mentality of working fast and letting QA sort it out, which isn't always the best thing.

<comment><USER23> After watching notch code a bit, I'd say that the way he dives in and works has been very successful for him. It's a different style but I don't think it's bad in of itself. I might definitely be bad when working in large groups, but that is not the only way to work.

I personally don't think working in a _large_ group is particularly rewarding for a programmer.

<comment><USER7> It's easier to "dive in" when it's a short term project that you are working on alone and it's in a problem domain that you are familiar with (in notch's case games programming).

I'm at the point know where I can build an E-Commerce site in an MVC framework and implement Client & Admin Logins , Stock management , product search and a shopping cart without having to engage my brain because the structure to me is fairly obvious.

On the other hand if I had to design a game I would have to think long and hard about how the different components would fit together and even then I would most likely get it wrong somewhere.

</comment></comment></comment><comment><USER24> I think there's something to be said for starting out with this sort of confidence, especially when you're self-taught. That sort of confidence can provide some incredible motivation. If we realized how much it work it would take to become well and truly good at things like coding, would we start down the path with such fervor?

Point is, SOPA sucks.

<comment><USER25> As a self-taught programmer I started out with completely the opposite level of confidence, and considered myself a really lousy programmer.

I always assumed there were all these "real", "professional" programmers out there that really knew what they're doing, pick crystal clear abstractions, had profound knowledge of security implications, database optimization, data structure usage, good use of object orientation, introduced no memory leaks, knew just what algorithm to pick and wrote great, clear and understandable code.

I still kinda think I suck, but at least now I know that I'm not alone :)

</comment></comment><comment><USER26> Have the confidence to know you can do anything.

Have the humility to know you can always get better.

The moment you believe your the best at anything it becomes very dangerous because you have no reason to improve, your the best. Generally speaking there are very few people that are the best at anything (In fact only one for each thing). Most likely there is plenty of room for growth.

I'm glad the author used the negative comment as motivation to get better.

</comment><comment><USER27> """ But. I still stubbornly believe the whole "private members accessed via accessors" thing in java is bullcrap for internal projects. It adds piles of useless boilerplate code for absolutely no gain when you can just right click a field and chose "add setter/getter" if you NEED an accessor in the future. """

YES.

</comment><comment><USER28> It's comforting to see that other people fluctuate between thinking they're awesome and thinking they're awful.

Experience has taught me this:

Never build your self-esteem on comparison with another

And by that I mean, you should never judge your own programming abilities based on other peoples' apparent abilities. If you're programming new stuff regularly, enjoying it and listening to what other programmers have to say, then the chances are you're getting better at it, and that's enough.

<comment><USER29> I want to agree, but it's hard to fight against ingrained human instincts. The need for social validation is very powerful. I would say instead:

If you have to build your self-esteem by comparing to others, do it by looking at what you've created, not what you know.

</comment></comment><comment><USER30> There is no "Gospel" when it comes to programming. There is a lot of code out there that isn't pretty, but it works and brings money into businesses.

I think we can all agree that Notch didn't make any mistakes. Minecraft is a huge success.

They are called "best practices", not "the only practices". But good for Notch to want to be like everyone else.

<comment><USER31> Best Practices are like patterns, solutions to common problems. Sometime there are problems that require uncommon solution. They are rare, but they exist.

I just hope people don't disagree with Best Practices just because they want to show their displease with the authoritative...

<comment><USER32> _Best Practices are like patterns, solutions to common problems. Sometime there are problems that require uncommon solution. They are rare, but they exist._

This is very interesting, and mirrors some thought I've been having myself.

I would like to see someone create a list of examples of uncommon design patterns, and list cases in which they might be warranted.

</comment></comment></comment><comment><USER33> I think the biggest thing he emphasized is the fact that you can never be "The Best Programmer" because there is always something to learn and ways to grow. That is probably one of the keys to a good developer, they know that there is still plenty for them to learn.

<comment><USER34> Yeah. A couple of times, I've met people who have "dabbled" in programming - maybe done it for a year or two professionally - and said they left the profession because they's pretty much learned everything there was to know about programming. I'm always impressed with their capacity to absorb so much, since I started programming when I was 8 (on a ship, in the middle of the Atlantic, without a computer) and I'm now 37 and estimate I know about 5% of all there is to know about programming (an estimate that continually drops as I learn more).

They must be _really_ good. :)

<comment><USER35> How did you learn programming on a ship in the middle of the Atlantic?

<comment><USER34> My Mum had bought me a book called the Usborne Guide to BASIC Programming, as my Dad has just bought an Osborne 1 computer for his new consulting business. So on our way across the Atlantic on a Polish vessel from Montreal to Dover, I was enthusiastically learning about programming while the machine sat, frustratingly, in the cargo hold, inaccessible to my eager mitts.

I still have the Osborne 1. I last powered her up in 2005, when Adam Osborne passed away.

</comment></comment></comment></comment><comment><USER36> "Point is, SOPA sucks." haha, nice

<comment><USER37> Instantly made me think of "Carthago delenda est"

<http://en.wikipedia.org/wiki/Carthago_delenda_est>

</comment></comment><comment><USER38> I think that the languages and platforms used shape the way one thinks about programming more than anything and that being exposed to different ecosystems is important. For example, working in a team of experienced developers that uses Java will probably rid one of most "cowboy coder" tendencies and instill a tendency for reflection on architectural patterns, etc, however it can also lead to over-engineering, "architectural astronauts", etc so then going to a more dynamic platform like Ruby on Rails (or at least using their methodologies in projects) helps balance this out. Programming is constantly evolving and it can be hard to figure out which patterns and processes to follow but one thing I feel is important is working in teams as it provides a good way to gauge yourself against others and help expose your own weaknesses.

</comment><comment><USER39> There are many dimensions to "how good you are as a programmer".

How you approach a 1000 line project is different from a 100,000 line project.

The best practices for a good solo developer are different from a team developer.

And most importantly, the internal elegance of your code is independent from how useful / cool your product is.

</comment><comment><USER40> Reiterates the fact that the more you realize you are a terrible programmer, the better you are. Very awesome of someone with his stature to flat out admit the fact that he has flaws. Kudos!

</comment><comment><USER41> I have a Master Degree in CS but programming mostly is self taught by reading other people's code, good code and ugly code. I know about design patterns only enough to avoid them like shit. It is just easier to hide shit under a shinning cover. There is a saying for writers : "every word tells". My principle is "every line counts". However, this is almost impossible in a team environment, so I still think that best code is one man job.

</comment><comment><USER42> loved reading the last comment: point is SOPA sucks.

</comment><comment><USER43> I honestly don't see what about this post is Hacker News worthy. Is it just the fact that the post was written by the Minecraft developer? Or it it the (somewhat questionable) display of humility?

It's sort of like posting a long list of your accomplishments and then saying "but I don't consider myself special, and I have much more to learn". If the sentiment was true, you probably wouldn't say it, and almost certainly wouldn't say it this particular way.

<comment><USER44> There is definitely a star power associated with someone like Notch which automatically gets more views. Same goes for a lot of the people you see get submitted here and voted up.

Is that the only reason? Probably not, but when someone famous says something it will get a lot more attention than if a nobody says it. Cet par.

</comment></comment><comment><USER45> > I am a decent programmer.

He's a decent comedian it seems.

<comment><USER46> Ouch, but probably true for many self-proclaimed "programmers." His success goes to prove that mastery of skill isn't everything.

</comment></comment><comment><USER47> If (There will always be someone better or worse than you.)

Than { Does it really matter? :Bool }

Return: Nope.

<comment><USER48> Then</comment></comment>


The Android Opportunity - <AUTHOR> http://daringfireball.net/2009/08/the_android_opportunity <comment><USER2> As a recent Android convert, I am confused by all the "issues" that people keep mentioning. Everything on my phone Just Works. When I change the color of a calendar on Google Calendar, the color on my phone's calendar widget changes. When I change a contact on my phone, GMail and Google Voice update almost instantly. When I dial a number on the normal dialpad, my call is automatically routed through Google Voice. When someone who is not in my contacts calls me, a little message pops up with the White Pages lookup results. (This is a third-party app.) When I feel the need to tweet a picture, I click a button, the camera turns on, I take the picture, write some text, and my picture and tweet are posted. When someone messages me on Google Talk, and my computer's Jabber session is idle, my phone makes a noise and I see their message.

I was on the train today, and wanted to catch up on HN. I read five or six articles, and all of them rendered perfectly in the included browser.

Basically, this is what I consider an absolutely perfect phone experience. I could not be happier, as an end user. (And as a developer, I am _really really_ happy.)

I am just confused as to what these iPhone converts are doing. I think they are expecting an iPhone clone instead of a completely different smartphone.

One more thing. I found this comment especially ignorant:

 _Android suffers from the same issues that have plagued Linux on the desktop for years: the lack of integration between software and hardware, buggy and under-featured applications, a lack of attention paid to user experience issues. The encouraging openness and bits of innovation in Android are overshadowed by mediocrity._

What does this even mean? I see perfect integration between my apps (and the Google apps on my computer), and of course, the underlying OS kernel has no effect on the user experience unless it is really bad.

<comment><USER3> Since you've got no problems with Android, maybe you can solve mine:

\- Why does the phone crash when I try to pair with my bluetooth headset?

\- Why do all eleventy-billion of my contacts show up in the dialer instead of the relatively small handful who've got phone numbers?

\- Why the *@#$% doesn't this thing have a proper headphone jack?

\- How do I sync music between my computer and my G1?

\- How about podcasts?

\- How do I play videos on this thing?

\- When I mark a contact as a "favorite", how do I change which phone number gets dialed from the favorite screen?

\- Why don't I get autocompletion when I use the hardware keyboard?

\- Why does the system freeze for about a second when I rotate it?

\- Why do about 25% of the apps I have not work with the soft keyboard?

\- Why do another 25% not work in horizontal mode?

\- Where's the PDF reader?

\- Why can't I read Google documents on this thing?

Shall I continue?

<comment><USER4> \- Why do all eleventy-billion of my contacts show up in the dialer instead of the relatively small handful who've got phone numbers?

Because the Dialer app is listing all of your contacts, because it serves as both the Dialer and the Contacts app all rolled into one.

\- Why the @#$% doesn't this thing have a proper headphone jack?

Yell at HTC, not Android.

\- How do I sync music between my computer and my G1?

Plug the included USB cable into your PC. Android will pop up a notification allowing you to choose if you want to mount the internal SD card as a drive on the host machine. Use Finder/Nautilus/Explorer to copy music to the drive, or Google for the proper file that tells the PC that your G1's SD card is actually a music device so that your music apps will sync with it.

Arguably, the G1 should do this for you, but what if you put your camera's SD card into the G1? It wouldn't know the difference, but you wouldn't want it to label the SD card as a music player without you asking it to...

\- How about podcasts?

Get a podcast app, or see above?

\- How do I play videos on this thing?

Use the included YouTube app, or download a file-manager app (I recommend the Linda File Manager) and click on the video from the file manager. Yes, Android should include this type of app out of the box.

\- When I mark a contact as a "favorite", how do I change which phone number gets dialed from the favorite screen?

Open the contact, long-press on the desired number, and select Make Default Number.

\- Why don't I get autocompletion when I use the hardware keyboard?

Because, arguably, most people using a real keyboard don't generally need/want auto-completion? Also because with the physical keyboard, there's no keyboard "app" being used in the first place, which is what provides the auto- completion you speak of.

\- Why does the system freeze for about a second when I rotate it?

Because of the way Android handles apps. When the screen rotates, Android sends the "Stop" signal to the current activity, resets the framebuffer, and then sends the "restart" signal to the activity, more-or-less forcing the activity to save and load its state and rebuild the UI. This allows Android and the application to pick up new resources or new UI layouts based on the new conditions of the phone (new resolution, keyboard availability, etc). See my previous comment on this: <http://news.ycombinator.com/item?id=699223>

\- Why do about 25% of the apps I have not work with the soft keyboard?

Most likely because developers did some funky business under the expectation that the user would be using Android 1.0 and/or the G1's hardware keyboard. Please yell at developers to update their applications.

\- Why do another 25% not work in horizontal mode?

Once again, developers can specify that applications only run in certain orientations, which can be useful in certain apps (eg, Solitaire really can't play well in portrait mode). Yell at the developers to knock it off if you disagree.

\- Where's the PDF reader?

I believe there's one on the Market.

\- Why can't I read Google documents on this thing?

I'm not sure why Google overlooked a native app for Docs, but they worked relatively well through the browser, last time I tried. There are also several "Office" apps on the Market, if you're interested...

 _Shall I continue?_

I'd be happy to answer, refute, or agree with more complaints if you can keep them civil.

<comment><USER3> That, my friends, is what's called "missing the forest for the trees." Yes, every single one of my question has an easy answer. Yup, just need to install this app or activate this hidden preference or tweak my Xorg.conf, or learn to live with the problem...

Using this device is like the death of a thousand cuts. None are even remotely fatal, but over time there's just a mounting list of little annoyances. Everything's 95%; nothing Just Works. I stopped using Linux on the desktop because I didn't want to have to be a sysadmin on my personal hardware; having to monkey with my phone is even less my idea of a good time.

My iPhone bit the dust, so I've been using a G1 that Google graciously gave me for free. I really want to like it! After just a couple days with it, though, I'm nearly ready to plunk down cash for a new iPhone. Google's seriously got a problem if they can't even get me to use their platform at the price free (actually, I'll _save_ $200 if I stick with Android, so it's even worse).

<comment><USER2> I can do the "death by a thousand cuts" thing to the iPhone just as easily as you can do it to Android. Every user has different priorities.

(You also mentioned Xorg.conf. I have not had one of those for years.)

<comment><USER3> Ah, so if the iPhone is flawed that makes all of Android's flaws go away. Finally, I understand! Thanks!

<comment><USER2> Actually, yes. There's a limit to what a $200 phone can do. If nobody has The Ideal Device, you will have to choose an approximation. How those approximations are flawed vary between devices.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> He's missing the #1 area where you can compete with Apple (at least for now) and why I think the Palm Pre will do well: carriers. Most people, even high- end smart phone users, choose their carrier first and their phone second. You'd lose sight of that reading TechCrunch or Engadget too much, but talk to people in middle America and you realize it's overwhelming. Be it due to laziness, marketing, employer discounts, customer satisfaction, not understanding how simple number portability has made it, whatever. I'd bet for every person who has bought an iPhone there are 1 or 2 who at least would consider it if it were on their network.

The Palm Pre and Android are both at a huge advantage here. That may not be true when Apple's deal with AT&T runs up though, but for now it's easily the biggest competitive edge available.

<comment><USER6> _the #1 area where you can compete with Apple (at least for now)_

Your qualifier here explains why Gruber doesn't dwell on this. He wants a competitor to Apple that can succeed in the long haul, not a bunch of scavengers who survive for another year or two, picking off the edges of the market that Apple hasn't gotten around to steamrolling yet.

Indeed, my off-the-cuff take on the state of the market is that Apple's carrier exclusivity is a positive _danger_ to the competition. Because it means that the market sends all the wrong signals. You put out an iPhone knockoff that runs on another carrier, and a bunch of people sign up. Your product is a success! But: The reason your product is succeeding is that the playing field isn't level. And it's non-level in a way that Apple can _fix_ , just as soon as the agreement with AT&T runs out.

My take on the smartphone market in the USA is that Apple's competition needs to race to come up with a product that can survive the day when iPhones are being offered on every carrier. Because I see no reason to believe that such a day will not come.

<comment><USER5> I'm not so sure Apple will fix this. I mean, why did Apple tether themselves to AT&T in the first place? AT&T was a giant turd that everyone hated 2 years ago, just like it is now. If anything it's gotten far better in that time, and the iPhone has racked up serious sales. It wouldn't surprise me if both parties are very happy with their relationship, and AT&T willing to concede even more for exclusivity.

They did it because they thought they'd make more money that way, and maybe they did, and maybe they still will. Maybe they knew they'd sell 1/2 as many phones that way, but make 3x more per phone and therefore come out ahead, and maybe that math hasn't changed. Certainly AT&T will cling to the iPhone the way the Cavaliers will to LeBron.

Verizon doesn't need Apple. They'll steamroll AT&T with turds like the Blackberry Storm if they have to because they're far and away the best network in the U.S. and everybody loves them. Apple needs Verizon far more though, which means they won't get anywhere near the deal there they will from AT&T in terms of money, control, etc.

So if I had to bet (with someone who doesn't have insider info of course) I'd say we see continued exclusivity with AT&T. I wouldn't lay odds on it, but I'd take even money.

<comment><USER7> They partnered with AT&T because they needed a company that would let it add things like visual voicemail to its existing system, and rolling that out with a single company would be easier. The argument against Verizon is that Verizon insists on adding branding to every Verizon phone, which Apple is against.

Neither Verizon nor Apple is stupid. If network choice really starts hurting the iPhone, which it isn't because iPhone sales are insane, then Apple will bend slightly to accommodate Verizon. If AT&T continues gaining Verizon users on virtue of the iPhone itself, then Verizon will look for a deal with Apple. The point of the ancestor post is that if your strategy to compete is "we're shittier but use a different network", then you aren't focused on the product, you're focused on making money. John Gruber is writing about product, not about market competition.

<comment><USER5> Wrong and wronger. You can't say that because the iPhone sells very well, network choice isn't hurting it. There might be 2x as many iPhones in consumers hands in the U.S. if they were on Verizon too, and 3x if it were on the other majors on top. I'm clearly just making those numbers up, but they seem reasonable.

The exclusivity was about a lot more than visual voice mail. It had to do with sales channel and profits from ongoing contracts as well, which were probably far larger issues and ones Verizon has absolutely no reason to cave on. And my point was that it might be in both Verizon and Apple's best interest to not work together.

The network is a huge part of the product when it comes to phones. A phone that is constantly dropping calls, one of the iPhone's biggest complaints, or out of fast data range is an inferior product through no fault of its own. In the mobile industry by being on a better network you have a better product.

Nonetheless, the best and worst thing about capitalism is that inferior products win all the time when the salient point of competition isn't product "quality" as you're meaning it here. We in the tech industry love the idea of a Google or an Apple making a better mousetrap and slaying the entrenched competition, but the reality is that for every one story like that, there are 20 of a better product that died due to vendor lock-in, marketing, or some other form of differentiation. Apple's been on both sides of that equation.

<comment><USER7> I didn't say network choice wasn't hurting it, Matt. I said network choice wasn't hurting it _enough to make a difference to Apple_.

I agree that part of a product is its network. However, neither Apple nor its competitors manufacture networks. It would be incredibly lazy to hope to make money solely because you use one third-party network rather than another. In this case I agree with you, it might work, but Gruber doesn't just want a phone that makes money. He wants a phone that _competes_.

</comment></comment></comment></comment></comment></comment><comment><USER8> Probably the single biggest growth stunting problem with the Android platform is the lack of a good advertising campaign. Google, and the handset makers, are allowing Apple free reign of the air waves. If you didn't follow technology it might be easy to believe Apple is the only company selling SmartPhones with third party apps. Google needs to spearhead the campaign and show off a few different Android handset and some applications and generally put their stamp of approval on it. They certainly have the money for it. The lack of aggressiveness on the part of Google with the Android platform has made me question their commitment to it from day one. There are many examples of a first mover taking an insurmountable lead in an emerging market. Google should fight now or it may be a lost cause. Apple is selling A LOT of iPhones.

<comment><USER9> I wouldn't say advertising campaign specifically, so much as basically little marketing campaign targeting actual phone-buyers at all. I didn't hear about the Palm Pre via those creepy advertisements I saw a pile of tech reviews and youtube videos for it.

</comment></comment><comment><USER10> A well-written piece from an avowed fan of Apple. What makes Gruber _not_ a mere fanboi is his willingness to take valid criticisms of Apple seriously.

<comment><USER11> I'm confused by this comment. In this article Gruber is saying how much better iPhones are than everything else. He doesn't seem to take the biggest criticism of "no fixed keyboard" seriously.

<comment><USER12> He has taken the "no fixed keyboard" argument seriously. He wrote about it a number of times. He came to the conclusion that (when implemented well) there is not much of a difference, except user preference.

<http://daringfireball.net/2009/07/mobile_phone_keyboards>

<comment><USER11> It just depends on your definition of "taking it seriously". For example in that article Gruber says

 _Most people can thumb-type just as well, if not better, on an iPhone as they could on a BlackBerry._

I prefer the iPhone to a Blackberry overall, but the argument that there is no advantage to typing on a Blackberry is just not true. Here's a better analysis:

<http://msgnet.org/2008/08/blackberry-vs-iphone-simplified/>

<comment><USER7> That's not an "analysis". That's an _opinion_ just like Gruber's - who, incidentally, has much more in-depth articles regarding thumb-typing than this one, which treats it as an incidental issue.

</comment></comment></comment></comment></comment><comment><USER13> _Emphasize that Android apps are background-capable, and that there is no centralized App Store under one company's ironclad control. There are no tales of rejected Android apps because there are no rejected Android apps._

As much as Apple mucks things up, it isn't without reason that Apple made the apps-in-foreground-only design decision and put so much effort into controlling what software goes on the device.

Unless the Android is going to be marketed to people who care to check which of their background processes has a bug and decides to eats up their battery every once in awhile, there's a big advantage to having apps "just work", even if distribution of those applications is a pain for developers.

</comment><comment><USER14> From a business perspective, making a Porsche-caliber android phone doesn't make too much sense for Google. As far as I know, their business objectives include

1) getting as many possible people online with their cellphones searching the web & clicking ads,

2) stealing _Windows Mobile_ market share,

3) and selling android apps to as many people as possible.

And I believe, in that order.

Besides, I _like_ being able to replace batteries, sim cards, and sd cards on my g1.

edit:formatting/typo

<comment><USER15> I think that Windows Mobile is effectively in the deadpool.

With Microsoft signing a deal with Nokia to include Office into Nokia phones, and Nokia's announcement to ditch Symbian in favor of Maemo there's no room for somewhat outdated Windows Mobile.

Android, Apple, Maemo... there's already too many smart phone platforms to develop for. Since MS dropped the ball with their Mobile OS, They might try to adapt their strategy by partnering with Nokia and getting exclusive rights for some software groups (pre-installs) or some other deals. Most likely exclusive search engine deal.

</comment></comment><comment><USER16> I hope that someone over at Palm reads this and uses it as a playbook for the Pre. Actually, I hope that someone over at Palm already thought of all this, and that this _is_ their playbook. And others as well.

The platform you need to beat in this plan is not the iPhone. It's the _jailbroken iPhone_. Make something that the real tech-heads and first adopters cheer, and they will be your beachhead. Do that, and you can get droves of the rest to follow you!

As usual, the hard part is not the idea, it's the execution.

<comment><USER17> Actually the Pre has all the features the article is recommending for Android: Over-the-air calendar, contact, and email syncing through Google services; background-capable apps; and no centralized App Store under one company's ironclad control. (OK, there's no app store at all, although precentral.net and others are already distributing homebrew apps that can be installed if you download Palm's SDK).

<comment><USER16> I wonder why Google isn't doing an App Store?

<comment><USER18> Did you mean to say "Palm" instead of "Google"? Android has the Android Market, which is like the App Store.

<comment><USER19> Palm has an app store, it's just devoid of content.

</comment></comment></comment></comment></comment><comment><USER20> "A monoculture benefits no one in the long run, because it's competition that drives innovation."

I found myself agreeing with this statement strongly.

<comment><USER21> To the contrary, I found myself shaking my head. Why is it in Apple's interest to be forced to constantly innovate simply to maintain market share?

To say that 'a monoculture is not in the consumer's interest' make perfect sense, but why wouldn't Apple prefer a case where it has no strong competition? Their goal is profit via market share, not innovation for the sake of innovation.

<comment><USER7> _Their goal is profit via market share, not innovation for the sake of innovation._

Apple's goal is making good products. If they wanted shitloads of cash, they could have sold out at any time in the last decade. Instead, they try to make things that people will love.

If Apple has no competitor, they'll continue to innovate, have no doubts. However, they might not innovate in all ways at once, meaning they might not focus on annihilating all their weaknesses. If they've got a competitor, suddenly there's incentive to beat their rivals in every way possible, and the resulting products are even better.

<comment><USER22> > If Apple has no competitor, they'll continue to innovate...

I immediately thought of MS Word when this sub-topic came up. Since establishing its dominance in, let's say 1997 or so, few features have come along that have truly changed the way that users word process (the last one for me was JIT spell checking). But MS has been adding more and more features in an attempt to continue innovating.

There's a Word monoculture and there's innovation of a sort. I think the interesting point that you make is that it's unfocused innovation that seems to be either incremental or aimed at preempting possible minor complaints, rather than exploring new ways for users to create documents. Not that I'm critiquing MS specifically of this—I think this may be a general symptom of monopoly (and I wonder if the same would hold for Apple).

</comment></comment></comment></comment><comment><USER23> "There are no tales of rejected Android apps because there are no rejected Android apps."

I wonder if all of these mini-controversies actually help Apple and the iPhone. It's another headline, another conversation piece, and like Gruber says, most / many people aren't all that unhappy with the App Store. The only reason they're stories and relevant in the first place is because of the iPhone's insane popularity -- the App Store rejection articles seem to further promote such instead of actually hurting it.

</comment><comment><USER24> I guess the only reason why ppl think "iPhone is cool" is just because of slick multi-touch GUI, there's nothing else superior in iPhone per se. I have been programming for both platforms for quite a while and, you know, I find Android's Java less evil than all that iPhone's Obj-C stuff randomly mixed with tons of C wrappers (CoreFoundation) for regular POSIX. I find Android SDK more advanced because, 1) less code does more, 2) it's pretty standard Java whereas iPhone/MacOS is a mind explosive mix of C, C++ and bogus ObjC, c) testing/debugging cycle for Android is significantly shorter and d) Android app deployment is almost instant.

Is there any reason why some vendor cannot implement same multi-touch input on their hardware ? Is it strictly patented ?

<comment><USER25> The G1's hardware does support multi-touch, but Apple requested that it be disabled. [http://digital.venturebeat.com/2009/02/09/apple-asked- google...](http://digital.venturebeat.com/2009/02/09/apple-asked-google-not- to-use-multi-touch-in-android-and-google-complied/)

The Palm Pre supports and uses multi-touch in the same manner as the iPhone.

It would seem that multi-touch isn't Apple's sole intellectual property, though they have IMO implemented it the best.

<comment><USER24> It's so frustrating when progress gets stuck against someone's greed. I think Google should make Android open source so everyone could commit their code to support features despite the will of Apple or mobile carriers. And this will also invite smaller vendors to use and populate Android.

<comment><USER25> Android is open source (<http://source.android.com/>). The hardware is proprietary (AFAIK). People have run MT demo applications.

 _It's so frustrating when progress gets stuck against someone's greed._

I would actually argue that greed has driven the majority of progress over the last century.

</comment></comment></comment></comment><comment><USER26> Er, when the G1 came out, it was already _ahead_ of the iPhone for many purposes: copy/paste, background apps, real keyboard. The newest iPhones have one and a half of those (push notifications being worth some fraction of real background apps), and if they came out with an iPhone with a hardware keyboard, I'd consider buying one.

In the meantime, though, I'm waiting for the Motorola Sholes. :) I just hope they don't mess that up.

</comment><comment><USER27> Is no one trying to get Android working on an iPhone? Surprised I haven't heard anything about that yet.

</comment><comment><USER28> Google were always going to have a tough act to follow. What Apple have pulled off with their platform is nothing short of amazing: but they have used technology they had, and adapted. Google is inventing a lot of the stack, and aren't rolling out on a single device.

</comment><comment><USER29> I think going head to head with Apple on the high end is a mistake. Google just isn't geared up to ever produce stuff that's quite as beautiful as what Apple consistently manages.

On the other hand, there's a ton of space below that, and a ton of space to make Apple clamber ever higher up the value chain in order to capture the margins they want, keeping them out of the mainstream market.

</comment><comment><USER30> And the manufacturer to do this? Nokia.

Frankly, if the N97 only ran Android and had a better touch screen it'd do most of what this article recommends.

<comment><USER15> Nokia is committed to Maemo. <http://en.wikipedia.org/wiki/Maemo_(operating_system)>

Here's the announcement: [http://www.ftd.de/technik/it_telekommunikation/:Strategiewen...](http://www.ftd.de/technik/it_telekommunikation/:Strategiewende- Nokia-verliert-Vertrauen-zu-Symbian/551805.html)

<comment><USER31> It's not an "announcement". Quite the opposite: Nokia has explicitly denied FTD's report that they would be abandoning Symbian. However, phones equipped with Maemo 5 are definitely coming to the high end of Nokia's range. (Symbian's strength is that it works with substantially cheaper hardware than any of the competing smartphone OSs, which is great for Nokia, as they are particularly strong globally at the lower end of the market and in emerging markets.)

The important point is that Nokia is adopting the Qt toolkit across the range. Both Symbian and Maemo will have Qt at the top of the stack by 2011. At that point, the underlying operating system won't be particularly relevant to application developers anymore: C++ software written to Qt (with the upcoming Orbit touch UI framework) will be just a recompile away from being ported to Symbian.

<comment><USER15> Important correction. Incredibly I've managed to miss that one.

</comment></comment></comment></comment><comment><USER32> Here at FairSoftware, we are watching closely which platform developers are most interested in, and iPhone is almost 10X ahead of Android.

I have been thinking for a year that Android would catch up, but I still don't see real signs.

<comment><USER33> "Here at FairSoftware, we are watching closely which platform developers are most interested in, and iPhone is almost 10X ahead of Android."

Why do you think that is? The sense I get from people interested in iPhone dev is that they think they'll make good coin from their apps.

<comment><USER34> Well, in our case (indie iPhone developer), I wouldn't touch the combinatorial explosion of testing on random hardware with random features with a 1000' pole.

Also, I hate Java--though it has GC, it's still basically a static language, and horribly verbose to boot.

</comment></comment></comment><comment><USER35> Just wait while it will be relatively easy to replace WM on devices like this - <http://www.htc.com/www/product/touchpro2/specification.html> \- like the process of downloading and installing (replacing windows) linux in 90's.</comment>


Show HN: App like Domino's but only for local pizza - <AUTHOR> https://www.speedslice.com

<comment><AUTHOR> Here's the discussion from reddit's r/startups from yesterday: [http://www.reddit.com/r/startups/comments/1djwow/hey_rstartu...](http://www.reddit.com/r/startups/comments/1djwow/hey_rstartups_i_spent_the_last_several_months/)

</comment><comment><USER2> Would it be possible to have it tell me there isn't anywhere in my area before I put in my credit card information. I don't know if that is a quirk of just the web widget or if the apps do the same though.

<comment><AUTHOR> Notifications are better on the app than on the web widget, but I don't think we've built one to tell you there are no places near you before you enter in your information. We'll add this though, it sounds highly useful.

</comment></comment><comment><AUTHOR> The app's restaurant network currently covers greater Boston but will be expanding soon.</comment>


H-1B visa holders add billions in taxes and spending the US economy - <AUTHOR> https://www.stilt.com/blog/2020/06/the-true-economic-impact-of-h1b-visa-holders/ <comment><USER2> Sounds like a form of servitude that no American would approve of. We should pay them a competitive wage, at market prices that they compete with American's for. Also make them eligible for Social Security. This special program is not fair to them and it is stagnating our IT industry.

"H1B workers contribute more than $27.1 billion dollars per year towards Social Security and Medicare benefits (that they may not be able to benefit from)"</comment>


Mastercard sued for $19B in Britain's biggest damages claim - <AUTHOR> http://www.reuters.com/article/us-mastercard-lawsuit-britain-idUSKCN11E2S9 <comment><USER3> > Two years ago, the European Union capped the fees retailers pay at 0.2 > percent for debit cards and 0.3 percent for credit cards.

How is it possible that retailers in the U.S. and Canada pay 2-3% for credit card usage, or ten times greater than legally permitted in Europe? I have to assume that 0.3% is profitable, otherwise the credit card companies would simply stop operating in Europe. Could this be a misprint in the original article or are Americans and Canadians being horribly ripped off?

<comment><USER4> Much of the 2-3% US companies charge is spent in the form of rewards in the US. The fact that US companies offer 1-1.5% back to customers as rewards implies they can support lower fees to merchants if they get rid of rewards. Do EU cards have cash back programs?

<comment><USER5> So, the card gives rewards and charges higher merchant fees. The merchant raises prices to offset the fees, which offset the customers' rewards. Friction.

This is exactly like subsidizing farm, ranch, and oil but then raising taxes to pay for the subsidies indirectly.

<comment><USER6> >The merchant raises prices to offset the fees, which offset the customers' rewards.

If this were true, why would merchants care about merchant fees?

<comment><USER7> They don't, really, as long as they're not disadvantaged compared to the competition. The people who are getting screwed are people who pay cash or use cards without rewards programs.

<comment><USER6> Oh...I assure you they do! Why? Because these fees come out of profits.

<comment><USER7> Merchants will charge more when profits drop. None of this is coming out of profits. They only time it comes out of profits is when competitors have some advantage that prevents the merchant from passing increases on to the customer.

<comment><USER6> If raising prices increase profits, then you're doing prices wrong! Raise prices!

<comment><USER7> The key is whether or not everyone else has to raise prices too.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> I'm intrigued by this type of case - this article doesn't mention any specific legislative requirement that fees should have been less during the period concerned. It's a strange precedent that a company can be retrospectively liable for charging "too much".

This is similar to the case of Apple and their tax dues in Ireland.

Maybe someone with a better grasp of legal matters can explain a mechanism that gives this case a chance. Otherwise I can't see this claim succeeding without causing a great deal of business uncertainty.

<comment><USER9> It's not that unusual in the antitrust context. The whole theory of antitrust is that anti-competitive behavior allows a company to charge prices greater than they would be able to charge in a competitive market. If a company is found to have engaged in anticompetitive conduct, it's common in a civil suit for the measure of damages to be the difference between the prices actually charged and some judicially-determined market price (usually based on an econometric expert analysis).

<comment><USER8> This makes sense - I think the Reuters article was quite misleading. I posted another comment [1] with a link to a Guardian article that supports what you wrote.

[1] [https://news.ycombinator.com/item?id=12463745](https://news.ycombinator.com/item?id=12463745)

</comment></comment></comment><comment><USER10> My wife and I stopped using credit cards for most things because we're fed up with the whole system. We use cash for groceries and such, the bank pays all of the bills automatically, and we use debit cards for retailers that we trust online (mostly amazon). Credit card use is fairly rare in my house these days.

<comment><USER11> How do you build credit history? Also, isn't it easy to dispute credit card transactions as opposed to debit card because with a debit card money is immediately removed from your account.

<comment><USER12> Why would you need a credit history if you don't use credit?

<comment><USER13> Some employers will run credit checks on prospective hires.

<comment><USER14> I've had my credit checked as part of background checks the last two times I've changed jobs. AFAICT they aren't interested in my (abysmally low) credit score, but are rather using it as a signal that I am who I claim to be - <USER2> is essentially what the background check is for in the first place.

A very low credit score doesn't stop me renting an apartment either, probably for similar reasons. Although it did mean I couldn't rent in the presidio

</comment></comment></comment></comment></comment><comment><USER15> Wondering if the crux of the suit could be applicable/have implications in other parts of the world as well?

<comment><USER16> That's almost guaranteed. Most other parts of the world are (even) more corrupt though.

</comment></comment><comment><USER17> This shows how important for Fintech companies to care for regulations and compliance as equally or more than just focusing on the technology side.

</comment><comment><USER18> To make sure I understand, Mastercard illegally overcharged for credit card processing, and merchants passed the charge onto consumers, so consumers have standing to sue Mastercard.

If I've got that right, can someone with an understanding of British law explain how that works? In a case like this in the US I don't think consumers would be able to sue a card issuer.

</comment><comment><USER19> I wouldn't mind using my debit card more often if it had the same type of insurance against fraud as my credit cards.

I don't really care about cash back and I know that retailers pay high fees, but I don't get any kind of cash discount with debit other than gas and I don't want to risk having my check account cleaned out.

<comment><USER20> If you put everything on a good cash-back card, and you pay off your balance every month, it can really add up. Let's say you run $30k a year through your card and have something like the 2% cash back Citi DoubleCash Mastercard. That's $600 a year you're foregoing by not caring about cash back. Just a thought.

<comment><USER19> It's not that I don't care about cash back, but I would simply prefer prices in general be 2% cheaper rather than having to claim them via a cash back card.

This type of thing warps price perception and just passes the costs back onto consumers in other ways.

<comment><USER21> It probably passes the costs back onto poor consumers (or the ones that can't get credit cards).

</comment></comment></comment></comment><comment><USER22> > _Mastercard is alleged to have done this for 16 years between 1992 and 2008 > ..._ Two years ago _, the European Union capped the fees retailers pay at > 0.2 percent for debit cards and 0.3 percent for credit cards._

Seems the EU is getting rather fond of the retroactive law change shakedown, at least when it comes to US companies.

<comment><USER23> Two years ago the EU capped the fees, but that's immaterial to the fact that the fees prior to that were determined to be illegal under anti trust laws. The article is confusing, it's written badly and is mixing numbers and laws up. My understanding is this is not a retro active shakedown.

Also, I can only assume you're referring to Apple's case. My understanding is that calling it a retro active law shakedown is misleading. It was always illegal (who to blame for facilitating the behaviour is another question).

Consumer protection was one of the main reasons I voted to stay in the EU. Without the EU's clout these companies would be exploiting consumers relentlessly indefinitely and it's good to have an entity with clout who are able to fight back.

<comment><USER24> How is a 1% fee excessive? If you don't like MasterCard's rates, then don't accept MasterCard. If the government wants to ban such rates, then ban them. But allowing it for 20 years then digging up some vague "excessive fees" provision and demanding two decades and $20 billion worth of "excess profit" is nothing but a business-hostile dishonest shakedown.

<comment><USER23> > If you don't like MasterCard's rates, then don't accept MasterCard.

Visa and Mastercard basically have a monopoly on the market. To not accept Mastercard would do orders of magnitude more damage to your business than the impact your protest of not accepting them would have. It's completely unrealisitic to present that as a sensible option.

> is nothing but a business-hostile dishonest shakedown.

From the Guardian:

"MasterCard charged billions of pounds of unlawfully high fees for its sole benefit and to the detriment of consumers. It has already been found to have broken competition law, the basis of which was to protect consumers, and that cannot be disputed. There is no basis upon which MasterCard can contend that its card fees were not unlawful."

So actually, Mastercard are the ones being business-hostile here.

<comment><USER25> Well if they have a monopoly then someone should tell Diners Club, Discover and UnionPay to pack up shop and go home.

<comment><USER26> Oh, cards with <1% market share (Discover) or not issued at all in Europe (Diners, UnionPay)?

<comment><USER27> There are Diners cards in Sweden at least. Last time I checked, Sweden was still in Europe.

<comment><USER26> Thanks for noticing, I mixed up Disover and Diners. The former is not issued in Europe, the latter has under 1% market share (according to the Nielson Report).

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER24> How is it possibly fair to demand repayment for two decades of "excessive fees" which are not defined in the law and were only clarified by the EU in the last two years. Unless I'm missing some crucial information, this just looks like a shakedown of an American company.

<comment><USER28> Isn't this what happened with Apple in Ireland? They only decided _now_ that it's wrong, yet they want apple to pay back for the last 20 or so years? Even though back then it wasn't seen so much as a problem.

<comment><USER29> Well no, in that case they decided that Ireland violated the treaties it previously signed.

I can't compare to this case but that was only retroactive in that they discovered the problem later.

<comment><USER28> which is even more confusing, as the govt is being rewarded for violating treaties by being paid back all the tax. Was the govt not more in the wrong than Apple was? (sorry, thread hijack)

<comment> k-mcgrady It's not a reward for the government, hence why they have lodged an appeal. Ireland has a lot more to lose by accepting that tax money than they would gain.

</comment></comment></comment></comment></comment><comment><USER30> I live in france and many small stores don't accept debit card payments if it's under a certain sum, like 10 or 5 euros. I asked once, and I was answered that banks those stores for each of those payments, so stores refuse payments if it's under, that's what I think is happening.

I already saw stores who don't accept debit cards. I don't know the reason, but the equipment might be too expensive for them. Obviously debit card technology is mostly american.

<comment><USER31> > Obviously debit card technology is mostly american.

There's a french version since 1967 and it uses a chip since 1992 (probably the first country where cards with chips was in widespread use)

[https://en.wikipedia.org/wiki/Smart_card](https://en.wikipedia.org/wiki/Smart_card) [https://en.wikipedia.org/wiki/Carte_Bleue](https://en.wikipedia.org/wiki/Carte_Bleue)

<comment><USER30> > In 2010, Carte Bleue was phased out and was replaced by Visa Classic debit.

The system mostly relies on american systems. I don't have anything against it, it's just that originally, it's american, for the same reason PC computers technology is. Non american countries don't really have their own standard, not that it matters, but in term of how the expertise and business are owned, it does matter.

<comment><USER31> The global system won (because convenience), but carte bleue worked fine for over 40 years. Many country still have their own standard (e.g. EC Card in Germany, Dankort in Denmark, etc.), but yes over time the Mastercard/Visa duopoly tends to win.

And as far as I know CB was not based on american technology (and the fact that they used chip-pin so early was kinda unique), do you have source to the contrary?</comment></comment></comment></comment>


Additional Notes on "Drawing Dynamic Visualizations" (2013) - <AUTHOR> http://worrydream.com/DrawingDynamicVisualizationsTalkAddendum/ <comment><USER2> After using d3 to produce a slightly customised bar chart, this tool certainly seems more pleasant to use.

Too bad it was never actually released (as far as I know).

<comment><USER3> Some related open source projects that were released, for those who are curious:

[http://aprt.us](http://aprt.us) By Toby Schachman & co over at CDG

[http://tonysherbondy.github.io/datadrawer/](http://tonysherbondy.github.io/datadrawer/) DataDrawer, by Tony Sherbondy & co, very much directly trying to implement the tool that Bret originally demoed.

</comment></comment><comment><USER4> PaintCode ([https://www.paintcodeapp.com/](https://www.paintcodeapp.com/)) is a drawing app that shares a few of the features of this tool. Particularly the variables and expressions feature ([https://www.paintcodeapp.com/documentation/using- variables](https://www.paintcodeapp.com/documentation/using-variables)).

</comment><comment><USER5> What book is that from 1929 that is mentioned?</comment>


Kinds of Focus - <AUTHOR> http://andrewbadr.com/log/18/kinds-of-focus/

<comment><USER2> _[Reading articles online is] a shallow kind of learning._

I couldn't agree more, and often wonder if we've even begun to work out the implications of this.

<comment><USER3> I also agree, and I'm also troubled by how addicted I've become to shallowly browsing dozens of such articles a day. I find that it's getting harder and harder for me to concentrate on something like a lengthy book for long periods of time, something I used to do frequently. But it's ironic that the author of that article is himself writing articles in his blog for people to read online - articles that contain some interesting opinions but have no particularly deep content.

<comment><AUTHOR> Working on it...

</comment></comment></comment><comment><USER4> Wow -- just reading this, I felt my concentration patterns change.

This is why, as a Christian, I meditate on _something,_ instead of simply emptying my mind. I spent an hour or so in Psalm 119 this morning, contemplating a few verses, comparing with my life, and shaping my thinking to fit those verses.

Here's a thought. What if 50 of us committed to checking /newest at a particular time (say, 5 am), finding 2 articles worth reading, and adding a substantive, reflective comment to start things off?

That would gigantically impact Hacker News if we did that. In fact, I'm going to do that right now.

</comment><comment><USER5> Too long; Didn't Read

TL;DR

TL

We're already seeing conventions popping up to deal with this change in behavior. They just aren't formalized yet.

I think this will be another advantage that hypermedia will have over regular old print, you will be able to present your information in "layers". A TL;DR for reference, a summary, and then the full article.

Of course, that speaks nothing to the nature of the actual articles. I think theres a point where you've "read enough" and need to go do something else for a while, see what works and what doesn't. I took a two month long hiatus from HN to focus on other stuff recently. It helped. The first n articles at some point become much more helpful than the next nth articles.

<comment><USER6> > I think this will be another advantage that hypermedia will have over > regular old print, you will be able to present your information in "layers". > A TL;DR for reference, a summary, and then the full article.

Abstract, introduction, paper.

<comment><USER5> I was talking about in other contexts besides Academia. But yes, that is one solution. And it does work in print. But it has to co-exist alongside the other content.

</comment></comment></comment><comment><USER7> >When the number of incoming stimuli is reduced, the mind gradually perceives finer details in the ones that remain. This is famously true of blind people, but you can consciously narrow your attention to the same effect.

Or starts hallucinating stuff (ganzfeld effect, Charles Bonnet syndrome)

"Open systems communicate and live. Closed systems do not communicate, become non-discerning, uninteresting and die." - Col. John Boyd

</comment><comment><USER8> I disagree. When I find an article online that exposes a point of view that I haven't seen yet about some matter, I often keep thinking about it the whole day and I even discuss it with other people. That's really a contribution to my mind.

Plus, it's only exploring new things that you get interested and feel motivated to learn more about them.

</comment><comment><USER9> Keeping an open mind is always great. However, being unable to focus on one task and become superior at it is quickly becoming an issue. Today, if I remember correctly, the average attention span is only 8 seconds. Remember: Jack of all trades is the master of none.

<comment><USER10> Disagree with your last point.

A jack of all trades is a master of the unique combination of his relative skill in each of those trades.</comment></comment>


Programming languages are not languages (2018) - <AUTHOR> https://medium.com/@old_sound/programming-languages-are-not-languages-c6f161a78c44 <comment><USER2> I know this isn't related to the article's content, but I've certainly, and sheepishly, thought at some point in my youth that learning programming was pretty admirable like learning a second language. Sure, you learned French, but I learned C++, I would think to myself, envious.

Then I actually learned a second language in my late 20s and chuckle at my former hubris (well, more like wishful thinking) that a programming language was comparable.

Programming was just something my socially destitute self did for fun in the comfort of my bedroom. To learn how to speak a language, I had to (shudder) talk to other people. And socializing with people isn't this finite, self- defined virtual world like your game.js file where you just invent your own physics: You have to actually figure out the social world.

<comment><USER3> This is an illusion that was fed early on by people working on programming. The reality is that programming languages are languages, but only for a very restricted vocabulary that is not even close to what can be done on human languages. Also, being fluent in a human language involves not only reading and writing, but also talking, which as you pointed out is a considerably more complex skill.

<comment><USER4> > Also, being fluent in a human language involves not only reading and > writing, but also talking, which as you pointed out is a considerably more > complex skill.

I would push back slightly on this. I don't consider the ability to have a conversation in french to be a greater achievement than reading (and understanding) a latin text.

<comment><USER5> ==I don't consider the ability to have a conversation in french to be a greater achievement than reading (and understanding) a latin text.==

Computers have a much easier time translating text than they do holding conversations. That might be an indication that one is more complex than the other.

<comment><USER6> Translation is far harder than holding conversations. It means that you must be fully aware of tiny cultural differences in the languages. Just because two words have the same dictionary definition doesn't mean they actually are equivalent. However, the quality of translation usually doesn't matter as much as the quality of a conversation precisely because a human wrote the original text and the recipient knows the target language and culture.

>That might be an indication that one is more complex than the other.

It just means that most of the work is done by the humans.

<comment><USER5> You have to do the same thing when speaking. The addition of body language and tone, which text doesn't have, make it more complex.

If it was easier for computers to do it, they would. That humans do the work is further evidence it is more complex.

</comment></comment></comment></comment></comment></comment><comment><USER7> That's interesting -- although I agree that it's important to distinguish programming languages from spoken languages and that they do very different things, I could imagine that the Sapir-Whorf hypothesis applies _better_ to programming languages than to natural languages!

After all, we hear all the time that programmers in a particular environment analyze problems differently, or think of different solutions, or do or don't write certain kinds of bugs, compared to programmers in a different environment. Since strong forms of Sapir-Whorf have come in for so much criticism among linguists as applied to natural language, I'm not sure my intuition about this points in the same direction as the author's!

<comment><USER8> Paul Graham has an interesting take on the idea that the strong Sapir-Whorf Hypothesis applies to programming languages, though its not exactly phrased that way: [http://www.paulgraham.com/avg.html](http://www.paulgraham.com/avg.html)

I tend to agree with your hypothesis: firstly, I don't think that the strong form of the Sapir-Whorf Hypothesis holds for natural languages [0], which sets the bar pretty low for PLs. And secondly, the SWH does (seem to) hold for programming languages: the cognitive tools and abstractions reached for by users of language A can be very different from those reached for by users of language B. Lisp users, Haskell users, C users, Forth users, etc all seem to think about problems differently. It would be interesting to see some empirical work on this.

[0] Almost all post-Chomsky linguists agree with this, but there are a few that have tried to argue that you can kind of bend the strong form to make it fit some empirical results; see the color word research of Paul Kay for example -- [http://www1.icsi.berkeley.edu/~kay/Kay&Kempton.1984.pdf](http://www1.icsi.berkeley.edu/~kay/Kay&Kempton.1984.pdf)

</comment></comment><comment><USER9> "I'm not sure [the sapir-whorf] hypothesis applies to programming languages"

Is that really true? Having moved from OO programming to distributed functional programming, I definitely think that my worldview is different; I'm constantly thinking about how to deal with systems unreliabilty and message passing latency, which is not where the bulk of my time was spent thinking when I was writing for non-concurrent systems with shared memory

</comment><comment><USER10> I have two responses to this:

First, I don't think he quite gets what the Racket folks mean by "language oriented programming." They're not talking about adding stuff to the whole language. They're talking about making the toolbox for generating languages and connecting between them so straightforward that you build something more than DSLs, more like adapted variants that share some kind of common semantic core.

Second, a human language is a mechanism for establishing and playing language games. A programming language, like any other formal notation, is a means of expressing the subjects of a range of language games. Consider the various language games you play on a function: summarizing, calculating run time complexity, simulating, listing side effects... Language oriented programming is a way of saying that there are often specialized language games that are important in a particular context but nonsense outside of that context, and it would be nice to make it easy to engage in them in that context without trying to force the whole world into that image.

</comment><comment><USER11> It seems like the author is wrong about the weak Sapir-Whorf hypothesis not applying to programming languages.

This is anecdotal, but once I learned Clojure, some things about the way I thought about problems changed. I didn't think about things in a functional way before that. The same has happened since I started learning Rust. Now I'm thinking about ownership and lifetimes. And in C I had to manually allocate and free memory.

Perhaps the hypothesis should be amended to refer to programming language paradigms, or something along those lines.

</comment><comment><USER12> > And here's why I don't think the Sapir-Whorf hypothesis fully applies to > programming languages. When we program we categorize the world in English > (or Spanish, or any other natural language), and then we encode that into a > program.

I certainly don't "categorize the world in English" before "encoding that into a program".

I've also met dozens of programmers over the years who found it easier to "show code" than to explain in English (or Spanish or any other "natural" language). I would be shocked to discover this is an isolated phenomenon.

In Iverson's book "A Programming Language" (1962) says in §1.1:

 _Ordinary English lacks both precision and conciseness. The widely used Goldstine-Von Neumann (1947) flowcharting provides the conciseness necessary to an over-all view of the process. only at the cost of suppressing essential detail. The so-called pseudo-English used as a basis for certain automatic programming systems suffers from the same defect. Moreover, the potential mnemonic advantage in substituting familiar English words and phrases for less familiar but more compact mathematical symbols fails to materialize because of the obvious but unwonted precision required in their use._

So I'm not sure Iverson would agree either.

Maybe just start with something simple like: Why is it important to classify programming as "not a language"?

I had a hard time understanding what the author might think the answer to this question is. The only thing that jumps out at me is this:

> … after seeing what happened with Scala and SBT, where sometimes the project > build description ends up written directly in Scala, I'm not sure having one > language that encompasses all is something I'd want …

> Is it worth to expose users to an alien configuration format, just so the > developers of the project can program in just one language?

If you seek a purely utilitarian answer; an answer to what makes the software best perform the intended function, then yes it is worth it: There will not be bugs in the code you do not write.

However getting people to use your software (i.e. "Sales") means making the software accessible to _other peoples expectations_ and that's a social exercise.

This is a business decision with simple economic drivers, and not a technical one. Some languages are simply better at sales than others; English is the most widely-spoken language in the world, but that doesn't mean English poetry is superior to Chinese poetry.

</comment><comment><USER13> > When we program we categorize the world in English (or Spanish, or any other > natural language), and then we encode that into a program.

Speaking solely for myself, I don't find this to be true. Yes, it does seem to be the case that you have to represent the program in your mind before you can accurately convey it to the computer. But no, I don't find myself using words to represent that. Maybe I use English to talk myself through the concepts, but I would not conflate the mental model with the words I use to describe that model.

My mental model feels a lot more like data structures -- abstract relationships between parts of the program, degrees of closeness, and senses of information flow. I can't represent the brainfeel of that in words without losing too much of it. And very often, yes, the semantic world in which I _know_ this program will be embedded -- by way of a programming language that exposes that semantics -- does influence how I think about the program.

> If we think of programming languages as tools, then it becomes evident how > some programming languages lend themselves naturally to problems that in > other languages might be — while not impossible — hard to solve. See for > example Erlang, a language that's tailored for Concurrency Oriented and > Message Passing programming, or Racket itself, a language tailored for LOP.

I don't understand the proposed distinction. If we can agree that the "tool" affects how you think about a program built using that tool, aren't we ultimately just quibbling over what the word "language" means? I feel like that's missing the point of the assertion that programming languages are languages -- you still end up with some form of Sapir-Whorf.

The idea of a "programming language paradigm" better captures the essential semantic distinctions between languages, but even these can be too coarse- grained. I'm more interested in adjectives like "single-ownership", "message- passing", "immutable", "backtracking", and so on. Words that describe the semantic world that the PL purports to be an interface to. Maybe that's what the word "tool" is supposed to convey, here, but then I don't think PL researchers really disagree.

</comment><comment><USER14> > And here's why I don't think the Sapir-Whorf hypothesis fully applies to > programming languages. When we program we categorize the world in English > (or Spanish, or any other natural language), and then we encode that into a > program.

I'm not sure I do that. I'm often "thinking" about code by stubbing out functions or classes. I definitely don't translate algorithms I'm familiar with from English, I just write them directly.

But say that's how we do work. What happens next? Someone else looks for a bug. Or someone else adds a feature. Maybe you refactor.

A real software project is a team effort that requires countless interactions between authors over time.

The structure of the programming language dramatically influences the development of a large scale project. There are selective pressures all the time, you can rarely put into words why certain things are "idiomatic" to a language, but when a particular expression is confusing or odd, someone is likely to clean it up before long.

So, yes, programming languages are absolutely languages.

</comment><comment><USER15> "And here's why I don't think the Sapir-Whorf hypothesis fully applies to programming languages. When we program we categorize the world in English (or Spanish, or any other natural language), and then we encode that into a program. So the programming language I'm using, is not limiting the way in which I see the world."

I agree that programming languages and natural languages are different. That being said, programming languages do meet the definition of languages bc they communicate structured information.

Example: "if x < y { string z = `${x + 1}` } else { string z = `${y - 1}` }" . This short program communicates a structured piece of logic with clear meaning. It's not all encompassing, but then, neither is a English.

<comment><USER16> According to Sapir-Whorf, what I think is affected by what the language I think in, that lets me express my own thoughts to myself. If there's no concept in English for an idea that occurs to me, it may remain muddled or I just might not become fully conscious of it.

This is not the case for programming languages, because programming languages, even non-imperative ones, only have one mode: how to do something. They are not a way of describing the world. If I can't figure out the C++ code necessary to accomplish the task I want, that doesn't mean I can't imagine what that task is. Determining the task and figuring out how to code them are very different.

<comment><USER12> > If there's no concept in English for an idea that occurs to me, it may > remain muddled or I just might not become fully conscious of it.

You probably won't be. I have observed a similar phenomenon when trying to imagine truly new things.

> If I can't figure out the C++ code necessary to accomplish the task I want, > that doesn't mean I can't imagine what that task is.

If you can't figure it out in C++, but you could in (say) assembly (or Perl, or Python or whatever), then I would agree with that and would say I don't think that's an essential limitation of programming languages, and just that C++ is unfamiliar and byzantine.

But if you can't figure out the task in C++, but [believe] you could in [plain] English, I'd say you're just wrong: Whenever someone has told me "the ticket is perfectly clear" it most definitely was not. If your experiences are different, I'd like to hear about them.

</comment></comment></comment><comment><USER17> I believe programming languages have few things in common with natural languages. Even though some experts in psychology claim that foreign language skills is a better indicator than math skills if someone will be good at learning programming languages or not.

At MIT some people tried to write code using natural language: [http://news.mit.edu/2013/writing-programs-using-ordinary- lan...](http://news.mit.edu/2013/writing-programs-using-ordinary- language-0711)

Both programming languages and natural languages can be described in terms of Formal language theory and that's the most they have in common: they have words, grammar.

</comment><comment><USER18> Well, language is a wide term. Even mathematics has been called "a language" many times (e.g. the language in which Nature "talks to us", the language used by physics, etc.). Indeed, a language is a system of symbols that is designed to facilitate communication, and one can certainly think of a programming language as a way to communicate programs to a computer!

</comment><comment><USER19> No mention of Noam Chomsky.

</comment><comment><USER20> I'd say the strong version of the Sapir-Whorf hypothesis applies, but the subject is the computer, not the human.

<comment> Avi-D-coder Any turning complete language can only uphold the Sapir-Whorf hypothesis at the level of types, kinds or higher.

By definition at the term level you can express any cognitive categories. The weak hypothesis applies, since languages encourage use of terms in cognitive categories amenable the type system.

</comment></comment><comment><USER21> I really like this talk from Splash 2016 by Amy Ko called "A human view of programming languages". It explores various metaphors on Programming Languages including PL as language. I think she makes a very good case for why it is important to analyze programming languages from different perspectives.

[https://medium.com/bits-and-behavior/my- splash-2016-keynote-...](https://medium.com/bits-and-behavior/my- splash-2016-keynote-81cc802f5f6e)

After watching Amy's piece, I have to disagree with the conclusion of the author at hand: "I'd say it's better to use the tool metaphor, and see where that framing could take us."

I think the PL as tool metaphor has been almost as thoroughly been mined as the PL as math metaphor. Most PL conferences are filled with papers approaching PL from these angles -- we know where that framing takes us. The other metaphors are more interesting to me and I think are more ripe for interesting new research (good luck getting them into some PL conferences though).

</comment><comment><USER22> > And here's why I don't think the Sapir-Whorf hypothesis fully applies to > programming languages

I don't think it applies to languages, period.

The Sapir-Whorf hypothesis seems to me like a classic case of inverted causality ("wet streets cause rain", as Michael Crichton put it). Sure, it's definitely possible that in a given instant one's language might constrain or otherwise influence one's cognition, but it's vastly more likely to be the other way around: if the language is unable to support a concept in one's cognitive process, an individual is prone to bend the language, whether by grabbing a loanword from some other language, recombining roots to create a new word, or what have you.

That's the fundamental issue with programming language design that I think the author's trying to articulate: they're _designed_ , and more fatally, they're designed in such a way that they're rarely able to evolve as needs dictate. The many Eskimo words for snow didn't come down from on high and conjure those forms of snow (and their perception by humans) into existence; rather, I strongly suspect people encountered (and had to describe) these different kinds of snow often enough that they found it worthwhile to give them names rather than merely descriptions. Phrases turned to compound words turned to shared roots.

This is in contrast to most programming languages; yes, at some point they were obviously created to satisfy a certain need and give "words" to certain computing concepts, but very rarely are they able to fully evolve to address new computing paradigms (at least not without rigidly declaring a new version or new dialect of the language with new syntax or keywords, which just punts the issue a bit farther into the future). There are a handful that are better at this (Lisp, Forth, and Tcl - and their respective descendants - all come to mind), and they happen to lend themselves well to DSLs, but I feel like they stop just a little bit short of being able to entirely evolve on their own; programming languages need implementations and runtimes to be actually useful, and few (if any) languages provide the mechanisms to freely manipulate their own implementations/runtimes (there are certainly plenty of Lisps that can bootstrap themselves and other Lisps, but that's almost always an ahead-of- time operation with little to no exposure to the language user, nor any practical means for said user to leverage that within one's own code to tailor the language and the implementation thereof to the exact problem domain).

<comment><USER23> I don't think Sapir-Whorf (in a weak form) is just a case of inverted causality. Sure, matters of perception shape the language we speak; this happens all the time. But the key point is that the reverse direction happens too. Language is a perfect medium to transport preconceived notions and because we don't think so much about it (indeed, we think lots of things are natural, when they're actually particular features of a single language) it's particularly subtle. Examples of this include gender/classifier systems, colour perception, evidentiality markers, or one of my favourites, spacial recognition: one famous experiment shows that members of a particular Australian aboriginal tribe (Guugu Yimitthir) think in terms of absolute cardinal direction even in everyday situations instead of left and right; in fact they don't even have words for left and right. Of course, the reason for this development is originally due to the landscape around them, but now the language which lacks such terms serves to reinforce this worldview.

My only qualm with Sapir-Whorf is that it only credits language with this cultural transmission. But there are a lot of other things that can do this (arts, rituals, customs), even if language is a big part of it.

Well that and that the original version ("the Hopi don't know the concept of time") is a bit ridiculous.

</comment></comment><comment><USER24> In an article that argues that something is or is not a language, I would expect the term to be defined first.

Ironically, a definition for the term "define" is given.

</comment><comment><USER25> > While the world is a continuum, we slice into tiny pieces, we discretize it > with words.

To me the world is objects. To you maybe it's a continuum.

<comment><USER26> Any object I could name seems ultimately arbitrarily defined at some point, it's "object-ness" simply a thought in my mind.. and even that only as long as I actively uphold it, since a thought isn't an object either, but a process. Sure, I also slice the worlds into things with words (or unspoken thoughts that do the same thing), I have quite the ego actually, and I find that fun; but when I recursively ask "what is X?" and then ask that about whatever it consists of or is affected by, it quickly ends up nowhere, in a cosmic shrug.

Where _exactly_ does an atom begin or end? Where does my body end, and does it also occupy the vast empty spaces between atoms, and so on? Is it solid with an outside, or rather just a bunch of probability clouds loosely held together by mysterious forces? Considering all mass attracts all other mass in the universe, no matter how weakly, can it be considere separate?

All I can say for _sure_ is that "there is _something_ ", or "there is _something_ going on", but I don't even know which of either, or if one follows from the other.

</comment></comment><comment><USER27> Meanwhile, web developers complain about having to learn and master a half dozen languages and frameworks.

</comment><comment><USER28> The post just highlights one of computer science's biggest problems: naming.

</comment><comment><USER29> is medium code for i've just read about something i haven't read before and here's some loosely related thoughts? the author is not even familiar with racket nor does he seem particularly familiar with what language oriented programming (LOP) is.

the author does not give definitions of things that he makes comparisons between. for example, no definition of language, natural language, programming language, or metaphor is given, and he even conflates natural language with language. and this entire article seems to be based on analyzing the meaning behind a footnote.

what he misses is that the racket/LOP community think of programming as communication between people and not between human and machine. matthias felleisen says so here ([https://www.youtube.com/watch?v=91hynuuM_As](https://www.youtube.com/watch?v=91hynuuM_As)). that is the very definition of language: the words, their pronunciation, and the methods of combining them used and understood by a community (merriam- webster). this definition is actually a little overly specific, but one thing i am reminded of is the text from SICP that says:

> when we describe a language, we should pay particular attention to the means > that the language provides for combining simple ideas to form more complex > ideas. Every powerful language has three mechanisms for accomplishing this:

* primitive expressions, which represent the simplest entities the language is concerned with,

* means of combination, by which compound elements are built from simpler ones, and

* means of abstraction, by which compound elements can be named and manipulated as units.

> Also when they refer to "extra-linguistic mechanisms" do they mean different > codes as in semiotics?

the author should understand what they mean before writing this article. by extra-linguistic mechanisms they mean reaching outside of the chosen language, like java, to other languages (these are the configuration, project description, and makefile languages mentioned). the purpose of LOP is to bring these extra-linguistic mechanisms into the base language. so in racket, rather than creating a wholly new languages for documentation, they created scribble which is a language that sits on top of racket and can interact with racket. this is turning the extra-linguistic mechanism of writing documentation into a linguistic construct so that scribble is not a totally separate language, it is an extension of racket.

> If we want to think about what kind of problems a programming language makes > easy to solve, and which ones they make more difficult, I'd say it's better > to use the tool metaphor, and see where that framing could take us.

the so-called tool metaphor has been the dominant view and is the source of almost all problems of software. software is not _just_ a tool.

what makes software hard is that it isn't one thing. it is all of a way to do something (a tool), a way to think about something (a conceptual model), and a way to communicate something (a language).

</comment><comment><USER30> Would BASIC be a programming lang equivalent to Pidgin?

</comment><comment><USER31> not yet

</comment><comment><USER32> >A LOP programmer who resorts to extra-linguistic mechanisms effectively acknowledges that the chosen language lacks expressive power.

Tom this sounds about as correct as saying that someone who resorts to using picture/diagram/melody/.../whatever beside text acknowledges that the chosen language lacks expressive power. Although correct, it's so vapid sentence that I don't think it deserves having whole article based on it and in the end makes the article itself needless as well.</comment>