The Biggest Problem in Mobile: Retention - <AUTHOR> http://cristinajcordova.com/post/36553000358/the-biggest-problem-in-mobile-retention <comment><USER2> There are two kinds of apps: entertainment and utility. Retention is not a problem on the latter, almost by definition impossible with the former. How many movies would you watch every day of your life?

The mobile world actually _likes_ churn, it means that you can sell the same spot to the same user over and over again.

</comment><comment><USER3> Retention is definitely not the main problem in mobile. It may be in social stuff (ex. the games referred in the article) but that has nothing to do with mobile. Retention in social stuff is a big problem.

In mobile the main problem is discovery. There are so many apps on each market, and the ways to find one are much more limited then a web app.

</comment><comment><USER4> I agree that retention is a key metric in a time when everyone is talking about growth. Retention isn't going to be sustainable for apps that aren't core utilities. The biggest problem in mobile is the amount of resources invested in developing apps that just clearly aren't core utilities.

Photos (Instagram), messaging (SMS, Beluga, Twitter, etc.), voice, maps (Foursquare?), email, web browsing (Chrome), and music (Rdio, Spotify, Pandora, etc.) are the only core utilities right now in my view. Notice the omission of video (too early) and games (trends and time wasters).

The only exception I can think of is Uber, an episodic utility that is doing very well. I'm sure there are others.

<http://cdixon.org/2012/05/21/four-use-cases-for-mobile-apps/>

</comment><comment><USER5> I don't think it is a problem that is harder on mobile than web, it is just that up till now for mobile we have only focused on downloads: downloads is the main metric for iTunes Store and Google Play to rank apps and to get into a top 25.

I totally agree that this is a stupid metric and we should move to monthly active users, both for general measurement of success as well as ranking in app stores. Getting a lot of one time visitors on your web site is not hard, monthly recurring visitors is. No different on mobile, let's start dealing with the challenge of engagement on mobile as well.

<comment><USER2> But even 'monthly active users' is a very stretchable metric. For one app it is defined as 'user opened the app', for another app it is defined as 'user interacted with the app' and for a third it is defined as 'user communicated using the app'.

Depending on which of the three you use you're going to end up getting wildly different figures from different kinds of apps.

Mobile metrics are like web metrics back in the day when 'hits' were the normal way of expressing how popular a website was.

Churn figures have similar problems, as do customer lifetime value (which you can only properly establish at the end of a cycle) and various other metrics.

Some standardization and common sense would go a long way to making the mobile world more transparent but as long as there are fortunes made based on opaqueness this is not likely to change.

</comment></comment><comment><USER6> The apps that are actually useful I keep using, not even bothering to try and find a better app for that task because of laziness.

The toy apps that I download because of marketing or curiosity or as a diversion? My usage fades quickly.

Is it a surprise to anyone that hucksters have a problem with customer retention?

</comment><comment><USER7> Andrew Chen covered this phenomena on his recent _When does high growth not imply product/market fit?_ [1]

[1] [http://andrewchen.co/2012/06/20/quora-when-does-high- growth-...](http://andrewchen.co/2012/06/20/quora-when-does-high-growth-not- imply-productmarket-fit/)

</comment><comment><USER8> Perhaps there's a tiny little possibility that only a small fraction of mobile apps are actually good, useful and continuously create new value.

I'm sure retention isn't a problem for them but on the other hand, most of that stuff tends to come bundled with the phone OS already these days.

</comment><comment><USER9> This is a big issue. Annuity != Perpetuity. Its much harder to build the latter.</comment>


Serious privacy issue in Linkedin not fixed for more than a week - <AUTHOR> https://twitter.com/AndrisAtteka/status/524098970172538880

<comment><USER2> The same type of "attack" can be run against Amazon and most onlineshops that base suggestions on your product viewing / browsing history. So just embed a link to an "interesting" product (e.g. adult toys) in any website and users next visiting amazon will see very odd suggestions. There is not much they can do against this as they still want to count visits on profiles from people coming from Google where the URLs will not hold a valid CSRF token in them.

Only tracking visits when the page UI loaded and preventing the page from being embedded in the iframes via security headers (if only these were supported in a more consistent way) would help address this. Not worth the effort.

This would only become an interesting attack vector if many visits to your profile bumped your credibility in any way.</comment>


What happens to people having no aim? - <AUTHOR> http://abhishekdesai.com/2008/04/what-happens-with-people-having-no-aim/

<comment><USER2> Wow. Just... Wow.

I understand that this is talking about India and I guess they have a different work schedule than is standard here in the U.S., but this guy must really have no clue.

To say that the need for employees to have a proper work-life balance means that they have no aim or drive is not only wrong, it is toxic.

If this "training" is so useful, why not hold it on a non-holiday? Take it out of the company's time, and not the employee's time.

<comment><USER3> Exactly...

> Nobody wanted to be the best in whatever they are doing. They wanted to > enjoy the holiday they get just like any other unambitious person.

Which presents a course of action: those who want to be the best will spend their own time to work towards that goal, and the rest can enjoy their holiday. Trying to force people to do something they don't want is a bad recipe.

</comment></comment><comment><USER4> They don't bother to use anything other than the default WordPress template.

Actually, this is a good example of a thought that someone has that shouldn't have been made public. It's especially clear when the author has to say in bold that he's not criticizing his team. If I was on his team I'd be upset as being seen as an aimless, zombie.

Note that it's quite common in India for offices to work on a Saturday morning.

<comment><USER5> (Note: I am an Indian and live in Bangalore)

"Note that it's quite common in India for offices to work on a Saturday morning."

 _Some_ offices (mostly very small companies) work on Saturdays. Most software companies have a 5 day work week Monday to Friday, same as everywhere else.

</comment></comment><comment><USER6> Amid all the criticism I'm seeing of this guy in the comments - yes, as jgrahamc pointed out, this post expressed a thought that shouldn't have been made public - let's back up and discuss what he's really talking about. Imagine if he had expressed the question more tactfully, by not mentioning his team specifically: It does raise an interesting question, one I myself have often wondered about. How/why do some (most?) people go through life with no ambition? What makes them tick? How do they stand crap jobs and not want to have a better one, or want to be better at what they do?

<comment><USER3> The realization that they just want to float through and maximize for happiness, rather than chase after things that they don't feel that they can achieve in any case?

Not for me, but I think I can see the point of view.

</comment></comment><comment><USER7> This reminds me of Brendan Barnicle's MyLackey E-Mail <http://www.fuckedcompany.com/extras/mylackey_letter.cfm> With 50 people you have to start measuring results not focus on effort or face time in the office. I would be interested in what the employees feel would be the best way to improve quality and productivity. They might opt for other changes than working longer hours.

</comment><comment><USER8> This makes me wonder if unions exist in India. I know nothing of the politics in that country, however if the freedom exists for the people to form a union and larger organizations treat their employees like this manager-of-the-year, I wonder how long it will be before they form?

<comment><USER5> "This makes me wonder if unions exist in India."

Most manufacturing industries are _heavily_ unionized. Outside manufacturing, there is mixture of unionized and non unionized labor. India has been riding an economic boom for the last decade or so, and though there is a lot of misery among the uneducated/illiterate folks (and there are plenty of those), for people who've made it through college, it is raining jobs. Unions have lost some of their power under the relentless rise of opportunity.

All that said, the software industry is _not_ unionized.

There were a few tentative moves in that direction, but these were driven by politicians trying to get a few more votes and didn't get too much traction with the developer folks.

Frankly most developers in the local software industry are waiting for their H1 visas (and eventually green cards). Who wants to rock the boat? Everyone is rolling in money (Bangalore is more expensive than some American cities). Hardly a conducive atmosphere for unions!

<comment><USER8> Thanks for the info. Very interesting stuff to know, especially your point about Bangalore being an expensive city.

<comment><USER5> ", especially your point about Bangalore being an expensive city."

I think I should have been clearer. As far as I know Bangalore is either the most expensive or second most expensive city In India. (reliable statistics are hard to come by).

To clarify.

Bangalore is expensive in terms of real estate / housing. I've been looking to buy a house and I was quoted close to 2000 $ per square foot for a good _apartment_ ! Insane!

Hotel rooms are booked months in advance and _very_ expensive.

Food /clothing etc is cheaper than in the USA , (though more expensive than almost anywhere else in India (excluding Bombay, perhaps). Traffic is a total snarl up at peak hours and power and water supplies are creaking (but holding up, barely, so far). The more urban parts of Bangalore have good internet connectivity (about35 $ a month for an always on , unlimited download connection).

All that said, I wouldn't live anywhere else (in India). Bangalore is no Silicon Valley , but what genuine technical talent exists in India is right here (though submerged in the crowd of those who barely know how to write "hello world" , but get "Senior Architect" type jobs in the large outsourcing firms!!).

</comment></comment></comment></comment><comment><USER9> so, that fear some people had that all the software jobs were going to india? i guess we can all rest easy now.</comment>


Finnly, the automated trading bot for everyday people - <AUTHOR> Hi Hacker News,
My name is Jamison Proctor and I am Co-Founder at Finnly. Our product, Finnly, is the automated trading bot for everyday people. One-chatbot, one part trading bot, Finnly is your guide and friend in the world of automated trading.
Trading. Bots. Work. They buy and sell assets automatically, delivering passive income while their users go about their day.
Finnly is a trading bot for beginners. Our goal is the create a trading bot which is so fun, simple and profitable that everyone in the world will use it, even your mom. Finnly is a fully functional trading bot with a chatbot interface. Via his chat interface, Finnly walks the user through his set-up and maintenance processes step-by-step. Using Finnly is like having an experienced friend help you as you start your automated trading journey.
Webpage: https://www.finnly.io 3 Minute Pitch: https://youtu.be/PUddvdP0U50
We have recently released a pilot version of Finnly which is free to use and works on Coinbase Pro. We want to use this initial product to better understand our users needs while sharing the potential of automated trading with as many people as possible.
If you have a Coinbase Pro account and would like to see what a trading bot can do, check out Finnly!
Free sign-up: https://trade.finnly.io/signup/? <comment><USER2> Not so sure everyday people trade algorithmically. Pretty niche group of people who do trade, and mostly lose, like gambling.

<comment><USER3> Yeah. It's like internet users in the 80s. This product might be a bit early for the maturity of the market, but they can definitely get users. The product premise is good, but no one has executed well. I might end up having to build it. But hopefully not. The demand is growing so someone will make a good product for this high value problem soon enough.</comment></comment>


Want to Create a Keyboard for the PinePhone? - <AUTHOR> https://www.pine64.org/2020/07/29/invitation-to-play-along/ <comment><AUTHOR> Title taken from the similar Reddit-thread[1] since I found that title significantly more informative.

Hope that's ok.

[1] [https://www.reddit.com/r/PINE64official/comments/i00xpk/want...](https://www.reddit.com/r/PINE64official/comments/i00xpk/want_to_create_a_keyboard_for_the_pinephone/)</comment>


I've made an interpreted language on top of JS, tailored for beginners - <AUTHOR> I've made a tiny interpreted language on top of JS, together with an debugger, heap vizualizer and editor with common IDE shortcuts ( prettification, go to definition...).
Github:
https://github.com/vasyop/mono
Demo (try step over):
https://vasyop.github.io/mono/
It's basically a simplified C with a single data type: int, and it's made to teach fundamental concepts with people with 0 programming experience: expressions, statements, stack, heap, pointers...etc, without having to install anything or get scared by the complexity of a fully-fledged language / IDE.
Initially I just wanted to learn about how to make a language, but I thought I would make something useful out of it. What are your thoughts?
What I plan to do next :
- release tutorials for people with 0 programming experience
- compile it to instruction set and making a small VM ( instead of walking the AST as I am doing now, which is very slow ). <comment><USER2> > _with a single data type: int_

I was reading that too literally, because newbies usually find strings more interesting than ints. Anyway, you can use arrays of ints as strings. So :)

Anyway, I think that for new users it's more friendly if the ints, strings and functions have some magical tag to make errors more friendly, for example, what happens if someone uses

      prints(7)

?

The graph with the pointers links looks nice (it even shows the string) but the font is too small. It would be nice to add a zoom to it.

What is the internal representations of functions? If I prints a function I get some weird characters.

The "delete" key is not working. I must use "backspace" to remove some text.

</comment><comment><USER3> I'd suggest to consider a different name, Mono is already used by a big project related to programming languages: [https://www.mono- project.com/](https://www.mono-project.com/)

</comment><comment><USER4> cool, I like the vizualizer</comment>


How to become an unpaid technical support worker for Google - <AUTHOR> http://www.google.com/get/topcontributor/watch/index.html <comment><USER2> This is what made me ditch Gmail. After using it for several years, I stumbled across a serious bug that removed all email from my inbox. I tried contacting support, but there was none; all I got were replies from top contributors pointing me to other people with the same issue. It becsme clear that there was no way to escalate the issue or get help from someone who could actually investigate the bug or help restoring my email. Top contributors are not an actual replacement for customer support.

I've since switched to a paid email provider.

<comment><USER3> Google provides paid email (which includes support) under the service of Google Apps for Work. You can call or email an actual Google tech support employee 24/7 for core services when you need help (number will be in the admin panel).

But when you're getting a product for free, especially email (Hotmail/Live Mail, Yahoo, AOL, Gmail, etc) you really can't expect any provider to provide comprehensive one-on-one support as it is rather pricey. So you're right to go to a paid plan somewhere.

<comment><USER4> I wonder if the outcome would have been much different if the jakobegger did have Google Apps.

In my experience, a common problem with support is that they lack the knowledge and capabilities to deal with certain types of support requests. At some point, some support requests need to be escalated to the product owners within the organization. Some organizations are simply not prepared for those types of support requests.

Email does seem like a service that should be recoverable, though. If you depend on it heavily enough, you should probably:

(a) Own the domain that emails are going to. (so that if Google stumbles, you can switch providers)

(b) Have full records of all accounts & aliases. (so that you can continue to receive incoming mail following any switch of providers)

(c) Backup all email regularly. (so that you don't lose all existing mail in the event of needing to switch providers)

</comment></comment></comment><comment><USER5> One of the most beautiful things about the internet is that it enables platforms for individuals to create value and then receive no share of that value.

We see much lamenting about lack of innovation in "business plans" around here, and yet we have an historic opportunity to examine the relationship between value creation and compensation. Why is the Etsy IPO plan so exceptional? Why do so menu community members of instagram, reddit, etc end-up feeling betrayed by the services they helped create?

<comment><USER6> Or Stackoverflow? They are monetizing free support from thousands of developers, and it's arguably made the internet a better place.

<comment><USER7> Yes, it has.

However, it's a bit more subtle than that. Yes, Stackoverflow is making some money, but everyone who contributes gets a few things out of it too:

1\. They get the use value of the overall result. This is a non-trivial value. Linux operates under similar dynamics. A lot of "free" code was written, and it was written to improve on the use value in the body of code they found at the time.

Anyone finding Stackoverflow sees a lot of use value and they may well see improving on it in a similar way.

2\. Reputation. I like to think of this as "feed the net and the net feeds you." Back in the USENET days, I was very highly active on SGI computers. Sometimes I wondered about the overall value of that. Then I got stuck on some painful Oracle installation issue. All I had to do was ask, and within an hour I got a nice script mailed to me along with a thanks for all the filesystem / disk questions I sorted out for people. (thanks Jerry)

Given the dollars in play at the time, that script was worth a ton!

3\. Network, similar to reputation. My many interactions on the net has often resulted in knowing people who I could help or get help from or start projects with.

Clearly, this all must be balanced and weighed by everyone involved. People who do too much might seem over exploited or suffer opportunity costs of various kinds. And we all see what is worth what a little differently too.

But, it's not exactly free. There is value exchanged and accumulated. Making sure that happens is worth something. Maybe it's worth about what Stackoverflow is taking in.

USENET worked, until it didn't. And when it didn't, it all went down hard. Huge value lost. Maybe that won't happen this time, and frankly I think that's worth a profit to somebody because the use value is high enough to be painful should it go missing.

<comment><USER8> Also it's important to remember that all user content posted on Stackoverflow is licensed under CC-by-SA, so if Stackoverflow started going south, someone else can fork the data and continue hosting it.

The data dumps are hosted at the Internet Archive: [https://archive.org/details/stackexchange](https://archive.org/details/stackexchange)

<comment><USER7> I didn't realize that. Awesome.

</comment></comment></comment></comment></comment><comment><USER9> People do anything for points on StackOverflow. It's pretty much the same thing

<comment><USER10> Exactly. Is it me or has there been a noticeable increase in Google gate- brigade posting on HN recently? Things like these, very integral part of the existing internet framework are used for pointless 'big scary Google, Google is the new Microsoft ' imagery. Anyone with data care to do a sentiment analysis/ vote-brigading analysis?

<comment><USER11> In this instance, people are angry about the fact that Google makes a ton of money from these services but feels no obligation to provide support for them.

More generally, welcome to the new normal. The money-spewing circleparty is fizzling out, thankfully. People increasingly feel safe and confident in challenging the morality and societal value of these corporations. Blasé compliance is no longer expected in tech and many of us (those of us that upvote these things) are working to keep it that way.

Google is big, scary, and the new Microsoft, whether or not that's fiscally or professionally convenient for you.

<comment><USER7> Why would people expect more support without actually paying for it?

Google actually does support the free offerings pretty well. They just don't do it on a case by case basis. Anybody who wants that has the option to pay Google to get it.

Otherwise, Google does invest time into making sure it works well for everyone and isn't just letting it all sit out there slowly breaking...

<comment><USER11> People pay with their privacy. Google's support is generally considered to be somewhere between dismal and nonexistent for most of its services. Clearly, they're making enough money to be doing better.

No one expects intensive 24/7 support for free webmail, but Google's balance of profit and support is off. Free-tier users aren't cattle, especially not when you're tracking them.

<comment><USER7> Anyone who feels that value exchange isn't appropriate has a lot of options.

If you pay Google, their support is much improved.

I don't expect _any_ support for free web mail. And yes, I back mine up, from time to time, or pay for that support.

You may well value things differently, but that's not necessarily on Google.

<comment><USER12> How do I keep my @gmail.com address while paying for support? For that matter, where is the paid supported version of Google Voice / Hangouts?

I switched my texting/gv to hangouts on my phone, now I can't add someone that texts me to my contact list without trying to call them first. I also can't seem to SMS someone from hangouts in my contact list on my desktop without manually typing in their phone number. Pretty big UI/UX oversights (or not).

There's really no way to actually get in touch with appropriate googlers. There's no real evidence that product owners participate where the people actually are.

What might be better, would be to approach the StackExchange guys, or even just riff their interface for a google branded services site, and have actual google employees participate. I tend to see a lot of the same lacking regarding general Windows / Microsoft support, but SO/SE fill a lot of the void... I don't think I've really seen googlers participate. Maybe they should bring back that 20% time to participate in either these forums on SO, or GH issues.

<comment><USER7> Yes: _There 's really no way to actually get in touch with appropriate googlers. There's no real evidence that product owners participate where the people actually are._

Does that have to happen?

A googler participated on Quora a while back, and it was related to the compose window changes. Was an interesting thing. Several of us wrote up the issues with that change, and the response was "I think Google is getting pretty close to optimal on this feature" and not much else.

They've got their metrics, and they've set them in various ways, and the product offerings are there to take or leave. When tons of people take them, great! When they don't, they do what they think might improve on that, or remove the product.

I get the feeling Google watches the dialog, and they take input that way, but they rarely have direct dialogs where they can end up committed in some fashion.

The more expected model is customer driven, and I agree with you on your observation. Google isn't necessarily doing it that way, or not directly.

But do they have to?

That's the question. It's also a potential abuse of their position, and I find it very intriguing to think about.

Mostly, their products add value to my life, and the costs associated with them do not trump that. So it's good for me, and I don't worry so much about the little things.

They are little things!

Like the phone UI. Or what they did with Inbox. There are some limitations. Take it or leave it. You could switch away from hangouts and be just fine, right?

In the scheme of things, UI issues aren't the same as, it doesn't work, or it hurt me, type issues.

Gmail always sends it's mail. If it didn't, that would be a major support issue. Gmail sometimes is borked on the UI, or my browser, or I don't get a draft saved when I thought I might have one, etc...

(On a phone, I find it difficult to edit a draft without actually going to the drafts list of messages, for example. The desktop allows it.)

Those things are annoyances, but they always have work arounds and I can get it done, so I just go and get it done, and if I can get it done, how much support do I really need?

IMHO, this is close to how Google thinks of things, and they get to do that, and I get to select them or not.

I've seen companies invest a TON on every little thing, completely customer driven. I've seen that work out OK, and I've seen it fail too. Failure in the sense that the product could have been taken somewhere awesome, but for lack of resources. Maybe it's that "support every little thing" drain that killed it?

Fair questions, if you ask me.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Reminds me of a SaaS company (I won't name) solved the problem of "too much support time wasted on non-enterprise clients" by funneling all non-enterprise support questions to a community forum and encouraging contributors to answer those questions.

I answered dozens of questions for many days, thinking it will help build credibility (as suggested by another commenter). Then I realized I'm just volunteering as level 1 support, and decided it's not worth it.

<comment><USER14> There are semiconductor companies that do this with their software offerings. Their level 1 support always asks you if you've posted in their community forum.

</comment></comment><comment><USER15> Wow.....just wow.

The "benefits of becoming a top contributor" video made me want to bash my head into a wall.

<comment><USER10> My college professor used to (still does I bet) proudly put the stack overflow 25karma point sticker and a letter of thanks from the admins on the door to his office. And this was a man with tenure etcetera.

<comment><USER16> It's entirely possible that the support he received from others outweighed the time he put in supporting others. I know for sure that's the case for me.

<comment><USER17> In my experience, SO is only useful for trivial questions, or maybe questions that ask for a better explanation of some basic concept. If you have a question you can't find answer for by searching on the internet, it won't be answered on SO either. I still occasionally help people there, but it was never a useful resource to me personally.

<comment><USER18> SO is most useful for questions that could be answered with a simple google search if only you knew the right search terms to use. For more complex questions, it's only occasionally useful.

</comment></comment></comment></comment></comment><comment><USER19> Microsoft has had their MVP program for over 20 years! [https://mvp.microsoft.com/en-us/overview.aspx](https://mvp.microsoft.com/en- us/overview.aspx)

"Microsoft Most Valuable Professionals, or MVPs are exceptional community leaders who actively share their high-quality, real-world deep technical expertise with the community and with Microsoft. They are committed to helping others get the most out of their experience with Microsoft products and technologies."

These people are going to exist whether there's a program or not, so why not create a program to recognize them?

<comment><USER20> Except most MVP share technical programming related articles. Not much different than sharing knowledge on your blog. At least you get prestige with Microsoft's program. Seeing Microsoft MVP on a resume is a good boost.

</comment></comment><comment><USER21> It gives lonely people a chance to build professional credibility. Why the hate? Is it really that different from a software company requiring you to learn the latest technologies in your free time?

<comment><USER11> Because they have the money to pay support staff but choose not to.

Your example is irrelevant because that's part of a paid career, not free labor farmed with manipulative YouTube videos.

</comment></comment><comment><USER22> For what it's worth, if you can show you were proving real value and not primarily getting just entertaintainment/training from Google, you could work this way for a period and sue Google for back wages. The courts in the U.S./California generally take minimum wages very seriously and case law has defined the exceptions quite narrowly. Even non-profits have been successfully sued for wages for "volunteer" labor.

It's also true basically all unpaid internships are illegal and interns can easily sue for back wages, FWIW.

</comment><comment><USER23> It's somewhat ironic to have a thread decrying unpaid community contributions appear on Hacker News (or any other forum).

<comment><USER24> Not really. Hacker News is not a profit center for YC. Last time I checked Google is running gmail in order to make money (nothing wrong with that). But if Google is getting paid it seems a little silly for people to give up their time and skills to Google and getting nothing (useful) in return.

</comment></comment><comment><USER25> I wish we would get slavery back. At least they got some food.

<comment><USER26> Yeah it would be awesome, especially if we make the white people slaves, just to mix it up a bit.

<comment><USER12> I know this is heading OT, but there have been plenty of white slaves throughout history, even in the U.S. For that matter, look at how Chinese, Japanese and Irish immigrants were treated.

I also am not sure that having a class of people in this country that can't afford to raise a family on a single income while working 40+ hours a week is so much different than slavery.

In this case, I don't fault google for trying, I just think their approach is probably wrong, and you really don't see enough googlers (paid employees) respond to any of the threads you happen across.

</comment></comment></comment><comment><USER27> Maybe -- but Google is big and profitable that is asking for free labor.

</comment><comment><AUTHOR> Thank you for the comments everyone. Here is the post I wrote before I posted this [https://goo.gl/hA6VgA](https://goo.gl/hA6VgA)

</comment><comment><USER28> This is pretty similar to the Microsoft 'MVP' program. Perhaps people might start listing their Top Contributor status as a badge of honour online?

<comment><USER29> I thought people already put their SO points on CV's

</comment></comment><comment><USER30> How a paid PR worker justifies their job at Google...</comment>


Ahead-Of-time (AOT) Compiler Designed for Ruby - <AUTHOR> https://github.com/pmq20/ruby-compiler <comment><USER2> This is /not/ AOT compilation of ruby code.

It simply compiles a ruby interpreter and adds your code to the executable (as memfs).

The output is an executable that /interprets/ ruby code.

<comment><USER3> Currently it is just packaging, but when combined with work of @ko1 we could achieve real compiling in order to boost start-up speed and also protect intellectual properties.

I talked to @ko1 last year after his presentation about AOT compiling for Ruby at RailsConf, and it seems like we were missing a piece of the puzzle at that time, which is to preserve the file system structure after compiling, in order to accommodate `__FILE__` and `require` calls. I achieved it now with the help of libsquash([https://github.com/pmq20/libsquash](https://github.com/pmq20/libsquash)). So now in runtime every path that begins with `/__enclose_io_memfs__/` got redirected to the memory, and so are your project files.

<comment><USER4> Maybe you know something I don't, but I understand that Koichi's AOT is still just translating the Ruby source code to bytecode which is then interpreted. It isn't AOT to native code.

<comment><USER2> You are correct. AOT compilation for ruby would translate the internal AST into machine code.

While serializing Ruby files in byte code might be a good idea (I don't know enought of the internals of MRI so I can't judge that), it's still not AOT compilation

</comment></comment></comment></comment><comment><USER5> [http://i.imgur.com/MVOSH81.png](http://i.imgur.com/MVOSH81.png)

I can't be the only one

<comment><USER6> [https://duckduckgo.com/?q=%22that+just+works%22](https://duckduckgo.com/?q=%22that+just+works%22)

<Product name>. <What it does>, that just works. Made by <name> in <city> with love.

</comment></comment><comment><AUTHOR> A lot of people have complained about the lack / difficulties of Ruby Programs distribution. I remember the Authors of Vagrant said one of the reason why he switched to Go was that.

And this solves that problem.

</comment><comment><USER7> As suggested by other comments, this is not really AOT, more like a bundler (not _that_ bundler) or packer. It prepacks a Ruby interpreter with your files/libs/deps. Useful and interesting, but not an AOT.

</comment><comment><USER8> While still useful, this appears to be more of a bundler than a compiler, per se.

</comment><comment><USER9> How easy would it be to retrieve the ruby source code from the distributed binary?

<comment><USER2> Fairly easy. It's inside a memfs in data section in the binary.</comment></comment>


How to prepare for the coming market crash - <AUTHOR> https://www.vanityfair.com/news/2020/02/nassim-taleb-protege-on-how-to-prepare-for-coming-market-crash <comment><USER2> As strange as it may sound, I think the crash will come if there's a change in the white house or congress. Most investors fear the unknown. At least with the current administration and congress, we know what we are getting. The market is already nervous so I suspect once we get to October we will start to see a lot of market volatility caused by the feeling of who is likely to be president on any given day.

</comment><comment><USER3> I know how to prepare. I'm saving money, so when all of the stocks drop, I will invest.</comment>


Fatal brain disease potentially affects five people in Massachusetts - <AUTHOR> http://www.cnn.com/2013/09/05/health/creutzfeldt-jakob-brain-disease/index.html <comment><AUTHOR> the key distinction not stated in the article is that CJD (like CWD, or like "Mad Cow" disease in animals) is a _prion_ disease and therefore conventional heat-sterilization procedures do nothing to stop it.</comment>


Ask HN: "Simple" sharding tutorials using MySQL or PostgreSQL? - <AUTHOR> Hiya.
I'd appreciate pointers to tutorials on "simple" sharding using MySQL or PostgreSQL.
What I mean by "simple" is:
- Tables are designed so each one has a field that can be used to identify the correct partition to use (in my case, user_id)
- Data/Queries are organized so that the vast majority of manipulation happens on a single partition
- Rebalancing shards is an offline procedure
I'd love to push the details of disks/servers/processes that handle the queries down into the DB layer and not worry about it at the app (in my case, Rails) layer: give me a single entry point that can shared across all of my app servers.  We can play DNS games if need be to distribute that load.
Bonus points if a tutorial talks about how to set up replication in this context too.
It seems like many people would be interested in this. <comment><USER2> Most of the methods people use for sharding/partitioning end up in the application layer, because open-source DBs just aren't fancy enough yet to handle this.

Mysql-proxy (<http://forge.mysql.com/wiki/MySQL_Proxy>) looks promising, but it's still in an alpha state. You could try writing a proxy script in Lua -- there's already some master /slave stuff done in this area.

Mysql 5.1 supports partitioning, but not really in the way that you and I mean.

The problem is that sharding breaks some fundamental SQL axioms -- for example, doing SELECTs no longer returns all rows (depending on how the table is partitioned).

Almost everyone I know who does this rolls their own layer. As subwindow mentioned, if you're using Rails, you have to futz with establish_connection due to ActiveRecord's assumptions about one DB connection per class. It's possible -- we've done it -- but it requires lots of connections to the DB and it can be messy. If you're on Rails, it might be easier to scale vertically first before going horizontal.

Replication doesn't need to change in this context -- the Mysql documentation should be all you need to get started.

</comment><comment><USER3> When I've planned out sharded infrastructures, the database usually wasn't that big of a concern. The web framework or system architecture are usually the pain point. And with Rails, you have to abuse establish_connection if you're going to have each web head read from multiple shards.

The easiest route I've gone when setting up a sharded infrastructure is to use subdomains and a 1-1 Web:DB setup. Have each subdomain go (either thru a reverse proxy or hardware load balancer) to a different (sharded) webhead. Each web head talks to two databases- the common database and its sharded DB. With this you'll probably want a "common" web head to handle home page traffic and authentication (after they are authenticated they'd get dished off to their shard).

Salesforce.com was my inspiration for this method, and it is probably reasonably common. It probably also has a name, but I do not know what it is.

<comment><AUTHOR> I've seen folks approach things this way -- Dr. Nic's done some of it in an exploratory manner: <http://tinyurl.com/36twmo>

But I don't think it is the best approach. I'd much rather push ALL of the magic down into the database layer and not have the app worry about it at all. I want ONE layer of magic and I'd prefer it to be in the DB, where it seems it "should" be.

<comment><USER4> I'd rather have the layer of magic be in the part of the code I understand best so I can fix it when things go wrong.

<comment><AUTHOR> I'm pretty confident I can learn what I need about DB configs, so I'm more concerned about it being in the "right" place from a complexity and efficiency standpoint.

</comment></comment></comment></comment><comment><USER5> The 2nd edition of High Performance MySQL might interest you: <http://www.amazon.com/dp/0596101716>

It covers, among tons of other stuff, some new features in MySQL 5.1 that make partitioning easier.

</comment><comment><USER6> Sharding is icky and hard because it strokes relational databases against the grain. It also, incidentally, goes against the conventions of most web frameworks, including Rails. Since there's no database that does it for you, you really have to design for it from the beginning. Clay Shirky's scalability book, with anecdotes from Flickr's early development, is a must-read.

The Skype people do transparent sharding with PostgreSQL (the highscalability.com guy blogged about it here: [http://highscalability.com/skype-plans-postgresql- scale-1-bi...](http://highscalability.com/skype-plans-postgresql- scale-1-billion-users)). They accomplish this using their own PL/Proxy plugin (<http://developer.skype.com/SkypeGarage/DbProjects/PlProxy>). The only way they can do this is by _never_ doing SQL in the client. Instead, all SQL is wrapped in server-side functions, aka stored procedures (written in PL/Python). The magic in PL/Proxy is to enable the execution of these functions based on a hash. So for example, a function get_user_email(username) is implemented as:

create function get_user_email(username text) returns text as $$ cluster 'userdb'; run on hashtext(username); $$ language plproxy;

...which results in the real function being executed on some other server.

There are pros and cons to this approach. Could they not have implemented this in the application? Yeah. The additional latency of doing one extra remote call (even if it can be pipelined) can't be good.

Another way of automating sharding is to use a middle layer like PgPool, GridSQL or Continuent uni/cluster. The first two are open-source projects, the latter is commercial; PgPool is written in C, the last two are Java (although GridSQL has C bindings).

PgPool is a proxy that can also do replication, partitioning, load-balancing and parallelization -- and you can pretty much pick which ones you want. PgPool intercepts all SQL statements, inspects them, possibly rewrites them, and sends them to one of several backend PostgreSQL servers. For example, it can route all updates to multiple PostgreSQL servers, ensuring that they're identical (until one of them goes offline, at which point you have to pull it manually back into the pool). It can also partition data, by checking inserts and routing them to the right box, and you can write the partitioning functions in PL/pgSQL. And it can also route queries semi-intelligently, so that a query that is known to only touch a single partition will only go to that partition. And it can parallelize them, so that when you do "select * from foo", it'll run the query on all servers and then combine the results.

GridSQL covers the same ground as PgPool, but seems a little more advanced. It has a complete SQL parser that is supposed to be able to do query routing and rewriting more efficiently. From what I can see, they are emphasizing performance and parallel queries above anything else.

I haven't tried uni/cluster, but it's similar in scope and features.

The main problem with these products is that they themselves become a bottleneck. I don't think you can scale them horizontally by just piling on more proxies -- the proxies themselves are gatekeepers. So you're just trading one bottleneck for another.

After implementing a couple of large, popular, bottom-heavy, hard-to-scale Rails apps, I am now of the opinion that well-designed apps should never talk directly to a database; by doing this, you are making the database layer a bottleneck, which is particularly bad with relational databases, which cannot scale very far horizontally.

Instead, you should have the application serve an internal API that can be broken up and multiplied and moved. For example, consider the get_user_email function from the exampe above. Consider the Rails way:

User.find(params[:id]).email

You are already tied to a very specific code path -- find the object, read the email. To shard this thing, you have to override the find method, as well as any update methods, and you will end up a graceless patch on top of ActiveRecord. What if we made the use case -- getting the email address of a user -- explicit, as a real API?

User.get_email(params[:id])

Similarly, you would "sculpt" dedicated methods to handle more complicated queries. Consider:

User.get_latest_comments(params[:id] :in_forum => params[:forum_id])

Now we have isolated ourselves from the database, and we have an API that can actually be sharded. In fact, what we have is an _abstraction_. Abstractions are useful. Sure, the implementation can use ActiveRecord or whatever, but it's no longer dependent on anything except the input. It's not dependent on database model details like which table holds the email address -- the abstraction separates the _concern_ of the application from the data API.

If we have a single app database and it doesn't scale, we can move all the users over to a different server with its own database and make the API be remote, based on a REST or dRb interface. If this user server becomes too slow, we can just add another user server -- "just add another box" is the core tenet of any scale-out stategy.

So if I was building a new app today, that's what I would do.

<comment><USER7> One minor correction to your very helpful post: the scalability book you are referring to is "Building Scalable Web Sites" by Cal Henderson (not Clay Shirky).

<http://oreilly.com/catalog/9780596102357/>

<comment><USER6> Of course. Thanks.

</comment></comment></comment><comment><USER8> I don't know about Rails (It's DB library is ActiveRecord, if I recall names correctly) but SQLAlchemy which is Python's big ORM, has support in it for sharding and similar partitioning, etc.

When we built sketchcast.com sharding was on the design list and a concern - there were some fantastic articles at <http://highscalability.com/> that we used as a basis for some of our design.

</comment><comment><USER9> Not exactly sure if this can help you but I guess you could implement the logic using dbslayer.

[http://github.com/harrisj/activerecord-dbslayer- adapter/tree...](http://github.com/harrisj/activerecord-dbslayer- adapter/tree/master)

</comment><comment><AUTHOR> It seems like I'm not the only one searching.

Here's something from my own archives:

[http://www.postgresql.org/docs/8.1/interactive/ddl- partition...](http://www.postgresql.org/docs/8.1/interactive/ddl- partitioning.html)

<comment><USER6> PostgreSQL table partitioning has nothing to do with shards. They don't let you split a database across multiple machines. You _can_ use them to split a single table across multiple disks (using tablespaces), but that's not the same thing.

</comment></comment><comment><USER10> google search sharding site:highscalability.com

<http://tinyurl.com/5znhvu>

<comment><AUTHOR> highscalability.com is a great site that provides conceptual level information about sharding.

But it doesn't provide anything approaching a cookbook or tutorial.

</comment></comment><comment><USER11> You probably want this 1986 paper: <http://db.cs.berkeley.edu/papers/hpts85-nothing.pdf>

<comment><AUTHOR> No, I understand how/why I want to do sharding and its implications. I'm looking for something much more tactical and practical.</comment></comment>


7 Good Dropbox Alternatives for Linux - <AUTHOR> http://www.techdrivein.com/2011/06/7-good-dropbox-alternatives-for-linux.html

<comment><USER2> _But as a Linux user, what really are the alternatives to Dropbox for online file storage?_

What?

My guess that there aren't any "alternative" because the problem Dropbox aimed to solve wasn't a problem limited to what flavor of operating system their target demographic chooses to use.

Do you want to sync or share files using an interface that you're already pretty familiar with and (hopefully) are accustomed to (the file browser), Dropbox.

I don't understand the question if it's being applied to one operating system, when it's a function that is inherent to all OSes; the desire to share files- given that Dropbox works Windows, Mac OS and Linux.</comment>


At a Success Academy Charter School, Singling Out Pupils Who Have 'Got to Go' - <AUTHOR> http://www.nytimes.com/2015/10/30/nyregion/at-a-success-academy-charter-school-singling-out-pupils-who-have-got-to-go.html?hp&action=click&pgtype=Homepage&module=second-column-region&region=top-news&WT.nav=top-news&_r=0 <comment><USER2> Not sure exactly what the problem is. If there is a minimum standard of behavior, and the student doesn't adhere to it, why exactly is it a problem if they are suspended, etc? Is the role of the school to educate the student or to parent them?

<comment><USER3> Children are children. The rules that were discussed in the article demonstrate an adversarial environment of dominance and control.

I'd act out, you'ld act out.

<comment><USER4> This is not a hypothetical for me. I went to a private school that sounds like it had approximately the same rules. I received detention at a rate of about one every six grades. I was hardly the only one. I think we had one punch thrown in the whole time I was in school. Children should, and can, work with good structured education.

</comment></comment></comment><comment><USER5> It seems this piece believes this is outrageous, however I'll argue the opposite, that the school should simply be more forthright about its goals.

There are many parents who do not discipline their children to any meaningful degree, and then expect the rest of society to shoulder the costs. I see no reason not to transfer them to a "remedial academy" for improvement, to lessen the burden on serious students.</comment>


Ask HN: How to figure out what gets you 'excited'? - <AUTHOR>

I'm a twenty something working in the tech industry who is facing an internal crisis of sorts because I don't know where to focus my time. I quit a job in finance a few years back because I wanted to work on something that could help others beside myself. I started by tinkering with website projects and have a firm grasp of several web frameworks. I work in data analysis using various tools, like R and Pandas, to build predictive machine learning models.
I don't know where to focus my energy to have the biggest impact. Something inside me tells me I need to be a founder of something, allowing me the most opportunity to take advantage of my creativity and skills, but I would not be opposed to leading a team within a company that is working toward an enviable goal. Much of what I read and hear says that no matter what you work on, those who succeed are those who are most excited about their work. I totally agree and have found that my best work occurs when excited but up to this point I have been excited about better jobs in order to improve my resume and learn new tools.
How should I get a better understanding of what gets me 'excited'. Are there publications I can read that will open my mind to new technologies which might interest me (Tech Review, etc.)? Talks I can watch or go to? Should I just narrow things down and research areas for a few weeks to see if different industries get me excited?
Thanks for your response. <comment><USER2> I don't think you can learn what excites you in an overt process whereby you research a broad range of topics and then pursue whichever one entertains you the most at the end of some period.

You should already be reading things that interest you, and you probably have a few topics that routinely intrigue you, right? Learning about what interests you, and then working on related projects, is an organic process.

As Peter Thiel says, you should think critically about _why_ you're doing the things you do, and be careful not to fall into the trap of prioritizing style (appearance, status, prestige, novelty) over substance.

<comment><AUTHOR> Thanks for the reply and this makes sense but my struggle is primarily in exposing myself to the topics that intrigue me. Understanding why I do things is phenomenal advice, and I think some additional introspection concerning interesting articles and things I do will be helpful.

</comment></comment><comment><USER3> Maybe think back 5-10 years. I bet there's some nugget of childlike excitement, deep calm fun focus, that triggered you again and again. Find that and follow it back up your life. Dig into it and find its roots. Look at some photo albums and old emails and find its fruit.

Also "biggest impact" on what? Why do you feel you need to make a big impact. I think that's a little counter productive and mutually exclusive to-in-about- around-through your personal excitement. I can see a one in a million people who's excitements derive from making a big impact on the world.

</comment><comment><USER4> You might want to look at the lectures given in the Stanford EE Computer Systems Colloquium. They are available in the Stanford Channel on YouTube and through the Colloquium Web Site, [http://ee380.stanford.edu](http://ee380.stanford.edu). While at only 30 lectures/year the Colloquium cannot be comprehensive, it does try to touch on technologies which will be important in the (near) future.

<comment><AUTHOR> This is a really great resource, thank you.

</comment></comment><comment><USER5> > Talks I can watch or go to?

Here's some excellent food-for-thought on the subject.

Larry Smith: Why you will fail to have a great career [http://www.ted.com/talks/larry_smith_why_you_will_fail_to_ha...](http://www.ted.com/talks/larry_smith_why_you_will_fail_to_have_a_great_career?language=en)</comment>


Apple blocks major studio names from use in iMovie '11 - <AUTHOR> http://www.engadget.com/2010/10/22/imovie-blocks-studio-name-use-in-new-trailers/

<comment><USER2> It's conceivable that there was a negotiation between Apple and each of the studios whose "styles" were used in iMovie '11. If I'm Apple, it wouldn't make much sense to release a product containing knock-offs of well protected trademarks without at least talking to the mark owners before the fact. You have to expect that they'd request that their specific studio name not be allowed in the product.</comment>


Ask HN: Are single-letter domain names valuable? - <AUTHOR>

I have never visited a single-letter domain named website, yet they're all gone.  What's up? <comment><USER3> a few (mostly obscure extensions) can be purchased in the aftermarket - <USER2> example L.fo is currently being auctioned [http://www.sedo.com/auction/auction_detail.php?language=e...](http://www.sedo.com/auction/auction_detail.php?language=e&auction_id=85745) \- also see [http://www.namepros.com/domains-for-sale-fixed- price/616074-...](http://www.namepros.com/domains-for-sale-fixed- price/616074-largest-portfolio-single-letter-domain-names.html)

</comment><comment><USER4> wiki = friend

[http://en.wikipedia.org/wiki/Single-letter_second- level_doma...](http://en.wikipedia.org/wiki/Single-letter_second-level_domain)

They're reserved by ICANN

<comment><USER5> ICANN fortunately does not control all of the top-level domains.</comment></comment>


Ask HN: Where to find vintage VGA adapter manuals? - Iridium-FX Studying the evolution of graphics display adapters I stumbled upon the NCR 77C32BLT, of Vesa local bus era, that is defined to have interesting features. All I could find is a vgadoc describing some registers. Just wondering if anyone had a reference on how to get a copy of the original chip data sheet/ manual ? <comment><AUTHOR> I guess you're referring to this:

[https://pdos.csail.mit.edu/6.828/2011/readings/hardware/vgad...](https://pdos.csail.mit.edu/6.828/2011/readings/hardware/vgadoc/NCR.TXT)

Not much else online unfortunately</comment>


SF Is the Third Least Affordable Major City in the World - <AUTHOR> http://www.modernluxury.com/san-francisco/story/sf-the-third-least-affordable-major-city-the-entire-world <comment><USER2> Articles need to link to the actual survey: [http://www.demographia.com/dhi.pdf](http://www.demographia.com/dhi.pdf)

Yes, San Francisco is unaffordable, but 3rd least is an exaggeration:

-This does not include the entire world, just cities in English-speaking (+Japan for some reason) developed countries with metro areas exceeding 1M people.

-By most measures ([http://www.theatlantic.com/business/archive/2013/07/china-ha...](http://www.theatlantic.com/business/archive/2013/07/china-has-the-most-unaffordable-housing-in-the-world/277428/)), Shanghai, Shenzhen, and Beijing have worse housing affordability than the English-speaking #1 of Hong Kong.

-This is using the SF-Oakland MSA ([http://en.wikipedia.org/wiki/San_Francisco%E2%80%93Oakland%E...](http://en.wikipedia.org/wiki/San_Francisco%E2%80%93Oakland%E2%80%93Fremont,_CA_Metropolitan_Statistical_Area)), which is far broader than San Francisco itself.

-Comparing different MSAs is not exactly apples and apples. The New York MSA extends to Pike County, 80 miles from Manhattan. Under this definition, you could start including lower-cost Sacramento and Stockton with San Francisco.

<comment><USER3> I was just going to comment...Beijing is way more unaffordable than Hong Kong when median income is considered! Also, both Vancouver and Hong Kong (and to a much less extent, SF) are being invaded by mainland speculators, so the problems are all quite related.

Rents are much more reasonable though, so the term "affordable" based on property speculation is quite weird (though HK is quite expensive in rent also).

<comment><USER4> > both Vancouver and Hong Kong (and to a much less extent, SF) are being > invaded by mainland speculators

I always thought it was Chinese government officials looking to invest their embezzled funds or bribe money. Paying in cash looks sketchy to me.

<comment><USER3> The banking system isn't that developed and people are used to paying in cash, even if you buy a house here your downpayment is likely to be 50% of the house's value.

There is a lot of gray money flowing into foreign, some of it actually corrupt, but much of it just very gray. Some of it is real money, with no other way to invest RMB domestically (domestic real estate is a basket case, stock market...ha!), many just look abroad for investment opportunities and aren't too creative about it.

</comment></comment></comment></comment><comment><USER5> "The researchers used a metric called a median multiple, which compares the average home price to the median yearly income for an urban region"

Wouldn't it be better to compare medians? (Median home price to median yearly income). It seems to me that you want to be robust to outliers in home price (Danielle Steele's mansion) in the same way that you're already robust to outliers in income (Mark Zuckerberg's paycheck)

<comment><USER6> From the original report ([http://www.demographia.com/dhi.pdf](http://www.demographia.com/dhi.pdf)), it appears that they do actually compare medians as you suggest: "The Demographia International Housing Affordability Survey uses the 'Median Multiple' (median house price divided by gross annual median household income) to assess housing affordability" (p. 7).

</comment></comment><comment><USER7> Booming economy, affordable housing, development restrictions and NIMBYism: pick two.

</comment><comment><USER8> I'm surprised the Pittsburgh scored so well. I have a friend who is buying houses to flip to rentals, and he says that houses stay on the market for less than a week. He suspects it's because of people moving into the area due to the popularity of Marcellus shale fracking. I expect that both of those would push prices up. Every week, I see tons of nice subdivisions being built like there's no tomorrow.

</comment><comment><USER9> What's interesting to note in the survey is that Atlanta is the 5th _most_ affordable city in the world. I wonder why that is?

<comment><USER10> Something to do with Georgia's extremely high poverty rate perhaps?

[http://www.bizjournals.com/atlanta/news/2012/11/08/georgia-p...](http://www.bizjournals.com/atlanta/news/2012/11/08/georgia- poverty-levels-among-worst-in.html)

<comment><USER3> To be fair, it was weighted to median income. So if everyone was poor, that would drive the "affordable" price way down.

</comment></comment></comment><comment><USER11> In other news, the sky is blue. News at six. Why is anyone surprised by this?

</comment><comment><USER12> I think they missed number 4 there? Or i missed it?

<comment><USER13> Sydney, followed by Melbourne: [http://www.cnbc.com/id/101349774](http://www.cnbc.com/id/101349774)

Finally Australia finishes outside the top 3 in something and I can be happy about it!

EDIT: Although that article says San Jose is the 5th even though the source disagrees. Confusing.

<comment><USER2> The actual source ([http://www.demographia.com/dhi.pdf](http://www.demographia.com/dhi.pdf)) gives San Jose 5th. Melbourne takes 6th, with Auckland at 7th.</comment></comment></comment>


Show HN: Learn to use email with Git - <AUTHOR> https://git-send-email.io <comment><USER2> No JS - I was baffled - did not know about `<label for="<target here>">`. Nice.

[https://developer.mozilla.org/en- US/docs/Web/HTML/Element/la...](https://developer.mozilla.org/en- US/docs/Web/HTML/Element/label)

<comment><USER3> It seems to have a cost though, how do I link to a specific page?

Anti-snark edit: what's the URL to a specific step?

<comment><USER4> <a href>

</comment></comment></comment><comment><USER5> I wanted so much to like this. The evolution of SirHat (better name :) is entertaining, and never leaving the cmdline would be great! And I was on board until encountering this type of tedium:

      Find the message ID to reply to.
      Don't stress too much about getting
      this step right, but it's a nice
      Courtesy for the people receiving
      your patch. On the mailing list
      Archives, look up the latest email
      In your thread and expand "Details"
      to find the Message ID. Copy this
      for the next step.

IMHO, needing to lookup email header IDs for each patch revision is an insane and terrible workflow! (At least, compared to gitbucketlabhub.)

<comment><USER6> I've configured my email client (Thunderbird) to display it when viewing an email. I can simply right-click on the message-id value and get a context-menu with a "copy message-id" option.

Other mail clients should have something similar.

</comment></comment><comment><USER7> Can only speak for myself, but I didn't understand enough context to get much out of the site. I'm used git for small, personal collaborations, so I don't know why it sends email or when you would want it to do that. I don't know what a "patch" means here and why you use email with them.

If I'm not your target audience, then that's fine, but it might be helpful to have some background on this.

Otherwise, the site and layout look great to me. It is a little tricky to have step 1 be installation, because someone who just wants to find out more without installing might stop there (I was a little deterred, then I just picked a random OS and clicked through the instructions).

<comment><USER8> The idea is that in order for multiple people to collaborate, most of the time you will need a service like Github, Bitbucket or perhaps something you can run yourself.

This is a different workflow. Instead of staying in sync via a hosted service, people stay in sync and send 'pull requests' via email.

<comment><USER7> Thanks, this response starts to remove some of my confusion. So it's git without the server, communicating pushes over email instead. (I guess you automatically pull whatever is in the emails you get?)

<comment><USER9> You get a patch file as an attachment to the email, which you can then apply to any branch on your local copy that you'd like.

</comment></comment></comment></comment><comment><USER10> One thing a lot of email providers (at least gmail and fastmail) do is let you create application passwords that you can use for specific purposes. So if you're at all queasy about having your password in plain text on the hard drive, you can create a special password just for git.

Edit: you don't have to set up a terminal email client at this point, but if you figure out how to use git-send-email, you're just inches away from using mutt.

<comment><USER11> The Google implementation of application specific passwords is _horrible_. There's nothing application specific about it -- it's valid for at least mail, calendar, and contacts, with no way to limit the scope. It ends up being a password that effectively bypasses all MFA on your Google account. Where do you store such a password? That's a _powerful_ credential to be regularly unlocking.

I should be able to create a credential that's valid for just SMTP, with no IMAP or cal/card access at all.

<comment><USER12> If you want that level of granularity then you pretty much have to write an app but it's absolutely possible.

[https://developers.google.com/gmail/api/auth/scopes](https://developers.google.com/gmail/api/auth/scopes)

<comment><USER11> Even creating an app, the hoops are non-trivial. Due to the scope required (gmail.send), app verification and approval is required.

I've been toying with writing a credential helper to obtain the oauth bearer token, but Authen::SASL::XOAUTH2 still needs to be written so that git-send- mail knows how to use it.

</comment></comment></comment></comment><comment><USER13> Something this reminded me of: in the tutorial it is mentioned to check the project README for possible emails to send patches to, but darcs had a nice config option (pref) [1] to suggest a repository's default TO email address when `darcs send` sending an email patch. It's a small papercut in the `git send-email` workflow, but providing an automated way for a git repo to suggest its patch email list would simplify the workflow and maybe encourage more users to try it.

[1] [http://darcs.net/Using/Configuration#email](http://darcs.net/Using/Configuration#email)

<comment><USER14> This is actually something I plan on adding to git sooner or later.

</comment></comment><comment><USER15> Step one would be improved with a small bit of JavaScript to sniff the platform and expand the most likely section (and ideally even move it to the top). Please don't be allergic to small snippets of JavaScript that optionally enhance things.

Keyboard and screen-reader accessibility of the radio button accordion technique is completely ruined by the use of `display: none` on the radio buttons. That could be remedied by zero-sizing them instead in one of quite a few ways. Note however that this will make Up/Down arrows switch section instead of scroll as a user might expect—that's part of why radio buttons are not a good match for this type of widget (to say nothing of improper exposure to accessibility tech).

Keyboard accessibility is also poor due to weak and missing focus indication.

I would strongly recommend replacing the magic radio button technique with semantically and functionally appropriate <details> elements; then, if you want opening one to close the rest, add a small snippet of JavaScript to that effect. (Then users with JS disabled will be able to open multiple sections, and that's fine.)

The use of various CSS tricks has the side-effect that scroll position doesn't always act in the way you might expect. I recommend augmenting such cases with small JS snippets to enhance the behaviour.

</comment><comment><USER16> Maybe I missed it, but I think it would be great to also explain what happens on the other end of this process. What does someone do when they receive a patch?

<comment><USER17> git apply filename.patch

<comment><USER6> It's a little more involved than that depending on what mail client you use. There is no git-get-email command that would standardize the experience.

</comment></comment></comment><comment><USER18> The mobile version has some issues

[https://m.imgur.com/a/YYnHXeM](https://m.imgur.com/a/YYnHXeM)

</comment><comment><USER19> This is great for small one-off projects, but I don't know why anyone would want to promote the usage of mailing lists in general. The industry moved on to more centralized solutions like github for a reason - mailing lists are clunky, intuitive, and simply horrible for large discussions. Because old and large projects are using them doesn't mean it's a good reason for new projects to use them today.

If anyone has problems with using closed-source platforms like github, there are open-source alternatives like gogs/gitea so you're fully in charge. Abandoning the openness of such platforms in favor of mailing lists would be a big step backwards.

<comment> black-tea Small, one-off projects like Linux, postgres, git?

What makes mailing lists worse for large discussions? Decent mail readers support threaded conversations and decent mailing list participants know how to quote properly. This has been around for decades and I don't think github discussions add anything except more noise maybe.

<comment><USER20> Yeah, I think it's more a cultural problem than technical limitation of email system. Even many technical users nowadays lack email skills.

</comment></comment></comment><comment><USER6> Great tutorial. You may want to add a section about using git-format-patch to allow one to see the emails on disk and using git-send-email with those files. You may also want to add a caveats section about certain email providers.

In my experience, any Microsoft Exchange/O365 server will most likely mangle the email server side (introducing quoted-printable encoding characters or changing the message-id field. Gmail will require that you enable insecure application access in order to use git-send-email. If you don't do that, then using git-send-email will result in a authentication failure error (which you can see if you use the --debug flag).

</comment><comment><USER21> Great guide but there seems to be a typo/mistake regarding how to save the smtp password in step 2/gmail: should use sendemail.smtpPass instead of the non existing sendemail.password.

<comment><USER14> Good catch! Want a chance to try out your email skills and send a fix to ~email@example.com? The git repo is here: [https://git.sr.ht/~sircmpwn/git-send- email.io](https://git.sr.ht/~sircmpwn/git-send-email.io). If you're not interested, I'll push the fix, but figured I'd give you a chance to get credit for it.

</comment></comment><comment><USER21> In the e-mail reply that you get when following the guide you get something to copy paste that looks like this:

        git send-email -v2 ...

I tried to find documentation regarding the -v[0-9]+ parameter but couldn't find it at all. What am I missing in the docs? Seems a lot of guides recommend people to use this feature, however there is not a word regarding it in the git docs. It seems that it takes a positive integer as a parameter and adds it to the [PATCH v1] prefix in the subject.

<comment><USER14> This is a parameter that gets passed to git format-patch. Any parameters git send-email doesn't directly recognize are passed along to format-patch.

<comment><USER21> Aha! Makes sense. The docs are usually great for git, but it wasn't clear to me that the args were passed on to git format-patch, where the -v parameter indeed is properly documented.

</comment></comment></comment><comment><USER3> The page sets a background color, but not text color. With system theme, I get white text on white background.

<comment><USER22> Looks like it'd be enough to add a "color: black;" right after the "background: white;" on line 13. I'm sure the page author would appreciate you emailing them a patch :)

</comment></comment><comment><USER23> I love the little avatar they have for the site. Little touches like thatare really underrated.</comment>


Ask HN: How can I tell if I am a good developer? - <AUTHOR> I am a software developer (paid) for about 6 years now. I basically did everything (Mainframe, Java, Frontend, Python, NodeJS...). This perfect job market made it very easy for me to transition between jobs. I did full time and contract jobs at around 6 companies.
Every company I stayed at wanted to extend the contract or told me I was one of their best developers they worked with.
However, my own perception is different. In every company I was good at creating a team spirit and to analyze problems. Every company had this one (or more) people who just coded and could put a solution into code super fast. I on the other hand sometime feel like in between.... I grasp things fast but my code was never as clean, good or delievered fast enough.
I wouldn't have a problem with it if it wouldn't be for my boredom of NodeJS. I decided to switch stacks and taught myself Go.
Now I got hired at a really big brand and I joined the team last month. And oh boy, these guys are good. I mean they come up with solutions I couldn't even remotely think of.
I highly doubt mu abilities now and actually thinking of quitting (partly it's hard to be a "senior" developer and now see how much further my team mates are).
The question is: How can I tell if I am good enough or doing a good job? My old projects told me I am good (enough), now they hired me and I feel like a failure.
Is there a way you find out where on the scale you operate? If I am too low, is there a way to get better to maybe match them one day? <comment><USER4> If everyone around you is much better than you, and you are aware enough to see it. Stay! This is a fantastic place to learn new things and improve your perspective.

You may find that they're not quite as amazing as they first seemed a few months or year down the line. But if they are, your own progress is likely to be much higher than at another place.

<comment><USER5> This is such good advice.

As the saying goes:

'If you are the smartest person in the room, then you are in the wrong room.'

<comment><USER6> Corollary: Someone in the room is in the wrong room.

<comment><USER7> I think this objection can be countered by completing the quote "if your goal is to learn and grow as quickly as possible."

Maybe the smartest person already did that, and is now more interested in cashing in / mentoring / a quiet life etc.

<comment><USER6> Yes. It was tongue in cheek. Another objection is that smartness isn't an ordering. You could be the best person in the room at something but still learn on other things.

</comment></comment></comment></comment></comment><comment><USER8> >In every company I was good at ... to analyze problems.

>Every company had this one (or more) people who just coded and could put a solution into code super fast. ... I grasp things fast but my code was never as clean, good or delievered fast enough.

That's the point of working in diverse teams. A few teams I have worked on code bases that were clean as a clean room, everything solved by the books but on a high-level flawed, with errors while running in production, hard to maintain, modify and extend.

If you look at typical "startup code" (or "scientific code") you quickly realize that's it's rarely that clean. On the other hand that's where the money is at and also it can be cleaned up afterwards. From my practical experience I can say that super clean code bases are much more static and it takes longer times to change them.

So yeah, if you're good at analyzing stuff that's super useful. Especially if you intend to work at more complex domains. Also I'd suggest to work with Python, I think there a pragmatic approach is more welcomes. (Also interesting, fairly complex stuff is done with Java at some places)

</comment><comment><USER9> You sound like a great developer! And being around people smarter than you and is one the best ways to learn incredibly quick. If you feel like lacking confidence in your skills, one thing that really helped me get over imposter syndrome was to pick up problems or projects that I never thought I could do. Pick up something interesting yet seemingly challenging (I was always fascinated by operating systems and embedded hardware, so decided to make an OS for embedded hardware). Work on it, talk about it with your peers. Once you solve such a problem you get a big confidence boost that you can tackle any problem out there and that on its own can help you with approaching things without fear and solving it. Hope it helps :)

</comment><comment><USER10> The fact that you're asking the question indicates that you are a good developer. The bad ones don't care enough about their work to worry about it.

<comment><USER4> This is a great summary of all the advice given here :)

</comment></comment><comment><USER11> A couple of points:

1) Do not compare you, after a month, with people who have been there years. It will take time, you will get there.

2) So what if you're in-between? That's your unique selling point. Embrace, don't discard it.

There's a place for you in your company, and in the world in general. Just like there's a place for the coder who turns coke into code, and the marketing exec who talks to customers. You are not a failure. Look up imposter syndrome too. You're suffering it.

</comment><comment><USER12> It really depends on what you're measuring. When I think of a good developer I just think of someone who writes clean code and organizes their program in a way that makes sense.

A lot of people think the ability to accomplish a task quickly makes you a good developer. This is true. But those who are strong in business knowledge but weak in programming knowledge use this to create a false dichotomy between quickly delivered code and poorly written code. So if the design of the current program or business knowledge is what's slowing you down don't worry too much about that. On the other hand if everyone on the team is doing better than you maybe there's something they know that you don't. For example maybe you spend more time on meaningless tasks because you don't time box. It might definitely be worth it to check in with some other team members throughout the day and just ask them what they would do if they were you in whatever situation you're in right then. I found this often gives me good ideas if I can humble myself enough to listen to them.

Try and take a step back from the situation and look at it without your ego attached at all with respect to the goals of the business.

</comment><comment><USER13> If you never doubt yourself, it's probable all of the issues around you is the fault of someone else, all conflicts is because of someone else, and if your solution is not accepted it's because people are not smart enough to get it.

Imposter syndrome is self reflection. Sometimes a small mistake is enough for you to question your whole career. That's why everyday feedback within a team is so important. Be sure to tell people when they do great things and boost them in what they do. Brag about your colleagues and enjoy being among people that want to accomplish great things. Be a part of that and contribute by being yourself :)

</comment><comment><USER14> In my experience, its not good to be the smartest or most capable person in the room. I like to surround myself with smart people that I can learn from. I'm good at what I do but there is always room for improvement and learning new things. Being in over your head is a good way to learn a lot, it might be hard but you will have new skills on the other side. My advice, being willing to fail and stick it out - you are at a point of personal gain that you don't want to give up without failing out. Just do you best, get an A for effort.

<comment><USER15> Spot on. If you're the smartest person in the room, you're in the wrong room. Failure is necessary for growth.

<comment><USER16> i like to say: our failures define us, not our successes.

<comment><USER15> I like that. Thanks for sharing.

</comment></comment></comment></comment><comment><USER17> There are many subtle ways to tell if you are excelling at the art of programming. For example, if you have no life, but can prove it mathematically, then you're doing just as well as the rest of us.

</comment><comment><USER18> Look up imposter syndrome. You've got it, I've got it, a lot of good devs have it.

As someone else mentioned, just being aware that you have skills at various points of competency and you want to be better puts you in a subset of developers that many others enjoy working with. I have personally found success with identifying distinct skills by looking at job postings and various taxonomies and then ranking myself on the Dreyfus model of skill acquisition for each, then choosing where I want to improve.

The number one thing I'll always value in a developer is attitude - <USER2> positive energy to the team and being willing to adapt and learn are incredibly understated and undervalued traits.

</comment><comment><USER19> I would take a coworker that is good at helping the team "vibe" and good at analyzing problems then the headphone wearing developer who only talks at standup and is really fast 1000 times out of 1000.

</comment><comment><USER20> Try to release this tension a bit, stay with the team, adapt, work hard and observe. You have now perspective after only one month. Revalidate it after 3 and then after 6 mo. And don't forget to not stop improving and adjusting.

Your story reminds me a bit of mine. I joined at some point a very skilled, but small team of engineers working on a product from machine vision area. Those chaps were brilliant engineers, many with significant achievements in academic / coding championships. They were truly passionate on what they were doing and were really good at it. And I felt that I was 'just another regular dev' who cannot even compare with most of them, but who also liked coding and the problems domain.

After first month working there I was quite stressed, as was I constantly seeing the gap in my skillset, but I tried hard to manage. After 3 months, I was slowly 'getting there', working on the full stack, but still had the impression of vastly underperforming vs the rest of the team. After 6 months I finally got into the rhythm and started being given more senior and responsible tasks. It took me a while, but it was really worth it.

Although today I am working in another place (and country), but, really, working with that skilled team was one of the most productive and self- improving times in my career (and I still kind of miss these times and the team).

</comment><comment><USER21> There are really only two ways of knowing if you're doing a good job: 1\. Your feedback from your peers and/or managers. 2\. Your own feedback for yourself.

For #1, It seems you're getting great comments from the places you've been providing your services, so good job there! You can keep riding on that for as long as you're getting them.

For #2, all you need is to remind yourself of questioning if you're doing a good job. Once you seek answers to that question (e.g. I can now play Bohemian Rhapsody on the piano; I improved the memory/performance of that application with great fit & finish, etc.), it will help you define your next set of milestones (e.g. I should try to nail one of Beethoven's now; I should try to design this other feature this other way to ace even more on the memory/performance etc.) You'll soon find yourself questioning again and the very act of seeking a solid next set of milestones to achieve is a sure path to improvement.

Like someone else has commented on this thread, don't beat yourself for being a strict self-assessor and rating yourself lower among your peers, instead a bout of You (a month ago) Vs. You (today) would be a much more reliable indicator of your improvements, and one that's very much within your own control.

The very question you're asking is a proof that you are doing that exercise fairly efficiently! :)

</comment><comment><USER22> > I highly doubt mu abilities now and actually thinking of quitting

Absolutely do not quit. You'd be amazed at how fast you become "better" when surrounded by phenomenal teammates. Finding a team where you are in awe of people around you is rare (even at FAANGs). Please do not squander it by quitting. Just keep doing code reviews, design discussion & you'll quickly level up (6 months to a year tops). Good luck!

</comment><comment><USER23> When you are somewhere where you are learning tons and yet you aren't being fired and your needs are being met -- you are in the right place.

</comment><comment><USER24> In a sufficiently large labor market, if you are getting paid then you are by definition "good enough" to be a software engineer.

</comment><comment><USER25> I very much like your style - creating a good team spirit and analyzing problems are underappreciated skills in our field of business. These roles should by no means be exclusive to team leaders and analysts because they can make all the difference in difficult projects.

Because you switched stacks, you can truly not yet be compared with the veterans who already have vast experience with your new stack. You have to rely on your other skills to provide value to your team. It is more important for senior developers to understand the domain they are working in, but eventually you will also be expected to catch up in terms of technical knowledge.

By all means, don't quit - you are likely doing better than you think. As long as you continue to do your best and work on improving yourself, it is your employer's job to judge you.

</comment><comment><USER26> Fast doesn't imply good. How many regressions are the fast guys introducing? How fragile is their code? How much are they expanding technical debt? How well can you see any of that?

Someone else said it sounds like a great learning atmosphere, and they're correct. Let your new crew be your mentors. Take the best you see in them and make it yours. Still having something to learn at 6 years isn't a bad thing. I'll tell you what, anyone in the 4-10 year range who thinks they are super expert is only deceiving themselves. Maybe if they focus in only one domain like front end.

</comment><comment><USER27> >Now I got hired at a really big brand and I joined the team last month. And oh boy, these guys are good. I mean they come up with solutions I couldn't even remotely think of.

This seems to be your sticking point. The reason they can "come up" with solutions is, in most cases, experience. They've seen those solutions before. If not those exact solutions, the pieces of the solution, and are able to put them all together.

Make sure you take the time to really understand their solutions so you too can have them in your toolbox.

</comment><comment><USER28> Drowning to the top is a great way to learn, always work with people who are smarter than you. If you want to know how good you are, do volunteer teaching at an off hours coding program.

<comment><USER14> > do volunteer teaching at an off hours coding program

This is really great advice!

</comment></comment><comment><USER29> There will be always better ones, in different distances, same office, company, groups you hangout with or www. Why dont you think its an opportunity close to you? Now you know all those solutions so why not benefit and look forward new challenges? If you are not interested or excited with the problems you are solving now maybe you just need a break unless they are acting you rude its a different story. Sorry for my beautiful English:)

</comment><comment><USER30> Are you empathetic? Do you invest in others? Do you address personal bias so you can be find common ground with those you disagree with? Quite often hn is a popularity contest on who's using the most obscure technology to re-solve a problem that's already well defined. Mastering these soft skills will not only make you a better human but a great developer.

</comment><comment><USER31> Stop asking yourself this question.

I realize that's not something you can just instantly decide to do, but I speak from personal experience -- there's no answer to "am I good" that will leave you in a healthy place. Put as much energy as possible into erasing the question from your mind. You do not need an answer.

Think of it this way: If you were the best programmer in the world, it would still be advantageous for you to learn new things, and to learn from other people. It still wouldn't be safe for you to dismiss other people's ideas out of hand. You would still want to work on improving your own skills. There's no such thing as a perfect programmer, so you can always go on improving.

If you were the worst programmer in the world, and you wanted to get better, the way you would do that is by learning new things, and by learning from other people. You would try not to dismiss other people's ideas out of hand. You would work hard on improving your skills.

So from a personal development perspective, your relative skill to the people around you doesn't matter, since you should be doing the same stuff regardless. Your lifelong "job" as a programmer is not to reach some kind of universal plateau of excellence, it is to be as good as you can be. Don't focus on where you are. Just focus on getting better.

Outside of personal development, there are areas where evaluating your personal skillset is valuable. However, very rarely, if ever, is that evaluation necessary to do in absolute, generalized terms like "good" or "bad". Very rarely is it valuable to ask, "how good am I overall?"

Valuable questions are:

"What do I still need to learn to accomplish the immediate task I want to take on?"

"Is there someone else working on the same task that is more suited than I am right now?"

"What is my current weakest skill, and how can I focus on improving that, specifically?"

These are all very focused questions. They're not asking whether or not you're "good", they're asking if you currently have the practical ability to handle one specific thing. If someone else next to you is better suited for a task, that doesn't mean they're a good developer and you're a bad one, it means they're better suited for that specific task. If you decide you are best suited to take on a specific task, it doesn't mean you're better overall than anyone else, just that you have a unique affinity for that particular task.

In any case, most tasks are not accomplished by the people who are best suited for them, they're accomplished by the people who take the time to sit down and _do them_. So usually, it's only necessary to ask, "does this need to be done?" and "can I do it?"

In terms of your workplace, the question you should be asking is not, "am I good enough?" It's, "do these people want me?" (if they hired you and they're not getting annoyed at you, the answer is _probably_ yes, but maybe there are other dynamics at play). The question could also be, "is the pace at which I'm expected to learn too high, or is the work stressful enough that I would prefer to be somewhere else?" That's also a valid approach. Do you want to be at your job?

But neither of those two questions have anything to do with figuring out whether you fit into some nebulous category of "good".

This is tough to do, but from experience the best work I produce happens when I am not thinking about my status -- when I am not thinking about whether I am a good programmer, or a good person, or a talented artist, or anything like that -- and instead just focusing on being the best I can be, and improving the best I can each day. When you must evaluate your own skills, you want to be focused. You want to ask, "what are my practical, objective, evaluable goals, and how do I accomplish them? Where do I want to be, and how do I get there?"

The rest is all bullcrap. It's bullcrap that is hard to get of rid of, and it sticks in your brain and sometimes keeps you up at night. I totally get that. But that doesn't make it any less bullcrap nonsense. Try very hard not to ask yourself bullcrap nonsense questions.

</comment><comment><USER32> Quitting is an option if you are in over your head. You may be senior but not for that stack yet. They might have factored that in.

What most people do with your skillset is stick around and try to learn and struggle until they make it, give it all up or move into management.

</comment><comment><USER33> Sacking yourself seems like an approach :-)

</comment><comment><USER34> If you serve your purpose.

</comment><comment><USER35> learn from others

</comment><comment><USER36> Don't compare yourself to a team of developers who have been there a while. They're already very familiar with the patterns, idioms, operating practices. Systems as well - so they can come with interesting iterations quickly.

Over time, if you're paying attention, I'll bet you do as well, and you probably won't notice it when you're there because it's gradual.

'5 years in software' is really when you start to get off Of your own hill and start to see all other mountains in the landscape, so it can be bewildering. But it's fun.

FYI I've you've been told several times by other firms they like you - <USER3> you've been hired by a reputable firm ... then almost assuredly you're decent. The filters are probably not wrong.

Also - don't quit. Every time you get a promotion, it's natural to feel like a fish out of water - it's normal to feel like you 'don't know what you're doing' because how could you (?!?) you've never done it before! Just try to do your best, and I'll bet in a few months you feel more comfortable.

</comment><comment><USER37> I am not a developer, but a founder and product designer, so take my opinion with a grain of salt please.

From my perspective, what separates great developers from good ones is the ability to accurately predict how long something will take to build. This helps so so much with product development, sales etc.

You also need to be able to build things quickly and correctly, but as long as you can say how long it will take, you're doing your team a HUGE favor.

<comment><USER38> Unfortunately, this is only one signal among many, and it's not a reliable one. It's like saying a good gambler is one who is lucky at the slots. Sure, but...

You'd be better off injecting a large amount of uncertainty into your estimates, and planning around that. If that kiboshes a project, it kiboshes it. Better to fire your devs because you have nothing (feasible) to work on, than to fire them three months later because the project was late, because you have to pay them in the second scenario.

<comment><USER37> Creating a large window to account for some uncertainty is fine. My main point is in working with some less experienced engineers they'll say "This will only take 2 days" and it takes two weeks. This kills teams.

I think less experienced people do this because they are excited / eager to please, but it only hurts in the long run.</comment></comment></comment>


Learn ClojureScript: Functional Programming Concepts - <AUTHOR> https://www.learn-clojurescript.com/section-4/lesson-21-functional-programming-concepts/ <comment><USER2> One of the best things about ClojureScript is figwheel and realtime programming.

You can see it in action here

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

<comment><USER3> You can live code js out of the box. Still cool though.</comment></comment>