What does it take to be a good programmer? - <AUTHOR> https://dimitrov2k.wordpress.com/2017/01/22/what-does-it-take-to-be-a-good-programmer <comment><USER2> My personal advice would be to follow the Ira Glass quote:

> _Nobody tells this to people who are beginners, I wish someone told me. All > of us who do creative work, we get into it because we have good taste. But > there is this gap. For the first couple years you make stuff, it's just not > that good. It's trying to be good, it has potential, but it's not. But your > taste, the thing that got you into the game, is still killer. And your taste > is why your work disappoints you. A lot of people never get past this phase, > they quit. Most people I know who do interesting, creative work went through > years of this. We know our work doesn't have this special thing that we want > it to have. We all go through this. And if you are just starting out or you > are still in this phase, you gotta know its normal and the most important > thing you can do is do a lot of work. Put yourself on a deadline so that > every week you will finish one story. It is only by going through a volume > of work that you will close that gap, and your work will be as good as your > ambitions. And I took longer to figure out how to do this than anyone I've > ever met. It's gonna take awhile. It's normal to take awhile. You've just > gotta fight your way through._

That is, code a lot of stuff. And, while doing so, _pay attention to how you feel_. Sometimes it'll be exhilarating, or you'll be proud of what you done. Other times, you'll be confused, or afraid, or pissed off about how something you wrote earlier is now unmaintainable or hard to make work. This is how you actually learn the insights behind all the dogmas, rules of thumbs, heuristics, good practices, etc. That's how you develop taste - that intuition which will help you write good code.

<comment><USER3> This nails it in my opinion. Too often I see people assume that programming/coding is somehow science based. It's not really, it's an art and you need to be a creative person to be good at it. The science comes later (sometimes never for some).

<comment><USER4> More of a craft than an art. Sometimes it's more like woodworking, sometimes it's more like plumbing, but it's rarely anything like painting.

<comment><USER5> Some years ago now, I came upon a lovely essay entitled "Hackers and Painters†". Here is how it begins:

        When I finished grad school in computer
        science I went to art school to study
        painting. A lot of people seemed
        surprised that someone interested in
        computers would also be interested in
        painting. They seemed to think that
        hacking and painting were very different
        kinds of work-- that hacking was cold,
        precise, and methodical, and that
        painting was the frenzied expression of
        some primal urge.

        Both of these images are wrong. Hacking
        and painting have a lot in common. In
        fact, of all the different types of
        people I've known, hackers and painters
        are among the most alike.

        What hackers and painters have in common
        is that they're both makers. Along with
        composers, architects, and writers, what
        hackers and painters are trying to do is
        make good things. They're not doing
        research per se, though if in the course
        of trying to make good things they
        discover some new technique, so much the
        better.

I think he got it right.

†[http://www.paulgraham.com/hp.html](http://www.paulgraham.com/hp.html)

<comment><USER6> Paul has an entire book of his essays by the same title, it's a great read all kinds of programmers. :)

</comment></comment></comment></comment></comment><comment><USER7> Well, I've been programming 30+ years.....

I think one of the main things that makes a good programmer is someone who cares about the final product. Ironically this doesn't necessarily mean you have to be super good at writing code. I have seen people with what seems basic coding capability very methodically build some really nice software. This is because they are very focused on the "end" not the "means". You see the thoughtfulness of what has been designed in. Sometimes, in the quest of writing "good code" it interferes with writing good software because the emphasis becomes getting good at the means to an end above the end itself.

Not to say improving your coding capability isn't of value, but it's done so you can create even more fantastic things.

<comment><USER8> Been programming for 10 years and it's distressing how inadequate and incompetent I sometimes feel. I like to rebuff it as Impostor's syndrome, but who knows, may be I am just bad and surviving because mediocrity is what the industry wants.

On the other hand, the pleasure that a good piece of code in a beautiful software gives is something I can perhaps relate to an opiate high (as a metaphor, never tried honestly :) )

<comment><USER9> I find it more like the feeling of having sorted out my wardrobe (folded things and thrown out old clothes, I hate doing this despite feeling better afterwards). Or a mix of that and say building a good looking Lego MOC from a limited set of pieces. But only for some things - I have several self- contained python scripts that give me this feeling. Sometimes fixing a bug in a clean way.

Other things - Android apps for example - tend not to give me this vibe. They feel more nebulous and "unfinished", like it's a miracle they work at all and will break at any moment in ways I couldn't understand.

</comment></comment></comment><comment><USER10> Shocking to me that there are so many articles on this. The strategy to becoming a good programmer is the same strategy to become good at anything else.

1\. Identify what it means to be good

2\. Work endlessly towards that aim

3\. Deliberately practice

4\. Decide to refine strengths or squash weaknesses. Do this as frequently as possible. Make sure you have an accurate assessment of what your strengths and weaknesses are. (5) and (6) can help with this.

5\. Consult the advice of those more experienced. As frequently as possible

6\. Allow your work to be publicly scrutinized. Do not work privately, the feedback loop should be as tight as possible to inform (1)

7\. Repeat (1) - (6) as frequently as possible

Do that and you will become better. Guaranteed. Note, this won't necessarily make you the best. However, it will make you better. Continue this process until you're as good as you desire. There, of course, are diminishing returns after a while.

<comment> FLUX-YOU >1\. Identify what it means to be good

You'll never get a solid definition for a good programmer, and that's the problem. If we knew that, we would have a list of things to learn and teach and we could easily make that a standard interview test before giving people a job. And no one would need to write any more "10 things you need to know as a programmer" articles.

<comment><USER11> If you ask other programmers, you will get a bunch of answers. If you ask the guy who cuts your checks, a good programmer is someone who can solve their problems and make their business more efficient.

<comment><USER12> The guy that cuts the checks doesn't know if the programmer is sacrificing long term maintenance for short term problem solving.

</comment></comment></comment></comment><comment><USER13> I think there's a personality trait that's really useful in programming, which is to be pessimistic in the short term and optimistic in the long term.

What I mean by that is that you don't expect some thing you just wrote to work the first time, and maybe not the second or third, and so on. But you expect that you'll eventually figure it out and it will work.

A short-term optimist would become discouraged by their expectations not being met over and over, while the long-term pessimist would not be sustained through the hard parts by imagining how happy they'll be when they made their thing work.

I think programming either repels people who are short term optimists or long term pessimists, or the process of learning to code transforms them into short term pessimists and long term optimists.

</comment><comment><USER14> I'm reminded of something Splosky wrote:

>The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it's not whether they prefer Python or Java. It's whether they can communicate their ideas. By persuading other people, they get leverage. By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it. Absent this, their code is worthless. By writing clear technical documentation for end users, they allow people to figure out what their code is supposed to do, which is the only way those users can see the value in their code. There's a lot of wonderful, useful code buried on sourceforge somewhere that nobody uses because it was created by programmers who don't write very well (or don't write at all), and so nobody knows what they've done and their brilliant code languishes.

<comment><USER15> This boils down to: write code for your peers, not for yourself. I always try to remember that, and write code that will be easily understood by others, rather than the cleverest possible way.

</comment></comment><comment><USER16> Personally I think the most important thing is a thirst for knowledge. There are plenty of people I finished school with that were much better engineers than me out of school, but they don't learn in their free time and they've stagnated. If you love to learn and you put your time into it, you will continually improve. With time you will run laps around those who don't.

<comment><USER17> Exactly. If you don't have passion to do something, it's really hard to get better at it.

Obligatory Randall Monroe quote that hits the nail on the head: "I never trust anyone who's more excited about success than about doing the thing they want to be successful at."

If you're not passionate or enjoying what you're doing, you're probably wasting your time.

</comment></comment><comment><USER18> Here's my take:

\- You need to think a certain way. You need to be able to see how to translate a problem into something a machine can execute. You need to be able to switch from the macro to the micro smoothly.

\- You need a certain level of proficiency with the tools you're using. Those can be programming languages/OSes/libraries/other software.

\- You need experience. Having seen different approaches to solving various problems. Which ones worked. Which didn't. Having tried a few different approaches, different languages.

\- You need domain knowledge. If you're working in a certain field you need to know the state of the art. You need to be able to read papers in the field. You need to be able to apply whatever techniques are required for the domain.

\- You need to be a problem solver.

These are sort of basic table stakes for being a good "programmer".

In most real world settings you need to have some more on top of that:

\- You'll need to be a good communicator. You will need to interact effectively with many different people, e.g. your boss, a product manager, junior developers. It's a team effort.

\- You need to understand users/customers. You need to be able to gather requirements, ask the right questions, and deliver something useful.

\- You need to understand the life-cycle of software. How long will it be in use? What sort of maintenance work will it need. How will it evolve?

\- You need to have some business understanding. Is what you're doing creating business value?

\- You need to appreciate the right trade-offs. Sometimes a crappy solution sooner wins over a perfect solution too late. And sometimes you should wait and have a perfect solution. That's just one example of a trade-off but our job is full of them.

\- You need perseverance. Sometimes things take longer than you think. Some bugs take a lot of work to chase down.

<comment><USER19> Algorithm knowledge too

<comment><USER20> Rarely, assuming you can read the docs enough to understand what pre-built library to use.

<comment><USER21> And assuming that A) the docs for the libraries do exist, and B) that, if the docs do exist, they don't look like the output of a million coked-up monkeys, that was then run through an automatic javadoc generator.

It's just staggering how shitty a lot of documentation is. I can forgive a one-person github repo for skimping on it, but I get a little irate when I'm using APIs from Fortune 500s and have to resort to decompiling because their docs are missing, incomplete, incorrect, or otherwise hot garbage.

<comment><USER20> Switch to Perl or Python if that stuff bother you. I find the libraries there are generally of a decent quality. JavaScript not so much.

</comment></comment></comment></comment></comment><comment><USER22> I've been programming professionally for the last 6 or so years, I've been in 4 teams across 3 companies. The reason this question generates so many answers with such great diversity is that the answer really depends on where you work and what you consider success to be.

At the first company, a good software engineer was a person who could effectively work inside of the team and get through the requirements for code review in a timely manner. While working at another job a good programmer was someone who could figure out the requirements by themselves and have a working product to show the boss in a timely manner. At my current a good software developer is someone who has a strong grasp of their language of choice, can deliver features to a Product Owner, and who can grab a project by the horns and lead from an architectural or design perspective.

None of these answers are wrong, they are just reflections of the engineering cultures they are born from.

Based on my experience a good programmer is someone that understands what success means in the culture they are currently in and can execute on that. Long term a good programmer is someone that continues to learn popular skills, products, frameworks, tools and can continue to follow the path that best suits them, whether that be a startup, large corp, freelance, or entrepreneurship.

It's all about opening doors for yourself to walk through.

</comment><comment><USER23> I wish everyone were forced to program everything on a machine with the resources of a Pentium I-class processor and say 64MB RAM.

Learn to conserve your resources, learn to eschew that which is not needed, and for crying out loud learn to not write bloated stuff. Even today, most programs I use on Windows 7 were written back in the days of Windows 95/98 and they still work faster than any current modern implementation you can find, and they're smaller.

<comment><USER24> Every programmer should be given ZX81 with 1kB of memory to start with.

<comment><USER23> And after that, the maximum hardware they should be allowed is what I mentioned. Unless you're crunching massive data sets, you don't need 64-bit (and most programs don't, excepting games and of course databases!)

</comment></comment></comment><comment><USER25> > I divide and conquer and get things done.

I had the same insight after many years like the author - that every problem you do can be broken down into smaller problems, which can be worked independently and tested independently. Why it wasn't obvious to me early-on I have no idea. I guess I never developed the intuition to see the efficiency of the method. Did anyone else among you had the same experience?

<comment><USER26> I definitely had that same experience. I've been writing code like that for about 15 years now and it's only started changing over the past two years or so.

I think it stems from a few reasons - 1\. I have a tendency to fix small problems that only need a one-time fix. So, lots of code, but disposable and messy. 2\. HS programming classes lacked a lot of the meta stuffs, like refactoring, working in groups, etc. 3\. Most of my coding years have been spent in a terminal where a combination of awk, sed, grep, xargs, etc works perfectly fine. A non-trivial number of problems can be solved that way, but it hits a wall pretty quickly.

For the past few months, I've been writing a lot of Clojure and have found that it fits my mental model significantly better than Python, C, etc. What's interesting is that all other languages I code in have dramatically improved ever since Clojure "clicked". Hell, even my bash-fu has become cleaner, terser, faster and more bug free. Funny how that works..

<comment><USER25> Hey, I'm currently using Clojure too and I feel the same way!

I think the reason it feels more natural is its emphasis on process instead of things. You think of computation as series of transformations, and that makes easy to establish causal relationships among events and thus help reason better about the system. (I think Steve Yegge first complained about Java, that it is a land of nouns)

I think the failing of OOP for me is that I never got what an object is! To me, an object always felt like a weird plane in a n-dimensional axes(because an object contains other objects), and it was hard to reason about that. For example, my first (atleast in my latent consciousness) reaction about Abstract classes was, what is it abstract about? If it is abstract about a bunch of things, that are only related because of the flow of code, I guess I wasn't smart enough to crack that effectively.

</comment></comment></comment><comment><USER27> I'm training my nephew, he's living with me while going to college in the philadelphia. He's been getting really frustrated hearing platitudes like this from his professors.

I've basically been mentoring him and having him read [https://github.com/braydie/HowToBeAProgrammer](https://github.com/braydie/HowToBeAProgrammer) , Comp Science with Python, and a couple books on linux and C to help with some lower level stuff.

He's been struggling a lot with C and Linux concepts. I've been there to help, and now I have strong opinion C and Linux would make a lot of programmers have a better understanding of their programs and computers.

<comment><USER28> I agree that it would help with a better understanding. I can't help but wonder why aspiring sysadmins and programmers DO NOT have immediate interest in such things? To me it just 'made sense' and 'clicked' almost immediately. Maybe I learned from a different angle, but it seems obvious to me to want to learn these things (C and Linux fundamentals, I mean).

<comment><USER27> I don't know for sure but. I noticed a lot of his class notes were written for windows and mac users. Also a lot of it was focused on java and python. I wonder if C and Linux classes became higher level electives.

</comment></comment></comment><comment><USER29> A good programmer is a good problem solver. But it also requires technical knowledge or ability to acquire it, as well as a good ability to communicate ideas.

Now, you can solve problems in many ways. They can be solved in the best interest of the programmer, or in the best interest of the company.

If I have a sales team, and give them a goal to sell $100, and they make a loan for $100 on behalf of the company and give me $100, that's probably not a good sales team. Let alone a 10x sales team.

But in software, technical debt (equivalent to buying with a loan) is something done frequently and some people mistakenly perceive it as being a good programmer. Usually because they cannot perceive the build-up of accrued work.

</comment><comment><USER30> > never be dogmatic about anything

Mostly agree with that with the exception of learning new things. Sometimes it helps to be dogmatic about things if your goal is to learn something new.

A prime example is TDD. When my goal is to build a working piece of software, I tend to do TDD for some parts and write tests post facto (or not at all) for other parts. When learning TDD it helped to force myself to be dogmatic.

Similarly, if you're learning functional programming in a language that isn't strictly pure, its helpful to be dogmatic about your approach and force yourself to do things the functional way, while in the real world introducing limited impurities may be better.

</comment><comment><USER31> "Write unit tests, they could prove to be invaluable, especially when you introduce changes to your codebase."

I always read this... What exactly is a unit test? What parts of my software should be tested? What are some examples of good unit tests and the code that is tested?

<comment><USER2> TDD is like object-oriented programming. Nobody can agree how precisely it should work _in real world_ , but "you'll know it when you'll see it". And you're 50% likely to embrace it, and 50% likely to decide it's utter crap.

<comment><USER32> TDD is more than having unit tests. TDD means that _the first thing you write are the tests_.

Why does that matter? It means that you're writing a user of your class _before_ you write the class. That means that the interface of the class gets designed from the mindset of a user, not an implementor.

More: The interface gets designed by someone who wants to be able to test all the externally-visible behavior of the class. If you can't test it, you have to think about re-designing the class interface - often by breaking it up into smaller classes. I've seen this in practice; the net effect of this is better class design (plus thorough tests).

That said, I'm considerably stronger of a proponent of _tests_ than I am of TDD. If you don't like the TDD approach, _still write tests_. Write lots of them. They'll often save you when you make subtle mistakes in your next set of changes. (Nothing like fixing a bug, running the tests, and getting informed of all the implications of your change that you forgot about.)

<comment><USER2> You see, I'm in that 50% of people who don't particularly like TDD. Even though I tried it, honest to god, several times.

> _That means that the interface of the class gets designed from the mindset > of a user, not an implementor._

From my experience, something entirely different happens. The class gets designed from the mindset of a _third party_ \- the tester. Which is, I believe, a mindset different from the user. If all you're testing is the externally-visible behaviour, fine. You're pretty much treating the class like a library. But if you start injecting stuff into the class to test if some other dependent services got called properly, etc. - and especially if you start designing the interface around such testability, then I believe it'll lead to bad, unreadable code. In particular, I believe adding complexity to the class for the _sole purpose_ of making it easier to test is a code stink.

TDD taken to the extreme prescribes that you should only ever write dumbest possible code that makes current tests pass. If you need more complicated behaviour, you first have to write tests for it. But this gets quickly out of hand if your project is meant to do anything more complicated than being a simple CRUD layer, because test complexity rises in lockstep with production code complexity. I've seen cases when people blindly following the test->code->refactor cycle created tests that themselves were isomorphic to the algorithm they were implementing, which makes one ask where did they have the code that tested if _tests themselves_ are implemented correctly?

So personally, while I like tests (particularly regression tests), I just can't make myself follow TDD.

<comment><USER32> Well, when I did it, I was the tester, and the user, and the coder, and I switched back and forth frequently - maybe in five minute increments. But I thought differently when wearing each of those hats. I could see the difference between ways of thinking in the design of the code.

> But this gets quickly out of hand if your project is meant to do anything > more complicated than being a simple CRUD layer...

I've done things a _lot_ more complicated than a simple CRUD layer. TDD held up just fine.

> I've seen cases when people blindly following the test->code->refactor cycle > created tests that themselves were isomorphic to the algorithm they were > implementing...

Well, blindly following _any_ methodology is likely to get you in trouble, one way or another. The problem is blindly following, not that they're following TDD.

That said, I did TDD, and now I don't. It worked well for me, I loved the kind of code that came out of it, and I still don't do it any more.

</comment></comment></comment></comment></comment><comment><USER33> It helps to be obsessive. Program in your spare time. Don't be one of these people that just learns what they need to know to do their job and then stops learning.

I've been programming professionally for 6 years and I'm learning as much today as when I started.

<comment><USER34> You don't need to be obsessive or program in your spare time to be a good programmer. It's great to continue to learn indefinitely. It's also great to leave work at work and build a life rich with a diversity of interest and activity. You can do both.

</comment></comment><comment><USER35> Simplicity. And when you think you have a good simple plan of attack, simplify more.

I have rarely had problems from being too simple, and when you do they are easy to fix, but over complication (over generifying) is always a beast to fix.

<comment><USER28> I agree with this, the simplest solution is often the best, and then work on it until it is elegant. In the visual arts, i use the same line of thought when i am turning a sketch into a full painting, for comparison.

</comment></comment><comment><USER36> I have read a really good book on this subject:

[https://www.oreilly.de/buecher/120174/9783897215672-weniger-...](https://www.oreilly.de/buecher/120174/9783897215672-weniger- schlecht-programmieren.html)

I think it is only available in German.

</comment><comment><USER11> First and foremost, add value to business by solving a business problem. Once you can do that, follow the DRY and KISS principles.

I've noticed developers who can quote scripture (best practices), but can't solve a non-trivial problem.

</comment><comment><USER37> Time, intelligence, resourcefulness, curiosity, stubbornness, ideally being physically next to programmers more competent than yourself, TIME

Adderall or something like that could also be a plus...

</comment><comment><USER38> If you have a choice between 500 lines of easy to understand, dumb code or 50 lines of abstract elegance, go with the easy to understand, dumb code.

<comment><USER39> I call that distinction the difference between an elegant and a clever solution. Clever being what you mention.

If the programmer can't tell the difference when implementing, then go for a simpler version, as you suggest.

\- Elegant: Nice, clean, well thought out.

\- Clever: Hackish, terse, too hard to understand for whatever benefit it brings.

</comment></comment><comment><USER40> In my opinion, "be humble" isn't a winning strategy.

Don't be so arrogant that you stop improving or fail to understand mistakes, but by all means don't be humble. Be proud of who you are and the work you've done. You work in an industry where 90% of people don't understand what you do. Chances are your own boss won't understand the actual value you're providing.

So don't be humble. "There's always someone better than you out there" \-- sure, but that person's not here, right?

<comment><USER41> I think that's crossing the wires of humility and confidence. You can be confident but humble. Confidence is your ability to come up with solutions and feel like they are the right solutions, and that they are good or excellent solutions. Humility is your ability to come up with solutions and realize that (1) they might not be the _absolute best_ solutions, (2) some solutions that look like they're better are actually better (and identifying these).

I think it interacts well with the concept of "strong opinions weakly held". Have a strong opinion that you've built a great thing, but hold it weakly so that in the face of clear arguments or evidence that it is in fact not great, or that another solution is better, you can admit it and adjust. This, to me, is the right balance of confidence and humility---in programming, as in life.

<comment><USER40> _You can be confident but humble._

I agree with you in principle, but again, I don't think that's a winning strategy.

A humble, competent woodworker creates a piece that's beautiful, visually rich, has a solid, study feel to it, and can be appreciated by _most_. The software engineer, who checks in a fix on the back-end service that pre-empts several bugs that had yet to be discovered, goes relatively unappreciated.

So _can_ one be humble and confident? Yes. Will it be understood and appreciated from the outside? Probably not. Is it a good strategy? Probably not.

I'd say a person has three options:

1) work for people who are technically competent enough to understand the true value of your work. In my experience, this is pretty rare out in the real world.

2) become a salesman and sell yourself at all times. This seems fundamentally opposed to dominant personality types in software.

3) stop being so humble and be proud of your work. This seems like the most logical choice to me.

Our industry is rife with imposter syndrome, legends of the 10x engineer, impressions that everyone else is succeeding flawlessly thanks to polished blog posts and GitHub portfolios [1], and endless pontificating on things that often boil down to fashion and code style. I don't think we need anything telling us to be _more_ humble.

You may be a completely average engineer writing CRUD software for some local bank. Yeah, maybe that guy blogging about his work at Google would do a better job than you. But he's not here, and your the best you company has found. You're valuable and capable. Be proud of what you've accomplished!

[1] - people have written recently about how Facebook causes negative feelings since you seem to see others only at their best. I think this is normal folks finding out what tech types have experienced for decades, but nobody has ever talked about it.

<comment><USER41> While "pride" is often used as the opposite of "humility"---which I think is maybe what you're getting at here---I don't think pride is always the opposite of humility. In particular, I think the word can mean many things, and the meaning you're using isn't the one that's often used as the opposite of humility.

Fundamentally, I agree that you should be proud of what you've done, even if 10X awesome dude at Google could have done better. For one thing, 10X awesome dude at Google is surrounded by other Google folks, and by 15+ years of Google technology. There's being aware that there are better possibilities out there ---indeed, being interested in them and even thirsty to learn more about them ---and there's being embarrassed about what you've done. You can be interested in the crazy things some people do and want to learn more about those things while still working at a smaller, more limited scope and being proud of what you achieve with what you've got. The latter is how you get confidence, the former is how you get humility.

In short, I think we're probably saying the same thing. When you build a thing, you should be proud of that thing---unless you deliberately cut corners for some other tradeoff, in which case you should be cognizant of why you did it and satisfied with the tradeoffs you made. But that doesn't mean you have to think there's no better way, nor even that you have to avoid looking into those better ways. Often, I think these things (thinking there's no better way, not looking for improvements) are what people mean when they refer to folks who aren't humble. Certainly, that's what I mean.

</comment></comment></comment></comment><comment><USER42> The current state of software development has been bothering me. Having spent several years in the software industry, I don't find the motivation to write good code, or design elegant fixes for bugs. I have worked in large MNCs as well as small companies and I see the same trend every where: The management does not care about code quality or elegance. They just want to ship things ASAP. As a result, even if a few developers care about code quality and elegance, majority of the developers don't. They just want to put together a working software, no matter how it is achieved, and be done with their job.

Now, even if the minority of developers have coded a few modules that look absolutely elegant and neat, it interacts with the majority of the software that is complex, ugly and sometimes bloated. On top of that, in many teams, developers often touch each others' code and modules to make bug fixes, enhancements, etc. which means all code (whether currently elegant or not) tends towards ugly.

How, under these circumstances, do you maintain your motivation to write good, clean and elegant code after having worked about 10 years in the software industry?</comment>


Why You Can't Use Your Phone's SIM in the iPad - <AUTHOR> http://www.wired.com/epicenter/2010/01/ipad-mini-sim/ <comment><USER2> When the SIM card size we have now was introduced everyone had to cut them down (SIM cards were as big as your normal credit card back then). You could buy special cutters. No big deal.

I also have no doubt whatsoever that the next iPhone will use a micro sim card.

<comment><USER3> Unless the _point_ is to stop you putting your iPhone SIM into the iPad.

<comment><USER2> Wanna bet? :)

</comment></comment></comment><comment><USER4> No one wants to swap SIMS back and forth between two devices constantly. People will Jailbreak their iPhone and enable the built-in tethering support or use a third party wifi tether app.

</comment><comment><USER5> I'm still not sure why everyone desires 3G so badly. Even when you have a great signal it isn't particularly fast. WiMax service is finally available in several areas. This is what I was hoping for.

<comment><USER6> 3G is plenty fast in many parts of the world. For surfing the web it generally feels as fast as using wifi to my adsl connection at home. For large downloads it's obviously slower, but seeing 1Mbit down isn't uncommon on good days. Also I can get a good 3G connection at my small cabin by the coast (where I don't even get warm water or indoor plumbing), I doubt I'll be seeing WiMax out there (and similar places) anytime soon.

<comment><USER7> Watching a page download is slow. 3G is that slow. It's ok for apps but for full webpage browsing, horrible. Don't know how people can stand it?

<comment><USER8> Where I live, 3G has minorly more latency and 2MBit down. And the only reason it isn't 7Mbit down (as fast as my home connection) is because I have an iphone 3G vs a 3GS. Alot of the 3G browsing slowness is from the smartphone web browser being slow vs. the actual connection itself. It's alot more zippy for me to browse the web tethering to my laptop than it is on my phone.

<comment><USER9> Here in Canada Rogers already rolled out 21MB/S on its network. I've seen speed test performed, and people are genuinely getting near this figure, and better than my 14MB/S home connection.

</comment></comment></comment></comment></comment><comment><USER10> This might actually spoil my plans to buy an iPad. I usually won't need 3g coverage on it, but being able to throw in a sim for a road trip or whatever was a huge plus for me. Enough to pay the extra for the 3g model at least.

I remember shaving down multiple headphone connectors with my pocketknife so I could use them in my original iPhone. A normal headphone jack was probably the biggest selling factor for the 3G for me. Ugh, curse apple and their beautiful products.

</comment><comment><USER11> How long until you get a product/service that cuts your old SIM to the micro SIM size and gives you an adapter so you can continue to use it in your cell phone?

<comment><USER12> Or just clones the old SIM and writes out the data to a blank micro SIM.

<comment><USER13> How would one go about doing this? Isn't all subscriber information locked?

<comment><USER12> I was thinking along the lines of how the iPhone was first unlocked using blank sims. Older sims had a vulnerability that allowed the key to be easily bruteforced. Unfortunately, it appears that newer cards have not been cracked yet, and can't be duplicated. I haven't been keeping up with this :)

</comment></comment></comment></comment><comment><USER14> It seems clear that this was a negotiation point for AT&T to create artificial lock-in on the 3G service, in return they were willing to go month-to-month.

Even if you were able to tether the iPad to the iPhone, AT&T will chart a similar monthly fee. It will be interesting to see if Apple is willing to create separate models to work on CDMA, etc.

</comment><comment><USER9> The bigger reason why _I_ cannot use my SIM in the iPad is because my networks 3G operates on AWS 1700. Which, thank you Apple, decided to exclude because they're whoring themselves to AT&T and blocking T-Mobile, and in subsequence Wind here in Canada.

</comment><comment><USER15> Apple uses new standard as opposed to old - same story, different tech

<comment><USER9> Agreed, this adoption is inevitable and it's preferable to be ahead of the curve than behind. The real issue will be if the next iPhone ships _without_ micro-SIM.

I would also like to see Apple launch a new Touch with 3G.

<comment><USER16> "I would also like to see Apple launch a new Touch with 3G."

They already have, it's called the iPhone. I think what you really mean is iPhone with no contract data only plan.

</comment></comment></comment><comment><USER17> Wouldn't it seem likely that a future iPhone will use this new sim format? Would make sense, might force a few folks into the upgrade path.</comment>


Deep Learning Without Poor Local Minima - <AUTHOR> https://arxiv.org/abs/1605.07110 <comment><USER2> There is a great post [1] on stack overflow that might help contextualise this development.

[1] [http://stats.stackexchange.com/questions/203288/understandin...](http://stats.stackexchange.com/questions/203288/understanding- almost-all-local-minimum-have-very-similar-function-value-to-the/203300)

<comment><USER3> That is helpful thanks.

</comment></comment><comment><USER3> It is difficult to understand the implications of these assumptions and if they really apply to supervised deep learning nets.

It has been know for a very long time that simple models, like the Random Energy Model, displays a spin glass transition at low temperature. (the REM is a p-infinite limit the mean field p-spherical spin glass used in the earlier papers by LeCun) So it is expected that a random network may also display this kind of behavior, and, therefore, there could exist a large number of global minima, separated by very large barriers.

see, for example [http://guava.physics.uiuc.edu/~nigel/courses/563/essays2000/...](http://guava.physics.uiuc.edu/~nigel/courses/563/essays2000/pogorelov.pdf)

However, it has been argued that this is unphysical for very strongly correlated systems like proteins and random hetero-polymers (with non-local contacts). Instead, one would have a spin glass minimal frustration. This would lead to a highly funneled energy landscape, with a single (or a few local) minima. This would lead to a rugged convexity.

[https://charlesmartin14.wordpress.com/2015/03/25/why-does- de...](https://charlesmartin14.wordpress.com/2015/03/25/why-does-deep- learning-work/)

It would be helpful if some practitioners could comment on the reliability of the assumptions in this paper.

<comment><USER4> As I understand it, the main result of the paper relies on these 4 assumptions:

\- That the dimensionality of the output of the network is smaller than that of the input. That is usually the case in image recognition, where the image is width x height x channels dimensional, while the output is usually a much smaller number of label-wise probabilities. It probably isn't the case when you generate data from some smaller representation, e.g. with autoencoders, image generation, etc.

\- That the input data is decorrelated, and that the input data is uncorrelated with the output ground truth. The former can easily be obtained via a whitening transformation in many cases in practice. I am not quite sure about the latter.

\- That whether a connection in the network is activated or not is random with the same probability of success across the network. Active means the ReLU activation function has output greater than 0. Many people initialize weights in the network with some 0-mean random variable and some constant bias, in which case that assumption should hold true at the beginning of training. Whether that assumption holds throughout training could easily be verified empirically - i.e. by monitoring the network's activation.

\- That the network activations are independent of the input, the weights and each other. That's obviously not completely true - the network activations of a given layer are a function of the previous layer's activations and weights, and ultimately of the input in the first layer. With large enough networks, this may hold sufficiently in practice - any single activation should not depend very significantly on any other single variable.

I may have missed something in interpreting the maths, any comment is appreciated. From a practical standpoint, especially for computer vision, these assumptions seem quite reasonable. I am not qualified however to comment on the proof of this result, so I would wait on peer review. Still, it is heartening to see the theory of deep learning finally catching up with practice!

<comment><USER5> >..and that the input data is uncorrelated with the output ground truth.

I haven't read it yet. Is that just linear correlation, or full independence? If it's independence, then there's no signal, right?

<comment><USER4> Linear correlation. Actually, it seems to be a bit more general than just uncorrelated, i.e. if the input is a m by n matrix X and ground truth a k by n matrix Y, the author requires that XX^T and XY^T to be full-rank. A whitening transformation would yield the identity matrix for XX^T, but that's a bit stronger than what's strictly necessary. My interpretation of XY^T being full- rank meaning X and Y being uncorrelated might indeed be mistaken.

<comment><USER6> Could you clarify what is the mathematical definition of "X and Y are uncorrelated" for two matrices?

<comment><USER4> I am not quite sure there is such a thing. :p I was playing a bit loose with the mathematics here, and trying to find some more intuitive way to explain "XY^T is full-rank", but it got confusing. Sorry about that. I will edit my initial post accordingly. (Ah, can't edit it seems, oh well)

</comment></comment></comment></comment></comment></comment><comment><USER7> I have a feeling, albeit one not informed by deep knowledge of either field, that there are already-known pure mathematical results that can cause a <insert your favorite way of saying "paradigm shift"> in machine learning, just "waiting to be discovered" by people in the latter field.

All this talk of maxima and minima reminds me of Morse theory, for instance (and that Wikipedia page is more than what I know about it). [1]

Is there any sense in what I'm saying?

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

</comment><comment><USER8> For context, if true (the paper has not been peer reviewed yet), this confirms what has already been suspected and empirically evaluated about deep learning: that the non-convexity of neural networks is not an issue.

</comment><comment><USER9> If these claims are true (specifically, that every local minimum is a global minimum), then why did the earlier neural networks have poor performance? Why did we need advancements like pretraining via stacked RBMs and dropout in order to make deep learning converge on usable/better models?

<comment><USER8> A quadratic function is a convex function with a global minimum. Doesn't mean it's a good model for much.

<comment><USER9> But the tricks/advancements I mentioned are not changing the function. They changed the initial weights and how the cost function was explored.

<comment><USER10> But they do change the function. You use RELU now, instead of pretraining.

<comment><USER9> Using ReLU units is a newer advancement and I agree that changing the activation function does change the cost function. However, before Hinton got all excited about ReLU units, he was still showing huge improvements just by using pretraining and later by using dropout, which shouldn't change the cost function.

<comment><USER8> Dropout helps with convergence/optimization, sure. The existence of a global minimum says nothing about the time required to reach it. Important to note that dropout isn't as common anymore; it's not a huge win.

</comment></comment></comment></comment></comment></comment><comment><USER11> My main quibble from this paper is:

> For deeper networks, Corollary 2.4 states that there exist "bad" saddle > points in the sense that the Hessian at the point has no negative > eigenvalue.

To me these sound just as bad as local minima. Also I don't think it's standard to call something a saddle point unless the Hessian has negative as well as positive eigenvalues. Otherwise there's no "saddle", more something like a valley or plateau.

They claim that these can be escaped with some peturbation:

> From the proof of Theorem 2.3, we see that some perturbation is sufficient > to escape such bad saddle points.

I haven't read through the (long!) proof in detail but it doesn't seem obvious to me why these would be any easier to escape via peturbation than a local minimum would be, and I think this could use some extra explanation as it seems like an important point for the result to be useful. Did anyone figure this bit out?

<comment><USER12> A saddle is a critical point that's not a local extremum--the Hessian could just be zero, for example, like x^4-y^4 at (0,0).

<comment><USER11> Ah yep, true. I'd forgotten you can still get the saddle effect from higher- order derivatives, the Hessian eigenvalues aren't enough to characterise it.

I was thinking of examples like (x-y)^2 at zero, although I guess that's still a local minimum, just not a unique local minimum in any neighbourhood.

</comment></comment></comment><comment><USER13>
        2) every local minimum is a global minimum
        3) every critical point that is not a global minimum is a saddle point, and

Are these not the same thing?

<comment><USER14> f(x) = (1 - x^2)^2

This satisfies 2) but not 3).

The point x = 0 is a critical point but it is not a global minimum and it is not a saddle point.

<comment><USER15> Could 3) be replaced by "there are no local maxima"?

</comment></comment></comment><comment><USER16> This paper would be much improved by cutting the material on linear models, which AFAIK is not new. Then by properly explaining the assumptions (Axa...) they are trying to do away with for nonlinear models rather than referring the reader to previous work.

</comment><comment><USER17> Similar results have been known for years, but this is good stuff. I guess I'll keep reading news.y....

</comment><comment><USER18> Oh yeah, our deep learning is a super cool technology, no need to study math, believe us, just buy more GPUs and they will help you, throw the data on the fan. Or, even better, give us your data, we'll decide what to do with it for you, upload your data to our cloud and relax.

Consider the following question - how many layers do you need to build a RELU network to approximate x^2 function on [0,1] with 1e-6 accuracy.

<comment><USER19> Actually not so much, I was wondering about similar things some time ago.

[https://github.com/ghostFaceKillah/tensorflow- experiments/bl...](https://github.com/ghostFaceKillah/tensorflow- experiments/blob/master/basic-functions/quadratic_function_nn_learner.py)

<comment><USER18> Exactly, this simple example demonstrates how hard is to learn even a simple function. Playing with your code, 10 hidden units give error 0.6 in 1000 iterations, 1000 hidden units give error 0.02 in 10000 iterations so it takes way longer to train. This is not an easy technology.</comment></comment></comment>


SQL Server 2017 for Linux (and Windows) goes live - <AUTHOR> https://arstechnica.com/gadgets/2017/09/microsoft-ignite-2017-azure-sql/ <comment><USER2> It's not clear from this post, but the official release date looks like Oct 2 based on: [https://blogs.technet.microsoft.com/dataplatforminsider/2017...](https://blogs.technet.microsoft.com/dataplatforminsider/2017/09/25/sql- server-2017-and-red-hat-enterprise-linux-offer/)

<comment><AUTHOR> Yea, looks like the article is just wrong. Thanks for clarifying Brent!</comment></comment>


Early Japanese Animations: The Origins of Anime (1917-1931) - <AUTHOR> http://www.openculture.com/2014/06/early-japanese-animations-the-origins-of-anime-1917-1931.html <comment><USER2> > but it often shows a level of daring, complexity and creativity not > typically found in American mainstream animation.

I would even argue that some anime easily top non-animated TV shows. It baffles me that so many TV shows are critically acclaimed for things anime has done a decade ago.

Another aspect is that Ghibli accomplishes what Disney/Pixar seems to have forgotten: Creating a story that is entertaining (and enlightening) to both adults and children. So I think it's very, very unfortunate that these movies are not better known in the west.

<comment><USER3>
      > I would even argue that some anime easily top non-animated
      > TV shows. It baffles me that so many TV shows are critically
      > acclaimed for things anime has done a decade ago.

From one fan to another, I'm curious: what things are you specifically thinking of?

For me, one of anime's most engrossing qualities was the multi-episode stories. Back in the 90s there weren't a lot of American TV shows (outside of soap operas) that had the multi-episode story arcs that were common in anime; typically everything was always wrapped up in a single episode.

Today, the American TV shows with the most rabid followings (like Game of Thrones) have latched on to exactly that addictive quality. I'm not entirely sure we can give anime credit for innovating here, though - after all, American soap operas were doing multi-episode stories since literally the dawn of television.

      > Ghibli accomplishes what Disney/Pixar seems to have forgotten:
      > Creating a story that is entertaining (and enlightening) to both adults and children

I'm surprised you named Pixar here. I think their movies have almost all been great for both kids and adults.

<comment><USER2> I wasn't referring to the format (episodic) but the content. Shows like Game of Thrones or Breaking Bad are not only addictive because they're episodic, but because they're well written and have something to take with after watching. The characters are extremely elaborate. Those shows feature stories that don't rely on exhausted tropes or even deconstruct existing tropes. I think TV shows are better produced and their bigger budget is a plus which makes it more accessible to a broad audience. But when I read how avant-garde and never-seen-before the next hot TV show is, I can probably name an anime that did it before. Lately though, I'd say I probably like TV shows more and it almost seems as if animes are in a generational change, which is for the worse.

I may be a tad harsh about Pixar, but I think they're merely "good" for adults. There are some exceptions to this rule (Wall-E and Up for instance) but overall they are more or less Lion King or Ariel with a different setting e.g.: you know what will happen. Ghibli movies have this sense of mystery and uncertainty that'll keep an adult watcher hooked. I also like that they are a bit more merciless, even though that makes them unsuitable for a very young audience. Pixar movies can be watched 6+ with certainty whereas you'd better check if the Ghibli movie is suitable for your child.

</comment></comment></comment><comment><USER4> Am I the only one to prefer the early, detailed style? It looks much better than the chaeply produced stuff that I have become to associate with snimé.</comment>


Ask HN: Books that made you a better Software Engineer? - <AUTHOR> If you had to recommend 2 books, which ones would you recommend? <comment><USER3> Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7th-11th October 1968, P Naur, B Randell.

Software engineering techniques: report on a conference sponsored by the NATO Science Committee, Rome, Italy, 27th to 31st October 1969, JN Buxton, B Randell - <USER2>

These two books (actually conference reports in a unique style) got me thinking about software engineering as a discipline. Much of what was said then is applicable today.

</comment><comment><USER4> PHP and MySql Web Development and Real World Haskell are what you might consider formative for me.</comment>


Earning Money using Electric Cars - <AUTHOR> http://www.economist.com/blogs/babbage/2011/05/electric_cars

<comment><AUTHOR> The utility and scale of the idea in the future could be enormous. Imagine a giant, distributed battery grid. The only difference is that these batteries also power cars.</comment>


A Non-Mathematical Introduction to Using Neural Networks - <AUTHOR> http://www.heatonresearch.com/content/non-mathematical-introduction-using-neural-networks <comment><USER2> Hmm... how should I put it?

I don't see why anyone non-mathematical would want using neuronal networks in the first place. There's lots of machine learning tools that are designed to work out of the box (decision trees, SVMs) whereas neuronal networks on the other hand give you greater flexibility but make it radically easier to shoot yourself in the foot if don't understand the whole thing. And "the whole thing" involves a gobload of math - including multidimensional calculus, little bits of probability theory, and numerical optimization.

That said, it's probably ok if you just want to get your feet wet to see what it's all about. There's even (decent) libraries for Python: <http://deeplearning.net/software/theano/> <http://code.google.com/p/pynnet/>

Matching tutorial: <http://deeplearning.net/tutorial/>

<comment><USER3> I don't think you need to know all the math behind NNs in order to successfully learn how to use one. I certainly don't and I've been using the encog library (by Heaton) for a while with great success. And you definitely do __not __need to be a mathematician to need one.

Yes, there are some general principles and concepts you need to know/understand, but nothing particularly deep.

Edit: Actually I'd highly recommend encog: it's very easy to use, it's extremely well documented and for those of us that do not have a formal education in NNs it's a great place to get started. <http://www.heatonresearch.com/encog>

<comment><USER4> I'm not sure you've actually addressed his concern. I think the ability to use one (in an engineering sense) and get seemingly good results is separate from the issue of fully utilizing them. You are likely better off using a much more hands off tool that requires little knowledge of the underlying mechanism (to his point, d trees and svm).

</comment></comment></comment><comment><USER5> The mathematical explanation is surprisingly simple. A 2 layer neural network consists of 2 matrices A and B and an activation function f. The neural network computes this function where in and out are vectors:

        out = f(A*f(B*in))

where f is applied to each element of a vector. You can see how this generalizes to more layers.

Neural network learning algorithms are given (in,out) pairs and try to find A and B to minimize the mean square error, for example by using stochastic gradient descent.

<comment><USER6> Could you provide a link to mathematical sound introduction into neural networks?

I was always turned out because it was always explained in some magical manner...

<comment><USER7> if f is the logistic function, then neural networks basically correspond to logistic regression.

<http://en.wikipedia.org/wiki/Logistic_regression>

which has been around since the 1940s... (multilayer neural networks correspond to hierarchical logistic regression--just plug them together). this should be in any reasonable stats book.

if you mean mathematically sound in terms of learning, etc, then chris bishops "neural networks and pattern recognition" is pretty good, full of sage advice and justification.

</comment></comment></comment><comment><USER8> This is why neural networks were very popular for a while - they were sold to the public in a completely non mathematical way.

<comment><USER9> The fact they are called "neural networks" is testament to this :)</comment></comment>


California Grown Coffee Starting to Percolate - <AUTHOR> http://news.yahoo.com/video/california-grown-coffee-starting-percolate-050825451.html

<comment><USER2> Awesome ! I thought that growing coffee was impossible out of equator belt. I'd like to drink a cup of this coffe.</comment>


John McAfee confirms he is in Guatemala - <AUTHOR> http://www.whoismcafee.com/guatemala/

<comment><USER2> So, he essentially admitted that the coordinates were real and a mistake to be released.

<comment> angry-hacker The blog post where he wrote the fake coordinates was a clever trap is missing.. at least I can't find it.

Edit: <http://www.whoismcafee.com/i-am-safe/> (404 now...)

<comment><USER3> Here's a mirror: <http://kristofferr.com/files/IAmSafe-McAffee.png>

</comment></comment></comment><comment><USER4> Is anybody seeing irony in the fact that McAfee has become an entity whose suspicious signature (Behavior) has made him a suspect in an event detrimental to his host system (murder) & he's now trying to elude the dragnet laid to catch him ?

You'd think he'd find sthg better than changing directories, I mean countries.

Maybe false positive Karma is a thing after all.

</comment><comment><USER5> Whoismcafee dot com doesn't appear to actually _answer_ that question.

To anybody not familiar with this: Yes, the same McAfee as that spam/trojan thing that has been bundled with windows for the last decade or so.

I guess he got accused of murdering his neighbor (in Belize) and is now on the run from the Belize government.

</comment><comment><USER6> Good for him. Hopefully he can be "safe" in relatively short order.

</comment><comment><USER7> Another another another apology incoming.</comment>


Microsoft Whiteboard max's disk read write by just opening the App - <AUTHOR> https://whiteboard.uservoice.com/forums/915919-whiteboard-for-windows-10/suggestions/40158985-fix-heavy-disk-usage-on-whiteboard-when-using-tabl <comment><AUTHOR> The Windows 10 Microsoft Whiteboard App reads/writes ~7Mb/s by just opening the App,I have confirmed this on X86 and ARM. Posting with the hope it gets eyes from MS as Bug reporting seems non existent for Whiteboard, unlike other Open Source MS apps ie. Github</comment>


From Nigeria With Love: MailChimp's Poetry Spam - <AUTHOR> http://techdrawl.com/News-Post/Fresh-Voices/From-Nigeria-With-Love-MailChimps-Poetry-Spam <comment><USER2> OMG, I wish I worked at MailChimp. Why doesn't my office have spam readings once in awhile? Does anyone have a sense of humor at my office? No :-D</comment>


Ask HN: How do you sync your keepass database between multiple computers? - <AUTHOR> I'm considering using Keybase but not sure if it's secure enough. <comment><USER2> I keep mine on Dropbox, works for me.

<comment><USER3> Same</comment></comment>


Introducing jsfmt - <AUTHOR> https://algorithms.rdio.com/post/jsfmt/

<comment><USER2> wow. that blog post was really hard to parse because it buried the lead so deep.

from the github repo

jsfmt formats javascript and allows AST searching and rewriting</comment>


The age of technology is over - <AUTHOR> https://www.businessinsider.com/stock-market-crash-tech-stocks-vulnerable-to-continued-meltdown-2019-1 <comment><USER2> The excess value (relative to global average) from technology goes to to:

1\. consumers,

2\. investors,

3\. growing market share in the expense of traditional industries.

The ratio of where the value goes changes over time. Older industries like airline, car, and telecom industries are examples of high-technology industries where the profits margins are lower and market share grows only moderately and consumers get most of the benefits.

Netflix is movie company, FB and Google are advertisement companies, Tesla is a car company. Amazon is retailer mostly. At some point the consumer income is the limiting factor for tech gigants. With the growth constantly far above the average they would quickly exceed all the disposable income in the world.

</comment><comment><USER3> That has to be the most hilarious title I've seen in a while. The "age of technology" as in literally the entirety of human history from the moment we invented tool making and developed the ability to use fire?

And yes, clearly 2019 is the year that humanity will peak and everything is going to be downhill from here as we will never again be able to create any new technology. I know because somebody posted on Business Insider about this.

<comment><USER2> > That has to be the most hilarious title I've seen in a while. The "age of > technology"

You are supposed to comment the article. Commenting the tile is considered bad form. The article is not discussing what you want to discuss.

<comment><USER3> The article talks about how the "age of technology" is clearly coming to an end with the Nasdaq in imminent peril due to this development.

My comment is pointed towards the title because it perfectly summarizes the foolishness of the overall article.

<comment><USER2> You commented the advance of technology in general.

The article was about the end of higher than average returns from the current technology companies. That's what the "The age of technology is over" meant.

Technology can advance with leaps and bounds while the ROI for the tech companies is in par with other companies.

<comment><USER3> Both comments are untrue. The author uses his pessimistic outlook on technology in predicting the stagnation of technology companies. That's why my comments center around showing how such an opinion is foolish. Because besides it, the author provides no other evidence, factual or otherwise.</comment></comment></comment></comment></comment>


The Amazing Story Of Appengine And The Two Orders Of Magnitude - <AUTHOR> http://point7.wordpress.com/2011/09/03/the-amazing-story-of-appengine-and-the-two-orders-of-magnitude/

<comment><USER2> Looks like a great explanation for why the pricing model changed. There must be a gazillion apps around that are also incredibly wasteful by accident, and in the old model nobody had any reason to debug and fix the issues. After all, the code looked totally innocuous.

</comment><comment><USER3> Awesome write up of the new billing system. New post with some changes: <http://point7.wordpress.com/2011/09/04/appengine-tuning-1/>

</comment><comment><USER4> Holy crap. You can have a good dedicated server for the price of 2 days of google app hosting.

Try caching some of the "Datastore Reads", if possible, you're bleeding money.

<comment><AUTHOR> Have a read of the analysis there. It looks like the reads are just a bit of crap code, optimisable and probably can be eliminated.</comment></comment>


The Zuckerberg Files – A digital archive of Mark Zuckerberg's public utterances - <AUTHOR> https://www.zuckerbergfiles.org/ <comment><USER2> you really going to make people sign up for this? looks like a good idea but just drop the silly e-mail harvesting already</comment>


Internet Census: Port scanning /0 using insecure embedded devices (2012) - <AUTHOR> http://internetcensus2012.bitbucket.org/paper.html <comment><USER2> > There were in fact several hundred thousand unprotected devices on the > Internet making it possible to build a super fast distributed port scanner.

"What're you doing?" "Just going to run this little binary on a few hundred thousand devices that don't belong to me. No big deal."

It is chilling to consider that there are that many devices out there just completely open and ready to accept and binaries just like that - telnet and you're in. It used to be that botnets seemed so.... out of reach. You had to infect a large enough number of Windows machines, and you had to keep them all running without getting caught by anti viruses and whatnot. But this? Who needs to write malware when you have this?</comment>


China Economics Blog: China's empty city of Ordos - <AUTHOR> http://china-economics-blog.blogspot.com/2010/01/chinas-empty-city-of-ordos.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ChinaEconomicsBlog+(China+Economics+Blog) <comment><USER2> This is blogspam from AlJazeeraEnglish

<http://www.youtube.com/watch?v=0h7V3Twb-Qk>

Just some background info where everyone seems to ignore: Ordos has higher GDP per capita than HongKong.

<http://opinion.globaltimes.cn/observer/2009-12/490502.html></comment>


Elon Musk Is Working Too Hard - <AUTHOR> https://www.bloomberg.com/view/articles/2018-08-17/elon-musk-is-working-too-hard <comment><USER2> The article has a point, but I dislike the heavily condescending attitude of it.

At the same time, I do believe that social media is a mixed bag. It is great for interaction with the community (even I have gotten two responses from Musk himself on twitter about SpaceX), but as with most things in life it can be detrimental in too big doses. There is a lot (A LOT) of toxicity to be found, and limiting usage of social media might be a good idea for prominent leaders (Trump comes to mind)</comment>


Deeply Moving: Deep Learning for Sentiment Analysis - <AUTHOR> http://nlp.stanford.edu/sentiment/index.html <comment><USER3> If you're interested in using deep learning for nlp, I highly suggest putting a pot of coffee on and watching this a couple times: [http://www.socher.org/index.php/DeepLearningTutorial/DeepLea...](http://www.socher.org/index.php/DeepLearningTutorial/DeepLearningTutorial)

The really neat part is moving away from bag of words representations. Bag of words was always a bit of a hack. But seriously, watch those videos, it will give you a good idea on how it all works, the op is using similar methods.

Edit: thanks gallamine, I fixed the link

<comment><USER4> Thank you so much for this, I'm just getting going in deep learning. I've been viewing and reading Hinton's stuff, and found it tough to get traction (I am just starting, that is not intended to be a comment on Hinton, but on me).

</comment></comment><comment><USER5> I know there's deep hate for java around here, but here's another relevant link. (You could probably shoehorn in scala or clojure as well) This is a direct tutorial for doing deep learning.

[http://nlp.stanford.edu/courses/NAACL2013/](http://nlp.stanford.edu/courses/NAACL2013/)

Take a look at a recent homework assignment they had to do with Named Entity Recognition and Deep Learning: [http://nlp.stanford.edu/~socherr/pa4_ner.pdf](http://nlp.stanford.edu/~socherr/pa4_ner.pdf)

It's good to see neural networks being leveraged as they are. Conditional Random Fields have been dominant for sequence based classifiers for a while. We've been needing to push the envelope a bit further.

</comment><comment><USER6> This is pretty cool. I love how in some sentences, the actual words or phrases are all marked positive, yet it is able to accurately mark the entire sentence gets correctly marked as negative. For example, from the paypal/mailpile article from the front page:

 _Are the risks larger because we are successful?_

"larger because we are" is marked as positive, "successful" is marked as very positive, the rest are marked as neutral. But the entire sentence is marked as negative (which to me it certainly reads negative).

<comment><USER7> How is being successful negative? If anything it's neutral, being successful is clearly good, having exposure to larger risk is negative, a net neutral.

<comment><USER6> Being successful is positive, but in the context of the article (paypal not releasing their money) the statement is negative.

</comment></comment></comment><comment><USER8> Fascinating project, I worked for a data analytics company and we always had a basic test that we'd try to throw at any Sentiment analysis engine.

// Negative > This is shit.

// Positive > This is the shit.

Most engines can't sort that out. I'm definitely going to take a more in-depth look at this.

<comment><USER9> "This is shit" isn't inherently negative. Consider the question "what is the brown substance in the toilet?" and you can answer a neutral "this is shit".

<comment><USER10> Sentiment analysis implies attitudes, which imply context. A robust sentiment analysis system must either be trained on a targeted corpus (in which entities/concepts and attitudes are well aligned) or include some way of establishing a more targeted context after having been trained on a general- purpose corpus.

That is to say, people generally aren't describing the physical material occupying a toilet in a corpus of movie reviews.

<comment><USER9> I was referring to the previous comment, where the two lines about shit were used as a test for any sentiment analysis engine. Your point about context is what I was trying to illustrate.

</comment></comment></comment></comment><comment><USER11> FYI, since it's not exactly obvious: in the live demo ([http://nlp.stanford.edu:8080/sentiment/rntnDemo.html](http://nlp.stanford.edu:8080/sentiment/rntnDemo.html)), you can double-click on the tree image that it generates to see a zoomed-in version with more information, and correct improperly labeled nodes to help the algorithm learn. Try it with some Rotten Tomatoes review snippets - <USER2> the ones I tried, it got almost all of them right.

<comment><AUTHOR> Also, they have a demo that supplies you with a sentence that you can check and correct in order to teach the model [1]. It was actually easy and nice enough to keep me there for quite some time giving me a few nods/laughs and forcing me to think about the sentiment structure of the sentences. The only request I would have for a feature is a "skip" button, since at times I am not entirely sure in regards to the sentiment of a sentence (you can still reload the page though and it will have the same effect).

[1]: [http://nlp.stanford.edu:8080/sentiment/labeling.html](http://nlp.stanford.edu:8080/sentiment/labeling.html)

</comment></comment><comment><USER12> It's interesting how the decades of research in computational linguistics still come down to rating a single sentence + or -. And though they are getting better, the systems are still pretty open to 'obvious' attacks:

> I have seen many good movies, this one is not one of them.

> All movies, except this one, are good.

> I thought this movie was going to be bad, but I was wrong.

which rate positive, positive and negative.

I'm full of hope that the modern neural net and linear algebra type methods will eventually crack this though!

<comment><USER5> Another hard problem: sarcasm. it's fun to think about how to approach it.

<comment><USER13> Yeah, so much fun.

<comment><USER5> Clever. hehe That aside, has anyone saw any recent works on detecting sarcasm? There's not much advancement in this that I've seen.

<comment><USER14> This deep learning method is an example from going from bag-of-words to document level analysis. To detect sarcasm, you'd have to make another leap from document analysis to personality modeling. Humans can detect sarcasm because they^H^H^H^Hwe can build a mental model of what is expected to be said—by a particular author or about a specific topic. If a statement is sufficiently contradictory to our mental model and we are sufficiently confident of the predicted sentiment, we know it's sarcasm.

Without knowing who said something or in what context it was said, even humans would fail to accurately detect sarcasm. Here are some hasty examples that could vary, depending on the author or situation:

"Michael Bay really outdid himself on that one." "That Kanye West song is so well-written." "It'd fun to build that PHP."

<comment><USER5> Very good point. I love the way you framed that. I took some very cursory attempts at doing it at the sentence level based on ngram representations, obviously this was limited.

You also bring up a very good point about humans being able to barely detect it. It's hard to infer from text without tone a good portion of the time.

It'd be neat to see what we could do with tone as an input feature (obviously we couldn't get that most of the time) but maybe if enough tech becomes available that voice inputs are common, sarcasm can be a relevant enough problem to solve.

In general, I know it's not really worth it to try to solve (that I could think of immediately anyways) aside from "just because".

That being said: ambiguity is ambiguous. What can you do aside from approximate as best you can?

</comment></comment></comment></comment></comment></comment><comment><USER15> Structured sentiment analysis has been around for a while - meaning models that take into account the overall document as more than just a bag of words (reference below to a 2007 Google paper). There are a surprising number of challenges for those new to the problem, e.g. sarcasm or idioms. It's kind of fun to work on.

[http://acl.ldc.upenn.edu/P/P07/P07-1055.pdf](http://acl.ldc.upenn.edu/P/P07/P07-1055.pdf)

</comment><comment><USER16> Ethical considerations have always kept me from investing too much time in areas of computational linguistics that seem to be predominantly used for the purposes of rapidly commercialised and now widespread mass surveillance system development. While it is an interesting area, in fact it represents a change to society that I would personally feel happy not to have accelerated. Not sure if anyone else has an opinion on the ethics, here.

</comment><comment><USER17> I would like to get an accuraye overall result of the sentence. For example this "I found the result of this study amusing since it was far from accurate." was classified as nothing less than neutral but I was trying to see if it would pick up the sarcasm. Is sentiment analysis not yet there?

</comment><comment><USER18> New Ruby module on Github to import & parse the treebank corpus: [https://news.ycombinator.com/item?id=6395420](https://news.ycombinator.com/item?id=6395420)

</comment><comment><USER19> Does anyone familiar with NLP know how the sentence trees are parsed? Can something like python's nltk do that? I always assumed that was very difficult to do well.

<comment><AUTHOR> Parsing is one of the most competitive areas of research in NLP and yes, you are correct, doing it well is very difficult. State-of-the-art performance on newswire data is around 95% if you score local structure.

miket has already replied with a well-established lexical parser. The Stanford parser is one of the most robust out there, you could also go for the BLLIP (or Charniak or Charniak and Johnson) re-ranking parser [1] that although a bit old and fiddly (the GitHub version is very solid though) tends to perform well.

However, both the Stanford and BLLIP parsers are constituency parsers (now we are going to go all linguistic here) and there is an alternate paradigm of dependency grammars [2]. I have heard a couple of times that Google is running a variant of the MaltParser [3] in-house and it is a very solid piece of work (the command-line interface requires some patience though, but there is plenty of documentation). People for example in Information Extraction (IE) tends to favour dependency grammars, probably since you get relevant modifiers closer to your point of interest in the tree.

Now, we could also go into richer grammars like Combinatory Categorial Grammar (CCG) [4] and Head-driven Phrase Structure Grammar (HPSG) [5] but I think this reply is long enough by now...

Personally I favour dependency parsing since there is more annotated data for it across plenty of languages. Also, the paradigm can cope with a lot of linguistic wonkiness that is very much present in language other than English (free word order and non-projective structures for example)

[1]: [https://github.com/dmcc/bllip-parser](https://github.com/dmcc/bllip- parser)

[2]: [http://en.wikipedia.org/wiki/Dependency_grammar](http://en.wikipedia.org/wiki/Dependency_grammar)

[3]: [http://maltparser.org/](http://maltparser.org/)

[4]: [http://en.wikipedia.org/wiki/Combinatory_categorial_grammar](http://en.wikipedia.org/wiki/Combinatory_categorial_grammar)

[5]: [http://en.wikipedia.org/wiki/Head- driven_phrase_structure_gr...](http://en.wikipedia.org/wiki/Head- driven_phrase_structure_grammar)

<comment><USER19> thank you ninjin

</comment></comment></comment><comment><USER20> It doesn't seem to understand valence shifters. It seems to have been trained on not good, but not bad is counted as negative too.

</comment><comment><USER21> Sentiment analysis has never been this good. Sentiment analysis has never been good.

</comment><comment><USER22> Wasn't there a company that did a similar sentiment analysis on Twitter and wanted to trade the stock exchanges on that information? I wonder what happened to that.

<comment><USER23> You might be thinking of Derwent Capital - [http://www.bloomberg.com/news/2013-02-04/dcm-capital-puts- it...](http://www.bloomberg.com/news/2013-02-04/dcm-capital-puts-itself-up- for-sale-in-online-auction.html)

</comment></comment><comment><USER24> "In constrast, our new deep learning model actually builds up a representation of whole sentences based on the sentence structure. It computes the sentiment based on how words compose the meaning of longer phrases. This way, the model is not as easily fooled as previous models."

Wait, _that_ is all that's necessary to invoke the term "deep learning"?? Wow. Wikipedia seems to agree. I had thought there was something more to this buzzword than "slightly less shallow heuristic guesswork than the AI you already know and love".

<comment><USER25> To possibly clarify, the way sentences are structured is itself learned, rather than relying on hard-coded rules.

Maybe you still find deep-learning disappointing, but there have been some successes from having the computer learn multiple levels of internal structure/representation from data.

<comment><USER26> The problem is that many sentences (at least in English) exhibit some structural ambiguity (more than one valid syntax tree). Also you have to take into account pragmatics and sociolinguistic factors (like variation), and so on. You can't just feed a formal grammar to a program and expect it to correctly parse English. We're still a LONG way from being able to correctly parse all (or even 99%) of possible English sentences.

<comment><USER27> It does not depend on hard-coded rules. It learns various probabilities for sentence structures. The result is much more flexible than a formal grammar.

<comment><USER26> True, but that still means you require some decent priors about the text that someone reading it might have. People generally have an idea of what the person who wrote it might be like, what sort of things to disregard, and so on. My point was that learning the "structure" of the language is not enough. I don't know exactly how this program works though, so it might be decent at that, I haven't read up on it enough.

<comment><USER27> The program doesn't need to know priors, if you make sure the priors for the test set are close to the same as the ones for the training set :)</comment></comment></comment></comment></comment></comment>


Hacker news IRC channel? - <AUTHOR>

I use IRC quite a lot to quickly find the solution for small problems that Google doesn't solve.
However all channels are fairly specialized and I sometimes feel the need to discuss more general concepts that span several categories. That is normally not appreciated on IRC, you'll be asked to stay on topic.
Hacker news feels like this endless well of knowledge that can be tapped and it would be cool to have a Hacker news channel on IRC. <comment><USER2> Apparently #startups on freenode is what most people use.

For lisp stuff, you can find a lot of people in ##sicp on freenode.

<http://news.ycombinator.com/item?id=436479>

</comment><comment><USER3> I think #startups on irc.freenode.com is more or less the official channel.

<http://ircstartups.pbwiki.com/></comment>


10 Weblog Engines Reviewed - <AUTHOR> http://www.smashingmagazine.com/2008/08/29/10-weblog-engines-reviewed/

<comment><USER2> This is a really good review - I like the idea of showing examples using prominent blogs.</comment>


Battle.net Experiencing a DDoS Attack - <AUTHOR> https://twitter.com/BlizzardCS/status/1267950140603674626 <comment><USER2> Self inflicted? They've been having massive lag spikes at the same time range every weekday. After a couple hours it seems to settle down.</comment>