HN user

chandler

171 karma

Programming some work, just about.

Posts1
Comments68
View on HN

Yeah, except 10 years at certain companies could teach you less than 6months to 1 year at one company that's actually doing it right.

Is it common for programmers that have been on a job to not realize the ways in which their software sucks? Knowing what to avoid and the consequences of doing things wrong is an important factor of experience; additionally, maintaining a bad system gives insight into mitigating problems.

That said, I do agree that experience isn't just a passive function of time (as in "interest earned"). Instead, it's more like a landscape that needs to be explored (and to your point, some companies will allow a programmer to explore more productive areas).

...the equation you posted wouldn't the intellect variable be pretty much equal to experience, and you could make up for one with the other?

I suppose the answer to your question would depend on just how much variance you place on intellect. Is it:

- 0.0 (rock) to 1.0 (cleverest human on earth)

- 0.0 (rock) to 1.0 (cleverest intelligence across time and space)

Either way, I wouldn't take the equation too seriously--it was just a model to show a trend :/

Consider smartness as "what you can do with what you know," while experience is "what you know"--then, what follows is that having more experience makes up for not being as clever.

    Able to make good choices = Intellect * Experience
Moreover, employers can _try_ to assess intelligence with whiteboard interviews...but the easier factor to evaluate is experience. It's right there on the resume!

Agreed--being able to define functions for control flow & data transformation seemed functional enough (compared to having to rely on primitive reserved words).

Of course, even then, C was functional by that definition (as long as you could remember where the parens & asterisk went when defining your function!)...so what do I know.

On the other hand, if you have the attention span and interest, Li Haoyi has an interesting (and, in its conclusion, useful) take on this topic:

http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbo...

A simple thing is to figure out if you can restrict the runtime environment during development (available memory, clock speed, network speed, etc), and develop to that. The nice side effect is there's more of your computer available for IDE's and browser tabs.

Secondly, abstraction doesn't necessarily track with efficiency/inefficiency.

Our raw mental capabilities may have always been the same, but how smart we are also depends on our learning.

FWIW, I tend to equate "smart" with "cleverness," as a separate measure distinct from "experience," for the same reason you describe--so what I usually go by is something along the lines of:

Cleverness is a measure of "what can you do with what you have," whereas experience is a measure of "what do you have?"

Over the centuries we've made great gains in mathematical tools, scientific knowledge, in democratizing education and in disseminating knowledge. And this means over the centuries we've (as a species) obtained more leverage that we can apply to our raw mental capabilities, giving us (overall) greater intellectual capabilities.

I don't think we've gained greater intellectual capabilities--our intellectual capabilities are the same, we just operate in a completely different mental environment than our priors did.

Moreover, having a different view of the world allows for different connections to be made, and different potentials to be expressed (irrespective of one's individual level of cleverness).

So, for example, by placing a priority on stories & views that encourage greater investigation of the physical world, we get to where we are today. And we can teach the next generation slightly different stories that optimize for different kinds of usefulness.

To bring it to the HN contingent--if I learn a new programming language, I've gained experience in different ideas and operate in a different mental landscape. But I'm not smarter afterwards, and I wasn't dumber before.

...but why did they do it like this?

...because people are smart. People have _always_ been smart, it's one of the defining attributes of humanity.

It strikes me oddly (not specifically your comment, but the general color accompanying these kinds of articles)--there's a kind of ground assumption that by looking into the past, one sees nothing but a gradually descending IQ.

My brain doesn't "point" at something in Vi motions...

In emacs there's a mode called ace jumping. Essentially, it lets you pinpoint exactly on screen where you want to move the cursor ~3 keypresses.

Similar to how the vimium extension to Chrome let's you jump to any link/button/control with two keypresses.

These aren't motion commands as you'd typically get in vim/emacs; instead it's a different interface to allow directly jumping to an arbitrary position (more of a warp than a movement).

http://emacsrocks.com/e10.html

Anyways, the point I wanted to make is that even some instances where the mouse is considered superior can be negated by a different UX.

So consider the idea that FPS games are more effective with a mouse. I believe this is a UX choice to reward developing mouse skills, not a fundamental limitation of the keyboard. As such, consider the following levels of keyboard FPS controls--

Option 1: Aim by directional arrows. Will be beat out by a mouse user for sure.

Option 2: Aim by movement commands (e.g. B skips and tracks the target on the left, F skips and tracks the target on the right, etc). Might be on par? Definitely has a different learning curve than using a mouse.

Option 3: Aim by label. Every target has a letter hovering over its head, and pressing the key will aim & track at that target. I suspect this would be much more _efficient_ control scheme than using a mouse.

Option 1, is akin to navigating text with arrows, Option 2 is akin to navigating with jump commands, and Option 3 is akin to navigating with an ace-jump type interface.

So although #3 would be considered unfair in a typical FPS context, as a programmer I just want to reduce effort as much as possible.

I imagine piping in bash feels similar...

It is. Piping is akin to an untyped subset of working with Scala's collections, and there's a similar workflow between the two, e.g.:

In bash, you build up a command line with something like (as a stupid example, the number of unique file sizes in a directory):

    Step 1) $ ls -l
    Step 2) $ ls -l | awk '{print $5}'
    Step 3) $ ls -l | awk '/\d+/ {print $5}'
    Step 4) $ ls -l | awk '/\d+/ {print $5}' | sort -n
    Step 5) $ ls -l | awk '/\d+/ {print $5}' | sort -n | uniq
You can see the correspondence with collections--typically building up in the editor in a similar staged manner ending with something like:
    Process("ls -l").lines   // ls -l part
      .map(_.split("\\s+"))  // awk part {
      .filter(_.length > 4)  //   ...
      .map(_.apply(4).toInt) // }
      .sorted                // sort -n part
      .distinct              // uniq part
The tradeoffs between the two are essentially verbosity versus data safety (perhaps not important with a throwaway inspection, but more important when working on larger programs...).

However, the building process is the same--you don't write the latter all at once, you gradually mold the pipeline until you get the output you want.

Yeah, but where are you going to get the skills of interacting with strangers?

Eliminating baseball practice doesn't seem like a way to encourage more games :/

So while our system would be able to say "I have seen person 1234 at locations 4,7,9,11 on dates x,y,x" we had absolutely no way of knowing who 1234 was or anything about them...

Minor nitpick, but giving someone a nickname isn't the same as anonymization.

"Hey Bob, thanks for logging on. Did you know we've been calling you 1234 these past five years!"

When a passive recognition system _uniquely_ tracks & identifies a person, it just takes time before that gets cross-referenced.

(different story if the data gets aggregated, or you scrub the uid completely after some window)

> It seems like there's a fine line between being clever and being morally bankrupt.

Actions can only be evaluated as moral/immoral/amoral when you've taken the time to define a system of morals.

It's the difference between a requirements document and an implementation--just as you can't determine the suitability of software without knowing its requirements, you can't determine the suitability of an action without knowing your morals.

Suppose you've decided you want to live in a society that respects the "Don't lie, steal, or cheat" maxims (for whatever reason--I've chosen this here because they're explicatively short!):

Then determining what's moral/immoral/amoral becomes an application of: 1) Does this encourage me (or someone else) to intentionally misrepresent the truth? 2) Does this encourage me (or someone else) to take something that hasn't been given? 3) Does this encourage me (or someone else) to misrepresent the truth for gain?

On the other hand, consider a company's system of "Maximize profit while minimizing legal liability": 1) Does this encourage me (or someone else) to maximize our company's profit? 2) Does this encourage me (or someone else) to expose our company to legal liability?

Notice that these two systems don't address the same concerns.

So the fine line exists because what's moral for the company MAY conflict with what's moral for the individual, and many of us don't like to think about /any/ ethical system (after all we're being paid to work in the latter!).

> ...a random human's odds of being eaten by a figurative grue monotonically increase as you go backwards in time.

Humans don't live alone in the woods--not now, not 5,000 years ago (nor 45,000 years before that). They band together to modify, control, and tame their environment.

Now, you might miss your devices, pastimes, and widespread sanitation...however, from my understanding, humans don't typically worry about malevolent grues.

https://en.wikipedia.org/wiki/Anatomically_modern_human#Mode...

Sure, at a prior job we passed out hardcopies of a side-by-side diff before scheduling a peer review (including only the affected methods/functions).

No syntax highlighting, but it was quite useful. Off the top of my head, the two main benefits are: 1) You free up your computer for the review 2) You get a different form factor to interact with.

Regarding the first benefit, having a printout means you can use your computer to run the application, look up docs, and even (ironically) navigate the code in your IDE.

As for the second, having a printout means you can spread out the pages to compare different bits of code, draw diagrams, connect arrows, circle bits of code for notes, etc.

It was pretty useful.

> Imagine most of your income comes from Adsense, how would you feel about revealing something as disturbing as google involved in a case of corruption in the european parliament?

This wouldn't happen because a news org would never recover the cost of an actual investigation from AdSense impressions.

And even if they did, 100+ other websites will just rehash the first paragraph, write a catchier headline, and come out with a positive ROI...and stay in business.

Let's disregard the blackmail aspect of nothing-to-hide.

Consider that lobbyists & bureaucrats now have the capability (prevented only by policy) to snoop the past and present communications of elected officials.

Imagine your squeaky clean politician, whose friends are equally squeaky clean. How effective will this politician be when at negotiations, hearings, etc, his opponents have already studied his history and relationships? They know where he likes to eat, where he's been on vacation, where his dog goes to the vet. They know how the talks are going, they know which strategies are working, and which lines of thought aren't.

In short, they know which ideas to push, and which ideas to back away from.

This politician will be both ineffective at representing his constituents, as well as unable to point to why this is the case. And he's never going to cry out "blackmail!"

Moreover, all these calculations of how much energy is required to grow meat fall flat when you consider grass-fed beef & pastured chickens (a la Saladin); unlike corn-fed beef, grass-fed beef can be self sustaining & actually rejuvenate the land.

Choosing veganism over corn-fed carnivory is the lesser of two evils, only because veganism requires less monocropping. However, at best it can only slow--never reverse--environmental destruction (without animals, the NPK source is petroleum).

From an environmental standpoint, the disease is "growing crops without animal input," and corn-fed beef is merely a symptom.

Ironically, the only way to turn veganism into a closed system is to avoid the large-scale monocropping of grains and re-introduce animals for a nitrogen source.

Different nutrients are processed differently by the body, fully in line with thermodynamics.

Take 100 Calories of sawdust (cellulose). If you eat this, how many calories did you consume? Did consuming these calories contribute to fat accumulation? Because the answer to this is no, does this cause a violation of the 1st law?

Your body doesn't merely "absorb calories" from food. It absorbs and transforms chemicals, and directs these chemicals through various pathways. Eating a low carbohydrate diet doesn't "shock his metabolism" into being less efficient, it simply uses different pathways for nutrient absorption.

Also, regarding the referenced study: All four diets tested were virtually identical regarding the % calories derived from fat, protein, and carbohydrate.

http://content.nejm.org/content/vol360/issue9/images/large/0...

Moreover, the low-fat diets weren't particularly low-fat, and the high-fat (low-carb) diets weren't particularly low-carb.

So what happens when you feed a group of people the same 1600 Calorie diet for two years, and then measure their weight loss? What exactly are you demonstrating?

Of course I was simply addressing the sustainability comment, not the economics involved.

Regarding economics, I suppose the unanswered question is how would a reallocation (or reduction, depending on your political bent) of government subsidies affect the feasibility/availability of grass-fed beef compared to the CAFO variety? What would happen if grass was subsidized instead of/in addition to grain?

Even now, it's possible to buy sustainable meat at comparable prices (http://www.getrichslowly.org/blog/2006/12/13/how-to-buy-a-si...) if you go in for a half or quarter cow. However, this involves quite a bit of work (if only it were as simple as logging into buymycow.com and ordering 200lbs to be vacuum sealed & delivered at your doorstep!).

I read GCBC about two months ago; although I've been interested in health & nutrition for several years now, it's amazing that I never understood how badly science has been mistreated by nutritionists & health experts.

Moreover, because this advice runs so contrary to conventional dietary wisdom, many in the community are fascinated by reviewing studies for strengths & flaws (in the similar spirit of code-reviews); consequently, I've learned more about both human physiology and the scientific process in the past few months than my entire life (which is beneficial regardless of whether or not I continue down the low-carb path).

For example, compare the quality of minds at work in the following post (it takes off in the comments): http://www.diseaseproof.com/archives/diet-myths-are-the-inui...

Here's another example: http://www.proteinpower.com/drmike/saturated-fat/abcs-big-me...

One of the points Taubes makes in his GCBC book (which is phenomenal, by the way), is that obesity is a dysfunction of excess adipose tissue (fat), not merely a problem of excess weight.

As you suggest, using only weight as the variable means that a dieter who loses 10 lbs of lean muscle tissue is considered as successful as a dieter who loses 10 lbs of adipose tissue.

Regarding the environmental impact and sustainability: http://www.westonaprice.org/mythstruths/mtvegetarianism.html...

Here's another take: http://www.second-opinions.co.uk/vegetarian.html#link1

One missing piece regarding the idea of sustainability of ruminant farming versus grain farming is that the former tends to rejuvenate the soil, and can be performed in areas unsuitable for crop growth. The latter, on the other hand (unless performed in concert with ruminant farming), encourages deforestation (to locate healthy, nutrient dense soil), using up the nutrients in the soil, maintaining the soil via petroleum fertilizers, and then abandoning the land once depleted/eroded.

Ruminants are a key piece to the puzzle in sustaining the fertility of the soil when growing crops.

>> The parenthesis do require that you have at least a moderately capable editor to navigate them effectively.

I disagree, with a caveat--writing code using a terrible editor requires knowledge of the indentation rules for the language, regardless of whether that language is a lisp, Perl, Ruby, etc.

However (the caveat), although the indentation rules for Perl, C, Python are relatively simple (indent after a '{' or ':', line up arguments), each function/macro in a lisp can have different indenting rules (e.g. in CL compare `let' to `multiple-value-bind' to functions, to lists, to the various `with-*' macros, etc).

Once you know the library for a specific implementation, the indentation rules become more obvious; at this point, using (e.g.) Notepad isn't particularly terrible (until that knowledge is acquired, though, yikes).

>> ...we laugh and think, "Who the hell would buy that?"

I'd speculate that this arrogance is more a consequence of the content being sold than the format it's being sold in.

If someone wrote a "real scaling with memcached" (or whatever) ebook, with actual setup, use cases, performance numbers, patterns, etc, I suspect the users here would be intrigued.

Sure, much of the information could be gleaned from blog postings and READMEs, but how much would it be worth for all the topics to be aggregated and treated with a consistent depth?

>> Saying that time might be an illusion is saying that time might not be "real".

No, the word "illusion" references an artifact that is both real and effective, yet whose true nature is misunderstood.

Moreover, for X to be an illusion, it necessarily must exist in some way.

>> The stories on the frontpage now are still roughly the ones that would have been there when HN started.

Subjectively, the frontpage and discussions have grown quite bland here; without necessarily corresponding to a reduction in the quality of each article, it feels as if the range of content linked has become homogenized.

Objectively, however, it's quite clear that the range of content hasn't strayed much at all (witness archive.org). This failure to change lends a certain banality of tone to the site that is almost unbelievable.

>> I really can't think of any reason why you'd want to show score before voting.

When I vote (here), I'm pushing a comment towards an idealized score. To make the decisions "do I think this is rated too highly" and "do I think this is rated too lowly" requires knowledge of the current score.

>> It's a recursive problem you'd basically be talking to nobody...

Presuming this was done where each person had fine control over the date, you may be right. However, suppose each person only had a single binary control, essentially "hide everyone newer than me."

Furthermore, rather than "newer than me" being defined by a join date specific to each user, instead it would be defined by the start date specific to a particular generation of users (the news.yc folks do seem to track mass user migrations). Visually (bars are new.yc join floods, time moves to the right):

    time:  |--------|---|------|-----|---...
    group:     1      2    3      4    5
Joining early in group three, you would be able to view comments made by those in groups 1, 2, & 3, which would include people who joined after you in group 3 (your supposed peers).

This would still provide each user with the ability to view the site more-or-less as it was upon first arrival, without actually allowing each user fine granularity in locking everyone out.

(for the record, such a feature isn't as useful as simply applying social & administrative pressure to keep quality up; I just wanted to mention an alternative implementation that doesn't turn into an arms race)