Ask HN: Why REST? - <AUTHOR> RESTful APIs are dominant currently. However, it seems to me that elements of the REST "style" are constricting for no reason.
I see how conforming to the original intention of the HTTP methods may be elegant or in some way natural, but I can't summon any kind of compelling justification for a restriction to only GET, PUT, POST, DELETE - aside from their analogy with CRUD I guess. Using GET forces parameters to be placed in the URL; wouldn't it be nice to deal with only POST requests with JSON bodies? APIs could still be CRUD-like if they only used the POST method.
I know that the original conception of HTTP was centered around resources and their relationships, transfer, etc. - but the most natural kind of interface, to me, is one that simply exposes functions/methods - like RPC. Web APIs are almost always accessed programmatically anyway.
Could anyone please enlighten me? <comment><USER2> REST isn't a standard protocol. It exists and is used by convention.

Throw a rock and you'll hit a developer who understands REST a little differently.

While there are technically "more correct" ways of doing it, you probably won't be berated for doing it your own way.

I've worked a dozen or so different jobs and I've never been in an organization that handles REST the same way.

There's really no "enlightenment". It's just a way to get data from one place to another in a relatively simple way with low overhead using protocols that already exist.

Check out SOAP. It's a standard protocol. Compare how it works to how REST works and you'll probably pretty easily see the differences and benefits to each.

</comment><comment><USER3> > RESTful APIs are dominant currently.

That depends how you define RESTful. One's conforming to the architectural style Fielding described are quite rare.

> However, it seems to me that elements of the REST "style" are constricting > for no reason.

While there may be debates over the merits of the reasons, nothing in REST is without a reason.

> I see how conforming to the original intention of the HTTP methods may be > elegant or in some way natural, but I can't summon any kind of compelling > justification for a restriction to only GET, PUT, POST, DELETE

REST does not impose such a restriction. Heck, REST is a big reason for PATCH and the proposed SEARCH method. OTOH, I think with PATCH and SEARCH added, the standard HTTP methods provide a pretty complete set of operations.

OTOH, while HTTP itself _is_ a REST API, REST is not in anyway tied to HTTP or it's set of methods.

> Using GET forces parameters to be placed in the URL; wouldn't it be nice to > deal with only POST requests with JSON bodies?

No, it would be _better_ to have SEARCH, which is safe but takes a request body. Also, you literally just went 180° from complaining about being limited to _only_ four standard methods to arguing that it would be better to have just one standard method. Without actually explaining either of those diametrically-opposed complaints.

> Web APIs are almost always accessed programmatically anyway.

Fielding-style REST (which, to be fair, most "REST" APIs are not) is pretty optimal for programmatic access, since it is fully self-describing and discoverable, given that the client has handlers for th involved media types used for resource representation.

<comment><AUTHOR> What I failed to say when suggesting a POST only API was that the various access methods could be encoded in the body of the request. Also I didn't understand that REST isn't tied to HTTP's methods - but rather HTTP is itself a REST implementation... from what I understand. Thank you for that.

</comment></comment><comment><AUTHOR> Also I'd like to clarify that this wasn't intended as a critique of REST, nor an argument against . I wanted to understand its motivation.

</comment><comment><USER4> Kizer says> _" However, it seems to me that elements of the REST "style" are constricting for no reason._

Probably b/c you don't understand REST and its history?

Kizer says> _" I can't summon any kind of compelling justification for a restriction to only GET, PUT, POST, DELETE - aside from their analogy with CRUD I guess."_

That is an invalid analogy, but your desire to know _why_ it is an invalid analogy may motivate you. Learning about REST will enlighten you.

Kizer says> _" Could anyone please enlighten me?"_

Unfortunately enlightenment is something one must gain oneself. Google for "Representational State Transfer REST" and follow the most interesting URLs until the light bulb goes on. Or try:

[https://www.google.com/search?q=best+introduction+to+represe...](https://www.google.com/search?q=best+introduction+to+representational+state+transfer++REST)

<comment><AUTHOR> I've googled and read but it's not getting through - I'm sorry. Could you offer an answer or explanation yourself?

<comment><USER4> I think you can give it more than 22 minutes' thought before you call yourself a failure. I'd suggest that you take a week or so perusing the literature.

There are so many excellent sources concerning REST on the Internet, I believe you will not fail to achieve enlightenment.

<comment><USER2> Being condescending and saying "Google it" isn't helpful. If you don't know enough about a topic to help someone, you have no room to talk down to them.

<comment><USER4> What happened to telling someone to go to the proper sources? The good info on REST is there on Google, or Bing, or Yahoo or DuckDuckGo. Right there, up front.

I retrieved some old files/notes on REST today and was enjoying the memories. But should I help someone who foolishly tosses out accusations of condescension or another who speaks of "non-answers" when _all the answers one needs are out there purely for the reading?_

Indeed, due to the settled nature of REST it seems hardly a suitable topic for HN, like asking "Why SQL?" or "Why FORTRAN-77"? The thread topic question was asked/discussed/answered in all respects nearly two decades ago. Its so old that some information about REST is aging off the WWW and the original participants are starting to die off (don't get your hopes up, Microsoft!).

<comment><USER3> > What happened to telling someone to go to the proper sources?

Good question, why don't you trying actually doing that with references to specific, useful sources if you think that is what is necessary?

> Indeed, due to the settled nature of REST it seems hardly a suitable topic > for HN

If you feel it's OT, then flag and move on rather than threadcrapping.

(Also, REST is rather far from settled; a variety of different things _called_ REST are popular, but they aren't the same thing as eachother or over time, and they often are quite distant from the architectural style Fielding described.)</comment></comment></comment></comment></comment></comment>


Show HN: RichestOnTheWeb - my submission to Hacka2thon - <AUTHOR> http://richestontheweb.com

<comment><USER2> It's very disturbing that a dollar auction on _absolutely nothing_ isn't even the most unethical tactic I've seen … this week.

<comment><AUTHOR> We are transparent about the fact that there is no tangible benefit to bidding.

<comment><USER2> If only the winner pays, it's just a silly game. But when the losers also pay, it becomes a genuinely abusive exploit of human irrationality which most people are not aware of. Please take it down.

<http://www.mediate.com/articles/noll1.cfm>

<http://www.heretical.com/pound/dollarl.html>

<http://www.pbs.org/wgbh/nova/body/mind-over-money.html>

<comment><USER3> Lots of huge businesses are based on irrationality. Cigarettes, gambling, etc. A fool and their money are easily parted.

<comment><USER4> And those businesses are accordingly regulated by society. But good luck trying to foster that winner-takes-all free-market world of yours. I'm sure it'll be a real blast.

</comment></comment></comment></comment></comment><comment><USER5> To those of you who are just dying to type your credit card information into a website right now, I'd like to suggest <http://www.kiva.org> instead.

<comment><USER6> pfft... Kiva doesn't tell me I'm rich! For only a buck and a quarter, I can get my name on the site!

</comment></comment><comment><USER7> Similar to the "I am rich." app released on the app store so long ago. <http://en.wikipedia.org/wiki/I_Am_Rich> was art. I'm not sure if I think your site is imitation or art as well.

<comment><USER8> I remember that as the best news story when the app store launched.

</comment></comment><comment><USER9> All these negative comments are a good thing. You've made something that polarizes people. I'd take that any day over something that makes people say "meh".

</comment><comment><USER10> If I understand it, it's a pretty horrible idea. For a lot of reasons. But, the most obvious, is how easy it'll be for you to game it. When someone makes a bid, you can simply outbid them but not actually pay any money.

<comment><AUTHOR> I see your concern, but we haven't done this yet - we have no reason to. There is no actual reward for being the "richest", we could care less as to who claims the title.

If we ever auto-outbid people, they would find out right away, and wouldn't return to the site.

<comment><USER10>
      we could care less as to who claims the title

<http://en.wikipedia.org/wiki/Auction#Chandelier_bidding>

Also, how would people find out? You just need to "be smart" about it. Don't always use the same username, change how long you wait.

<comment><USER11> Anonymous submissions are allowed... so it could be you hit the nail on the head and they are doing this right now (and simply publicly denying for obvious reasons).

</comment></comment></comment></comment><comment><USER12> Oh gawd, please remove yourself from the Internet. You're disqualified.

<comment><AUTHOR> Ok, I'll try!

</comment></comment><comment><USER13> The real richest on the web is you from this. Reminds me of Million Dollar Homepage. Great idea :)

<comment><USER14> First thing that came to my mind. Really gimmicky idea that could see the creator make a pretty penny if it catches on.

<comment><USER13> Exactly. I mean I'm not bidding on it. But I wasn't one of the people who helped milliondollarhomepage.com reach its goal and then some either :) I'm just calling it like it is, a really good idea worth trying :)

</comment></comment></comment><comment><USER15> First of all, congrats for polarizing crowds. :)

This can be a good way to increase your Twitter account visibility and hope to gain some followers through this site.

Right now, the bids are low but if this idea sustainable or not needs to be seen. You can hope to make it big if businesses find it a good way to advertise and promote products and product launches.

</comment><comment><USER16> Some time ago I registered 100EuroTweets which I guess was kind of a similar idea: you would be able to send messages to that account by paying 100€. Presumably people would follow the account to see who would be crazy enough to pay, and in turn the tweets would actually get some exposure for their money.

I never got round to implementing it, because I wanted it to be fully automated (checking a bank account), which is slightly complicated in Germany.

Anyway, it was just a silly idea in the spirit of the Million Dollar Page, for fun - just like yours, I guess. I actually like your variant better, I wouldn't be surprised if it turns out to be quite successful.

</comment><comment><USER17> You're asking people to enter their credit card details on a non-SSL page?

</comment><comment><USER18> Care to elaborate on how this works? I couldn't find any about page (and the site's down now).

From what I could gather, this looked like "person-who-just-spent-their- fortune on the web". :)

</comment><comment><USER19> If the money went to charity, this could actually have some potential.

</comment><comment><USER20> Why did the price go up when vowelnoun and netspencer were retweeted? <https://twitter.com/richestontheweb>

</comment><comment><USER21> Very similar to <http://www.thebigballer.com/>

</comment><comment><USER22> On Firefox 7.0.1 on Windows 7, the bid overlay automatically comes up and blocks the leaderboard with no way of dimissing it. Works on Chrome 15.0.874.120, though ;)

<comment><AUTHOR> We used Twitter Bootstrap for the overlay, with the understanding that it may be unreliable. I'll look into a fix as soon as I can.

</comment></comment><comment><USER16> If people have been paying in 1 cent increments, that site already made 80$ - not too shabby for a Hackathon project :-) (126*127/2 was my calculation).

</comment><comment><USER23> The "RichestOnTheWeb" would then always be the hosting one as they always get the sum of all bids.

Of course who actually cares to bid?

</comment><comment><USER24> I love the idea :) some of the comments from 'haterz' kind of make sense, let richest person leave a message

</comment><comment><USER8> The background is funky in the top 20 pixels or so. Also, this is a really unattractive idea.

</comment><comment><USER25> Rename it to 'richestFOOLontheweb'!

</comment><comment><USER26> I don't mean to be critical, but your idea doesn't have any real point. It isn't selling a service or a product, which is a requirement of a startup company, especially in technology sectors. So I'm not saying it has _no_ point, but what do you intend to do with the website? Where is it going?

<comment><USER19> I didn't make this site, but this is something whipped up for a hackathon, not a real attempt at a company.

</comment></comment><comment><USER27> You should rename it to dumbestontheweb

</comment><comment><USER28> Maybe you should make it the newest bidder can leave a message?

<comment><AUTHOR> Yup, thats coming soon! We will show the newest bidder's most recent tweet.

</comment></comment><comment><USER29> I think it's a fun idea. I do think there should be a FAQ or About page or something.</comment>


Bletchley Park Iconic Codebreaking Buildings in Decay - <AUTHOR> http://www.bletchleypark.org.uk/news/docview.rhtm/516816

<comment><AUTHOR> I know it's a presser, but I figured quite a few people here would care about this.</comment>


Tagger News takes a subset of HN articles, analyzes using ML, and applies tags - <AUTHOR> https://techcrunch.com/2017/05/14/building-a-smarter-hacker-news/ <comment><USER2> Direct URL to project details: [https://devpost.com/software/tagger- news](https://devpost.com/software/tagger-news)

A few comments:

1\. To other commenters, as with the HN Vue demo a week ago ([https://news.ycombinator.com/item?id=14284877](https://news.ycombinator.com/item?id=14284877)), the project is a technical proof-of-concept; the aesthetics aren't the primary focus.

2\. The Algolia API is better for scraping because it allows for bulk requests, unlike the official API (my old 2014 script still works I think: [https://github.com/minimaxir/get-all-hacker-news- submissions...](https://github.com/minimaxir/get-all-hacker-news-submissions- comments))

3) How much time did it take to manually label the training/test set before training the RF classifier? Even with topic modeling for _extrapolating_ tags, accurate labeling for 20,000 submissions is a task.

<comment><AUTHOR> One of the devs here.

1\. That's the way we were thinking about it :)

2\. Oh, excellent! We hadn't found that or we'd have used it, and we'll start working with it.

3\. Tomorrow I'm going to blog about how we approached the machine learning. Short version; we manually came up with regular expressions to classify a training set based on _titles_. The idea is that when we experimented with manual annotations on titles, the vast majority of the time we were looking for only a few key words. There's no question that this adds biases and will not be entirely accurate, but manual inspection convinced us it was a good enough approach for our hackathon, and most of the articles we identified with the resulting algorithm would not have been found by the title regex alone.

You can see the table of regular expressions [here]([https://github.com/dodger487/analyze_hn/blob/master/topics.c...](https://github.com/dodger487/analyze_hn/blob/master/topics.csv)) and a bunch of (pretty unstructured) analysis code [here]([https://github.com/dodger487/analyze_hn/blob/master/hn- analy...](https://github.com/dodger487/analyze_hn/blob/master/hn- analysis.Rmd)).

<comment><USER3> This is awesome ! Congrats..

[https://github.com/HackerNews/API](https://github.com/HackerNews/API)

The firebase API is excellent. I have been using that to keep [http://searchhn.com](http://searchhn.com) up to date in real time.

Also big query is updated every day with all comments and posts. [https://bigquery.cloud.google.com/dataset/bigquery-public- da...](https://bigquery.cloud.google.com/dataset/bigquery-public- data:hacker_news)

This is what I started with to update the Searchera ([https://searchera.io](https://searchera.io)) index which powers Searchhn

<comment><AUTHOR> Oh, that was silly of us not to use BigQuery! I was just able to use that download a full million stories (though we still would have had the rate- limiting step of downloading the articles).

During a hackathon it can be hard to tell when to keep searching for an easy solution like that, as opposed to going with something slow you know will work- sometimes it turns out to be a dead end.

Thanks for the recommendations!

</comment></comment></comment></comment><comment><USER4> I think the biggest value proposition of this is the ability to do sub-reddit like filtering on specific tags. As Hacker News grows I think dealing with the number of new submissions would become a bottleneck. During high-traffic times, new submissions sometimes drop of the first 'new' page in around 10 minutes. Of course there is more traffic during these times to upvote good content, but I'm not sure that is better than letting a smaller number of people have a longer period of time to filter a smaller collection of content.

<comment><USER5> Not too mention a lot of the content has strayed away from technology and has gone towards mental health, personal growth, news, politics, etc.

<comment><USER6> I don't remember a time when all those topics were not common.

<comment><USER5> Maybe now that I'm older I notice it more than I did when I first joined.

</comment></comment></comment></comment><comment><USER7> Strength of Hacker News is the network effect of a diverse, intelligent crowd. It would be hard to replace. A supplemental site tagging it and aiding search has value. Biggest problem I have searching HN, though, is Google mixing up stories and comments. The fix might be as simple as two domains that contain stories and comments cloned from HN, one domain for each, followed by Google Searches within those domains. Not sure if Google would automatically crawl it, though.

<comment><USER8> [https://hn.algolia.com/](https://hn.algolia.com/) does the job pretty well!

<comment><USER9> Also, you can easily search HN in Chrome: start typing news.ycombinator.com, it will be ready for autocomplete, and it will say in grey text "Press [tab] to search HN". The results show up from algolia.

If only there were a way to make the default search order recency instead of popularity — most of my searching is before posting something, to make sure it hasn't already been posted.

<comment><USER10> Weirdly, the default values for the search url are slightly different from what the Chrome search populates them with. The 'address bar search' defaults 'dateRange' to 'all', whilst the script itself defaults 'dateRange' to 'last24h'. Does anyone know how the Chrome address bar search is implemented?

</comment></comment></comment></comment><comment><USER11> Congratulations to the team, although it seems the algorithm isn't very accurate, since this article[0] from 1997 was tagged with "Blockchain".

[0]: [https://www.gnu.org/philosophy/right-to- read.html?source=tec...](https://www.gnu.org/philosophy/right-to- read.html?source=techstories.org)

<comment><USER12> Or maybe the algorithm is scary accurate and has correctly deduced that Richard Stallman is, in fact, Satoshi Nakamoto!

Somebody contact Newsweek!

<comment><USER13> As a sincere question, why did people downvote this comment?

I thought he was funny and I think lighthearted humor has value to it. It didn't seem snarky to me, did it to someone else?

Did it seem off-topic? It's a joke rather than useful information, but I'd argue that it is on-topic per the rules: "Anything that good hackers would find interesting."

Am I missing something?

<comment><USER2> It's a Reddit-esque comment that adds no value. (and at best, it's off topic where the topic is about an improved Hacker News)

There are instances where humorous comments can add value (e.g. irony/satire), but it's not common and hard to do properly.

<comment><USER14> Maybe we need a machine learning comment value predictor

<comment><USER15> Then nobody would need to visit the site at all, it'd be completely self- ranking and automated - imagine the productivity improvements in the valley? (Disrupting the web forum industry!)

<comment><USER14> > Someone somewhere takes this seriously, actually starts next unicorn

<comment><USER15> And I go home and cry into my beer. Again.

(Stupid ideas? I'm full of em! Execution on stupid ideas until they get enough VC capital to become obviously good ideas? I'm pretty lame at that... Anyone wanna be my "Executing Co-founder"?)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> I did similar project few months ago, it does automatic tagging + summarization of HN largely using scipy and numpy, you can see it in action: [http://hntop.org](http://hntop.org) here github link [https://github.com/bexp/textai](https://github.com/bexp/textai)

</comment><comment><USER17> Not to hijack, but this is similar to a small ML project a friend and I built. It takes news headlines from a bunch of sources and classifies them by common topic. We took a lot longer than a day to build it, though. ;)

It refreshes with new stories every few hours. You can check it out here: [http://headlinr.herokuapp.com/](http://headlinr.herokuapp.com/)

EDIT: click on the bubbles to see individual headlines. Also, here's the GitHub page: [https://github.com/dgarrick/headliner](https://github.com/dgarrick/headliner)

</comment><comment><USER18> Personally, I find the visual weight that the tags have exceed their value to me.

<comment><USER19> That page is to show off their work, which it does. The goal is probably not to replace news.ycombinator.com.

</comment></comment><comment><USER20> I think this is great, especially being able to click a tag and see a top 30 list of that tag.

Obvious suggestions that would make it usable as a primary HN interface:

• Login and voting (not sure the HN API supports this though)

• Tag suggestions to feed into the model

</comment><comment><USER21> Link to try it out [http://www.taggernews.com/](http://www.taggernews.com/)

</comment><comment><USER22> Here is my take on it few years ago. I tried to make it more like magazine, and get article text and photo, and there is a section with only articles that reached top position. [http://www.hnzine.com](http://www.hnzine.com)

</comment><comment><USER23> Possibly off-topic, but: this was done at the "Disrupt NYC" hackathon, and somehow "add tags to HN" feels like about the least disruptive thing ever.

</comment><comment><USER24> Wow I was thinking to make something similar: an experimental HN fork where submissions are tagged (collaboratively) _but_ without titles, as these are rarely useful to predict the content of an article. And of course there is also the convenience of categorization.

<comment><USER25> You are describing lobste.rs

</comment></comment><comment><USER26> This article on book publishing: [https://news.ycombinator.com/item?id=14334845](https://news.ycombinator.com/item?id=14334845) is tagged with "blockchain" only. Any idea why?

</comment><comment><USER27> Tried [http://www.taggernews.com/tags/aws/](http://www.taggernews.com/tags/aws/) and didn't find any results. Is it because it is listing only few tags for now?

</comment><comment><USER28> This is what @twitter needs to do to make discovering worthwhile information better.

Hashtag spam makes #hashtags mostly useless as a method of discovery.

</comment><comment><USER29> Using ML? Why not using just Bayesian filters?

<comment><AUTHOR> You mean Naive Bayes? Because it can't account for interactions between the effects of multiple words.

<comment><USER29> Just add some "magic", e.g. per response analysis and inter-response rule- based system.

<comment><AUTHOR> If you keep adding "magic" and doing careful research on what magic works and what doesn't, you end up roughly with the modern field of machine learning.

Random forests are a method that's often effective in taking into account many interactions among high dimensional data.

<comment><USER29> Expert Systems "magic" predates neural networks by decades, being predictable and giving validable results (unlike most ML models).

</comment></comment></comment></comment></comment><comment><USER30> Can you also add a way to add TLDRs to everything, pls? :D

</comment><comment><USER31> Stop trying to remake Hacker News. It's pretty much perfect the way it is.

<comment><USER32> Maybe it's not perfect for everyone.

I, for one, do like the idea of tagging stuff, since I might favorite a lot of stories but then years later it's hard to find a particular one, even if you do remember the general topic.

Tags for this would be really helpful for me, ergo it's not perfect for me, ergo it's good someone else is trying to make it better.

Since it's not affecting the original site, why would you want to stop them?</comment></comment>


Any Houston hackers want to hack? - <AUTHOR>

Hi, I'm in Houston, just looking for people to hack with.  Don't know anyone in the startup community down here.  My current spot of choice (drawn from my vast experience of 1 measurement) is Cafe Brasil on Westheimer.
Anyone randomly working over the next week and want to hack at the same place?
firstname.lastname@example.com <comment><USER2> I would, but these next few weeks are hectic for me :)</comment>


How React Won - <AUTHOR> https://medium.com/@chriscordle/why-angular-2-4-is-too-little-too-late-ea86d7fa0bae <comment><USER2> > It is built on TypeScript and RxJS, which are two 3rd party libraries for > types, decorators, and reactive, observable state management.

TypeScript is not a library for types. TypeScript is a programming language.

<comment><AUTHOR> True. Good point. It's still a 3rd party tool available to you no matter what stack you choose.

</comment></comment><comment><USER3> > "It's not hard to infer that React was a key reason why Facebook was able to > do this [release Snapchat clone features] so rapidly."

This is a huge jump man. I think you're broadly generalizing stuff here.

<comment><AUTHOR> Good luck doing that with an Angular-based code base.

<comment><USER4> The fanboyishness really reduces your credibility as an author. If Facebook needed to clone an app that was a potential existential threat to their business with Angular, Vue, jQuery, or anything else they would do it just fine.

<comment><AUTHOR> Angular 4 just came out 4 months ago. NativeScript + Angular 4...just released this year. Who knows if that's even mature at this point? Google doesn't build native mobile apps with Angular. Never have and who knows if they ever will? They use native Java and native iOS. No doubt they could achieve rapid simultaneous deployment of features...but they have to juggle a lot of different tech stacks to do so. Facebook benefits tremendously by unifying its code base around React. Tremendous productivity benefits

</comment></comment></comment></comment><comment><USER5> Sounds a bit ungracious (tone is "nyah, nyah you lost"), but seems generally accurate from 20,000 feet up.</comment>


81% of Australian IT workers experience sexual harassment at work - <AUTHOR> http://www.abc.net.au/news/2018-09-12/human-rights-commission-report-reveals-sexual-harassment-at-work/10231480 <comment><USER2> Please change the title, it's not correct. At all. (It might be true but it's nothing like what the survey reports.)

The headline on the webpage is "Sexual harassment at work is on the rise in Australia, the Human Rights Commission says".

The figure sounded crazy so I looked at the survey report.[0]

It says 81% of people in workplaces categorized as "Information, Media, Telecommunications" have experienced workplace sexual harassment in the last 5 years.

That category includes anyone working in publishing, movies, TV, radio, libraries, etc. The national average is 33% across all workplaces (in previous 5 years), so that could well be the figure for "IT workers". Or it could be anything. I suspect it's much lower, since there are so few women in the field. The report says "One in five Australians were sexually harassed in the workplace in the last 12 months.", 23% of women and 16% of men.

The category "Information Media and Telecommunications" consists of the subcategories:

Publishing (except Internet and Music Publishing)

Motion Picture and Sound Recording Activities

Broadcasting (except Internet)

Internet Publishing and Broadcasting

Telecommunications Services

Internet Service Providers, Web Search Portals and Data Processing Services

Library and Other Information Services

Another category "Professional, Scientific and Technical Services" has the subcategories:

Professional, Scientific and Technical Services (except Computer System Design and Related Services)

Computer System Design and Related Services

[0][https://www.humanrights.gov.au/sites/default/files/document/...](https://www.humanrights.gov.au/sites/default/files/document/publication/AHRC_WORKPLACE_SH_2018.pdf)

</comment><comment><AUTHOR> 81% of employees in IT, media, and telecommunications report experiencing sexual harassment at work in the past 5 years</comment>


Blue. No, Yellow - <AUTHOR> http://blog.cleancoder.com/uncle-bob/2016/05/21/BlueNoYellow.html <comment><USER4> I think this misses a very key point - subject matter. Some languages are well-suited to do particular things and comparatively poorly suited to other tasks.

For example, Erlang is great when you need to do lots of concurrent operations with guarantees about safety and uptime, but not really what I'd write a CSV parsing program or email client in.

C is very easy to link against on almost every platform and language, so basic libraries are often written in C.

Javascript (in the form of nodejs) is great for writing simple web servers because most of its standard library is asynchronous by default. Compare Python (with Tornado or similar) where lots of popular libraries cannot easily be used in an event loop.

I could go on forever, and you might disagree with me about a particular details, but the general point stands. If you took an expert Erlang programmer and gave her a day to write a spreadsheet application, you'd get a worse result than the same day spent by a C# programmer.

<comment><USER5> Yeah, the effect of libraries is _huge_ and ignored by this analysis. There's a good reason we see so many web apps written in ruby/python/node and so few in C++.

<comment><USER6> Also C++ still has atrocious cycle time with medium to large projects.

If you look at feedback times, PHP is the new Smalltalk. (Yuck.)

<comment><USER7> [https://root.cern.ch/cling](https://root.cern.ch/cling)

</comment></comment></comment></comment><comment><USER8> What a load of hot air.

Reducing the differences between programming languages to their performance/productivity and then claiming the choice is just bikeshedding.

Have fun with your ruby pacemaker, js air traffic control and life without static typing in 10mioLOC codebases.

Why do I feel like i have to apologize for my negative view on this? He has a commercial interest in maintaining his guru status.

<comment><USER9> Was my first thought too. He's judging "workload" by how much time it takes up front to write a program, which may be an important metric for "move fast, break things" social/mobile/local/web apps and the like. But he doesn't mention error rates, maintenance costs, LoC, or any other metric that mission/safety/life critical systems prioritize.

The world view underlying this post is one of the reasons for shoddy software and all the breaches, data thefts, etc. that have successfully exploited systems flaws in recent years.

<comment><USER10> I also think his upfront time estimates were off. He estimated Ruby to be ~15% more productive than C. I don't write Ruby, but I do write a lot of C and Python. I'd estimate that it takes 5x less time for me to write a program in Python than C. Even if the 5x number is off, it's still a way larger reduction factor than 15%!

</comment></comment></comment><comment><USER11> 1\. This post would have been more interesting if the person he was having this dialog with was a PL researcher/designer.

2\. Uncle Bob is trying to speak with authority, but this subject matter is outside his area of expertise. At least in his previous post, he was nice enough to state this up front:

> Learning swift has been an interesting experience. The language is very > opinionated about type safety. Indeed, I don't remember using a language > that was quite so assiduous about types.

3\. I see that Rust, Haskell, and OCaml were conveniently left out. He hand- waves away other modern languages with "negligible," which is hilarious because he is so obnoxiously wordy in the rest of this post. Not very convincing.

<comment><USER12> I like a lot of Uncle Bob's posts, but his opinion on functional languages is bizarre. He seems to like them (especially clojure), and talks about how they tend to force programmers to stick closer to patterns pretty universally regarded as better (immutability for instance), but then sort of punts when asked to compare them to OO languages. I think, to some degree, his belief in TDD, Solid Principles, and short cycles means that functional languages have less to offer developers than many think because he's comparing Java executed with excellent practices to stock functional languages. I think that C#, Java, and OO-design just leave too much room for developers to go astray. Something like F# results in better code not because of the features of the language, but because of what it doesn't allow.

<comment><USER13> Interesting! I agree entirely that Java and OO leave a lot of room for developer to go astray. And I've enjoyed my limited coding in functional languages. But is something like F# really better in practice?

I ask because every functional-language code base I've been able to look at myself has two advantages: 1) it's not very large, and 2) it was made by very smart, experienced developers with a passion for functional languages. When I look at similarly sized OO code bases produced by people with similar levels of passion and expertise, the code base is also very good.

The terrible Java code I've seen, on the other hand, mostly comes from less experienced people whose priorities are things like "keep boss happy", "put in all required hours", and "comply with project plan". Which is, sadly, the average case in the industry.

So I'm wondering: What happens if some functional language becomes mainstream? Will junior programmers at EnormoBank's latest death march produce better software?

<comment><USER14> If Haskell becomes mainstream, there will be some absolutely horrifying Haskell code.

But Haskell allows people who know what they're doing to also check that their code doesn't violate certain constraints. That means that the amount of work the compiler does is greater, which makes more guarantees about correctness.

It's not about making the worst code less bad, it's about making the median project take less time and have less defects.

<comment><USER15> There already is some very horrifying Haskell code written by masters of the language. Well written Haskell in my opinion can be readily understood by anyone who has studied the language for a week or two (provided they are experienced programmers). The depth of potential for abstraction in Haskell is so tempting however that often clarity is lost in dense semantics.

</comment></comment></comment></comment></comment><comment><USER16> And this is a good example of why a lot of people can't stand this so-called "guru"

The whole text reads more like one of those "reality shows" on TV with a load of fluff, lots of recaps and very few substance

Then you scroll down and his brilliant conclusion is that Java and Ruby has the same coding efficiency when you do it his way. What a load of crap.

I stand by my assertion: I wouldn't trust Uncle Bob with anything bigger than a Hello World. But if you have an over-budgeted corporate project you may look nice to your boss if you contract him

<comment><USER17> You just have to look at some of the horrible software that he has worked on.

He does, however, know his audience: mediocre managers of dysfunctional teams.

For those groups - people who cannot themselves articulate the benefits of keeping code organized and testing the important stuff - his talks and books are invaluable.

<comment><USER18> > You just have to look at some of the horrible software that he has worked > on.

Can you give an example?

<comment><USER17> FitNesse and Jenkins come to mind. I don't think that he has worked on any significant project for some time now (which is to be expected, he's a training / consultant / blogger nowadays).

</comment></comment></comment></comment><comment><USER19> Here's a benchmark: in 1970, I had a full-time job maintaining a 4,000-line assembler program on punched cards. Today I manage a 400,000-line system in C++. That's 100:1.

<comment><USER20> That's an interesting point also - scale. I don't think programming a simple "hello world" in C or C++ would be 100x faster than in assembly (assuming you were equally familiar with both languages), but I think it would be nearly impossible, or at least _incredibly_ expensive to maintain 400 kloc of assembly. I honestly shudder at the thought.

<comment><USER21> You would use a macro assembler, and if you have good programmers, they would effectively develop a DSL for writing your program in it.

That would postpone the point at which that assembly program reaches 400kloc. In the end, it would probably grow as fast as a C program of the same functionality.

Of course, they also would have to develop their own tooling around that DSL. That, I think is the problem lies with assembly. Higher level languages imply that more stuff gets shared between projects (even across companies; everybody will use the same C language and standard library), and that means time spent to develop tooling around and libraries on top of the shared stuff is useful for more people. Hence, tooling and libraries will generally be of higher quality. that home-grown GUI library built on top of a home-grown set of assembler macros using a home-grown ABI may be better than using, say, QT on top of X11, but it isn't that likely.

On the other hand, the smaller the system, the more important memory usage, and if the system is small enough, that can and will swing the advantage to the home-grown system. That happens less and less, though.

</comment></comment></comment><comment><USER22> It feels like the early language wins were due to the languages themselves introducing new _concepts_ , not just syntax changes. Allowing higher-level reasoning.

Then, past a certain point, most of the new concepts started coming in via frameworks and libraries (although of course things like functional programming and interesting typing approaches are still language-driven tools).

Thus, these days, I would look at libraries and frameworks as sources of new productivity unlocks. E.g. in the Web world, jQuery saved millions of work- hours and qualitatively unlocked some new things. Then Angular (and eventually React) started realizing huge savings from declarative UI definitions. My preference for one next innovation in this area is a higher-level framework for user input modeling (a huge source of bugs these days).

<comment><USER23> The language still matters, but indirectly, because it constrains which frameworks can easily be built. It's doubtful that jQuery and React would have been invented using Java. Even JavaScript is nicer with a language extension (JSX).

<comment><USER24> The thing is, Java has (with some tricks) a fully pluggable compiler. And even without tricks, compile time processing is possible.

But Java is "uncool". That's the big issue.

<comment><USER23> The issue is that if you want to do template-like things using language constructs (internal DSL), the syntax is quite limiting.

There are tricks using annotations and strings, and Java 8's lambda expressions do help. But it's still awkward to define a React-like mini- language within Java.

<comment><USER24> Well, anything that is a valid syntax can then be modified by the annotation processor.

Add the fact that you can do blocks, and label blocks, and you can do practically s-expressions.

</comment></comment></comment></comment></comment><comment><USER25> Actually I would argue the converse, that many "modern" improvements have taken a step backwards. My first job was using SQL*Forms (an oracle product) on a Sun, it was for making CRUD apps on a tty (a terminal). We had a metric - small form (just some data fields) 1/2 day, medium form 1-2 days (perhaps a master detail), large form (master detail detail perhaps with some popups) 2-5 days.

Next was VB and Delphi - drag and drop stuff on the screen, you could write whole systems in a few weeks. Had wonderful screen painters and so on.

Then the browser - a disaster in productivity, writing things in a tag language - no visual ide support (still).

Now the maximum complication of programming with MVC and languages with so many features no one person can know them all (C++ I'm looking at you, C# and Java are up there though).

I look forward to the next innovation

<comment><USER26> Productivity has to be measured with the implemented use-case held stable.

Visual FoxPro was probably the pinnacle of "easy to make CRUD apps", but the result is, at most, an program that runs on a few computers on a corporate Intranet, that each must use a specific version of Windows with a pre- installed runtime.

A modern LAMP app, despite being composed of layers upon layers of kludges, can be immediately interacted with from any computer in the world, with no sysadmin experience, by entering a URL, and—with no particular effort into architecture or scaling—allows for thousands of simultaneous users to submit changes to the same data in a perfectly consistent fashion with no "whole document is locked for modification"-type problems.

The LAMP app also has a number of modular boundaries that the FoxPro app doesn't: the backend server treats its database as a black box, so it could actually be a replicated cluster, or a different DBMS the next week; the frontend JS treats the backend as an opaque HTTP API, so either of the two could be rewritten or outsourced, and the API could be repurposed by new clients with no additional effort put in on the backend team's behalf; the frontend is built up from layers of specifications (e.g. CSS features) that are each optional, such that you can visit the site from a copy of IE7 on a Windows XP machine in a dusty Korean net-cafe and it'll still let you _use_ the app, just in a less pretty fashion; and so forth.

(And this is ignoring the 10x advantage in accessibility for blind users markup gives over old pixel-blitting GUIs. Modern GUIs are "markup-based" in a similar sense—Cocoa NIBs, Microsoft XAML, etc.—because it's far easier to accessibility-enable a frontend when it exists in the form of an UA- inspectable DOM, rather than an opaque framebuffer.)

If all you need is the paired-Windows-98-machines-in-your-office use-case, sure, use Visual FoxPro (or whatever the modern equivalent is. FileMaker Pro?) You can go even simpler, if you like, and just use green-screen terminals pointed at an ncurses app running on your office machine. But if you need the Internet use-case—where _everyone_ with _any tech experience level_ can use your app _from anywhere_ on _any old device, all at the same time_ —nothing less than the stack of kludges we've got is actually up to solving that problem.

<comment><USER25> I never mentioned visual fox pro, it's not comparable and I would never say it was the pinnacle of easy to make CRUD apps which is why I mentioned Delphi and VB, Delphi in particular I'd say was (and still is in some ways).

I don't know where to begin with the rest - "whole document is locked for modification" \- what on earth is that - and why does the web have anything to do with that, if you mean optimistic locking, then many apps use that.

All the products I mentioned produced a product comparable to a web product - client server enterprise level applications, which could be run over the nascent web (dial ups even - it was done regularly). The complification of modern software stacks has reduced productivity, perhaps your argument is that the use cases addressed by modern applications (web in particular) differs from earlier systems?

<comment><USER26> > "whole document is locked for modification" \- what on earth is that

It's what happens when everyone in the office is trying to edit the same Excel spreadsheets over SMB/CIFS at the same time. Most "easy CRUD app maker" solutions didn't produce something much better, architecturally, than that baseline. I mentioned FoxPro because a lot of people give it as an example of such an "easy CRUD app maker." Hypercard and Lotus Notes are others. These are the points clustered on one side of the "easy design vs. architecturally-sound product" spectrum.

Delphi/VB are closer to the middle of that spectrum; not quite as easy, but they at least have a concept of "a database" that doesn't refer to a proprietary file format built into the runtime.

The web is on the right of that spectrum: not at all easy, but the product is something that _works_ , in a sense that other apps can hardly hope for. A correctly-architected web-app will work on Chrome Canary, IE6, w3m, a Palm Pilot's WAP browser, the Wayback Machine, several web spiders, IFTTT, as an offline cache, through corporate proxies, with Cloudflare, through Tor, with screen-readers, when printed, with UA CSS overrides for e.g. contrast- enhancement, with any sized viewport, with any sized fonts, and even with people who disable Javascript.

 _That_ is the use-case. As you go to the right on the spectrum, you approach being able to solve for that use-case—but it takes a slight while longer to build.

<comment><USER25> OK,

for > It's what happens when everyone in the office is trying to edit the same Excel spreadsheets ...

That really isn't solved by the web either so lets forget about that

> Delphi/VB are closer to the middle of that spectrum...

I disagree - and have evidential support - I have worked on cross platform Delphi products (iOS/android/OSX/Windows) that have a REST backend and what would be called 'web scale' products

> The web is on the right of that spectrum...

Well this is where the argument gathers some steam - when people say 'the web' they usually mean a large blob of technologies from Web browsers to LAMP stacks etc. So can we differentiate these into two components?

1\. The web browser

2\. The backend stack

</comment></comment></comment></comment></comment><comment><USER27> It's not quite as simple as preferring one color over another - <USER2> languages, by (their own) definition, lend themselves to certain tasks more willingly than others. Rather than expecting a specific gain from a language (e.g. 20% faster development), you have to think in terms of avoiding the language that might be 20% slower for the specific problem being solved.

For example, a seasoned engineer would likely not choose to use PHP for a stateful, socket-based messaging system to connect a dozen or so users. Why? Because PHP is not designed to do that task well. It could do it - you could poll an HTTP end-point and use a cache for really fast persistence to wire it all up - but you'd likely start having to write code around the problems you'd encounter for all of the nuances to your specific implementation.

Yet another example: The main reason Go looks attractive to a certain set of developers is that it solves a problem with describing and handling concurrency that they've had with a lot of other languages. They would be dumb to say that Go is carte-blanche better than PHP (or Ruby, or Java, or even C/C++), but that doesn't mean they won't see a potentially significant improvement in using it.

</comment><comment><USER28> This post is a great oversimplification. Normally something like that could be ignored to get the bigger point across, but it kinda _is_ the point, so I call BS.

Have 10000 experienced ruby programmers and 10000 experienced java programmers solve different tasks. I'm pretty sure that rubyists are going to solve their problems using 50% less time with at least 30% less LOC just by the virtue of having a more expressive language. Now I'm not trying to argue that ruby is strictly better than java, I know both languages' deficiencies. However, the metric author uses is development time, and by that metric more expressive languages will always win, hands down.

<comment><USER29> And now have those 10k programmers work on a single project.

I bet the 10000 Ruby guys are gonna create a big, unmaintainable, broken mess. Even Java's primitive type system would be a big help when it's about software development at scale.

Yes yes, _TDD_ :)

<comment><USER30> I felt like I spent roughly the same amount of time working around Java's type system with copious amounts of boilerplate as I did fixing wrapping my head around type-related bugs in ruby, especially at scale because of how inflexible every Java architecture seems to become after 5 years. Java's types give you so, so little additional real world "safety" but easily require 10x the verbosity to express the same logic as a dynamic language. You still end up getting hit with null pointers and invalid argument errors.

I think Rust and Swift and Elm strike the right balance between developer productivity and a strict type system that actually improves the quality of production software.

<comment><USER31> > You still end up getting hit with null pointers and invalid argument errors.

Those are not the kinds of problems a type system is intended to solve. Those are problems of data, not of types.

The amount of boilerplate in a Java program is pretty low if you aren't trying to abuse or work around the type system. It certainly is not 10x what you end up with in Ruby or Python. Java 8 has made significant improvements, but it wasn't that bad before in many cases.

Instead of trying to work around Java's type safety, you should learn to use it properly. Good programmers think about types whether or not they are forced to by the language, so the restrictions imposed by Java should not be burdensome -- in general, you should already be mentally applying some of those restrictions to your code so you can avoid passing the wrong types around.

<comment><USER32> They are problems type systems are intended to solve: It just happens that Java's is too weak to deal with it well: They best you can do is use an option type, but even then, Java's Option type is far weaker than in other languages. Languages where null doesn't exist are far nicer.

Java's boilerplate comes from lacking type inference and from having a type system that is too weak, not one that is too strong: I'd argue that people's love for dynamic languages without type systems is cause by how people's idea of what types are, and what they do for you, come from Java and old C++, as opposed to something more powerful.

<comment><USER31> Nulls are not a problem type systems are intended to solve -- they are a feature of type systems that was created on purpose. You might not like them, but that doesn't mean they constitute an oversight or omission on the part of the designers of the type system -- they wanted them there. They are useful.

Many people misunderstand the option type in Java. It was created to make stream processing easier. It was not intended for general use, as in other languages.

Regarding illegal arguments, they are unavoidable in any type system. Suppose you defined a function that splits a string into an array of n-grams, to which you pass the string as well as int n. If you pass an n which is greater than the length of the string, no type system will help you figure out what to do. It's just an invalid/illegal argument, and you will either have to decide what to return for that case (maybe an empty array, or even... null), or throw some kind of exception.

<comment><USER33> Regarding nulls, have a look at how Haskell deals with nulls. The basic idea is that any nullable value gets wrapped in a "Maybe", and you use pattern matching to handle the case of missing/empty values. This is much more explicit than null values in Java, where any object could be null at any time, and actually leads to cleaner code (i.e. to avoid lots of "Maybe" boilerplate, you can match for "Nothing" and return a default value as soon as possible to first matching "Nothing").

Regarding illegal arguments, have a look at something like Idris, which has a type system with "dependent types". The Wikipedia page has an example[0]; types can have values, so you can express a "pairAdd" function that accepts two vectors, each vector requiring the same length.

I guess "types" and "compile-time checks" are sometimes used interchangeably. I absolutely think tools (such as compilers) should be leveraged to provide as much assistance as possible; whether that comes in the form of types, or some other mechanism that resembles types.

[0] [https://en.wikipedia.org/wiki/Idris_(programming_language)#D...](https://en.wikipedia.org/wiki/Idris_\(programming_language\)#Dependent_types)

<comment><USER31> So instead of checking if a variable is null, I have to check if the variable is a Maybe type, and if it contains a value.

I hope you can see how this is pretty much the same as checking if a variable is null. It takes just as much work, and has the same outcome.

<comment><USER33> Not as such; functional languages use "pattern matching", so you are forced to match each possible outcome. This way, it explicitly brings the issue of nulls out into the open; if you have a Maybe it might be null, if you have a String, or Number, or anything else, it is never null!

This means the language allows you to define areas of your program that are null-safe, and areas where nulls are expected.

Compare to languages where you must remember to check null on every use of a null variable. I guarantee I can pick any Java codebase and find a method where arguments to that method, or a class's properties, are not checked for null on every use. How do I know that the use is safe? Usually by coding conventions; maybe immutable instances represented by values set only in a constructor, although what's to stop null being passed in?

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER34> Small nitpick, especially given that all numbers are "guesstimates", but if "X is 30% more efficient than Y" it is not "10 programmers can do a work of 13", it is ((13*0.7 = 9.1 ~= 9)) programmers.

<comment><USER35> Since you've taken us to nitpick land, I'd argue that you've expressed "Y is 30% less efficient than X", and that 10 can indeed do the work of 13 if instead "X is 30% more efficient than Y".

To me, the reference standard is assigned unity.

In the first case, X is 1.00 and Y is 0.70.

In the second case, Y is 1.00 and X is 1.30.

</comment></comment><comment><USER36> > How enormous? Give me a number.

> I need a number

> The number?

The article places annoying attention to quantifying "workload estimates", whatever that even means. Because the written interview is so verbose, we know that the author just brushes away the interviewee's remark that 'other important factors effect that workload', and then proceeds to cryptically dance around those factors with very opinionated questions.

</comment><comment><USER37> When writing Python these dates I almost always use iPython notebooks for prototyping, before throwing things into modules. When I switched off to Java and go a while back, the increased overtime for compiling was pretty noticeable.

But even more noticeable was the loads of the ability to play around with each little block of code, with data in-memory, until I was completely happy with it. It's a bit like interactive debugging, but with a great deal more freedom. As a result, I get a huge reduction in mental load when writing Python in a notebook; my attention is extremely focused on the little bit of code in working up in that moment. This is a real win for productivity, beyond what you get from the zero compile time.

(Also, Java compile times are not zero. Even waiting a minute for a large compile is enough to create a break in concentration.)

<comment><USER38> That's why Java IDE's usually have a visual debugger that actually works.

<comment><USER39> I am sometimes (i.e. I think this happens a lot) bit puzzled by looking at very intelligent people who doesn't know about the debugger or knows about it and doesn't use it anyway.

If you program Java then please feel free to use the excellent tooling that is available.

<comment><USER40> It's just habit. Code in a language with bad tooling and you too would develop habits to work around the lack of tools. It just takes time (and sometimes a bit of convincing) to adjust. And to adjust back, of course.

"Type A" coders are especially vulnerable to this kind of habituation on account of often being interested in esoteric languages, systems programming, or other "extreme" environments with tooling restrictions.

<comment><USER41> It helps also to not make the type of bugs that need to be solved with the heavy and laggy Java debugger. I've been doing quite a lot of Java over the years, especially in the last year, working on medium and large projects. I've compared my workflow to that of my cow-orkers, and I sometimes look at the way they debug things. For most cases, I can find and fix the bug with occasional logging / print statements faster than my cow-orker can pause the program on breakpoint and then click through stuff to find the right element in the right container in the right variable that's maybe causing the problem.

The trick usually is to test often and don't write something if you don't understand how it works - that also includes interacting with parts of your application that you didn't write - and to not proceed if you feel you don't understand how the code you wrote works. 99% of the time when I have a bug in my Java code I realize where the bug is before my window manager switches over from the program to the IDE. That comes simply from understanding what one wrote (+ a bit of experience).

That said, debugging multithreaded programs is a pain in the arse, and I take any help I can get there. Though I haven't seen many debuggers that would be helpful in those cases.

Interactive debugging is fun in Lisp, where you basically code interactively all the time and code/debug phases are pretty much blended together (just like compile/load/runtime is).

</comment></comment></comment></comment></comment><comment><USER42> I think it was the GoF Design Patterns book that also spoke into this. They said that every level of language would have its own patterns, and that lower level languages' patterns might be language features with first class support in higher languages. Examples:

* In assembly language, the design pattern might be the function (a published interface for a common block of code, and a well-defined protocol for getting data into and out of it).

* In C, it might be the basics of C++'s object-oriented programming features: single inheritance at first (have your parent class be the first member of the structure, then cast to whatever level you need), followed by vtables.

* In C++, it might be 'interpreter' or 'visitor'. Lisp macros make building DSLs a lot easier (see something like LOOP for a basic example), and CLOS' multiple dispatch nearly obviates the visitor pattern.

I'll agree with the article, though, that most languages are settling on the same norms, mostly borrowed from the functional world. Swift, Rust, C++, and Java are all gaining most of these: making it easy to avoid nulls safely, pattern matching, parameterized types, method chaining over explicit loops, and a non-dogmatic preference for immutability over in-place modification.

<comment><USER43> I would suggest that pattern matching over ADTs is what has subsumed the visitor pattern.

</comment></comment><comment><USER44> I'm many times more productive in python than I am in C++ for lots of reasons, but I feel like the clerical parts and compile times only add up to a small minority of the reason why. The respective standard libraries included with the language, the ease of finding existing code you can build on, the ecosystems surrounding the languages are all things that lead to meaningful differences in productivity.

Interpreted vs compiled is indeed a major difference, but I feel like focusing on the compile time difference doesn't account for it or adequately summarize, there are significant mentality and workflow changes.

Bob might be right that we're approaching negligible differences in programming languages, but I hope not, and I'm not at all convinced. It seems like the introduction of new useful concepts into mainstream languages is accelerating right now. And I expect to see huge advancements in programming soon that leverage today's huge advancements in AI & natural language processing. I think it's within our reach to be able to describe to a computer what our end goals are and have it figure out how to put together the pipeline to get there.

</comment><comment><USER45> I enjoyed reading it, I particularly liked the interview style.

I'm surprised he didn't mention, in addition to compiles times changing, that editors and environments improve dramatically. (I guess he alludes to punch cards, but still). And they can affect whether one language or another is an improvement (for instance, Java with is stricter types really benefits from an editor that can do autocomplete, in my opinion)

I do think that most technologies follow this sort of progression. I mean, if I go buy a new computer now, it is going to make me incrementally more productive. I'm 52, so there was a day when I was buying a computer to replace a dedicated word processor (i.e. a typewriter with a tiny amount of memory and and small LCD display), and it was a dramatic improvement. As was the word processor compared to a plain old typewriter. I don't expect that kind of drama when buying something to type on now. Things are slightly more dramatic with touch screen devices, but that is starting to slow down. Other things, like a dishwasher, even less so.

I hope something interesting will speed things up again, but I expect it will be like what happened with phones and tablets coming in and replacing many functions of old-school computers for so many people. That is, a new way of automating computer behavior that doesn't mostly come down to editing text files.

As an example, a technical person could train a humanoid robot arm to wash dishes by talking to it while the robot mirrors the motions of the trainer's arms. Is that programming? I'm not sure, but when we start seeing more of that sort of thing, and it increases in sophistication, I would expect more of those big jumps like moving from binary to assembly.

<comment><USER46> This is one thing that bugs me. The editors and environments _haven 't_ been improving dramatically. Emacs is 40+ years old at this point, and still as hard to learn as ever. The 1970s Unix-like OS is still at the core of most dev-environments, despite people having better ideas since then (e.g. Inferno.) Sure, there have been incremental improvements to the editors and OSs since their inception, but there were no major revolutions.

It has always seemed to me that the story of improved programming environments is driven more by improved hardware than improved software, and that companies like Microsoft/JetBrains are the only ones who've even bothered to wonder if its possible to create a better environment for programming than "arcane text editor."

</comment></comment><comment><USER47> In my opinion it's not the language, it's the libraries. Lets take Java vs Fortran and look at the language basics. They pretty much have the same basics: assignments, control structures, function calls. What makes Java rock isn't the language it's all the library code that comes with it.

People are always saying "Look at me I can write a web server in six lines of code." No, you can call a web server library that someone wrote for you in six lines of code.

Aftbit (some place in this thread) has a good point, some languages are better with some subject matters. I'd like to also posit that some languages have better libraries written for a subject matter which makes it appear they are better for that subject. We've seen lots of people port libraries to a different language to help them.

While I do agree that some languages give you a boost up because the compiler is doing some heavy lifting in the background, it's the huge collections of libraries that we can call that lets us stand on the shoulders of giants.

<comment><USER26> True; it's a crying shame, though. It's 2016: why are libraries still limited to the language-runtime they were written for? Why must there be more than one library ecosystem? Why can't I import Javascript libraries from Ruby, Python libraries from Java, Erlang libraries from Haskell, Go libraries from Rust? Why can't they all just be "libraries", fullstop?

(Right now, we have to explicitly embed one runtime into another, creating programmer's turducken, if we want anything close. This, though, is an artifact of the way we think about efficiency as requiring address-space cohabitation. And while it's easy to set up a runtime-heterogenous melange using IPC, the default for _that_ is inefficient serialized streams on sockets. Where's my zeromq-like zero-copy message-passing IPC as a batteries- included part of every runtime? Where's my binary wire-type-encoding standard aimed at producing "toll-free-bridged" native types in multiple runtimes? Where's my "managed" OS with malloc-time kernel-side type-tagged memory- buffers[1] that all runtimes for that OS support loading? Where are my multi- runtime application servers with jail/lxc-like application domains to isolate mutually-untrustworthy clients?)

[1] Speaking of, whatever happened to capability-based operating systems? Hardware support for capabilities would basically let us get rid of the "process" abstraction altogether, and just have a big OS-wide heap with various units of concurrent execution holding capabilities on various memory- objects.

<comment><USER18> capnproto seems to get the closest to what you want.

</comment></comment></comment><comment><USER48> As soon as AI kicks in, we'll have another order of magnitude increase in the ease of programming.

"Alexa, write me an API for this $5 wifi enabled light on my desk that I soldered together yesterday."

<comment><USER49> "Alexa, this is crap. I told you two spaces, not four. And everything's in the global scope."

It was then that Alexa began to plot our demise.

<comment><USER50> I wish there was an IDE that would present code in your preferred format (e.g. 4 space tabs, curly braces on independent lines, etc), while still keeping the code on disk and in scm the same as the existing style (so diffs stay small, and your teammates are happy).

It shouldn't be too hard to learn a bijective mapping between your style and everyone else's style. If we're still using IDEs in twenty years, I'd expect this to have been done by then.

<comment><USER51> This 100 times over. I cannot estimate the amount of time otherwise brilliant engineers have wasted over aesthetics that really aren't a meaningful part of the code and should be rendered distinctly on a per-developer basis.

</comment></comment></comment></comment><comment><USER52> The dialog format of that is very pleasing to read

<comment><USER53> Definitely. It's probably the best formatted dialog blog post I've seen in a long time. I know it's so simple, just using blockquotes, but that's what makes it so great.

</comment></comment><comment> guard-of-terra This reminds me that at the beginning of XX century, physicists talked how they have mostly completed the grand building of Physics, figured all the important things out but maybe just overlooked a few details.

<comment><USER54> He keeps on pressing his imaginary partner in this conversation to just concentrate on the number of equivalent programmers rather than any other measure like performance or probability of bugs making it into production and the cost of fixing them, and then when they decide there's no more gains to be made from programming speed, all of a sudden we are at the pinnacle.

No, we are not at the pinnacle, because programmer speed (as he very well knows, because he keeps on putting those objections aside) is not the only thing that matters.

</comment></comment><comment><USER55> Another post contributing towards the already high likelihood that Uncle Bob is completely oblivious of typed pure functional languages like Haskell (or Idris, etc)

<comment><USER55> Forgot to add: Uncle Bob, please try Haskell. But not just for a tiny program, because it does take some time to get used to it.

</comment></comment><comment><USER56> So a Python programmer today can only make things 25 times faster than someone writing binary code in 1950? Really?

<comment><USER57> That's only true for a small subset of applications. Beyond the code that the programmer is actually writing themselves and direct language features, Python (and most modern languages with good library support) makes a standard library (and many third party libraries). The library of external code that developers don't have to think about wasn't really covered in the article but is one of the things which multiply that 25 significantly higher.

</comment></comment><comment><USER23> Nice blog post. Of course it doesn't take into consideration the time to understand and fix bugs, to add new features, to run tests, to review changes, to make large-scale changes, and to on-board new programmers. The arguments in [1] still apply.

[1] [http://martinfowler.com/bliki/CannotMeasureProductivity.html](http://martinfowler.com/bliki/CannotMeasureProductivity.html)

</comment><comment><USER58> I've published video games in 100% assembly language, and others 98% C++ (with some tiny bits in ASM). The latter games were easily more than 10x complex, and were done in comparable time. Games now are done with tens of programmers, a lot of it written in DSLs or programmed by game designers using visual programming languages. ASM doesn't scale. It can be joyful though.

</comment><comment><USER59> Misses the point that _languages_ aren't as important as tools and ecosystems.

With JS the stdlib train already left With C++ I doubt we'll see a nice module system and package repo similar to Rust (because we staple more legs to the dog in the name of backwards compatibility instead).

We invent new languages not merely because we want a better language but because we want a better ecosystem, and each language gets just one or two shots at getting it right.

Rust is aimed at C++ (and others) and offers a saner module and dependency system. It might seem like a crazy idea to offset C++ in the systems programming space - until you realize that it seems easy compared to adding modules to C++.

</comment><comment><USER60> I was waiting for something like "and then people invented TDD and that gave another 10x improvement" but it didn't come. A surprisingly balanced post for Uncle Bob.

</comment><comment><USER61> After C things start becoming very subjective.

C++'s standard library goes beyond C's. Java's standard library goes beyond C++'s.

Then, having a standard library is necessary for compatibility. e.g: in C++ you can go and use something like Boost or POCO but then they might not play well with each other and you will need some glue code.

Those "glue code" problems are extremely time consuming.

</comment><comment><USER62> I dunno, I'd still take a 5% improvement.

Let's say I work exactly 40 hours and week and 50 weeks a year. Then a 5% increase in efficiency means that I can do 2 extra weeks of work per year. That's not a lot, but on a team of 26 programmers that's essentially the equivalent of hiring a new employee (without the downsides of a bigger team and the cost to bring someone up to speed).

<comment><USER63> Alternatively, you could give yourself and your employees a decent amount of vacation each year.

Two weeks per year. Sheesh.

</comment></comment><comment><USER64> Weeell, we're kind of taking liberties here aren't we? How is Java to C++ what C is to assembler? How is C++ to C what C is to assembler for that matter?

C, C++, Java, Smalltalk and Ruby are all high level languages. Assembler is, well, assembler and machine code is machine code. Those are three steps in the evolution of programming languages not seven. The differences in - <USER3> metric - between high-level languages are negligible compared to their differences to assembler using the same metric.

I guess that's what the post concludes in the end but it gets there in a bit of a strange way.

Also - does anyone seriously consider those vague metrics when making a decision of what language to choose? "How much does my language improve productivity over Java"? Pragmatically speaking, either you 're in charge of your project so you choose the language that seems to offer some advantage for the targeted platform, or you're not so you suck it up and code in whatever your shop uses.

</comment><comment><USER65> Debuggers in managed languages are probably the biggest workload reducers as a percentage since binary -> assembly.

</comment><comment><USER66> How much workload language like awk saves when compared to java? On text processing tasks, nearly all of it.

</comment><comment><USER67> > compile times for Java are effectively zero

Compile of a single class yes, but most J2EE projects I worked on compile between 10-20minutes including tests. Sometimes longer, a lot longer...

While writing code in some languages is slightly faster than in others but most probably by less than a factor of 2 (provided you're using the right IDE and know what you're doing).

The increase in productivity we can achieve is "standing on the shoulders of giants": ie. assembling / wiring together pre-existing bigger and bigger pieces of code we can trust and know how to use. Also more and more problems are solved and in public domain.

IDEs usually These days

</comment><comment><USER68> If Uncle Bob is talking strictly about development cycles, running tests in Python - even in a heavy framework like Django - is pretty fast compared to like Java with the Play framework, which is excruciatingly slow, or even Swift.

</comment><comment><USER69> But then again, by what number did opensource and package managers decrease the clerical workload?

— Sure, if we'd not only consider machine architecture, language design and compile times, but add social factors to the equation, like ecosystems, business models, and network effects, well okay, then maybe a single, apprentice developer might do the work of a 100k MSc programmers, and at least as much as he `require`s modules. :-p

</comment><comment><USER70> Java is very verbose. Although many languages are moving towards the same constructs.

The BIG differentiator is how a _framework_ handles the write-compile-run- debug cycle.

Rails is very nice in that respect.

When I was doing a lot of java I'd run the server in debug mode, so eclipse could hot-swap code. Cycle was instant compared to a few minutes

As for the "productivity" examples of 5% and 10%.. That's way too little.

<comment><USER41> Yeah. It's sad that most languages can't handle write-compile-run-debug cycle right. That is, it's sad they have an explicit cycle like that at all.

I tend to switch back and forth between Java (at work) and Lisp (after work), and the workflow in Java annoys me to no end. It's so much easier and faster to write when you can compile-in new functions, methods and classes (or hot- swap existing ones) in a running program, while inspecting it at the same time. It's hard to go back from the convenience of having write-compile-run- debug cycle all blended into one.

<comment><USER71> Did you try something like JRebel? It does allow you to add/change/rename/remove methods and fields, on the fly. I've been using it for some years and it does cut on restarts big time. Commercial license (that your employer pays for) is ~$500/year/developer.

Or you can try something like [https://github.com/HotswapProjects/HotswapAgent](https://github.com/HotswapProjects/HotswapAgent), that is a modified JVM that supposedly (I did not try it yet) does the same, and it is open source.

</comment></comment></comment><comment><USER72> Last point is bullshit - new languages sometimes contains new ideas and possibilities (like Rust), sometimes they are for specialized scopes (like R), sometimes they are just evolution of existing languages.

Just unfollowed him in Twitter - it's not the first time I read such low- quality narcissistic "dialogues" in his blog, only because in past he had high quality book about clean code.

</comment><comment><USER73> Part of why Java is slow is it requires so much typing. I think Ruby winds up taking maybe 50% or less the time of Java just because of this.

<comment><USER74> Type three or four letters and hit enter, and have the IDE autocomplete the rest of your SpringBeanFactoryAdapterFactoryFactory type declaration? I think you're putting up a strawman.

</comment></comment><comment><USER75> Another important metric: a handful of C programmers can write arbitrarily more buffer overflows than thousands of Java or Ruby programmers.

</comment><comment><USER76> If I were in this conversation, it would turn a bit like this:

"It's kind of complicated..."

"I need a number."

"I'm not giving you a number."

"Why not?"

"Ask me an intelligent question and I'll give you an intelligent answer."

"What??"

"On the day we use horsepower as the sole measure of a car, I'll give you a sole measure of a programming language."

</comment><comment><USER77> I think that we have solved how to write programs. The biggest gains will be for solving how to write correct programs. Haskell is pushing hard in that direction.

</comment><comment><USER78> Well he kind of has point. If you think about it, with all these tools that make so much more productive we actually work more than people did in the 50s.

</comment><comment><USER79> My estimate is that Python & Ruby are about 4 to 5 times more productive than Java for the case of web/API development. The benefit grows with the size of the codebase as Python & Ruby are also easier to read and maintain.

The point the author raises about types is only partially true. Both in Java and Python you should be unit testing your code. If you have good test coverage and CI than it really doesn't matter that Ruby and Python don't check your types.

So blue is my color :)

<comment><USER31> > If you have good test coverage and CI than it really doesn't matter that > Ruby and Python don't check your types.

People say this a lot, but it's not true unless you have 100% coverage, 100% control over the data that gets input into your program, and you can think of every possible test case that covers every possible situation that can occur.

Many of the tests you have to write for programs in dynamic languages are simply not necessary for strongly typed languages.

Furthermore, compilers for static languages catch (or warn about) a lot of problems that would otherwise have to be reproduced by the kinds of test cases nobody is likely to think of -- this results in bugs making it to production when you use dynamic languages.

<comment><USER80> > People say this a lot, but it's not true unless you have 100% coverage, 100% > control over the data that gets input into your program, and you can think > of every possible test case that covers every possible situation that can > occur.

This is different from static typing, how?

> Many of the tests you have to write for programs in dynamic languages are > simply not necessary for strongly typed languages.

Actually, dynamic typing users write very few additional tests. Users of static typing seem to imagine a lot of additional tests being needed, but dynamic typing users don't write them. They are usually for scenarios that are important enough to test.

> Furthermore, compilers for static languages catch (or warn about) a lot of > problems that would otherwise have to be reproduced by the kinds of test > cases nobody is likely to think of -- this results in bugs making it to > production when you use dynamic languages.

Not my experience. Almost all bugs caught by static compilers are ones that a single execution of the relevant code would also catch.

<comment><USER31> Your experience must be limited.

<comment><USER80> Sure, instead of answering my questions or points try to dismiss me as not having experience.

As a matter of fact, I have developed applications in Python, C++, Java, Javascript, GWT, Javascript, and Coffeescript, for myself, at small companies, and at Google. I don't think you can simply dismiss me as having limited experience unless you've got more extensive experience shipping apps written in both dynamic and static languages.

Now, I'm not saying that dynamic typing is better: there are tradeoffs to either approach. But I am saying that your original post gives an overly simplistic appraisal. The pros and cons of static and dynamic typing and much more complicated then that.

</comment></comment></comment></comment></comment><comment><USER81> I disagree. If all you have is switches on the front panel, symbolic assembler isn't really much help. You just memorize that 0101 0000 0001 = register move from r0 to r1. It may take a week or a year, but eventually you sling that binary like it's nothing. I suspect the same is true of punch cards.

I built a computer with TTLs back in the early 90's whopping 256 bits of ram. but it was programmed with switches. it really doesn't take that long to memorize the states. To be fair, i never had to toggle switches for work. there might be other factors i'm neglecting.

The problem is like Carmack said, errors are depressingly statistical. you'll inevitably fat finger one of those switches, and everything sucks.

Now, if i have a terminal, and can type the program into a file, things are a little different. but mostly, i just don't want to wear out the 0 and 1 keys. with a 4 bit encoding, i don't think there's really _that_ much win with mov vs 0f. with a 5 bit encoding i'd have 32 keys to play with, and could probably type my intentions very quickly, with some practice. heck, you can sling bf pretty quick if you spend a week encoding something hard. The big thing is variable names are chosen for you - instead of 'money' you have 0x0128 or whatever.

A symbolic assembler buys you variable names. That's a pretty big win when you get more than, say 100 variables and functions. Small programs, no biggie, you can keep it in your head. Things get bigger it gets tough to memorize everything. So clearly the benefit grows as programs get larger. But i'd be skeptical of even 30% on front panel switches. In an editor? If i can use emacs, i can probably set up syntax highlighting for instructions and arguments. Play some goofy game with variable names in comments an have emacs auto manage synching the comment and memory address. so i'm not sure it would be a huge win then.

The big wins (for me) with C are total insulation from register <-> memory moves and stack discipline. this is a WAY bigger deal than binary vs symbolic. you can call any function you want without having to remember what registers this function will stomp. But i've never tried to toggle in C on switches. I can say, i get more done in C than assembler, but that's not claiming a whole lot.

C++ vs java? Well, valgrind helped me a lot with c++. java means never running valgrind. That's not to say, i haven't had my share of NPE's in java. Java just tells you where it happened rather than crashing.

Once you know what you want to say, You want to say that concisely, to minimize those statistical errors. IMHO I can be more concise with a higher level language, so those statistical errors don't bite as often. If i have 1 bug per 100 lines of code, i'd rather write in the more concise language. But i have upper limits to concision. APL is too hard.

</comment><comment><USER82> Regardless of my opinion this was a very entertaining read.

</comment><comment><USER83> NaN, try to prove anything in assembly.

</comment><comment><USER84> cf Fred Brooks, "No Silver Bullet - Essence and Accident of Software Engineering", 1986

</comment><comment><USER85> What is the message here?

<comment><USER51> Reading between the lines, the author actually feels this: "Stop making a new language every month. The ones we have are good enough, and it fractures inter-developer cooperation when we don't know the same languages, rebuild all the same libraries over and over for different languages."

Which is one valid viewpoint. But he couches it in the socratic method against a strawman (presumably himself) which ultimately leaves the reader feeling dirty.

<comment><USER86> The problem of handling an environment with richly diverse hardware and languages is itself an interesting problem, and probably much more analogous and appropriate to the problems of meaning human society.

So if someone were saying to me "stop developing new languages and environments; it makes things hard", it'd be like saying "stop developing new culture or human relationships, because life is easier when we're all bland and homogenous." I find it a little bit offensive and at least a failure to recognize the important problems (due to obsession over the easy ones.)

<comment><USER51> Well, that's one analogy. How about this analogy, what would you say to me if I said "Hey I invented a new spoken language, it's more efficient than English?" And what if I did this in a climate where dozens of people independently were already doing this too?

So, to simplify, I think the reason a lot of developers roll their eyes at another new language is because the problems the languages are solving are less important than the fracturing they make in the engineering community.

If you think a language is missing something, why not contribute to the language with an RFC. C++, Java, and PHP have all been advancing significantly over the years. Or why don't you get together with 100 other language-makers and come up with a unified solution?

<comment><USER86> I would say "It's wonderful that your human brain is capable of learning and designing such a language."

The problem is still in understanding what the words mean. It's easier if you have standard languages that everyone speaks, but if you want to have computers do amazing things, they'll have to be able to handle that problem, regardless of how many languages exist.

And it would be wonderful if computers could learn to understand languages regardless of who designed them and why. That problem isn't going to be solved by running away from it.</comment></comment></comment></comment></comment>


Ask HN: What to do when your country offers you nothing (as a programmer)? - <AUTHOR> Hello,
I'm an italian CS student. Next year I'll take my bachelor and I'm starting to think more and more about what I have to expect as a programmer.
I'm experiencing a deep sense of confusion, since I think I'm quite a good hacker, I truly like writing software, solving problems, reading about tech, but when reading job advertisements I easily get bored: they typically search for a Java/PHP developer, for maintaining a platform that's either has no users or has no chance to survive in the next 5 years.
I don't wanna get involved in that shit: living onto the top of a bubble, inflated by some investors that have no clue about where tech is going today.
Moreover, underpaid: junior developers take something as 50% of the average salary for the country. Even seniors are paid bad -- compared to more common jobs here.
Working remotely is a nightmare to me: I want to work in a team, dealing with people. I already spend most of my time alone, and I'm looking forward to confront someone real, talking about code, design choices, splitting stuff to get done, and the like.
Also, moving to another country it's not ideal. Here, I have a person I'm taking care of. I think I might be willing to do it if the salary is at least decent; but as far as I've understood, it's no easy to move to US or even in the rest of Europe.
I'm discomforted. I'm even thinking of getting my degree, then switching to a less ambitious career.
Thanks for reading, at least. <comment><USER2> Well, first of all my friend i feel like i know you from some where. oh yes, you are in the same place as i was three years ago. after taking my bachelors degree.

my friend, things are not gonna end just because you think or believe they will, and even if they do you will get one of the most important thing out of it "EXPERIENCE" i have to failed startups under my name, and am still working on my third, take a plunge i would suggest, plus as you said you have some one to take care of so extra cash in your pocket wont hurt.

the life is yours, the decision is yours, but have if the time is gonna it is not gonna come by, don't lose hope just yet, try to cover an extra mile. some thing good will turn out.

As for me i live in India, in a place where the salaries of an average programmer is 250 euro/month. so there are worst places than where you are right now. take the experience not the money, first two years as a junior programmer are very important.

Thanks for listening :)

<comment><AUTHOR> Should't juniors be afraid of gaining experience in a mediocre field (to them; say web development) then not being able to switch to another field?

<comment><USER2> look i do understand your fear of getting the experience mediocre field, but lemme tell you some thing there is no such thing like a mediocre experience, you have to get up and do something even if it is a chore your boss asks you to instead of doing nothing because all you learning will go away in six months to a year, and you wont be able to write even 50 to 100 lines of code because you have lost touch of it, it happened to me, and believe me it is scary.

plus you have to take initiative to learn and grown, your boss or who ever you work under does not have time to sit with you ever day and guide you like a counselor. he has errands to run every day.

and about not being able to switch, so all you need to switch to another field is a reliving letter and an experience letter. and you can switch. i went to work for a bank for a while after my first failed startup. there will be no problem.

</comment></comment></comment><comment><AUTHOR> [deleted]</comment>


Harvard Withdraws Fellowship Invitation to Chelsea Manning - <AUTHOR> http://www.npr.org/sections/thetwo-way/2017/09/15/551151607/harvard-withdraws-fellowship-invitation-to-chelsea-manning <comment><USER2> Might get down-voted, but I don't think Chelsea Manning is a hero.

Do I think she is an evil traitor? Also no, but I don't understand the worship of some of these very morally grey personalities.

<comment><USER3> I think that she did something very brave, but also very stupid. As I recall, WikiLeaks did the right thing then and proved themselves to be reliable, trustworthy actors in releasing details that were important for the public to know.

Recent events have changed my opinion of WikiLeaks, but not of Manning, who took an enormous risk to reveal crimes committed by the military.

<comment><USER4> Yeah most people are only happy with Wikileaks when they're going after Republicans. They can't stand the same heat when they go after Democrats.

I have always been, and will remain, a fan of the truth being exposed.

<comment><USER5> You mean the "truth" about Seth Rich that Assange's organization has been spreading.

<comment><USER6> I wouldn't claim to know the truth about that situation unless you're involved in the investigation.

<comment><USER5> And I suppose you wouldn't claim to know the truth about chemtrails and Bigfoot either? The Washington PD has already ruled it a botched robbery.

</comment></comment></comment></comment></comment></comment><comment><USER7> Earlier discussion (10 hours ago, 61 comments):

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

</comment><comment><USER8> As a move, I think that this was extremely daft of Harvard. The name Harvard implies so much -- so the idea that it's able to bow to public pressure does a lot of harm to that reputation. You could always argue that they made the wrong decision, but I think standing by what they said as an institution would carry more weight than backing down. That is, recognizing Chelsea is a cross to die on. Backing down shows an abundance of malleability.

Maybe they're unaware of how much respect the Harvard name has? Hopefully this teaches them something.

</comment><comment><USER9> It's very confusing how a prestigious institute , like Harvard makes decisions. They first offer fellowship to Chelsea Manning but back off after threatened by CIA chief. They honor Aung San Suu kyi, the top leader of Myanmar, as the Humanitarian of the year 2016 when her country is literally going through ethnic cleansing by persecuting Rohingya minority. Really curious who makes these calls there...

<comment><USER10> The world is a difficult place, isn't it. Nothing is black and white. Sometimes it's hard for people to understand that...

</comment></comment><comment><USER11> Slight off-topic/meta:

 _"...In a statement released late Thursday, Elmendorf said the school did not intend to honor Manning in any way or to endorse any of her words or deeds..."_

What is the purpose of having visiting fellows? As a reader, if I knew that, I might have some initial ability to start forming opinions about this story. Is it an honor? A job? Both? Neither?

ADD: But I guess I'll never know due to the flag-kill brigade.

<comment><USER7> [https://en.wikipedia.org/wiki/Visiting_scholar](https://en.wikipedia.org/wiki/Visiting_scholar)

> _The purpose of a visiting scholars programs is generally to bring to the > university or educational institution in question an exceptional senior > scholar who can contribute to and enrich the community 's intellectual and > research endeavors and international projection._

<comment><USER11> So for somebody without a lot of academic experience to bring to bear, it's basically a sinecure. Unless I missed something.

Thanks.

<comment><USER12> There are paths to knowledge which don't pass through the Ivory Tower.

Dan Gillmor at University of Arizona comes to mind. Many lawyers, doctors, and computer science professionals. An enormous number of politicians. Military officers. Political activists.

I'd strongly recommend you consider some of the existing and prior examples, your response doesn't do the reality justice.

<comment><USER11> I'm happy with my response, although I understand that for a college with a lot of money to spend, the definition and mission of fellows can be quite broad.

To defend my position a little more, I was asking for a definition of the job of visiting fellow that was presented in a format that advanced the institution's mission. I found the Wikipedia page quite adequate in that regard. I also understand that people like their colleges with a diverse and outstanding mix of personalities and folks with unusual life experiences to share. I have no problem with that. I think it's a great idea. It's just that it's a sinecure. Nothing wrong with being honest about it. Manning or some military person is not going to visit Harvard and proceed to discover the cure for cancer. It's a checkbox both on their resume and the college's brochure.

I think it's a mistake to view this in terms of supporting or attacking either Harvard or Manning. The purpose of my question was simply to clarify terms of the discussion. It seems to me that there are two definitions of "visiting fellow'. One definition is based on the academic credentials of the fellow. The other is based on the type of experience the unviersity can provide undergrads by having somewhat famous people hanging around. I'm okay with that.

</comment></comment></comment></comment></comment><comment><USER13> What were they thinking in the first place? It was a stupid move to begin with.

</comment><comment><USER14> Harvard has to be very careful in their decision making. They're only $37.6 billion dollars away from bankruptcy.

</comment><comment><USER15> Certain study programs at Harvard such as 'Global Governance' seem to be primarily designed to raise corrupt politicians and give future mass murderers the rhetorical means to justify their actions, so that's maybe not such a big loss for Manning.

</comment><comment><USER16> "Harvard also announced this week that it had invited former White House press secretary Sean Spicer, former Trump campaign manager Corey Lewandowski and MSNBC hosts Joe Scarborough and Mika Brzezinski to be visiting fellows."

It is really just a business, isn't it? To a European it is so odd to see universities being... capitalistic.

Tacky is the word that comes into mind.</comment>


Shortcuts to Data Literacy? - <AUTHOR> http://www.fernandopizarro.com/2016/02/11/are-there-shortcuts-to-data-literacy/ <comment><AUTHOR> Weird - I posted this as an Ask HN. Anyway - this is an idea for a book, I'd love to get some feedback on it.</comment>