Revolution in Mathematics: What Happened 100 Years Ago and Why It Matters [pdf] - <AUTHOR> http://www.ams.org/notices/201201/rtx120100031p.pdf <comment><USER2> This revolution in mathematics literally led to the invention of computers. I have been reading all about it when I go to the bookstore in the book Turing's Cathedral[1].

David Hilbert wanted to redo mathematics from square one, basing everything on set theory, axioms, and rigorous proofs. In 1900, Hilbert gave his famous address where he stated the Hilbert Problems. One of these was to prove that mathematics is "complete" in the sense that every possible statement is either provable or disprovable from the axioms.

In an effort to solve this problem, Alan Turing wrote his famous paper "On Computable Numbers" where he conceived for the first time his "Turing Machines". Although his approach didn't work to solve the Hilbert problem, it greatly inspired Von Nueman who at the time was pretty much working on pure mathematics.

Godel came along and proved that mathematics is not "complete", because there are some statements about natural numbers which cannot be proved or disproved from the axioms, but rather are undecidable.

Von Nueman was so upset by Godel's result that he decided he no longer wanted to work in pure mathematics, because if it's not complete then whats the point anyway. Instead he decided to work on applied math and physics. Since he loved the work of Turing, he wanted to build a physical Turing Machine to help out with computations, and he figured there would probably be a lot of other uses for such a machine that no one had thought of yet, and that would only become apparent once the machine was built.

While at the Institute for Advanced Study, Von Nueman fought a hard political fight to secure funding and permission to build the first computers, the MANIAC and the ENIAC, to the horror of the faculty at the time, including Einstein.

Since I am posting this at 4:30am in a thread that is 12 hours old, I will be happy if someone reads it :P

[1] [http://books.google.com/books/about/Turing_s_Cathedral.html?...](http://books.google.com/books/about/Turing_s_Cathedral.html?id=6sElRNGXWFIC)

<comment><USER3> This is interesting but not completely accurate. What is most mind-blowing, is that Turing machines were Turings approach to formalizing proofs as a means towards solving the Entscheidungsproblem. In fact he was successful in "solving" the problem, in that he proved the impossibility of solving it, later than Goedel, but in a much clearer way - Goedel encoded theorems using numbers in a quite crazy way. I also don't think Turing and Von Neumann can be given that much exclusive credit in inventing the computer, while they had huge impact, I think the idea of a computer was to some extent "in the air" and there were many people working on it concurrently, sometimes unaware of each other, see:

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

<comment><USER2> It seems like the invention of the computer is one of the most controversial "who got there first" things in all of science.

Turing's Cathedral has a ton of really interesting historical details about the history of computers, and LOTS of details about the political fight Von Nueman waged to even be allowed to work on the first computers at IAS. I didn't realize how big a role he actually played, and I would encourage people to read that book because its pretty good.

</comment></comment></comment><comment><USER4> The Revolution:

At the turn of the 1900s, the field of mathematics was changing. The old school relied of physical intuition as a means of proof. The new school found that an adherence to formal logic led to more reliable findings.

Most Relevent Sections:

 _In brief, traditionalists lost the battle in the professional community but won in education. The failure of "new math" in the 1960s and 70s is taken as further confirmation that modern mathematics is unsuitable for children. This was hardly a fair test of the methodology because it was very poorly conceived, and many traditionalists were determined that it would succeed only over their dead bodies. However, the experience reinforced preexisting antagonism, and opposition is now a deeply embedded article of faith.

Many scientists and engineers depend on mathematics, but its reliability makes it transparent rather than appreciated, and they often dismiss core mathematics as meaningless formalism and obsessive-compulsive about details. This is a cultural attitude that reflects feelings of power in their domains and world views that include little else, but it is encouraged by the opposition in elementary education and philosophy.

In fact, hostility to mathematics is endemic in our culture. Imagine a conversation:

      A: What do you do?
      B: I am a ———.
      A: Oh, I hate that.

Ideally this response would be limited to such occupations as "serial killer", "child pornographer", and maybe "politician", but "mathematician" seems to work. It is common enough that many of us are reluctant to identify ourselves as mathematicians. Paul Halmos is said to have told outsiders that he was in "roofing and siding"!_

from page 33-34.

 _Core methods such as completely precise definitions (via axioms) and careful logical arguments are well known, but many educators, philosophers, physicists, engineers, and many applied mathematicians reject them as not really necessary._

from page 34

Why It Matters:

The sciences are at risk in the reckless implementation of maths.

Education methods are weakened by the philosophical divide.

<comment><USER5> Part of it is that exact mathematics run afoul of several atheist articles of faith. Depending on your interpretation it either disproves the "Jacobian" scientific model, or more flexibly interpreted it means science is at best a subset of what governs the universe (assuming -yes, assuming- it isn't entirely wrong). Godel's theorem runs afoul of the principle that science can explain everything. It answers the question whether mathematics directs and/or predicts the events in our universe : it doesn't, it can't. It's too "weak" a theory.

We're at a very exiting point in time where we know basic mathematics to be wrong. It predicts a great many things, but there's problems that make it thoroughly unsatisfactory. In a way it's like physics in the beginning of the 20th century, with the black body radiation problem. Of course, we have been in this less-than-satisfactory state for ~70-80 years now, and no Einstein in sight ...

Godel's theorem means that there's an infinite set of empirical truths (ie. simple experiments you can try out with marbles and bags) that are completely unexplained by mathematics - and thus by every science built on top of it.

Worse : this is not a fixable problem. Sure we can fix it for specific problems. Wherever we see an obvious leak (say the birthday problem, or large cardinal number problems) it can be plugged with a new well-chosen (or -more often- ill-chosen, like choice) axiom, but there's infinitely many leaks and the proof means that there's no plug that will stop any significant number of them.

So right now in the set of all empirically observable events, there's a set that's explainable by science, and there's a set unexplained by science. The unexplained set is at least as large as the explainable set (and keep in mind that's because both sets have been proven to have a cardinality of at least the largest known cardinal number, given the actual definitions of those 2 sets I'd say the unexplained set is going to turn out to be bigger).

<comment><USER6> Interesting points, other than mathematics weakening straw-man atheism.

<comment><USER5> Don't you think that the idea that science explains everything is at the very core of atheism ? Do you think my interpretation of Godel as directly contradicting this thesis is wrong ?

</comment></comment></comment></comment><comment><USER3> Courant said much more much better in much less words:

 _There seems to be a great danger in the prevailing overemphasis on the deductive-postulational character of mathematics. True, the element of constructive invention, of directing and motivating intuition, is apt to elude a simple philosophical formulation; but it remains the core of any mathematical achievement, even in the most abstract fields. If the crystallized deductive form is the goal, intuition and construction are at least the driving forces. A serious threat to the very life of science is implied in the assertion that mathematics is nothing but a system of conclusions drawn from definitions and postulates that must be consistent but otherwise may be created by the free will of the mathematician. If this description were accurate, mathematics could not attract any intelligent person. It would be a game with definitions, rules, and syllogisms, without motive or goal. The notion that the intellect can create meaningful postulational systems at its whim is a deceptive half-truth. Only under the discipline of responsibility to the organic whole, only guided by intrinsic necessity, can the free mind achieve results of scientific value…To establish once again an organic union between pure and applied science and a sound balance between abstract generality and colourful individuality may well be the paramount task of mathematics in the immediate future._

<comment><USER7> Courant is kinda saying the opposite here, by de-emphasising the need for purely abstract formalisms, or by saying that they have to go hand-in-hand with applications, or are worthless without applications. As a numerical analyst, he of course thinks "applications" of mathematics are tantamount to its existence.

The thesis in the linked article is that we need to emphasise the importance of purely abstract formalisms, not only in the context of possible applications.

<comment><USER3> What I meant is that he described the same problem in a more complete way, not that he just said the same thing more nicely. There are infinitely many formal systems and after all we choose only some particular ones, what guides this choice? Isn't the existence of models in the real world one of the most important factors in choosing which formalism is valuable to develop? Courant how I understand him is saying that the tension between the two approaches is vital to the development of mathematics.

There is also a nice lecture [1] from Vladimir Arnold, who was very much on the side of intuition, where he raises an interesting point that is related: in todays mathematics all the praise goes to the people who prove theorems, where perhaps the person who first _stated_ an theorem that is interesting and relevant deserves at least as much credit.

[1] [http://www.msri.org/web/msri/online- videos/-/video/showVideo...](http://www.msri.org/web/msri/online- videos/-/video/showVideo/2714)

</comment></comment></comment><comment><USER8> Fascinating paper. As a math graduate I had no idea that the switch to axiomatic descriptions and formal logical proofs was so recent and controversial, and no longer working in math I had no idea that "core" methodologies (i.e. pure mathematics) are under threat (although this makes perfect sense given grant funding priorities).

</comment><comment><USER9> The author describes the old, pre-revolutionary way of doing mathematics as "relying on intuition and physical experience." In certain fields, such as algebra and number theory, the old way of doing it had another important trait: to prove the existence of something, such as the greatest common divisor or the unique factorization of a polynomial, one had to give an algorithm to construct it. The new, axiomatic way of thinking, by contrast, is content with showing that the assumption of non-existence leads to a contradiction. The rise of symbolic computation over the last few decades (Mathematica, Maple, etc.) can therefore be seen as a comeback of the old style of mathematics. I call it Kronecker's revenge. With respect to math education, well, considering the importance of computing, I am inclined to think that we should pay _more_ attention to the 19th century way of thinking rather than less.

<comment><USER10> Most mathematicians are sympathetic to utilitarian constructive mathematics, i.e. finding constructive proofs for the sake of actually computing the results in applications, as opposed to some philosophical reason. However, nonconstructive mathematics (or at least mathematics that cares little for avoiding nonconstructive arguments) will probably continue to dominate mathematical research, since many major research areas now depend heavily on its results as a basis for a conceptual framework.

<comment><USER11> You can get a pretty good feel for the practical level of sympathy by popping down to your local math library and looking at the checkout histories of the works of Brouwer [1] and Bishop [2].

[1] <http://plato.stanford.edu/entries/brouwer>

[2] <http://en.wikipedia.org/wiki/Errett_Bishop>

'Sparse' would be an understatement & poor old Errett got such wonderfully backhanded reviews as:

> "Even those who are not willing to accept Bishop's basic philosophy must be > impressed with the great analytical power displayed in his work."

and

> Bishop's historical commentary is "more vigorous than accurate".

<comment><USER10> Well, both Brouwer and Bishop fall into the category of constructivism for philosophical reasons. As I mentioned, this doesn't garner much sympathy from ordinary mathematicians. Brouwer and Bishop wrote against the practice of classical mathematics with considerable vitriol, as opposed to proposing constructive mathematics as an additional lens for viewing classical results. In the era of widespread use of computers to perform calculations, the advantages of this latter point of view are obvious.

<comment><USER11> That's a fair assessment. Still it's a shame their work more or less petered out due to politics, personality and philosophical disdain, had they played better with others and taken a slightly different path they could well have been better regarded than they are now.

</comment></comment></comment></comment></comment><comment><USER12> Mathematics education is a bit odd now for sure. I think if there was an effort to teach kids the logical and even creative side of math early on, they'd have an easier time building intuition for certain computational aspects later on. As it stands, most people are unaware that math is no longer predicated in reality, which seems nonsensical. You generally teach grammar before (or along with) composition.

<comment><USER13> I'm sorry, but could you please explain what you mean by "predicated in reality"? I feel stupid, but I just don't understand what that means, and I'd rather feel stupid than remain ignorant.

<comment><USER14> It means that a connection to the real world is not needed for mathematics to exist. Another way of saying "predicated in" would be to say "based in" or "required by."

</comment></comment></comment><comment><USER15> "To a first approximation the method of science is 'find an explanation and test it thoroughly', while modern core mathematics is 'find an explanation without rule violations'."

This kind of rings a bell for me here concerning Formal Verification methods (i.e. proofs), possibly more popular with functional programming techniques.

</comment><comment><USER16> I think physics is going in that direction too. The paper explains how math went from experimental to formal proofs. Now, for better or worse, science wants to extrapolate to universes from quantum particles.

Schrodinger's cat was originally proposed by Schrodinger to ridicule the many word's extrapolation of quantum mechanics. Now it is often used to support it. Scientists create multiple dimensions, universes, etc. based on very little real world data.

<comment><USER4> Schrodinger's cat is just like the old school intuition that is subject to errors. It is also why physics may have a better public image than math, due to the higher availability of intuitive ideas in describing physical phenomena. We wouldn't need a simultaneously alive and dead cat if people were more educated about the idea of a random variable. Heck, five seconds on wikipedia leads to _"a random variable conceptually does not have a single, fixed value (even if unknown); rather, it can take on a set of possible different values, each with an associated probability."_

<comment><USER17> The paradox Schrodinger pinpoints in his famous thought experiment cannot be explained by a simple appeal to random variables. Such variables would be the "hidden variables" that Einstein and others attempted to find to explain Quantum entanglement.

Von Neumann thought he proved that hidden variables were impossible, but In the 1970's, John Bell introduced Bell's Inequality, and showed us that hidden variables can only be used to explain Quantum entanglement if one gives up on naive locality.

Things get hairier from there when you try to combine non-local theories (such as Bohm's) with relativity.

It's complicated.

</comment></comment></comment><comment><USER18> I'd like to point out that there is a difference between the law of the excluded middle and proof by contradiction.

The law of the excluded middle says that for every x, either x or not x is true. Proof by contradiction says that if given not x you can derive a contradiction, then x is true.

<comment><USER3> He basically says that Hilbert relied on the law of the excluded middle by using proofs by contradiction, which is valid, because if you do not accept the law of excluded middle than proof by contradiction ceases to be a valid proof method.

<comment><USER18> This is the sentence in question:

 _The first controversy occurred early in Hilbert's career and concerned his vigorous use of the "law of the excluded middle" (proof by contradiction)._

I don't see how you can interpret that as not implying that the law of the excluded middle and proof by contradiction are not one and the same thing.

 _if you do not accept the law of excluded middle than proof by contradiction ceases to be a valid proof method._

I don't believe that this is true, because that would imply that you can derive the law of the excluded middle from proof by contradiction.

<comment><USER3> This is explained here nicely: [http://philosophy.stackexchange.com/questions/1890/what- is-t...](http://philosophy.stackexchange.com/questions/1890/what-is-the- difference-between-law-of-excluded-middle-and-law-of-non-contradicti)

<comment><USER18> The law of noncontradiction and proof by contradiction are different things.

<comment><USER3> In a logical system you have axioms, that are sentences that are true by definition and proof methods which are rules of sentence transformation that are assumed to preserve truthiness. The law of noncontradiction is an axiom that states:

X and (not X) == False for any sentence X

If you start with a sentence y, and then via the proof methods arrive at a sentence (not y), this is the same as saying

(y -> (not y)) == True

Which is equivalent to:

((not y) or (not y)) == True

Which is equivalent to:

(not y) == True

Now, if you accept the law of non-contradiction this implies that:

y == False

If you do not accept it, y can both True and False at the same time and the proof method is not valid anymore. Hence the proof method of reductio ad absurdum, or "proof by contradiction" as you call it, is valid if and only if this law holds.

<comment><USER19> The law of excluded middle is not sufficient for proof by contradiction. What you actually need is ex falso quodlibet (principle of explosion).

For instance, paraconsistent logic has the law of excluded middle but not ex falso quodlibet.

<https://en.wikipedia.org/wiki/Principle_of_explosion>

<https://en.wikipedia.org/wiki/Paraconsistent_logic>

\--

addendum

Specifically, notice that in classical logic the axioms law of excluded middle and law of non-contradiction can be substituted for one another (they are equivalent). However, that is not the case for all semantics.

<comment><USER3> I just wanted to explain the authors mental leap, I originally said: _if you do not accept the law of excluded middle than proof by contradiction ceases to be a valid proof method_. The law of excluded middle might not be sufficient, but is necessary for the reductio ad absurdum and proof by contradiction methods. You are right though I jumped too quickly to the "if and only if", the details get quite complicated.

<comment><USER18> My point is that you can add reductio ad absurdum as an axiom. So long as you can't then derive the law of the excluded middle, your assertion is incorrect.

<comment><USER3> Reductio ad absurdum is:

(x->(~x))->(~x)

Law of excluded middle is:

x | ~x

Proof follows:

(x->(~x))->(~x)

From definition of implication is equivalent to:

(~x) | ~(x->(~x))

From definition of implication is equivalent to:

(~x) | ~((~x) | (~x))

From de Morgans law is equivalent to:

(~x) | (x & x)

From identity law is equivalent to:

~x | x

I am not a logician and I might not have gotten all the details right, but I certainly think this is possible. I also have quite a good proof by authority ;) in form of an article by Alonzo Church:

[http://www.ams.org/journals/bull/1928-34-01/S0002-9904-1928-...](http://www.ams.org/journals/bull/1928-34-01/S0002-9904-1928-04516-0/S0002-9904-1928-04516-0.pdf)

<comment><USER18> Can you justify using material implication?

It's possible to create reductio ad absurdum in Coq:

        Definition reductioAdAbsurdum (X:Prop) (f : (X -> (X -> False))) (x:X) : False := f x x.

But not the law of the excluded middle.

Edit: It's much clearer in Idris:

        reductioAdAbsurdum : (x -> (x -> _|_)) -> (x -> _|_)
        reductioAdAbsurdum f x = f x x

<comment><USER3> I am assuming that we are talking about taking the law of excluded middle out from classical logic, where all the other things independent from that law still hold, and I think implication being material is independent.

<comment><USER18> I mean material implication as in:

 _In propositional logic, material implication is a valid rule of replacement which is an instance of the connective of the same name. It is the rule that states that "P implies Q" is logically equivalent to "not-P or Q"._

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

<comment><USER3> Yes I understand, but why do you think it needs justification? As far as I understand this is simply the definition of implication in classical logic, for one it follows from the truth tables of both expressions.

<comment><USER18> OK, but we're not talking about classical logic, otherwise the question about whether the law of the excluded middle is derivable is uninteresting.

<comment><USER3> Well, that's exactly what people were considering and what the article is referring too, a variant of classical logic where everything except the law of excluded middle holds true. I don't think this is uninteresting, which postulates are independent from one another is one of the core problems in logic.

Nice flame, eot.

<comment><USER18> I didn't mean to flame, I thought we were having an interesting debate. I was under the impression we we're talking about logic systems in general where reductio ad absurdum exists, but the law of the excluded middle doesn't. Anyway, thanks, I learnt much.

<comment><USER3> This would be a very peculiar logic I think, maybe you just come from a very different background and hence all the hair-splitting was necessary, we just wandered so far away from the original point I lost patience, maybe unnecessarily, in the end it really was an interesting debate for me too.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> <http://xkcd.com/435/>

</comment><comment><USER21> Abraham Robinson's Non-standard analysis (<http://en.wikipedia.org/wiki/Non- standard_analysis>) used a modern axiomatic approach to legitimize Isaac Newton's intuitive use of infinitesimals, by creating a superset of the real numbers, some of which were smaller than any ordinary real (infinitesimals), or larger (infinite).

He then went on to prove new things with it.

And he started out as an engineer.

</comment><comment><USER22> Vague and unenlightening. I kept skimming through looking for the part where where it explains what this "revolution" is supposed to be but it never actually does. Edit: objection withdrawn.

<comment><USER7> The revolution was clearly explained: it's the formalism viewpoint, most famously expounded by Hilbert, "mathematics is a game played with meaningless symbols following rules on paper." What this means is that we can discuss mathematics discarding all personal biases and intuitions. We can give personal meaning to these meaningless symbols and abstract rules, but we don't need these biases when communicating to each other nor when we actually have to perform computations or deductions.

The example given at the end is fractions, you can think of fractions in terms of pies and pizzas, but it's much more effective to ignore any of that when it comes to actually perform computations with that and simply focus on the "meaningless" symbols and manipulations that you do with them.

It's a pity that you tl;dr'ed this.

</comment></comment><comment><USER23> There's a paper that stress how this transformation occurred well before in Germany, specially in Göttingen, named "Klein, Hilbert, and the Göttingen Mathematical Tradition" by David Rowe.

It makes a good point in how the changes initiated by Weierstrass and Cantor, by throwing away Geometry as a requirement to think in mathematics, ultimately lead the way to us to think in axioms and algorithms that's basically is how we do mathematics today. (The part about Cantor and Weierstrass is not stressed in the paper though).</comment>


Ask HN: Why do you think you have the tendency to criticize everything you read? - <AUTHOR> Whenever I open the comments section in a place like HN, it is always bombarded with people finding minute details to criticize what someone wrote. It is nigh impossible to find individuals who manage to balance re-emphasizing some of the great points that an author spent hours/days writing coupled with maybe a few extra notes of their own or constructive criticism.
I have a few opinions on the subject which ranges from people being treated like that at work and finding a channel to 'pay back', not being able to put themselves in the other's shoes, feeling like everything is trying to sway them so they need to keep their guard up, feeling small in relation to the author and using comments to try to fill the gap.
Now fellow HNers, please tell me from your perspective, why do you think you have the tendency to criticize everything you read? Why do you think that is the best approach? Do talk to family members and colleagues the same way you talk on HN? How would you change your and other people's approach to create a growth minded environment? <comment><USER2> Both appreciation of the good aspects and criticism of the flaws is essential. The former is easier as the authors always make sure they mention them explicitly in their article so as to create more impact among the readers. Many times they DO NOT talk about the limitations to avoid criticism, hence you'd expect this comes from readers who are slightly outraged that the authors took them for a fool.

</comment><comment><USER3> I think that is a bit of an illusion --

Scenario 1: You see something that make a good point. You nod and move on... maybe upvote. But the result is that good points are quiet threads, and don't fill up the site with huge discussion because they simply made a point and left it at that.

Scenario 2: "Someone is wrong on the internet!" Downvote! Argue. Get upvotes for proving someone wrong. Busy threads, with higher emotion.

I don't think people come to HN to deliberately argue and criticize. But argumentative threads get more heated, are longer, and take up more of the discussions, and thereby have high visibility.

My personal approach it that I mostly only read the top 1-2 levels of any thread, and try to not go down negative rabbit holes.</comment>


What webhost do you use for your startup? - <AUTHOR>

<comment><USER2> I recommend <http://www.slicehost.com/> I was blown away by the simplicity and power of their service. All the benefits of your own box with far less hassle and only $20pm starting fee. Loads of really good documentation on getting a production RoR environment up and running too. They're probably the best bet for bootstrapers and students.

<comment><USER3> We use slicehost too for our web app. Even if most of their customers appear to use RoR, we didn't have any issue in setting up Apache and MySql and getting our Java/Tomcat/Struts/Hibernate web application up & running even on a VPS with 256MB of Ram.

<comment><USER4> Checked out the rest and Slicehost seems to appeal to me the most. I love their pricing plan! very simple and straight forward. Though how do they compare to RailsMachine etc. in terms of scaling Rails apps?

</comment></comment></comment><comment><USER5> <http://www.webair.com/> \- I've got a few servers with them, great service and prices. I can get you custom prices that aren't listed on the site; for example I've got a quad xeon 3ghz with dual SCSI 120gb drives, 4gb ram and 10mbps unmetered for 249/month.

</comment><comment><USER6> I'd definitely recommend <http://rimuhosting.com>

I know of at least 1 YComb startup that has used it in the past - and we're using it now. I've personally been hosting with them for 2 or 3 years now and it's hands down the best virtual hosting I've used (compared with 4 others I've tried).

Other friends are using Amazon EC2+S3 for scaling needs (on the fly load- balancing). Haven't used it myself, but I only hear great things.

<comment><USER7> I'd second that vote for Rimu. I used them when I started Furl and I continue to use them for my new projects. They are truly fantastic when it comes to support.

</comment></comment><comment><USER8> we use joyent.com - at least we try to... The portfolio is impressive, and we mainly chose them because they offer horizontally scalable rails solutions, something that many providers are still missing.

We requested the new server 2 weeks before. Still no server...

Do you know of alternatives we might be looking for?

<comment><USER8> Well, it turned out their mails got caught in the spam filter and we managed to overlook them :-( What a shame...

</comment></comment><comment><USER9> I like Linode: <http://www.linode.com>

They may be a little more expensive than other VPS hosts, but they make up for it with awesome, rapid service turnaround. I've been using them for three years, and I don't think I'd switch to anything except maybe EC2.

</comment><comment><USER10> Geoff Brozny at <http://www.glorb.com> He is fantastic at customer support. Send him an email anytime and he will respond within an hour - usually, within a few minutes.

</comment><comment><USER11> I'd recommend Railsmachine. I wrote a post about it here: <http://blog.wakoopa.com/archives/how-we-got-hosted-the-rails-way>

</comment><comment><USER12> for projects written using Rails, i would suggest engine yard or railsmachine

</comment><comment><USER13> Softlayer

<comment><USER14> As recommended by iJigg....Softlayer ... and they are just beautiful!!!

<comment><USER13> Dude these guys should gift me free servers. I've referred at least a dozen people to them since our launch. Until their great service continues I won't complain.

<comment><USER15> We're trying to decide whether or not to set up a box at our place for our initial launch or to use a remote host. Looking at softlayer prices, it looks like things can add up pretty quickly. What is your experience with the costs - does it make sense given the low expense of boxes and bandwidth? Do they have a good scaling up path?

<comment><USER13> We have two boxes with them. We've few ideas about scaling. I am personally of the view that when we have a scaling problem, we'll address it without worrying too much about it beforehand. It can easily bog down your startup in calculations that will likely mean very little when you do actually have a scaling problem. Having a rough idea in your mind is a good idea IMO.

I believe this is the advice that delicious founder gave too in his writeup.

</comment></comment></comment></comment></comment><comment><USER16> For simplicity and affordability, you can't go wrong with GoDaddy.

<comment><USER17> Really?

<http://nodaddy.com/>

<comment><USER18> We're also on GoDaddy, and haven't had any problems so far (granted, we're pre-launch, so we haven't had a chance for any of the really taxing stuff to occur). We haven't ruled out switching services if there's a problem, but we might as well start simple.

You have to take into account company size when weighing complaints. The bigger hosting providers - GoDaddy and DreamHost - will necessarily have more negative opinions, simply because of sheer numbers. But there are many, many satisfied customers of them.

</comment></comment></comment><comment><USER19> site5</comment>


Raspberry Pi Camera Board is available - <AUTHOR> https://export.farnell.com/jsp/raspi/orderPad.jsp?&country=GB On UK Farnell website. Check it out! <comment><AUTHOR> also here on the Raspberry Pi website: <http://www.raspberrypi.org/archives/3890></comment>


Launching Posterous Groups: Smart email lists made easy - <AUTHOR> http://blog.posterous.com/get-your-group-on-introducing-posterous-group

<comment><USER2> So let me get this straight. Your big pitch is "Sharing privately with groups is broken right now ... Multi-attachment, inbox-cluttering emails."

And you're solving that problem (a few sentences later) with "Every time you post to the group, she'll receive the full content as an email. She can reply directly to your email and everyone in the group gets her update."

How exactly does that solve any inbox-clutter problems whatsoever? If anything, it seems like it'd create even more inbox clutter. Am I missing something here? Sending more emails results in less clutter?

</comment><comment><USER3> This would have been more interesting and innovative a couple years ago, but now that everyone and their mother (and grandmother, and grandfather) are on Facebook, I think Facebook Groups is a fine solution that offers all the features listed here.

I had this exact problem twice in the last month, and both times, I found that everyone in the two real-world groups I was trying to bring online was already on Facebook. Literally every single person out of maybe 50 people total, spanning age ranges from teenagers to folks in their late 50s. I found it much easier to get them to use it than it would have been if I had to explain this new posterous thing.

<comment><USER4> We found that Facebook Groups felt more like a group wall than a product for sharing and collaboration. You can't send attachments via email, and you can't reply with anything besides plain text.

Posterous Groups makes email the core of the product. You can do everything via email including creating a group and replying with rich media attachments. There aren't any restrictions on what you can post.

Facebook Groups doesn't work well as a mobile experience. It's important for me to be able to post and consume content from my iphone. This works well in email and using the Posterous iPhone app.

While Facebook does have a large user base, there will always be people who aren't on the service or don't sign in to it regularly. We're firm believers that email is the best way to reach people.

We've made it seamless to get non Posterous users to understand how a group works and how they should participate. Give it a shot and please send feedback our way.

Thanks!

<comment><USER5> Can a Posterous group autopost to a Facebook Group?

<comment><USER4> we don't autopost to facebook groups right now but we might add that in the future. You can also autopost to a facebook profile or page

<comment><USER5> That's great, thanks. I didn't realise until this announcement that you guys are competing with facebook in some respects (at least in terms of where people spend time online). The way you guys are going, I won't be surprised you will be one of the biggest players on the internet in a few years.

</comment></comment></comment></comment></comment><comment><USER6> I just tried it. It works well as a replacement for Google Wave - but it's nicer. Also, the emails means that there is instant notifications, which was a flaw that gwave had.

</comment><comment> mike-cardwell If I send a HTML email to a group which contains an iframe, an img tag, and an input field of type "image", all referencing a remote URL, the process of viewing the email in the posterous interface automatically causes the browser to fetch each of those resources.

This is a privacy leak. You should remove references to these remote resources when displaying a message in the posterous web interface. You should then provide an option to "Load Remote Images". Much like most email clients do.

</comment><comment> mike-cardwell You have a tracking image embedded in the emails. It points at a redirector script which does no validation of the destination url. This is highly abusable. Example:

[http://r.posterous.com/track/?redirect=http%3A%2F%2Fgoogle.c...](http://r.posterous.com/track/?redirect=http%3A%2F%2Fgoogle.com%2F)

<comment> mike-cardwell Ouch. It looks like you've done this on purpose. If I send an email with a link to the list, the link in the email I get back bounces through r.posterous.com.

This _will_ be abused by spammers...

<comment> mike-cardwell Ok. You have yet another open redirector here: <http://posterous.com/logout?jumpto=>

Not good...

<comment><USER4> Thanks, Mike. We're fixing this up right now.

<comment> mike-cardwell And yet it's still not fixed.

</comment></comment></comment></comment></comment><comment><USER7> Cool. What is Posterous's business model?

<comment><USER5> They've now got a solid product and userbase. The business model could be any of advertising, affiliate marketing, lead generation, premium features, ecommerce.

<comment><USER8> Totally agreed. But which _is_ it? The decision on any of those models, if not properly considered, could have impacts that reverberate through their product and userbase. Advertising, done wrong, could break their clean aesthetic. Affiliate marketing, done wrong, could hurt people's trust. You get the idea. The business model is a part of the design, in that it works in concert with it - and people are eager to see the fuller vision of posterous realized.

That said, I agree. I think it's great that they're taking some time to see how their product evolves, especially when they seem to sincerely want to "change the game." One thing YC companies seem to do well is that they have the patience to take the time to explore those markets alongside their users, instead of dragging them into a business plan that detracts from how users want to use the product in their daily lives.

EDIT: Whoops, this answers part of the question, from their FAQ: Yes, Posterous is enthusiastically a free service. Later, we'll be adding premium features we know you'll love, but there will always be a useful free version you can use.

<comment><USER5> Sachin's mentioned planned premium features in the past, so I think that's a good bet. They could also do one-off deals with big companies, like they once did with Coca-cola and Loopt recently did with Virgin. They've got a good brand and smart founders, I expect they will do just fine.

<comment><USER9> Honestly, I startups often say "premium features" because that's something that users understand and aren't scared by.

Posterous has raise $5M, so they really need at least a $40M exit, preferably bigger. Are they really going to make enough for that kind of exit from a small percentage of their users paying, say, $5-10/month for premium blogging features? Doubtful.

I think their plan, as well as that of many other startups, is to grow as much as possible and then either find a way to monetize their large number of free users or get bought by a company that wants some combination of the users, the employees, and the technology. But the average user won't be reassured when seeing this in an FAQ:

"It's free, what's the catch?"

"We want to get as many users as possible while making no money, and then we'll find some way to either bring in revenue or sell the company"

Users would worry that Posterous either will die one day when they run out of money or eventually realize they need to make money and ruin the product. But "you'll always be able to keep your same free product, but we'll add some even better features that cost money" isn't scary.

This isn't unique to Posterous. I don't remember which startup there was, but I saw "premium features" on the FAQ of another startup and literally laughed out loud because I knew that the combination of the amount of funding they had raised and the small amount that most users would be willing to pay meant that that was a lie.

</comment></comment></comment></comment></comment><comment><USER10> Bug: I already had a posterous account, and whenever I try to create a new group it just sends me in circles and breaks. :-(

<comment><AUTHOR> We're tracking this bug down now -- mind letting me know repro steps? We'll fix it asap -- email@example.com

Thanks Emmett!

<comment><USER5> Posts don't show up in the right pane in Firefox 3.0. I reported this bug in the beta test.

</comment></comment></comment><comment><USER11> Two questions:

\- Can groups be members of other groups?

\- In gmail when I click "reply" to a mail sent to the group, it just goes back to the sender (there is a "Reply To" visible in the mail, but gmail isn't using it for some reason).

Otherwise, neat stuff. Not everybody in my family is on Facebook, and others in the family are leery of using FB because of privacy issues (unintentional information sharing between friend circles).

<comment><USER12> 1\. Absolutely, you can be a part of any combination of public and private groups that you like.

2\. It should go to a custom email address and will function as a reply to the post. The sender's name is the author of post or reply in that notification.

<comment><USER13> I think you read 1 inside-out. The question was basically if groups can be nested inside groups.

<comment><USER12> Whoops... well, then the answer to #1 is no, they can't.

</comment></comment></comment></comment><comment><USER14> And when does this gang plan to make some money? I fail to see a business model taking form.

</comment><comment> mike-cardwell I love the way you've made this work. However, it does not behave well with PGP signed emails. When a message is MIME/PGP signed, the attachment is stripped and dropped. When a message is signed inline, posterous corrupts the message leaving the header in place, but dropping the signature. If this is fixed, I am likely to use this service for some technical lists.

</comment><comment><USER15> How is this different to frid.ge or neetly.com?

<comment><USER4> Think of Posterous Groups more like an email list on steroids than a web based groups product. You can invite people by adding their email address to the group, and they dont have to sign up for anything to use the service.

The service is fully functional as an email list, but better since it handles rich media well.

</comment></comment><comment><USER16> Maybe its the WikiLeaks debacle lately, but somehow my first thoughts were "cool, like that" and then "i cant use it, because i cant trust posterous with my data"..

<comment><USER5> You'll have to trust _someone_.

<comment><USER17> In this case, your email provider, everyone's email provider _and_ posterous.

</comment></comment></comment><comment><USER18> Genuine question. How is this better than Yahoo Groups?

</comment><comment><USER19> If it doesn't require confirmation from group members, how do they stop spammers from abusing it?

</comment><comment><USER20> Can a person join an existing Posterous Group using only email?

</comment><comment><USER21> Wow I had the idea to do exactly this only a few days ago.

</comment><comment><USER22> Why would someone use this over google groups?

<comment><USER4> better member management (people don't have to create accounts); photos, video, audio, documents are all supported natively; web view is far superior. Give it a shot and let us know what you think!

</comment></comment><comment><USER23> Hmmm... is this slinkset's successor?

</comment><comment><USER24> You guys beat me to it (launching something similar this week). Very nice, indeed.</comment>


Ask HN: Project Management Software or Google Docs? - <AUTHOR>

I'm working for a startup in the travel industry and I've been thrown into a project management role. I've been using Google Docs to manage the development backlog but it's getting pretty messy. Wondering if anyone has any insight on whether or not moving to something like Rally Software or a different SaaS project management tool would be overkill or a good move for a small dev team (3 coders and 1 designer)? <comment><USER2> Definitely a project management tool, even at a team your size. As a project manager, features that facilitate multi-issue tracking, prioritization and estimation will soon become invaluable.

And plus, getting everyone used to a tool early and making it part of the development process would pay off in the long run. Especially when the team expands.

</comment><comment><USER3> Use the right tool for the job.

Google Docs is not project management software, so you waste time and energy setting it up to do what you need. I've just moved to project management software and found that because it is structured to manage a project, it gets out of the way and lets me think about what the project needs.

</comment><comment><USER4> I use trac. It has ticket/backlog management, a built in wiki, subversion integration, and it's free. I highly recommend it.

</comment><comment><USER5> We've used Google Docs before for project management (my boss is a Google fan) and honestly man, it's a pain.</comment>


On becoming a better developer (2015) - <AUTHOR> https://gist.github.com/prakhar1989/1b0a2c9849b2e1e912fb <comment><USER3> You have to decide what exactly it means to be a better developer, and what exactly _you_ specifically want to achieve.

I personally made the choice, a few years ago, to focus a lot less on being a "great developer" in terms of writing the best code, and focus almost solely on "what can I actually achieve with code I write". That's why I refocused on learning new _domains_ rather than deepen my knowledge about programming, e.g. learning ML and Data Science, instead of learning new languages or getting better at software design principles.

The end result is that, while I might never achieve _mastery_ of software architecture or of Python or other more software development oriented things, I can effectively do new things that I had no idea how to do before.

Another example - let's say you know just Python. In choosing between learning Haskell or learning 3d programming, learning Haskell will definitely deepen your knowledge of programming, of languages, of functional programming. But, end result, you won't be able to make something qualitatively different that you couldn't make using Python. Learning 3d _will_ allow you to make new things.

Note: I'm _not_ saying one thing is better than the other. Different people care about different things. I'll also point out that I've been a developer for 20 years, so I hopefully achieved a pretty high level of knowledge in many purely software development ideas before branching off to learn whole new domains. :)

<comment><USER4> >In choosing between learning Haskell or learning 3d programming...

This is a false dichotomy: [https://wiki.haskell.org/Game_Development](https://wiki.haskell.org/Game_Development)

As the linked response from Rich Hickey pointed out, you can do anything in any (Turing complete) language.

I agree with the notion behind your decision to focus on real results though. I think that is actually closer to the mastery part of the progression from beginner to master. I think when one can deeply realize that programming is just a tool to achieve other things, then one is leaning towards the mastery end of the scale.

That's not a hard rule though, I think part of the problem we all have discussing this sort of thing is that we have a hard time consistently measuring where a person is on that progression.

<comment><USER5> > you can do anything in any (Turing complete) language.

Exactly. The point of the parent was what to choose between learning a new domain or a new programming language (when you already know python) and what would give most value combined. I agree that knowing python+3d will be more valueable than python+haskell.

</comment></comment></comment><comment><USER6> "Musicians get better by practice and tackling harder and harder pieces, not by switching instruments or genres, nor by learning more and varied easy pieces"

You do however becomes a better musician by playing different instruments, even if you're only really good with one. Learning drums as a piano players helps you focus on rythm precision.

I'd take a general developper that knows both mobile and backend over any specialized mobile developer anytime.

<comment><USER7> Someone who's bilingual can have meaningful conversations in both languages. Beyond that they can see the connections/differences between the two languages and gain a deeper understanding.

However someone who's learnt 15 can probably only order a coffee in each one.

<comment><USER8> >However someone who's learnt 15 can probably only order a coffee in each one.

Talk to Ioannis Ikonomou who's considered to be good at 32 languages and has cursory knowledge of a few more: [https://en.wikipedia.org/wiki/Ioannis_Ikonomou](https://en.wikipedia.org/wiki/Ioannis_Ikonomou)

He's even a certified Chinese translator, and that was one of the later languages he learned.

I think you'll be surprised if you go to Europe how many people you'll find who can do a bit more than order coffee in at least 5 languages.

<comment><USER7> I did say 'probably'. If someone can speak more than 12 languages they're a hyperpolyglot. You'll probably find as many living Nobel Prize winners as hyperpolyglots.

Plus I live in Belgium and my partner speaks 5 languages.

I think the comment still stands for most mere mortals.

<comment><USER8> Yeah, I agree, most people can't speak 15. But more than bilingual is very common at a somewhat good level.

</comment></comment></comment></comment></comment><comment><USER9> In my career, the biggest factor in my growth as a developer has been working with better developers. To work closely with someone who is really good at what they do is the best education you can get.

<comment><USER10> This is a frustration I have with my current position. I'm the second most experienced person on the team, and most knowledgeable about our platform. And I'm...not that experienced or knowledgeable. Big fish, small pond has never appealed to me. It gives me no one to check my ideas with, and pulls me, as much as I consciously resist, down the path to being a know-it-all Dunning- Kreuger assbutt.

<comment><USER11> Yeah, in general, if you determine you're the best player in the band and have been so for a while then it might be time to consider changing bands.

</comment></comment></comment><comment><USER12> Abraham Lincoln studied Euclid to become a better lawyer (to learn how to "demonstrate").

I've just studied a tiny bit of Euclid, and his design of lemmas (technical theorems, not beautiful in themselves, whose beauty is neatly meeting needs in higher-level theorems), is program decomposition into modules, _that you can see_.

I can't be sure yet, but I feel I'm already thinking more clearly.

EDIT _Euclid_ means "renowned," from eu "well" \+ kleos "fame".

This jibes well with the team-theory: _" Because the lack of biographical information is unusual for the period (extensive biographies are available for most significant Greek mathematicians for several centuries before and after Euclid), some researchers have proposed that Euclid was not, in fact, a historical character and that his works were written by a team of mathematicians who took the name Euclid from the historical character Euclid of Megara (compare Bourbaki)."_ [https://wikipedia.org/wiki/Euclid#Life](https://wikipedia.org/wiki/Euclid#Life)

<comment><USER13> I had the same insight from the opposite direction. My background is mathematics but have been struck by the similarities between refactoring code and splitting a proof into lemmas, corollaries and theorems. There's also an art to creating good definitions during mathematical exposition, which is akin to creating variables to encapsulate the right data and naming them well.

BTW Pythagoras is another ancient Greek who may well not have been a historical character.

<comment><USER12> Please bear with me while I draw a parallel:

 _Elements I, 32_ (triangle sum theorem) [https://mathcs.clarku.edu/~djoyce/elements/bookI/propI32.htm...](https://mathcs.clarku.edu/~djoyce/elements/bookI/propI32.html) looks lopsided - especially compared with this nicely symmetrical one: [https://math.stackexchange.com/q/2727737](https://math.stackexchange.com/q/2727737)

But _I, 32_ also shows that an exterior angle is the sum of the two opposite interior angles - which seems an odd, weird thing to prove, but fits nicely into other theorems. The one I've seen is the proof of the inscribed angle theorem, _III, 20_ ([https://mathcs.clarku.edu/~djoyce/elements/bookIII/propIII20...](https://mathcs.clarku.edu/~djoyce/elements/bookIII/propIII20.html)). The diagram has much going on, but the relevant parahraph is labelled with a link to _I,32_ on the right.

The parallel with code is that I've sometimes seen very clever methods, that extract an odd-shaped piece of code, from several places. An example is from maths, the delta-mew algebra (forgotten the proper name) for numerical differentiation in computational fluid dynamics. Though, that example is really maths again.

The thing I wonder is if this is _too clever_... if a module has intrinsic beauty/sense/symmetry, it's easier to understand, remember and use - especially for the next neophyte to touch the code (or me in six months). However, maybe if you are an expert (like Euclid), these helper-theorems quickly became as familiar as alternate interior angles have for me...?

I think the difference is geometry is always the same, one eternal codebase. The modules can be reused all the time. But programmers are writing new code, in new areas (to them), all the time. So perhaps we just can't get to that level of specific mastery (of particular methods) - if we did, we should fully encapsulate them somehow! We need APIs that let us ignore the details - <USER2> you work in the same area, long term (perhaps in writing an API).

Of course, just like modules, we can use a theorem and ignore the details (proofs)... but in the above case, we still have this odd, asymmetrical _shape_ in the theorem, which is (I think) similarly hard to understand, remember and use. Even though that shape is a more useful one!

What do you think?

<comment><USER13> I'm finding it difficult to pinpoint where/why you think there's a difference. Absolutely there's a strong parallel between an oddly constructed theorem and an odd-shaped piece of reusable code.

Geometry may be an eternal, perfect realm of ideas, but the actual _codebase_ is the book, which is exceedingly good but is not perfect, especially given the restraints of the medium (written text).

Someone who is practiced or naturally talented will be able to read that book with a similar ease with which you read elegantly written code (c.f. Einstein being amazed at the "lucidity" of Euclid's elements at the age of 12). For everyone else, I can imagine having a different, easier to grasp codebase for Euclid's elements: perhaps transcribe it into a wiki-like computer document which allows the reader to browse and flick between the referenced lemmas much more easily.

Both mathematical exposition and coding, and in fact almost any sort of writing, involve a sort of data compilation from a very high-level language ("how I/we understand it in my/our head/s") to a lower-level language which is more rigorous but lacks an interactive element.

<comment><USER12> Well, I'm still struggling with the question!

I wasn't thinking ideas _vs_ their expression.

I see you're saying: you can have different expressions of Euclid for people of different abilities. (Actually, even different proofs for different levels: the high school proof of the Inscribed Angle Theorem is different in part from Euclid's, _III, 20_ (though I found Euclid's clearer and simpler)).

The difference I noted was just that geometry is like _one_ codebase. But programmers deal with many codebases - there's no ugrad or high school course in a particular codebase!

Though, in a large company, do you get experts in their key codebase, both practiced and talented. But there's still a reluctance to invest your all in a codebase - what if they rewrite? Or go out of business? Or you quit? Your investment is lost. Not so with geometry.

There's also market forces for the adoption of third-party libraries (a library of theorems - like Elements' books!) - dominating the market will require being accessible to a range of abilities. A "pop culture", for better or worse.

I guess you'd say: "fine, the easier expressions will dominate". But I don't think there'll be any higher expression at all...

So... not a difference in essence, just in its role in the world.

BTW I find Euclid very hard to read, but easy to understand (so far, anyway).

BTW those links I gave are to a "wiki-like computer document".

</comment></comment></comment></comment></comment><comment><USER14> This really isn't understandable without the context of the article this one is a rebuttal of ([http://jasonrudolph.com/blog/2011/08/09/programming- achievem...](http://jasonrudolph.com/blog/2011/08/09/programming-achievements- how-to-level-up-as-a-developer/#comment-287120251)), and specifically this "method" that the author of the first article uses the be a good developer:

        1. Identify the experiences that advance a person as a developer.
        2. Select a particular experience to pursue.
        3. Pursue that experience to completion. (Achievement unlocked!)
        4. Reflect on that experience. Really soak it in.
        5. Return to Step 2, this time selecting a new experience.

The rebutal's point is that instead of cycling back to step 2 after step 5, you should continue above and beyond, becoming really expert in the field you decided to pursue.

What the rebutal misses, in my opinion, is that in order to go beyond step 5, you need to have chosen an ambitious subject in a first place. A symptom of wanting to cycle from 5 to 2 is that the experience you chose isn't that significant and you can explore most of it quite rapidly. I see it a lot in the web development world, where after having done one or two CRUD applications devs have seen it all, and start cycling through technologies, frameworks and methodologies to make it more spicy.

One solution to this is to move deeper into the backend of rich and complex software/websites, where solving problems related to distributed systems, algorithmic efficiency and architecture will provide (but also require in a first place) vast knowledge and experience; enough for one career at least. Other fields than webdev also work well for this, including embedded systems, security and digital imaging.

</comment><comment><USER15> I look at this in the same way that I used to look at creating Diablo 2 characters when I was a kid.

You're building a skill tree. The first thing you need to take into consideration is whether you're playing with other people or solo.

If you're playing solo, you need to be more of a generalist. You need to pick just the right skills so that you're able to handle an scenario that the game will throw at you. You need to be able to deal at least two types of damages, for when you're facing monsters that are immune to some types of damage. You also need decent defence. And preferably a way of travelling over obstacles.

When you're playing with other players, you can go for only one type of damage, and pick other skills that amplifies or synergises with this skill. You actually don't have to focus on damage much, if you can tank and take damage well to protect other fragile players who do lots of damage. Or if you focus on doing lots of damage but you're a bit of a glass canon, you just need to make sure that you're playing with another player than can pull the attention of dangerous monsters.

In both scenarios you need to pay attention to how you build your skill tree. Just the considerations are a bit different.

I tend to pick skills and technologies to learn that are on different parts of the stack, because I often work alone or in small teams. I need to be able to create a whole app with front-end and back-end and manage the infrastructure. So I only pick one front-end framework, one back-end framework, and one or two infrastructure tools.

It's a tall order, but you can do it if you don't spend time learning things you don't need to.

On the other hand, people who work in large teams are usually better off focusing on their niches. So if you're a front-end dev, you can learn 2 or 3 different front-end frameworks, and it will make you a more effective front- end developer in both. It's just that you get diminishing returns with each new front-end technology that you learn. But this is work it if you're in a position where the other parts of the stack are handled by people who focus all their efforts to be exceptionally competent there.

<comment><USER16> I consider myself a generalist. At least, on my side-projects, I'm a generalist because I have to build the entire "system" all by myself :)

At my day job, however, I'm specialized more into backend stuff: architecture, databases, etc., it pays decently well, but it's become so familiar (and mostly straightforward with the types of problems I work on) that it's starting to get boring.

My 'other' skills which I've cultivated on my own time do occasionally come in handy at the day job, however. I do try to hide the fact that I know how to do things like system administration, ansible, etc. ;)

</comment></comment><comment><USER17> Two metrics for developer greatness:

1) How complex are the real-world problems that you are able to solve effectively?

2) How robust and long-lasting are your solutions?

Note that these metrics are actually not specific to software at all!

\---

The post essentially says the same thing near the end, with the distillation: "the ability to acquire knowledge, and the ability to solve problems".

Interestingly, you could view this as actually only looking at a single variable, but considering both its current value (problem-solving ability) and the change over time (ability to acquire new knowledge).

</comment><comment><USER18> I agree completely. Programming is not some special skill that deviates from the norm. It helps a lot to master one language before moving on to another. This is not to say that trying new languages is not a good idea, just that the focus should be deep not shallow. Unfortunately, a lot of this industry is all about shallowness when it comes to hiring. It's almost like having experience is looked down upon, but knowing the framework of the day is a critical criteria for hiring. I think part of this is because the industry is dominated by incredibly short lived, incredibly buggy, incredibly low quality software: aka what every startup anywhere develops when it sees itself not as a sustainable business, but one with an exit a couple of years down the road.

</comment><comment><USER19> While this does make sense, as a junior developer what I'm trying to grapple with is how fast our tools (specifically the "standard" languages) change. I can become a master in Laravel and PHP after years of work, but by the time I'm at that point the world will have moved on. My capabilities within my skillset will be impressive yes, but will it help me in the new industry environment?

I think it's that fast-paced nature (and partially scaring newer devs into trying to keep up) that causes many of us to try and learn broadly rather than deeply. For an analogy, it's like investing in an index fund and being diversified (and thus having more overall potential for gains and less risk of loss) than a single stock.

Disclaimer: I'm still fairly new to the industry for all intents and purposes so I welcome opinions on this.

<comment><USER20> The best way to circumvent this feeling is to learn how programming works rather than how PHP and Laravel work. If you know what a web server is, how to scale it, know a little about web security, and how to write OOP well you're in very good shape. Don't learn the intricacies of Laravel, you can pick those up on the job. Learn enough about PHP to be able to identify what goes into a programming language and to be able to look at other languages and tell how they are different and the same past one using the word "const" instead of "let".

<comment><USER21> Or become an ES6 ninja and use both "const" and "let";). On a more serious note, it's strange how has "let" became an identifier for mutable data in js, while eg. ML uses it for the opposite if I recall properly.

<comment><USER22> Well, ML doesn't explicitly use it for immutable data. It's just how you declare variables. It does happen that most variables are immutable though.

</comment></comment></comment></comment><comment><USER23> The first sentence is "Sorry, I have to disagree with the entire premise here."

What entire premise? What is this in response to?

<comment><USER24> I too was puzzled about what this is in response to. Midway through the comments I found a link to the premise article: [http://jasonrudolph.com/blog/2011/08/09/programming- achievem...](http://jasonrudolph.com/blog/2011/08/09/programming-achievements- how-to-level-up-as-a-developer/#comment-287120251)

It's responding to an article saying the way to improve as a developer is to have more "experiences". To summarize briefly, some examples from the article are to write an application in a bunch of different programming paradigms. Write an app in a bunch of different platforms. Write a bunch of different types of programs. Do a bunch of different open source things. Do a bunch of different conference/teaching things.

Personally, I think a laundry list of "experiences" kind of misses the point. If I think of great developers, they don't really check off many boxes on that list. Their ability is basically orthogonal.

<comment><USER25> Thanks man.

<comment><USER3> Just FYI since you appear to be a new user: on Hacker News, writing comments like yours is considered bad form. You should instead just upvote the parent comment, that's the HN way of showing appreciation.

The reason is that, at least in theory, every comment on HN should be adding value for people to read, and reading a bunch of "thanks" messages is just a waste of time. Much better to just have the original comment appearing higher because it got more votes.

<comment><USER26> Just say you're welcome.

<comment><USER3> I'm not sure I understand?

It wasn't my article, I'm just pointing out the site policy to someone who appears new so that they don't get downvoted in the future.

<comment><USER26> My apologies. At the time, I was expressing my distaste for what I view as an over-zealously regarded sentiment here, but I did mistake you for the above user :)

</comment></comment></comment></comment></comment></comment></comment><comment><USER27> Personally, (I can't speak for everyone, or even most), I find enormous value in breadth of knowledge. For example, purposefully using different programming languages and/or different paradigms actually gives me a deeper understanding of the core problems that lie at the intersection of all of the various approaches and implementations of things.

Software engineers are first and foremost builders. We take components of varying degrees of abstractness and arrange them together in scalable, fault- tolerant ways that are amenable to change.

It is the understanding of the underlying and often transcendent principles of building things that I am a lifelong student of. To borrow the music analogy referenced in the article: you don't get good at playing the piano by playing the same pieces over and over again. You become a great pianist by understanding and internalizing the relationship between rhythm, scale, then motion of the keys, and the reaction of the listener. You can only do that by playing (and listening to) a wide variety of music.

</comment><comment><USER28> One important thing that was ignored in argument was you need to be nurtured in right environment to achieve mastery. Some people have that privilege (being born in right city, admission to a good school and landing a great first job).

Personally, doing stuff original author suggests like contributing to open source software and giving conference talks helped me to get noticed and picked into places that gave me the opportunity to grow.

What's important is doing those steps strategically to reach your goals.

</comment><comment><USER29> Basically by reading comments here, every single person has it's own view. Maybe there are too many variables in the equation to have bigger consensus.

Clearly it's a trade-off situation; I am on my early beginnings of journey to mastery, but what I decided and how I tackled the road was going for T shape! I am sure many know of this, where you cover all areas broadly, knowing what they are about and you've done some work with them at some point and time, but you didn't dig deep. Except one specific thing, that is your jam, where you chose to specialize and dedicate to go deeper. So in the end you are forming T shaped profile. I am near the end of studies and near the end of phase of trying everything. I know what kind of language/technology/tools, kinds of programming etc etc I like or dislike, so I think soon enough I'll be ready to chose that _one_ thing. Of course it doesn't mean you are done for life with other things, you have to catch the loop and ever changing nature of our industry.

In the end, why advices and stories on this topic vary so much is because we as humans are very different between each other. We react with different sensibility on different things in different times & places. So by the nature of things everyone has it's own journey to tell. But the problem occurs when people take it to personal and start pushing it over other people's attitudes and thoughts.

</comment><comment><USER30> I think is _some_ amount of specialization (which makes you generally good in your chosen area of expertise) balanced with _some_ amount of broad experience, which puts the "icing on the cake" and lets you discover connections that other people in your organization could not.

I am mostly working as a Java developer for large and very large corporate backends. I also have following experiences:

\- sysadmin for critical applications,

\- embedded development for payment terminals with severely restricted resources but lots of requirements

\- algorithmic trading (guaranteed single-digit microseconds request->response)

\- infrastructure automation (Infrastructure as Code, etc.)

\- Linux kernel and general Linux platform development

\- high level (automated reasoning, optimizations)

\- embedded with control theory

\- cryptographic protocol design

All this I think makes me much better Java backend developer that I could ever be if I just spent all that time on Java backends alone.

I frequently make various connections, am able to build much more efficient and reliable applications that I could without that added experience. I have much more balanced (you could say, mature) response to new technology, language features, frameworks, etc. -- in no small part thanks to Common Lisp, at the cost of no longer being content with Java. Or C++. Or any other fancy language that is not Lisp.

</comment><comment><USER31> Reminds me of how "confusing the muscle" came and went out of style as people realized you need specificity of training and you need to train a muscle with the same motion during its supercompensation recovery phase for it to further grow.

<comment><USER32> what is the supercomprensation recovery phase?

<comment> Tuna-Fish [https://en.wikipedia.org/wiki/Supercompensation](https://en.wikipedia.org/wiki/Supercompensation)

As a gross oversimplification: when you train a muscle hard, it accumulates low-level damage. This is why if you train continuously without any recovery, your ability level goes down, not up. The recovery phase is when your body repairs all that accumulated damage and builds the muscle back. Only, it doesn't stop at the level you started at, it goes past that and makes it a little stronger than it was. This is the supercompensation phase. If you just let it be, performance will eventually return to where you started at. But if you train again during this phase, you can reset the cycle, starting from a higher point.

</comment></comment></comment><comment><USER33> Misses out some big ones:

* Knowing how to disagree. * Knowing when "being helpful" is more important than "being right" and when the situation demands it. * Empathising with your end-users and developers who will one day own your code. * Managing a schedule and communicating it.

</comment><comment><USER34> > Musicians get better by practice and tackling harder and harder pieces, not > by switching instruments or genres, nor by learning more and varied easy > pieces.

I wouldn't agree with this statement in the first place. Switching instrument or style gives you a different perspective on music, and the same applies to software engineering.

If we want to go on with metaphors, 100 m dash runners don't only repeatedly run 100 m again and again during trainings. They do long runs, interval traings, weight lifting and much more.

Of course, diving deeper is necessary if you want to become expert in a field, but this doesn't mean excursions are not helpful too.

</comment><comment><USER35> I respect Rich Hickey, but let me be a bit of a contrarian here. Feel free to hate on me:

First, try replacing "developer" with a "production line worker" from the article and see how that feels, because that's what I feel "development" is turning into.

One of the most respected qualities of a programmer used to be "creativity". This is not the case anymore. Nowadays developers are so focused on "being seen as a good developer" than actually thinking about why they are a developer in the first place--to build cool stuff that can have huge impact. It's understandable since "being seen as a good developer" is what makes you money.

The concept of "developer" is turning into nothing more than a production line worker. If you don't believe me, just sit back and try to think of what tools you're using to build apps.

Is it YOU who's using the tools? Or is it the tools that are controlling you? You see this in all the "cutting edge tools" you must learn if you want to call yourself a good developer, such as webpack, react, grunt, gulp, npm, mocha, gradle, etc. etc. You spend most of your time learning these meta- technologies than actually building stuff.

These are great tools, but what they're also doing is automating everything so there's less room for creativity. Everybody builds apps the same way. Note that I'm not saying this is bad. I'm saying the "developers" are unknowingly becoming just a cog in the machine which can be replaced easily.

And I'm sure it WILL be replaceable because we are increasingly surrounding ourselves with these uniform ways of doing things. In the end there will be no room left for so called developers.

And when that day comes, it won't be the "better developer" who will be worth a lot because all these techniques you learned will be replaceable with machines. You may think that's some paranoid sci-fi stuff and you're still making $120K a year so you're just fine, but wait till you find yourself looking like a production line worker who get let go because machines are better at doing what you do. Let's be honest, most programming nowadays is nothing more than plumbing together multiple modules written by other people. These abilities won't be valuable in the future because they are totally replaceable with machines.

What truly matters is your ability to ideate and build something novel. Don't just follow the herd and do what the famous people say or tweet online, because you will end up becoming the casualty.

I guess what I really wanted to say was "don't try to become a better developer, try to become a better creator", because otherwise you'll be easily replaced in the future. It's coming.

<comment><USER36> Turning developers into production line workers is precisely what needs to happen. The way we produce code is so ruinously expensive that nearly everyone in this industry accepts the tradeoff between developer velocity and product quality. The only way out of this is to automate programming so thoroughly that only the creative necessities remain.

<comment><USER37> Expensive in comparison to what exactly?

The only other science that's cheaper is math. Now I know plenty of human endeavours that bring absolutely nothing of value, and only serve to concentrate wealth, and cost everyone worldwide billions of dollars.

Are you aware of the military budget of the greatest country on Earth?

Ruinously expensive - what an apt description, just not for computer science.

<comment><USER36> In comparison to virtually any other design work. The most expensive commercial buildings ever constructed are in the neighborhood of 5-15 billion USD. Developing a Linux distribution from scratch would probably exceed $10 billion in developer costs [1]. Just think about that. Linux, not even the largest codebase known, compares with the most expensive civil engineering projects in history.

Code is phenomenally expensive.

[1] [https://www.linux.com/publications/estimating-total-cost- lin...](https://www.linux.com/publications/estimating-total-cost-linux- distribution)

<comment><USER38> That sounds extraordinarily cheap, actually. The most visited mall in the world has something like 80M visitors/year. Linux has literally billions of daily users, and it powers everything from their phone to the public transport network they use.

</comment></comment></comment></comment></comment><comment><USER39> I dont know, I seem to learn a lot more from different programming languages, frameworks and libraries.

I could get deep knowledge in Java but wouldn't learn how to deal with concurrency from functional programming until maybe Java Lambdas and thus use some kind of object oriented hacking with locks, or a myriad of other useful methods and thinking that would be either much harder or un-doable in Java that has added to how I deal with code.

On the other hand, that could be the mark of a beginner so I might be mistaken.

<comment><USER40> I've frequently found that when I go back to code I've written long ago, the new languages/libraries/patterns I've learned about since could have helped me back then.

I used to be terrible at templating (presentation) many years ago. Like a lot of people I took it for granted, and considered it an afterthought compared to more "serious" work like writing backend business logic or data modelling. After hitting some frustrations writing a frontend, I started learning all I could to avoid writing those same giant html-templates rife with microlanguage, inline for loops, hugely nested conditionals, etc. I started reading up on xslt and a lot of the reasoning behind it. While anything XML is torturous to work with for a variety of reasons, a lot of the lessons I learned about writing good xslt (e.g. defining larger templates as composed of smaller ones, preferring `apply-templates` to 'map' datasets over explicitly for-looping over them) transferred to any other language. Eventually this got my interested in facebook's hacklang and its XHP syntax, which led me directly to React (jsx felt like XML that didn't scold me every time I forgot to spend 300 characters writing namespaces at the top) once it came out, and I was one of the first adopters.

Nowadays, I feel like I could probably go back to es3 and use plain functions, concatenation, and array methods and write better templates than I could using any fancy lib before, since I actually understand what I'm doing.

<comment><USER39> I can see what you mean, going to stop arguing on the internet anymore, realize its both addicting and embarrassing, any way to delete comments?

</comment></comment></comment><comment><USER41> Note: the article is from 2015.

To get better developers need to increase their area (Breadth * Depth). Going deeper and deeper in one area may make you an expert on that topic, but it is easy to become irrelevant if you have no breadth and a disruption occurs. Of course being wide but shallow can be equally troubling, since you can't do anything that requires more than the basics.

<comment><USER42> It's more like going "breadth first, depth later" vs "depth first, breadth later". RH argues for the second.

I 100% with OP since if you start "breadth first" you can just exhaust yourself before you've made any significant progress on the depth dimension (because there's so much variety in technologies, a lifetime is not enough to learn them all, and one you try to "spread out" you never know when to stop"). Also, going "depth first", you get clear feedback about when you've went deep enough and need to branch out a bit: things just start feeling _too_ hard!

Otherwise you can end up "repeating your first year for a decade" and end up with a much smaller total area.

</comment></comment><comment><USER7> I think there's a quote from Paul Graham somewhere along the lines of 'T-Type learners':

> Like paint drops rolling down from a paint stroke, the breadth is there but > at certain points the paint rolls down creating deep lines

So you can skim the surface but at some points you have have real focus. You need to choose these carefully and dive deep into them.

<comment><USER43> You can also go the other way around. It'd may require unlearning habits and be harder that way.

I think getting at least some depth when starting is necessary. Otherwise your skill is not usable.

</comment></comment><comment><USER25> What is this in response to? What/whose "entire premise" is he disagreeing with?

</comment><comment><USER44> Couldn't agree more</comment>