Mark Cuban says studying philosophy may soon be worth more than computer science - <AUTHOR> https://www.cnbc.com/2018/02/20/mark-cuban-philosophy-degree-will-be-worth-more-than-computer-science.html <comment><USER2> His argument seems to be that advances in AI will mean that software development itself is soon automated away, in which case a CS degree will be useless. Then, he advocates studying philosophy because this future will need "big picture" thinkers.

I don't know how much substance there is to discuss here. It pretty much hinges on how you think AI will develop over the coming decades. I am skeptical that software development will be automated away anytime soon, especially since the actual writing of code is just one part of the job. I recall an Economist article several years back arguing that jobs are less automatable the more varied they are. For this reason custodians should be among the last to go, the logic being that a given custodian does so many different maintenance tasks that it would be impractical for a bot to replace them.

Software development seems similar. You're constantly pivoting between different and shifting problems. Most of the impressive AI demonstrations like image recognition or playing Go are really about getting good at a single well-defined task. We seem to be _very_ far away from the kind of adaptibility required to automate away developers (though perhaps the CS degree will devalue as more people pursue it).

It's also unclear to me how exactly philosophy is better preparation. My own experience with academic philosophy is limited, but from what I can tell its main selling point is that it teaches you to examine things in a critical way that's very aware of the argument in question, the assumptions made, and the structure the argument sits in. My experience in math (which I pursued much more) was similar, and I imagine that most good CS programs teach similar skills?

"Study philosophy" here seems like a catchy (and perhaps poor) proxy for "make sure you can reason about stuff outside a narrow programming bubble". But that's always been good advice.

<comment><USER3> > _from what I can tell its main selling point is that it teaches you to > examine things in a critical way that 's very aware of the argument in > question, the assumptions made, and the structure the argument sits in._

That's definitely a big (and important) part of it. There's an unfortunate dearth of critical thinking and examination of ideas these days. I have theories as to why that is, but it's out of scope for this discussion so I will abstain.

Another big part of philosophy as well is to familiarize the student with the big ideas with the hope that they can be further refined, to drive both the individual thinker forward, and hopefully humanity as a whole as well.

For example, I think a hugely valuable part of philosophy training is the study of ethics. So many people (software engineers and companies included) don't really stop to think about the ethics surrounding what they are doing. This is a mistake, IMHO. I highly recommend reading about and understanding Immanuel Kant's work in this area, especially his categorical imperative and hypothetical imperative. Comparing/contrasting that with Jon Stuart Mill's Utilitarianism, and conducting various thought experiments makes for a good time (you can tell I'm quite the partier :-D ).

<comment><USER4> > There's an unfortunate dearth of critical thinking and examination of ideas > these days. I have theories as to why that is, but it's out of scope for > this discussion so I will abstain.

As someone who sees the same things but has no theories, I for one would like to hear a few of yours.

<comment><USER5> I'm not the other poster, and this isn't my theory - but for people like Adorno or Hegel the go-to explanation for this phenomenon is basically that reasoning in our society is ends-rational. We're very good at considering ideas insofar as they relate to a goal - for instance, the geometry of transistors in relation to their performance. That's because we're a culture of employees - and in such a culture, you don't need to think about goals, just about means.

This kind of thought process is pretty toxic to critical thinking and examination of ideas, since the most central elements (our goals) are almost entirely unexamined - and we don't really include their examination in our education, since we're only interested in preparing children to be good 'problem solvers', or in other words, employees.

</comment></comment></comment></comment><comment><USER6> Firstly, AI is currently massively overhyped and people are overestimating the progress we are making. What we are currently doing is curve fitting and searching on steroids enabled by the ever increasing availability of computing power, what we know about general intelligence hasn't changed much in a long time, at least as far as I know.

I won't rule out that we may build an AGI by just throwing enough computing power at it and simply simulating brains with enough fidelity but without actually understanding how it works, at least not at first, but I really don't see much - if any - progress towards building an AGI because we know what we have to do. Maybe the secret of general intelligence is just curve fitting and searching at massive scale and we fail to find the secret behind it because there is none, but we really don't know.

That of course doesn't mean that the recent developments are not interesting or don't have useful applications, they are just not as groundbreaking as often portrayed and we probably still have a rather long way to go.

With regards to big picture thinking and general problem solving ability, I don't think you are in a particularly bad spot as a software developer or hacker. Especially not if you are doing project work or frequently change jobs and regularly have to get familiar with new business domains. Also if your focus is more at the design and architecture end of the spectrum as compared to coming up with beautiful looking CSS.

But I would certainly agree that philosophers have some ways of thinking that are at least to some degree unlike what you find in software developers, but I can't really pin it down. I only know it exists because I am frequently somewhat surprised by the thoughts and ideas that come up in philosophy and they seem not like things I would think of. Maybe it is just the level to which philosophers dissect things and which goes beyond what is required in software development but I really can't tell for sure.

<comment><USER7> I think another aspect of the current boom in AI is that it is _model-less_ curve fitting (to use your description), and that this is both revolutionary and regressive. On the one hand machine learning algorithms let us solve fuzzy problems that we don't necessarily understand deeply, but the trade off is that those solutions don't give us any real fundamental insight into the nature of the problem the same way e.g. discovering new physics would. So we are now able to solve all these problems that we couldn't before, but in a sense these solutions are unfulfilling because they reveal little else.

</comment></comment><comment><USER8> For some reason, despite him being extremely well-accomplished, I just can't take any advice he gives seriously, compared to Bill Gates or even Ray Dalio.

<comment><USER9> Mark Cuban got supremely lucky selling broadcast.com to Yahoo in the deal that best illustrated the crazy boom years of the .com bubble and believes that this makes him some kind of sage instead of a lottery winner.

You just can't compare him to Gates who got where he is today through a combination of luck at birth and supremely hard work (and some questionable business tactics).

<comment><USER10> Cuban's stake in Broadcast.com's was worth about $100M before they sold to Yahoo, and since the sale to Yahoo, he's managed to over double his net worth via the Mavericks and his business interests. He may not be Gates, but I think he's more than a lottery winner.

<comment><USER11> He would be wealthier today if he had immediately put everything in an S&P 500 index fund and spent the last 20 years ignoring it.

<comment><USER12> That's factually wrong.

The S&P 500 was 1300 when he sold to Yahoo. He received $1.4 billion of Yahoo (14.6m shares at $95/each). He had to pay taxes on clearing out that position as well, so you can safely assume his after tax position was more like ~$1.1 billion. He very solidly beat the S&P 500.

He's worth $4.08 billion today according to Bloomberg (ranked #500 on their global rich list). He has increased his net worth by nearly 4x.

The S&P 500 is at 2747. It has just over doubled since April 1999. He'd be missing a billion dollars if he had gone with the S&P 500, including any dividends.

He was better off with what he did, he beat the S&P 500 index fund. Not only did he make more money his way, he got to do what he wanted to with his money, such as buying the Mavericks.

</comment></comment></comment></comment></comment><comment><USER13> I studied philosophy in College but got my CS degree. I think some guy called Paul Graham did so too. I think philosophy is useful for detecting if someone is lying to you or doesn't know what they are talking about. It does stress critical thinking in different ways than say studying math (I also studied math also).

I can't really take what he is saying though at any serious level though and I don't believe what he is saying at all. I think that this story is to grab headlines.

<comment><USER14> > _philosophy is useful for detecting if someone is lying to you_

What do you mean? What did philosophy teach you about lie detection?

<comment><USER15> Ah, you caught him. You must also have taken philosophy.

</comment></comment></comment><comment><USER16> > Cuban advises ditching degrees that teach specific skills or professions and > opting for degrees that teach you to think in a big picture way, like > philosophy.

I don't think my computer science degree taught me 'specific skills' but instead taught me how to learn. How to pick up new concepts in a short period of time. I think does not fully understand what a computer science degree is or how artificial intelligence works.

</comment><comment><USER17> Personally I think that computer programming AIs that can really replace humans (beyond just programming automation) will need to be AGIs. Those AGIs will be able to do philosophy just as well as they can program.

I also personally believe that we currently have most if not all of the ingredients necessary for AGI. My prediction is that in 2018 or 2019 we will see public demonstrations of AGI. These initial demos will be underwhelming and not have the capacity of humans or even animals -- but nonetheless will be truly general intelligences with significant human- and animal-like abilities. It will take another few years before the technology is widely recognized to be human-equivalent or better, but the initial systems will be trained in numerous fields quickly. There will be very powerful general systems available by 2021.

Some of the pieces necessary for general intelligence as I see them are truly general purpose inputs and outputs (like a body or virtual body), highly efficient processing of high bandwidth input and output, fast online (immediate) learning, hierarchical learning and computation, the ability to learn and recombine flexible sequences and time-based data. Advanced neural net-based systems, especially ones that are inspired by animal cognition systems, are providing all of these features. Its mainly a matter of integrating existing leading edge neural-net research with a good understanding of AGI.

</comment><comment><USER18> Utter non-sense for two reasons.

First, he is reversing cause and effect in that AI is a philosophic problem (more specifically an epistemological problem). The philosophy departments have been doubting the efficacy of reason for over a century now, a process that started with Descartes, advanced by Hume and cashed-in by Kant to save faith from reason (i.e. subjectivism). If modern philosophy had been actually working to validate reason and explain how it works we would already have AI. AI is on hold until someone explains how reason works, and more specifically concepts, in enough detail so that we can program a machine to do it.[1]

Second, if you signed up for philosophy courses or a PhD today, perhaps you would learn how to be a more critical thinker but the danger is you would be infected with navel-gazing skepticism and impotence of reason and thus wreck your ability to think, big or small picture. If you are really talented you can get tenure writing essays destroying the work of your colleagues without generating a shred of original work.[2]

[1] Someone from the early work on computers said (I paraphrase); "Show me what the mind is doing and I can make a machine that can think". I want to say von Neumann but I've never found a source for that statement. If anyone knows who said it and where I would be very grateful for a reference.

[2] LBJ: "Any jackass can kick down a barn but it takes a good carpenter to build one."

</comment><comment><USER19> Many people think the current buzz in AI is about intelligent machines instead of highly repeatable pattern recognition. I suspect we are several major advancements away from sentient machines and in a few years the buzz over ML will die down as we realize that it isn't much more than a great at sorting inputs.

<comment><USER20> The buzz may also continue to increase. The power of even limited narrow AI is only starting to show.

</comment></comment><comment><USER21> I personally have taken myself to learn more about psychology. I've already spent most of my life learning about machines and how to control them. It's time to learn more about people.

</comment><comment><USER22> "We don't need people to engineer buildings any more, because we have architects and city planners."

I wouldn't expect a philosophy major to leapfrog into a similar compensation package as a competent engineer. At best they're going to be like PMs with domain knowledge, and working experience building software will be required for folks on product teams. Just another case of individual with cross- discipline expertise being more valuable than ones with narrower focus, which is nothing new in the workforce.

</comment><comment><USER23> Ai hypers dont spend a min building ML models or munging data. Its so far away before AI can do all

<comment><USER24> This guy doesn't even know how to program. Some exec probably bamboozled his gullible self and now he's trying to making an ass of himself in headlines.

<comment><USER25> [https://www.forbes.com/pictures/mme45gmef/mark-cuban-the- pro...](https://www.forbes.com/pictures/mme45gmef/mark-cuban-the- programmer/#789f94bf3300)

<comment><USER24> Okay, he does know how to program. But he still doesn't know fuck-all about AI.

</comment></comment></comment></comment><comment><USER26> Reminds me of what an ex colleague used to say: Every scientist is a philosopher, but not every philosopher is a scientist.

Let me explain: Philosophers love questions and problems, but the difference with scientists is that the latter like to find answers to those questions and solutions to those problems. It seems in practice, that philosophers like the questions more than the answers, and like them more to be "unsolved".

</comment><comment><USER27> Why do people keep quoting Mark Cuban? He got lucky by selling his company to Yahoo just before the dotcom crash. I don't know any other worthy thing he's done since then. I really wish reporters weren't so lazy and just keep parroting things from people that they've heard of without qualifying how useful or effective the source is.

<comment><USER28> If you define "worthy" as "financially successful" then there is a lot

HDNet

So many media appearances that he's a celebrity and his appearance at a location becomes valuable/monetizable. (Dancing With The Stars, Entourage, etc.)

Shark Tank (9 seasons of broadcast /syndicated tv - think about money from the reruns)

Dallas Mavericks (NBA sports team) owner who has appreciated the value of the franchise not to mention won championships

And last but not least he is accessible to entrepreneurs and responsive via email.

<comment><USER29> All those things are a result of the first thing.

<comment><USER28> I don't see the point to your comment and I would also say it's more complex than simply the deterministic result of selling Broadcast to Yahoo! and smartly locking in the stock price with a collar trade... I'd say it's the product of his charisma, natural talent, work ethic, experience at previous companies such as Micro-Solutions and like ventures, etc.

</comment></comment></comment></comment><comment><USER30> While I agree someday, (more likely 40+ years from now) AI might be general enough to code new/better ai... I don't think philosophy will be the goto college degree...

I think the arts will possibly, because if AI is doing all the work, building the industries, and technologies we want then I feel science and entertainment will be two things ai can't do.. Science because it takes human curiosity to even know what we want to know or search, and the whole point of knowing is curiosity -- I think science will exist for awhile, albeit augmented fiercely by ai.

Entertainment because if there are no jobs as accountants, lawyers, or doctors, or any other jobs if--we end up in post-scarcity one thing we will need is something to do in all our free time, that something will be binging on netflix and social media 24/7.

</comment><comment><USER31> > Cuban advises ditching degrees that teach specific skills or professions and > opting for degrees that teach you to think in a big picture way, like > philosophy.

I'm not sure if big picture thinking skills come from studying one specific field like philosophy by itself. I'd expect interdisciplinary thinking and life experiences to be more important.

Examples: meet many different kinds of people from around the world who challenge your preconceived ideas, and listen with an open mind. Work many different kinds of jobs (or volunteer). Approach learning from an interdisciplinary perspective and study multiple fields.

Studying philosophy isn't a bad idea, but I don't think that one field by itself is the solution.

</comment><comment><USER32> Mark Cuban says a lot of things

<comment><USER33> Right, he loves to hear his voice. Next month he will say the opposite.

</comment></comment><comment><USER34> At the least, we'll need some kind of overseer for what these "AI"s are doing. These people will need strong analytical abilities, and the ability to deal with various levels of abstraction. Something that computer science people surely have.

Yeah, not much good content here, but it is probably useful to know what people like him are thinking (the new American oligarchs?). If, in fact, he is saying what he actually thinks. The only thing we can be sure of, is that he and his people are scared of AI.

</comment><comment><USER35> If computer science is worthless, the rest of the jobs will be as well. CS is about solving problems in (almost) its purest form. If AI can do that, humans are done.

<comment><USER36> also afaik we're nowhere close to being able to use "ai" to do that reliably. it's a use case really distant from supervised learning

</comment></comment><comment><USER37> stop listening to people just because they are rich. i dont even mind this guy that much, but what evidence is there that this guy knows what he is talking about?

</comment><comment><USER38> Why philosophy in particular, though?

I am sympathetic with worries about how automation will affect the job market, and I love philosophy -- but I saw no explanation in this article for why Mark Cuban believes _philosophy_ in particular will be more valuable.

<comment><USER39> Because philosophy is seen as the de facto "worthless" degree in pop culture? Philosophy majors don't need to earn more in the future. Computer science majors just have to earn less. Something that isn't completely unrealistic. The BLS shows that developer incomes are already in decline.

Pay, of course, is determined by supply and demand. Developers currently do well because there are more jobs than people, but that can quickly change (and is changing, albeit slowly). The most common job in America only makes up about 3-4% of the entire workforce. Even if software jobs overtake that and grow to be the most common job in existence, but 10% of the population are willing and capable of being developers (not unbelievable given the current push by the education system to turn everyone into developers), it'll trend towards being a minimum wage job.

And that's assuming that the software labour industry grows substantially from its present size. Cuban is expecting it to shrink as AI takes on more and more development tasks which, if true, will mean we will need even fewer software professionals than we need today.

</comment></comment><comment><USER40> He _may_ not be wrong. Check out Getting to Philosophy on wikipedia. [0]

"There have been some theories on this phenomenon, with the most prevalent being the tendency for Wikipedia pages to move up a "classification chain." According to this theory, the Wikipedia Manual of Style guidelines on how to write the lead section of an article recommend that the article should start by defining the topic of the article, so that the first link of each page will naturally take the reader into a broader subject, eventually ending in wide- reaching pages such as Mathematics, Science, Language, and of course, Philosophy, nicknamed the "mother of all sciences"."

[0] [https://en.wikipedia.org/wiki/Wikipedia:Getting_to_Philosoph...](https://en.wikipedia.org/wiki/Wikipedia:Getting_to_Philosophy)

</comment><comment><USER41> I think it's far more likely that if this process takes place, CS degrees will morph more towards areas like philosophy and mathematics than software engineering.

I doubt they're going to be teaching the exact same way in 30 years.

</comment><comment><USER42> "In 10 years, a liberal arts degree in philosophy will be worth more than a traditional programming degree."

Dang I couldn't think of a less qualified guy to make that call!

And I love philosophy!

</comment><comment><USER33> Hard to take anything this guy says seriously. Ever since he announced that he would be happy to run for vice president without care whether it was Clinton or Trump I lost interest in whatever he said. He said this after regularly blasting Trump as not qualified for being president. He blasted Bitcoin then he decided it was a must-have. Previously he blasted the stock market as a gambling den. And I'm sure there are more examples. He loves publicity and the press loves to print whatever BS he's saying today. I'm sure tomorrow it will be something else. Mark Cuban shut the F--- up!!

</comment><comment><USER43> This guy keeps pontificating. He must be running for POTUS

</comment><comment><USER44> On an unrelated note:

Is it just me or the character Russ Hanneman from silicon valley is based on Mark Cuban.

<comment><USER45> I was expecting this comment to be number one. 3 comma club.

</comment></comment><comment><USER24> I flagged this for being unsubstantiated scarebait.

> That's because Cuban expects artificial intelligence technology to vastly > change the job market, and he anticipates that eventually technology will > become so smart it can program itself.

> "What is happening now with artificial intelligence is we'll start > automating automation," Cuban tells AOL. "Artificial intelligence won't need > you or I to do it, it will be able to figure out itself how to automate > [tasks] over the next 10 to 15 years.

This is coming from a guy who doesn't know a lick of programming, let alone anything about AI. In fact, he mainly dabbles in sports and Shark Tank. Yet another "you luddites are all going to be replaced, so you better piss your pants" article, and all it's based on is this guy's gut feeling. Silicon Valley needs to chill the fuck out with overhyping AI, because it's going to backfire on them substantially when people start realizing they can't back up their promises.</comment>


Switching to Plan J (From Scala back to Java) - <AUTHOR> http://alarmingdevelopment.org/?p=562

<comment><USER2> What the the article seems to miss is that Scala _can_ be used strictly as a "better Java" without using any of the advanced type features or idioms if that is what you want.

(Anecdotal)War Story: Once upon a time I worked with a team of scientists (not professional developers) who had some legacy research code in Java, had tried moving to Scala and got badly bitten by the advanced type theory bits and so were considering moving back to Java. When I joined the team I taught them how to use the "Scala as a better Java" approach, (which would correspond to approximately the L1 level in Martin Odersky's blog post at <http://www.scala- lang.org/node/8610>) and to this day they are happily building new stuff in Scala (and Java).

Just as you can use Common Lisp without completely mastering macros, the condition system etc, to get stuff done at the cost of some redundancy when compared to what the code would look like if an expert were to write it, so can you use subsets of Scala to get serious work done.

I suspect problems arise when you have the attitude that you must completely master the language before you start using it to build stuff. This excludes all but the ultra simple languages from consideration. Reductio Ad Absurdum, Imagine a world where the only programming language in use is VB (or even C) !

I offer the hypothesis that when using any _new_ _and_ "large" language on a real life project you have to work with a subset. This is not a bad thing and "subset" is not a dirty word (as long as the subset is clearly identified and at least as good as the alternative languages). As you gain experience with the subset and actually build useful systems with it you can then go deeper into the language and learn more advanced features, which you can then use to refactor your code to use those advanced features where appropriate, in a virtuous cycle.

Imagine you are learning a non programming language (say French) or even musical notation. If you wait till you have wrapped your head completely around whatever you are learning before you start using it, you are (a) going to wait a long time (b) very unusual in your approach. Is having an ultra simple syntax or a small surface area a virtue? Yes it is. It is _one_ aspect of a design but not the only one.

The lack of an IDE is a more valid complaint, (especially if you plan to have big teams of mediocre programmers) but then you restrict yourself to using only core mainstream languages with very strong vendor ecosystems (say Java, VC++, C# and VB). It would be nice if every new language sprang from their creators brows fully equipped with ultra functional IDEs but that maybe a tad unrealistic a wish ;-).

I also suspect that most of the carping comes from people who haven't actually used Scala in any serious fashion. Complaints about "too complex a type system" from people who have never used Scala to actually build something have about as much legitimacy as people who refuse to use Lisp because it has "too many parantheses" and just "know" that parantheses are confusing.

<comment><USER3> I think the "subsetting the language" approach is a red herring. Yes, you can decide you'll only use feature X, Y, and Z. Many people do that in similarly complex languages like C++.

But the programmers will, one way or the other, get exposed to the features you considered esoteric. Be it through libraries, or sample code, or whatever. And then they have a piece of code in the language they use for daily work that they don't understand, can't debug, and are alienated by strange compiler errors - not good.

It's IMHO also quite hard to come up with the subset you like. I mean, programmers like to have endless discussions about completely irrelevant topics, like brace placement; wait and see the discussions about actual language features to (not) use! Like I said in the other comment, most features are in themselves completely reasonable, so it's hard to make a cut here.

I also think the 'mediocre programmer' is a red herring. Not that there aren't mediocre programmers that will have trouble to understand certain language features at all - there certainly are.

But I'd wager that even for very good programmers, having many complex language features (that interact!) in a code base will be problematic. Of course you can understand what's going on with some effort on your side, but the problem is with the effort. Programming languages are IMHO a bit like user interfaces in this regard - "don't make me think". Having code in a code base that's complex and/or hard to understand is a really, really bad thing. People will shy away from reading and modifying it, and over time it'll grow into an unmaintained monstrosity.

Again, this is about the complexity budget. Original Java code was dead easy to understand, now with generics it's a bit harder (but overall I think generics are less bad than you hear all the time). That was and still is one of the really killer Java features. Not only for mediocre programmers, but for general readability, and thus usability of the language.

<comment><USER2> "Of course you can understand what's going on with some effort on your side, but the problem is with the effort. Programming languages are IMHO a bit like user interfaces in this regard - "don't make me think"."

By this logic no one would use the command line and Windows click thru wizards blow Unix away. I agree that guis are good for non programmers. Java _is_ better than Scala for some subset of programmers. So is VB. The problem arises when that statement is modified to use the Universal Quantifier.

The thing about a "powerful" programming language though (or for that matter a command line) is that it is a _power_ tool. No one forces you to use it and you shouldn't if you feel it is too complex, but using some mythical "complexity budget" as if it were some kind of inviolable scientific fact is (imo) bogus. The "complexity budget" of anything is a function of the context of its use. As cemerick points out in another post here, Scala or Clojure (or Haskell or Erlang) will always have a "complexity" higher than VB or Java and _that is fine_.

"Again, this is about the complexity budget."

There is no such thing independent of the intent of the language designer and the context of the use of the tool. Scala and Erlang and Haskell are _not_ intended to occupy the same "complexity point" as Java 1.4. So what?

Pascal has a lesser "complexity budget" than C. That doesn't make the former uncontestably "better" independent of context.

And anyway my original point was only that _once_ you choose a language which you can't grasp all at once, for whatever reason, you should start programming with the subset you do understand rather than wait till you completely grok it. You can always choose to work with "low complexity" languages if that is what you want.

<comment><USER4> "As cemerick points out in another post here, Scala or Clojure (or Haskell or Erlang) will always have a "complexity" higher than VB or Java and that is fine."

I find the complexity budget of Clojure much lower than Java, and maybe VB, too (haven't programmed VB in a long time).

In many ways, immutability by default, first class functions, and a library of higher order functions in the standard API make code much less complex with fewer concepts to understand than the corresponding Java code would be. The problem for many coming to Clojure is having to "unlearn" the "object oriented" Java concepts they already know (true for other functional languages, too, of course).

Clojure leaves type declarations completely optional. It does not try to assemble disparate programming paradigms and integrate them into a coherent whole. The built in data structures all implement the seq interface, so you can use the same functions on all of them.

Rich Hickey spent his complexity budget very well. I would rank Clojure with Scheme and Smalltalk in that regard.

<comment><USER2> "I find the complexity budget of Clojure much lower than Java, and maybe VB, too (haven't programmed VB in a long time)."

I am not disputing that you find Clojure easier than Java but if you include complete mastery of macros and laziness and functional programming idioms into the "complexity budget" it is very arguable that _some_ Joe Blow developer would find Java easier to learn and read and consider Clojure "too complex". I am just pointing out that they are bogus reasons to reject a language. The OP is claiming that the deep type theory constructs of Scala are too difficult for him. Of course they are, just as deep macro fu would be hard for a Clojure beginner.

Please don't mistake me. I prefer Clojure to Java any day. I am reacting to the idea that "too many parantheses" or "but macros are too complex" or "laziness is too hard to wrap my head around" or "Scala has a more powerful type system than I am used to" or "Erlang has too weird a syntax" etc are sufficient reasons to reject them.

Back to Clojure. My (original) point is that you don't need to understand macros (say) in all their glory before you build something in Clojure. Use a macro-less or macro-lite subset and grow into macros as you gain experience. Yes you will write less than the best Clojure for a while. (Imho) that is fine (and unavoidable). _Rejecting_ Clojure because you couldn't completely understand macros (or read "complex" code with lots of macros) is (imo) not an optimal strategy.

</comment></comment></comment></comment></comment><comment><USER5> You don't know what Scala code is doing unless you're familiar with the specific libraries it invokes; syntax isn't much of a guide.

You don't know what Ruby code is doing unless you're familiar with the specific libraries it invokes; syntax isn't much of a guide.

You don't know what C++ code is doing unless you're familiar with the specific libraries it invokes; syntax isn't much of a guide.

Heck, you don't know what annotated Java code is doing unless you're familiar with the build tooling that processes the annotations, and the libraries it invokes; syntax isn't much of a guide.

There's a pattern here. I'm not sure it has much to do with the language.

<comment><USER6> > You don't know what C++ code is doing unless you're familiar with the > specific libraries it invokes; syntax isn't much of a guide.

i'd say this about Perl or Ruby, but C++?

<comment><USER7> C = A + B;

In C++ what does this line do? The list of things that can effect what this line of code does are: Types of A,B, and C, single arg constructors, explicit conversion operators, operator +, operator =, and copy constructors might come into play. I more than likely have forgotten something from that list.

<comment><USER8> Macros.

</comment></comment></comment></comment><comment><USER3> This is what the Java designers always talk about: languages have a "complexity budget".

You can choose to spend your complexity budget on different features (static typing, generics, closures, manual memory management, auto casts, overloaded operators, ...). Some features can take away complexity (GC). But once you've overdrawn your budget, the language gets creaky to use and everybody starts talking about "subsetting" the language. C.f. C++ - all those features do serve a purpose, and looking at the feature alone, it might be reasonable.

I think Scala has way blown its complexity budget. They've innovated on too many different fronts. I'd been happy to have Java with closures, first class functions, and maybe better generics.

There was a lot of buzz around DSLs at some point of time, and they decided to go all in with implicits, which I think was a bad idea. I guess they were trying to market the language...

<comment><USER9> I've been digging into scala recently, and although i'd have to agree, I couldn't say necessarily where this budget was blown. I love that the generics are improved over java (I usually don't need the IDE to check complex generics for me in scala as I do in java), but the overall type system can be daunting. First class function and closures are a easy win for me as well. I also love some of the more "advanced" functional constructs, and lazy evaluation (Stream! I love Stream!).

What gets me is the flexibility of the language. I don't want multiple ways to declare and/or bind the same function, and I don't want multiple ways to declare a lambda (why do I need a language shortcut, and then a shorter shortcut to choose from?). I guess where I'm going with this, is that I think the "complexity budget" would have been manageable, still with most of this feature set, if the language wasn't a DSL factory, and there was a single obvious way to write your program (obvious python bias on my part here).

Oh, and while I'm ranting; XML Literals? ಠ_ಠ

<comment><USER10> I think basically everyone agrees that XML literals are a bad idea. There is a little more background described here: <http://www.quora.com/Will-Scala-ever- remove-XML-literals>

</comment></comment></comment><comment><USER11> The disaffection of ex-Java-devs towards these newer JVM languages is only really surprising if you were expecting any other language to overtake Java for Java developers. I used to think that would come to pass, but I've been convinced otherwise.

By the time Java 8 comes around (don't expect Oracle to drag their heels on releases as prior regimes have), there will be little _inherent_ reason for the typical Java developer to use Scala or Clojure. Only the biggest vendors (Oracle, Microsoft, IBM, et al.) have the firepower and perspective to produce/support whole-solution languages and ecosystems that go mainstream with tooling, training, and general-purpose facilities approachable for the vast middle.

That is, the next Java is Java′.

Of course, none of those typical devs are reading this or TFA. The real question is, which language is most applicable to particular problem domains and usable within particular organizations by atypical devs solving atypical problems? (Added bonus goes to the language that makes bidirectional interop with that vast middle of Java devs a piece of cake, for those atypical devs looking to provide libraries, tools, and products to be used by those Java devs.)

<comment><USER12> Few points I can recollect (without answering "which language is most applicable...."):

1\. Future of Java-the-language is limited by backward compatibility. This imposes a barrier on the scope of innovation in the language.

2\. #1 can be helped by the newer JVM languages.

3\. Current trend to increasingly adopt Ruby, Python or PHP for turnaround time is the result of a momentum and has to mean something. There is clearly demand for faster turnaround time in some segments.

4\. The JVM languages that can reach feature parity with Ruby/Python/PHP ecosystem and tooling will have a better chance of adoption IMO.

5\. The next Java is certainly not Java alone. Probably a mix of languages, depending upon which ones have a better VM, tooling, libraries, turnaround time etc.

</comment></comment><comment><USER13> I program in Scala because it's my pseudocode.

Filter this. Transform that. Collect these. I need an object that does such and such. I'd like some new functions on an object from another library.

For the most part, Scala has an immediate, direct way to do whatever task I need in a type-safe manner. The type safety is important - it really does catch bugs and makes refactoring code a lot easier than in a dynamic language. This matters when the project is larger than 2 developers.

Some others liken Scala to C++. I don't think Scala is as dangerous as C++ because of immutability and garbage collection, but I'll readily admit it's a complex language.

You can write Scala as Java with some nice stuff (done at <http://sna- projects.com/kafka/>, a distributed pub/sub messaging queue) or you can go full on with the Scala like Norbert (<http://sna-projects.com/norbert/>), an RPC/cluster management system used for search and the social graph at LinkedIn. I don't think there's a problem with either.

</comment><comment><USER14> If you need Eclipse-level tools to be productive, you probably shouldn't be trying new programming languages. It takes hundreds or thousands of man-years of effort to replicate those features for a new language. Python and Ruby only really got there recently.

<comment><USER15> I've really had to play with enough languages in the last few years that IDEs are just more trouble than they are worth to me. The editing isn't great, the tools are sketch, and the design of visual space tends to be poor. And always being on the tool learning-curve gets old...

So I stick with emacs and my primary IDE-esque tools are syntax highlighting and hippie-expand. The only time I break out of my emacs world is to run debuggers.

<comment><USER16> you should give GUD a try (M-x gdb).

</comment></comment></comment><comment><USER17> Thats the reason Clojure is so great. Its an simple language. The only complex things (if you get FP) are the macros and in the clojure world macros aren't used often. The Clojure Community learnd from the old lisp makro overuse. Everybody talks about not using makros if you don't really have to. Look at this talk by C.Grand: (not= DSL macros)<http://clojure.blip.tv/file/4522250/>

If you really want to see what happens with your code just expand it. Its extremly transparent and easy (most IDEs should be able to to this).

In a talk Simon Peyton-Jones once said something like: "Macros are like missile. You don't need them often but if you want to destroy a small village nothing can be better."

<comment><USER18> > "Macros are like missile. You don't need them often but if you want to > destroy a small village nothing can be better."

I'm partial to "Macros are like second amendment rights. You hope you never have to use them, but if you've got no other choice then you will be very glad you have them."

</comment></comment><comment><USER19> I successfully used Scala as prototyping language for the first time recently. It was nice. I kinda liked it. But, I will have rewrite what I did in it soon because the VM startup cost for scala is too high for what I want to do. The lack of IDE support that the OP complained about didn't really bother me as I am more a vi/kate{+vi mode} kinda guy. That said, I could definitely see how really good IDE support would be nice to have when integrating with large Java libraries.

EDIT: I forgot to mention the one thing that is nice about Java from a research perspective is it is a really easy language to work with. It's syntax is relatively easy to deal with, it doesn't have a preprocessor. Its semantics are straight forward. It has type annotations. There is a lot of code in it so you can test your research on real code bases. This makes Java the best language to conduct research on languages in. Even if it is not the best language to write it.

<comment><USER20> JRebel is a must when doing Scala web development. It's not free but it definitely speeds up the development process as it eliminates almost all instances where one would have to restart the app server for code changes.

<comment><USER21> Actually, you can get a free JRebel license for Scala development: <http://sales.zeroturnaround.com/>

</comment></comment></comment><comment><USER22> One of the key design principles behind Java was to be a cleaner C++: remove all the hippie stuff which make programs too hard to read back, which makes one thing look like it's something else entirely, etc. The result is a boring but reliable language, which gave birth to a wide ecosystem of good quality libraries.

Scala puts back all the hippie stuff into Java. Together with them, it brings back the associated problems which plagued C++. OK, some stuff are done in a less broken way in Scala, largely because they don't try to be a superset of C. But still, we end up with a language hard to read, hard to trust, hard to support for IDEs... not something you want to use for big teams or long-term programming.

<comment><USER23> And my natural question is: have you actually used Scala for real work, or are you just theorizing?

<comment><USER22> I had to make some evolutions in an Eclipse plug-in which was written in Scala (the module wasn't intended to manipulate Scala code, it just happened to be the implementation language). I initially had a positive prejudice, as a OCaml enthusiast who used to get paid for developping in OCaml; moreover, as someone who's been exposed to languages with serious abtraction power, I easily get irritated by Java.

The code was a true pain in the ass to work with: integration with OSGi was cumbersome, lots of black magic features were used gratuitously, the possibility to define stuff-which-look-like-methods-yet-aren't-in-the-class made quite a mess of code exploration, and of course tooling support was abysmally bad.

I know the usual rebuttal: it's the bad developer's fault, not the language's. I don't buy this, a "good" language for which you can't find decent coders isn't any good.

\- Scala-like languages tend to attract guys who will mess with all the quirky features of the language;

\- In real life, developers are a given and the language is the adjustment variable, not the other way around. Most people don't have the luxury of only working with rockstars, and most of the cornerstones of the Internet haven't been developed by rockstars anyway.

\- The average developer will do an average job of writing maintainable Java, and an awful job of writing acceptable Scala, if only because there's no widespread consensus ov what it means for Scala code to be acceptable. Java is dull and uneventful, and I'd rather take over a syntactically dull and uneventful code base than an "interesting" one.

\- I've heared several times that "you can use Scala as a Java with closures". It's a variant of the argument that there's a 5 times smaller language hidden in C++ that's beautiful: nobody ever agreed over which 20% should be selected.

The two languages which gave me the impression of trying to support every feature ever invented, and of making it very difficult for people to acquire and share a notion of standard, maintainable code are C++ and Scala. An iconic counter-example would be Python.

More anecdotically, I spent a couple of days studying how Lift works, for personal curiosity. I found the code hard to navigate into. due to too many non-orthogonal ways of composing code together. A good tooling support would have helped, but if it doesn't exist after all those years, I might mean that there's something wrong with the language: it's not as if the need wasn't clearly perceived.

</comment></comment></comment><comment><USER24> In this same thread Martin Odersky announces he is working in a new version of the Scala plugin for Eclipse, to be released with Scala 2.9. A statically typed language really shines within an IDE.

</comment><comment><USER25> I get this sentiment a lot ...

         Secondly, it is the ultimate language to date for writing libraries
         and  embedded DSL's with static types. ... These abilities go
         way beyond any prior statically typed language.

The author conveniently left out dynamic languages; but regardless of that, I don't like Scala because:

1) you can't override the method dispatching mechanism to make use of those types in interesting ways (e.g. multimethods are possible with DLR in .NET)

2) You can't get the syntax-tree of a block of code, then recompile it to something else (e.g. LINQ - and F# supports this as a general construct). There was a compiler-plugin at some point, but it's deprecated and incomplete and full of bugs

3) All OOP languages should have optional dynamic typing; OOP just doesn't blend with static types, being one reason why Haskell is not OOP (while providing other similar tools for polymorphism)

What you do get in Scala is a flexible syntax, that can lead to awkward behavior (I often find myself asking whether some line needs a semicolon). And the type-system, while better than the one in Java, is also too complex, too verbose and definitely not elegant.

You know what would be elegant? Being able to test if some object is an instance of List[String] (and yes, I know about manifests and implicit parameters: it's still an ugly hack that doesn't solve all problems).

One could say that Scala is a pragmatic language, but so is C++; and C++ has no replacement, while Scala does have many.

</comment><comment><USER26> I've been doing my scala stuff using sbt and vim. So far, it's working out quite nicely. I haven't played with sbt plugins for various IDEs (I'm too used to vim), I would assume it should still work.

</comment><comment><USER27> I did some research (but not actual programming) to compare Java to Scala, specifically in the area of generics. If you are hoping for some language to make static typing palatable again, Scala is not it: it's so good at static typing that it can statically type anything, but it takes intricate details and more knowledge of its type system than most would want to care about to get it right. In general, I felt there were too many niggly little details in the syntax to be a nice language to use.

Of course, I'm used to Python, so I may well be spoiled.

<comment><USER28> I agree with the characterization of Scala's generics as complicated, but I disagree that that ends up making its static typing unpleasant or day-to-day programming difficult. Type inference is a big win, and other language features add enough that I find myself not reaching for generics for my own code anywhere near as often as I did with Java. Aside from the occasional container type missing from the standard API, I just pretty much don't use generics in Scala except as a consumer, and I don't miss them.

</comment></comment><comment><USER29> Scala seems to be the academic kitchen sink of programming languages.

</comment><comment><USER30> This exactly summarizes why I stopped using Scala. All I wanted was a cleaned up Java, but it's much more and riskier than that.

<comment><USER31> Maybe you'd like Mirah?

<http://www.mirah.org/>

</comment></comment><comment><USER32> I never understood why anyone would want a hybrid of OO and functional programming.

I see OO as basically: Encapsulation, Inheritance and Polymorphism.

Functional programming provides better facilities for encapsulation and polymorphism. Interface inheritance is pretty much a subset of implicit traits or type-classes. I don't think implementation inheritance is ever the right thing.

So if you have the full power of FP (including existential types and type- classes), what is it in OO that you would yearn for?

</comment><comment><USER33> Groovy is good alternative JVM language if you just want some improvements on Java without a completely new language to learn. It addresses many of the small frustrations I have with Java (lack of list and map literals, lack of anonymous functions) without introducing many new paradigms or complexities. I'd recommend it to anyone wanting a quick prototyping language on the JVM.

</comment><comment><USER34> Scala subsetting (as mentioned in the comments) sounds like a promising avenue. Especially if it were to result in better performing tools. Unfortunately for all the great features scala does have, Java has a few killer features that it lacks i.e. fast (instantaneous) and reliable compilation and debugging.</comment>


Programming Idioms - <AUTHOR> https://www.programming-idioms.org/about#about-block-all-idioms <comment><USER2> Previous discussion: [https://news.ycombinator.com/item?id=21080606](https://news.ycombinator.com/item?id=21080606)

<comment><AUTHOR> I figured it would be ok since it's been over 6 months since it was last posted and I only found out about it today :-)

</comment></comment><comment><USER3> See also [http://www.rosettacode.org/wiki/Rosetta_Code](http://www.rosettacode.org/wiki/Rosetta_Code)

</comment><comment><USER4> These kinds of collections can be nice, but I think it's fair to warn against looking at them _too_ closely. Sometimes they're not actually idiomatic and often the implementations have differences in them that see non-obvious.

<comment><USER5> And some have problems: the Python example of reading a file into a string is:

        lines = open(f).read()

which doesn't close the file. The second C example of this task is tricky, and seems to miss an offset.

The C and Go implementations of uniform random integer include the upper limit, the Python and Rust implementations don't.

And that's just from quickly browsing.

</comment></comment><comment><USER6> The clojure one to reverse a string makes it a sequence of characters, then reverses that sequence and puts it back together again as a string..

Why not jsut:

         (require '[clojure.string :as str])
         (let [s "hello"]
             (str/reverse s))
         => "olleh"

Reversing a string is in the core library...

<comment><USER7> On a related note, the problem is underspecified.

 _> Create string t containing the same characters as string s, in reverse order. Original string s must remain unaltered. Each character must be handled correctly regardless its number of bytes in memory._

What encoding? Assuming UTF-8, what is a "character"? A code point? A grapheme? The result of the lack of specification is that the different approaches really solve different problems. Some, like the C implementation, have a naive approach that only solves the problem in fixed size encodings where the width is equal to CHAR_BIT. Others I'm sure run into problems with combining characters

<comment><USER8> Submit a task/"idiom" with an improved/stricter spec and link back to the original one.

</comment></comment></comment><comment><USER9> This is a nice to have all in 1 place.

This improves time when learning 1 language to another. I could get lost spending time here advancing what I already know (or don't know) and enjoy the format of the content here.

What was your process like in going about getting the original content for the various languages? Are you you somewhat familiar with all these languages and how to the curators go about accepting (or denying) a new submission.

<comment><USER10> Author here: there were 2 initial use cases for me,

(1) I'm familiar with the language X but I forget e.g. how to "check if a file exists"

(2) I'm learning a new language Y, I know that "checking if a file exists" is a legit need and there must be an idiomatic way to do it in Y, so I look at the entry, alongside implementations in other languages that I'm more familiar with, so I can quickly spot the similitudes and the differences.

I do (1) all the time because my brain has very little onboard memory.

The website is open to contributions without prior validations. This means that not all snippets end up being both correct and idiomatic. I manually revert spam and "obviously incorrect" entries. For languages that I don't know very well, I encourage actual experts to fix snippets, or add a better new implementation, when they see poor contents.

<comment><AUTHOR> Great resource, thank you for building it!

</comment></comment></comment><comment><USER11> This is really cool and seems pretty up-to-date ... which leaves me surprised that Obj-C is present but Swift isn't. (Even moreso considering that both Java and Kotlin are present).

<comment><USER10> You can vote for Swift here [https://github.com/Deleplace/programming- idioms/issues/30](https://github.com/Deleplace/programming-idioms/issues/30)

</comment></comment><comment><USER12> Thanks for sharing.

</comment><comment><USER13>
        Sorry, [Common Lisp] is currently not a supported language.

New time sink avoided.

<comment><USER14> [Lisp] seems to be a tag though. Add it as [Lisp] (if you still want your new shiny time sink) and write comment of which implementation it is.

<comment><USER13> Thanks, I might write some idioms in it.</comment></comment></comment>


Driverless bus completes a 200m trial run in Netherlands - <AUTHOR> http://www.theguardian.com/technology/2016/jan/28/driverless-bus-trial-in-netherlands-will-be-first-on-public-roads <comment><USER2> A whole 200 meters!</comment>


Ask HN: Who's Hiring Clojure Developers? - <AUTHOR>

Rich Hickey compelled me to switch to a Clojure-based tech stack. But how many companies are hiring Clojure developers at this early stage? <comment><USER2> I would say looking for work with a specific programming language is premature optimization which everybody knows is the root of all evil ;-)

Seriously the language is a detail. Your boss, coworkers and work location will have more impact on your quality of life than the tech you're using ... or you're not normal ...

<comment><AUTHOR> Tools matter. @coffeegeek is right in that language choice is more of a signal for innovation and early adoption than it is a sign of competence or exciting problems, but would you join a team using COBOL today? If not, why not?

</comment></comment><comment><USER3> I'm also looking for a Clojure job. Email in profile.</comment>


Beej's Guide to Network Programming - <AUTHOR> http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html <comment><USER2> [https://hn.algolia.com/?query=Beej%27s%20Guide%20to%20Networ...](https://hn.algolia.com/?query=Beej%27s%20Guide%20to%20Network%20Programming&sort=byDate&dateRange=all&type=story&storyText=false&prefix&page=0)

</comment><comment><USER3> Brings back some old memories during my Masters in CS! This guide was our savior for Computer Networks related courses.

<comment><USER4> For me, brings back some old memories of becoming a self-taught programmer ;-). Beej's Guides[1] seem timeless. I remember how I learned C more from following these guides than by C tutorials. For anyone out there who is trying to learn C, my advise would be to attempt some systems programming rather than just following C introductory books that teach you the language but not its typical/most common use.

Another good book for beginner C programmers (on linux) that I remember learning a lot from was Advanced Linux programming[2] ...although this might be slightly dated now (should be good enough to start exploration tho')

[1] [http://www.beej.us/guide/](http://www.beej.us/guide/) [2] [http://advancedlinuxprogramming.com/](http://advancedlinuxprogramming.com/)</comment></comment>


Show HN: Startup School Flashcards - <AUTHOR> Nick and I have been going through Startup School working on a site for developer flashcards. We have simultaneously been studying our own flashcards for Startup School. It's been a really easy way to remember what has been going on in the course. I wanted to share in case they are helpful to anyone. Thoughts/feedback are welcomed!
https://www.flashcardsfordevelopers.com/collections/5b9ff4c1...
Hope you enjoy them. Cheers! Niko <comment><USER2> This is very cool, and an excellent addition to Flashcards for Developers. Thank you Niko!

</comment><comment><AUTHOR> Let me know if you have any issues. I'm positive it is not perfect. Happy to keep working on it. Thanks!

</comment><comment><USER3> Very cool. I've followed this project through the HN Startup School. Impressive progress!</comment>


The Autodesk File - <AUTHOR> https://www.fourmilab.ch/autofile/www/autofile.html <comment><USER2> John Walker's tale of the rise of Autodesk ought to be required reading for every entrepreneur starting a company. Period. While it is true that most start-ups do not have the intellectual depth of the founders of Autodesk, they have to contend with the same problems. While it may be apocryphal, I remember another Autodesk friend saying that John regretted the day that Autodesk had to hire its first employee with an IQ under 200.

And while you are reading it, take a look at the other stuff at [http://www.fourmilab.com](http://www.fourmilab.com).</comment>


CEO Turns a Seldom Used ccTLD Into a Booming Global Brand - <AUTHOR> http://www.dnjournal.com/cover/2010/november-december.htm

<comment><USER2> Companies just have to pay a little more for domain hosting due to the threat of .co brand hijacking or phishing. It's the nearest legitimate thing to blackmailing, not a brilliant business plan.

<comment><USER3> Two more _brilliant_ business plans: .om and .cm

</comment></comment><comment><USER4> Jeez, think they have enough pictures of that dude in the article?

<comment><USER5> I personally like their innovative use of BOLD.

</comment></comment><comment><USER6> I wish the article provided some insight into HOW he turned it into a 'booming brand.'</comment>


Karl Sims' Evolved Virtual Creatures (old but still very cool!) - <AUTHOR> http://www.youtube.com/watch?v=F0OHycypSG8 <comment><AUTHOR> You can see how this was done here:

<http://web.genarts.com/karl/evolved-virtual-creatures.html>

Karl has done lots of other cool stuff btw:

<http://web.genarts.com/karl/>

</comment><comment><USER2> Do anybody have a success to create product that uses principles of evolution? How social sites like YC news, reddit, etc. use evolution principles (e.g. voting up/down) to become better services?</comment>


Ask HN: I could use a few more Erlang/Lisp/Scala/Node.js/Haskell articles please - <AUTHOR> I just need a break from the daily startup froth.<p>I'm not asking for an Erlang Bomb of the front page, I'm just asking for more geeky articles to be posted on a more regular basis. :) <comment><USER2> I agree I've lurked around here for a while but I remember there being a lot less hullabaloo about facebook, google, and apple when I first started browsing and a good amount more about startups, python (and other language) tricks and cool geeky things. I understand that facebook, google, and apple are interesting with how "evil" or "great" they are on a day to day basis but I prefer more geeky articles that wouldn't make it to the front page on reddit.

Though people will just say I'm remembering wrong and saying that quality has dwindled is a figment of my imagination but just look what makes it to the front page on a day to day basis.

<comment><USER3> It's definitely not your imagination. I see articles here daily that if posted a year ago would have been criticized for not being worthy of Hacker News. Fortunately the discussion here is still mostly civil and intelligent. I've been reading a few haskell papers recently that I'll submit soon, but I think papers are more suitable submissions for weekends so people have time to digest them.

</comment></comment><comment><USER4> You could always take a look at <http://lambda-the-ultimate.org>. It's probably isnt exactly what you're looking for, but there are a lot of interesting articles. This is not to say I don't agree with you, but I also remember the erlang/Haskell wave six months ago. Personally, I'm always a big fan of learning new coding techniques and paradigms, like functional snippets but also cool design systems like event-based I/O. I'm sure there's more stuff out there that I don't know of yet.

</comment><comment><USER5> The other side of it is when interesting stuff gets posted, but it only gets two votes because it gets lost in noise about whatever Apple did lately.

Lambda the Ultimate and citeseer haven't gone anywhere, though.

</comment><comment><USER6> I stay away from most of Reddit, but the Haskell subreddit is a really good source of interesting reading: <http://www.reddit.com/r/haskell/top/?t=month>

</comment><comment><USER7> Am I the only one whose first thought was 'Look, someone else is sick of all the Erlang/Lisp/Scala/Node.js/Haskell articles on HN and has posted a sarcastic request for more of them'?

My second thought, fwiw, was 'He forgot clojure.'

<comment><USER8> I think a reasonable case could be made that Clojure is a Lisp in the same sense that scheme, arc, qi, et al. are (albeit, not 'common lisp')

</comment></comment><comment><USER9> If you like Haskell stuff, cross-post top articles from <http://haskell.reddit.com>

</comment><comment><USER10> I'd like that too, but if you're not finding them here, go to twitter. Save some searches tagged with #nodejs, #ruby, #lisp, etc and you'll find loads of links to new articles and developments related to your topic of interest.

Here's a #nodejs search for you : <http://twitter.com/#search?q=%23nodejs>

</comment><comment><USER11> Personally, I feel the opposite. I wish there was a Hacker News for entrepreneurship stuff, and a separate Hacker News for coding....

</comment><comment><USER12> I feel sad that I found this submission by doing a find for "lisp" on each Hacker News page.

</comment><comment><USER13> Especially node.js plz.

</comment><comment><USER14> One could register canihazhackerfuzz.com</comment>


Introducing Nancy, a lightweight web framework inspired by Sinatra - <AUTHOR> http://elegantcode.com/2010/11/28/introducing-nancy-a-lightweight-web-framework-inspired-by-sinatra/ <comment><USER2> I'm going to generalize here, sorry.

The comments section of this blog post illustrates the problems I have with the .NET "community", as a "part-time" .NET programmer.

It's full of "what a waste of time!" & "why would anyone use this?" comments. It illustrates the lack of vision and inventiveness in the community. I guess "because I could", or "because I wanted to(.|learn)" wasn't good enough.

Aside from a small minority of brilliant folks like Hanselman, the .NET community is pretty bleak, boring, and stale. It's hard for me to get excited about anything in that world when I know they're just cribbing features that have been around the OSS world for a few years (I'm looking at you ASP.NET MVC).

Why work with engineered ripoffs, when I can just use the real thing for free (and without any ridiculous licensing)? The real thing (Rails/Django/PHP/etc) is more organic and agile, oh and it's freakin' _FREE_!

<comment><USER3> I see the same sort of mindlessly dismissive comments even _here_ if a story gets enough attention. "Why another systems language?" and "Why another ORM?" just from stuff I've read on HN today.

</comment></comment><comment><USER4> Sinatra is a great framework, but I think this just underscores how nice Ruby is for DSLs and frameworks. There is more boilerplate here with Nancy, and it just looks clunky.

Not saying there isn't room for a lightweight C# framework though; I don't know of anything beyond ASP.NET.

</comment><comment><USER5> That's quite a hack. It took me a second to realize it was C#. I'm sure it would scare off your average enterprise code monkey.

<comment><USER6> Given a lot of the comments, it seems like the poor guy is getting a lot of crap from people who don't get why someone would write something like this. I wonder how projects grow in that community with that level of resistance at their origin.

<comment><USER5> "how projects grow in that community"

They don't, generally. C#/.NET hasn't exactly been a fertile breeding ground for innovative new open source projects. The most important .NET project are typically Java or Ruby ports (unit testing ports, Rails-alikes, ORM ports, NAnt, etc.).</comment></comment></comment>


Mufin: An Automated Music Recommendation Engine That Actually Works - <AUTHOR> http://www.techcrunch.com/2008/10/08/mufin-an-automated-music-recommendation-engine-that-actually-works/ <comment><USER2> Finding songs that _sound_ the same isn't really enough. It might make do for superfluous listening, but if you have more than a passing interest in music your requirements will be different.

Emotions and lyrics are much more important than the "sound" when I choose new music, and it will be a while until a computer program can categorize these. Remember that it isn't enough to just produce something that matches a pattern. This is a creative field we're talking about, music and movie tastes contain more human factors than just about any other problem tackled by computer scientists.

As a case in point, Ayreon may do an excellent job of copying the darkly brooding and reflecting atmosphere of certain prog rock bands...but it's still a copy, and just under the surface it stinks of hypocrisy.

Media recommendations is a huge problem (it bothers me on a personal level every day, I would pay at least 200$ a year for a service that works), but nothing I have seen so far has impressed me. I won't be sold until I get at least two recommendations that made me cry.

</comment><comment><USER3> Some of the recommendations were on target, but there were about half that were far off. I like being able to browse through the similar tracks and it's cool that it keeps the history of them so you can go back.

Do any of the music recommendation places have an api? I've been thinking about creating a site that recommends music for groups of people that might have different tastes in music. Not many of my friends like the same stuff, but I know there is some overlap there.

<comment><USER4> [Self link.] I am building an API into the perceptron: <http://theperceptron.com/api>

</comment></comment><comment><USER5> Try out <http://mydj.musicip.com> or the MusicIP Mixer, <http://musicip.com/mixer/index.jsp>

This technology combines acoustic analysis and comparison with aggregated acoustic profile info and a really deep metadata and social data database for interesting and TUNABLE mixes and discovery.

</comment><comment><USER6> Had mixed results with this, was getting Elton John tracks on songs that sound nothing like Elton John (and yes I listened to the Elton John track to compare)</comment>


Tresor – CPU-only AES implementation resistant to RAM cold-boot attacks (2011) - <AUTHOR> https://www1.informatik.uni-erlangen.de/tresor <comment><USER2> Clever but useless. Cold boot attack does not work on RAM with DDR3+. Pretty much all new computers are safe. [http://superuser.com/a/464396](http://superuser.com/a/464396)

<comment><USER3> Plenty of other attacks work, such as sniffing memory lines on a running system.

<comment><USER2> That is not CBA so it's not on topic. Extracting encryption keys on a running system is completely other vector attack and I doubt using registers is much safer than RAM in such case. Might be wrong though. :)

</comment></comment></comment><comment><USER4> Previous discussions: [https://hn.algolia.com/?query=Tresor%20erlangen%20points%3E1...](https://hn.algolia.com/?query=Tresor%20erlangen%20points%3E10&sort=byDate&dateRange=all&type=story&storyText=false&prefix=false&page=0)

</comment><comment><USER5> DMA attacks (tb, firewire, etc) also have to be prevented so nobody injects code to pop the registers

</comment><comment><USER6> Pretty clever, but do intel CPUs guarantee that xmm regs are zeroed on boot?

<comment><USER7> The key for AES is held in the four debug registers. On a 32-bit machine you get 4x32-bit for AES-128, or on a 64-bit machine 4x64-bit up to AES-256. The ptrace(2) system call is patched so these registers are not exposed to user space. And yes, they are zeroed on power-up or reset of the CPU.

<comment><USER6> patching ptrace is nice, but it does not stop me booting an unpatched kernel after pressing the reset button and reading them

hence my question.

thanks for answering

where in the intel cpu doc can i see this?

<comment><USER7> [https://www-ssl.intel.com/content/www/us/en/processors/archi...](https://www- ssl.intel.com/content/www/us/en/processors/architectures-software-developer- manuals.html)

      Volume 3A
      Chapter 9, Processor Management and Initialization
      Table 9-1. IA-32 Processor States Following Power-up, Reset, or INIT

The debug registers are named DR0-3 and will be initialized with 00000000H. I can't find an explicit statement for IA-32e mode (Intel's name for x86_64), but I think it is safe to assume the remaining upper 32 bits will be cleared as well.

<comment><USER6> and sse regs?

</comment></comment></comment></comment></comment><comment><USER8> Another implementation using ARM support for cache locking: [http://research.microsoft.com/~ssaroiu/publications/asplos/2...](http://research.microsoft.com/~ssaroiu/publications/asplos/2015/sentry.pdf)

</comment><comment><USER9> Ein wunderschönes Name!</comment>


Eliud Kipchoge: The man, the methods and controversies - <AUTHOR> https://www.bbc.com/sport/athletics/50460861 <comment><USER2> Given the tainted hole Team Sky have landed themselves in over their TUEs and mysterious packages no-one can remember and toxic working environments and the debunking of their "marginal gains" PR, I'm not -entirely- sure using their personnel as props for the legitimacy of this (~publicity stunt for VaporFly~) record attempt is a great look.</comment>


Another Interstellar 'Visitor' Is Headed Our Way - <AUTHOR> https://www.skyandtelescope.com/astronomy-news/possible-interstellar-comet-headed-our-way/ <comment><USER2> If you didn't read all the way down, this was one of the coolest parts:

> Here's an amazing fact: The discoverer, Gennady Borisov, is an amateur > astronomer who works as an engineer at the Sternberg Astronomical Institute. > He makes his own telescopes to hunt for comets and has discovered seven of > them along with several NEOs. He recently completed a new 0.65-meter > telescope, the instrument he used to discover the new object.

<comment><USER3> And the other cool thing is the comet publicly named after himself [https://en.m.wikipedia.org/wiki/C/2019_Q4_(Borisov)](https://en.m.wikipedia.org/wiki/C/2019_Q4_\(Borisov\)) Great hobby!

</comment></comment><comment> bjelkeman-again So imagine it was actually Rama (I1, Oumuamua) and Rama II (I2). We'd be sitting here watching them zip by and not be able to do anything other than watch longingly at them. I suppose we'd get a perspective change on life in the Universe. Maybe it would increase space budgets.

<comment><USER4> If I were designing Rama, I'd probably make the craft change directory and/or slow down on entry into a star system. This would indicate its artificial nature, give inhabitants a better chance at intercept, and protect it from collision.

<comment><USER5> Slowing down or changing direction (in space) is equally as much work as accelerating the craft in the first place.

<comment><USER6> You don't need to slow/change direction by very much to demonstrate a very high probability of artificial origin.

</comment></comment></comment></comment><comment><USER7> My favorite wild hypothesis about Oumuamua is that it was a spent deceleration stage from a multi-stage interstellar fusion rocket. Maybe another spent stage is headed our way. If it's at a lower velocity it would support that conjecture. Eventually the actual payload would arrive. :)

<comment><USER8> While that's a fun hypothesis, I think we should remain objective and assume it's probably just a space rock. I mean, in that case you could also assume it's the excreta of some sort of high energy projectile that is currently aligned to collide with Earth, but that doesn't buy us much more than unfounded dread.

<comment><USER7> If it were an interstellar kinetic weapon it would not be decelerating, as the goal would be to smash us with as much kinetic energy as possible. :)

<comment><USER9> Sorry, it's not a weapon. It's just a molecule designed to hijack self- replication to construct a wormhole generator.

<comment><USER10> So that's space viruses that contain DNA which infects any existing life. Causing the organism to change form into a wormhole generator, which then connects to all the other worm hole generators made by the alien designers? So they can just rock up at a random places because they turned the inhabitants into star gates? That's an awesome idea!

<comment><USER9> It's the plot for The Expanse.

</comment></comment></comment></comment></comment></comment><comment><USER11> Makes me wonder what other objects passed by us eons ago, and then due to other objects far out in their orbit that disrupted them just enough so that the next time they come our way, they're on a collision course with Earth...

</comment><comment><USER12> Hearing about things like this is so inspirational for me. Such a wondrous thing to behold! Kudos to Gennady Borisov!

</comment><comment><USER13> How is this possible? If space outside the solar system is empty, then the probability of 2 extrasolar comets should be 0 during my lifetime.

<comment><USER14> It's possible because "empty" is a relative term and the solar system is big. Hell, a whole 'nother star system passed through the solar system (if we include the Oort cloud) just 1,000 lifetimes ago. [https://en.wikipedia.org/wiki/Scholz%27s_Star](https://en.wikipedia.org/wiki/Scholz%27s_Star)

<comment><USER15> Man, it's pretty crazy that it passed in the solar system, but its peak apparent magnitude was 11. Space is weird.

</comment></comment></comment><comment><USER16> Yes, another inanimate "visitor". What's with these headlines? It just doesn't stop.

<comment><USER17> What do you mean?

<comment><USER18> It's a rock.

<comment><USER19> A rock can be a visitor. Figurative language exists.

<comment><USER20> It introduce slightly harmful ambiguity for no other reason than clickbait.

<comment><USER8> I think it invokes benign imagery, not the promise of "war of the worlds" panic. It's not like it's "Top 10 reasons this interstellar visitor is coming to earth - number 6 will surprise you!"</comment></comment></comment></comment></comment></comment>


Logging is the new commenting - <AUTHOR> http://www.mikhanov.com/2013/07/03/logging-is-the-new-commenting-297 <comment><USER2> Logging is a powerful tool to debug a problem, but it comes with a cost, a high penalty in performance. So debugging should be flexible enough to have different levels (info, debug, warning, error/fatal) and of course have lots more logging when debugging but eliminate all logging except for errors or exceptions when on a production environment. Writing a log to a disk is a blocking IO operation, and thus terribly slow.</comment>


German Student Defies Google C&D with 1 Million Signatures - <AUTHOR> http://www.readwriteweb.com/archives/german-student-defies-google-cease-and-desist-with-1-million-signatures.php

<comment><USER2> Back in ye olde days, we had this thing called "radio". In wonderful FM quality, it would broadcast music. Over a week, just about ever bit of current music. We old folk also has a device known as a "tape cassette recorder". (look it up young people) Now, some naughty people worked out that you could take the output of the radio and connect it to the input of the tape recorder, and record what was playing on the radio. Wait for the weekly top 40 (or whatever) show, and 2hrs later, you've got the top 40 singles. With decent kit, we could get very good quality recordings, and with clever use of the record levels the DJ, etc could be eliminated. Now, some clever people came up with the idea of making a radio that also had a tape cassette recorder built in. This machine had one single use. It made recording off the radio trivial.

So, back to 2012, what is the difference between manufacturers making radio cassette recorders for the exclusive purpose of ripping audio from the radio, and what this site does? Youtube basically broadcasts like radio, all be it on demand, and this site is basically a cassette recorder. Also, does any one remember being hunted down by their local radio station for pirating?

<comment><USER3> I don't think that analogy holds because the "recording" is being done by a third party service. I think a better analogy would be a business where you called and requested they record songs X, Y, and Z off of the radio and send you the cassette. I'm pretty sure a service like that would have been shut down in "ye olde days".

A tape recorder would be more like using clive and ffmpeg to strip the audio yourself. As far as I know, clive and similar tools have never been hassled by YouTube/Google.

<comment><USER4> Recording by a third-party is exactly what Cablevision does with their "remote storage digital video recorder (RS-DVR)" service and they won in court: [http://en.wikipedia.org/wiki/Network_DVR#Cablevision_litigat...](http://en.wikipedia.org/wiki/Network_DVR#Cablevision_litigation_in_the_U.S).

</comment></comment></comment><comment><USER5> I'm not seeing anything different than YouTube's initial attitude to copyright: If it's novel and a lot of people are using it happily, it must be ok!

</comment><comment><USER6> The thing hes leaving out is that this guy is almost definitely making mid 6 figures a month.

The issue comes down to Google hosts a users video for free, with the expecation that they can serve advertisements to people who watch said video. By using this service, it strips google of that right while still using its resources. Google has every right to block services it doesnt like and you have every right not to use youtube.

This is very similar to the craigslist/padmapper issue in some ways.

<comment><USER7> Seems like the smart thing to do on Google's part would be to detect when a service like this is accessing its site and serve and alternate version of the video with the original audio stream replaced with one that includes an audio advertisement spliced with a snippet is the original audio.

<comment><USER8> The smart thing to do would be to put a download link next to each video.

</comment></comment></comment><comment><USER9> What's the point of these downloading-webservices, anyway? From my (perhaps naive) point of view, saving a media stream to disk is a better task much better suited for client software. Nowadays, there are pretty good tools for many operating systems. In the future those might turn into browser extensions, or even become a commodity feature in the browsers.

I remember when some websites started to use JavaScript to prevent other from copying their text (by suppressing the right mouse key, catching Ctrl+C, etc.).

Today, this reappears as "DRM enforced via Flash" on YouTube and many other sites. These new types of DRM won't remain in an open web for long, either, for the same reasons that trying to block Ctrl+C is insane.

So I'm asking myself why this guy put himself into that very weak position in the first place, by providing a webservice rather than a tool or browser extension.

<comment><USER10> Here's an example that I encountered a few days ago:

I only had an iPad (something more and more common, keep in mind their growing popularity) and wanted to download the Song "Alfur ut ur hol" by Björk (which you can't buy in record stores or the iTunes store - it's a rarity recording she released when she was 11 - but it's available on Youtube).

While there are youtube-downloading-apps on iOS, none of them were able to convert the downloaded movies into audio-only files.

Then I found youtube-mp3.org. The site, together with the iCab iOS web browser (which can download files) did the trick.

<comment><USER11> The iCab browser for iOS is a gem.

</comment></comment></comment><comment><USER12> Google fought long and hard to be able to have music from large copyright holders on YouTube and not have to pay a billion dollars in damages. If you want to petition someone, you probably need to go to the RIAA, because Google does not want to lose the status quo and return to an era of illegitimacy for such a huge property.

</comment><comment><USER13> If nothing else, Google will probably win based on the use of "Youtube" (a trademark) in the domain name.

</comment><comment><USER14> When will they learn that they can't win these things.

Perhaps they'll even succeed to shut this one site down. Within weeks there will be two knockoffs to replace it. And that's not even mentioning the dozen desktop apps that do the exact same thing.

</comment><comment><USER15> He may wouldn't be having problem if the data flow was owned by the User. Perhaps if he manage to make an website that automate the process of: The User get the video, extract the track and then the User, uploads to his site. While he's website touch the Youtube, he may have problem.

</comment><comment><USER16> Don't be stupid Google, if this guy is doing something this popular, it's going to continue happening whether you take him down or not. Acquire the little bastard and then figure out how to make it legal.

</comment><comment><USER17> A website providing a service to show extracts of another website... What does that remind me ?

</comment><comment><USER18> "Matesanz and his lawyers argue that, since Youtube-mp3.org does not use YouTube's application programming interface, it does not violate YouTube's terms of service."

<comment><USER19> I wonder if that includes robots.txt.

I don't know how exactly either YouTube or Youtube-mp3.org works, but I'm guessing that he's scraping YouTube (and not using their API), and I would expect that in doing so, he's ignoring robots.txt.

I'd be surprised if robots.txt had any legal force whatsoever, but IMO if someone has a robots.txt and you're ignoring it, you're in the wrong. And if you're ignoring it and profiting off of ignoring it (as opposed to, say, doing academic research of some kind and ignoring it _for science_ ), you're a bad person.

<comment><USER20> Robots.txt doesn't apply if your program is acting via user commands.

If I tell my browser to 'rip' Youtube.com, its just as fine as if I tell Youtube-mp3.org to rip a specific video for me. In both cases, technology is acting as a tool and not an automation.</comment></comment></comment>