You Weren't Meant to Have a Boss: The Cliffs Notes - <AUTHOR> http://www.paulgraham.com/bossnotes.html <comment><USER2> I think people are reacting not to the (nonexistent) suggestion that MegaCorp programmers _intrinsically suck_ , but rather to the implicit suggestion that they suck _for not starting startups_.

To continue with the lion analogy, suppose that lions in the zoo were there by choice rather than by force. Then, when seeing how pathetic zoo lions are compared to wild lions, we might conclude that they somehow lack the courage to live their wild lives of destiny.

The negative spin is that MegaCorp hackers are cowardly lions. This predictably provokes a defensive response. The positive spin? The cage doors are open.

<comment><USER3> _The negative spin is that MegaCorp hackers are cowardly lions._

There are all kinds of reasons people might work at a big company besides cowardice. They might need the health insurance, or to pay off their student loans. They might want to focus on other things besides work.

Sigh. I wish people would stick to arguing about what I actually _said_ in the essay, instead of what I "implied." If I wanted to imply something, I'd say it.

<comment><USER4> _Sigh. I wish people would stick to arguing about what I actually said in the essay, instead of what I "implied." If I wanted to imply something, I'd say it._

If you want people to read what you say literally instead of drawing inferences, don't use metaphors.

 _Seeing those guys on their scavenger hunt was like seeing lions in a zoo after spending several years watching them in the wild._

Do you mean that these scavenger hunters were pacing around and growling? Of course not -- you expect us, as readers who understand the nuances of English, to understand that this is a metaphor; to think about the differences between caged and uncaged lions; and to project those differences onto humans.

Guess what? Metaphors are imprecise. Different people have different notions concerning how caged and uncaged lions differ. Different people will project these properties onto humans in different ways.

I agree entirely with what you're saying in the essay, but I think it might have been far more effective if one of your proof-readers had said "you know, this is liable to be misinterpreted, maybe you can reword it?"

<comment><USER3> It is not considered unreasonable to expect readers to be able to understand where a metaphor ends. Metaphors wouldn't work otherwise.

Imagine if I'd written something about tides, and begun with a metaphor about swinging a condom full of liquid on the end of a string. No doubt some Christian fundamentalists would be so offended at that point that they'd stop reading and write angry blog posts about how "distasteful" it was to compare God's Earth to a condom. Would that be my fault?

You have to draw the line somewhere. If you write about things that are difficult and/or controversial, some people will misunderstand you. I try hard to write as clearly as I can, but the things you'd have to do to make an essay proof against readers who were really stupid or personally oversensitive about some topic would ruin it for the other readers.

<comment><USER5> being controversial correlates highly to being successful.

If noone hates what you are writing, it is probably boring.

</comment></comment></comment></comment></comment><comment><USER6> I am very surprised at the discussion this essay has touched off. I thought it was almost obvious what pg was saying. I have been from start up to large company to starting my own start up to working for a large company again. I've lived the same changes two times over now and can completely relate to the caged lion feeling. It's not that I'm a better programmer (or person for that matter) when I'm working for myself. It's that working for a large company has certain restrictions on freedom that come with the added security and comfort.

In short, I feel, act, and behave differently based on my environment. There are a lot of nice things about working for a large company and I work for a good one right now. Still, if I didn't have my own projects to work on (another start up coming on!) I would go stir crazy. I thought the analogy to a lion was quite flattering.

</comment><comment><USER7> PG lives in a different world.

Considr Austin TX, the 3rd largest computer tech startup hub in US (read: the world). Programmers are NOBODY here, they're disposable code monkeys, and literally all startups I personally was involved in were started by polished and sleasy "MBA types" who regularly push engineers aside and have pictures of M3s and Porsches on their personal blogs. Needless to say, all local startups are a joke, (I won't point fingers). Local investors are ( _for real_ ) interested in seeing your 10-year financial projections, P&L and all that other useless crap. When I told that to my SV-based mentor he laughed his pants off.

If Austin is like that, I can only imagine how pathetic the rest of the world is, and how hard it is for them to get Paul's points.

If Paul is not exaggerating, SV is truly unique and everybody with a CS degree should be moving down there. And working for Yahoo/Google/Facebook in SV is _truly_ a huge waste of your life.

<comment><USER8> True, but I warn you, there are no girls here. Seriously, Sillicon Valley is a big sausage fest.

<comment><USER9> This is hands down the best rebuttal to pg's arguments for young men to start a SV startup that I've read.

(Actually, for young women, too, but for the opposite reason.)

</comment></comment></comment><comment><USER10> 3 big reasons why something so simple gets blown out of proportion so often:

1\. "I have a blog. I have to blog everyday. I have nothing to say today. I'll find something to say anyway."

2\. "You said something on-line and I didn't have an opportunity to see your body movements or hear your voice tonality. So I misinterpreted it."

3\. "I have to show everyone how much smarter I am than everyone else. So I'll disagree with something someone smart has said. That'll show'em."

</comment><comment><USER11> More of an apologia than a summarization.

Atwood _et al_ are responding to the more general idea, quite consistently expressed, that the startup life is better than the corporate life. By itself, this is neither true nor false, so it's simply not worth fighting over.

 _Everybody_ wants to be rich. _Nobody_ wants to fail. Startups offer both.

<comment><USER12> My grandfather used to say, "If you don't fail every now and then, you are not doing enough."

Failure is a good thing. It is from failure that new things are learned. I am willing to fail if that failure ultimately leads to riches. In a startup failures and riches are not mutually exclusive if the entrepreneurs are willing to learn from their failures.

<comment><USER13> That depends entirely on whether the failure was worth the risk and amount that was actually learned. I can see this often not being the case.

</comment></comment></comment><comment><USER14> Paul, I don't think you get it though.

I've got to say here that I read the essay with the same distaste as Atwood, particularly because of its opening paragraphs. I loved the message, and agree with the theory, but I had a tough time with the presentation.

The connotation that it isn't natural to be an employee and as such those that do are by extension "unnatural" is troubling. I realize that you're not saying "all corporate programmers suck", but clearly, people who have the courage, will, and sheer balls to found their own companies have a unique talent that isn't shared by all.

Of course, the programmers you work with are in perfect harmony with startup life. For them, having a boss is not the way to go. They need to be entrepreneurs. It's in their being.

Some people though, are perfectly happy being employees. These people should not be starting their own companies. They should continue to enjoy life and have fun on their corporate scavenger hunts. They are innately different than the startup founder. That much is obvious.

To extend and equate this difference with being "lesser" - whether by choice, ignorance, or chance - is where you run into trouble with a lot of us. You're inserting a good/bad comparison into an exercise that should remain strictly an examination of difference. Hence, Atwood's suggestion of narcissism.

Of course being a founder is "natural" to you. I've learned that it is to me as well, and no doubt it's natural to everyone on this site.

Sure, a lot of people that work for corporations should look to embrace startups, especially those that are disgruntled. No, startup founders are not a select few geniuses; they are those of a given talents. Surely you of all people realize this. To suggest that everyone shares these talents, or that those who don't are somehow misguided sounds more like religion than business though.

Finally, I don't even think this post was needed. This post suggests that a great many people who read the essay didn't understand it, due to their lack of intellect. In fact, it is more likely that they understood it perfectly, and the problem lies more with how the author chose to support the thesis.

</comment><comment><USER15> "You suck, but not because of who you are intrinsically -- only because of your environment. You must become a startup founder, or you'll probably continue to suck."

To me, this retains PG's argument but also shows why it's so easy to be offended by it.

(personally I agree with his argument -- I've been in the cage and I've been in the jungle, and I know damn well which one gives me stomach ulcers and which one helps me become a better human being.)

</comment><comment><USER16> I don't think it bodes well for the clarity of your essay that you're using the beginning of your last paragraph to defend your thesis.

Atwood admits that your, "essay does contain some fair points," but he also indicates that he, along with others, had trouble getting through it because of the distasteful metaphor you lead with. In light of this, I am sure you can understand them not spotting the thesis in your last paragraph.

Finally, perhaps someone with a "conscientiously broadened mind," as you so describe yourself, could fathom a working environment unlike the one you describe? I imagine that new-hires at 37signals, or Fog Creek, would not feel they are missing out because they are not currently heading a start-up. Quite the opposite, I would think they are grateful for the opportunity, the environment and the benefits. Not all successful companies treat their developers like animals. And the ones that don't tend to inspire loyalty. Can you really not see how you may have offended some of these people?

<comment><USER3> The thesis is throughout the essay. Didn't you read it? I just quoted the last paragraph because it is a direct contradition of what they claim I said.

 _I imagine that new-hires at 37signals, or Fog Creek, would not feel they are missing out because they are not currently heading a start-up._

Now I'm convinced you didn't read it. There is a paragraph explicitly about this:

      You can adjust the amount of freedom you get by scaling
      the size of company you work for. If you start the
      company, you'll have the most freedom. If you become
      one of the first 10 employees you'll have almost as much
      freedom as the founders. Even a company with 100 people
      will feel different from one with 1000.

</comment></comment><comment><USER17> Honestly, I'm not sure why everybody is up in arms about either one of these essays (full-length version and/or Cliffs Notes). Both of them seem right on target to me.

Reminds me of an essay by Stephanie Tolan titled "Is It a Cheetah?", which offers cheetahs as an analogy for gifted children who are confined to (and as a result, crippled by) public school systems.

Excerpt: "The cheetah needs to run! Despite design and need however, certain conditions are necessary if it is to attain its famous 70 mph top speed. ... It must have plenty of room to run. Besides that, it is best motivated to run all out when it is hungry and there are antelope to chase. If a cheetah is confined to a 10 X 12 foot cage, though it may pace or fling itself against the bars in restless frustration, it won't run 70 mph."

Full article: <http://www.stephanietolan.com/is_it_a_cheetah.htm>

<comment><USER18> Imagine if Stephanie had started the essay like this:

"A few days ago I was sitting in a cafe in Palo Alto and a group of public school kids came in on some kind of field trip.

They looked familiar. I spend nearly all my time working with gifted kids, but something seemed wrong about these kids. There was something missing.

And yet the public school they went to is considered a good one, and from what I overheard of their conversation, they seemed smart enough.

... I was in Africa last year and saw a lot of animals in the wild that I'd only seen in zoos before. It was remarkable how different they seemed. Particularly cheetahs. Cheetahs in the wild seem about ten times more alive. They're like different animals. And seeing those public school kids on their field trip was like seeing cheetahs in a zoo after spending several years watching them in the wild."

<comment><USER3> This is such a bogus comparison. Few kids get to decide where to go to school; practically all 25 yo hackers get to decide whether to try starting a startup or keep working for their current employer.

<comment><USER13> I would like to see a large survey of 25 year old hackers from around the country who would like to start a startup but decided against it, or just couldn't. It is nice to believe that it's just lack of inspiration, or misconceptions about the process, but is there anything else? Maybe.

Or maybe it is because people truly do not want to work hard. Never in my life have I met someone who prioritizes hacking above all else for more than the time it would take to defeat a small video game.

One question, by "start a startup," would that refer to getting decent investment and living a quality of life overall comparable to that of one's peers, or bootstrapping and every day fighting for survival with a hope that one day the tides will turn? If the later then those outside the valley are going to be inspired with a much stronger "yearning for the sea" before they will make the jump without regret.

<comment><USER19> I have lots of 25-year-old friends who would like to start a startup but decided against it. I'm trying to convince at least one of them to reconsider, since my cofounder quit yesterday and that leaves me a single founder. Their reasons are pretty varied, but include:

1.) One has Marfan's syndrome and needs to work at a place with guaranteed health insurance to cover his medical bills.

2.) Two would like to start a startup in the future, but feel that they don't currently have enough experience. This was also my reason for not founding a startup straight out of college.

3.) One was always interested in startups, but his family background has steered him towards law school, and so he doesn't have the technical skills to start a tech startup.

4.) One has a wife and two stepkids to support.

5.) One (my former cofounder) wants to start a startup, but got into Harvard Business School and figures a bird in the hand is worth 10 in the bush.

6.) One likes _working_ for small companies, but enjoys his work-life balance too much to take the plunge and actually start one himself. He also doesn't desire the financial rewards that come from a successful startup all that much.

7.) One couldn't do it because he's on a student visa and it was doubtful that the visa would let him co-found a company.

They're all good reasons, and you can see that they're a lot more varied than them all being caged animals.

<comment><USER18> Those are great examples. I think the beginning of PG's essay has two issues that provoked most of the negative comments. He was playing around a metaphor instead of a clear situational simile, and then he left out the details of how these programmers looked like caged animals to him. The latter prompted follow-ups like this: <http://news.ycombinator.com/item?id=142050>

So instead of readers seeing this:

      "MegaCorp programmers looked purposeless and embarrassed,
       like caged lions, while they were doing the scavenger hunt"

they saw this:

      "MegaCorp programmers who I saw at a scavenger hunt are
       caged lions with something missing in their lives."

The first sentence wouldn't draw much outrage. The second implies those programmers act liked whipped puppies around their girlfriends, look confused at the gym (if they even go to the gym), etc. [The negatives will vary depending on how you view caged vs free lions.] The programmers don't just act like caged lions in a situation, those programmers ARE caged animals.

To be fair, the actual line in the essay is this: "And seeing those guys on their scavenger hunt was like seeing lions in a zoo after spending several years watching them in the wild." It's just preceded by lots of prose that reinforce the IS relationship.

<comment><USER20> Your post is one of only two uses on the web of the phrase "situational simile." However, it actually seems like a useful term. Did you make it up, or are you just one of the few cool kids to use it on the interwebs?

<comment><USER18> "Situational metaphor" is widely used. In this case, because I'm emphasizing an explicit, limited comparison, I used "simile."

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> What is so much more fulfilling about startups that is unlikely to be attained elsewhere?

<comment><USER21> I would say that you have much more creative freedom as a tenured professor (if getting to that point hasn't completely destroyed your spirit) than as a startup founder. Look at some of the stuff Noam Chomsky has been able to devote almost all of his time to--it sure isn't linguistics.

<comment><USER22> You probably shouldn't use Chomsky as an example. Chomsky is the ultimate outlier. He's got a superhuman intellect and it's actually exceeded by his superhuman patience.

I will tell you a Chomsky story. One night in grad school I was wandering the library stacks looking for anything other than what I was supposed to be working on. I found myself in front of Emerson's complete works, picked out, let's say, Volume 18, and stumbled on Emerson's critique of the Mexican- American war. I noticed that he was saying exactly what Chomsky was to say about the Vietnam war 120 years later. I thought hey maybe Chomsky hasn't seen this, so I wrote him a letter: Dear Chomsky, you don't know me and I'm just a grad student in an unrelated field, but I thought you might enjoy this quote from Emerson. Love, me.

A couple weeks later, I was surprised to find that Chomsky had written me back: Dear Daniel, I wasn't aware of that quote and found it very interesting. Thanks for writing. Love, Chomsky. Well, that was nice of him. End of story.

Not quite. Two _years_ later, I got another letter: Dear Daniel, I was at your university last week and had been looking forward to giving you a call and meeting you. Unfortunately, blah blah blah came up and there was just no way. Hopefully next time. Chomsky.

This one flabbergasted me. By that time I had learned enough about academia to realize that in the star professor system, star professors never do that. They talk to students maybe after class or if they sign up for an appointment. Other than that, they avoid you because they don't want to lose star power. One guards one's fraternizations very carefully, and there are quite fine and quite strict lines demarking the various equivalence classes. Probably most celebrity systems work that way. It's the same reason Hollywood actors date each other.

Anyway, the fact that Chomsky would write a letter like that to a nobody of a grad student, the lowliest of the low, really touched me. It also convinced me that, among star academics at least, the man really is a mutant. A decent mutant. Who would remember something like that after two years?

<comment><USER4> _Who would remember something like that after two years?_

I think most academics do.

My own story: When I was an undergraduate student, I wrote a paper which gave sharp bounds on the round-off errors resulting from computing FFTs using floating-point arithmetic; and I noticed that my bound was much better than the bound given by Higham in his Numerical Analysis textbook (which is, by quite a wide margin, the most widely used textbook in the field). I sent him an email -- "Dear sir, I noticed that in section X.Y of this book, you prove a bound of N sqrt(N) log(N) instead of N log(N); if you change foo to bar in your argument, you'll get the stronger bound which I prove in my paper (see attachment)" -- and he wrote back to thank me and tell me that he would make sure the improved bound was in the next edition of the textbook.

A year later, a copy of said textbook arrived in the mail, "compliments of the author".

Two years after that, when I was a graduate student at a different university, I went to a talk by Higham; and at the end when we were asked for questions, I introduced myself (by name, no mention of FFTs) and asked a question. Higham answered my question, and then went on -- in front of most of the department -- to announce that I had found an error in the first edition of his textbook, and that when I wrote to him he had assumed that I was a professor rather than an undergraduate student.

I think "star professors" are actually _more_ likely to remember things like this, simply because someone pointing out something they didn't know, or a mistake they made, is so unusual. It's people like Chomsky, Higham, and Knuth who remember such contributions and can afford to send out free books -- or $2.56 cheques -- to those who provide them.

<comment><USER22> But the thing Higham remembered was orders of magnitude more significant than thing I was talking about, which was genuinely trivial.

Still, I take your point that among _true_ star professors this kind of brilliant decency isn't as uncommon as I made out. I was using the term "star professor" a little more ironically than that.

I definitely disagree with what you said about most academics, though!

<comment><USER23> My research advisor was a star professor in a big name school. Also very arrogant. He considered me one of his best students (so no personal axe to grind), but I was turned off by his arrogance. Moral of the story: you can't generalize!

<comment><USER22> While I agree about the perils of generalization, the problem in this case is not that - it's that we're using the term "star professor" ambiguously. My fault for not being clearer in the first place.

</comment></comment></comment></comment></comment></comment></comment><comment><USER24> PG: I read your essay and most of the comments/remarks across the Internet. In my experience starting at a company, junior hackers learn from senior hackers, most of the problem solving skills I have learned was from other hackers (often more senior than myself). Even learning what not too do.

If young hackers starts companies, who do they learn from? Do they just learn these problem solving skills and people skills by themselves? I am sure YCombinator has something to do with this process...

<comment><USER25> Young hackers who start companies in cahoots with YC are mentored by old hackers who start companies.

</comment></comment><comment><USER26> My quick comments about the zoo thing:

1)PG compared two same animals, a lion I think, therefore he does NOT think company workers are inferior to founders. He thinks that they are generally the same type of people.

2)The founder lion's neck is on the line a lot and he has a lot at stake. He lives in a dangerous jungle. The company lion on the other hand has little risk and is a bit like an animal in a cage.

3)One can view the animal inside a cage as either being cruelly mistreated or being sort of lucky and spoiled.

</comment><comment><USER27> Paul used the caged lion metaphor to illustrate differences in freedom in a vivid way. That's it. This freedom disparity is a fact. Don't try to say that "less freedom" implies "sucks" just because the vividness offended your sensibilities.</comment>


The Flynn Effect - <AUTHOR> https://en.wikipedia.org/wiki/Flynn_effect <comment><USER2> This is more commonly know, but does not fit into wikipedia agenda:

>Wicherts also points out international evidence that average IQs can rise dramatically over time — by as much as 20 points in the Netherlands between 1952 and 1982, for example. In fact, Africa's current estimated "average IQ" is about the same as Britain's in 1948. The phenomenon of rising average IQ scores over time is known as the "Flynn effect," named after political scientist Jim Flynn, who popularized the result.</comment>


Programming is not math? - <AUTHOR> http://j2kun.svbtle.com/programming-is-not-math-huh <comment><USER2> I write software that runs on various jet engines. There is a lot of software that goes onto a modern commercial engine, but the general theme of the software I focus on is the modeling of the underlying engine dynamics using sensor data. It's very math- and physics-based. A thorough knowledge of linear algebra, signal processing, regressions, and clustering/neural network algorithms is essential, among other things.

It's not the kind of environment where typical startup aphorisms apply ("fail fast, fail often", "don't be afraid to pivot", etc). So every month or so when another "programmers don't need to know math" article comes out, usually written by a web programmer, I have an impulse to represent the other side of the divide, but I usually find so many misconceptions and poor assumptions in the original article that I conclude it's too much work. So I am glad that the author has done the job for me here.

What I have observed, again anecdotally, is that web programmers are generally more vocal about programming than systems programmers and scientific programmers. It makes sense in the historical context of the internet, but I don't think that this bias is properly accounted for when people on Twitter/HN/etc discuss "programming" and what it requires.

I don't think it should be controversial that programming is founded upon the study formal languages, mathematics in particular. So even if you don't need math to do your programming work on a day to day basis, it's because a lot of very smart people have solved some very difficult math and language problems over the decades so that _you have the luxury of ignoring_ the mathematics your code relies on. This is all ok. But the implicit hostility towards mathematics that a lot of these articles demonstrate really makes me concerned about the influence it will have on the next generation of programmers. Moore's Law has allowed a certain level of indifference to mathematics in the past few decades since you could always throw a newer processor and more memory at a problem, rather than solving it via a better algorithm. But that situation won't last forever.

<comment><USER3> Personally I have the impression that many web programmers, especially those who has never worked with anything other than the web, are ignorant of the existence of other branches of programming.

In many aspects programming for the web is _simpler_. For example the quality requirements for a microwave oven firmware are much higher. You can't easily deploy a hotfix to production after shipping 100k units. I have a feeling that most of complexity in web programming is _incidental_. It's a result of how poorly the web is designed as a platform. Of course it's very successful commercially but from a technical standpoint it isn't good.

john_b, could you give an advice how to get into aerospace industry? It always seemed very challenging and I'd love to have a chance to work there.

<comment><USER4> I can't believe that in 2014, web development is still getting this mindless, indiscriminate bashing. The kind of web development you might have seen, or done, may have been simpler, but please don't generalize it to everything. Every field has its low ends and its high ends.

I'm generally speaking a web developer, I work in bioinformatics and I can assure you that what I do is not "simpler" than most other programming, please get over yourself.

Your microwave example actually undermines the point you're trying to make. If microwaves are indeed so far more technically advanced, why then is it so hard to upgrade them? I know it's a stupid question, but so is the point that brought it up.

I've spent 15 years having to justify the worth and quality of my work to non- web developers, a lot of whom I wouldn't even trust with the most basic programming tasks. That included some of my teachers at University (!), who not only undermined me all the way through my dissertation, but actually proceeded to steal my work and use it as a teaching base for years after. This was after they admitted that they could not, in fact, fully understand my work, mostly because they disregarded it for the longest time.

I'm pretty damn proud of being a web developer, and even though I do or have done other kinds of programming, I'll stick to web development, if only to prove to people like you that we, too, are programmers.

Rant over.

<comment><USER5> What does you bioinfomatics code have to do with web programming?

To me it sounds like you have a bioinfo library that you've integrated with a website.

If your bioinfo code is actually mixed in with your web code then this is _exactly_ what real programmers talk about when we trash web programmers.

<comment><USER6> > To me it sounds like you have a bioinfo library that you've integrated with > a website.

??? This is the hostility the above poster commented about; why did you assume that they were using unsafe / uninventive practices? From what? How did you read their development of a complex piece of software as "you made glue code", without external information, or, perhaps, internal bias?

> If your bioinfo code is actually mixed in with your web code then this is > exactly what real programmers talk about when we trash web programmers.

Why would you frame a hypothetical situation, _unrelated to their comment_ , as evidence of your beliefs? How does this make sense?

<comment><USER7> It's pretty clear people use "web programmer" as a synonym for "poor programmer" or "lesser programmer".

Oh, you work on hard problems and complex software? I wouldn't call that web programming!

I promise there are enough hard problems and complexities in the "web" for any programmer in existence to choke on. HTTP/CSS is just a small part of the "web"; it doesn't speak to the complexities of the system behind the curtain.

</comment></comment></comment></comment></comment></comment><comment><USER8> All of this discussion, quite possibly because so much of the initial conversation happened on twitter, embeds a lot of assumptions into the words used that seems to result in a lot of people talking past each other.

There's "programming" that's a single person essentially performing research- level mathematics; there's "programming" that's a thousand people writing to a spec without considering anything about the structure or complexity of their code. Programming is obviously not just math, nor is it no math.

If you become defensive when someone says "programming isn't math" _or_ when someone asserts that it is, you're failing to think critically about the both words they're using and about the assumptions you're making.

Disclaimer: I have a degree in mathematics, and I'm a programmer. I can't think of the last time I used anything from my college years directly in programming itself, but I attribute a lot about the way I code and think about problems in general to having a mathematical background.

<comment><USER9> What area of programming are you in?

There is a lot of math I don't understand because I don't have the background, and I wish I could. Differential equations and fft come to mind.

<comment><USER10> The discrete version of fast Fourier transform essentially does a matrix vector multiply faster than usual. If you are not familiar with matrix vector multiply, then think lots of multiplications and additions. Now, what fast Fourier transform does is take advantage of the fact xy + xz = x(y+z) that we know form mid school algebra. Note the right hand side has fewer operations to perform. The other thing that FFT uses is symmetry. It recognizes that two things that it needs to compute are really the same in value, so it computes it only once.

You can understand FFT without much deep math, it is just clever use of these two properties. Study it, you will really enjoy that cleverness. It is one of those algorithms that still makes me break out into a grin.

That said FFT can get more mathematically involved when you want to compute them on vectors whose lengths are not powers of two. Then it gets into primality, Chinese remainder theorem etc. However, for basic understanding and coding it you need none of these.

EDIT: I would say dont get lost in the details, those butterfly diagrams etc. Just focus on what is the key idea that it is exploiting. There are essentially just two ideas: ditributivity: xy + xz = x(y+z) and symmetry/associativity.

May be a good idea is to sit down and derive a different way to group the multiply and adds, using those properties, to make it go fast. Dont worry if that does not beat the best algorithms out there. You will just get a better feel for the underlying mechanism.

<comment><USER9> I did implement those, but the deeper understanding eludes me. Honestly I never gave them much though, when it comes to choose whether to take a week and learn it properly I always rather code or do something tangible. Except for linear algebra, which is something I might use in the future.

</comment></comment></comment></comment><comment><USER11> > _You're right, programming isn't math. But when someone says this, chances > are it's a programmer misunderstanding mathematics_

Or a mathematician misunderstanding what's generally known as "programming" in the real world. The vast majority of programmers write webpages in something like PHP or Rails. 10 years ago it was Excel macros and VB. These are often customer interaction tasks where programming is incidental, but the workers doing these jobs quickly called themselves _Software Developers_ or _Javascript Engineers_.

> _Sure, you don't need to know how to build a car to drive it_

Just as car building/repair and car driving have evolved into 2 separate tasks, so have math-based programming and non-math programming. The separation occurred _because_ there were many people who wanted to program things but didn't want to learn math. The non-math programmers vastly outnumber the math- based ones.

<comment><USER12> >The non-math programmers vastly outnumber the math-based ones.

At some level I'd love to have a different word for what I do [1] that distinguishes it from web or other kinds of programming. When I talk to someone who has only encountered web developers and I say I'm a programmer, and they say "Yeah so is my uncle! He does HTML!", it feels like they really, really don't understand. Like I've said "I design Tesla electric cars" and they've responded "My uncle assists mechanics in a shop that repairs VWs!" [2]

But at some level it's just my ego talking, so it might be best to just take the ego hit as a lesson in humility. ;)

[1] I do native C/C++ code on multiple platforms including optimization for real-time performance, as well as high speed server optimization, system security analysis, and cross-platform video game development. Not math-heavy, precisely, but still far more skilled than basic web development. I also create the occasional high-performance web page, so I can compare directly.

[2] With no aspersions on assistant mechanics, but it's a VERY different job.

</comment></comment><comment><USER13> I got a programming job where I rely heavily on my mechanical engineering background. For much of the day, I am programming in Python and C doing user interface work, web programming, and optimizing numerical algorithms. However, I also get to study and use solid mechanics, the finite element method, fluid mechanics, etc.

In the engineering world, a lot of entry level jobs require just a pocket calculator and a book full of standards and codes. I would hate to have wasted all that time in school learning advanced math not to be able to use it! There are a lot of ways to apply math in your programming simply through how math makes you think. Studying math revitalizes the programming part of my brain, and allows me to attack problems from new angles.

This (highly opinionated) quote [1] from Zed Shaw inspired me to pursue a career that leverages applied math and physics, as well as programming:

> Programming as a profession is only moderately interesting. It can be a good > job, but you could make about the same money and be happier running a fast > food joint. You're much better off using code as your secret weapon in > another profession.

> People who can code in the world of technology companies are a dime a dozen > and get no respect. People who can code in biology, medicine, government, > sociology, physics, history, and mathematics are respected and can do > amazing things to advance those disciplines.

[1] [http://learnpythonthehardway.org/book/advice.html](http://learnpythonthehardway.org/book/advice.html)

<comment><USER14> Im also mechanical background.the reason i involve programing because wanted to build something like ( statical process control(spc))..now building own accounting instead.math is a must in accounting system like rule 78,calculate irr ,calculate depreciation..

</comment></comment><comment><USER15> For me, debugging or perhaps more appropriately _anti-bugging_ a program is so much like proving a theorem that the difference is one of terminology and notation rather than essence.

<comment><USER10> This is such an excellent point, I hope this comment bubbles up higher.

</comment></comment><comment><USER16> _" One big reason that mathematics is much more like language than programming, is that doing mathematics involves resolving ambiguities. In programming you have a compiler/interpreter that just dictates how an ambiguity resolves. But in mathematics, as in real language, you have to resolve them yourself based on context._"

Along this line, I recently noticed how similar legal contracts to programming. One partner contract I had to read over looked very much like a huge if/elseif statement, and the definitions section looked a lot like setting up variables.

After reading this article it seems the similarities between legaleze and math proofs are pretty strong as well. I wonder if anyone has ever tried to process legal documents or laws with mathematical formulas to try finding loopholes.

<comment><USER17> I remember reading "The British Nationality Act as a logic program" ([http://www.researchgate.net/publication/234805335_The_Britis...](http://www.researchgate.net/publication/234805335_The_British_Nationality_Act_as_a_logic_program)) in CACM a long time ago; the "cited in" list seems to be a good place to look for subsequent efforts.

</comment></comment><comment><USER18> This whole debate is a mess of definitions and taxonomy. If you define math as algebra/geometry/calculus/etc., obviously programming isn't all that tightly associated with math. But programming is mathematical logic, which is a subset of math, so programming _is_ math... right? Well, except logic itself is a subset of philosophy. So programming is philosophy now as much as it is math? And what about this argument that programming is language, it's got some good points, how does that fit into all this?

Incidentally, some visible members of the "programming isn't math" camp are discouraging others from emphasizing the connection between math and programming so as not to intimidate young women away from taking an interest in programming. Folks, this position only validates the stereotype that women are not good at or interested in math.

<comment><USER19> And of course relation databases are an application of set theory.

</comment></comment><comment><USER20> I'd feel much more comfortable with the idea that programming is math if my anecdotal experience of programs written by mathematicians didn't show that they have absolutely no clue how to write a good program - I'm talking about aspects of design like modularity, cohesion, separation of concerns, testability, sensible use of abstraction, etc. There's clearly something more to programming than math or there wouldn't be such a high correlation between good mathematicians being such garbage programmers. I suspect the whole debate is a sign that mathematicians simply dismiss these other aspects as unimportant and only count the mathematical parts and then come to the "surprise" conclusion that "wow, programming is all math!".

<comment><USER21> This is a real test which is in favour that programming is not math like biology isn't physics. You don't build programs with one character variables.

</comment></comment><comment><USER22> Here is an interview with John Carmack where he shares his opinion on the importance of math in game engine programming which is one of the math heavier areas of programming. It's the first question asked so you don't need to skip ahead.

[http://www.youtube.com/watch?v=hapCuhAs1nA](http://www.youtube.com/watch?v=hapCuhAs1nA)

<comment><USER23> Interesting! He says he got by mostly with high school math. That analytical solutions are used more in physics simulations. But that in general if you time slice enough, simple approaches work well enough.

When I was 10, I had the opposite reaction. I started writing a game, but having a busy loop just constantly figuring out inputs and updating state seemed so ugly, I gave up, figuring I obviously lacked some knowledge. After all, I couldn't write a space invaders game without "brute forcing" it. Later when I found out that's actually how pros do it, I was really disappointed.

<comment><USER22> Wouldn't the loop sleep between frames?

<comment><USER23> GW-BASIC in 89 or so. I don't think you could sleep. And I didn't have much of a concept of frame either. I just thought frames were arbitrary decisions in time to look at the exact state of the world and show it. Like, that you had a bunch of equations that told you where objects would be at any given time, and when they'd do something interesting (like collide). So naturally my little loop felt stupid and I figured once I went to high school or university they'd tell me what I was missing (hah!).

Had I known that everyone else was just making up approximations, and that a lot of things don't even have analytical solutions would have been nice to know.

<comment><USER24> Those days your CPU would be doing mostly 1 thing, like run your game, so the concept of sleep wasn't needed and actually, usually you didn't have time to sleep even if you could, you would need every cycle to do calculations. To make life a bit easier and by using C/asm, you could offload something like game music by setting an interrupt vector so it would keep playing nicely without you doing all kinds of timing madness. I was using a lot more math back then than now; there are libraries for everything and they hide the math for you. You could find physic approximations (very rough! it only had to look plausible, not realistic) in books and BBSs BUT you could never just use them as you didn't have enough cycles for that, you needed to rewrite them to fit your purpose otherwise your software would be unusably slow.

</comment></comment></comment></comment></comment><comment><USER25> I agree, programming is not mathematics, however, the author seems to have mixed up the act of calculation and mathematics.

Bering a good human calculator is unlikely to result in stellar programs. Having a good grasp of how to arrange and communicate your ideas, as is required in mathematics, will help your programming hugely.

Yes, there's a large gap between what is acceptable in mathematics and what's acceptable in programming, and the types of problems you're likely to encounter, but fundamentally, you'll be communicating ideas to other people and to your compiler.

Source: Computer Science and Mathematics degree, now working as a researcher.

</comment><comment><USER26> Programming is math, in that (at least at some level), a program is formally equivalent to a math problem.

Programming is not math, in that most of the time, when I'm programming, I'm not thinking about it at all like a math problem, even if I do some formal reasoning about some aspects of the program. (Maybe here's where it shows that I'm not a Haskell programmer.)

So: Yes? No? Depends on what level you're looking at it on.

This becomes one of those discussions that's really pointless because it turns on the definitions of the terms involved, and just winds up wasting peoples' time.

<comment> saint-loup >>> I'm not thinking about it at all like a math problem

The thing is, not even a mathematicien thinks always about math that way. In mathematics, one needd to distinguish between a phase of exploration, where you work along a fuzzy, intuitive process, and a phase of justification, where one try to prove one's conjectures. The second part is math-as-a-formal- system, the cliché of mathematics. So it's not a problem of definition, it's a matter of accepting mathematics as a complex process, practiced in various ways and different for each mathematician.

</comment></comment><comment><USER27> Fuck no, programming in not math. I learned that the hard way, when I tried to take college level calculus as a refresher, after years of neglecting my basic algebra, and assumed that my interim programming experience would be sufficient to tide me over.

The _notation_ is similar, but mathematics is much more rigid in terms of correct results, and is sprinkled with a completely different body of vocabulary, history, facts and trivia, which may selectively overlap and intersect with computer science, but often times not with perfect analogies or exact synonyms.

Not to mention that programming is often accomplished using products distributed by large for-profit companies that have been tailored to maximize convenience for the end-user, which in many cases might be a paying customer, or a large, vocal client community that is deeply intolerant of defects and anti-patterns. Math may be assisted by tools, but the tools are often times fraught with limitations that demand careful and sometimes creative application to a given problem.

<comment><USER28> > Fuck no, programming in not math. I learned that the hard way, when I tried > to take college level calculus as a refresher, after years of neglecting my > basic algebra, and assumed that my interim programming experience would be > sufficient to tide me over.

Calculus is a discipline that many think is not very applicable to the art and practice of programming itself.

"Programming is math" does not mean to imply "programming is _any_ and _all_ kinds of math".

<comment><USER27> So, I definitely felt as if I were familiarized with some of the very basic, generalized concepts I would need to pass the mid-terms and final exams, but when push came to shove, the only real parallel that was a direct one-to-one translation was the piecewise-defined function. The rest of the class was still quite the steep climb.

</comment></comment></comment><comment><USER29> "Propositions as Types" by Wadler is a great introductory history of the interconnectedness between logic systems and programming languages:

[http://homepages.inf.ed.ac.uk/wadler/papers/propositions- as-...](http://homepages.inf.ed.ac.uk/wadler/papers/propositions-as- types/propositions-as-types.pdf)

</comment><comment><USER30> "Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians." \--Edsger W. Dijkstra

Old arguments are new again because twenty something kids think that they know everything and that the wisdom of programmers from decades past is old, so it doesn't count in today's world of Hadoop cluster Node.js AWS instance startups. This is as true of meta-theorizing about programming as it is about hammering out the details of various software implementations.

</comment><comment><USER31> > You see, Mei's fundamental misconception is that the kind of applications > that we haven't yet automated and modularized constitutes what programming > is all about.

Please forgive me if I'm making the most heretical question possible, but once we reach the level of software sophistication the author hints at ("how to automate the translation of drawn sketches to good HTML and CSS") wouldn't software also be able to create and analyze mathematical theory ("conjecture, proof, and building theories")?

<comment><USER32> > wouldn't software also be able to create and analyze mathematical theory > ("conjecture, proof, and building theories")?

Already happening.

<comment><USER33> I'm interested in where this is going. Do you have a citation?

</comment></comment></comment><comment><USER34> The only way out of this semantic quagmire is to realize that programming is math incarnate. Mathematics in the broadest sense is nothing but logic applied to axioms. You can come up with arbitrary axioms and apply logic to them and that's math! Sure the connotation of math are specific concepts that usually have some real world application, but that's not the only kind of math. Lots of times someone came up with a crazy math idea long before they realized the real world application (eg. complex numbers).

Until computers came along, math was entirely a theoretical pursuit. The universe may be described by math, but it's impossible to know whether it is _actually_ defined by math or if we just fit the math to the universe. But programming is different, because for the first time we can take a mathematical idea from inside our heads and express it in a physical computer which executes it according to the logic we've defined.

When you look at it this way you realize that it's exceedingly silly to try to separate programming that requires math knowledge from programming that doesn't. I mean no, programming usually does not require the infinitesimal slice of mathematics known as 9th grade algebra, but it does require logical thinking which is the basis of all mathematics.

<comment><USER35> > Mathematics in the broadest sense is nothing but logic applied to axioms.

mmmm. Lots of people would disagree with this :-)

> Until computers came along, math was entirely a theoretical pursuit

Not at all; mathematics _always_ had applications. Not all mathematics, but it's certainly not that case that math was "all theory" and without serious application before computing.

> because for the first time we can take a mathematical idea from inside our > heads and express it in a physical computer which executes it according to > the logic we've defined.

We've had calculation assistants in various forms for centuries. Also, ballistics and construction based on mathematics are more-or-less "taking a mathematical idea and expressing it in the physical world".

<comment><USER36> Well, "computer" originally _referred to_ a person performing the task of computation. In that sense, "Until computers came along, math was entirely a theoretical pursuit" may be accurate - it is hard to make math practical without computing anything. It's certainly _not_ the case that it was purely theoretical until we had _mechanical_ or _electronic_ computers.

<comment><USER35> I disagree. The term "computer" was typically reserved for people who _exclusively_ did often pre-defined computations, and didn't contribute much other than the computation to the mathematics at hand. That is, someone else had come up with the novel method of computation, and someone else had formulated the problem. The human computer was applying the computation to problem that someone else handed them.

There was plenty of mathematics before mathematics got to the point where we needed dedicated humans who spend their whole day computing things in a prescribed manner.

But regardless, for some reason I think the original post was referring to electrical/mechanical computers :)

<comment><USER36> I think it's the same question as whether someone cleaning their own toilet is "a cleaner" for the duration, on which I could go either way.

 _" There was plenty of mathematics before mathematics got to the point where we needed dedicated humans who spend their whole day computing things in a prescribed manner."_

More to the point, there was plenty of _useful application_ of mathematics before then. Which I certainly agree with. My point was that most (and possibly all?) early application _of_ mathematics required computa _tion_.

My comment, though, was mostly agreeing with you - just picking apart a technicality to get at some tangential interesting questions.

<comment><USER35> So, I tried to think of counter-examples to "most (and possibly all?) early application of mathematics required computation" just for the sake of discussion.

I think I have only one, which is the establishment of axioms, both philosophically (as a method) and specifically (e.g. in Elements).

A revisionist history might say that choosing axioms doesn't require any computation, just a keen sense of style and close observation of the world.

But actually, I'm sure that the choice of axioms was a long and drawn-out process informed mostly by computation and checks that the computed values/proven theorems matched with physical intuition. After all, that's kind-of how it's done today, even by people who have lots of experience with formal systems.

Now I really want to read pre-Euclidean mathematical philosophy to see if I'm correct :-)

<comment><USER36> Yeah, I thought it was interesting space for speculation. 'S why I tried nodding toward it. Don't really know enough of the history to get terribly concrete, but that roughly corresponds to my understanding. Both the actual history _and_ what might be theoretically possible are fascinating.

</comment></comment></comment></comment></comment></comment></comment><comment><USER37> Everyone will have a different take on this based on the kind of software they write. The bottom line is that math is pervasive at all levels of software engineering but it impacts developers in different ways.

If you write video games or any other graphic related application, or if you work on jet engines or modelization or industrial engineering, you are obviously immersed in math on a daily basis. If you write servlets on a Java backend, you are probably not required to be as much versed in math, physics or chemistry.

Still, no matter how close to mathematics the software you write runs on, the bottom line is that you are using a programming language to do so, and all languages are rooted to various extents into math. Some are very closely connected, and sometimes based on, specific mathematical fields (e.g. Haskell and Category theory) while others are more loosely based on such principles.

I find that just like you don't need to know how an engine works in order to drive a car, you don't need to know a lot of math to be a decent developer, but it certainly doesn't hurt to read up on some of the theoretical foundations that underlie all of computer science.

</comment><comment><USER38> The popular understanding of "math" very much is "performing the correct sequence of calculations/manipulations to solve a given problem". This is because US math is taught this way, from addition of fractions to symbolic differentiation of functions in high school.

Most people never grok that math is really about building abstractions of various levels of sophistication and saying (proving) useful/interesting things about those abstractions.

Programming fits more with the latter notion. Even web programming: we have abstractions like user interface, color theme, database table, scripts, etc. The web programmer has to construct these abstractions and then do useful things with them.

I would agree that programming and math are cognitively very similar, and both very similar to using language. However, I also understand why programmers may like programming yet "hate math". It's because their understanding of math is derived from US standard math education, which is essentially about the memorization of symbolic procedures, with very little constructive abstraction happening.

</comment><comment><USER39> Disclaimer: I prefer to eschew labels and categorizations as they lead to heated & mostly unproductive conversations. These conversations often serve to close minds by creating stereotypes and ossifying one's often incomplete perspective on the subject matter.

That being said, this article's main examples are programming applied to domains that rely on mathematics. Domains that don't rely on mathematics tend to have less mathematics.

Programming is (mostly) about creating automatable systems or automating processes. Depending on the process, mathematics may or may not be involved. It's easy to imagine a programmers going their entire career without encountering mathematics. I personally like to automate mathematics, however it's not "necessary" to be a programmer. Mathematics will make you more "well rounded" just like a liberal arts education would.

</comment><comment><USER40> Learning math is not just learning the knowledge of math. It's the learning of the abilities to reason, to think, to analyze, to simplify, to deduct, and to solve. Math knowledge helps programming but the math abilities are what propel you to the next level.

</comment><comment><USER41> Mathematics is the study of quantity and structure. Reasoning about how to mutate some state, defined as a set of values, according to some domain- specific logic, constrained by the execution environment and invariants, is most assuredly mathematics.

<comment><USER42> Indeed. Whether the likes of Sarah Mei agree or not, the Curry-Howard correspondence holds regardless: producing a computer program that meets some specification _is_ theorem proving at a fundamental level...

</comment></comment><comment><USER43> Software engineering requires mathematics. Software development does not. Engineers and developers both bang out code. But the similarities end there.

A developer uses a library to make a product. An engineer uses mathematical knowledge, skill, and reasoning to find an efficient representation that elegantly solves a problem. A software engineer extends this idea: using (mostly) discrete mathematics, type & category theory, and computer science at his or her disposal.

I have respect for developers -- they are an important part of the entire software ecosystem. I feel it necessary, however, to distinguish those who use mathematics to program and those who do not.

<comment><USER44> > Software engineering requires mathematics. Software development does not. > Engineers and developers both bang out code. But the similarities end there.

I agree. For instance, in Haskell you cannot just sit down and hack something together like in Python or PHP. You need to think about the whole structure of the program. That's software engineering.

Interestingly (for me) I realized that it is possible to write software in Haskell in a mathematical way which I previously considered to be possible only in an imperative way. It required a shift of my thinking about software, and I am still learning that.

Software engineering is intriguing because it raises software quality to a new level.

<comment><USER45> Actually, in Haskell, you can write some python code to "program to think" first, and then when you know EXACTLY what you are going to do, you can write elegant Haskell code with its "think to program" requirement.

Software engineering is a title no more concrete than software developer. In either case, it's useless to talk in platitudes.

</comment></comment></comment><comment><USER46> Mathematical background helps in programming. It is not absolutely necessary but personally I do not know any Programmer who was good at Mathematics and failed really badly in programming.

<comment><USER47> It was well said "programming is one of the most complex branches of applied mathematics". I didn't check the exact quote :) .

</comment></comment><comment><USER48> As a web developer with degrees in both math and programming, I sometimes find direct applications of math, such as backing off from updating something on the page exponentially when the user goes AFK, or more commonly, when working with visualizations (see d3.js). For the most part, my peers without much of a math background could solve the same problems in other ways. For more graphics-oriented stuff it gets a little harder but often a library plus a tutorial blog post gets the job done.

</comment><comment><USER49> This discussion is lacking an agreed upon definition of Mathematics.

<comment><USER26> It's also lacking an agreed upon definition of programming. It's even lacking an agreed upon definition if "is". (No, I'm not trying to go Bill Clinton on you. In this discussion, what do you mean by "is"? Do you mean "identical to, equals"? Or do you mean "part of, a subset of"? If you mean identical, do you mean identical in all respects, or just in some respects? If so, in which ones?)

<comment><USER50> good point

</comment></comment></comment><comment><USER51> i _want_ to say that math just is logic (which, blown up into set theory, is the major way we understand language outside of full on anthropology and incidental history/statistics)... but my early allegiance to frege would be showing. alas, we are doomed to never find the logical foundation of mathematics--godel hits us on one side, wittgenstein on the other! at least frege was a better writer than either of those two.

anyway, i love the author's point (2). i would never argue that we don't need to bother wondering about the import of death or how we feel about things, but (2) not being widely known comes largely from A) people not studying philosophy, since B) they don't realize that philosophy isn't (always) about finding (capital M, almost-supernatural) Meaning, but rather is just being rigorous in your thought and language (as well as curious). math and programming aren't magic; they admit of rigorous thought just like anything else. you needn't be a savant, and you needn't go and vilify any particular normal human capacity or object of investigation to be allowed to not be a savant. sadly, i write like wittgenstein, not frege.

hope this rambling response struck you as topical enough.

</comment><comment><USER52> "Large amounts of effort are spent on tedious tasks in industry for no reason other than that we haven't figured out how to automate them yet. And novel automations of tedious tasks involve interesting mathematics by rule, not exception."

Not closely related to the article's subject, but nevertheless a good point, it's one of the reasons I consider academia to be a good place to be. At least for those at the 'top' of the pyramid...

</comment><comment><USER53> From my personal experience they are related, but I can tell for sure they are very different.

U think this confusion exist because many famous computer sciences studied math or were also mathematicians.

From my personal experience, I passes all my CS courses in college without much effort but I struggled with calculus, statistics and algebra classes. So I think even the mindset you need to understand them are very different.

</comment><comment><USER54> There is nothing programming can not be.

No you don't need to be a mathematician to learn the basic syntax, but you could be a mathematician and still learn the basic syntax. You could also be a mathematician and use programs to build wonderful and new exciting things.

Programming has no limitations other than our imaginations.

I don't get why we humans have to be so definitive before things stop scaring us.

</comment><comment><USER55> Before there were Computer Science university schools, programming was taught at Math, Physics and Engineering schools (like the mentioned FORTRAN), it wasn't taught (still isn't) in language schools. There's some relationship between math and programming, and in any case math can be seen as a language as well.

</comment><comment><USER56> The truth lies in the happy median: math is absolutely necessary for some programming applications, and helpful in the others - being able to distill a problem into easy-to-reason-about abstractions is helpful in any domain of programming, but a certain level of abstract thinking can be attained without formal mathematics.

</comment><comment><USER57> I'm okay with the 4 down votes in 4 hours -- just hoping someone could clarify why. My comment asked:

"Does this have anything to do with the female vs male perspective on programming? Maybe programming can be actually approached with different mindsets -- and it's not a case of either/or...."

<comment><USER58> I didn't down vote you but my initial reaction to your comment was can we please have a conversation related to development without dragging sex into it? I would guess that many had the same reaction.

Discrimination is an issue in Tech, its not the only issue or an issue which relates to every other issues it is an issue, singular.

</comment></comment><comment><USER59> tl;dr The Churchill-Turing Thesis is true from the OP's subjective experience, too. [http://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis](http://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis)

<comment><USER42> Brilliant. The following proposition shall henceforth be known as the _Churchill-Turing thesis_ :

"Every insufficiently random symmetric-key scheme can be successfully cryptanalyzed given a sufficiently long ciphertext."

Of course an entirely different matter is whether said scheme can be _feasibly_ cryptanalyzed, but I digress.

<comment><USER59> Oh man, I am so laughing and hating myself right now. Brilliant definition!

</comment></comment></comment><comment><USER60> It depends what you are programming. It's like saying, writing is not poetry.

<comment><USER61> Yeah but no one likes to read spaghetti saga. We like our microprose to fit in a few feet.

</comment></comment><comment><USER62> "And most cooking is reheating frozen food, not farm-to-table fine cuisine, so should a culinary student study McDonald's?"

Awesome

</comment><comment><USER63> Programming is like writing a recipe. That includes a little bit of math if you want, but not necessarily.

</comment><comment><USER64> nailed it

</comment><comment><USER65> Obviously, many comments confused with the following two:

Programming involves math != Programming is math

For example, john_b's comment confuses the use of math in programming with programming per se.

<comment><USER66> That is the problem: programming should be math. If we view programming as metaphysical, we can never hope to build good software. That will change in the future.

I don't believe that 50 years from now we will be still writing code to fly a plane or run a web app, and questioning ourselves: will it run? will it crash? Does the code does what it is supposed to do? Do these two functions do the same thing? Certainly as time goes on, programming will be ever more a well defined formal system, so much that big parts of development will just be auto-coded(by machine).

That is why functional languages are so good. They are very close to mathematics, and allow us to build formal systems on top of them, that remove any ambiguity that might exist. And this is(or should be) one of the reasons why functional programming is so 'hip' now: it allows us to reason about program design using the Algebra of programming.

Of course right now we are stuck with the methods we have to build software. And that means you can have a programming job without knowing much about math, or even using it day to day.

But that will change in the future. (My humble thoughts on it, based on the views I got from a university class called 'program calculation')

if you are curious about algebra of programming, although there are many more resources online: [http://wiki.di.uminho.pt/twiki/pub/Education/CP/Bibliografia...](http://wiki.di.uminho.pt/twiki/pub/Education/CP/Bibliografia/pdbc-3.pdf)

<comment><USER67> _> That is why functional languages are so good. They are very close to mathematics_

Wouldn't it be better to say that functional languages are close to our commonly used mathematical languages? The abstract underpinnings of mathematics are not expressible naturally. We've had to invent languages to be able to communicate the ideas.

And that is pretty much what this debate boils down to: Are the languages that allows you to express abstract ideas (programming languages in this case) math or language?

</comment></comment></comment><comment><USER68> I think the author is confusing mathematics and logic, as is the referenced blogger.

<comment><USER69> How would you distinguish mathematics from logic? Some very smart people [1] have thought they were deeply related.

[1] [http://en.wikipedia.org/wiki/Principia_Mathematica](http://en.wikipedia.org/wiki/Principia_Mathematica)

<comment><USER68> Mathematics is a specific application of logic. Programming in general is closer to logic than math. But there is certainly a large set of programming that is mathematics-dependent (see above threads of people doing engineering programming).

Edit: application vs extension of logic.

</comment></comment></comment><comment><USER57> Does this have anything to do with the female vs male perspective on programming?

Maybe programming can be actually approached with different mindsets -- and it's not a case of either/or....

<comment><USER70> Let me copy part of my comment to another submission:

Different people view programming very differently. For example for me programming is mainly a way to understand things. I program things I want to learn about. My understanding of programming helps me understand computers and computing. Then I have a friend who couldn't care less about how exactly things work under the hood, or in theory. All he cares about is making a product, and programming is his tool.

I think this is one of the main distinctions. Some are motivated by curiosity and love of tinkering with the machine and see it all as a playfield with toys, while some others are motivated by the opportunities to build things and make money out of it, seeing it all as a tool and material. I am not saying this is the dichotomy or that one even exists, but it illustrates that "programmer" doesn't really say all that much. We're a broad and varying bunch!

<comment><USER11> > _We 're_ a broad and varying bunch

You might not want to self-identify too much with those who "couldn't care less about how exactly things work under the hood". When you've spend the best part of a day carefully explaining how NOT (a OR b) is the same as (NOT a) AND (NOT b) to the "programmer" at the next desk who got his job because someone else of the same gender and ethnicity filled in for him at the aptitude test, you'll quickly curse how HR people turn a blind eye to closely checking such stuff so they can meet their hiring quotas.

It's not even inconceivable that someone like this has conned their way into running open source software projects, perhaps even project managing a "Top 50" programming language!</comment></comment></comment>


Intel's Chipped Chips - <AUTHOR> http://www.cpushack.com/2018/03/21/intels-chipped-chips/ <comment><USER3> When buying Leica cameras collectors often pay more for "brassed" models. That's where the paint has worn away with use to show the brass metal underneath. I guess it's supposed to show that the tool was used for a long time in the field.

With these intel chips it's a similar story. You're looking for authenticity.

<comment><USER4> > You're looking for authenticity.

Not really. In this case, collectors are looking for scarcity (or rarity, whatever the right word is here). These chips are no less authentic than the mil-spec approved chips they sold at the same time.

</comment></comment><comment><USER5> I actually had a few of these kits from different years... I think the newest was from the 1990s and I couldn't even say for sure when the oldest from was. Sadly I sold the kits piecemeal about a year ago before I moved. They all went to good homes though, as the people who got them were all very excited about them.

</comment><comment><USER6> I suppose it's more a matter of customer perception than anything else, because a small chip on the corner of the package has absolutely no effect on the operation of the much smaller silicon die in the middle; and if it's assembled into a product, the end-user is none the wiser.

Incidentally, modern high-density components look rather rough under the microscope too.

<comment><USER7> They arent worried about the chip. The fear is that the chip represents a mistake in handeling, was it dropped? You wouldnt buy new bulldozer with a dent even though nobody really cares. You need to know the dent isnt the result of something more important.

<comment><USER8> Not to mention the chip may propagate cracks in the ceramic.

</comment></comment></comment><comment><USER9> For a project, we had a couple of early 8086 samples rated only 4 MHz - <USER2> final product was 5 MHz.</comment>


SymbiFlow: A FOSS Verilog-to-Bitstream FPGA synthesis flow for Various FPGAs - <AUTHOR> https://symbiflow.github.io/ <comment> ur-whale Not too happy with the "will be" part, because these types of endeavors are really hard, and it's unclear what likelihood of success the project has.

But apart from that ... I _really_ wish these guys will be successful.

The FPGA world _sorely_ needs to open up.

My favorite analogy is that the FPGA world (and the ASIC design world in general) needs a project equivalent to LLVM: something that sorts out once and for all all the gnarly and nasty low-level stuff, offering a consistent high level view of hardware (a hard feat of course, given how different H/W might be from one vendor or chip gen to the next, but LLVM _did_ pull it off) - <USER2> if it's not as optimal as coding down to the metal would be - and lets the rest of the world build amazing, high-level tech. on top of it.

As a matter of fact, I really wish they had a link on their page to tell people how the project can be helped.

<comment><USER3> That commoditizes the FPGA market. Which is great for consumers but the exact thing the manufacturers hate, because suddenly they have to compete on price because it's easier to switch tooling.

If Intel thought they could get away with requiring a licensed compiler for their processors, they would. GPUs are in the no-mans-land: somewhat portable shader languages, but the compiler targets are proprietary and rapidly shifting.

<comment> ur-whale It's pretty obvious the manufacturers will try and get away with vendor lock- in for as long as they can.

NVidia has been playing that game with Cuda from day one, leaving OpenCL as a barely supported, barely usable, and complete no-no for anyone who wants to do production work with their hardware so they can avoid this very criticism.

The manufacturers are the villain in that story, and they know it.

This makes the kind of project described in the OP all the more important, and the folks who work on it should get help form anyone who uses FPGA's commercially.

<comment><USER4> I work with FPGAs commercially. Using non- supported tools isn't an option.

If you're building anything 'real', you're not going to try to save a few thousand dollars and risk the program, you just cost it in.

Yeah, I know, Synplify costs way more than that, it isn't exactly standard anymore (Xilinx' tools got good enough).

It's really not that expensive, considering the FPGA is usually critical system architecture.

I don't see Nvidia as the 'villain' in that story either - they designed the graphics chips, they designed Cuda. Nobody is forcing anyone to use either. They don't support the language you like? Use somebody else's chips. They can't support every language - I'm not upset they don't directly support Object Pascal.

</comment></comment></comment></comment><comment><USER5> Are these projects characterizing the timing of these chips also? Or just stealing the timing data from the vendor tools?

Anyway this has famously been done in the past. A company called NeoCAD reverse engineered Xilinx FPGAs in the early 90s and produced place and route tools that produced better results than Xilinx's own tools. Xilinx eventually bought them, and their tools became the basis for Xilinx Foundation and ISE. NeoCAD also targeted AT&T's FPGAs, which eventually became Lattice FPGAs. You will still see some NeoCAD references in the Lattice Diamond tools command outputs...

Relevant USENET thread: [https://groups.google.com/forum/#!topic/comp.arch.fpga/WwsoA...](https://groups.google.com/forum/#!topic/comp.arch.fpga/WwsoASNeK3k)

(look for message from Eric Dellinger...)

(also, I miss USENET..)

<comment><AUTHOR> A fascinating piece of computer history. Thank you for the post and the link. (I miss USENET too...)

</comment></comment><comment><USER6> You all surely must be aware of the only existing completely functioning FOSS FPGA toolchain, right?

[http://www.clifford.at/icestorm/](http://www.clifford.at/icestorm/)

and even featuring a gui app built on top of it! [https://icestudio.readthedocs.io/en/latest/](https://icestudio.readthedocs.io/en/latest/)

<comment><USER7> Check out who's behind icestorm, and compare that with who's behind symbiflow.

<comment><USER8> Last bit from tfa:

"Project IceStorm

Project IceStorm is a previous project that documented the iCE40 bit-stream format. It will become a part of SymbiFlow. SymbiFlow will support the old Yosys-ArachnePnr-IceStorm flow but will also add a Yosys-VPR-IceStorm flow."

</comment></comment></comment><comment><USER9> To me, the state of development of open source FPGA tools feels about like the GNU project in the late 1980s.

gcc 1.x and 2.x targeted several Unix platforms and produced working code some of the time. It would work with gas or the vendor's assembler and gld or the vendor's linker, depending on target. It almost always used the vendor's libc and other libraries.

GNU autotools didn't exist but every significant project had its own "configure && make && install" system that worked some of the time.

The vendors mostly ignored the project, though clueful engineers from vendors as well as customers were cheering it on.

I think it will not take Yosys/iCEstorm/SimbiFlow/whatever 20 years to take over the world this time around. At least I hope not.

<comment><USER10> It will take 4 years, in under 2 years, one of the FPGA vendors will support it directly.

</comment></comment><comment><USER11> I wonder, wouldn't some of the Chinese fpga startups be more receptive to cooperate with an open source project?

The Eda industry is ripe for disruption, and it seems the incumbent Chinese semi players may become the catalyst. See also, how they embraced RISC-V.

<comment><USER12> i do not think the Chinese can understand the long term value of this open toolchain (as it will not make them sell MORE chips in the short term. that's IMHO their only expected ROI for any effort..). anyway i've recently got a nic(h)e board Lichee Tang ([http://tang.lichee.pro/](http://tang.lichee.pro/)) sporting a "weird" Anlogic Eagle FPGA, that's also sold with a 1o1 "pin compatible feature" against similar parts from X & A(I) manufacturers. that's tells a lot about their marketing practices!</comment></comment>


Ask HN: What tech/computer/software related YouTube channels can you recommend? - <AUTHOR> <comment><USER2> Scanlime (firmware, hardware hacks) EEVBlog (electronics) Ave (more mechanical)

Really looking for more software oriented channels though!

</comment><comment><USER3> Computerphile, clojure TV, google tech talks, lex friedman, the signal path</comment>


How to Be a Newb Software Engineer - <AUTHOR> https://medium.com/@SysCoder/how-to-be-a-newb-software-engineer-3180bc87e97f#.dnkln5ykq <comment><AUTHOR> What to do when you land your first software job or when you are starting a new software job.</comment>


Why You Might Need Ansible and Not Even Know It - <AUTHOR> http://www.iamondemand.com/blog/might-need-ansible-not-even-know/ <comment><USER2> Actually the opposite, I know quite well why I need something else instead of Ansible. Some of the top reasons are that Ansible has the architecture that mistmatches what's needed for configuration management (push instead of pull that heavily relies on a central server for any operations at all) and that it uses for batch operations a channel intended for interactive shell (SSH), which is a fragile idea.

Ansible is a very poor implementation of an ad-hoc RPC, on top of which a tool for applying configs is bolted on.

<comment><USER3> Hi, I am the author of this article and I have to say I partly agree with you. For huge scale deployments Ansible is not very good and the alternatives mentioned at the end of the article (Salt and StackStorm) seem to be better suited for such deployment. When the scale is smaller, though, the push model is in my opinion nice as it does not require setting up a server. You can start right away. Also, reusing SSH means (almost) no dependencies as mentioned in the article. It may all depend on the use case though, but in my opinion running Ansible is much better than manual configuration or using shell scripts.</comment></comment>


DNA studies topple the ladder of complexity - <AUTHOR> http://nautil.us/issue/9/time/evolution-youre-drunk?utm_source=tss&utm_medium=desktop&utm_campaign=linkfrom_feature <comment><USER2> There seems to be some confusion between complexity, quantity of DNA, and intelligence as a measure of organism complexity.

A larger quantity of DNA does not translate into a more "complex" organism, as amoebas prove. In fact, I would think it likely that organisms with a very large codebase have to be very simple ones, since the simpler an organism is the "safer" it is to add useless DNA code to it without breaking anything essential.

And consider intelligence: it is generally thought that the human brain is largely self-similar (the same structures can be observed throughout the cortex, repeated in layers and columns) and therefore very _simple_ from an information-theoretic point of view. You could express what it does using very little information, or code. The closest we have to an artificial visual cortex, deep convolutional neural networks (shown to have a representational power equivalent to the primate visual cortex [1]), can be implemented in just a couple hundred lines of CUDA code. Just because a system is hard to understand does not mean it has to be complicated, or that it requires a lot of code (DNA or otherwise) to implement.

[1] [http://arxiv.org/abs/1406.3284](http://arxiv.org/abs/1406.3284)

</comment><comment><USER3> Just because you have a simple UI doesn't mean the code underneath isn't complex.

Technically, you can have source code that's mind boggling bloated and complex for something as simple as doing addition.

In the end, the selection mechanism that evolution uses for natural selection is just survivability. Bloated, ugly code doesn't affect survivability if it all ends up working correctly.

</comment><comment><USER4> The assumption behind this story doesn't make sense to me. If you look at amoeba today and a human today, they are at the same "depth" on the evolutionary tree, just on different branches. Mammals have been evolving for tens of millions of years...but amoebas have _also_ been evolving during that time.

If we could go back a couple hundred million years and compare an amoeba from then, to a human from now, I think we would see that the older organism is less complex. But we can't do that, and I don't see how looking at a modern amoeba is any kind of reliable proxy for that.

</comment><comment><USER5> > Furthermore, the idea that complex parts like a brain and nervous > system—including nerve cells, synapses, and neurotransmitter molecules—could > evolve separately multiple times perplexes evolutionary biologists

This makes absolutely no sense. Why would this be perplexing? If evolutionary pressure causes a feature to evolve once in one part of the tree of life, why couldn't it happen multiple times independently? It would be a lot more surprising if it didn't!

<comment><USER6> > _If evolutionary pressure causes a feature to evolve once in one part of the > tree of life, why couldn 't it happen multiple times independently?_ //

Isn't it rather that the features work in the same way. Bats and dolphins [1] using echolocation that - I've heard - works the same way but the pressures on them are different, the environments different. Given the random occurrence of mutations it seems striking (to me) that these similar paths should be followed.

A corollary would appear to be also that if parallel evolution can converge on identical structures that reliance on morphological features to indicate common ancestry is flawed. If evolution tends to converge then a geological sample with a simple form of fossil can't be assumed to be contemporaneous with another sample, the fossils could be the result of parallel evolution.

I've never understood why mainstream paleo-biology seems to reject that life could have started in more than one place. Convergent evolution suggests that the same types of complex structures can develop independently too.

Perhaps Star Trek's universe of four-limbed, bipedal, binocular aliens isn't so far-fetched after all!?!

\---

[1] [http://www.nature.com/nature/journal/v502/n7470/full/nature1...](http://www.nature.com/nature/journal/v502/n7470/full/nature12511.html)

</comment></comment><comment><USER7> And then, you need to add another dimension: 5% to 8% of our DNA in from viruses that once infected us [1]

[1] [http://phenomena.nationalgeographic.com/2015/02/01/our- inner...](http://phenomena.nationalgeographic.com/2015/02/01/our-inner- viruses-forty-million-years-in-the-making/)

<comment><USER8> And do you qualify those viruses as alive? Why do we have more claim to the tangle of DNA in our cells than they do? Why do we not simply qualify as vehicles evolved by the virus to accomplish its travel through the centuries of reproduction? Obviously, we very well might.

Perspective is, at best, meaningless, and, more often, misleading. The view that the evolution of oxygen-bearing organisms was a boon which unfurled the history of organisms which resulted in us is exactly equivalent to the view that the evolution of oxygen-bearing organisms caused the most calamitous tragedy in the history of the planet, wiping out nearly a whole planet of life and dooming the future to a lack of complex anaerobic organisms.

Objectivity and a dispassionate approach to knowledge isn't just a personality affect of scientists. It's a vital tool.

</comment></comment><comment><USER9> When I first looked at the genetic code, my first question was where is the code? The letter sequences and arrangement of genes looked random. Gradually I started to realize that the genetic code _is random_ , and that the design of an organism is _irrational_. After having this personal realization, biology finally started to make sense.

<comment><USER5> [http://en.wikipedia.org/wiki/Protein_biosynthesis](http://en.wikipedia.org/wiki/Protein_biosynthesis)

The order of amino acids that make up specific proteins are neither random nor irrational, and that's just one example of things that our DNA explicitly encodes.</comment></comment>


o-o – Browser bookmarking for your terminal - <AUTHOR> https://github.com/dawsonbotsford/o-o <comment><AUTHOR> I believe that the terminal and the browser should be better integrated. We waste so much time daily context switching between the two that it's illogical not to smooth out this process. I build o-o with this in mind so that programmers everywhere can have a more seamless interaction with their computers.</comment>


Twitch Installs Arch Linux - <AUTHOR> https://www.twitchinstalls.com/ <comment><USER2> This is insanely brilliant! A kind of survival horror game where everybody armed with "esc:wq!" and "rm -rf /" :)</comment>


Show HN: UI builder for web developers - <AUTHOR> http://tandemcode.com/ <comment><USER2> From your page, I don't see any way I can evaluate it. Either some video with an example, or a quick way to install a beta version would have been good.

I like it in concept, but there's been an explosion of UI design tools recently and if you want to keep our attention, we need more of a demo. Perhaps the show HN would have been better postponed a bit.

<comment><AUTHOR> Thanks for the feedback! I figured that short videos throughout the website would be enough to describe visually what Tandem is, but a short video at the top would probably be better.

And yeah, there are a ton of UI design tools out there on the web, it's been my #1 concern when building this thing out because they all promise similar tooling. Though, I'm trying to position this app as more of an Atom, or VSCode-like since it's geared to be another kind of extensible development environment. I figured that open sourcing it would be a first good step for that since developers would probably need to understand the internals before writing plugins for new UI tools, code writers, etc.

I went ahead and added a "Fork me on GitHub" badge to make it more clear that this is open source.

</comment></comment><comment><USER3> I noticed that you show the logos of PHP and Ruby in your graphics, while not actually supporting either.

It certainly left a very unappealing first impression on me after my initial enthusiasm at seeing those logos was bludgeoned by your actual supported language list further down the page.

<comment><AUTHOR> Sorry for the confusion there, I went ahead and clarified the descriptions.

Tandem runs any application, but needs the appropriate extensions in order to write code. It has the capabilities of writing PHP, but that isn't implemented yet.

The code writing aspect of Tandem is really just a small feature of the whole application - The focus of Tandem is really to provide a preview (or many previews) of your application with tooling that makes it easier to fix visual bugs.

</comment></comment><comment><USER4> Why use this over writing basic html/css/js?

<comment><AUTHOR> Ideally you'd use Tandem along-side your text editor. It's not meant to replace writing code - I think in most cases it's easier to write code by hand than use a visual tools. Though, I think there are cases where it's easier to use visual tools against a live application preview for making small adjustments - that's where Tandem fits in.

Here's a better video demo to help demonstrate this:

[https://www.dropbox.com/s/pc50x5m991j71ot/html-css-js- demo.m...](https://www.dropbox.com/s/pc50x5m991j71ot/html-css-js- demo.mp4?dl=0)

</comment></comment><comment><USER5> Is this something like a opensource version of WebFlow?

<comment><AUTHOR> Yep, I made Tandem open source here: [https://github.com/tandemcode/tandem](https://github.com/tandemcode/tandem)

It is a bit like WebFlow, but focused more-so on the coding aspect. Tandem integrates with your text editor, encourages you to write code instead of using the design tools to all of your UI work -- they're mostly there for UI adjustments, and to create features that are hard to code by hand.</comment></comment>