The Elves Leave Middle Earth – Sodas Are No Longer Free - <AUTHOR> http://steveblank.com/2009/12/21/the-elves-leave-middle-earth-%E2%80%93-soda%E2%80%99s-are-no-longer-free/ <comment><USER2> I never expected employers to provide snacks and beverages but it is demoralizing when executives take away such perks but continue to fly first- class for the same cost as buying a month of snacks for everyone.

<comment><USER3> So for you there is a different breaking point.

Like when you have to clock in and out at lunch time, but work unpaid overtime and weekends.

Or when you lose admin rights on your own PC

Or you have to start wearing a tie.

For me it was when we had to start signing in and out with a time. Supposedly this was for fire safety, but never seemed to apply to VPs.

We worked on banking systems and often had to work all nighters while the bank was offline. The time tracking system couldn't cope with the concept of being on shift for >24hours - the HR people treated us like it was our fault. Their solution was that we all went out at 23:59 and signed back in at 00:01 and that would solve the problem WE had created.

<comment><USER4> For me it was :

Generally working unpaid overtime for a long time and then during a quiet patch coming in early and leaving early (5-10 minutes early). I got personally told off by the team lead.

Having a virus checker on my machine that I could not remove on pain of huge financial penalties. It scanned every input, intermediate and output of my compiler and turned the computer into a sloth. Didn't help that the final output was 230mb in size (and had a translation step into another 230mb executable). I tried in vain to get exceptions added but to no avail.

These little things slowly chip away at you and you later realise that you left for the wrong reasons - but it is too late.

<comment><USER5> Those sound like great reasons to me, as long as you have another job waiting. What was the rest of the story?

<comment><USER4> It forced me to confront my unquestioning love for creating computer games and made me realise that making games can be fun, but can also be as much as a drag and grind as programming anything else. There is always plenty of meat for the grinder (read shiny-eyed students) coming into the industry to justify low wages and many of my co-workers were burnt out.

So I listened to my wife and moved backed home to New Zealand. I worked in a variety of other positions and decided that I'm not going to be satisfied in any particular 9-5 job for long. The next chapter is being written right now as I continue in my current 9-5 while spending all my free time working on Gridspy (<http://gridspy.co.nz>) which is the startup that will eventually set me free.

When I say free, I mean it will still be a lot of work, but I will be in control of my destiny. I'll decide what features to work on when, which technology to use and if we will have free lunches and soda. Hopefully I'll manage to democratise the process enough that everyone can enjoy themselves just as much as we grow.

<comment><USER6> I'm getting a malware warning with Chrome.

 _The website at www.gridspy.co.nz contains elements from the site uimserv- net.dell.com.examiner-com.simpleworldhouse.ru, which appears to host malwar_

<comment><USER7> So, his previous employer was well justified in forcing him to have an anti- virus program installed on his machine!

<comment><USER4> Thanks for the warning guys.

There is a first time for everything I guess - somehow my FTP account was compromised and a script added to the end of the page that injected code into the page.

The script has been removed and the FTP account blocked. The logs indicate that the work was done by a botnet, quite interesting. One IP logs in and gets a file, another (different IP) logs in and replaces that file.

The static content that was compromised is stored on a separate server with separate passwords from the machine that hosts my actual application and associated data.

What really concerns me is how that password got into the open (the logs do not indicate brute forcing). Virus checking here we come!

<comment><USER8> Perhaps some machine on the wire between the two servers is a member of the botnet? You might want to switch to SCP, HTTPS upload, ipsec tunnel, or something else that'll at least be a speedbump to attackers.

<comment><USER4> Further info for those interested: My developer machine was infected with the Kryptik trojan. Using WireShark I could see that I had become the proud member of a botnet, it probably found a saved password for FTP on my machine and compromised my server that way. Makes me feel all dirty inside watching my computer send viagra emails and receive "sorry, you are blacklisted" responses.

All the passwords have been changed and the relevant computer quarantined. I'm still working on removing the virus, seems to be using drivers to mask its presence from the virus checkers I am using. I've got some ideas based on using a scanner on a live-cd.

What is really fun is that the virus definition for the trojan was added to NOD32 after I was infected, so I don't know how much help a virus checker would have been, if it was installed.

That will learn me for leaving saved passwords on an otherwise secure machine.

<comment><USER6> Thanks for coming back with that.

<comment><USER4> I used an external hard disk drive caddy to mount the infected HDD on another machine. I then used Malware bytes to scan the HDD. It found Trojan.Agent on the hdd (in a dll inside windows/system), which it hadn't found when malwarebytes was run directly on the infected system.

The infected computer has ceased sending suspicious packets. I don't know how I am going to trust this machine again.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> Absolutely. Another symptom is machine naming. When people _who will never themselves log into them_ tell you to dump whatever whimsical themes you had and call your boxes according to an official convention, you gotta wonder what value they're adding to the organization.

<comment><USER10> Hmmm. It's a lot easier to automatically manage boxes named "server001" than a list of random names that constantly has to be maintained.

Your own personal laptop is a different matter.

Moreover, if you want personality, just set up your ~/.ssh/config to retain the legacy name for yourself, e.g. "ssh middleearthname" to connect to server001.foo.com

<comment><USER9> The names aren't random, tho'. The people using the machines every day know that (for example) all the database servers are named after planets, all the web servers are elements of the periodic table, all the development boxes are Muppets characters, etc. It costs nothing and makes your engineers happy. Plus it is intuitive, mistakes of the kind of being logged into the wrong box never happen.

I personally have very nearly experienced a disaster because the official naming convention had only one character difference between production and UAT...

Anyway, you've missed my point a bit. It doesn't matter much in the grand scheme of things what the boxes are called. It DOES matter than your company is employing people to impose pointless, trivial changes and policies on people with real work to do.

<comment><USER11> > The people using the machines every day know that (for example) all the > database servers are named after planets, all the web servers are elements > of the periodic table

So, what type of machine is "mercury"?

I've never seen a theme-based naming scheme that didn't eventually run into ambiguities like this.

<comment><USER12> The way it should be is hybrid. For machine management purposes, each machine should be named for the datacenter and rack it's in. For example, dcaa11 is the eleventh machine in rack aa in datacenter dc. But there's also the issue of how to know which machine is running what. For that, we need to remember there can be more than one name for the same thing. The mysql machine should register itself with DNS when it starts up as 0.mysql.datacenter_name.prod.yourdomain.com. The second one should be 1.mysql, etc. Now you have a system where memnonic names and manageable names can coexist.

<comment><USER13> I don't know why this has been downmodded.

It's not hard to have DNS CNAME and TXT records for machines, so that you can have both a naming theme for certain classes of servers, as well as descriptive names that indicate function, location, etc.

The way I handle the problem is pretty simple. Functionality gets a subnet 'name' under the root, and there are TXT records and aliases within that to handle description. So, if you have a datacenter in Sacramento, your DB and web machines would be named and alised:

johnny.sac.mycorp.com => db1.sac.mycorp.com TXT Rack 1, Slot 1-4

devi.sac.mycorp.com => db2.sac.mycorp.com TXT Rack 1, Slot 5-8

spooky.sac.mycorp.com => db3.sac.mycorp.com TXT Rack 1, Slot 9-12

tenna.sac.mycorp.com => db4.sac.mycorp.com TXT Rack 1, Slot 13-16

zim.sac.mycorp.com => web1.sac.mycorp.com TXT Rack 2, Slot 1

gir.sac.mycorp.com => web2.sac.mycorp.com TXT Rack 2, Slot 2

For ambiguous names (like 'mercury' existing in both { planets } and { elements }), only one copy of that name can exist on the network. The people who work with that machine will know it's theirs, and for everybody else, there's CNAME and TXT records for when they're not sure.

</comment></comment></comment></comment></comment></comment><comment><USER14> >Some had already been irritated when "professional" managers had been hired over their teams with reportedly more stock than the early engineers had.

I'd say this was the main reason. The original employees had already proven they could manage and grow the organization from 0->even, and hadn't slowed down expecting to move the company from even->profit.

Now they have "supervisors" who don't know anything about the business or technology, shoved in on top of them, who's only role is to act as liaison between them and the corporate officers.

Bristling at the lack of corporate loyalty shown to the people that made the company happen, those people leave. The calculus is really very simple.

I've seen this pattern happen a number of times, and the usual result is that these new managers show up, make poor decisions (because they don't understand the business) cycle out (taking their stock with them), repeat 4-5 times until a manager shows up who is so inoffensive that the remaining engineers simply end up running the show in the end anyways and the manager just shows up to weekly meetings so she/he can liaise with corporate.

In the meantime, the company stock has diluted as it fled out the door to the past managers, the company lost most of its senior engineering staff, forcing them to promote lower level, less capable staff to senior positions or to hire externally (again people who don't understand the business further exacerbating the vicious cycle).

<comment><USER15> Agreed. It is my understanding that the best companies are led by their original founders (cf. Apple, Google, Oracle) or by people nurtured for years to become their leaders (Microsoft, IBM).

<comment><USER16> I would put Microsoft in the former group. It was one of the best companies when led by its original founder. Now, not so much.

<comment><USER17> It was one of the best companies when led by its original founders.

Fixed it for you.:-)

That Paul Allen didn't liked to show up on newspapers doesn't mean he did nothing.

<comment><USER18> <http://en.wikipedia.org/wiki/Paul_Allen> says he didn't return to the company after being diagnosed with Hodgkin's in 1983. Surely you and gp didn't mean that MS stopped being one of the best companies in 1983?

<comment><USER17> I mean it is not only one man who makes the company, specially after 1983.

</comment></comment></comment></comment></comment></comment><comment><USER19> I think the main issue at heart is the desire that every human being has in controlling their environment.

I say this because I just read in a book (A Drunkards Walk) how seniors in a home who could arrange their rooms the way they liked and could choose a plant to take care of were measurably happier and lived longer.

Restricting machine names, removing snacks, clocking in and out these all contribute to a negative environment.

Which employee (all other things being equal) is more likely to burn out: a) Diligent and responsible employee is essentially free to do what they need to do to get their job done. b) Diligent and responsible employee who gets shuffled into a 'highschool' scenario: hall-passes, attendance reports, dress code.

Obviously some places feel they require these restrictions. Maybe in a large corporation you'll end up hiring employees who you can't trust to show up on time, etc. But isn't that also HR's fault?

</comment><comment><USER20> If the accoutants looked at free sodas and snacks as leveraged salary/retention bonuses, they wouldn't suggest eliminating them.

<comment><USER21> My employment contract lists free sodas as one of the benefits, right next to health and dental. Probably one of the main reasons we still have them.

<comment><USER22> That's pretty amusing. You get health and dental benefits, along with one of the leading causes of health and dental problems... I know soda is considered holy water among many HNers, but for those of us who are highly health- conscious, that sounds a bit like the Detroit assembly lines with the cigarette vending machines.

<comment><USER21> Yeah, the irony was not lost on me. I actually requested some sparkling water be added to the mix, but apparently that costs more from the distributor.

<comment><USER23> The company I work for provides coffees, sodas, and spring water. Most of the time I'm happy with just water. But I asked for some healthier alternatives and they started offering fruit juices =)

</comment></comment></comment></comment></comment><comment><USER24> Outstanding. Using "jumped the shark" just never felt right for this situation. "The elves have left middle earth". A spot on perfect description of this sad and awkward phase all startups encounter as they grow to successful bigcorps. I love it.

<comment><USER25> A minor flaw in the metaphor: Middle Earth doesn't have to compete with whatever the elves create in Valinor. Talented employees leaving is both a loss for the company and a gain for competitors.

<comment><USER26> That assumes that they move to competitors.

<comment><USER27> If I knew my chief competitor just made a bunch of major bungles, and that their morale is at an all-time low... I'd get my recruiters in there _fast_.

<comment><USER26> How would you know about the morale within the company? HR dept. spies?

<comment><USER28> Every company has you sign agreements about not recruiting from your old co- workers. But nothing in those agreements says that you can't pass along resumes that people push on you.

When morale is bad, people who are left tend to offer you resumes when you quit. In that situation I've been glad to forward resumes of people who are good, and have avoided forwarding resumes of people who aren't. (After all you get judged by the quality of people that you recommend.) To the extent that I'm someone people want to work with again, this results in cherry picking the best people.

The effect is even more direct when employees go through recruiters. Recruiters ask about the work environment where you are, and have no problem trying to track people down if they get the sense that good people may be available.

</comment></comment></comment></comment></comment></comment><comment><USER29> On the very first day of my internship at a very big corporation, they removed the free sodas. Even though this was only part of a large collection of cost- cutting measures, it sent the most clear "F*&# you". (There was a number of other fun things that they did, such as allowing certain groups to use their Engineering interns as QA people without ever alerting them that this would be the case)

Needless to say, Carnegie Mellon students are heavily discouraged from working there by those of us who screwed up, and I definitely think that the huge dump they took on their recruiting pipeline has affected them negatively in the quality of people they'll be able to hire.

<comment><USER30> Do you mind saying which company this was?

<comment><USER29> Cisco

</comment></comment></comment><comment><USER31> I've been in an office where the free fruit was removed. Towards the end of the afternoon I normally get quite hungry. With a bowl of fruit I would silence my stomach rumblings for an extra half hour and get some more work done. Without - screw it - time's up and I'd rather go home to cook.

<comment><USER32> A company I worked for in the south-bay area decided to order fruit from a "farm fresh office fruit delivery" service. I don't know how much the delivery company charged.

It worked well for the first several months. The delivery company brought a wide assortment of fruit, many "standards" and also some more exotic varieties like papaya, kiwi, etc. Over the months though the apples took a larger and larger portion of the delivery. And the exotic varieties disappeared.

People got sick of eating all those apples. We canceled the service.

The company also made pretense of being "green" but used extreme and wasteful packaging.

<comment><USER33> > Over the months though the apples took a larger and larger portion of the > delivery

I have to ask, was this over the winter months when many fruits are out of season?

</comment></comment></comment><comment><USER34> A certain VP I know once remarked that at one of his previous startup employers, he advised the upper management against providing employees with free coffee _in the first place_ , because savvy employees know that _losing the free coffee_ is a leading indicator for layoffs.

He said this at the engineering staff meeting following our day of carnage at which a third of the company was laid off. We also lost the free soda.

<comment><USER35> At the last company that I worked for, they didn't remove the free coffee but they took away the free napkins, sugar, creamer, coffee cups, etc. I was laid off two months later.

The coffee also got better right before the layoffs. In an effort to save money, they looked for a cheaper coffee source than the crappy business supply company they had been using. They managed to stumble upon a deal at a local coffee roaster to get cheaper coffee.

It was pretty good when made correctly. One of the worst things than can happen at a company is for someone who doesn't like "strong coffee" to be the first one into the office in the morning. Not putting enough coffee grounds in the filter basket makes coffee taste bitter and horrible. If you want weak coffee, add water to a strong cup. Someone eventually had to put up signs giving this same advice.

</comment></comment><comment><USER36> If you look at the energy costs of a vending machine it's actually cheaper in some cases to have an efficient fridge with soda for free. (at least back in the day) The vending machine company often doesn't pay for power, so they have no incentive to cool the soda efficiently.

A nice 'interim' way of making a change would be to have a $.25 'donation' for each soda which eventually goes to some animal shelter, which would then be a tax writeoff.

CFO's will suck the lifeblook out of a company if nobody stops them. That is their job. Shame on the others for letting the CFO mess with their culture.

<comment><USER37> The big cost here is likely to be labor. When you give away free sodas you have to pay someone to keep sodas in stock. When you sell sodas you can even sell a contract to a 3rd party to restock the machines. This is why free sodas are fairly rare, because soda machines are a money maker for the company and involve fewer employees on the balance sheet, whereas free sodas rack up all of the costs of an employee (salary, taxes, benefits, etc.)

On the whole it's probably a silly tradeoff, since the benefits to employee retention of free sodas almost certainly far outweigh the comparatively minor costs, but if you just look at the balance sheet it can be awfully tempting to get rid of.

<comment><USER9> At my present company the free sodas (and beers, on Friday) are simply delivered in pallets and teams take a week at a time to be responsible for the fridges. Peer pressure is enough to make this work. There was the time Luke's team didn't restock the beer fridge and to this day he's known as Luke Warm...

</comment></comment></comment><comment><USER38> I work for a non-profit where, to cut costs, they initially took out all the water coolers. When people complained, they gave us one water cooler per building.

I'd really like to be able to say that this would make people start leaving, but no one here is really going to do that. I'll bet senior management knew (and was relying on) that.

Lesson learned: In startups, people are more likely to leave on principles. In big companies (even non-profits), almost no one leaves unless they're fired.

<comment><USER39> I worked at a very large company, which post-merger started rolling out various changes which negatively impacted our development group. $0.25 sodas, redbull, and snacks went to normal prices, release night dinners were cut, flex time became less flexible, etc...

While no one quit due to any one of those changes, it did change the place from somewhere fun to work to somewhere that wasn't fun. As a result about three months later a large number of the architecture group and other key people quit within a 1-2 week span. So while no one may quit the day the water coolers are removed, that type of change will lead to higher turn over later on, especially among the top folks, who can find a new job pretty easily.

<comment><USER40> _While no one quit due to any one of those changes...about three months later a large number of the architecture group and other key people quit within a 1-2 week span_

Sounds to me like they put out resumes shortly after the cost-cutting, it just took a few months to get a better job.

</comment></comment></comment><comment><USER41> Interestingly enough, the same theory applies to recruiting and internships.

I was part of IBM's premier internship program (Extreme Blue) last summer, and of the 3 best developers in the lab, none of them wanted to work for IBM.

One of them actually cited "no free coffee and soda" as his reasoning.

Goes to show that this applies to recruiting as much as employee retention.

<comment><USER42> They took away our free popcorn at Silicon Valley Lab. It was demoralizing.

</comment></comment><comment><USER43> Maybe I'm just weird, but this wouldn't bother me. My employer does offer free sodas and snacks, but I don't take advantage of them (I don't drink soda, and tend not to snack on junk food). I do drink the free coffee, but in the past, I've survived this by bringing a thermos from home. I can understand why some people might not like the free stuff to be taken away, but I'd prefer to work for an employer that compensated fairly for my work, and one that does not expect that I work more than 40-45 hours on a regular basis.

<comment><USER44> It's not about your compensation at all. The impact of free snacks is so tiny for the employers cost structure that the decision to offer them or not is completely unrelated to their ability (or willingness) to pay a fair salary.

Would you really prefer an extra $200 or so per year over free soda? I think you wouldn't even notice the difference in your bank balance.

<comment><USER45> The company has to succeed, my stock has to go up in value, and as the company grows in size it can get much better deals on things like health insurance than I can alone. $200/yr spent on soda doesn't benefit me in any way at all. I'll drink tapwater at work if I'm thirsty. Is startup culture really so averse to frugality and so blind to its benefits?

<comment><USER46> If a company is in such trouble that $200 per year and employee will make any sort of real difference, then they have much bigger problems. Not wasting money is one thing, pointless frugality for the point of frugality is something very different.

And really I think you're missing the point by focusing on the soda. If you want the company to grow then you have to keep the employees content and productive. A company full of disgruntled workers looking for a new job will not help your stock go up in value. If the price of that is $200 in soda for some people then that is money well invested, and a direct benefit to you.

<comment><USER45> You'll get no argument from me that a good investment is money well spent, whether it's free soda or a company fleet of Lamborghinis.

But what problem is the CFO in the article trying to solve? The author claims the startup is "fairly successful" but it's already a few years old, just breaking even, and still heavily dependent on financing. His true measure of success seems to hinge on the fact that the company continues to exist in a bad economy. Meanwhile, the CFO needs to address "Sarbanes Oxley compliance, a new accounting system, beef up IT and security, Section 409A (valuation) compliance, etc." This sounds like an important phase in the company's growth, and she's trying to find ways to pay for it. In the context of the article, this isn't an arbitrary decision that disregards morale, productivity or even QA. It's a growing pain essential to establishing the company's success. IOW, they do have much bigger problems.

There's no question that preventing disgruntlement during these stages is an HR challenge that needs to be handled delicately. But I think the need can be communicated effectively without losing valuable employees. The fact that it wasn't is the real failure in the article.

<comment><USER4> Despite upvoting you for your clear argument - I disagree. The top engineers are the lifeblood of the company, and to make trivial cost cutting measures ($10k really is nothing) that risk their retention is incredibly stupid.

Decrees from the top that disregard the input of and value of the employees are the issue here, not how those decrees are handed down. I can't think of any way that HR could say "no more free soda" without it sounding like the stupid cost-cutting measure that it is.

</comment></comment></comment></comment></comment></comment><comment><USER47> I think part of what would irritate me here is not just that they've taken away free soda, but they're now actively charging me for it. I wonder if it would've come across better if there just wasn't any soda offered in the office anymore.

Maybe it's totally illogical, but I'd be more irritated with the idea that the company not only took away this perk, but is now trying to make a profit off of it.

<comment><USER48> No, that (removing soda as an option) wouldn't go over well at all. Forget the idea of being offended, the practical matter is that soda is no longer an option... or at least a convenient option. You may as well take away the coffee as see how that goes over.

</comment></comment><comment><USER49> I've worked at two startups while they slowly took away the free stuff. It sucks, but it's a phase that successful (okay, and not-so-successful, in their death throes) companies eventually need to go through.

Also, thank you for removing the apostrophe, icey. _gnashes teeth at stray apostrophes_

<comment><USER44> Why do they _need_ to go through it? free soda will always be a tiny expense in relation to everything else.

Sure 10K sounds like a lot of cash for soda, but a company with 50 employees is spending millions on salaries.

<comment><USER50> _10K sounds like a lot of cash for soda_

This, by the way, is the very _definition_ of bikeshedding. Everyone knows about soda; everyone has bought it before. So cutting out soda is something that the entire executive team feels competent to discuss -- unlike, say, the efficiency of the QA department's staffing schedule, or climate control zones, or the use of electricity for lighting offices at 3am, or the difficult politics of downsizing particular business units. Soda is a simple theatrical stunt for making the CFO look good. It's a good show.

Of course, as Steve points out, it sends a very clear message to the people who've been drinking those sodas: Your work is no longer considered an investment in the future. Now you're a cost center.

<comment><USER24> Unfortunately, shows are just that. Pure signaling. If you cut $10k for snacks but the executive keeps his $30k company car lease, what have you just told the engineers who made the company possible in the first place? To them its about respect. Its worth more than money to most of these types, and when it dries up, they're gone.

Most _"I will work harder"_ types at startups just kind of know when the pigs are trading them to the glue factory for a case of whiskey.

</comment></comment></comment></comment><comment><USER51> For about the same price as the quarter eating vending machine, a 7-11 style soda dispenser could probably have been installed and the price per soda would probably have been around 2 cents each for a big gulp size. It is very cost effective, much better than bottles or cans. It might have been viewed as a step up in benefits vs. a takeaway. Pennywise, pound-foolish.

<http://www.sodadispenserdepot.com/dispensersused.html>

<comment><USER33> Having worked on and off in restaurants over the years, you have to clean these things nightly - and thoroughly - or else they get disgusting very quickly. That's the biggest problem with most of this kind of thing, espresso machines too. We have a single-serve automatic coffee maker right now that's not supposed to require regular cleaning, it's a little better about it but it can still get really gross.

</comment></comment><comment><USER52> Next step in those companies is that the managers start having meetings in fancy hotels costing a lot more than that small saving.

</comment><comment><USER53> I'm kind of confused on the timeline:

"Last week as a favor to a friend..."

"The best engineers quietly put the word out that they were available, and in less than month..."

While both statements can be true together, it would seem to me that "in less than a week..." would be more appropriate, and devastating.

I realize I'm just fussing over unimportant details though.

<comment><USER54> You left out the bit in the middle:

"I had lived through this same conversation four times in my career, and each time it ended as an example of unintended consequences."

<comment><USER53> I would agree completely with you, if the next sentence was "In a similar situation at a different company, no one on the board..." But without such a line, I read that as commentary based on previous experiences, followed by a continuation of the main story.

(I assumed that "the board" in the next sentence referred to the board in the first part, which lead to the continuation. This is re-enforced by using "This company" and "the company" which would imply that the author was referring to the only company introduced)

</comment></comment></comment><comment><USER55> I went through this transition once. Initially, sodas were to be .50$, but that caused an uproar and price was quickly reduced to .25$, where it remains today. It's one thing for sodas to not be free; it's another for them to be a profit center.

Aw well, at least coffee is still free.

</comment><comment><USER56> Significant: hundreds of posts on this topic. Obviously the social situation is vitally important. Corporate drones will never get it, so one solution is to never hire them. Look at W. L. Gore & Associates, Inc, they do (used to do?) it right.

</comment><comment><USER57> The CFO failed to anticipate that humans are irrational, and that people will read all sorts of things into the loss of free sodas. It's not just an economic transaction.

I thought the sales point of "business" types was that they were good at managing the irrationality of humans.

<comment><USER58> Do you think the CFO who proposed this dismal change regrets it? She raised her standing with her peer group by proposing a popular cost-cutting measure, and they probably blame the engineers for the outcome, not her. They may even be glad to be rid of the engineers who wouldn't adjust well to big-company culture. Big-company culture is a culture of mediocrity and interchangeability, and the guys on top like it that way. They want all the initiative and excellence to be on their level of the company, so everything that happens in the company is due to their control. Google is exceptional in even _trying_ to avoid that fate.

<comment><USER57> I doubt it. Few people are going to mention the sodas during exit interviews. In fact, I think very few people are even aware that the sodas might be a trigger for their decision, since it's not about the sodas, but the show of loyalty.

</comment></comment></comment><comment><USER59> I bet I could save many times more than 10,000 a year by eliminating a CFO.

<comment><USER15> A _bad_ CFO, definitely. And a good CFO would never cut that kind of corners.

A good CFO knows that a corporation's job is not to _save_ money, but to _earn_ it.

</comment></comment><comment><USER60> Based on what he says, end of the free sodas is a lagging indicator that is significant only for the reason that it serves as a "wake up call" for the "heads-down" talent. Unless the talent is entirely clueless (which makes you wonder about the "superstar" qualification), at some point they will realize that they are no longer a good fit for the company and will leave.

So it seems the moral of the story is that hold off on sending overt signals to your employees until you have prepared for their (inevitable) exodus.

</comment><comment> brown9-2 I just want to say I really love this analogy.

</comment><comment><USER61> We all like free stuff, but there is no demonstration that the company was actually harmed by saving the money on free drinks. Did having the early engineers move on have a significant negative impact? Apparently not, or it would have been mentioned in the article. . .

After all, you could hire them back if you offered them enough, and you'd do that if they were essential.

Maybe it was in fact better to replace them with people happier working in a medium sized company.

<comment><USER27> > After all, you could hire them back if you offered them enough

This is typical HR thinking, and is only valid for a certain demographic (i.e., the people on the mid-to-low end of the bell curve). In my experience the absolute top-level engineers cannot be retained with just money.

Let me put it this way - you're an ace engineer with oodles of experience. You are in high demand, and if you were unemployed, you probably would have recruiters banging your door down by week's end. These are the "top talent" that all companies claim they want to hire - and they will make top dollar regardless of where they go.

Having known some of these people, the motivator is not money, because money is not _why_ they do this, and honestly they're swimming in it already. To hire these guys you need to do something more - a great working environment, a kickass team, a sane management structure, etc etc.

Money can only motivate someone so far.

<comment><USER56> Yes, money will make a certain character swallow their pride/morals: a prostitute. Anybody with self-respect will have other reasons for taking a job. My old manager said "Nobody every quit over money". Well, he managed high-end Engineers, but you get the idea.</comment></comment></comment>


R Forecasting as a Service - <AUTHOR> https://api.blockspring.com/blog/r-as-a-service

<comment><USER2> You're already had major discussion about blockspring, multiple times.

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

<comment><AUTHOR> As we find out about different use-cases, we like to post articles that explains how we solve that use case.

Other posts were about the general use of Blockspring. This post is specifically about how we created R Forecasting as a service.</comment></comment>


How to Do Business in China Without Going to Prison - <AUTHOR> https://www.chinalawblog.com/2019/07/how-to-do-business-in-china-without-going-to-prison.html <comment><USER2> I spent a year teaching English in China and most of the teachers were early 20-somethings that were there to party and have a good time..and pay for their lifestyle teaching.

I honestly wouldn't want them teaching my kids. I don't think many would pass a drug test.

<comment><USER3> Considering the penalties for drug use in China, I consider this to not only be disgustingly inappropriate, but also shockingly, jarringly stupid.

Wanna party? Go to Montreal. In China there is still capital punishment for certain drug offences.</comment></comment>


This Man Is the Godfather the AI Community Wants to Forget - <AUTHOR> https://www.bloomberg.com/news/features/2018-05-15/google-amazon-and-facebook-owe-j-rgen-schmidhuber-a-fortune <comment><AUTHOR> Imagine being called out at a talk by this guy. It'd feel more like a WWE match than an AI conference!</comment>


Detexify LaTeX handwritten symbol recognition - <AUTHOR> http://detexify.kirelabs.org/classify.html? <comment><USER2> Thanks to the creator. I saw this earlier on HN as a different post but I believe its worth the second post since the previous one didn't get much attention and projects like this shouldn't be lost away to other general articles, even if they are interesting.

</comment><comment><USER3> I've been using this for a while now (not sure where I got the original link -- it may have been the previous HN post).

I find that for common symbols, it works _beautifully_. But for symbols that can be drawn in different ways (consider \cupdot for example), it seems to bork and return unrelated symbols.

One thing that I would find quite interesting is someone writing something similar that, instead of using gesture recognition uses image comparison. I realize it would be quite difficult, slow, and probably would have terrible accuracy, but meh . . . I should try that.

</comment><comment><USER4> Looks a lot like Shapecatcher for Unicode: <https://news.ycombinator.com/item?id=3222964>

<comment><USER5> I believe Detexify came first

</comment></comment><comment><USER6> GitHub project page for the classifier: <https://github.com/kirel/detexify-hs- backend>

</comment><comment><USER7> The Detexify backend is a great example of a non-trivial program written in Haskell.</comment>


Software Engineering at Prismatic - <AUTHOR> http://blog.getprismatic.com/blog/2012/4/5/software-engineering-at-prismatic.html <comment><USER2> "While we make heavy use of the core of Clojure, we don't use its concurrency primitives (atoms, refs, STM, etc.) because a function like pmap doesn't have enough fine grained control for our needs. We opt instead to build our own concurrency abstractions in Clojure on top of the outstanding java.util.concurrent package."

I wrote a web crawler in clojure at at&t and our team came to this same conclusion. First we tried to implement a custom atom, but finally using java.util.concurrent directly.

I'm not sure what this says about the clojure concurrency features, but I've found myself using them sparingly even when doing a lot of concurrency.

<comment><USER3> Rich Hickey is borderline genius in my book, and I really enjoy his philosophical approach to CS. Clojure is a fine language, but I frankly never bought the "concurrency issues" as a reasonable motivation for Clojure (over Java).

Fact remains that STMs (as originally developed by the Scala team in (yes) Java), "outstanding" [OP] concurrency, and idempotent/functional programming remains /well within reach/ of the seasoned developer in Java.

Also, unless I misunderstand their architecture (and it is single node ..), then the fact remains that in a distributed system, the "semantics" of interaction are not bound by the programming language behind box x, and are entirely a matter of the (remote) API you expose. STMs are a concern of a shared memory space -- once you go distributed, it is really borderline snakeoil to talk about the benefits of "functional" languages in creating remote functions.

<comment><USER2> Our system was both distributed and highly concurrent in the same memory space. We started off using atoms, but we needed visibility and control over the queue feeding the thread for the atom which lead us to using java.util.concurrent directly.

Our use case was fairly odd though.

</comment></comment></comment><comment><USER4> "We tend to build our own libraries simply because much of the functionality of open-source code is locked up into monolithic frameworks and not easily re- usable."

Wow, I couldn't agree more with this concept of library vs. framework. While frameworks provide all kinds of up-front time savings, I've never used one that didn't end up getting in my way and require all kinds of deeply placed hacks to work how I (or my company/client) wanted.

I sometimes feel out of the loop because I'm not using all of the popular frameworks everyone else is talking about at the moment. So it's refreshing to hear I'm not alone in the opinion that time is saved in the long run by writing one's own small, modular, easily understood and reused libraries if none are already available.

I do feel as though small, self-contained code bases are becoming easier to find with the rise in popularity of sites such as GitHub and Bitbucket. So perhaps the trend towards less monolithic software can become more mainstream.

<comment><USER5> I had the same reaction. Fully agree with both you and the OP.

</comment></comment><comment><USER6> I'm most interested to know about the Flop library. This has always seemed a weak point of the JVM ecosystem. While there are many numeric libraries none seems dominant and speed suffers next to BLAS. Of course programming and using such a library in Java is also painful. This is a domain where functions really are by definition the right abstraction!

</comment><comment><USER7> The CEO, bradfordcross, is amazing at distilling good engineering to principles. Software engineering for hackers.

</comment><comment><USER8> Very much looking forward to the rest of the posts, and the release of these projects :)

</comment><comment><USER9> where's the rss feed to subscribe to?

<comment><USER10> I'll put that up right now. Sorry it's a _very_ new blog. Here's a direct link <http://blog.getprismatic.com/blog/rss.xml>

<comment><USER11> Any chance of getting back contents of Bradford's old blog <http://measuringmeasures.com/> ? There were a few brilliant articles on becoming data scientist, learning statistics etc. It would be much appreciated.

<comment><USER12> that was a good one:

[http://web.archive.org/web/20101102120728/http://measuringme...](http://web.archive.org/web/20101102120728/http://measuringmeasures.com/blog/2010/3/12/learning- about-machine-learning-2nd-ed.html)

</comment></comment></comment></comment><comment><USER13> nerd crushing so hard this team and their work.

</comment><comment><USER14> Great post. Very thought-provoking.</comment>


Ask HN: Review my app: Who Is Working On What? - <AUTHOR>

Dear HN, as a long time member, and being truly inspired it's my turn to announce an app. I've built a tool to keep track of 'Who is working on what?' in your team. URL: https://whoisworkingonwhat.com. Please review and let me know what you think. Specifically:

    1. Is the idea good enough to build a small business around?

    2. I don't have a recurring billing system integrated. I live in India and I do not have access to services like recurly or chargify. Assuming the tool gets some traction, I might want to to build in a recurring billing system. For now though, I am planning on requesting money using PayPal if required.  I plan to charge $8 monthly for a basic plan (2 private projects) and $14/monthly for a plus plan (5 private projects). I've pulled these rates out of thin air for now. Are they reasonable?
 I have learned most of my product building skills reading you guys here at HN. The community is awesome and I've constantly felt that I had to try and share as well. I am offering a 3 month plus plan as a token of appreciation for all you good folks out there for making my year memorable. Link: https://whoisworkingonwhat.com/signup?promotion_code=yc As always, please keep the the comments coming in. <comment><USER2> The revenues generated by the well-funded similar startup Yammer probably suggests there is a market for the service you're operating, though assuming you won't have an enterprise sales team you'd be wise to undercut their hideously expensive per-user charge ($5 per user might be OK for a five person company but not for a 25 person company that probably spends less on mission critical stuff like their CRM and/or bug trackers). The price range you're aiming for doesn't sound unreasonable if you're aiming for the smaller businesses; any more and you start getting compared unfavourably with services like Basecamp that can keep people updated to what others are doing plus several other useful tasks. I agree that charges loosely based on number of users (up to 10; up to 50; up to 200; make up the price as you go along if you're lucky enough to get serious enquiries for larger companies and consider a free 3 user plan as proof of concept) make more sense than by project.

I'm not your target market, and probably wouldn't use it, but I like the execution of the product, particularly details like Github commit based updates. One thing I would change is the contrast of the forms; I have to squint or highlight the white-on-pale-blue text to be able to read it.

<comment><AUTHOR> Thank you for the feedback. I am definitely looking at smaller businesses. At least for the moment.

I agree about the contrast of the forms. I'll change it in the next deploy.

</comment></comment><comment><USER3> I don't really like the project grouping. A developer can work on multiple 'projects' on the same day and you don't want to have to look for them on Project A and Project B to get their latest update.

Maybe add a Team layer to the mix. A user can belong to multiple teams. You can have a Dev team and an IT team. Then an overall Tech team which includes everyone in Dev and IT. Then update the dashboard to allow you to view by Team or Project.

You'd have to work out a good way of explaining/displaying this to users.

Additionally, it'd be great to see the last 2 updates underneath each person. Or maybe on the team view list all updates under each person for the same day (otherwise show last 3).

This it personal preference, but adding different views to the dashboard would be pretty simple and would help sell me on this for my use.

Lastly, I don't know how well the pricing model works by limiting to a certain number of projects. To me, users is a more important grouping and I would do pricing based on that.

<comment><AUTHOR> I need to think about organising the updates teamwize. I usually go with projects because most of my projects are small. That said, I will collect more feedback and see what's the best way.

Interesting view on user-based pricing. Basecamp, github, and most other sites that I use personally go by project numbers. User count comes in the second level. E.g. 20 projects and up to 50 users.

<comment><USER3> My problem with the project model is a project could be anything. If someone didn't want to pay for the next tier they'd create less projects or have 1 generic project which is the name of the company and dump everything into it. Which is what I do with the free version of FogBugz for my personal projects.

A user will always be a user. One business may need 12 projects while another may only have 1 project everyone is working on. But if both have 30 users they use up the same amount of bandwidth.

And as you suggested, it really comes down to how different businesses work. Some companies work faster than others where 1 project may last 2-3 days. Someone in that company would have to be on top of closing that project and the next one. Or do they create a Generic project for the quick ones and a specific project for the more long term ones?

Properly utilizing Projects (and milestones for that matter) have always been a challenge for me with the project management applications I've used (Basecamp, FogBugz, etc).

</comment></comment></comment><comment><USER4> It's be great if the dashboard showed which one of the people was me more clearly (possibly you could show that box in a different color?). Just having "^ You" is not very easy to find. Other than that, it looks pretty neat. Not sure I'd use it, though.

<comment><AUTHOR> Point noted. I'll highlight it better.

</comment></comment><comment><USER5> I tried to sign up and I was directed to this page after I submitted the registration form:

<http://cl.ly/2U0E3g0w3U0s3s213527>

Might want to change the notification messages on there

<comment><USER5> seems like duplicate entries are across the board:

<http://cl.ly/1a292d1P283a1k1I0x14>

<comment><AUTHOR> Thanks. I'll take a look at this.

</comment></comment></comment><comment><USER6> Nice to see stuff come in from India!! Awesome. Mumbai,Chennai,Delhi or Bangalore?

<comment><AUTHOR> Bangalore

</comment></comment><comment><AUTHOR> Clickable: <https://whoisworkingonwhat.com>

</comment><comment><USER7> As a quick side note, under the $8/month plan, it's "up to", not "upto".

<comment><AUTHOR> Thank you. Will correct it.</comment></comment>


Silicon Valley 'Bloodbath' Leaves Entire Office Buildings Empty - <AUTHOR> http://www.businessweek.com/bwdaily/dnflash/content/jan2010/db2010015_516128.htm <comment><USER2> My startup actually just got some really awesome free office space in the ground floor of a building where the company went from 100 people to four. They are still paying 40k a month on the lease and have a year and a half left, so one of the employees is just letting us work there until someone else leases the space. It's pretty amazing though; right now my office is actually a conference room surrounded on two sides by glass and overlooking a duck pond.

</comment><comment><USER3> The article left out the fact that most of this commercial real estate excess is left over from the dot com bust. At the height of prosperity between the bust and the most recent financial trouble the vacancy rate was still around 16% compared to the 21% it is now. And unless you get somewhat lucky, most owners in the valley still make more money by only partially leasing their building at a higher cost than fully leasing it at relatively low prices. So, while you may here a few stories of people getting decent lease rates they are the small minority.

And I don't see how they article or title infers anything about the state of tech as others have mentioned other than that it says Silicon Valley. While this term is typically used to describe the tech industry in the area it has become a more generic term for the south bay. The article makes it clear that it is a real estate problem and that some tech companies are benefiting from the over-speculation.

</comment><comment><USER4> This seems to me like a unique opportunity for next-gen startup incubators and the coworking movement to lease space at rates that would enable startup entrepreneurs to use the kind of digs that are normally completely outside of their reach.

<comment><USER5> Still an order of magnitude more expensive than most other cities.

<comment><USER6> And still for good reason.

<comment><USER7> I'd love to hear your rationale.

I recently landed at a small startup in San Diego. We're downtown in class A office space, 16th floor with a Pacific view, and we pay less than $2.50/sqft.

I'm having a hard time seeing how being in the bay area is worth 13× the price _during a glut_ , but I've only worked here in San Diego so I could definitely use some perspective.

<comment><USER8> We're in the heart of the peninsula, Redwood City - pretty Decent digs (Former Excite/@Home) Area - in the neighborhood of $1.25/Square Foot/month. Our predecessor was was paying $0.95/square foot/month.

Based on my (rather limited sample) my analysis of the article is that the rates being quoted were per _year_, not per month.

$2.50/SqFt per month is pretty expensive unless you are in Downtown San Francisco.

<comment><USER9> Are you in the old Excite@Home building that has the Stanford name on it now? Those offices were incredible, with the slide from the 4th floor to the 1st. Ahh, the fall of the silicon empire!

<comment><USER8> Nope, we're on the other side of Broadway, in the building with a slide from the second to the first. That Slide, thought, has been boarded off. Rumor has it someone broke their ankle on it at some time.

<comment><USER9> Ahh I know which building you mean. Fun stuff though. You should rip the boards off the slides, get a video camera and post to youtube! Never let caution get in the way of fun!

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> I'm not sure this isn't still a leftover from the original dot-com era bust and the existing real estate bubble issues.

This doesn't seem like a reflection on the state of tech in Silicon Valley (which the title infers) but the state of over-speculation in area commercial real-estate.

This is a good thing for tech companies.

<comment><USER11> There's a lot of space left over from the dot-com run-up, and it's built for a profile of VC-funded startup that's been on the decline since the bubble burst. A lot of the empty space I see in the south bay is of the old 'big open space in the middle surrounded by offices' model that assumes the big, florescent-lit cubicle farm that used to be the norm.

So the space is there, but it's a good thing for a type of tech company that seems to be getting rarer.

</comment></comment><comment><USER12> "Commercial property foreclosures will at least double in 2010 and job growth won't return for two years after that, held back by U.S. consumers who are saving more and 'getting back in line with sustainable spending habits,' Haveman said."

That suggests that the return to a boom economy is still a long way off, as commercial property investments absorb a lot of capital, and bearing those losses will cause many spending cutbacks throughout the economy.

<comment><USER13> This is a good observation about the macro economy in Silicon Valley but the activity level for early-stage startups is now strong and getting stronger (VC-funded startups still lag) - for the right startups, this is a very good time to launch and develop in anticipation of an eventual recovery.

Agree with your point that the broad recovery is still quite a ways off (lesson for startups: don't get overextended in the short term as you build).</comment></comment>


Apple Removes Epic Games Account from App Store - <AUTHOR> https://nintendosmash.com/apple-removes-epic-games-account-from-app-store-will-not-affect-unreal-engine-support/ <comment><USER2> Hey dang this other thread has more upvotes and comments:

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

Edit:

Well not anymore I guess :)

<comment><USER3> Comments moved thither. Thanks!

<comment><AUTHOR> Hi dang, can I ask why did you delete my post?

<comment><USER3> I didn't delete it. We don't delete anything on HN unless the user who posted it asks us to.

I did mark it [dupe], which is short for 'duplicate', because it's the same story as [https://news.ycombinator.com/item?id=24309632](https://news.ycombinator.com/item?id=24309632). We don't want two different threads about the same story, because it leads to split discussions and because there are so few slots on the front page.

In such cases, we pick one of the threads to be the main discussion and merge comments from the other one into it. I picked [https://news.ycombinator.com/item?id=24309632](https://news.ycombinator.com/item?id=24309632) because it was posted earlier than yours, and also because it seems to link to a more substantive article.

<comment><AUTHOR> Oh I see. But my post got more upvotes than that post.

<comment><USER3> You can't draw much signal from that. Any submission about that story making the front page would get lots of upvotes, and there are a lot of random or extraneous factors affecting which ones make the front page.

<comment><AUTHOR> Hi, am I banned from sharing website link?</comment></comment></comment></comment></comment></comment></comment>


Ask HN: How do you keep improving? - <AUTHOR> I am currently in my ~8 year as a developer, doing my Masters degree while working as a part time developer. That said i find it quite hard to keep improving, i know a lot of people that are better than me but i seem to be unable to really learn from them. What i found out is that i rarely take the time to lern something in depth because i mostly learn stuff to use it and tutorials seem to move at a way to slow pace, so i mostly skip them.
As an axample, i started out with C/C++ development but am unable to keep up with the new standards. I see people write really nice code but whenever i sit down i just keep reusing what i know. The same goes for architecture, i have been building stuff for a long time but other people (with not that much experience) tend to be way better at abstracting stuff or architectual design than i am.
How do you guys keep lerning new stuff? Any techniques or tips? <comment><USER2> 1\. You need to recognize when you're not learning, for one thing. If it's easy, you're not learning. You need to push yourself into the zone of discomfort, where you feel clumsy and have a hard time. _Now_ you're learning.

2\. Find a mentor. Lacking that, find e.g. talk of someone explaining some hard techniques and then try to follow the advice. Even and especially if it feels clumsy at first.

(More on those two here: [https://codewithoutrules.com/2017/04/17/learning- without-a-m...](https://codewithoutrules.com/2017/04/17/learning-without-a- mentor/)).

3\. Switch to a new job where you'll be exposed to new things. try to find a job where people do code review, feedback is how we learn faster.

4\. Learn how to learn: [https://www.youtube.com/watch?v=FKTxC9pl- WM](https://www.youtube.com/watch?v=FKTxC9pl-WM)

5\. Reflect on your mistakes, try to find what cues you missed and what you should look for next time. I've been doing this on weekly basis (you can read the results at [https://softwareclown.com](https://softwareclown.com)) and I've learned a huge amount from figuring out underlying cause of what I did wrong.

<comment><USER3> I agree with everything you said. What needs to be feared is complacency. If you ever feel that things are going too easily - that's when to be afraid.

I will be the first to admit I let many _months_ of complacency pass me by before I identified the signs. All the above advice - forcing yourself into the haze of discomfort, breaks this away and forces you to learn new skills. Learning is often glamorized, but in reality, the actual _learning_ phase is painful and uncomfortably hard. I still don't enjoy it, even though afterword, I appreciate the knowledge and extra skills. Instead, it's important to build habits that lead to continuous learning, rather than one-off improvements. Paradoxically, it's easier to become normalized to regular discomfort than rare, unusual discomfort. It has never stopped being uncomfortable to learn for me, but I also have built it my psyche.

<comment><USER4> I remember back before I knew about variables, when I started learning programming, thinking about a programming problem for whole days, and figured out how to store intermediate computed values in MacOSX text fields and retrieve them later (the values was state for the adventure game I was trying to make), and that allowed me to make a lot more interesting things before, I thought I was so clever; and then I remember the epiphany I got when I finally understood that web page talking about variables; I had been reading it daily for months and had no idea what they were and how they could be applied to my programming, then finally it clicked! What a high! Being able to store values without placing hidden text fields everywhere! I don't think I've been more excited ever again since those summer afternoons, even trying to figure out stuff in shower and in bed... I was 11 or 12 stuck with a Mac at home. I didn't have money to buy my own games and back then it was Apple's dark ages so there were hardly any games anyway; I tried to make my own. Was learning difficult? For sure. Was it uncomfortable? In a way. Was it the best and most exciting experiences in my life? Oh you have no idea. (Ok my marriage to my wife comes a close second; in case she reads this one day.)

Something about childhood experiences makes them a lot more intense...

</comment></comment></comment><comment><USER5> Teach. Find people to mentor, find user groups to present to. There is no better way to learn more about subjects you're superficially familiar with than to teach them. Pick subjects where you think you're an expert, and prove to yourself that you weren't, or pick subjects that you would like to know more about and try to understand them well enough to explain to someone in 45 minutes.

You will be terrible at this at first, but teaching is also a skill that takes lots of practice to acquire.

I would also agree with what others said: stop comparing yourself to others, no good will come of it. There is always someone better, there is always someone worse. It doesn't matter. Set a standard for yourself and meet your own standard.

P.S. If you're looking for a good resource to learn presenting from, I would recommend macsparky's presentations field guide.

<comment><USER6> If you want to teach without leaving the house or standing in front of a group of people, try [http://exercism.io/](http://exercism.io/) (Open Source and free).

Solve simple coding problems, review the submissions of others and help them become better coders. Trying to clearly explain concepts to others is the best way to make sure you really know them yourself.

This is also something that you can do for 10-15 min every day, which will add up over time. Ask for feedback on your own solutions and find out ways others think you could improve things.

</comment></comment><comment><USER7> I saved this comment from jlcfly from an AskHN that was answered a long time ago.

"Teach them to be better than you. That may seem counterproductive. I have a type A personality, and I have decent coding skills. I've been in your situation a number of times. I also know there's these mythical expert developers out there that I can't seem to find (or afford). So, what to do? A few years ago I realized that if I continue down this path, I'll end up with some serious health issues due to the stresses that come along with having a reputation for being a really good developer. So, I decided that instead of searching for developers better than me, I would teach developers I work with how to BE better. It's taken a lot of patience. And it's taken me quite a bit to LET GO of my way of doing things. I had to take my ego out of the picture. (VERY hard to do.) Nowadays, I realize that developers don't have to BE better than me. I simply have to ALLOW them to do what they do without being so obsessive about it. Turns out, even junior developers really CAN do good work. They just need a little guidance that only comes with experience, and then they need me to get out of their way."

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

</comment><comment><USER8> I for one will often (and usually naturally) befriend the most talented developers I work with. Talking code often and bouncing ideas off of them will really help you see where you're lacking or where you can improve.

Learning new languages and different paradigms can also play a huge role in how you approach future problems. Go to glot.io and play around with a handful of languages you've never touched.

Read up on various best practices and style guides. Read blogs on architecture, design patterns, etc. I read probably 5-10 hacker news articles daily, but I also watch many videos on youtube such as pretty much anything by Martin Fowler, Rob Pike or any of the other greats.

Code stuff outside of your comfort zone. If you're a web developer, try writing some games. If you're a game developer, write a web server or a blazing fast load balancer that handles TCP/UDP sockets and HTTP. I code random shit all of the time just to gain some exposure even if I'm never likely to do related work in the future. I probably have a few dozen Go programs I've developed just because I was curious how something worked.

I've been programming for over 17 years starting with C++ when I was 13. Over the years, I've developed stuff in C/C++, Python, Ruby, Lua, C#, Java, JS, TypeScript, SQL, Dart and Go for the past 3 years. Each language has given me new insights in how to tackle problems that knowing say just C++ alone would not have lead me to.

TLDR: Exposure!!, Books, Blogs and LOTS of bouncing ideas off of other developers.

<comment><USER9> I'm not sure that this is the way. It's much easier to get a small amount of knowledge about a lot of topics. If you want to be a generalist then that's great, otherwise, I think it's important to keep asking yourself "How can I drill deeper?"

This is specifically regarding the third point; I agree with the first two!

<comment><USER10> The OP mentioned architecture - it helps to be a bit of a generalist to learn architecture, as you need to understand different kinds of problems.

</comment></comment></comment><comment><USER11> I work on progressively larger and larger apps. This teaches me more and more about coding in the large, in a very practical sense. Every time I learn about something new, my learning is explicitly motivated by the problems that I ran into while implementing the large app.

I started by making a reasonably conplex TODO app, which took a few months. This taught me about the importance of declarative (popularized by React) style programming, and MVC separation.

Then I moved on to building a Vim extension for visual studio code. This took about 6 months, and taught me a bunch about programming larger apps and keeping them bug free. I also learned a lot about open source maintenance. I learned why Redux-style architectures are important.

Then I moved on to working on a fully featured pixel editor. This has been my toughest app of all. I've been working on it for about 4 months full time at this point, and I've learned so much about canvas perf, js perf, the importance of end to end testing, ... I could go on for a very long time. :)

And this is all a warmup for an even larger app I haven't started on...

This approach seems to have worked well for me, and I'd recommend a similar style approach of working your way up from smaller programs to larger apps. You learn lessons from smaller apps that will save you a lot of time when coding larger apps.

<comment><USER12> Do you mind sharing your vim extension? Would love to check that out. My coworker is interested in learning vim and he uses VS Code, so it sounds like a good introduction.

<comment><USER13> [https://github.com/VSCodeVim/Vim](https://github.com/VSCodeVim/Vim)

</comment></comment></comment><comment><USER14> Start by comparing yourself to yourself, not to others. Don't worry about matching others for their strengths. Just be a better you tomorrow than you were yesterday.

Next, distinguish between depth and breadth. Are you a generalist by nature, or a specialist? I'm a total generalist. I've achieved basic competence in a truly shocking variety of different subjects, but the main thing I'm an expert at is being a generalist. I've gotten very good at picking up new skills whenever I'm interested in them.

Other people are specialists. They find something they're passionate about, and they get _good_ at it. Really good. They go deep. They may not know a whole lot of things, but that one thing they know, they know so well it's hard to even comprehend from the outside.

So are you a generalist by nature, or a specialist? Do you want to be one or the other? Pick a direction and start walking.

<comment><USER15> Is one better than the other?

<comment><USER16> IMO, its best to be a Generalizing Specialist (T-shaped individual[0]). How to become that is another matter altogether.

I would also suggest reading Mastery by Robert Greene. Though the book is unnecessarily long, the points he raises are pretty good. Reading the anecdotes is also quite interesting.

0 - [https://www.forbes.com/sites/andyboynton/2011/10/18/are- you-...](https://www.forbes.com/sites/andyboynton/2011/10/18/are-you-an-i-or- a-t/#2b9af9116e88)

<comment><USER14> Good book. I'd also add _Pragmatic Thinking and Learning_ , by Andy Hunt. Different, but a very useful approach to "how to learn".

</comment></comment></comment></comment><comment><USER17> Dev with 10 years experience here. Self taught.

There are couple ways I keep up on things (keeping in mind that there are no absolutes and everyone is different).

First, I identify subjects that are both interesting to me and have traction with the developer community. Forums like this one are generally a good sniff test. I then subscribe to mailing lists that deal with that tech. I clip a lot of articles and code snippets to a datastore (Evernote in my case) where I can peruse my notes later. I install said tech and build little micro apps and generally futz around and have a good time. The key here is to be interested in the tech you are trying to learn. Maybe you are bored with C/C++? Whats the harm in looking at something totally different like Ruby or NodeJS? They might give you ideas or a different way of looking at things. Whatever it is, try to have fun. Learning doesn't have to be all drudgery.

When I want to take a deep dive (usually after a good bit of research mentioned above) I find a job working with the tech in question. Nothing will force me into gaining a deep deep understanding of a technology or concept like getting thrown into the deep end. After a year or two at that job, I emerge a ninja level dev in that area. Not a bad deal if you ask me. If that approach is too extreme maybe you can just set up a side project or contribute to open source? Anything that forces you to sit in a chair and produce functional code in the manner with which you want to learn is going to accelerate your learning in ways you never thought possible. Good luck!!

<comment><USER18> Interesting to see the range of responses in this thread, eg. you are advocating keeping it fun and interesting, whereas other people recommend deliberately doing things you don't like.

It might have to do with different personality types. For instance, I am prone to procrastinate on anything that doesn't interest/excite me, so when my goal is to work on stuff I don't like, the output approaches zero.

I resonate with the "do more than nothing" approach advocated by Khatzumoto of All Japanese All The Time[0]. Which is a great website by the way!

It's all about how language learning can be fun. It's like 10% language learning advice, 90% "you can do it stop beating yourself up".

[0]: [http://alljapaneseallthetime.com/](http://alljapaneseallthetime.com/)

</comment></comment><comment><USER19> I'm currently reading Zero to One by Peter Thiel. Here is one thing interesting he mentions.

To grow, one can either scale vertically or horizontally (paraphrased).

Now if we apply this to your situation , scaling horizontally would be learning new languages, ie. Objective-C, Javascript etc. I'm assuming you're not really about this but you want to scale vertically.

If scaling vertically is the case, then what you really want to focus on is doing something either 1) other people have not done before yet and/or 2) do something that is 10x better than what is already out there. I don't do too much C/C++ dev but maybe think about embedded, OS, GPU, etc.

If you accomplish 1) and/or 2), then you can truly master C/C++ dev. My 2 cents.

</comment><comment><USER20> For me the biggest thing is always to question what I think I know. It's easy to get into a local maxima. You often need to take one step backwards to take 2 steps forwards.

In practical terms that means that you need to change the way you write code. And that means practice. Katas are good, but you have to force yourself to do it differently than you would normally.

Here's an example of something I did recently: [https://github.com/ygt- mikekchar/es6-monad-challenge/blob/ma...](https://github.com/ygt- mikekchar/es6-monad-challenge/blob/master/monad.js)

This code is clearly insane. You would never do it this way in production. Or would you? In reality, how do you know what the advantages and disadvantages are if you never try it?

But small toys and katas are not enough. Architecture and design requires practicing on a big scale. That means side projects that you have complete control over. It's unfortunate, but this stuff takes time. If you like programming it's not bad, though :-)

Always get ideas from other people. Read books and blogs to get more ideas. Then go nuts. The hardest part is to have to courage to absolutely suck. Picking insane things to do will help with that because you don't have the feeling that it must turn out good in the end. It's insane.

Hope that helps!

</comment><comment><USER21> For me it's a iterative process of read->apply->get stuck->read->apply.

I focus each morning on working on the number one thing I have to do that day, in the afternoon I can attend to other less important tasks.

Josh Kaufman has some good tips ([https://first20hours.com/](https://first20hours.com/)).

Also as John Sonmez ([https://simpleprogrammer.com/](https://simpleprogrammer.com/)) would say - trust the process. Don't focus on immediate results, focus on the process of reaching your end goal

</comment><comment><USER22> I find asking this question to be just slightly misunderstood. I am currently in my 35th year as a developer, and the learning and improving is easy with one simple ingredient: interest. Pursue what interests you, do the research, write your own versions of the latest research, and when stuck contact the authors you're following. You'd be surprised at who responds, and coming from a perspective of interest the response may be more than expected.

I've been doing C/C++ for my entire career, but have also done full web stacks, embedded systems, VFX for feature films, 15 years as a game developer, OS engineer on first PlayStation team, and reaching way back 80's 3D graphics research and Macintosh beta tester and launch developer. All from simply having enthusiasm and a combination of the stupidity to try it myself and then contacting the leaders and asking them what they did about some nit picky point. Next thing, I'm working there.

That type of easy access is only at new technologies. When I was contacting people the digital entertainment industry was yet a dream. EA was maybe 1 year old. I guess my advice is to find something that you find exciting, but is not yet a reality. There are giant industries to be created around software controlled aircraft, everything from IronMan to skytrains, fer christsake. What interests you? Augmented Reality is going to be saturated, but that area is wide open. Hell, everything is interesting. Just be sure to focus. There is success in consistency.

</comment><comment><USER23> How to learn how to learn!

Personally, I used to find it tough to learn things I couldn't immediately apply. That's because I would try and commit them to memory in a way I could immediately retrieve them if required. So spawned a path of memory learning techniques... flash cards... ugh...

Then I was watching a Derren Brown show (a British 'mentalist') who taught a guy to memorise hundreds of books so that on command he could read out the content of any given book, any given page and any given number.

The individual would read the books in a particular way (picture dragging your fingers down in a v shape across the page). When asked to reiterate the content, it was very important that he just trusted his gut. And he got it right every time.

The key takeaway for me was that it's equally important to learn how to retrieve knowledge.

Slight tangent here, I also remember reading about how Steve Jobs was able to 'think outside the box' and come up with seemingly new ideas. And the suggestion was he was just good at retrieving knowledge through a confidence of confidence in himself and a non-pressured environment.

Hope that gives you something to think about!

</comment><comment><USER24> Find an open source project that interests you, and start helping. Even better if it's a project you use and you're aware of some sore spots. Start small, with documentation issues or easy pickings tasks. This is to get you familiar with the project and contribution processes. Then work your way up.

By familiarizing yourself with a large codebase, you'll start to pick up the patterns in use. Having your code reviewed by project owners is a great way to get others to help you improve.

Some projects and communities are better than others. Some can be hostile or quiet, others can be welcoming and active.

Don't just start by throwing PRs at random projects and hoping someone bites. Managing an open source project is _work_ and initially you want to be causing as little extra work for the maintainers as possible.

</comment><comment><USER25> In our industry (and in some others, such as medicine) learning never stops. If you stop learning, you will eventually (and in fact rather quickly) become obsolete. My advice would be to set aside a certain amount of time every week (5-10 hours) to play with new technologies. Even if you don't master them, they can still give you valuable insights or teach you new paradigms.

There will always be someone who knows more than you or is more skilled. Don't let that bother you. Instead, use those people as role models.

</comment><comment><USER26> Become a domain expert. Examples: networking (IP6, BGP, ...), GPU (graphics, cuda), distributed computing (k8s).

Few people are actual experts in a domain. It takes years to do.

</comment><comment><USER27> Read other people's projects. Read books on design, architecture, patterns.

Deeply analyse those reads without ever touching a computer. If I feel the need to write code I usually write it in a paper sheet and analyse it.

<comment><USER11> I see this advice often. However I feel like it never seems to work for me. One of the big reasons why is that I feel I don't get a sense of all the incorrect approaches and why they don't work.

In a case where there are N incorrect approaches and 1 correct approach, by reading the code of the 1 correct approach I will get no sense of why the author dismissed the other N approaches. I feel this (understanding trade offs and judging which approach is best) is a crucial aspect of programming that is easy to miss when reviewing the solution that worked.

<comment><USER27> I get what you're saying and that's one of the reasons the code should be deeply analyzed when you're learning, many times you'll find the answer to why that particular approach was selected. Very often authors point out why other approaches aren't suitable for that speciic purpose, many times theorically or by using abstract concepts.

<comment><USER28> Analysis here can also mean rewriting it yourself from scratch (perhaps in high-level pseudo-code) the next day. If you can't make the same decisions the author did or understand them, then analyze again.

</comment></comment></comment></comment><comment><USER29> I actually wrote a tool that takes a screenshot of my desktop every five seconds: [https://github.com/JesseAldridge/screen_recorder](https://github.com/JesseAldridge/screen_recorder)

Once in a while I go back and review some of the work I did that day and look for ways to improve.

<comment><USER28> How do you use this tool? What have you learned from it?

<comment><USER29> The tool is launched on boot via launchctl on OS X and runs all the time. ([https://developer.apple.com/legacy/library/documentation/Dar...](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html)) It automatically deletes screenshots older than four days. I use it in conjunction with Workflowy and a web app I wrote called Task Ranger ([http://taskranger.com](http://taskranger.com)) to keep track of how I spend my time and to come up with improvement plans.

Task Ranger gives me the big picture -- e.g. learning new things is my biggest time sync and takes 25% of my working hours. The screenshots + workflowy give me the micro level view -- e.g. studying unfamiliar codebases is 1/3 of this 25% timeslice.

So now that I know learning new codebases takes a lot of time, how can I get better at that? Well one thing I've started doing is creating a txt file containing basically a manually generated tree of the function calls made by a program. It might look something like this:

        /new_user
          validate_form
          create_new_user
            User(...)
          send_welcome_email
            load_email_template
            pass_to_email_service

That's a toy example of course -- real-world call trees are huge. After I generate this once I can quickly see how the whole program fits together. And I can use it with this feature in Sublime Text where you right click on a function name and then pick "jump to function".

That's just one small example of something I'm trying. It's an ongoing improvement process that I try to allocate time for. The screenshots are just a helpful view toward understanding where my time goes in more detail.

</comment></comment></comment><comment><USER30> I read a article recently [0], and I think you may like reading it. From my username you can see what I'll post here is really naive. But what works for me is failing. Failing sets a precise goal of where is my limit (be it in knowledge, or something else). So keep trying, keep failing and soon you'll find you keep improving. Other than that, a good mentor would help a lot, don't be afraid of asking questions when you don't understand something or think the person can help you improve.

[0] - [http://www.daedtech.com/how-developers-stop-learning-rise- of...](http://www.daedtech.com/how-developers-stop-learning-rise-of-the- expert-beginner/)

</comment><comment><USER31> I have been a developer (primarily Java) for 9yrs now. But I recently started learning PHP and now I am learning Python. I wanted to learn these languages not because I had to but because I wanted to. And the best way to learn, per me is to pickup a book or a website tutorial, go through all of it in one go and then come back and do some mini projects for yourself which will enforce you to apply the concepts that you learnt. It won't be easy in the beginning but I find this a better way to learn any new programming language or any new concept. Because this way you are actually putting your theory into practice and when you are doing so you also have the big picture in mind.

</comment><comment><USER32> Many great answers, and many of them encourage people to try new things, and go and try to build new things and try stuff you don't know.

I like somewhat different approach, I would take some project I _think_ its done well, and where I no longer see obvious room for improvement.

Then I would to go github and find same or similar kind of projects, ideally created by companies with strong engineering culture (e.g. Google) and compare how I did stuff to how they do it.

You would be VERY surprised to learn just how much other people would differently solve same problems you have been facing, and you can learn a lot from comparing other people solutions to something you are already comfortable with.

</comment><comment><USER33> Just an FYI: there is a great Coursera MOOC on learning how to learn: [https://www.coursera.org/learn/learning-how-to- learn](https://www.coursera.org/learn/learning-how-to-learn)

Simply awesome.

<comment><USER34> Just finished it yesterday myself. It gets relinked to in every thread like this but can't be linked to enough.

</comment></comment><comment><USER35> Stop learning tools, starts solving problems and in the process learn to think in different ways. Learn the fundamentals of computing as everything else is just a new name for the old idea.

</comment><comment><USER36> 1\. Maintain a system long term. This teaches you the benefits of alternative approaches the hard way.

2\. Change languages. Forcing yourself to use a completely different paradigm can sometimes bring about architectural epiphanies.

3\. Focus on data and communications instead of processing.

4\. Meditate on and draw inspiration from timeless wisdom (eg. a good fortune database like mine @ [https://github.com/globalcitizen/taoup](https://github.com/globalcitizen/taoup))

</comment><comment><USER37> Here some ideas that worked for me:

\- online classes. Especially those from actual universities rather than Coursera. Coursera is great but often they target a larger audience and the content may be simplified. Personally, I learned a lot from MIT classes (especially distributed systems and operating systems). They have projects that are challenging and really interesting.

\- Competitive programming. I found competition in general to be a great way to improve. It's stimulating and there are many resources available. The downside is that it's hard and can be depressing. For instance, it takes me 10 hours to solve the problems in an easy code jam round when some 18 year kids solve them in an hour. Depending on what you want to learn, there are different type of competition. For instance, code jam / codeforces for shorter type of problems. Google hashcode for slightly larger optimization problems. Kaggle for machine learning. I'm sure there are many others.

Actually, learning stuff and improving is the easy part (you just need free time). There are so many resources. The question is more deciding what to learn, and how can it be useful.

</comment><comment><USER38> First of all it's not bad to keep using what you know, if what you know works well and is the right way to do something. Like if you're very good with the delegate pattern, don't throw it out just because you heard closures are Better™.

What I personally do is to use what I know well, and when some code feels clunky or I notice problems with it, I'll google the problem and be open minded about new solutions, even if they're really different. And I do a bit of research on the good ones (like 20 minutes or so), making sure they don't have other flaws and just ensuring they fit my use-case.

Case in point, I'm doing iOS development again for the first time since iOS 3 or 4, and when I started trying to use CAKeyframeAnimation again, it felt a bit difficult and didn't look all that great either. So I googled for ways to animate with a bounce effect in iOS, and found the newer UIView method to animate with a spring effect, and another solution using UIDynamicAnimator which was new to me also.

After like 5 or 6 hours of reading, googling, writing code, deleting code (custom segues turned out to be the wrong way to use it in my case), and lather rinse repeat, I finally ended up with not only a good end product, but the knowledge of how to use several new APIs and several new concepts. During that I also incidentally found out some cool Objective-C tricks that came out since I last used it.

Plus I felt really uncomfortable with understanding how ARC works (previously it felt like just a bit of magic to me), so I used the same principle of googling my questions & concerns about it, read some stackoverflow answers and blog posts for 20 or 30 minutes, and gained a much better / fuller understanding of ARC that gave me a lot more confidence writing code.

</comment><comment><USER39> _What i found out is that i rarely take the time to lern something in depth because i mostly learn stuff to use it and tutorials seem to move at a way to slow pace, so i mostly skip them... i started out with C /C++ development but am unable to keep up with the new standards. I see people write really nice code but whenever i sit down i just keep reusing what i know._

Is this such a bad thing? Maybe I'm just trying to justify my own lack of motivation, but I've never been able to learn anything related to programming, or computers in general, unless I had a reason to. The times that I've learned something have been when there was a tangible goal, or I was working on some personal project that I was interested in.

So I guess if you want that boiled down into a (highly inelegant) technique, it would be: have some personal project that you want to do and stumble through it; by the end you'll have learned a bunch of new stuff. Note: I wouldn't recommend doing this in a professional or safety-critical context...

</comment><comment><USER40> There are two simple mental habits required to improve in anything:

1) Recognize blind spots in your knowledge or skill set. Even without acting upon them, knowing what you don't know is a quantum leap ahead of complete ignorance. Anytime you catch yourself accidentally bullshitting an answer at work, it's because this awareness hasn't been grown enough.

2) Fill in those gaps in your knowledge / skillset in small, low-pressure sprints. Make it easy on yourself. People tend to completely avoid things that make them feel uncomfortable or incompetent, so spending even a small amount of time trying to grasp something is a quantum leap ahead of completely avoiding it. After some time, this is how people seem to "know everything": it's not because they're an expert in all things, it's because they spent the 20% of time it takes to get 80% of the results.

Consistency is key. "Most people overestimate what they can do in one year and underestimate what they can do in ten years" \- Bill Gates

</comment><comment> mike-cardwell I used to get out of bed half an hour before I set off for work. Now I get up two hours before I set off for work, have some breakfast and do some learning. I think it's helped me to have a set period of time where I study/practice/tinker each day. It means I don't feel guilty about "wasting" my evenings as well.

</comment><comment><USER41> Start by becoming aware of yourself. Being mindful and aware of your own existence, weakness, strength gives a profound energy to move forward. Once awareness becomes a second nature, you wont see failure as failure nor success as success. It will become a journey.

I am rebuilding myself with this process and taking inspiration from Bhagwad Gita for that.

</comment><comment><USER42> What makes you think that you are not improving? Programming is a craft where you can make pretty things with old tools as well as new. Do you feel your code works less well, or achieves less than the ones you 're comparing to? Or are you just anxious because you skip learning the newer trends?

</comment><comment><USER43> Start meditating and stop worrying about improvements.

<comment><USER44> you have to be something before you can be nothing

</comment></comment><comment><USER45> Two thoughts from someone without a mentor (if you can get one, do that) -- you asked how I (or we) keep improving, but my first thought is you seemed to figure out your own problems: 1) "...and tutorials seem to move at a way to slow pace, so i mostly skip them".

Either you're doing the wrong tutorials, or give them more credence.

2) What I do:

i) Keep myself exposed to what is out there (Hacker News, Blogs, Twitter)

ii) Make sure I am always reading a book (audio books, usually)

iii) Be aware of the next wave of tech -- what _is_ bleeding edge? (current answer: Machine Learning, VR/AR, Self-Driving Cars, Blockchain)

iv) Find resources to learn them: Coursera, Udacity, local colleges courses, meetup groups.

</comment><comment><USER46> Find something interesting. If you want to be engaged, it has to be something that engages you. We spend most of our "mandatory effort" energy at school or work. If you have a side project or hobby, it will only happen if it's something you find at least somewhat interesting. Doesn't mean there can't be rote portions, but in general, it should be something you want to do.

Find a small task that you want to accomplish, identify something you want to learn along the way. Proceed to accomplish said task with the new tools.

</comment><comment><USER47> I don't think it's about learning new stuff. Find a really hard problem and work through it. That's how I learned the most. I am not talking about one month projects but something that takes a year or more. In a project of that size a lot mistakes you made at first come back to you over time and you can improve.

My most difficult projects have been done with C++ and took years. That experience still gives me an advantage even with JavaScript because I have developed pretty good instinct about what probably will work or not.

</comment><comment><USER48> From your description, it sounds like you're lacking a certain amount of discipline. You mention things you know you should be doing that you're not ("i rarely take the time to lern something in depth", "whenever i sit down i just keep reusing what i know").

I also think that having high standards is important if you want to keep improving.

So they're two general areas I'd suggest working on.

</comment><comment><USER49> Join the community and take some classes with [https://bradfieldcs.com/](https://bradfieldcs.com/) They've got a great set of experienced & knowledgable staff, plus a group of other developers who all care about growing in their careers. Just chatting with the other folks there has been a huge boost in my career.

</comment><comment><USER50> Practice meta thinking. How can I improve what I'm doing right now? A great side effect is it also reduces boredom on rote tasks.

</comment><comment><USER51> Try pluralsight. As someone who learns visually and understand why things are the way they are, it is been a godsend.

</comment><comment><USER52> Occasionally, a couple of times a year, I will challenge myself to learn some new technology and I will utterly immerse myself in that technology until I have a working basic knowledge of it. It is how I learned Emacs. It is also how I learned Vim when I grew tired of Emacs' shenanigans.

<comment><USER53> I'm not seeking a flame war, but what Emacs shenanigans were those? I mostly use Emacs, so I am just curious. Thanks!

</comment></comment><comment> dyu- Read other people's code on github/gitlab. Use a bookmarker to manage them. Then once you pick a project you are _really_ interested in, build something using that as a guide.

</comment><comment><USER54> > How do you guys keep learning new stuff?

You need a problem to solve. A problem which really matters to you.

> How do you keep improving?

Surround yourself with exceptional people. You will be the product of your five closest peers.

</comment><comment><USER55> By learning things in-depth and by having the attention-span and learning- wisdom to not skip slow-seeming basic tutorials.

</comment><comment><USER56> when you have a problem. first solve it yourself. get practical experience and make errors. then read about how other people solved it. make a better solution. write a blog post about it. share your code. argument on forums. teach it to others.

</comment><comment><USER57> Learn Haskell.

</comment><comment><USER58> you are an interesting writer

</comment><comment> surrey-fringe Adderall.

<comment><USER59> I'm upvoting it because it's incredibly common in high schools and college. People have to do tons of repetitive, boring stuff. They have piles of work. Many turn to Adderall to stay focused enough to get it done.

Like it or not, it's how a huge chunk of people in college "keep improving" despite the challenges they face not getting better over time.

<comment><USER42> > People have to do tons of repetitive, boring stuff.

A good programmer will automate this stuff and will not bother with it again. Maybe aderall is incentivizing the wrong behavior here.

<comment><USER59> You can automate homework and tests for your classes? That's news.

<comment><USER42> I was referring to programming work only

<comment><USER59> How do you automate arbitrary programming assignments without cheating by having someone else do them? There were piles of little problems I had to do in programming. It being mundane was obvious when contrasted to better options like having people build a neat app or game piece-by-piece as they go through lessons. Land of LISP comes to mind. Also has amusing artwork.</comment></comment></comment></comment></comment></comment>


Created stairclimbing robot – Thoughts? - <AUTHOR>

Video 1: http://bit.ly/1o7KfF4 Video 2: http://youtu.be/5fdXqIkuDAk Picture: www.walkerbotsystems.com
I made this because I wanted to make a robot that worked better than what a major company like iRobot could make.
Spent years on it, very interested to hear what the hacker community thinks about it.
I'd like to open source it to the world, giving ground drones a boost like air drones have had in recent years.
Thanks! <comment><USER2> why not put it on kickstarter and see how cheap you can get it made for in bulk?

<comment><AUTHOR> Good idea, I've began putting that together -just got a warehouse. I'd like to get 20 or so hard core hackers / makers to start a community around it. Open source it.</comment></comment>