Towards an understanding of technical debt - <AUTHOR> http://laughingmeme.org/2016/01/10/towards-an-understanding-of-technical-debt/ <comment><USER2> "Hence the paradox: how is it that a team of brilliant senior engineers need 6 months to clean up after that one early programmer's weekend kludge job?"

I don't think things happen quite like that - what I have seen happen is that a "weekend kludge job" becomes the foundation for a lot of subsequent work and the "kludge job" sets the so after a year you can have a vital production system that has been extended and "improved" in a completely ad-hoc fashion and it's that that takes a lot of effort to reverse engineer and structure properly.

In my experience it is _really_ difficult to raise the quality level on a project once it gets going - thing generally only get worse as external things start to impact (timescales, scope creep etc.). The only way things seem to keep high quality is to consciously start high and fight to keep standards high - which can be pretty difficult.

</comment><comment><USER3> I see technical debt differently. Technical debt is something you take on in exchange for moving faster. Maybe you skipped writing unit tests. Maybe you didn't respond to all the style feedback, or even do a code review. But at the time you make the choice, you should know that you're borrowing time from your future self in order to move faster now.

Like real life monetary debt, technical debt has 2 aspects: the principle and the interest. Sometimes the interest ends up being variable rate and backbreaking for your project - you should have written those tests up front and saved yourself a lot of time. Sometimes the whole project dies before you pay back the debt - you go bankrupt but it's no big deal, your creditors are friendly. In either case, the principle usually isn't smaller when you go to address it. You're just delaying payment in favor of speed.

What the original artical addresses are several aspects that I might call "technical assets" that have depreciated significantly. That kludge, if it wasn't done intentionally, isn't debt - it's now an asset. If you didn't have a plan to pay it off in the future, you've already bought it and now you need to replace it. And the replacement is very expensive. That is a technical investment you're deciding to make. You aren't just paying off debt at that point, it's a whole new capital expense.

</comment><comment><USER4> As en engineer I understand and agree with what the author is saying: technical debt is a loaded term and it feels wrong to throw it around liberally to cover things that should have discrete and distinct meanings. However: the term "technical debt" is not for engineer-to-engineer communication: it is for communicating to management and other non-technical actors - and in that role the term perfectly suits its purpose.

To understand why, let's consider a normal interaction with a corporate legal team. The content team submits some copy to the legal team for approval and the legal team needs to communicate to the content team that they can't make the claim they are trying to make about the product. Now, it's more true in the technical sense for legal to say things like "Section 3 paragraph 7 of the Fair Sales Act states that Consumer Entities as defined in Section 1 Paragraph 3 may not represent their products in such a way as to potentially mislead a Purchaser as defined in Section 2 paragaph 9. Furthermore this issue has been thoroughly litigated at both the federal appellate and Supreme Court levels which have reinforced those interpretations unfavorable to the aforementioned Consumer Entity." But that wouldn't be great for either department. It's more useful for Legal to just say "You can't claim that - we'll get sued." In a similar way, it's more useful as a software engineer to just say "that decision will add to our technical debt" than to try and discuss the minutiae of how a certain bad architecture decision will make the system "resistant to change". As a fellow engineer, I'd rather have the latter conversation with you and the one about "technical debt" with my business manager.

</comment><comment><USER5> I feel like this post misses the point of the whole "technical debt" analogy. They way the author talks, it seams like their org. uses it as a catch-all term for complaining about the code base. But that's never been the point of the term.

"Technical debt" is the justification for process and development decisions that require more time up-front but will save time in the long run (especially as a term to communicate this to non-technical management). It only comes into play when you're talking relatively about two or more different choices.

Just as an example: when deciding to move ahead with less testing or to move more slowly and write unit tests for every function, you should consider the first to come with more technical debt. That doesn't mean it's the wrong decision, it just means that it should be a factor in your thought process.

<comment><USER6> I think it's more complex than that.

If you look at a practice like Unit testing, you tend to find some organizations are having success with it and others not. Some of them see it as a "waste of time" and others see it as a "timesaver". How the practices are implemented are as important as the practices you decide to use. If the unit tests for your project take 3 minutes to run you may have a problem. If you are writing a large number of hard to maintain mock objects you may have a problem. If the program is not divided into units that are easy to test that is a different problem.

Another good example is the use of Vagrant. It is very possible to have Vagrant spinning like a top, but in a lot of places you hear software management grumbling that a team of 3 people wasted 2 weeks screwing around with it.

I see it so common for developer discussions to center around "cargo cult" positions (i.e. "singletons are evil") and not around a real dialog about the work to be done and how to do it.

<comment><USER7> All Unit tests take 3 minutes to run? Wow, running all 200+ unit tests would take at least 1 hour for me

</comment></comment></comment><comment><USER8> There's a lot of ways to parse technical debt. The simplest one I've found, while it has its shortcomings, is this from a Deloitte article:

They state, in general, it costs $3.61 technical debt / line of code.

"Technical debt is a way to understand the cost of code quality and the impacts of architectural issues. For IT to help drive business innovation, managing technical debt is a necessity. Legacy systems can constrain growth because they may not scale; because they may not be extensible into new scenarios like mobile or analytics; or because underlying performance and reliability issues may put the business at risk." (Tech Trends 2014, Deloitte University Press).

It's an easy to use metric to weigh the cost of supporting programs, and relatively simple for managers to understand. It has the added benefit of encouraging reducing the size of the code-base when possible.

<comment><USER9> Well the problem with that analysis is, what qualifies as a "line" of code?

An efficient algorithm may be punished over an inefficient one. An optimal one-liner can certainly cost a lot to develop (maybe you need a smart engineer, a lot of testing and a lot of time to figure it out) yet it would appear to be cheap.

Then there's just textual differences. It depends on the programming language. And it can be different even in the same language...

This function has one line:

        void f() { ... }

This function has 5 lines:

        void
        f()
        {
           ...
        }

This function has many lines:

        /*
        <several lines of comments>
        */
        void
        f()
        {
           ...
        }

<comment><USER10> You are pointing out that "lines of code" is a terribly imprecise metric. That is TRUE, but not HELPFUL. We all _know_ that "lines of code" is a terrible metric. And for only $100/hr, for a few hours you can hire an expert to evaluate one file from your codebase and determine its size in something more reliable -- "function points" or some other system that you devise.

The thing about "lines of code" is that it's CHEAP and EASY. It is also WAY better than having nothing. Which system is more complex, system A written in C++ 2003 or system B which was written Java in 2013? Which system is more complex, System C which is 200,000 lines or system D which is 10,000 lines? Even if I don't tell you how "lines" were defined in those two estimates, you can still tell more about C and D than about A and B.

"Lines of code" is a terrible metric, which can give only order of magnitude estimates. But that makes it enormously better than no metric at all, or a complex metric which we haven't actually measured.

<comment><USER9> The idea is to encourage the best behavior. A bad measurement encourages developers to focus on the measurement instead of the real problem, and in this respect it is _worse_ than nothing at all.

A shorter function is a great side effect but it should never be the _point_. I want someone who can do things like: find obsolete code, create a better algorithm, decides on a better language for the task. If I say that a system is bad because it's 200,000 lines, I may discover that developers are really good at removing comments and obfuscating code to "improve" it down to 150,000 lines. If I come up with specific performance improvements, and state clear expectations such as "find functions we never use", I end up with a more maintainable system.

<comment><USER10> Of course!

Let me be clear: I will defend "lines of code" as a metric useful for getting and order-of-magnitude estimate of the complexity of any given codebase. Anyone using it as a metric to determine how much to reward developers is just plain stupid.

[1] - [http://www.folklore.org/StoryView.py?story=Negative_2000_Lin...](http://www.folklore.org/StoryView.py?story=Negative_2000_Lines_Of_Code.txt)

[2] - [http://dilbert.com/strip/1995-11-13](http://dilbert.com/strip/1995-11-13)

</comment></comment></comment></comment></comment><comment><USER11> For the best description of technical debt, you can't do better than listen to the man who first coined the term. Ward Cunningham explains:

[https://www.youtube.com/watch?v=pqeJFYwnkjE](https://www.youtube.com/watch?v=pqeJFYwnkjE)

</comment><comment><USER12> I assumed that "technical debt" was an analogy to help management people understand that they might have to allot some time to activities other than getting a program to run for the first time.

</comment><comment><USER13> (This is not disagreement with the original post, but further musings.)

One of the other problems with the technical debt idea is, debt relative to _what_? Since I think most people do not consciously instantiate an answer to that question, I think most of us non-purposefully choose by default a comparison to an idealized perfect code base that is somehow perfectly correctly factored, yet also as fast as completely optimized code, completely documented without being overdocumented, simultaneously optimized for all possible future changes, and despite not existing at the moment, also perfectly understood by the original team such that they can do anything they like to it, and such understanding will survive any such refactoring, all accomplished in exactly the same amount of time that it took to write the terribad code that we actually have.

OK, but that was never on the table, though. What I described isn't even possible to manifest, and even if you back it down to what is at least sort of possible, you don't have the resources to manifest it before you simply run out due to lack of customers. You're not really taking on "debt" if you fail to manifest that, any more than you are taking on "debt" if you fail to make every possible dollar you could if you perfectly correctly harnessed your skills and made the perfect deals.

I think what a lot of people call "debt" is simply the natural state of code. Debt is something somewhat more exceptional than that. There is a core idea of value there, because there definitely is an operation where we deliberately make a short-term choice at the cost of long-term pain, but it requires more thought than I think has traditionally been given to it. The baseline needs to be more carefully defined.

As I said at the top, I'm just musing here; I don't have a ready-to-go definition of "baseline quality" here.

<comment><USER14> >OK, but that was never on the table, though. What I described isn't even possible to manifest, and even if you back it down to what is at least sort of possible, you don't have the resources to manifest it before you simply run out due to lack of customers. You're not really taking on "debt" if you fail to manifest that, any more than you are taking on "debt" if you fail to make every possible dollar you could if you perfectly correctly harnessed your skills and made the perfect deals.

I don't think that's such a problem, though. The "perfect" codebase _should_ be the baseline to which you compare your current debt.

Just like in real life, you take on some debt to have a basic standard of living. You might have a mortgage or maybe a car loan or some minor credit card debt, and you're normally always working on paying a little bit of that off. In a perfect world you'd want no debt at all, just like in a perfect codebase. But, a small amount is natural. It's only when it gets unruly and unmanageable that it becomes a problem.

\---

Aside, the first and last lines of your comment reminded of this post: [https://news.ycombinator.com/item?id=10859383](https://news.ycombinator.com/item?id=10859383)

<comment><USER13> "I don't think that's such a problem, though. The "perfect" codebase should be the baseline to which you compare your current debt."

What I described isn't perfect; it's impossible. It destroys the utility of the idea of technical debt if that's the baseline, because it means that all choices are between "really bad" and "really bad".

"Aside, the first and last lines of your comment reminded of this post:"

Oh, certainly. But people do tend to assume that all comments that are not completely complimentary are intrinsically disagreement, and, well, let's be honest... statistically, it's true, so it's hard to be too annoyed that people's brains make that inference by default.

</comment></comment></comment><comment><USER15> I'm currently on a month-long crusade against what initially was a single small poor code choice (a denormalized model in Rails) from 4 years ago.

As it stands, over 5% of the codebase has been deleted so far without reducing functionality. One could argue that a significant part of the application were just hacks to get around the original hack, and hacks to get around those etc.

Not sure how to break that down into the categories provided, but given that the problems add up to proportions unimaginable to anybody but IRS, debt as an analogy works well enough for me.

</comment><comment><USER16> Technical debt is a very artificial concept. With real financial debt one knows immediately the exact dollar amount, the interest rate, the payment terms and so forth. There is usually no ambiguity or judgment. In contrast, technical debt is based on theories about software development and uncertain predictions about future changes to the software. As the old saying goes: "prediction is hard, especially about the future."

As a business, if I buy a computer on a company credit card, I know immediately that I owe $1200.00 at 23 percent interest per year. In contrast, if I develop a piece of software and decide to use global variables to speed up development, I may immediately gain a mythical man-month in development time BUT I have no idea how much it may slow me down in the future if at all. Sometimes global variables are the way to go and development will be consistently faster for the entire lifetime of the software compared to using local variables. This tends to happen, not surprisingly, when the data in the global variables needs to be used widely throughout the program.

<comment><USER17> The fact that future payments are unknown doesn't make them artificial.

Avoiding effort now causes more effort to be spent later. The amounts are unknown but the effort is real.

</comment></comment><comment><USER18> Obviously this is about development but that's not the only place where you can accrue technical debt. In operations it's shortcuts or bandaids so you can get something done quickly or fix a production issue "ASAP". While it is a trade off it's a crippling one. Without good engineering principals and management support to regularly pay it down you can easily get to a point where the collective fragility has you putting out fires constantly and no one wants to touch anything.

Unfortunately management often thinks that they're supportive but ask them what project they need to axe or put on the back burner to free up time and the ephemeral promises and deferment to some hazy future date get put on the table.

Perhaps it's not "real" in development but it is very much a real issue that needs to be thought about by anyone in charge of operations.

</comment><comment><USER9> I combat this by ensuring that it is perfectly acceptable for a change to consist primarily of _deletions_.

You don't want a culture that only adds features, forever growing the pile. Developers need to be free to identify and aggressively throw out old functions, old tests, obsolete documentation or anything else. This means that a list of deprecated items should be expected in most projects, and _mean it_ when you warn other teams that you plan to completely remove those items in 6 months.

This freedom to delete doesn't mean that total rewrites will be encouraged. Rather, it acknowledges that in an evolving system, some things do become obsolete and mistakes will be found (despite highly competent architects) that ought to be corrected. Ultimately it frees people to easily identify and maintain only what really matters.

<comment><USER19> At my current job, I've removed 20kloc more than I've written in a 200kloc ish code base. Deleting code is one of the most enjoyable experiences of the development process in my mind.

</comment></comment><comment><USER20> Technical debt is usually a result of poor planning, a misunderstanding of requirements or complete lack of requirements, or trying to do too much when you should have built an MVP with limited scope.

I think the SE Radio episode on Technical Debt [http://www.se- radio.net/2015/04/episode-224-sven-johann-and-...](http://www.se- radio.net/2015/04/episode-224-sven-johann-and-eberhard-wolff-on-technical- debt/)

Does a good job of explaining why technical debt occurs, how to avoid it and when technical debt is ok.

I strongly recommend everyone listen to this episode. It's quite insightful.</comment>


Ask HN: Why is learning to code difficult? - <AUTHOR>

<comment><USER2> Is it? A couple of million people have learnt to code quite well. Some learnt quickly, others after lot of time and effort. Most are still learning after years of experience.

Learning something new is generally difficult. For example, a baby doesn't just stand up and walk. Most people don't just get on a bike and pedal away the very first time.

If you would like some help from HN folks, perhaps you could tell us what language(s) you have tried, describe how you find learning to code difficult, what you have tried and what the results have been so far. Doing so might elicit feedback that is in line with your experiences to date.

<comment><USER3> I can code in Perl, Ruby, C, C++, Assembly language, and more. Learning new languages is pretty simple if they're in a family I know.

I read/write/speak English well. Learning Finnish? Painful. Slow. Hard.

On that basis learning code feels too easy!

<comment><USER4> I have the opposite. I speak fluently 4 languages and could pick up another language (spanish) easily. But I can't code. I'm still trying to learn Java but I'm stuck all the time.

<comment><USER5> > Learning new languages is pretty simple if they're in a family I know.

Does your list of languages include fairly disparate examples, such as languages that do not have a Latin base or share a portion of their vocabulary with ones you know?

I think the point being made was the type of language learned. Shared concepts reduce learning time. Knowing Perl, Ruby, Assembly, etc may not help too much learning something like Haskell or Clojure. Knowing Lisp might help quite a bit. Prolog would be another thing entirely.

</comment></comment></comment></comment><comment><USER6> I find it difficult to remember the jargon and idioms, and this day in age when one might switch between a few different languages just to solve one problem, it just gets more difficult.

I don't have a degree. Hell, I barely completed high school. But if push comes to shove, I can dig deep in a foreign codebase in a foreign language and figure out where something is going wrong.

</comment><comment><AUTHOR> I guess what i meant was, why is learning to build things difficult. I feel like im stuck all the time.

<comment><USER7> A lot of programmers who have an easy time coding (even in a new language) are relying on several years of experience and StackOverflow. When I look at a select box on a page, my brain automatically thinks "okay, was this rendered using HTML or JS? what styles have been applied? is there an onchange callback? how is the data being populated? what's the data model look like? is it using two-way data binding or posting with a form?" I can only speculate about these aspects because I've had to build them all before. I absolutely struggled when I first had to deal with new concepts like Javascript frameworks or unit testing, but after sticking it out for a few months, I was able to internalize how they work and see the underlying design patterns, rather than just the implementation details.

If you could elaborate on certain issues that you're running into, we might be able to give you more insight into what exactly is tricky about it.

<comment><AUTHOR> Thanks for the comments. When I get stuck i look up stackoverflow and various other forums for help and may or may not find the answer to the problem. However I feel like they're bandaid solutions and i can follow instructions to make things work but don't understand why the errors occur. Also what can prevent such errors in the future and how can i feel confident as a coder.

<comment><USER8> Honestly, this was me for a long time and I believe many programmers go through this. When trying to build a project, I would look things up on stackoverflow and try to follow tutorials, but then I would do something that caused an error and I had no idea how to fix it. I thought I broke it for good and just abandoned the project. This happened many times with many projects. I became so frustrated, I wanted to give up. But I couldn't. After a while, I became more confident and began to understand what things meant, and how to fix errors (all from just struggling with the language).

There was this long period of struggling to get things to work but I feel like there was this moment where a switch turned on and I began to feel more confident writing code and solving problems.

My recommendation is you keep on struggling. Keep on messing up and embrace failure. Eventually, you'll figure it out. Enjoy the journey of learning to code, don't be so fixed on being the best right away.

</comment></comment></comment></comment><comment><USER9> It is not really ! I found The Coding the simplest job ever :)

This is the only thing which ALWAYS works the way being told: Whatever you put to your code, it will work exactly the way you phrase it ! (this doesn't mean - the way you expect)</comment>


Ask HN:How do I find market info databases? - <AUTHOR>

I am trying to compile a list of Real Estate Boards and some other market data. I am sure that a list like this has been compiled before. Is there a free or paid resource that I can use to look up this kind of market data?
A month or two ago I saw a post on HN that had sources of information databases, but I unfortunately cannot find it anymore...
Edit: Found the referenced HN post here: http://news.ycombinator.com/item?id=1493768 <comment><USER2> You might want to try something like a real estate database API - such as this one from Zillow:

<http://www.zillow.com/howto/api/APIOverview.htm></comment>


Cutting American health research will harm the world - <AUTHOR> http://www.economist.com/news/science-and-technology/21572735-cutting-american-health-research-will-harm-world-bad-medicine

<comment><USER2> It's unfortunate that this is not being highlighted by people involved in the sequestration discussions. People certainly have different views on the role and size of government, but I think most people would agree that they and/or their loved ones have or could benefit from this type of basic research _and_ the stimulus it provides to the private sector.</comment>


Stallman on Hacking - <AUTHOR> http://stallman.org/articles/on-hacking.html <comment><USER2> I've been coding since the 80s and as far back as I can remember hacking has always meant breaching security, it wasn't until the 90s that I started hearing people trying to 'reclaim' the use.

Clearly some tech communities were using it earlier amongst themselves, but language evolves, expecting the world to use another term is just arrogant.

[http://news.google.com/newspapers?id=-VsrAAAAIBAJ&sjid=4...](http://news.google.com/newspapers?id=-VsrAAAAIBAJ&sjid=4tgEAAAAIBAJ&pg=2665,4768784&dq=hacker&hl=en)

<comment><USER3> I have here a copy of the first edition of _The Hacker's Dictionary_ , published in 1983 (same year as the newspaper article cited).

Under the definition for "hacker", it lists multiple possibilities, including #7:

 _A malicious or inquisitive meddler who tries to discover information by poking around. For example, a "password hacker" is one who tries, possibly by deceptive or illegal means, to discover other people's computer passwords. A "network hacker" is one who tries to learn about the computer network (possibly because he wants to improve it or possibly because he wants to interfere -- one can tell the difference only by context and tone of voice)._

I don't see anything indicating that this was considered a wrong or invalid definition at the time, just not a primary one.

The current incarnation of _The Hacker's Dictionary_ , perhaps now better known as the Jargon File, seems fairly direct about the distinction between hacking and security breaching.

</comment></comment><comment><USER4> No offense to Stallman, but isn't it the definition of anti-social to be at a dinner table and proceed to play with everyone else's utensils disregarding their desire to use them for, you know, eating?

<comment><USER5> Propriety is not a strong point of his.

</comment></comment><comment><USER6> Let's apply a single term to everything until it loses all of its meaning!

<comment><USER7> Do you think RMS hacked his lunch by adding a little extra salt?

<comment><USER8> Only if adding salt was somehow forbidden, would push the boundaries of known human experience, or playfully exciting in some way. I do think the Chefs on Planet Green's Future Food are hackers in their own way: [http://planetgreen.discovery.com/tv/future-food/meet- chefs.h...](http://planetgreen.discovery.com/tv/future-food/meet-chefs.html) \- a while ago I saw them cook food with liquid nitrogen and preparing numerous dishes using nothing but road-side weeds spiked with miracle fruit.

</comment></comment></comment><comment><USER9> In the footnotes he proposes that Lady Gaga is a hacker.

The definition is getting a bit shallow isn't it?

<comment><USER10> No, he is using it in exactly the sense the article goes to great lengths to illustrate: approaching any situation by thinking outside of usual conventions. As far as clothing goes, you can't argue Lady GaGa doesn't think outside of the box. Some of the items she has turned into clothing probably took a lot more creativity than finding a way to use three chopsticks in one hand.

rms' definition of hacking doesn't necessarily involve technology. That was the whole point of the chopsticks story.

<comment><USER11> I always find it a shame to focus on her clothes; she is first and foremost a music hacker. And a really really good one.

<comment><USER12> A contemporary and more fitting example of a musical hacker would be Imogen Heap.

I've seen videos of her constructing songs from audio loops of her own voice in real time.

<comment><USER13> Wow, that's quite amazing:

<http://www.youtube.com/watch?v=25VGdNU3nrU>

I don't know to what extent some of the stuff is preprogrammed (presumably the loop lengths are), but it really seems like all the sounds were made during this one recording.

</comment></comment></comment></comment></comment><comment><USER14> Why do these people always try to convince the world, that their chosen word has another meaning then everybody knows. Seriously, is that just too hard or asks for too much playfulness?

Btw to describe a person in German, who is breaking computer based security systems, you call him a "Hacker".

<comment><USER15> _> Why do these people always try to convince the world, that their chosen word has another meaning then everybody knows._

Historically, the hackers at MIT chose the term "hacker" to simply describe themselves and other people with a similar attitude. Later, the mass media misused this term to describe solely criminal actors, which then became the mainstream understanding of the term.

So the mass media, not the hackers, were using the term with another meaning than everybody else (at that time).

 _> Seriously, is that just too hard or asks for too much playfulness?_

I'd put it the other way around: Is is just too hard for the mass media or asks for too much playfulness to respect a (minority) group's self-chosen name?

 _> Btw to describe a person in German, who is breaking computer based security systems, you call him a "Hacker"._

Small correction: This is true for the greater part of the German population. However, within groups like the CCC or FSFE, the term "Hacker" has a much broader meaning, quite similar to what RMS describes.

In other words: Even in Germany, the people who are usually called "Hacker" use themselves the term in a broader sense. I think this is simply an international phenomena.

<comment><USER14> _edit:_ decided to delete all that tl;dr stuff

My point is this: Hackers are still great hackers, if they call themself differently. And then they would spend considerably more time solving "hard" problems "playful" instead of discussing about words who actually don't matter at all.

Mass media calls people whatever makes the most money for them. They are happy with that. And they have won the masses in this case. So hey, let's go on to the next fight.

</comment></comment></comment><comment><USER16> "You can help correct the misunderstanding simply by making a distinction between security breaking and hacking—by using the term "cracking" for security breaking. The people who do it are "crackers". Some of them may also be hackers, just as some of them may be chess players or golfers; most of them are not."

Well, in golf, being a hacker is an insult. From <http://golf.about.com/cs/golfterms/g/bldef_hacker.htm>

Hacker:

A very bad player. Somewhat synonymous with "duffer" in that they both apply to poor players. But "duffer" is sometimes used to denote weaker players in general, while "hacker" is often applied to a single golfer as an insult. Hacker is a little bit stronger than duffer, in other words.

</comment><comment><USER17> Everything is hacking and so can you.

?

</comment><comment><USER18> At lunch yesterday I held my fork in my right hand and knife in my left. I was very pleased with myself afterwards...

</comment><comment><USER19> Is it hacking to do something because you want to call it a hack? Or proclaim that you're hacking? This sort of practice has sort of peeved me a little. I may not be a hacker in the proper sense, and perhaps that's my problem, but when someone thinks to themselves "I wonder if I can make a hack out of this" in regards to chopsticks, it seems like less of a hack than "I wonder if I can use all 6 at once!"

The distinction, in my mind, is "intent to hack" vs "intent to do/achieve/circumvent".

It was such a miniscule part of what he said, but that part sincerely rubbed me the wrong way :/

<comment><USER15> It is the other way round: The term "a hack" appeared after the terms "hacker" and "hacking".

<comment><USER19> "I did not know any way to do that, so I realized that if I could come up with a way, it would be a hack. I started thinking. After a few seconds I had an idea." I'm referring to this part, at the very beginning. "I realized that if I could do this, it'd be a hack". I don't know, it just seemed like he was trying to do something because it would therefore be called a hack. That's how I perceived what he said. This is all personal, and that sort of thing rubbed me the wrong way, as though he was trying to do something just to prove he was a hacker, not wanting to do something to see if he could and that happening to be a hack. It's a subtle distinction, but seems to result in very different things.

And yes, I know this is Richard Stallman we're talking about. There is no question of his hacker-ness.</comment></comment></comment>


Tricorder Competition Has a Winner - <AUTHOR> https://www.washingtonpost.com/national/health-science/seven-member-team-led-by-four-siblings-wins-star-trek-inspired-competition/2017/04/12/a0dcbc94-1fb5-11e7-ad74-3a742a6e93a7_story.html <comment><USER2> I really hope this stuff takes off.

Related...

Portable eye prescription device

[https://eyenetra.com/](https://eyenetra.com/)

Portable sonogram

[https://www.lumify.philips.com/web/](https://www.lumify.philips.com/web/)</comment>


Announcing gitsh: A dedicated shell for git commands - <AUTHOR> http://robots.thoughtbot.com/announcing-gitsh

<comment><USER2> Do we really need a shell for this? If you're reusing some of these so often, why not just alias them in your bashrc? The interactive shell requires way more key-presses than any of my aliases not to mention sticking me into a shell that I need to exit out of later to get back to my development environment.

        $ cat ~/.bashrc | grep git
        alias gitc='git commit -a -s'
        alias gitls='git log --pretty=oneline'
        alias gitb='git branch'
        alias gitca='git commit -a --amend'
        alias gits='git status'

<comment><USER3>
        $ cat ~/.alias
        alias g='git'

        $ cat ~/.gitconfig
        [alias]
          st = status
          br = branch
          co = checkout

I don't see anyone else doing g='git' but I don't have to write out an alias for each command. For less frequently used git commands I forget an [alias] shortcut but I can always use the 'g' shortcut.

<comment><USER4> If you want to keep bash completion on working when having git aliased to g, try to add this line to your .bashrc:

      # Complete aliased git, too.
      complete -o default -o nospace -F _git g

<comment><USER5> I was curious about this, so I checked: zsh will preserve completions if you `alias g=git`.

</comment></comment></comment></comment><comment><USER6> Even if you're not an Emacs user I recommend you try out Magit inside Emacs. (And if you do use Emacs, you should definitely use it.)

I wrote an introduction to Magit a while back. Magit has a very simple and understandable "context menu" interface that gives you access to _all_ of Git's functionality, and then some. In other words, it's not a pared-down environment like a lot of frontends.

[http://www.masteringemacs.org/articles/2013/12/06/introducti...](http://www.masteringemacs.org/articles/2013/12/06/introduction- magit-emacs-mode-git/)

<comment><USER7> I use magit a lot. It is good, but it would be nice if magit-status, and log, were faster. I think it does unnecessary things by default. Is there a way to fold all diffs in a buffer?

</comment></comment><comment><USER8> I've been using Ryan Tomayko's git-sh [1] for years. It provides very similar functionality and consists of just a handful of Bash scripts.

[1] [https://github.com/rtomayko/git-sh](https://github.com/rtomayko/git-sh)

</comment><comment><USER9> This is definitely interesting, and I might check it out for the couple of times a week that I have to do complicated stages of commits or rebasing.

Generally speaking, though, I love git because I don't have to break out from my normal flow to use it.

My use case is potentially very different since most of my projects under version control are personal / single_committer, but I've saved myself some of the typing by aliasing common git commands to short codes: 'git add' becomes 'ga', 'git commit' == 'gc', 'git push' == 'gp'. That way, committing/pushing a bug I've just fixed becomes `gc -am '$message' && gp`.

</comment><comment><USER10> I prefer native system packages to tarballs, so here's a script [1] to generate .deb and .rpm packages using Jordan Sissel's FPM [2] (gem install fpm).

[1] [https://gist.github.com/rasschaert/8915657](https://gist.github.com/rasschaert/8915657)

[2] [https://github.com/jordansissel/fpm](https://github.com/jordansissel/fpm)

</comment><comment><USER11> What would also be neat: a "generate a shell on demand" command. So `use git` would give you something that's about 90% of gitsh, but equally `use apt-get` would do the same thing for apt and so on.

But perhaps we're getting a little bit carried away here, for a couple of keystrokes :-)

<comment><USER12> It already exists: [http://defunkt.io/repl/](http://defunkt.io/repl/). Installing it and running `repl git` will put you into a git REPL.

<comment><USER11> Thanks!

</comment></comment></comment><comment><USER13> It looks nice with the syntax coloring, and it's obvious a good amount of work went into it, but I personally don't see a clear benefit to altering my workflow to save what appears to literally be a couple of characters over a transaction.

What might be interesting is being able to import and export configurations to standardize git usage across multi-coder projects?

</comment><comment><USER14> I see one problem with it .. how do I launch vim and other shell commands?

ctrl+z and using other terminals is ok, but it's not the same thing.

</comment><comment><USER15> Another similar project (which I use) is scm breeze, which sets up tons of useful aliases for various git commands. It gives you much cleaner git status and log outputs, which allows you do things like `ga 1 3 5` to add files numbered 1,3,5 to the index without typing in file names.

[1]: [https://github.com/ndbroadbent/scm_breeze](https://github.com/ndbroadbent/scm_breeze)

</comment><comment><USER16> Interesting, but if I were the author I would definitely avoid the name "gitsh" since some googling reveals there have been prior arts under exactly the same name: [https://github.com/caglar/gitsh](https://github.com/caglar/gitsh) [https://gist.github.com/aristus/2304335](https://gist.github.com/aristus/2304335)

</comment><comment><USER17> The only thing which I personally found interesting was the empty enter command shows git status.

Here is something like that for zsh in case you need it.

[https://gist.github.com/anonymous/0aa22dc97ef832f88026](https://gist.github.com/anonymous/0aa22dc97ef832f88026)

</comment><comment><USER7>
      Of all the Git commands, I find myself using git status most often

I literally never use status. It's faster to use a shell prompt that displays uncommitted / untracked files.

</comment><comment><USER18> I can definitely see myself using this. I generally have one terminal tab open just for git anyways, so this would fold into my workflow nicely.

</comment><comment><USER19> Nothing that a couple of aliases can't do...

<comment><USER20> It's not just about typing less, it's a whole UNIX philosophy of having dedicated shells for programs that are complex enough for subcommands.

</comment></comment><comment><USER21> Seems pretty good! Would love to use it but it's giving me an error about not having >Ruby 2.0 (I use RVM)

<comment><USER22> We were trying to avoid depending on RVM Rubies, because they get moved and deleted a lot, and that shouldn't stop our dev tools from working.

If you're on OS X, and installed via Homebrew, then the installer should have detected that system Ruby was too old and installed Ruby 2.0 from Homebrew for you.

If you're not on OS X, you'll need to either install Ruby 2.0 or later before installing gitsh, or if you want to work around our RVM avoidance, you can force the installer to use your current RVM Ruby: `RUBY=$(which ruby) ./configure`

<comment><USER21> Thanks! I managed to get it to work by running `ln -s $(which ruby) /usr/lib/ruby` since nothing else on the system uses ruby

</comment></comment></comment><comment><USER23> Cool.

What about Windows?</comment>


I used this Ubuntu phone for a month and ended up liking it more than Android - <AUTHOR> http://www.businessinsider.in/I-used-this-crazy-alternative-Ubuntu-phone-for-a-month-and-ended-up-liking-it-more-than-Android/articleshow/48162845.cms

<comment><USER2> So, Unity for the mobile? That's going to go over well...

<comment><AUTHOR> Seems to be. I know some diehards don't like Unity but the majority of people I know running Ubuntu like it a lot, and according to this guy it's looking good on mobile as well. I look forward to trying it out, I have an older Samsung Galaxy phone that should be able to run it for testing.</comment></comment>


Ask HN: Starting pay for junior dev & UI designer? - <AUTHOR> I've got a friend who owns a small company that is looking to improve the technology end of their business. It isn't a tech-centered company, but they need to improve upon what they have.
What should I tell him to expect to pay a junior developer and UI designer annually? He wouldn't need someone with lots of experience, just someone who could get the job done right and someone eager for a career. It would be full time salary, with benefits, would have their own office and is based in central Florida.
I was thinking mid 30's for UI designer and mid 40's for junior dev considering what I listed above. Thoughts? <comment><USER2> I don't think you'd be able to hire anyone who labels themselves as a UI designer or a junior dev for anything under 45K with benefits. I know someone who recently hired a UI guy who had just graduated college and built a few minor sites' UI, he started at 60K plus benefits.

The alternative is hiring a graphics designer who can come in at around $30Kish

</comment><comment><USER3> Given the location, you might be able to get away with 40-45k for someone with very little experience. That goes for both UI design and junior development.

That said, if you're serious about having them make a career there, I wouldn't low-ball them too much - or at least be prepared to give them a big raise their second year. Within about a year, if they're any good at all, they're going to realize that they can make more elsewhere - especially if they're willing to leave central FL. I think Orlando would bring both positions at least 60k with a year of experience, and the last thing you want is to train someone for a whole year only to have them leave because they feel their job isn't competitive / is "dead-end".

<comment><AUTHOR> I wouldn't consider it low-balling, I figured it pretty close to the paying rate outside of a major city in Florida. Plus, there aren't very many tech- centered jobs in this area... could be a good opportunity. :)

<comment><USER3> I'm not saying it's not a good opportunity for the right person. I'm just saying that by starting with a salary that low, the odds of them keeping the person around more than a year or two are slim. That may or may not matter, depending on the objective.

<comment><AUTHOR> That's true. But, if the medium is low to mid 40's (UI) and he starts them at mid 30's, a few raises in the first year would be a quick boost to the 'going rate'. I wouldn't stick around either without a yearly or even bi-yearly raise!

</comment></comment></comment></comment><comment><USER4> I've been playing with the job market and I agree with some of the posters below, anything under 50k, even for someone with no experience, is a no-go. With a bit of hard work and some cold calling, it's easy to make far more than that freelancing.

<comment><AUTHOR> This is true, freelancing and contract work always pays nicely, but a steady paycheck is sometimes more important... especially if you can double your income with freelance.

</comment></comment><comment><USER5> I'm a Jr. developer located in Central Florida and I wouldn't accept anything under 50k for this area. Granted I'm talking Jr. developer, not someone just out of school with no experience.

<comment><AUTHOR> Interesting... what part of Florida? Close to Orlando? He's in NSB.

<comment><USER5> A short drive outside of Tampa. Close to an hour to an hour and a half outside of Orlando.

<comment><AUTHOR> You might be in a better market for this, Tampa is pretty well influenced by tech... especially in recent years. His area is EMPTY. lol

<comment><USER5> Sure there's probably a better market in Tampa. But... If you pay the developer what the area dictates they're worth instead of what the developer is worth you'll experience a high turn over rate.

<comment><AUTHOR> Very true

<comment><USER6> Joshua,

What's your contact info? I know a good UI guy who just moved to central FL-- he might be a good fit for your friend.

Alex (achompas [at] gmail)

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> I agree with others. 30k is way too low. Hire a freelancer (15 hrs a week)

<comment><AUTHOR> I think he's going to need full-time guys, but its a good suggestion!</comment></comment>


Signing in to Medium by email - <AUTHOR> https://medium.com/the-story/signing-in-to-medium-by-email-aacc21134fcd As author of https://passwordless.net I've been advocating for this since quite a while. Great to see a major site adopting it. <comment><AUTHOR> As author of [https://passwordless.net](https://passwordless.net) I've been advocating for this since quite a while. Great to see a major site adopting it.</comment>


The Evolution of the Physicist's Picture of Nature - <AUTHOR> https://blogs.scientificamerican.com/guest-blog/the-evolution-of-the-physicists-picture-of-nature/ <comment><USER2> I just found this 1.5hr visit (SETI Talk) with Lee Smolin really insightful. [https://www.youtube.com/watch?v=-QIJtICy- vE](https://www.youtube.com/watch?v=-QIJtICy-vE)

In short, Smolin urges moving from the "Naturalism 1" view of the universe (timeless, 'physics in a box') to "Naturalism 2" in which the Now takes a more central role, and the universe _may have evolved_ (including the 'constants').

In the last half-hour it becomes clear how much effort he's put into these ideas ... and quotes several well-known personages who voiced similar concerns ( Charles Sanders Peirce, Einstein, Dirac, Feynmann ...)</comment>


Unicode programming, with examples in C - <AUTHOR> https://begriffs.com/posts/2019-05-23-unicode-icu.html <comment><USER2> > This is called Normalization Form Canonical Composition (NFC).

Is there something like a "Round Midnight and No Coffee Form" where the programmer just renders the text to check whether the output of each set of codepoints matches pixel for pixel?

<comment><USER3> The closest unicode has seems to be NFKC, but last I checked it still didn't correctly handle greek and cyrillic aliases of latin characters, never mind anything more obscure.

<comment><USER4> Do you have examples of this? I wonder if it's implementation specific or due to the NFKC method itself?

<comment><USER5> The issue does not have anything to do with normalization per se, but stems from the fact that there are Unicode characters that are semantically different, but nevertheless look exactly same in most fonts. For example 'a' (U+0061 LATIN SMALL LETTER A) vs. 'а' (U+0430 CYRILLIC SMALL LETTER A)

<comment><USER6> It's probably also futile to keep homoglyph tables without the context of the font being used, as т and _т_ are the same letter, just with different styles (and in some fonts resemble T and _m_ respectively in Latin). Unicode mentions homoglyphs briefly in UTR #36, but overall I feel that it's not really their job to solve that issue, as visually similar characters already exist in ASCII and other limited character sets and every context where those things are a problem probably needs to be evaluated differently with different mitigations.

</comment></comment></comment></comment></comment><comment><USER7> Btw: In C99 you don't have to declare all your variables at the top. You can also use // comments.

<comment><USER8> We embedded devs might be able to start consistently using C99 in about fifty years or so. Hopefully.

Lots of development kits barely support C89.

<comment><USER9> Couldn't pre-processors be used to add such features? (I don't know anything about embedded development.)

<comment><USER10> CPP would not be enough, you would need full C99-to-C89 compiler with parsing to AST.

</comment></comment></comment></comment><comment><USER11> I found this quite interesting. Perhaps the closest I've come to grasping the core concepts, even though I've done a fair bit of work around the edges previously.

</comment><comment><USER12> I'm just confused the libicu shared libs are ~25MB big. Why is that?

<comment><USER13> Because it has to store all properties of all valid codepoints 0-0x10fff. It does it via perfect hashes for fastest lookup, not via space saving 3-level arrays as most others do. I described various implementation strategies here : [http://perl11.org/blog/foldcase.html](http://perl11.org/blog/foldcase.html)

<comment><USER14> Benchmarked? For one lookup, or for repeated lookups?

Hashes have terrible cache locality. Unicode itself has locality, with the greek characters generally separate from the chinese characters and so on. The tree-based and array-based methods take advantage of this locality.

<comment><USER15> Just guessing, but based on statistics of web pages in asian languages, most text comsists of mostly the lower code points, no matter the language. So then hash lookups end up being pretty much heavily biased towards small subsets of the data. And I wouldn't be surprised if cache sizes of modern processors comspire to accelerate this pretty lopsided distribution of accesses considerably.

<comment><USER16> I've always wondered whether, in the context of segmenting/layout-ing entire Unicode documents (or large streams where you're willing to buffer kilobytes at a time, like browser page rendering), there'd be an efficiency win for Unicode processing, in:

1\. detecting (either heuristically, or using in-band metadata like HTML "lang") the set of languages in use in the document; and then

2\. rewriting the internal representation of the received document/stream- chunk from "an array of codepoints" to "an array of pairs {language ID, offset within a language-specific tokens table}."

In other words, one could—with knowledge of which languages are in use in a document—denormalize the codepoints that are considered valid members of multiple languages' alphabet/ideograph sets, into separate tokens for each language they appear in.

Each such token would "inherit" all the properties of the original Unicode codepoint it is a proxy for, but would only have to actually _encode_ such properties as actually matter in the the language it's a token of.

And, as well, each language would be able to set defaults for the properties of its tokens, such that the tokens would only have to encode the exceptions to the defaults; or there could even be language-specific functions for decoding each property, such that languages could Huffman-compress together the particular properties that apply to them, given known frequencies of those properties among its tokens, making it cheaper to decode properties of commonly-encountered tokens, at the expense of decoding time for rarely- encountered tokens.

And, of course, this would give each language's tokens data locality, such that the CPU could keep only the data (or embodied decision trees) in cache, for the languages that it's actually using.

Since each token would know what its codepoint is, so you could map this back to regular Unicode (e.g. UTF-8) when serializing it.

(Yes, I'm sort of talking about reimplementing code pages. But 1. they'd be code pages _as materialized views of Unicode_ , and 2. you'd never expose the code-page representation to the world, only using it in your own text system.)

</comment></comment></comment></comment></comment><comment><USER17> Money quote: "Puh-leaze, if your program can't handle Medieval Irish carvings then I want nothing to do with it."

</comment><comment><USER18> > _Reading lines into internal UTF-16 representation_

Fail.

> _It's unwise to use UTF-32 to store strings in memory. In this encoding it's > true that every code unit can hold a full codepoint._

wchar_t is 32 bits on a number of platforms such as GNU/Linux, MacOS and Solaris. It behooves you to use that, and all the associated library functionality, rather than roll your own.

<comment><USER19> Curiously, the paragraph before the line "it's unwise to use UTF-32" ends with "Use the encoding preferred by your library and convert to/from UTF-8 at the edges of the program."

And that is the best advice there is. If you have a choice, use UTF-8, otherwise use whatever your libraries use.

Unless you have very special needs, forget about UTF-16.

<comment> Const-me > Unless you have very special needs, forget about UTF-16.

I don't think programming for Windows, Android, or iOS, or program in / interop with Java, JavaScript, .NET, qualify as "very special needs".

<comment><USER20> Even on Windows it's best to keep your text in UTF-8 and convert it to and from UTF-16 when interacting with win32 APIs. Java, dotNet and JavaScript are the worst of all worlds because you're both stuck with wide characters (in their native string types) and have the intricacies of UTF-16 to consider. I guess the advice might have been better phrased as "Unless you're forced to, or have very special needs, stay away from UTF-16".

<comment> Const-me > it's best to keep your text in UTF-8 and convert it to and from UTF-16 when > interacting with win32 APIs

It's extra source code to write and then support, extra machine code to execute, and likely extra memory to malloc/free. Too slow, in my book automatically means "not best".

> Java, dotNet and JavaScript are the worst of all worlds because you're both > stuck with wide characters (in their native string types) and have the > intricacies of UTF-16 to consider.

Just a normal UTF-16, like in WinAPI and many other popular languages, frameworks and libraries. E.g. QT is used a lot in the wild.

> the advice might have been better phrased as

It says exactly the opposite, "Use the encoding preferred by your library and convert to/from UTF-8 at the edges of the program."

<comment><USER21> "Too" slow depends on a lot of factors.

<comment> Const-me When you're writing code that you 100% sure won't ever become a performance bottleneck, you still care about time of development. Very often, unless it's a throwaway code, also about cost of support.

Writing any code at all when that code is not needed is always too slow, this is regardless of any technical factors.

<comment><USER21> Very little code in this world is needed. Much of it is, however, useful.

The person you replied to obviously isn't advocating for something they find useless.

Perhaps you could have instead asked "Why do you recommend doing this? I don't understand the benefit." But instead, you decided that they're advocating to do something useless for no reason.

<comment> Const-me > you decided that they're advocating to do something useless for no reason.

No, I decided they're advocating to do something harmful for no reason.

They're advocating to waste hardware resources (as a developer I don't like doing that), waste development time (as a manager I don't like when developers do that). But the worst of all, UTF8 on Windows and converting to/from UTF16 at WinAPI boundary is a source of bugs, the kernel doesn't guarantee the bytes you get from these APIs are valid UTF16, quite the opposite, it guarantees to treat them as opaque chunk of words.

UTF-8 has it's place even on Windows, e.g. it makes sense for some network services, and even for RAM data when you know it'll be 99% English so it saves resources, and that data never hits WinAPI. But as soon as you're consuming WinAPI, COM, UWP, windows shell, any other native stuff, UTF-8 is just not good.</comment></comment></comment></comment></comment></comment></comment></comment></comment>


I'll save your startup money on digital marketing. Let me sleep on your couch - <AUTHOR>

Using a throwaway account cz I don't want to get into trouble at the border (if any).
I'm coming to San Francisco from Singapore in mid-September and i'm planning to stay there for 2-3 months. I'm looking to bunk around to get to know people and save on accommodation.
If you're running a startup, I'll save you money on digital marketing and grow your metric in exchange. Facebook, Twitter, AdWords. I'll run your campaigns with the main aim of increasing the metric you want (e.g. hits, users, usage, subscriptions) that beats your current return. I'll also teach you how to do it yourself.
Track record: I've grown a startup's user base from 60k to a million at a fraction of the cost of what the marketing director was spending, with better users as well.
I can code too, so I won't be clueless.
Let's chat. firstname.lastname@example.com <comment><USER2> With no visible track record how can someone expect to believe that you are who you are ?

I wont open up my house on you staying there, if i dont know with i will be crushing there for a couple of months !

Perhaps, a way to prove that you have done what you did then perhaps people would be more acceptable, but i doubt that will happen in US.

</comment><comment><USER3> The name is slipping my mind at the moment, but there's a startup that caters to this exact thing (get free accommodations while traveling in exchange for pitching in at local startups). Can anybody remember the name? Seems like it might be useful for him.</comment>


In My Shoes: A self-recorded video series created by a young professor at MIT - <AUTHOR> http://inmyshoes.info/ <comment><AUTHOR> This series might be interesting for anyone interested in a personal story of science at the intersection of research, speaking, travels, and family. Enjoy!</comment>


Google's search results are not relevant, example: PDF - <AUTHOR> https://plus.google.com/100409232498201806339/posts/SpXWZEEvrEY

<comment><USER2> So he wants info about 'pdf reader software' but only searches for 'pdf' and doesn't get what he wants? Duh. Guess what happens when you search for what he really wants?

Google's search isn't psychic. It also isn't personalized. It will give you the best guess it can make based on your search terms. But just like almost everything else in the world, if you don't supply enough information, you won't get what you want.

If I want a car repair shop, I don't search for car. If I want a pet crematorium, I don't search for pet.

<comment><USER3> (actually, it is personalized somewhat)

</comment></comment><comment><USER4> They are relevant to him.* He is currently logged in, and his location is visible on the left side of the image. Google uses his previous search queries as well as information about him and his location to provide a relevant result. He has probably searched for Java and R before. If you try searching pdf in your own browser, it is likely there will be different results.

*I meant that it is what Google thinks is relevant to him based on the data that they have.

<comment><USER5> I came here to post the same thing. However after doing a search for "PDF", I also got the link to R. I've never searched for (or even heard of) R until now. Instead of Java, I got IRS related results (W-4, I-9) and a link to Advanced Bash Scripting (a subject matter I've never searched before as well...)

<comment><USER6> I too have never searched for R or anything of that nature before. However, if you look closely you see some microdata that is being pulled in "Cited by 148 - Related articles". this is one reason why it is so high and is the actual basis for how PageRank works (the most cited papers/journals are those that are deemed higher quality).

</comment></comment></comment><comment><USER7> I think Google can be proud that a broad query with only 8 out of 10 results relevant is a newsworthy occurrence.

</comment><comment><USER8> This is the definition of a corner case. Google is smart, but it can't read your mind. Give it a hand, and think like a computer.

<comment><USER9> Two things.

Shitty queries give shitty results. Shocker! His argument is totally lame and I'm the first to pile on with Google's mediocrity as it matures. So that's saying something.

At the same time, "think like a computer" is a terrible standard for a piece of consumer software. The money today exists in building elaborate do-what-I- mean machines precisely because thinking like a computer sucks and people don't like to do that.

Luckily, the standard isn't for just computers — it's anyone. If you told me "PDF" I wouldn't know wtf to do either. The need for context exists until we invent mind reading machines.

<comment><USER10> Exactly: garbage in, garbage out.

</comment></comment></comment><comment><USER11> The most desirable results for PDF (and, by extension, most file extensions) are

1) Information about a program that can read or write PDF files

2) Information about the PDF format

The fact that both are shown as the first two entries is desirable. And the fact that wikipedia rounds out the top 3 is great.

</comment><comment><USER12> So in response to a vague and ambiguous query, you got highly relevant results including the one you wanted on the first page. And you're complaining about that?

Incidentally, the R Programming Language manual contains stuff like this:

      pdf() Produces a PDF file, which can also be included into PDF files.

so it's quite relevant too. Admittedly, there are probably a few bogus results here due to incoming links like "Download the PDF file here". But given how vague your query was, and how common PDF documents are, it's remarkable that Google did so well.

Before your next post you might like to read up on search engines, tf/idf, pagerank, and what 'relevancy' actually means.

The only irrelevant thing here is your complaint.

</comment><comment><AUTHOR> Guys, I can understand on when you say query is lacks context but does my Point is those two results are fully irrelevant to my query. its maybe its I have held bar for search engines to high but I don't expect them to read my mind. Because most people when searching with "PDF" keyword will look for:

* pdf reader * pdf editor * pdf converter * pdf search engine etc etc.

But Java or R programming language results, that's not what I am NOT looking for. these two results are not even related.further, for other queries too -- I see ton of such irrelevant results stuffed into google which have to NO relation to original search term. This wasn't always like that -- earlier I used to get better results.

That's why I used this query to express my opinion that search result quality has gone down in past few years & you are now more likely to find spam results for your queries.

\--Cross posted from Google Plus

</comment><comment><USER13> The cause of this is probably that those documents have been linked to with anchor test like "this PDF". Do a search for "click here" to see a similar phenomenon.

</comment><comment><USER14> So if you want to order pizza, you ask for "Food" ?

Anyway, searching for PDF might well mean you are looking for any pdf file (to test your shiny pdf reader maybe?) so its reasonable. I m surprised that there's no wikipedia result for probability distribution function though.

</comment><comment><USER15> I don't think this is a valid argument. By the very definition of search engines and the web itself, tech-related stuff will be more highly-ranked than less-techier alternatives (to a certain level, obviously).

It's a self-reinforcing cycle. My favorite example is Googling for "wine" where the emulator comes in first place. There are many other similar examples as well.

<comment><USER16> It seems that Google's been fighting very hard against this recently [last 8 years], which actually makes it a lot let useful for me, and likely others here. Of course, it's the right thing for them to do, but I'd still give quite a lot for a "Google Classic".</comment></comment>


ChromeSkel - Chrome Extension Bootstrapping Template - <AUTHOR> http://www.bitfalls.com/2012/11/chromeskel-chrome-extension.html

<comment><USER2> This is a good idea, but at the same time it shows a weakness of chrome extensions' design. If there is a need for such a skeleton app, then the technology stack should have it built in - so that a template is not needed at all!

<comment><USER3> Really? I see it more as a framework, similar to any other language's or technology's. To make a bit of a reaching analogy, I don't think HTML is weak just because Twitter's Bootstrap is useful. If you want to roll your own solution every time, have at it. But if you want to have a great starting point, this looks like it could help speed things up.

<comment><USER2> That's not a good analogy. With chrome extension you (almost) always need a background.html, background.js, popup.html, etc. Perhaps chrome extensions would be better if you started by defining a class or writing functions without unnecessary html tags and files. This is a bit different than html and bootstrap where you often dont need most of the framework.

<comment><AUTHOR> In a way, you're both right. Chrome Extension development is far more difficult to get started in than it should be. The documentation is lax at best and it's only starting to heat up, and the trouble one can have with Chrome having to be restarted all the time for the changes to take effect on Ubuntu (and maybe other OSs, I don't know) is highly discouraging. On the other hand, you really don't need anything I put together in order to develop an extension, but it's useful for getting off the ground faster.

</comment></comment></comment></comment><comment><USER4> Thank you for implementing an annoying pop-out utility box directly over the vertical scrollbar.

EDIT: Upon refresh, this problem disappeared. Odd :/

<comment><AUTHOR> That's actually Google's template, I'm sorry about that. I am told they're "working on it" thought I cannot understand why it would take them so long to fix a float. The blog is hosted on Blogger.com, and the default template does this while on the home page, but when you enter the article itself, it gets fixed.

<comment><USER4> Weird, such an irritating bug when your scroll-wheel is broken (like mine is!). I haven't checked out Blogger for ages though, so apologies, I thought it was a custom template!

<comment><AUTHOR> It's horribly irritating, I agree, but Google gives one the choice of picking the new "dynamic" template that's active there now, or old templates of which each and every one looks like it came from 2003.

</comment></comment></comment></comment><comment><USER5> A nice contribution. However, Site Advisor considers this web site to be a risky site.

<comment><AUTHOR> I had no idea! Thanks for the heads up, I have contacted SiteAdvisor's support about the issue.</comment></comment>


Ask HN: What's the best decision you have made in your career/workplace? - <AUTHOR> <comment><USER2> Finding a mentor. Learning the craft from somebody, who started developing with Fortran and served 40 years in the trenches since then, is weight in gold for me.

</comment><comment><USER3> Going independent. I work on a variety of projects, work a lot less hours and make twice as much.

</comment><comment><USER4> Choose something to be good at at, and focus on being the best at it.

<comment><USER5> what would you suggest to a developer that loves to be free to create entire applications? right now I enjoy being a fullstack, meaning I design my database models, my backend layer and my frontend, but I feel that I have a lack of specialization...</comment></comment>


What if your job didn't control your life? Radical wisdom from Ricardo Semler - <AUTHOR> http://www.ted.com/talks/ricardo_semler_radical_wisdom_for_a_company_a_school_a_life

<comment><USER2> All the inventions in robotic automation and office automation has given huge improvements in efficiency the last decades, and will continue to improve efficiency. It's only appropriate to let workers have more spare time.

<comment><AUTHOR> Absolutely. But we will need to change our leadership style, or our leaders if that's what it takes, to reap any benefits from innovation.

</comment></comment><comment><USER3> Okay, if we didn't report vacation days, how would it stop me from taking 3 months of vacation and using the time to work on my startup?

<comment><AUTHOR> In essence, two things:

\- Your ability to do your job and meet your obligations. If you can take 3 months off and still meet the expectations set for you then that might be ok. It might also be a sign that you need a bigger challenge, but that's a different topic.

\- Yourself. If you transform yourself from a serf that works for money into a key contributor in an enterprise, then the quality of your engagement with your employer changes to a level where you feel responsible and accountable for both your own success and that of the company.

<comment><USER3> "Yourself. If you transform yourself from a serf that works for money into a key contributor in an enterprise, then the quality of your engagement with your employer changes to a level where you feel responsible and accountable for both your own success and that of the company."

If this is the case, will "key contributors" also take the risk as well? So if a company starts losing profits, will they have a variable monthly income? My guess is no, which is why we don't have more business owners.

<comment><AUTHOR> Don't we already take a risk by trusting our income (for most of us, our financial security) to a single company?

If profits go down for your employer, your job may be at risk even in companies that operate in a rigid post-industrial revolution management style where you are forced to be at least 40h in the office.

As to why we don't have more business owners, I think that is caused by cultural and educational pressures to conform which then causes us to believe there will always be someone else who will take initiative for us, lead us, or give us a job. But, this is just my opinion of course.</comment></comment></comment></comment>


Show HN: Bravos.co is a replacement for Google Finance - <AUTHOR> https://bravos.co/ <comment><AUTHOR> I'm excited to introduce Bravos.co, which is a replacement for the (now shut down) Google Finance. It features a clean interface for tracking public companies, cryptocurrencies, and private companies.

Video walkthrough: [https://youtu.be/gpQpCK9Ydl0](https://youtu.be/gpQpCK9Ydl0) (02:35)

Looking forward to your thoughts questions - thanks all.

<comment><USER2> Project looks great. Where is the market data for stocks sourced from and how often is it updated?

Really good work!

<comment><AUTHOR> Appreciate it. Our data is coming from a variety of sources, and changing as we develop the alpha version of the site. Currently we use IEX for real-time data, Barchart for historical time series data, CryptoCompare for cryptocurrency data, and various sources including CityFALCON for news and social data.

</comment></comment></comment><comment><USER3> Nice! And pretty fast. I also like the startup data download feature/Excel import. What are the "Bravos-defined sectors"? Is there a full list of sectors to take a look at?</comment>


Pictures of People Scanning QR-codes - <AUTHOR> http://picturesofpeoplescanningqrcodes.tumblr.com/ <comment><USER2> thanks for wasting my time</comment>


Trees as Linked Lists in Common Lisp (2010) - <AUTHOR> http://gajon.org/trees-linked-lists-common-lisp/

<comment><USER2> Is it me or does the second figure look incorrect? I don't see a key to differentiate between solid lines and dashes either, but I'm mobile now so I can't easily check.

<comment><USER3> The figure is correct. In the first part of the article, a tree is represented as (cons root children). So the example tree

        (1 (2 6 7 8) 3 (4 (9 12)) (5 10 11))

has "1" at its root, and four children. Its first child

           (2 6 7 8)

is a tree with "2" at its root, and three children which are all leaves. And so on.

The solid lines are parent relationships, and the dotted lines are sibling relationships. For each list, the first two items are connected by a solid line, and the remaining items by dotted lines.

<comment><USER2> Ah, I see how they are equivalent now, thank you greatly.

</comment></comment></comment><comment><USER4> This is Very Basic Stuff(tm). I wonder if the same topic would receive similar attention in, say, Java.</comment>


Why the Great Indian Media Companies will Fail on the Internet - <AUTHOR> http://indianstartupgyaan.wordpress.com/2009/11/01/why-the-great-indian-media-companies-will-fail-on-the-internet/

<comment><USER2> I was strong-armed into opening an office in India for an american media company a couple years ago. The caste system is strong as ever-- it's just an economic caste. On the whole people don't give a shit about the technology -- only how many people work under them. It's really quite laughable.

For instance, if you are a "fresher" right out of school you crashed through some .NET/Java course that didn't teach you a damn thing about how to think. But after an afternoon of writing shitty code that someone else will undoubtedly have to clean up, you'll be damned if you have to get up and pour your own hot tea. That's what servants are for. They are so openly demeaning to people it's disturbing. Strict hierarchy is so culturally ingrained that people rarely know how to function outside of a bureaucratic structure.

</comment><comment><USER3> Rediff is a very bad excuse for an internet portal. It just lives on flame- baits, scarcely dressed bollywood divas and lots of mediocrity. A simple example of their technical capability -

[http://shopping.rediff.com/product/%22;-alert%28document.coo...](http://shopping.rediff.com/product/%22;-alert%28document.cookie%29;%22)

Few more @ <http://karteek.selfdabba.com/tag/rediff/>

<comment><USER4> And yet they make millions every quarter.

I'm no fan of rediff yet somehow I end up visiting it often.

</comment></comment><comment><USER5> This is so so true!. Rediff can't even copy well. They tried to rip off facebook platform in june 2008 and they have not launched it till now. (It never will). More info here <http://www.manu-j.com/blog/rediff-rips-off- facebook/25/> and here <http://www.manu-j.com/blog/rediff-platform-is- dead/34/>

The ripoff was so bad that it was painfully hilarious. Their documentation was copied directly from facebook and they just changed FBML to RBML etc but there were places where they had forgotten to make the change!

</comment><comment><USER6> Speaking as an Indian by ethnicity but American (U.S.) by birth and heart, I can say I have always found India to be void of innovation. There is a general attitude there that there making leaps and bounds in terms of developing their economy and technology, when in reality they are just doing grunt work for the rest of the world. Being a cost leader is not sustainable, and they don't realize that.

<comment><USER4> _Being a cost leader is not sustainable, and they don't realize that._

I don't think it is so much that they don't realize it as it is that they see cheaper cost as a huge advantage, jump on that bandwagon and end up building some huge corporations(ie. Wipro, Infosys, Tata). I don't see anything wrong with those companies.

Secondly, I get the sense that you are defining innovation very narrowly. All of the huge consulting companies out of India are a work of a lot of backend innovation. The smaller ones also do innovation--albeit at a smaller scale. Difference is they are innovating on things like management and education.

 _they are just doing grunt work for the rest of the world_

So are many of the programmers at Google.

I feel what you are seeing in India is a huge bunch of people for whom the Wipro and Infosys salaries were akin to selling a small startup in the Valley. Your standard of living takes a major jump. Overtime, and we are already seeing more and more of this, these employees of big corps realize they need more money and the once-enough salaries are no longer that motivating. This is when you'll see more startups. And if few of them end up becoming the next Wipro/Infosys, I don't care if people attack it for lack of innovation.

There are far more companies known for "innovation" than companies doing multi-billion in sales. I'd rather be in the latter though that may be a personal choice.

<comment><USER6> I'll admit that I only have a passing familiarity with consultancies and other companies in India, but I don't think I'm defining innovation too narrowly.

A striking example is the IITs. These universities are lauded as some of the best in the world, but where is the ground-breaking research? Maybe I'm looking in the wrong places, but I haven't seen anything amazing come out of these schools.

<comment><USER4> I don't know much about IITs beyond the standard. But is research their strength? I'm not sure. On the other hand, I did find this: [http://en.wikipedia.org/wiki/List_of_Indian_Institutes_of_Te...](http://en.wikipedia.org/wiki/List_of_Indian_Institutes_of_Technology_alumni)

<comment><USER6> I would argue that most tier 1 universities in the world should have a strong research focus.

Posting a list of accomplished alums is nothing special, right? I mean, any good university is going to have that.</comment></comment></comment></comment></comment>


Russian scientists have created a breed of domesticated foxes (costs $6K) - <AUTHOR> http://www.sibfox.com/ <comment><USER2> I remember seeing a documentary about these foxes last year. IIRC they were part of a science experiment to see if it was nature or nurture that was the key factor in the domestication of dogs.

Basically with each litter of foxes they selected the most friendly, and allowed them to breed, creating more friendly / domesticated foxes. They also selected the most vicious and bred them separately as a control. Later when the behaviours became more pronounced they artificially inseminated the vicious foxes with the domesticated foxes embryos to find out if they would be aggressive or domestic. They turned out to be domestic.

Interestingly because foxes are solitary animals they behave more like cats than dogs.

<comment><USER3> Sort of mostly right. You can't artificially inseminate with an embryo though, only semen.

What was interesting about the experiment is that while they only selected for tameness, a lot of the characteristics you see in modern dogs arose. For instance, piebald fur, curly fur, curly tails, floppy ears, shortened snout, etc. Basically what was happening was that by selecting for tameness, they were both selecting for a lengthier juvenile period and more paedomorphic traits.

So this answered the question of how humans managed to select for traits in domesticated dogs that don't appear in wolves. How do you select for piebald color if it isn't present in the initial gene pool? Or a curly tail? Well, those variations are a consequence of domestication.

For instance, only in domesticated animals do you see that characteristic white forehead star, and they made that discovery of what was happening from these animals. As an animal grows, cells containing melanin migrate throughout the body. But if you length the juvenile period and make them move more slowly, some die before they reach their final destination. The white star on the forehead, seen in these foxes as well as horses, cows, and others, is because the melanin containing cells reach there last, and they don't quite make it.

<comment><USER4> > You can't artificially inseminate with an embryo though, only semen.

Of course you can. Fertilize the eggs in vitro then transplant them.

</386>

<comment><USER3> It was a tongue-in-cheek comment. "Inseminate" means "to introduce semen into the reproductive tract of a female." You _implant_ embryos, not inseminate.

</comment></comment></comment></comment><comment><USER5> While this is interesting for a scientific point of view, I really hope these don't become popular in the US. The last thing we need is another "cute" animal that gets over-bred. Visit your local humane society and see how well thats working out for cats and dogs.

</comment><comment><USER6> They sell neutered pups only. Artificial scarcity.

<comment><USER7> Their FAQ says: _All foxes come neutered. It is illegal to breed Sibirian tame foxes bought from Siberian farm._

I'd love to know if that's true, or if it's some hell-bent crazy interpretation of IP laws.

<comment><USER8> It's neither - it's wishful thinking. They hope if they say it people will believe them.

<comment><USER9> True, but it's better than some redneck retard seeing an opportunity and buying a male and female and inbreeding them to make $3000 a pop until they turn viscous, like German Shepherds, Golden Retrievers, etc.

I know they're doing this to keep their profit artificially high, however I'd rather someone be making $6000 selling healthy well cared for animals rather than see idiots abusing animals because they're a new novelty.

I own exotic pets and I've heard true horror stories of people buying sick pets, I'd hate to see that happening with a new species. I'd love it if the domestic fox could be the one domesticated species we don't bastardize over sheer greed.

</comment></comment></comment></comment><comment><USER10> Ancient hunters have created a breed of domesticated wolves/dingos, cost $100 or less in countries where they're subsidised at your nearby humane society.

edit: updated for a less euro-centric view. Thanks araneae

<comment><USER11> Yeah, but they don't look like these.

(Also, I suppose a small fraction of the money goes to support their IMO interesting research. Which is approximately infinite percent more for a charitable cause than from the price of a designer cat or dog.)

<comment><USER10> Agreed, they're beautiful animals.

You can actually befriend foxes in the wild near your home relatively easily if you are patient. I'd be very wary of letting one of them (or one of the 'tame' ones above) near very young children though.

Dogs have been bred for many thousands of generations and yet there still are plenty of them that bear careful watching in spite of being tame, with these animals I'd be extra careful, their roots are much more wild than any regular dog you'll ever meet.

The brother of one of my ex employees in Canada had a half-wolf, half Sheppard. An absolutely amazing animal but imprinted on one person only, dog to him, wolf to the rest of the world. I imagine these foxes to be _much_ more tame than their wild cousins but until you've seen them in stressful situations you'd have to be careful with individual specimen, even if as a breed they're considered tame enough for being around the house. The same goes for dogs.

In Australia there are people that hold dingos as pets, that's another interesting option.

<comment><USER12> Said brother should be careful. The problem with pet wolves and wolf hybrids is that they are happy to view you as pack, but are still wired to try to take over the pack when they grow up and get the opportunity.

This can lead to the situation where the pet is just fine until the owner gets injured. Then the "pet" seizes the opportunity to take leadership and breeding rights. As you can imagine, this is rather distressing for the humans involved.

<comment><USER10> Yes, that's absolutely true, and they've had a 'battle for dominance' already, he came out of it with nothing more than a bunch of scratches though (fortunately).

The guy is _very_ well aware of what he's doing and is not taking any chances.

He lives in Northern Ontario, just North of Sault ste. Marie, in the bush, on his own, no other family members nearby, and he knows the risks involved.

<comment><USER13> I think this statement:

> The guy ... is not taking any chances.

is contra-indicated by the fact he knowingly lives with a half-wolf and that:

> He lives in Northern Ontario, just North of Sault ste. Marie, in the bush, > on his own, no other family members nearby

it reminds me of when people who skydive out of airplanes describe themselves as "safety conscious". :)

<comment><USER10> Well, with not taking chances - aside from living with his four footed friend - he is very much conscious of the nature of his friend and takes all the precautions to make sure that it will not have some tragic ending.

He's as knowledgeable about wild animals as any person I've met.

Living with another human being is also taking a chance, after all one night they might turn out to be the latest incarnation of Hanibal Lecter after all. Life is risk, some of it you can mitigate, some of it you feel you have to take.

But you can limit the damage from the risks you take if you think things through in advance and that's what I mean with 'he doesn't take any chances'.

Just like the skydiver you mention, they usually go to extremes to make sure their gear is in proper working order. The skydiver may take a risk jumping out of the plane, the pilot still has to land it, which is a risky operation all by itself. Risk is simply unavoidable, not thinking about risks increases the risks sometimes far more than the risks themselves.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Talk about DRM - they are neutered!

</comment><comment><USER14> I'd rather go for a fennec.

<http://www.youtube.com/watch?v=eXp9RyBzsSI>

</comment><comment><USER15> I tried to contact these people about a year ago, but never received a response. Couldn't find any evidence that they've ever imported a fox for anyone else, either. They may not be a going concern.

</comment><comment><USER16> Video with the foxs: <http://www.youtube.com/watch?v=enrLSfxTqZ0>

<comment><USER14> Is that John Lithgow narrating?

<comment><USER17> It certainly sounds like it.

</comment></comment></comment><comment><USER18> Now all I have to do is get a startup to sell, then I can get a pet that nobody in my family is allergic to.

Great.

<comment><USER19> Are they all allergic to snakes (or reptiles in general)?

<comment><USER18> No, I don't think so but I don't like snakes and have no particular love for reptiles - they aren't that nice to pet.

</comment></comment></comment><comment><USER20> If you want a dog that looks (and sometimes acts) like a fox, check out the Shiba Inu.

[http://www.google.com/search?sourceid=chrome&ie=UTF-8...](http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=shiba+inu)

</comment><comment><USER21> Foxes spread a horrible smell, most people don't know because they've never been next to a fox and they think they will smell like a cat or a dog(wich also smell but it isn't comparable)

</comment><comment><USER22> Foxes are beautiful creatures. Not sure why they picked the ugliest ones to showcase.

<comment><USER23> These are cute: <http://www.sibfox.com/foxes/> :-)

<comment><USER22> OK, now i want one again!

</comment></comment></comment><comment><USER24> These are not the usual kind of Siberian Foxes one finds on the Internet... ;)

</comment><comment><USER25> Yeah, if I were a politician I'd be heading this one off at the pass and banning it before it became popular. The last thing the world needs is another designer pet. Sure, do scientific research but don't release these things on the world.

This can only end badly for everyone involved, the foxes, the owners, children and various native species in the vicinity of the adopting home.</comment>


Beneath Yellowstone, a volcano that could wipe out U.S. - <AUTHOR> http://nypost.com/2013/12/12/beneath-yellowstone-a-volcano-that-could-wipe-out-u-s/

<comment><USER2> I live 40 miles North of Yellowstone. I'd definitely be happy dying here in a fiery cataclysm. Bring it on!</comment>


HN: Were spelling tests worthwhile? - <AUTHOR>

I was helping my nephew with his weekly spelling test, and I began to reminisce my years of spelling tests. Not only were they stressful, but I would proceed to forget how to spell the words within a week.<p>These days, are spelling tests at all important? <comment><USER2> I'd say yes, they are. Learning a language is tough and there are many wacky rules and exceptions to learn. Many things (irregular verbs and their different forms) can only be learned through memorization.

The current methods for detecting and correcting errors are not perfect and still require the author to have good command of the language they're writing in.

I write spell checkers for a living.

<comment><AUTHOR> I'm still new here, so thank you for taking the time to respond.

</comment></comment><comment><AUTHOR> We have spell checkers in everything now. Even my instant messenger has one. I asked someone this question and their response was "what if there is no electricity." I don't see how that's valid unless there is an immanent Malthusian catastrophe.

This seems to be a case of "if it doesn't work, do it harder." I don't see the point in being a hardass about it. What percent of people actually care their spelling? And the people who care if their writing is taken seriously will always put effort into correct spelling.

The time I spent memorizing spelling words could have been better spent learning why they're spelt the way they are.

<comment><USER3> > What percent of people actually care their spelling?

Perhaps the same percentage that care their grammar and proofreading?

> The time I spent memorizing spelling words could have been better spent > learning why they're spelt the way they are.

Knowing proper spelling is important if only to assist in word and term recognition when reading. What is far more useful is knowing _why_ words are spelled in a particular fashion and to know the history of the word and its roots. Not only does etymology help you know how to spell a word, it assists in selecting to proper word or term to get your point across in the most efficient and least ambiguous manner possible.

<comment><AUTHOR> > _Perhaps the same percentage that care their grammar and proofreading?_

I have an excuse though. This is my fourth day on the colemak keyboard layout, so every word I type is extremely painful. That particular error came from shortening the sentence from "What percent of people actually care about how they come across?" I accidentally edited out the about. Anything that has to do with typing right now is frustrating.

> _Knowing proper spelling is important if only to assist in word and term > recognition when reading. What is far more useful is knowing _why_ words are > spelled in a particular fashion and to know the history of the word and its > roots. Not only does etymology help you know how to spell a word, it assists > in selecting to proper word or term to get your point across in the most > efficient and least ambiguous manner possible._

Yes. You said it better than I did.

</comment></comment></comment><comment><USER4> Definitely important - not just for teaching kids how to spell (which is still important, despite word processors and spell checkers) but also extending their vocabulary.

<comment><AUTHOR> _...also extending their vocabulary._

My brain completely skipped that when I started thinking about this.

</comment></comment><comment><USER5> What other incentive would teachers have to teach kids to spell?</comment>


A Conversation with Alan Kay (2004) - <AUTHOR> http://queue.acm.org/detail.cfm?id=1039523 <comment><USER2> > All of these ideas could be part of both software engineering and computer > science, but I fear—as far as I can tell—that most undergraduate degrees in > computer science these days are basically Java vocational training.

Pages and pages of verbosity, moronically recursively structured code trees, ridiculously bloated IDEs... how did all of this become a thing ? Worse, if you aren't part of the cult, you're essentially out.

<comment><USER3> The opposite is if you visit a really technical university that teaches you theoretical computer science, compiler design, information theory, etc. and the job interviewer asks you about Java 8 implementation details and you have no clue because last time you worked with Java was 2 years ago when you implemented a compiler for a large subset of Java. And they think you're clueless and learned nothing. Can't make it right for everyone, I guess : )

</comment></comment><comment><USER4> All in all, this is one of the less interesting interviews I've read with Alan Kay, even though he uses a lot more words than he did in his HN AMA. This is likely due to the subjects they were discussing and my lack of familiarity with them. However, he touches briefly on the Lucid programming language, which I had never heard of and am intrigued by.

From Wikipedia[0]: "Each variable is an infinite stream of values and every function is a filter or a transformer. Iteration is simulated by 'current' values and 'fby' (read as 'followed by') operator allowing composition of streams."

I've recently been reading up on ReactiveX (RxJS specifically) so I like the idea that each variable is a stream, and it's always fun to see just how old some of these ideas are--Lucid came out in 1976. Lucid is also completely declarative--the code order does not matter, and there are no assignments, only descriptions of how data flows through the program.

I have no idea how useful the language actually is, or if an interpreter for it still exists. But the paper I'm reading about it[1] is also up on Bret Victor's site, so that's gotta count for something.

[0][https://en.wikipedia.org/wiki/Lucid_(programming_language)](https://en.wikipedia.org/wiki/Lucid_\(programming_language\)) [1][http://www.cse.unsw.edu.au/~plaice/archive/WWW/1985/B-AP85-L...](http://www.cse.unsw.edu.au/~plaice/archive/WWW/1985/B-AP85-LucidDataflow.pdf)

</comment><comment><USER5> > This idea, by the way, was used in [Squeak contributor] Dave Reed's > fantastic thesis for coordinating object siblings where you have one logical > object but many physical manifestations of the same object on different > machines

The 1978 thesis was submitted here a few months ago [https://news.ycombinator.com/item?id=11960595](https://news.ycombinator.com/item?id=11960595)

I can only reiterate what the submitter already noted - that much of Reed's conclusions bear a striking resemblance to Rich Hickey's work with Clojure and Datomic. Unfortunately a plain-text copy of the thesis doesn't appear to exist.

</comment><comment><USER6> Please put the year, e.g. (2004), at the end of the title when the year is available and the post/article/content was not dated within the last several months. Old content is still relevant, but I was looking forward to something current when I clicked on this, especially after HN just got to talk with him in: [https://news.ycombinator.com/item?id=11939851](https://news.ycombinator.com/item?id=11939851)

Also, if anyone wants to try to pair sunspot cycles with programming languages as Alan mentioned in jest, here's some data:

[http://solarscience.msfc.nasa.gov/SunspotCycle.shtml](http://solarscience.msfc.nasa.gov/SunspotCycle.shtml)

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

(Although, Wikipedia's list looks far from complete.)</comment>