AA A321 takes off after smashing ground sign at JFK - <AUTHOR> http://avherald.com/h?article=4c68c5a8&opt=0 <comment><USER2> The avherald reporting is better. And has photos of the damage. Currently they're calling this an accident, not an incident, and per 49 CFR 830.2 that's because of the substantial damage to the wing. [http://avherald.com/h?article=4c68c5a8&opt=0](http://avherald.com/h?article=4c68c5a8&opt=0)

A passenger, who they confirmed was on the flight, says the pilot announced "a major computer failure".

The runway heading and wind conditions mean a crosswind takeoff. The plane would have a natural inclination to weather vane toward the wind (yaw right) and the right wing to have more lift (roll left). Proper crosswind takeoff counteracts this with right aileron and left rudder and slightly higher rotation speed. The left wing should have lifted sooner, not later, the idea being to bank into the crosswind to keep the airplane from drifting; and as the plane lifts off immediately establish a crab into the wind which then permits wings level flight and climb out while compensating for the cross wind in order to maintain a runway heading ground track. Anyway, the exact opposite happened.

I'm not sure which surprises me more, pilot error or computer error. Both seem incredible to me, and this report is eyebrow raising. Dragging a wing on takeoff is extremely dangerous, regardless of the frangibility of airport signage.

<comment><USER3> It looks like another plane's jet blast from a 90 degree angle could be a possibility causing it to veer while taking off.

[Speculation by poster Trixie on avherald]

<comment><USER2> From where? Takeoff runway is 31L, reportedly from intersection KE, therefore 04L isn't a factor, and it puts rotation around intersection PA. No one is going to be at takeoff power over there and not on a runway. Idle power wouldn't do this.

If there's an uncommanded roll before V1, I'd expect aborted takeoff. So it's more plausible this happened after V1, and before Vr, which means the instigator was present for some distance.

<comment><USER4> From a comment on avherald:

> It is being discussed at American that as the aircraft was at rotation, JFK > Ground had cleared a heavy jet into the ramp and he used a great deal of > power to get moving. His jetblast, coming from a 90 degree angle to flight > 300 on takeoff, is being considered a factor in the roll of the Airbus as it > lifted off causing the displacement from the runway and the wingtip drag.

> Powerful taxi thrust could most certainly be an factor. Many years ago I > witnessed a DC-10 literally blow a small aircraft up and onto its nose, then > onto its back during landing with the thrust of those DC-10 engines powered > up while exiting the runway and turning 180 degrees.

</comment></comment></comment></comment><comment><USER5> Scroll down to these pictures:

[https://www.pprune.org/rumours-news/620410-aa-a321-takes- off...](https://www.pprune.org/rumours-news/620410-aa-a321-takes-off-after- smashing-ground-sign-3.html#post10450077)

Youch. It took quite a bit of that sign with it.

</comment><comment><USER6> Found this first on vasaviation ([https://www.youtube.com/watch?v=Ca-0Bi2lZhg](https://www.youtube.com/watch?v=Ca-0Bi2lZhg)), which focus on atc communications. It looks like the pilots took 5 mins to report to atc for emergency landing request.

<comment><USER7> I'm surprised we don't keep video of all take offs and landings. Doesn't seem like it would be overly expensive.

<comment><USER8> Continuous video surveillance on 3-4 km of runway, from multiple angles, with night vision support, working 24/7? Might not be impossible, but surely not cheap.

<comment><USER7> I watch landing and takeoff videos frequently on YouTube from only one angle. The lenses are quite large and depth is very compressed but it's sufficient to understand a lot of things relevant to an accident.

Daytime only would still be a huge improvement.

</comment></comment></comment></comment><comment><USER9> The NTSB seems to get a lot of work.

[https://twitter.com/NTSB_Newsroom](https://twitter.com/NTSB_Newsroom)

<comment><USER10> Thanks for that well of information.

This highway crash[0] makes me feel like it's crazy that we still haven't created, and mandated, forward collision avoidance for all tractor-trailer sized vehicles. The people in the SUV never had a chance.

[0] [https://www.ntsb.gov/investigations/AccidentReports/Reports/...](https://www.ntsb.gov/investigations/AccidentReports/Reports/HWY18FH015-preliminary- report.pdf)

<comment><USER7> Trucks are cut off in traffic extremely frequently. Some trucks do have auto braking and it getting triggered all the time from jerks on the road is a frequent complaint.

That said the NTSB has recommended it be mandatory.

<comment><USER10> > Trucks are cut off in traffic extremely frequently. Some trucks do have auto > braking and it getting triggered all the time from jerks on the road is a > frequent complaint.

Yeah, false positives would be a giant source of friction. Do you know what types of sensors the existing systems use?

<comment><USER7> Nope no specific knowledge, just a decent amount of trucker griping. The stopping distance of trucks is much longer so the triggering distance on these devices must be correspondingly longer as well. A lot of cars don't even realize they cut off the truck because they can stop so much faster.

A trucker can assume that a car cutting them off with open road in the front won't slam their brakes. These devices can't.

</comment></comment></comment></comment></comment><comment><USER11> I'm confused as to why there would be a sign anywhere near the flight path of an airplane.

<comment><USER5> It's a runway marker sign. They are pretty low, and in the grass, and have breakaway mounts. This sort of thing: [https://blog.klm.com/assets/uploads/2015/08/Signs_7.jpg](https://blog.klm.com/assets/uploads/2015/08/Signs_7.jpg)

The aircraft would have been way off center of the runway, with the left wing literally dragging the ground.

JFK runway 31L is 200 feet wide, an A321 has a wingspan of 112 feet. The wings are 12 feet from the ground at the fuselage, and maybe two feet higher than that at the wingtips. The photos[1] show heavy abrasion under the left wingtip, presumably it was dragging the ground.

[1] [https://imgur.com/a/rKu8cUC](https://imgur.com/a/rKu8cUC)

<comment><USER12> Also if there's wind and the gas in the shocks is a bit low you can easily hit them.

</comment></comment></comment><comment><USER13> This is the AVherald article about it, with more details: [http://avherald.com/h?article=4c68c5a8&opt=0](http://avherald.com/h?article=4c68c5a8&opt=0)

<comment><USER14> Ok, we've changed to that from [https://www.pprune.org/rumours- news/620410-aa-a321-takes-off...](https://www.pprune.org/rumours- news/620410-aa-a321-takes-off-after-smashing-ground-sign.html).

</comment></comment><comment><USER15> Expensive accident. Glad everyone is safe!

</comment><comment><USER16> Does this mean the plane "rolled" slightly to the left while still on runway, and hence the left wing was able to hit that sign? Did the pilot use the ailerons while on runway?

<comment><USER2> Unverified video taken on the ground after landing. [https://www.airliners.net/forum/viewtopic.php?f=3&t=1420137#...](https://www.airliners.net/forum/viewtopic.php?f=3&t=1420137#p21273103)

It looks similar to other photos, and if authentic yes it suggests a significant roll to the left. From the available information I can't assess whether the plane was on the ground or airborne, either are possible.

Aileron is normally used for crosswind takeoffs, to lift the leeward wing sooner in order to "lean" the plane into the crosswind to keep the plane from drifting from runway centerline. Essentially the opposite happened in this case. The airplane must have both drifted to the left of the runway center line (not out of the ordinary, in particular if it's gusty) as well as left wing dipped.

It's possible this was a suddenly gusty takeoff. I'm not sure to what degree A320 series can do auto takeoff or computer assisted takeoffs, and what crosswind limits they presumably have where a pilot has to do the takeoff manually instead. Maybe the pilot's suggestion of a computer problem is related to that, and they subsequently took manual control.

<comment><USER17> _Aileron is normally used for crosswind takeoff_

Airbus crosswind takeoff recommendation is no lateral stick input. The sidestick is a rate controller, so a lateral deflection commands a roll, not a specific control surface position like on non-fly-by-wire aircraft. And you run the risk of deploying spoilers.

<comment><USER2> The original article article URL before the change to avherald contains a post that addresses this: [https://www.pprune.org/showthread.php?p=10450572](https://www.pprune.org/showthread.php?p=10450572)

Obviously we'll have to wait and see what the actual story is, whether this is really old bad tribal knowledge, and if the operating manual contradicts that, and whether pilots are getting the proper training and consistently applying it in practice.

I'm an opinionated and biased pilot and former flight instructor, but not an aerodynamic engineer. Spoiler extension does not increase the effective angle of attack of the wing, whereas a dropping aileron does. And therefore off hand, and without benefit of an Airbus type rating, I don't really care if the actual control surface is a bit of right spoiler instead of left (down) aileron, all I care about is that the windward wing does NOT lift off first because that will foul up the ground track on takeoff, and that's simply not proper technique.

<comment><USER17> I'm not typed either, for the record. Current flight instructor and my boss is a check airman at a major--that's about all I've got to offer. :) As I understand it there's a potentially dangerous pitch-up moment that occurs if the roll spoilers deploy on takeoff. (Don't ask me why!)</comment></comment></comment></comment></comment>


Code is Engineering; Types are Science - <AUTHOR> https://www.tweag.io/posts/2020-03-05-peirce.html <comment><USER3> _ISO /IEC/IEEE 24765

3.3810 software engineering

1\. systematic application of scientific and technological knowledge, methods, and experience to the design, implementation, testing, and documentation of software ..._

It's all there just waiting for someone to read it.

<comment><USER4> At CHF 198.00, IEEE is "just" waiting to collect fees before permitting unwashed practitioners from reading it.

But we do get a preview and there is a link to www.computer.org/sevocab so we can get a sense of their taxonomical approach. (Try searching for "Data type").

<comment><USER3> No, it's free. Just download it from [https://standards.iso.org/ittf/PubliclyAvailableStandards/c0...](https://standards.iso.org/ittf/PubliclyAvailableStandards/c071952_ISO_IEC_IEEE_24765_2017.zip).

<comment><USER4> Thanks!

</comment></comment></comment></comment><comment><USER5> Following Godel:- my intuition suggests to me that for a sufficiently powerful programming language (Turing complete?), _any_ type system will preclude otherwise valid statements in the language. Such illegal but valid statements will be much more numerous than legal statements. These statements may not just be valid, they may be useful, and perhaps even elegant!

<comment><USER6> I've never really bought this argument. Casting is the way a programmer can selectively bypass the type system and every typed language I've ever used includes casting.

For Church-typed languages as opposed to Curry-typed languages, it's not even apparent what it would would mean to "preclude otherwise valid statements" because types are a part of the language. It's akin to saying structured programming precludes otherwise valid statements in the language because the lack of goto precludes otherwise valid statements in the language. Sure, but the lack of goto is precisely a facet of the language! For a Church-typed language the types are just another part of syntax (this is more than just theory, Racket shows that a type system can in fact be implemented simply as macros).

Invoking Godel here I don't think makes sense. Godel's incompleteness theorems apply to what you can prove about a program with types. The majority of typed programming languages have type systems that are too weak for Godel's incompleteness theorems to apply. And there is no need for a type system to be sound (if thought of as a logical system with programs as proofs via the Curry-Howard isomorphism), again most programming languages' type systems are not sound in this manner.

Even with a Curry-style system of semantics, the presence of casting is enough to allow any type system to allow every valid statement in the language (the proof of this is to cast every term to the same type).

That being said I am sympathetic to the feeling that "I'm just doing this to satisfy the type checker," a feeling that can show up increasingly frequently for languages with increasingly sophisticated type systems. I would argue this often happens precisely when you take the power of casting away. This is the dark side of "correct by construction" techniques where if the construction technique is devilishly complex, then you're forced to deal with that complexity. But this usually only applies to languages with some amount of dependent typing, which the majority of languages do not have.

<comment><USER6> I'll post a reply that I wrote to one of parent's comments that was deleted, but I think the parent had some reasonable points.

It's slightly tweaked to remove some of the parts that don't really make sense without the other comment's context.

You're implicitly assuming a Curry-style semantics to your language. Here's an outline of what I assume you mean. Correct me if I'm wrong.

There are effectively two separate languages. Your type-level language and your term-level language. Each of these languages have their own notions of validity. At the type-level, a series of statements is valid if the type checker accepts them. At the term-level a series of statements is valid if the program runs without crashing. There is also some way of associating the two languages together, i.e. type assignment.

Given these two languages, we would like for their two notions of validity to coincide. That is it would be great if given a type assignment, the type-level language is valid (type checker accepts it) if and only if the term-level language is valid (program does not crash).

The first thing to note is that many (most?) statically typed languages don't have Curry-style semantics. As UncleMeat points out not crashing is not sufficient to be semantically valid in C++. It might just happen not to crash on your machine with a certain set of optimizations and compiler flags. Types play an integral role in what it means for a language to be semantically valid and it doesn't really make sense to consider the language independently of types.

For Curry-style languages, there is an indirect linkage to Godel, but the more obvious link is through the halting problem. If type checking is decidable (something you probably want to be true) then your term-level language must be decidable as well if the two languages truly coincide. But then you lose Turing completeness as your first comment points out.

The thing is though that no mainstream statically typed language tries to ensure this. All of them allow assigning a type to something that might loop forever or crash.

I would argue you're effectively attacking a straw man of a type system.

However, I agree with you that "there are times when a type system is too cumbersome, and we must escape it to do useful things." However, this is not something I view as limited to type systems. I view this as true of every facet of programming (and in a greater sense true of every facet of life).

Every system must have a way of piercing its assumptions when you as its user have extra knowledge the system does not. This shows up in performance and protection against side-channel attacks (assembly intrinsics, FFI, etc.). This shows up in orchestration tools (yes yes yes it's all good and well to treat infrastructure as immutable and machines like cattle not pets but I would sometimes like to just SSH onto a machine and make some one-off changes!). This shows up in structured programming (once in a very blue moon Python, it would be great if you just gave me a goto/label). The list goes on and on.

<comment><USER5> Thankyou for your reply (and apologies for deleting the comment).

I am not sure that the distinction between Curry and Church semantics is so critical - after all we have but a single 'engine of computation': beta reduction, applied to statements in the untyped lambda calculus. Thus a statement with Church annotations will reduce exactly as one without?

I think I'm taking the view that statements in the untyped lambda calculus, with beta reduction, are our objects of study, and a type system (Church or Curry derived) is a set of theorems (or indeed a mechanism for generating theorems) that we use to prove certain facts about such objects, again much like the Peano axiomatization of natural numbers. Thus I profess my heresy!

<comment><USER6> This is not heresy; it's just Curry. The assertion that beta reduction (i.e. evaluation) does not rely on type information and types are overlaid on top is precisely the heart of Curry semantics.

The distinction between Curry and Church semantics does not seem particularly relevant for something like the simply typed lambda calculus.

After all

        f : Int -> Int
        f(x) = x + 1

        f(5) : Int // 6

can simply have its types removed after type checking and everything will still run right?

        f(x) = x + 1

        f(5) // 6

However this distinction becomes more important for type systems with polymorphism, particularly ad-hoc polymorphism.

        f : a -> b where b is Zeroable
        f(x) = zero

        // E.g. List[a] is Zeroable where zero: List[a] = emptyList
        // Int is Zeroable where zero: Int = 0
        // String is Zeroable where zero: String = ""

Now an expression such as f(5) is impossible to evaluate without type information.

        f(5): List[Boolean] // This is emptyList
        f(5): Int // This is 0
        f(5): String // This is ""

Types become an essential part of what it means to evaluate a term and hence we are led to Church semantics.

Now there are ways of trying to recover Curry-style semantics. One way is to replicate the type system at runtime. Then of course you're free to "erase" the types since you still have them at runtime anyways!

This is essentially what statically typed object-oriented languages do with late binding. _Note that in the extreme though, the type system cannot limit the scope of valid programs because valid programs at runtime are precisely those valid at type-checking time because the types are replicated!_ Often though only fragments of the type system will be preserved at runtime so that there is still a discrepancy. For example, usually return type polymorphism (the previous example of f) is disallowed in these systems (see e.g. Java) to avoid having to embed even more of the type system than just the types of individual objects.

Another option is to compile the program down into a language with a simpler type system (or no type system at all!) and then use Curry-style semantics with the simpler type system. However, that feels more like an implementation detail than anything else. Just because I can compile Java to C does not mean that they have the same semantics. Indeed the point of compilation is precisely to translate between two systems with incompatible semantics, otherwise the compilation is trivial.

Stepping back from all this, Curry-style vs Church-style semantics have implications for type checking and type inference. In general things are harder in a Curry-style regimen. Type-checking which is decidable in a Church system often becomes undecidable in an equivalent Curry system. This makes Curry-style semantics burdensome to work with in rich type systems.

Curry-style semantics are of course an ideal fit for gradual typing systems that aim to go from an untyped system and gradually add typing on top of that untyped system.

<comment><USER5> I'm sorry but this is wrong: "The assertion that beta reduction (i.e. evaluation) does not rely on type information and types are overlaid on top is precisely the heart of Curry semantics."

Beta reduction is __not __affected by types ascribed to terms. The crucial difference between Church and Curry is that Curry allows each term to be ascribed a _set_ of types - perhaps 0, 1 or many - whereas Church insists on each term having exactly one (often annotated). That is all. Both are systems for proving type correctness of terms, and are no more than that.

<comment><USER5> (cont'd) ... and I see it now, the damage that has been wrought.

I imagine Church never dreamed that his approach of unitary type assignment would lead people to believe that types actually exist, and that programs should do different things when meeting such 'types'.

Yes let's get back to Curry, and build a better world.

<comment><USER6> Ah indeed you're right about beta-reduction; jumping to equating it with general evaluation is a bridge too far.

Eh... I dunno. Church was around for a long time. He saw a lot of the languages we use now.

That ship for ad hoc polymorphism sailed a long time ago. Almost every widely used language I can think of has ad hoc polymorphism, whether that be through runtime types (late binding a la Python, PHP, Ruby, Common Lisp, Javascript, Java, Clojure, Scala, C#, C++, Smalltalk) or through compile time translation (early binding a la Rust, Haskell, also Scala, ML, also Java, also C++, Idris, Agda, Coq). The only languages I can think of at the moment that doesn't have ad hoc polymorphism are C and Elm.

To put it another way every language that supports some notion of overloading has to do a different thing when meeting a type. And I think you'd have a hard time taking overloading away from programmers.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> If code is engineering, then types aren't science; they're electronic design rules. Coding without types is like trying to design a printed circuit board without a 'check widths and clearances' button.

<comment><USER8> More like without "check for disconnected circuits" button.

<comment><USER7> That too. Usually your 'DRC' button will check for unconnected signals, shorted signals, clearances, and a bunch of other stuff that I've never used. Having the ability to enter a bit of metadata and then have the computer automatically and almost infallibly check your work is one of the best bits of CAD.

</comment></comment></comment><comment><USER9> The point of the article, for those who read it, is to characterize different activities of development in a static language as deductive, abductive, or inductive and to discuss examples and relationships between these activities.

it's not to contrast static languages with dynamic languages.

</comment><comment><USER10> Engineering can happen way before you do any coding. It just turns out that's almost industry standard to do both at the same time these days.

</comment><comment><USER11> Similar ideas come out of the NuPRL project ( [http://nuprl.org/Intro/intro.html](http://nuprl.org/Intro/intro.html) )

> Starting with the slogan "proofs-as-programs," we now talk about "theories- > as-systems."

But if you rewind history, you could also see the parallels to Peter Naur's "Programming as Theory building"

Or more recently: Luciano Floridi's "The Logic of Information: A Theory of Philosophy as Conceptual Design"

Different descriptions of the same thing. You could probably relate most of these ideas all the way back to the Greek classics. Democritus. Aristotle. Socrates. Plato.

Our tools are finally catching up...

</comment><comment><USER12> Interesting article. Types definitely make it easier to figure how things work in new codebases. I wonder how often do experienced Haskell developers find bugs in production.

<comment><USER13> > I wonder how often do experienced Haskell developers find bugs in production

If by this you mean that you are wondering how often bugs in Haskell programs make it to production, the answer seems to be "at about the same rate as bugs in C or Java, as far as we can tell". Which, given that Haskell's (default) type system is not much more powerful at expressing constraints than C or Java's, shouldn't be a big surprise.

Haskell's type system is much more flexible, allowing you to express specific types for many cases where in Java or C you would have to resort to Object or void*; but otherwise, Haskell types can not encode much more powerful constraints than C or Java types - you can only express the available operations and the "shape". The bulk of the power comes from enforcing purity, but that is essentially a property of the standard library, not of the type system. For example, you can't express that a type is a Monad in Haskell - <USER2> can specify that it supports the Monad operations, but you have to rely on manual checking to see if it respects all of the monad laws.

Note that Idris or Coq are another matter entirely (as are dependent type systems implemented in Haskell extensions).

<comment><USER14> > If by this you mean that you are wondering how often bugs in Haskell > programs make it to production, the answer seems to be "at about the same > rate as bugs in C or Java, as far as we can tell".

That seems surprising. What are the bugs that Haskell has but C and Java don't that replace all the null pointer exceptions?

<comment><USER15> I had a horrible problem with space leaks when running weeks in production, didn't help that I used a pure Haskell db at the time. :)

Here are some more info [http://blog.ezyang.com/2011/05/space-leak- zoo/](http://blog.ezyang.com/2011/05/space-leak-zoo/)

It's been almost a decade since though. Maybe the compiler catches more nowadays.

</comment></comment></comment></comment><comment><USER16> Science -> Engineering -> Technology

Technology is applied engineering, and engineering is applied science.

The study of types may fall into some field of science. Applying it is engineering.

<comment><USER13> The study of types is generally done as part of mathematics, not sciences. There are some attempts to study type system impact in real world programs, and ergonomics, which would fall under science, but these are a very small part of PLT.

However, the point of the article was different - the article was claiming that when you are writing the actual code for your program, you are normally using engineering-style reasoning (abduction), whereas when you are defining the hierarchy of types for your system, you are mainly applying scientific- style reasoning (induction).

Personally, I think that the article is a gross over-simplification of every single term - of deduction, abduction, and induction; of maths, science, and engineering; and of what programmers actually do. It is in fact so over- simplified that I don't see any valuable insight into the article at all. It almlst reads like a description of programming from a TV show that is trying to sound brainy.

</comment></comment><comment><USER17> Software development doesn't need to be put into a singular box; it's all of engineering, art, science. It's also none of them.

</comment><comment><USER18> If I was given the choice, I can have either static analysis or types I would pick static analysis every time

<comment><USER19> Types are just one kind of static analysis. So it makes sense that you'd want the superset rather than the subset.

<comment><USER20> It's not so clear cut. Types are compositional, by definition.

Static analysis needn't be compositional, and so a small change could cause dramatic and unpredictable long-range effects elsewhere in your code. Figuring out what changed or what went wrong can be a nightmare.

</comment></comment></comment><comment><USER21> It's not an either/or.

</comment><comment><USER22> I put a related question on Computer Science Stack Exchange a week ago. Linking it here in the hopes that HN users roll-calling here will shed some light.

Ref: [https://cs.stackexchange.com/questions/122066/does-the- under...](https://cs.stackexchange.com/questions/122066/does-the-underlying- computational-calculus-in-type-theories-affect-decidability)

</comment><comment><USER23> Then, fortran or numpy programmers who can only conceive a single type of data (the multi-dimensional array of floats), are not doing science? I disagree.

<comment><USER24> I prefer to call them guild navigators.

<comment><USER25> What's the spice in this analogy

<comment><USER26> Caffeine.

It is by will alone I set my mind in motion. It is by the brew of arabica that thoughts acquire speed, the teeth acquire stains, stains become a warning. It is by will alone I set my mind in motion.

</comment></comment></comment></comment><comment><USER27> Falsely dichotomic analogies are falsely dichotomic

</comment><comment><USER28> Types are Science. Static types are theoretical science. Dynamic types are empirical science.

</comment><comment><USER29> An elephant's toenail is part of the elephant, but is not "the elephant." Types are implementation details to a computer scientist, just as unit conversions are implementation details to a chemist. Likewise, code is an artifact of engineering, not the engineering itself.

</comment><comment><USER28> Counterpoint: code is scripture; types are religion.

<comment><USER30> That doesn't seem quite right to me. Maybe code is sermons, types are scripture? Or even code is a religious person's lived-out life, and types are scripture?

</comment></comment><comment><USER31> He conflates science and logic. Science and logic are two very different things.

for example, given:

       f(x) = x*0;

verify the hypothesis that:

       for all n in Real Numbers, f(n) = 0

To verify the above using science you would take a statistical sample of x and verify that it equals zero for that sample.

       1*0 == 0
       2*0 == 0
       3*0 == 0
       4*0 == 0

That's four test samples out of an infinite domain. To fully verify the function f via science you technically need infinite test cases to verify the fact. Usually you can never achieve this in reality so science usually takes what you call a "sample" and you say that if the sample is true very likely the hypothesis is true. The only assumption science makes is that probability theory applies to events in reality.

Note the isomorphism between science and unit testing; Same bs with none of the statistical rigor.

To do the same in logic you have to make assumptions from axioms and logically derive a proof from axioms.

The previous thing which was called a hypothesis is now called a theorem:

       for all n in Real Numbers, f(n) = 0

The proof of the theorem from the axioms of arithmetic can be found here: [https://math.stackexchange.com/questions/400605/a-proof- of-n...](https://math.stackexchange.com/questions/400605/a-proof-of-n0-0)

That being said how does Type theory and code apply to science and logic and engineering?

Type theory is part of logic it is not part of science. Don't conflate the two.

What is engineering? Engineering is creating solutions for problems using either or both Science/Logic. In the realm of software engineering there is very little of both, It's all an art. Logic is rarely employed for verification and when it's done it's usually just type checking; and testing isn't done to a rigorous level that other scientific and engineering disciplines require.

For say the creation of the 787 airliner. The entire plane is built theoretically in software to such a degree that when they actually materialize the theoretical model as a physical prototype it can actually fly. Then after it is built they test it rigorously to a very high degree.

For most of software, none of the above is is ever done. We mostly work like artists, just making shit up (design patterns) and adhoc automated testing.

So in all practicality your coding job has no relation to either science, engineering or logic. You are an artist.

 _I know technically you apply bits an pieces of science and logic in your programming job but ultimately you use adhoc logic and science for even crossing the street, I 'm not going to count programming as a "science" due to this._

<comment><USER32> >That's four samples out of an infinite domain. To fully verify the function f via science you technically need infinite test cases to verify the fact. Usually you can never achieve this in reality so science usually takes what you call a "sample" and you say that if the sample is true very likely the hypothesis is true. The only assumption science makes is that probability theory applies to events in reality.

Usually equating null-hypothesis significance testing with the scientific method is a sign of cargo cult.

<comment><USER31> To verify an entire domain you need to test the full domain.

I'm not strictly equating inference or verification to science. I am simply equating this: [https://www.wikiwand.com/en/Scientific_method](https://www.wikiwand.com/en/Scientific_method)

Testing and hypothesis are the key words. Prediction is the other keyword. Analysis I never covered, but you assumed I used null hypothesis testing.

Tell me what is your opinion of all of this since you think my opinion is a 'cargo cult.'</comment></comment></comment>


Ask HN:  I want to build a Lisp-based VM?  Is it possible? Thoughts? - <AUTHOR>

I work full time, have a family, etc.  BUT, I have a deep passion for programming, computer science, and especially Lisp.  I've been programming off and on with Lisp for many years.  However, I wouldn't consider myself an expert at all.  What do you all think?  Would a Lisp based VM be too slow?  Perhaps it would repeat the JVM's path where it started out extremely slow, and progress until it's just slightly slow =).  Ideas welcome!  Talk amongst yourselves! <comment><USER2> Working through SICP is massive chore. Paul Graham's book is far easier, but still heavy going.

Lisp VMs have been around since the 70's in various forms. The core is rather simple to implement. Unless you have a reason to start with a clean slate, you might be better off looking at some stuff that works well already. I have three suggestions:

1\. picoLISP - the 64 bit version is well thought out and could give you ideas for your VM.

2\. newLISP - whilst it's a bit different from Scheme and CL, it implements a complete Lisp ecosystem in a single executable. Runs equally well on all major platforms. I would give it serious consideration for bootstrapping.

3\. <http://losak.sourceforge.net/> \- is one of several Lisp OS projects out there.

It might also help to read up on some Lisp Machine, etc history. Could spare you reinventing the square wheel.

<comment><AUTHOR> Wow, thanks for the tips. I'll certainly investigate the Lisp Machine. I played with newLISP a while ago and ended up writing a visualization tool for a project at work. I'll revisit it. I think I'll look for a SICP group to help keep me motivated to get through the book. I've never heard of losak, I'll definitely check it out.

</comment></comment><comment><USER3> There's a difference between "VM" and "interpreter". I'd start with the interpreter, then you'll know enough what to do next.

You should consider doing this by working through SICP [1], which will have you writing a Scheme interpreter. There are places where you can collaborate on working through that book.

With all due respect, based on your description you've got some ground to cover before you should be inviting collaboration on such a substantial project. That's not to say you shouldn't cover it, it will certainly be a benefit to you in many ways, but you've got to build some cred first.

After the SICP you may also want to consider not starting from scratch. There are some VMs out there that you can work with that may provide better performance without you having to do the rather laborious and tedious task of some of the lower-level stuff. Either PyPy or LLVM might be decent targets.

<comment><AUTHOR> I have SICP (it's been on my shelf for a couple years - I'm sure I'm not the only one). I started going through it while in school for my M.S. and working full time. Needless to say I didn't get to dive deep. I've been through PCL, ANSI CL (Graham). I just received Land of Lisp in the mail. I realize that this book starts from the absolute beginning, and I'm contemplating jumping up to the next level (SICP, On Lisp, or perhaps Let over Lambda - from my understanding LOL should be tackled after On Lisp)). My problem is that I catch myself programming in C in Lisp. I just need to make the transition to thinking in terms of macros, closures, and building from the bottom up. I've started doing this, but I have a loooong way to go for sure. Thanks for the feedback! I don't have anyone to bounce ideas off of, and I'm so glad that a forus like HN exists for people to interact, and talk about these kinds of issues.

</comment></comment><comment><AUTHOR> If anyone would like to talk about a possible collaboration, let me know. It would probably be impossible for a single person to do this (well).</comment>


Ask HN: What software have you used which gave you an definite feeling of speed? - <AUTHOR> <comment> shivam-dev Sublime Text: Moving from VS Code to ST3 was a good experience. It is snappy, launches almost instantly.

Figma: The way Figma handles artboards is amazing, the zooming and scrolling across large documents is super smooth</comment>


Apple responds to NYT: "We're among top payers of U.S. income tax" - <AUTHOR> http://www.nytimes.com/2012/04/29/business/apples-response-on-its-tax-practices.html <comment><USER2> Wow, the comments in this otherwise rational forum are astounding. Does no one really understand the purposes of taxation? Or are you all too self-inflated to realize that you are part of a public collective? Don't you find it strange that things like roads to transport your products, education to give knowledge to your employees (and consumers!), and emergency services to ensure the safety and well-being of the public are all things we rely on to keep living our individual lives? To replace these services with private entities would take their control out of the hands of democracy and into selected special interests.

I would say that HN readers and contributors are among the smartest people on the web; they are the intellectuals. So please pardon my "rantiness" when I say that it is the responsibility of intellectuals to facilitate growth in their communities. And in this cyber-cosmopolitan age it becomes important to understand where the most efficient contributions to growth are going to take place. After all, life is infinitely finite. When you're 6 feet under the only things that survive are your genetic progeny and your intellectual progeny. Favouring conservative taxation in favour of purported "individualism" is not only selfish, but highly inefficient. Charities and government subsidies do not fill the voids required by collective resource allocation. To be more concrete: you can't build a socioeconomic infrastructure on top of capitalism. You have to do it the other way around. Philanthropy isn't as widespread in Europe as it is in North America. That's because European taxation models are such that there is a "safety net" (one which is akin to our emergency response system, but more robust and covering more edge-cases).

Pardon my frustrated response, but I just don't think HN is on the same page when it comes to the benefits of democratic "socialism".

<comment><USER3> >I would say that HN readers and contributors are among the smartest people on the web

But HN readers are almost exclusively rich white American males. They've never had any adverse experiences in their lives. They've never been frisked by the police; they've never gone hungry for even one meal; they borrowed money from their parents to get started; their parents put them through college.

Having no experience of adversity is proven to produce feelings of excessive competence/arrogance in people. And that's pretty much what you see here.

Very few of them have any sense of the society that they are coasting on top of, nor does telling them that they are one injury from abject poverty make any difference. They don't really believe it, not in their hearts.

So, sorry, but you aren't going to get a lot of sensible responses about taxation here. They're incapable of it.

<comment><USER4> Textbook example of an ad hominem argument. Honestly, a basic understanding of logical fallacies should be a mandatory prerequisite for posting on HN.

<comment><USER5> That would preclude the vast majority of the Democrat audience from posting. On the other hand, it would go a long way toward reversing the trend of HN becoming more like Reddit.

</comment></comment></comment></comment><comment><USER6> There have been a lot of articles recently about how this or that corporation pays their taxes. They are always shallow analyses, just info-tainment.

There is a broader question of how the US should structure corporate taxes, but demonizing individual corporations for how they follow the crazy rules is a silly thing. Perhaps useful to further the conversation, but not really a reflection on ethics.

<comment><USER7> There's a much deeper question on the whole concept of taxation in general. What is it for and where should the limits be?

If you really look around you'll quickly learned that everything is taxed. Everything. Politicians have gotten very good at finding all sorts of areas where they can insert a probe and extract "blood". From gasoline to telephones, communications, dogs, cars, food, air travel, tobacco, etc. Here's one attempt at a list: [http://theeconomiccollapseblog.com/archives/taxed- enough-alr...](http://theeconomiccollapseblog.com/archives/taxed-enough- already)

Here in California it is not uncommon to hear of more hair-brained schemes to levy taxes on more things. A little-bit here and a little-bit there and politicians have collect billions to keep their gravy train going.

Regardless of whether we are talking about personal or corporate taxes, or taxes in general, it is important to always keep in mind what the "mission statement" might be for taxes. Lately the lines on this have blurred.

In general terms taxes should be used to run the government, military and reasonable social services (the last one being debatable).

Lately, at least in California and other similarly-afflicted states, a huge percentage of taxes are being dedicated to supporting a ridiculous pension infrastructure and a bloated government and public employee sector. Tax increases are being proposed with the sole purpose of finding funding for union pensions. We, then, exist to ensure that the union "class" gets to live happily every-after with their wonderful lifetime pensions and healthcare. This is beyond wrong. This is criminal.

I don't have a problem with the idea of questioning if large companies are paying what they are legally supposed to. At the same time, the system should also demand that government be responsible and not exist to create and maintain their own ecosystem through the abuse of taxation. Name one government entity that, over the last few years, has put forth cuts and savings measures on par with families and businesses across this nation. Exactly.

Watch closely what is happening with the post office. Here's a clear case of a government entity that should start to see massive cuts and reorganization. What do you want to bet that we carry these people on our taxes for the rest of our lives? So, rather than being able to devote our money to the furthering of our own kids and culture we are obligated, through taxation, to support useless hordes of government employees. This isn't going to end well.

<comment><USER8> I don't want to get in the way of some nice comfortable randian ideology, but you could at least read a wikipedia article:

[http://en.wikipedia.org/wiki/2008%E2%80%9311_California_budg...](http://en.wikipedia.org/wiki/2008%E2%80%9311_California_budget_crisis)

The Cali budget crisis was caused by a _decrease_ in revenue. Let me repeat that. _Decrease_.

Similarly, federal spending on domestic discretionary (what you're complaining about) has been flat or almost-flat for a decade, while spending on defense/security has been skyrocketing.

Lastly, if you want to reduce government spending on employee benefits, the first, second and third things you should think about are healthcare reform, not pensions. Healthcare costs are and have been inflating a lot faster than any other cost-of-living cost. Compound 15% over 10 years and see where that gets you.

<comment><USER9> I found that wikipedia article pretty interesting. In particular that "over 40,000 public employees in the Bay Area alone earned over $200,000 in 2009." To be fair when you look at the source data: [http://www.mercurynews.com/salaries/bay- area?appSession=1633...](http://www.mercurynews.com/salaries/bay- area?appSession=16339427271864&RecordID=&PageID=2&PrevPageID=&cpipage=8&CPISortType=&CPIorderBy=)

You'll see that many of the top paid state employees are doctors, or policemen/firefighters who get paid a ton of overtime.

But you'll also notice things like the director of IT for Alameda County was paid 430,312 with a 266,760 base salary. Where as the direct of IT for San Mateo country had a base salary of 175,775 and had pay around to 330K. Which is probably market for someone like that in the Bay area, but sure seems a lot for a government position.

I think it is reasonable that if salaries go up in a good year, that salaries should go down in a bad year. I'd be interested in seeing the change in government employee pay over time relative to tax revenue.

<comment><USER8> With police/fire, those numbers are a little distorted because often a lot of the overtime is detail pay, which is paid by private parties (bars, concerts, etc) after routing through the department. So it shows as a government payroll but it's not coming out of your tax dollars.

And I'm sure there are plenty of idiots who got entrenched and earn more than they're worth, but that's the same in any large bureaucratic org, public or private.

</comment></comment></comment></comment></comment><comment><USER10> The amount they do pay is fairly irrelevant, it's the equivilent to a single person saying "I know I owe taxes, but hey I've already paid a lot, so..."

The more relevant part of their statement is "Apple has conducted all of its business with the highest of ethical standards, complying with applicable laws and accounting rules." That's their _actual_ response, the rest is just decoration.

I also like the irony (though to be fair you can see why they said it) of saying "We have contributed to many charitable causes but have never sought publicity for doing so"... in a press release.

<comment><USER11> _The amount they do pay is fairly irrelevant, it's the equivilent to a single person saying "I know I owe taxes, but hey I've already paid a lot, so..."_

"So I'm not going to pay more than I'm legally required to". I have no problem with that.

<comment><USER12> I'll add:

"...because we're super rich and can hire ultra clever accountants to abuse loopholes in your tax laws that were put in place by politicians paid by other super rich corporations specifically to get away with paying less taxes thereby grossly violating the trust of the American public and the spirit of taxation in general."

Are you still ok with that?

<comment><USER13> if you're the CEO/CFO and you're not looking for every legal way to maximize shareholder value, then you're not doing your job.

<comment><USER12> What a bizarre and unfortunate opinion. Too bad so many people actually believe that is the way it should be.

<comment><USER13> what they're doing is legal so what's you're problem?

Apple pays billions in taxes, pays dividends to shareholders, employs thousands, etc. if you're not happy with that, maybe you should move to countries with higher corporate tax rates, i'm sure they have a better/bigger economy than the US (they don't, take a good guess why.).

<comment><USER12> Because the US has a population of 400 million?

[http://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP)_...](http://en.wikipedia.org/wiki/List_of_countries_by_GDP_\(PPP\)_per_capita)

<comment><USER13> How about China and India.

<comment><USER10> Unless the only difference you can think of between China/India and the US is their tax levels then I'm not sure what your point is.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment> k-mcgrady The NYT 'attacks' on Apple recently have annoyed me. Firstly the Foxconn story. All the attention was focussed on Apple and the other companies using these factories didn't get any bad publicity. If the NYT actually cared about what was going on there they would have exposed all the companies with issues in China.

Same applies here. Paying less tax in this way is something every multi- national company does and yet the NYT has once again decided to focus on Apple. Let me be clear, I'm not an Apple 'fanboy'. I think if the NYT actually cared about these 'issues' they would expose all the bad actors. They're just trying to get page views.

And honestly, this is not even a story. Apple are acting within the law, trying to maximise their profits. They sell their products worldwide and can take advantage of that to pay less tax.

<comment><USER14> Well, maybe they are going after Apple because they are the worlds most valuable company. I think that is reasonable.

Also, the "within the law" argument has a bit less weight when you operate at this level. They have a lot of power to affect the law and its interpretation. I think it's probably impossible or at least not feasible to make laws that force a company like Apple to pay "normal" taxes for some definition of normal, simply because it's an international issue. But that makes an article like this even more relevant because it allows consumers to take this into account when they choose which product to buy.

<comment> k-mcgrady "But that makes an article like this even more relevant because it allows consumers to take this into account when they choose which product to buy."

That's the problem though. Consumers will take this into account. But because the article only focussed on one company they will just end up buying from another company doing the exact same thing.

<comment><USER15> I think the goal is to get Apple to respond to the criticism.

</comment></comment></comment></comment><comment><USER16> TLDR seems to be: we may pay a much lower tax on profits than most individuals do on income, but at least we have so much profit that we still pay a lot. Also, it's technically legal, so it must be ethical. And we donate to charity and stuff, so whatever.

Funny that they recognize in the response that they are primarily an US-based company, with US labour educated in the country, but instead want to pay Irish taxes. Or maybe they _do_ get 30% of their worldwide profits from Ireland, who knows...

<comment><USER17> Apple's EMEA headquarters are in Cork, Ireland. 2,800 people (and growing) are working there. In the last quarter, 23 percent of Apple's profits were made in EMEA (compared to 33 percent in the Americas, 28 percent in Asia-Pacific, 16 percent in Japan and seven percent in retail). The article on The New York Times quotes numbers from 2004, then EMEA made 28 percent of Apple's profits.

I don't think it's a problem when Apple decides not to move money made overseas back to the US. That's their decision and there is nothing shady about it either way. I can't think of any moral objections.

Purposefully moving money somewhere in order to avoid taxes, however, could be if not a legal at least a moral problem.

<comment><USER18> "I don't think it's a problem when Apple decides not to move money made overseas back to the US. That's their decision and there is nothing shady about it either way. I can't think of any moral objections."

I don't think this is a problem either, unless they lobby themselves a holiday under which they can move it back on the cheap. Which is something they have been trying to do for a while now (to be fair, Google, Cisco and others have been pushing for this with them, so it isn't just Apple).

[http://www.bloomberg.com/news/2011-09-29/google-joins- apple-...](http://www.bloomberg.com/news/2011-09-29/google-joins-apple- mobilizing-lobbyists-to-push-for-tax-holiday-on-profits.html)

</comment></comment></comment><comment><USER19> This is crazy, but I actually have a comment about Apple's response, not a political rant on the general idea of taxation.

Apple includes "income taxes withheld on employee stock gains" in "Apple's" tax payments. But aren't these employees' income tax, not Apple's? Is this another instance of creative accounting?

Sure, Apple can claim that they helped create that income, just like they helped create the job. But I'm talking specifically about their claim that they are a "top payer of U.S. income tax" because of their employees' tax obligations.

</comment><comment><USER20> I'm not sure why so many people seem to think this is such a big deal. It happens everywhere around the world. Companies like Shell and bands like U2 do the same. It's called tax avoidance and it's not illegal and personally I wouldn't even call it immoral or unethical. Business has little to do with morals or ethics as far as I'm concerned. It's the task of the lawmakers to decide the borders of morality / ethics and make clear laws and business just has to abide by the laws.

Personally I strive to pay as little tax as possible as well. I can't blame businesses for trying the same.

</comment><comment><USER21> Favourite part of the article: how NYT describes each apple that the tax subsidiaries are named after.

"Braeburn is a variety of apple that is simultaneously sweet and tart."

"Baldwin apples are known for their hardiness while traveling."

</comment><comment><USER22> The idea of taxing corporations on the very arbitrary definition of profit is a big issue imo. It would be more accurate to tax when money changes hands going in or out, not as a sales tax but a resource tax. This approach may decrease the need for the 50k page definition of profit vs investment. I have not given t his much thought but taxing the end state seems wishful thinking, because anyone would decrease there end state as much as possible before getting there?

<comment><USER23> Applying taxes every time money changes hands creates huge market distortions and gives big business a tax advantage over small businesses: Compare the tax burdens paid by a vertically integrated conglomerate which cuts down trees, converts them to lumber, builds furniture, and sells the furniture at BigCoRetail with the total taxes paid if those four steps were performed by separate logging, sawmilling, furniture-building, and retail-selling companies.

Moreover, applying taxes to gross sales rather than profits eliminates some profitable business models. Suppose I can hire someone for $50 to take $49 of lumber and build $100 of furniture. I make $1 of profits and even if I pay 50% tax on my profits, everybody is still happy. But if you tax _revenues_ , unless your tax rate is less than 1% I'll be going out of business -- at which point there is less government revenue, less value created, and Joe Carpenter has lost his job.

<comment><USER24> Doesn't a sane Sales Tax approach deal with the first issue?

If I buy Lumber with a Sales Tax of $X and Sell Furniture with a higher sales tax of $Y, then I send the $Y-X in Sales Tax to the Government. (At least -- that's essentially how the GST works in Australia).

BigCoRetail has better accountants and can deal with the processing more -- but the ultimate tax collected is the same.

<comment><USER23> Yes, that's the difference between a Sales Tax and a Value Added Tax. The Australian GST (and the Canadian GST, but unlike most Canadian provincial sales taxes) is a VAT.

It doesn't solve the "not profitable to hire someone to produce stuff" problem unless you count employee wages as inputs though.

</comment></comment></comment></comment><comment> brown9-2 _In the first half of fiscal year 2012 our U.S. operations have generated almost $5 billion in federal and state income taxes, including income taxes withheld on employee stock gains, making us among the top payers of U.S. income tax._

"among the top payers" in absolute terms, right? I don't think that's the part that is being debated - the amount paid by Apple relative to total earnings is what is being discussed.

</comment><comment><USER25> >The vast majority of our global work force remains in the U.S.

lol. Clever phrasing of outsourcing work to foreign countries.

<comment><USER26> What's clever about it? It's pretty straightforward. Despite the fact that they are a global retailer and they manufacture electronics which are pretty much impossible to manufacture outside of Asia, the majority of their employees remain in the US.

</comment></comment><comment><USER27> Of course they'll say they comply with the letter of the law. That is the 'highest ethical standard' any large public corporation will claim. If we as Americans believe Apple, however noble, is evading the spirit of the law, we need to make the letter of the law more specific.

</comment><comment><USER28> 3+billion is a huge amount of money the last time I checked. The fact is Apple derives most of its revenue abroad, and it's unfair to subject their overseas earnings to US taxes.

<comment><USER29> It's my understanding that overseas profits are only taxed when the money is brought into the U.S. Do most countries do this? Is this abnormal?

<comment><USER30> Yes, most countries try to do this according to local tax/finance laws. The problem with repatriating the funds back into the US is that the capital can be allocated in other countries for better long term effect. Why would any manufacturer pay taxes on income, then taxes on repatriation (into a low- growth economy), just to then export that money the next quarter or year in order to build a new factory somewhere. Just leave the money overseas until you need it.

</comment></comment></comment><comment><USER31> They should be #1, not "among the top".

</comment><comment><USER32> Summary:

* We make a lot of low-paying jobs for young people, hocking our foreign-made goods to Americans in every state.

* We may or may not create jobs as a bi-product of our app store, where developers can try to scrape in an environment where people will turn to piracy because $0.99 is _too expensive_ for an app.

* We pay more in taxes than any of you plebs.

(The last one is the Adam Carolla attitude: "I pay a large absolute value in taxes, so you should thank me, regardless of any considerations of relative value or overall rates")</comment>


Ask HN: So I do want to be a programmer, where do I start? - <AUTHOR>

I was dumb and didn't study CS in school, even though now I realize that I really like programming and everything that comes along with it. What's the best way to correct my mistake and get to a point where I can start coding for a living?<p>Is it books? MIT and Stanford online classes? Code School and Codecademy? Some combination of all of those? <comment><USER2> I'd start with a website. Important is that you give yourself small tasks, just learning from books and doing exercises is boring and you learn often too much which isn't relevant. I wouldn't do mobile development either: the learning curve is too steep and you face a fragmented landscape.

An example path:

1\. Build a plain web page without anything (and learn HTML, CSS)

2\. Build more: a web site with multiple pages and little dynamics (and learn a backend language/system like Python or Node.js with Javascript)

3\. Build a blog with more dynamic content (and learn a web framework like Django for Python or Express for Node.js and how to use them with a database like MongoDB or MySQL)

I would start with plain HTML, CSS and later learn Javscript, then a little Node.js and then Express and MongoDB as database => that's the quickest way how to get things quickly done and to learn _why and how_ things work. And you have basically to just learn three languages: HTML, CSS, JS and if you like some simple dialects (like Stylus instead of CSS and Jade instead of HTML). Or if you have some basic dev skills already just jump into Node and Express, you will have very soon first results.

I wouldn't start with something too much 'magic' involved. Magic = abstraction that you do not understand anymore. Ruby on Rails is an example: you learn tons of conventions, see magic everywhere but won't have a clue for a very long time why and how things work and thus, you just learn conventions and won't learn really to code. Ruby on Rails can be very frustrating: you do Rails for three months and are still not quick or productive and then you think it's your fault or you can't code (but it's Rails with its magic, conventions and increased complexity where actual coding is a very small part). Don't get me wrong: setting up a site with Rails can be done in few minutes but customizing it without knowing how Rails works (and even if you know how Rails work) can be a real pain. With Rails you learn how to effectively glue things together, Rails ecosystems provides thousands of great and mature gems waiting to be glued together.

<comment><USER3> Your bias against ruby is astounding. You recommend node and Django but recommend against rails? Rails isn't magic. The Michael Hartl book is a great place to start after Chris Pine's 'Learn to Program.' Of course the Pine and Hartl books might be a little too magical for an avowed Pythonista.

As far as MySQL, you've lost your damned mind. For relational databases, why not build a heroku site and use PG? Who the hell still uses MySQL?

My suggested 'Learn to Program' path would start with Kids Ruby, then followed by the Chris Pine 'Learn to Program' book followed by the Michael Hartl tutorial followed by the Big Nerd Ranch Objective C book. The Nerd Ranch book starts with an intro to C before getting into OOP concepts.

<comment><USER2> > bias against ruby is astounding.

There was no bias. Ruby on Rails is a mature production-level framework which gets things done. I've just said that it may not be the right tool for getting into programming. With Ruby on Rails too much is automated providing a DSL with a high abstraction layer and finally as one big monolithic piece.

This setup might be good for an experienced programmer but I doubt it's perfect for an beginner. That's all I said and it's not bias, rather your post feels biased and very emotional-calm down.

> Rails isn't magic

You are the first who's saying this. I repeat myself but here again: magic is when the user doesn't understand the abstraction level anymore, when it's too far away from the implementation pattern, when the original desgin pattern isn't clear anymore and Rails definitely is.

> You recommend node and Django but recommend against rails?

Did you ever try Node, Sinatra or Django? Maybe you should before giving such strong opinions. All of them, espeically first two are more expressive and force you to think yourself. With Rails you have to learn the convetions, use them and still are clueluss what to do in exceptional situations because the RoR setup won't strengthen your real coding skills (I am just talking about newcomers!). With Node.js and Express, you have to think because there are much less conventions, it;s more modular and thus, you'll be forced to code more and decide which path to go, with Rails everything is given and often the choices are opinionated (SCSS, Coffeescript). Or you wonder which directory to use for which file in Rails all the time according to the convetions, that no coding! For the classic CRUD app Rails might be good. With Python/Django you have more abstraction but those are more related to the actual design pattern and thus more expressive than Rails—but do not startt a flamewar here, Django and Rails are very similar at the end of the day.

> s far as MySQL, you've lost your damned mind.

This is a really bad style and intolerant—this is not HN style. Instead of coming with arguments you get abusive without knowing the big picture. RDBMS are very mature systems, I wouldn't go with MySQL, rather with Postgres and for lots of systems they are the way to go. NoSQLs are young and there's some reasons they should be used by newcomers, especially Mongo:

\- No need for an ORM/ODM (for Mongo because of the good native JS interface, you can still use one and it makes sense but you do not need reallly) \- No migrations, no scheme

You still can do both with NoSQL/Mongo but to get started to get out of the door, just to understand what a datastore does the complexity level is just right. An SQL with all its migrations, schemes, ORMs, join tables is too much for a beginner. We know this stuff for years but a beginner?? A beginner has to get quickly some positive experiences _which he understands_ and then Node with Mongo is perfect. Of course Rails + ActiveRecord is great to get started quickly but it's abstract and the beginner would not dare to leave the given path because he doesn't know how to directly access the DB. Later he can always switch to a SQL and a ORM (also in Node and with NoSQL) if he likes.

BTW, this is not just for beginners, for many projects this setup makes sense, it's just a new way. Rails is now 7 years old and lot of people like to stick to old paradigms. And ORMs in particular ActiveRecord are debatable, ActiveRecord is slow and clumsy and often not the right choice for scalable high traffic use cases.

Finally, your recommended way is a muddled and confusing way with too much theory. First he should start with some high level Ruby, then some theory, finally some Objective C and then C?? Which logic does this follow?

Most important when learning something is to have steadily successes in order to stay motivated. Small tasks are important to stay interactive to get self- confidence, just learning theory for days doesn't work without having any good use case at all and following some dull examples from Hartls tutorial won't help either. I know that a proper way would include C, OOP and so on but the way would be too long for startes.

</comment></comment></comment><comment><USER4> Repeat after me: programming is not computer science.

Got it? Good. Now, for actual advice.

Contrary to the prevailing sentiment, there actually is a career path in engineering that starts at the bottom and takes you to the top, all classical- like.

It goes something like this: Customer Support/QA -> QA Engineer -> Support Engineer -> Junior Developer

QA is very easy to get into. If you play your cards right, you can get into QA at a place that encourages automation and whitebox testing, which will expose you to a lot of the fundamental skills.

From there, it's a short hop to QA Engineer, which is exactly the same as what I just said, except they expect you to be more than a warm body clicking on things till they break. You'll be required to write code here.

A support engineer is someone who's midway between dev, QA, and customer support. Here, your customers are developers, so the discourse is a little bit more elevated than a normal customer support role. Support engineers are often asked to produce sample code for customers learning to use the product. Take this opportunity to write it yourself rather than sending canned samples.

(Optional) Dev Evangelist: This is much like the previous role, except you spend all your time at hackathons being cool and showing off how cool your API is.

Do well at these, and it'll be a little more straightforward landing that junior dev job. Congratulations, you're a programmer.

<comment><USER5> Allow me to offer an opposing position.

If you want to program, start doing that and don't accept a job doing anything else. Doctors don't accept nursing jobs and civil engineers don't dig holes. I have never employed people who have been 'happy' to start in QA or whatever other role. Why would you accept anything else other than what you really want to do, and are capable of? If you can't land a job as a junior developer, then perhaps you are not cut out to be a programmer?

Also, being a good QA person or customer support person is valuable in itself, and isn't just a 'starting point' for a programming career. I have several friends who have been dedicated QA people for their entire careers, and definitely do not see their role as being 'less' than being a developer.

</comment></comment><comment><USER6> Start with these simple lessons that many don't get:

1\. Programming is essentially about you (!) problem solving.

2\. Programming requires initiative and independence.

3\. Programming requires self motivation and self learning.

1\. is really the only lesson needed here. 2. and 3. are important implications. I'm not saying, programming classes don't help, but if you call yourself a programmer and you need to learn a new API you must have the initiative to try to figure it out for yourself. It's OK to ask questions. It's OK to expect to be briefed or even taught some complicated concepts. It's NOT OK to expect to go back to school to learn every single new thing you come across.

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

Programming is a vast field. What do you want to learn programming for? Nowadays you will find an introduction to programming for every major sub- field of programming. You'll find programming introductions for game development, front-end programming, back-end programming, statistical computation, mobile apps and everything else in between. Personally I find that this is the quickest and easiest way to introduce yourself. I don't like the approach that some take i.e. first learning a really general programming language and programming concepts and only afterwards learning what they actually need.

So do some research and come up with a list of resources.

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

It takes time. How much time varies depending on you personally and the field of programming you want to work in.

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

Landing a programming job may or may not be straightforward. In some cases it's damn right impossible. It depends a lot on you, your location and what standards companies expect out of their developers. I've met good developers who were stranded and bad developers who got into a junior developer position after a year of training at a technical school. Why am I say all this? Prepare yourself and research so that you can find a way to make it. Most if not all job applications you meet will have a requirement for an CS/AI/SE degree. Ignore that but be prepared to show off your skills.

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

Finally, you probably want a to-learn list but again, you must first provide a programming field. I'll be glad to help if you reply with a specific programming field.

</comment><comment><USER7> It's fine if you didn't study CS in school, so don't be bummed about it. If you're really passionate you can get really far on your own, so don't fret over the "dumb" decision, it'll do more harm than good.

Now, first things you have to learn are fundamental programming theories and methodologies. You'll also need to learn these in tandem with a language. There are a ton of programming languages out there - so many, in fact, that picking the one might seem like a daunting task.

I'm a Rubyist - it's pretty, it's fun, it's awesome on the web, and I think great for beginners. However, I think it might be best you learn programming with something like C/C++. Python is great for beginners too. If it were me, I'd learn with one of those languages. Which ever you pick, I'd recommend either Learn Ruby the Hard Way (<http://ruby.learncodethehardway.org/>) or Learn Python the Hard Way (<http://learnpythonthehardway.org/>), both by Zed Shaw. They're also extremely cheap at $2.99 for the PDF, or free if you want to read it online, and the Python version has a video course for $29.

After you're done with that, you can start making stuff. At this point, what you learn next depends on what kind of software you want to make. Research and figure out what you want. Remember you never stop learning programming, so I'd advise you to gradually pick more advanced books, preferably covering more theory than practice. Maybe branch off to different languages and paradigms.

If I had to give one key piece of advice, it's that you learn by doing. It will be daunting, and it will take time, but I promise you - you'll get better. Here's a good piece that will inspire you: [http://37signals.com/svn/posts/3179-you-only-get-one- chance-...](http://37signals.com/svn/posts/3179-you-only-get-one-chance-to-be- a-beginner)

</comment><comment><USER8> I'm in your shoes - I majored in Business, and I'm trying to break into software development after getting bored of IT at 30. Luckily my business degree had a couple VB classes, so I'm not starting with zero.

What I'm doing:

1\. Codecademy will teach you the basic concepts of programming. Codecademy expands into HTML, Javascript, CSS, and other technologies that can be used to make websites and mobile apps. (You can stick a website inside a wrapper and call it an app.)

2\. If you like Windows, get the Visual Studio 11 beta while it's free and start making a windows form in VB or C#. If you don't, either install Cygwin or a distro and learn about the tools for Linux. (sorry I'm not more help here)

3\. Find projects to do - find a small problem at work that you can solve. I made a program that makes an email template , so filling out an internal form is just a couple clicks. Also check out coding challenges.

4\. Look for software internships, open source projects, and other places where you can build your burgeoning skills while gaining experience in working with large projects.

I don't know if I'm going about this the right way either, and I've been thinking about making this same Ask HN post too.

</comment><comment><USER9> What is it that you want to do exactly? It seems like a lot of people lump "coding" and "programming" into being a Software Engineer or a Software Developer. I am a Front End Web Dev and I can guarantee having a CS degree would be beyond overkill.

<comment><USER10> ...until your javascript needs an anonymous closure using first class functions as an argument, or some other lispy-schemey scheme

<comment><USER6> You don't need a CS degree to understand closures or functional programming for that matter. Heck, you don't need a CS degree to understand all of CS theory.

</comment></comment></comment><comment><USER11> My degree is in accounting. But now I'm a developer. I made a career switch 5 year ago and never looked back. Here's the key - build something A to Z.

</comment><comment><USER12> <http://mitpress.mit.edu/sicp/full-text/book/book.html>

</comment><comment><USER13> You mention several online options for learning basic coding, but I'd point out that depending on your style of learning, you may benefit from a classroom setting, which is easily found at a local community college

</comment><comment><USER14> All that you need is right here..

<http://programming-motherfucker.com/>

</comment><comment><USER15> Option A: Purchase a domain name, get a hosting plan, build a website.

Option B: Fire up a command shell, write some scripts.

Option C: Download a tool set, start making a program.

Option D: Get a book, download a tool set, start working through exercises.

Option E: Start with an online course - requires Option D.

In any event, you cannot become a programmer until you start to program.

Pick an interesting problem, and plug away at it.</comment>


Every Library Has a Story to Tell - <AUTHOR> https://www.atlasobscura.com/articles/books-about-libraries-history <comment><USER2> Sometime during year one at my university I was wandering the stacks, pulling books out at random to see what kinda stuff there was. It was 7 stories of stacks, including the basement which had these crazy moving shelves.

At one point I'm at a shelf and pulling out thin volumes with titles like (remembering poorly) "Shift calculations of blah blah style concrete," "weather effects on bloo blee cement," "compression formulas for heehaw company concrete," and so on. Book after book. Next shelf, same thing, entire volumes of concrete and cement research and data. All with different titles, different content, different authors.

As I moved down more I realized the entire row was books on concrete. How? was all I could wonder. How could there possibly be this much published information on concrete? Who dedicated significant amount of time to compile research, stick it in a thin volume, and then have it placed among a thousand others? What librarian chose these books?

I had a mild plan when going into college of reading a whole lot of everything I could get my hands on, but it was only then that I really grasped just how much information is available to mankind. It's truly unassailable. (probably relates well to the other article on the front page right now about the last man to know everything)

<comment><USER3> Oh man this makes me nostalgic.

Had a similar experience while taking a break from studying. Picked a random row of books only to realize it was entirely dedicated to genital reconstruction and sex-changes. Being in college, my curiosity was piqued. I may never unsee some of the pictures in those books.

Edit: Spelling

<comment><USER4> piqued?

</comment></comment></comment><comment><USER5> Here's a few pictures of Manguel's old library: [https://thesleeplessreader.com/2012/09/24/the-library-at- nig...](https://thesleeplessreader.com/2012/09/24/the-library-at-night-by- alberto-manguel/)

It doesn't look like 35k books. Must be very efficiently stacked in there.

<comment><USER6> Very efficient indeed! I would guess the wide bottom shelves hold double rows at least. If I use my own meagre collection of not even 1000 books as a guide, I would estimate that that room can hold about 20000 books if used as efficiently as possible.

That room looks blissfully comfortable.

</comment></comment><comment><USER7> "I have always imagined Paradise as a kind of library." But also consider being on a deserted island with a library of all the books ever written (including manuscripts, etc.) and the lifespan to read it all: it's both an exhilarating and frightening thought. The library as a prison of the mind, trapped in other people's thoughts. For a writer the best book is the unwritten one, e.g. the blank book that Winston Smith cherishes in _1984_.

<comment><USER8> That sounds like Borges' Library of Babel.

</comment></comment><comment><USER9> Manguel's _The Library of Night_ is worth a look, as is _The Phantoms on the Bookshelves_ by Jacques Bonnet. And if you go to the University of Chicago Press web site, the month's free ebook is _The Palace of Books_ by Roger Grenier.

<comment><USER7> Thanks for the link, I jumped at this, but, alas, they require one to create an Adobe ID and use Adobe Digital Editions.

<comment><USER9> Yes, I haven't got around to reading it. Oh, well.</comment></comment></comment>


Ready, Set, Go - <AUTHOR> http://www.engineyard.com/blog/2009/ready-set-go/ Google recently publicly released their new programming language, Go. I've known about this for some time, having worked for the big G while it was in development, although not directly involved.
Google has plenty of special purpose languages, but this is the first general purpose language to come out of Mountain View. That fact alone makes it quite interesting. Add to it that some of the original C and UNIX people are involved, and it becomes something that requires investigation.
What's it for, you ask? <comment><USER2> While the author says that GO is Object Oriented, I think the go language site <http://golang.org/> implies that it is not object-oriented in the conventional sense. The author goes on to say "It is the lack of implementation inheritance that seems odd. Most of us are used to considering it as a necessary part of an OO language." suggesting that he is possibly presuming an Object Oriented approach.

Not all of the implementors of GO are fans of the Bjarne school of OO.

<comment><USER3> I think the author covered that by saying: "Go is an object-oriented language, but not in the style that most programmers these days think of OO."</comment></comment>


How to Use Detectron – Facebook's Free Platform for Object Detection - <AUTHOR> https://hackernoon.com/how-to-use-detectron-facebooks-free-platform-for-object-detection-9d41e170bbcb?source=linkShare-154a0d2814f0-1516883790 <comment><USER2> Looking forward to the tutorial on training our own models!</comment>


Why Noir doesn't have controllers - <AUTHOR> http://groups.google.com/group/clj-noir/msg/502c3c7e24f7319c?pli=1

<comment><USER2> My controllers are thin, but they do serve a purpose. They check if a user is logged in, authorized to view the thing they requested, check if I need to redirect for SEO purposes, prevent request forgery, redirecs if a form validation doesnt pass, and many other things.

Where does he do this stuff? I'm guessing much of it is done via ring middleware, but some of it doesn't fit there, and it doesn't fit in the view or model either.

<comment><USER3> > some of it doesn't fit there, and it doesn't fit in the view or model > either.

In Django, which does not have controllers either, you'd do this via a view decorator in the URL dispatcher: the URL dispatcher is essentially the "plugin point" for the framework-provided controller(s)

<comment><USER4> Hm? Django has controllers, they just call them views. And what Django calls templates are typically called views in other frameworks.

<comment><USER5> [https://docs.djangoproject.com/en/dev/faq/general/#django- ap...](https://docs.djangoproject.com/en/dev/faq/general/#django-appears-to- be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the- template-how-come-you-don-t-use-the-standard-names)

Django styles itself as MTV: Model Template View. The concept of "Controller" within Django I would say gets implemented across a few layers (Urls, middleware, decorators and return HttpResponse objects).

I never cared much for the distinction though as long as everyone knows what your nouns mean for the specific project you could call them RedFish, BlueFish, OneFish frameworks and it would work just as well.

</comment></comment></comment></comment><comment><USER6> Slightly off topic, but I am really enjoying working with Noir and Clojure in general. It just feels so clean, because I'm working with all of these elegant abstractions. I can just write the code in a way that makes sense, and then use a macro to fill in the details of whatever technologies I'm actually working with.

</comment><comment><USER7> Sounds similar to the Pyramid web framework for Python, which skips controllers too:

[http://docs.pylonsproject.org/projects/pyramid/en/1.2-branch...](http://docs.pylonsproject.org/projects/pyramid/en/1.2-branch/)

I prefer this approach over the usual web-mvc. It's important to note that a view is not a template, but something that generates output. In Pyramid, it's usually a function that passes data to the template (which generates html) or produces JSON from native types.

<comment><USER8> Django also calls the functions/classes where you define the logic of selecting the models to operate on, validate, pick output, etc… a 'view'. The template where you map the data to html is just that: a template. People coming to Django from Rails often get confused by that. In the end, it's very similar but with a different name.

I'm reminded of the old Microsoft Foundation Classes with their Document- Object model that lacked a controller. Their promise was that you could reuse views and documents but in practice the lack of a controller to handle user input meant you never could. At least, I never could.

</comment></comment><comment><USER9> I have been thinking allot about this lately.

ExpressionEngine is a good example. Completely template driven yet it is hugely popular.

modern mvc is overrated.

<comment><USER10> Wordpress is template-driven. It is hugely popular.

It is also a giant pain in the posterior to develop for.

(I recommend not solely using a project's popularity to judge the effectiveness of an architecture.)

</comment></comment><comment><USER11> I like to think of Noir as being a composable framework in the sense that in cases in Sinatra, Rails, etc., I would remove duplicated code using before/after controllers, with Noir I write helper functions for login checking, wrapping a partial for similar web pages, etc. I nest these function calls as appropriate.

So there is really not as much duplication of code as you might think.

Off topic, but: one of the biggest productivity boosts with Noir (and Compojure) is simultaneously running a repl with the code to try stuff out, run 'lein run' with auto-reload of changed files, and a real editor like Emacs or IntelliJ with the Clojure plugin for permanent code changes. Auto-reloading of CSS and Javascript assets also works fine. Sweet dev setup.

</comment><comment><USER12> Sounds like a Naked Objects implementation to me. The fun really starts when you start generating your views at runtime using reflection.

</comment><comment><USER13> It's worth pointing out that even if noir wasn't built explicitly to look like Sinatra, it's built on top of compojure, which was.

<comment><USER14> Compojure was originally built to look a lot like Sinatra, but since then the design has diverged a fair bit.

<comment><USER15> Can you elaborate on this? I'm mostly curious because I have used Sinatra, and I am starting to look at both Noir and Compojure.

<comment><USER14> Sure thing. So superficially, Compojure and Sinatra look similar:

        get "/greet/:name" do |name|
          "Hello #{name}"
        end

        (GET "/greet/:name" [name]
          (str "Hello " name))

But these snippets of code are actually pretty different in what they do.

The Sinatra code generates a new route and adds it to an instance variable on the current object: it's a side-effectful method.

The Compojure code returns an anonymous function; it has no inherent side effects. If we wanted to do anything with it we'd want to bind it to a symbol:

        (def greeting
          (GET "/greet/:name" [name]
            (str "Hello " name)))

The other main difference is that Compojure has no implicit variables like "params" or "request". For instance, in Sinatra we could rewrite the example as:

        get "/greet/:name" do
          "Hello #{params[:name]}"
        end

But in Compojure, you don't get access to any variable you haven't explicitly bound:

        (GET "/greet/:name" {params :params}
          (str "Hello " (params :name)))

So Compojure is effectively very explicit where Sinatra is implicit.

The advantage of this approach is that Compojure is (IMO at least) better at nesting and abstracting functionality. For example:

        (context "/user/:id" [id]
          (let [user (find-user id)]
            (routes
              (GET "/history"
                (get-history user))
              (GET "/profile"
                (get-profile user)))))

</comment></comment></comment></comment><comment><USER16> But where does a route point to? To a view?</comment>


8×8 has acquired the Jitsi team and technology from Atlassian - <AUTHOR> https://jitsi.org/news/we-have-a-new-home-and-it-wont-impact-you/ <comment><USER2> I've been futzing about with VoIP since the late 1990's. First as a developer and test engineer and then as just an interested party. When ZRTP came out I was excited, and then Jitsi was developed and I was interested. But everytime I try Jitsi it has terrible quality issues.

About a month ago I evaluated it again, hoping it would have changed since I last evaluated it 2-3 years ago. But it still had terrible quality issues.[1] I want to use SIP instead of Skype, and I want to tell other people to use SIP, but for that to happen Jitsi needs to stop sucking :(

I can only hope this acquisition means Jitsi gets better to a point where I can recommend it, and use it myself. There's a lot to hate about Skype. It's a closed protocol, it's owned by MS, and it's UI is garbage. But everytime I use it I don't suffer from any A/V quality issues, which is actually the point.

[1] By this I mean scratchy audio and video between two test laptops. Whereas Skype had no such problems.

<comment><USER3> Have you tried Zoom?[1] Seems much better than Skype for business meetings.

[1] [https://zoom.us/](https://zoom.us/)

</comment></comment><comment><USER4> Interesting to see this here now :-)

I'm part of the Jitsi team, and made the transition from Atlassian to 8x8. I'm happy to answer questions if any, to the best of my ability / capacity.

<comment><USER5> any thoughts on how much resources 8x8 would be devoting to continued development of Jitsi? Given that you had pretty free run at atlassian.

<comment><USER4> All seems to indicate we'll continue the same path.

</comment></comment></comment><comment><USER6> Jitsi is awesome! We were using [https://appear.in](https://appear.in) for video chat in [https://cocalc.com](https://cocalc.com), but appear.in made dramatic changes recently to greatly increase the friction in dynamically creating chatrooms. It was so bad, that we had to quit using appear.in, and thought we might have to get rid of video chat altogether. However, after searching, I found jitsi, which completely solves our problems, and is overall much better, scalable, and robust than appear.in was for us. We currently use jitsi's free hosted chatrooms (just go to [https://meet.jit.si/[make](https://meet.jit.si/\[make) up anything here]) and you get a chatroom created on the fly, but with Jitsi we have the option to also easily host on our server if need be, since it's open source. In any case, huge +1 to Jitsi , the team behind it, and the companies (Atlassian and 8x8) that are supporting the development of such fantastic open source infrastructure!

</comment><comment><USER7> It's interesting how Atlassian is selling many its offerings, first HipChat/Stride to Slack[0] and now Jitsi.

I'm curious why that's happening, was there some sort of leadership change that's trying to focus on "core business"?

[0]: [https://www.atlassian.com/blog/announcements/new- atlassian-s...](https://www.atlassian.com/blog/announcements/new-atlassian- slack-partnership)

<comment><USER8> No, Atlassian has the same leadership. In this case it was part of the Stride/Slack situation, since Jitsi was part of HipChat/Stride.

</comment></comment><comment><USER9> Nice to see Jitsi here. I have studied in Strasbourg,France where Jitsi was first developed and have followed its development from the very beginning. Big up to you guys !

</comment><comment><USER10> Never heard of 8x8 before. Anyone who used their services care to comment on them?

<comment><USER11> Yes, I've used them for the last year and their software is horrid and can barely be used to make phone calls without crashing frequently. Also, their support is quite crap.

That said, they pushed out an update about 3-4 months ago that improved stability a lot.

</comment></comment><comment><USER12> I hope it will remain open source.

<comment><USER12> I just realized that the jitsi desktop client I use is no longer under direct development from jitsi.

<comment><USER4> All Jitsi projects will remain Open Source.

</comment></comment></comment><comment><USER13> Doesn't seem like big news. IMHO Jitsi was never a particularly good product and seems like Atlassian finally understood it. Maybe it is useful for some businesses now but I don't see future for it.</comment>


The Coronavirus Is the Worst Intelligence Failure in U.S. History - <AUTHOR> https://foreignpolicy.com/2020/03/25/coronavirus-worst-intelligence-failure-us-history-covid-19/ <comment><USER2> Well, the _intelligence_ was there, but the President was not. I think the author's point is that the covid-19 outbreak is the worst _presidential_ failure in U.S. History. But FP is probably not capable of publishing that headline.

</comment><comment><USER3> Have other governments handled it any better though? Seems like most developed countries got screwed, despite having ample lead time from China..

</comment><comment><USER4> Of course no mention of the Feb 3rd travel ban.

<comment><USER5> The travel ban bought you time.

But you had to go into lockdown, and shut down the borders everywhere. This is what Trump failed to do.

The virus actually came in from Europe. And when they finally shut down travel from Europe, and everyone immediately flocked home, then this caused the east coast to explode in infected cases.

And New York was just a Petri dish, that the virus was incubating there for weeks.

<comment><USER4> The problem is the impossible standard. Every government was caught off-guard. South Korea handled it the best, but they have the preparation from the worry about chemical warfare from the North.

There is no precedent for stopping the economy for a virus, we didn't do that for Swine Flu or any other pandemic.

I'm glad this is the new standard, but lets not pretend it's always been.</comment></comment></comment>