HNHacker News
TopNewBestAskShowJobs

mcantor

5,255 karma · joined May 21, 2009

Devout software hater.

http://www.maxcantor.net

my name is max cantor.

my email is firstname at firstnamelastname dot net

purveyor of vim cheat sheet posters

http://www.vimcheatsheet.com

submissionscomments
mcantor··on Minimum Viable Personality
For me it was (somewhat inexplicably) the voice of Morbo, the prodigiously-foreheaded newscaster alien from Futurama.
mcantor··on Moot: "sterile Facebook comments over provocative YouTube comments?"
What does "Sign in with Twitter to contribute" mean? Does that mean I get to contribute to the discussion by posting a reply if I sign in with Twitter? That's what "contribute" means to me, but it seems unlikely, especially given the relative paucity of posts in this discussion.

I wouldn't bother making a comment here to ask; normally I would just sign in and see for myself. But this app wants permission to make posts to my Twitter account, and I never, ever do that. (I hate it when I sign up for something and I later find a post in my timeline that says "A-hyuk hyuk, I just joined SomeSkeezyWebsite and I'm having a blast, LOL!")

mcantor··on “I hate almost all software” — Ryan Dahl
It would be ironic if the "just solve the fucking problem, damn the details" attitude espoused in this post is the reason everything is so fucking complicated.

(I honestly am not trying to imply that that is the case; I'm just musing.)

mcantor··on Stripe: instant payment processing for developers
Is this real? Am I dreaming? This sounds too good to be true. Someone pinch me, please. (Is there an app for that?)
mcantor··on Show HN: HackerThings - Products for hackers
The Kinesis keyboard seems germane to this site:

http://www.kinesis-ergo.com/

(Talk about "cure for disposable income"... they're actually great to type on once you get used to it; they're just not worth $300).

By the way, this is a delightful and simple site; I signed up for the newsletter, and I want to give you my money somehow. For what it's worth, I wouldn't bat an eyelash at affiliate links. I agree with joshu that curation is a huge value-add. In mere minutes, just based on the design of the site and the content on it right now, you have gained my trust! Treat it well and benefit from it.

mcantor··on How to Rock an Algorithms Interview
Maybe 50% of the replies to my OP involve the importance of algorithmic fluency; the rest of the posts in this sub-thread are all delightful suggestions about which books to read and how to fit algorithms into one's learning habits even if they weren't already there.

And what is wrong with one sub-thread dipping into an utterly related topic? Are you suggesting that no discussion should ever shift from one aspect of a topic to another? Or are you suggesting that every programmer, anywhere, ever, should obviously learn algorithms until they are completely fluent? Both of those are baffling to me, as the former would be a completely unstated expectation in the entirety of internet discussion forums, and the latter is what we are discussing in this sub-thread!

This is one of the most interesting threads I have ever read on Hacker News. It contains a fantastic breadth of perspectives and has remained admirably civil and candid. I've had 2 people e-mail me just based on this thread, and I've purchased two books just based on this thread. I take umbrage that you would call it a waste.

mcantor··on How to Rock an Algorithms Interview
Thank you, this is an illuminating response! Hopefully I'll remember to look back on this thread when I'm enlightened so I can see if I've switched sides on the debate. :-)
mcantor··on How to Rock an Algorithms Interview
> And if not optimized "prematurely" (ie. written efficiently from the start), then after-the-fact optimization, if happens at all, would shave only a fraction out of the "forever" - thus it frequently doesn't happen at all because of such low projected ROI.

My personal experience completely contradicts what you're saying.

Despite the cushy comforts of server-side scripting languages, I have experienced the occasional performance or scalability problem, and in every single case, I wrote inefficient code on the first pass, discovered unacceptable slowness at a later date, then found the bottleneck and optimized it.

Perhaps I am a brilliant super-coder (unlikely), but I have never ignored a performance problem because I didn't think I could improve it enough to be worth the effort.

mcantor··on How to Rock an Algorithms Interview
Thank you for such a candid post! I know how you feel.

I'm only a little farther along in my journey than you; at 26, I finally feel confident in my abilities, but am still humbled by how much I don't know. Last month I spent hours poring over Linux network programming resources so I could implement a performant, scalable, thread-safe game server [1]. After weeks, I finally got it working--replete with tests, sane coding practices and other Good Things--and it felt so good.

Like you said: "All hard stuff that I'll never need to know in order to build a web store site..." I didn't need to reinvent the wheel--there are tons of pre-existing solutions and frameworks out there that I could pick up and use to hit the ground running. But, like most people on this site, you and I were bit by the same bug: the desire to understand how and why it works.

For me, the hard part isn't dedication to learning or writing dime-a-dozen web apps to pay the bills. The hard part is finding the right balance. I think that's probably something I'll keep learning more about until I finally kick the bucket.

If I can presumptuously offer advice, from barely a half-decade down the line: Don't give up, and learn to see the intimidation for what it is: thrill! Do as the sagacious Derek Sivers commands: whatever scares you or excites you, go do it [2]. If you come upon something that seems insurmountably complex; it could be anything: compilers, emulators, algorithms, low-level network programming... do it. You don't have to learn it in a day, a month, or even a decade, but never fool yourself into believing that it's too hard. It isn't. Take breaks to keep yourself sharp, but never give up.

[1] - http://stackoverflow.com/questions/6849239/how-should-i-arch...

[2] - http://sivers.org/scares-excites-do-it

mcantor··on How to Rock an Algorithms Interview
I upvoted you for the good explanation (and the refreshingly self-aware edit). However, I think it is rather presumptuous to paint the broad strokes of "good" and "bad" without adding so many caveats that it would no longer be germane to this conversation.

By your definition, I am currently a "bad programmer" because I do not have fluency in algorithms.

(I will leave the objective truth of this statement as an exercise to the reader; God knows it might be so. However...)

I contend that I am capable of learning new material quickly enough that, if I were suddenly called upon at my job to write code which handles all of the slings and arrows of algorithmic complexity, I would be able to do so with very little friction. To phrase it differently: I (probably) don't know enough to write gorgeous, algorithmically sophisticated code on the first pass, but I know enough to know when it's time for me to hit the books, and where to start.

Obviously, it would take me longer than someone with prior experience in writing such code! If the overarching question is "does algorithmic fluency constitute a dealbreaker when hiring at certain positions", then I suppose the answer depends on how much longer it would take. I can only speculate on the difference in a flagrantly biased manner, as I would egotistically prefer to believe that I ought to be hired in more cases than not. :-)

Or, if we look through the Dunning-Kruger lens, we may conclude that lack of algorithmic fluency always constitutes a dealbreaker at certain positions, because even if the developer in question can learn on the job, he or she will still make errors and oversights with far-reaching implications that are invisible--unknown unknowns--to the algorithmically illiterate. This feels less plausible to me than the simpler consideration that "learning on the job" may simply be an undesirable speed bump.

I don't really have any concrete points or refutations to make; I'm just fascinated by the issue in general and enjoy exploring the possible angles.

(Also I shall likely just cut the Gordian knot and go play with algorithms until it simply isn't an issue anymore. Go figure)

EDIT: Actually, there is a point I forgot to make:

In your edit you wrote, "So a lot of "self taught" programmers have only taught themselves 10% of what they need to know and never bother learning the other 90%." I think this is the crux of the "good/bad" problem: "what they need to know" is very subjective and dependent on context.

I think it's reasonable to assert that there are programmers out there who have long and satisfying careers, but never learned X, or didn't learn it for many years. Who's to say whether they are "good" or "bad"? It's a judgment, and judgments are meaningless without context: "good programmers need to know X" doesn't really say anything, but "programmers need to know X if they want to Y" does.

You certainly went down this road in your comment, but your Y was "You do need good programmers to scale your product, add features efficiently, and architect solutions without making a crippling mess of your code.", and I feel like lack of fluency in algorithms is just not a surefire indicator of bad architecture skills (among the others you listed) as well.

mcantor··on How to Rock an Algorithms Interview
>I'll worry about the time my code takes once it's notieably slow.

the Dunning-Kruger is exactly about ability to notice

It seems like you are saying that every programmer ought to go out of his way to become fluent in algorithms, because without fluency he or she will never notice when their code is running slowly.

If so, I disagree. It requires no skill to notice whether code is running slowly--you needn't look further than my techno-skeptical dad muttering, "Jeez, this thing takes forever to boot up" as he regards his desktop with disappointment. I think this is what the grandparent commenter was talking about: if I'm not fluent in algorithms, but my dad doesn't think it's slow, then where's the problem?

"Premature optimization is the root of all evil."

mcantor··on How to Rock an Algorithms Interview
For anyone trying to buy "The Algorithm Design Manual" (or at least add it to their Amazon wish-list with a dreamy sigh), It seems like the "correct" version is here:

http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...

I was a bit flummoxed at first because algorist.com doesn't tell you how to buy the thing, and the Kindle edition appears to be out of date (based on the first edition, obsoleted by the second edition from 2010).

mcantor··on How to Rock an Algorithms Interview
Sorry, I should have been more specific: I understand the rules of Big O complexity, which you aptly summarized; the part I'm really curious about is "From there, you can pretty much combine these rules to analyze many algorithms." It's not that the concepts are mysterious to me, but that making them a part of my learning habits has not come naturally.
mcantor··on How to Rock an Algorithms Interview
Thank you for the Wikipedia suggestion; I hadn't really considered using it as a learning resource because I've had bad experiences trying that with other fields. (For example, I think Wikipedia is an abhorrent place to learn mathematics, though it clearly functions well as a reference for people who already know what the hell is going on.) Perhaps being already fluent in the fundamental concepts of programming and computer science will make the Wikipedia articles on data structures & algorithms more useful from a learning perspective.

Tinkering with the source code for $language is also a great idea! That meshes with my empirical experience that the best way to learn is to "play". These days, it's rare for me to write code that isn't related to some specific personal project or business goal; maybe bringing back a bit of the "play" aspect is one of the keys to improving fluency.

mcantor··on How to Rock an Algorithms Interview
Thank you, this is a great answer that confirmed some of my suspicions. I'd be interested if anyone could recommend other good resources such as Project Euler. Perhaps the book Data Structures and Algorithms ought to be higher up on my reading list? I would feel a lot more enthusiastic about getting a copy and diving into it if someone with the context of my OP question could confirm that it's a relevant resource.
mcantor··on How to Rock an Algorithms Interview
FTA:

    You should know these data structures inside and out.
    What are the insertion/deletion/lookup characteristics?
    (O(log n) for a balanced binary tree, for example.)
How does one achieve this? Not just being familiar with data structures and algorithms (I am), but being fluent in them, to the extent that you can produce the Big O complexity for different operations off the top of your head.

I didn't have a traditional CS education in college. Maybe there's some kind of magic that happens in Algorithms [1-3]01 that permanently etches these characteristics into your brain. But whatever it is, I missed out.

My main problem is that I don't seem to need this information to do what I do. I work predominantly with server-side, interpreted languages, and I just don't run into the bottlenecks and performance problems that Big O-knowledge seems to mitigate. Maybe I've been lucky. Maybe it's because none of my personal projects have gotten popular enough to be subjected to the kind of load that reveals such problems. Maybe it's because I haven't worked on the kind of project that needs this sort of attention. Whatever the reason, I simply have never hit a point in my work (which I assure you has been non-trivial at times) when I sat back and said to myself, "Gosh, if only I were more familiar with the complexity breakdown of the classic data structures, I would be able to solve this problem much more effectively or efficiently."

The thing is, I know that I'm perfectly capable of nurturing greater fluency in algorithms, so it seems like a waste to inevitably flub the more demanding portions of algorithm-based interviews. So what should I do? Is the answer as simple as biting the bullet and using flash cards until I know it all by rote (which feels like cheating), or am I "doing it wrong" somehow? Is my lack of fluency preventing me from understanding just how important it is (a la Dunning-Kruger)?

mcantor··on Very cool, but very creepy, open source project
Wow, how uncannily timely. Just yesterday, I read the part of a speculative fiction near-future novel, "Halting States" by Charles Stross, which includes this as an interesting detail with an eye towards technical imperfection; one of the protagonists is bemused by someone's neck glitching up into their face during a video call while they use this sort of software.
mcantor··on A Fifth of Telecommuters Work Less Than An Hour Per Day
You're right! However, it's inefficient for a developer to always be doing that much non-development work. And it is possible to get real work done during the small windows, but only certain types of real work. Occasionally you can fit in a bunch of good bug-fixes. Other times you're able to organize things into discrete small tasks up-front, and you can get a few of those things done with each small window. But, it's impossible to really achieve flow in those circumstances. The lack of flow is really the gist of my argument.
mcantor··on A Fifth of Telecommuters Work Less Than An Hour Per Day
You have a daily stand-up at 9:30, so even though you get in at 9, you don't bother starting anything because the stand-up will cut it short as soon as you get rolling. The stand-up is supposed to be 10 minutes, tops, but regularly balloons into a half-hour behemoth. You make your daily sojourn to Starbucks with the other developers and get back to your open work area at 10:15. There's a business user waiting for you. You develop internal tools and the brass is too cheap to employ a support staff, so you are level 1. They're supposed to open a support ticket and assign it to you instead of walking over to your desk, but you've already sent them packing the same way three times this week, and it looks like they're ready to cry, so you open a new browser window and ask what the problem is. You end up having to pull in a sysadmin, and after an hour, the two of you determine that it's a problem with a third-party service, so you open a support ticket with them and tell the business user you'll keep them updated.

It's now 11:15. The developers start lunch at around 11:30 - noon every day, so there's no reason to get started on anything now. You get back from your hour lunch break at 12:45. There's a meeting on your outlook calendar at 1 o' clock, but you read the description and decide to skip it since there are already enough developers on the docket to give enough input. You're just gathering momentum at 1:05 when the Project Manager who organized the meeting appears at your desk, asking you to come to the meeting.

"I have a lot on my plate; the other two devs know enough about the system to keep the ball rolling."

"Well," she counters, "I really need everyone's input for this meeting." (Just like every other meeting.)

"There are 20 people on the invite list... if there are any problems, I'm sure I can just follow up with you after you send out the meeting minutes."

"Look, I really need you here for this; this isn't a skippable meeting." (None of hers are.) Finally you fold--you didn't take this job because you were a go-getter who knows how to tell people "no" repeatedly. The meeting is scheduled for 1PM - 2PM, but (like most meetings at this company), it goes until 2:30.

You get back to your desk and there are a dozen new IMs and e-mails blinking on your screen. You fantasize about just closing everything and working, but you've been here long enough to know that un-answered IMs and e-mails will result in people walking over to your desk, just like the jilted business user from this morning. For a couple of months you managed to put your foot down, mark yourself as "busy" in Outlook for the afternoon, and tell people that you simply won't deal with any non-critical problem during that period, but hearing complaints about issue turnaround time come through your boss was too much of a drain.

You answer IMs, follow up on e-mails, flip through high-priority code reviews and take care of other necessary busywork for about an hour and a half.

At 4PM, you get started on your work.

mcantor··on Why 80 Percent of Web Projects Are Total Bullshit: A Freelancer’s Rant
I don't fault you! Your plan is admirable. I just don't know if I can actually pay that much for a t-shirt. :->
mcantor··on Why 80 Percent of Web Projects Are Total Bullshit: A Freelancer’s Rant
Damn, son! Thirty dollars?! That's a serious chunk of payola.
mcantor··on Why 80 Percent of Web Projects Are Total Bullshit: A Freelancer’s Rant
From the article: "(coders think businesses are just code)"

Requesting this on a t-shirt. White text, black background. Nothing else. Maybe a cheeky clip art of a stereotypical neckbeard-sort-of-guy.

mcantor··on How to Design Classes (in Ruby, Python, Java or any OOP)
Honest question: Is that really what you thought? It seems obvious to me that I was implying a defense that the phrase I quoted also appears on the page, directly next to the phrase ekiru quoted, which makes the mixup a little more understandable, because it means I didn't see something that simply didn't exist. Did you get that and post your reply anyway, or did I just express myself poorly?
mcantor··on How to Design Classes (in Ruby, Python, Java or any OOP)
In my defense, this is what shows up on my screen:

  What you will learn
  What you won't learn
  Java.
Weird!
mcantor··on How to Design Classes (in Ruby, Python, Java or any OOP)
The book opens with "What you'll learn: Java."
mcantor··on How to Design Classes (in Ruby, Python, Java or any OOP)
I shamelessly clicked away as soon as I realized it was Java. Well, not completely shamelessly. I kind of feel like a "rassa-frackin' whippersnapper" disgustedly changing the radio station when stumbling on classical orchestral music.

Then again I also feel a little dirty for comparing the likes of Tchaikovsky and Beethoven to Java...

mcantor··on If this then that
I see "retarded", "Jew" and other terms (when used pejoratively) as in a separate usage class from "fuck", "shit" and their ilk. The former are invectives; that is, they refer to a specific kind of person. Their usage can only be interpreted as negative judgment of a human being, even if they're not specifically talking about someone. ("Don't let them Jew you" is still negatively judging Jews even if "them" is vague.)

On the other hand, "fuck", "shit" et al. exist in a bit of a vacuum. "What the fuck" is not offensive to fucks, because (hopefully) very few people identify as "fucks".

So, the vector of offense for "Jew" is different from the vector of offense for "fuck". I'm offended when people use racial slurs. But when someone simply swears, I don't see a reason to be offended. It may affect my opinion of them; for example, I am less likely to respect someone for being articulate if they can't express themselves without swearing every couple of words. But getting offended implies some degree of emotional investment in the words or concepts themselves, which I don't really see the basis for.

To put it another way: I feel like any reasonable, compassionate person can't help but be offended to some degree by slurs; and they should be, because slurs are probably not such a great thing. Conversely, I think that we are taught to be offended by swears, and it's within reach of the average person to disconnect their emotional response from them.

mcantor··on If this then that

  Mom: What does "WTF" mean?
  You: It's just some internet joke.
  Mom: Well, all right.
Fortunately this is how it goes for me:

  Mom: What does "WTF" mean?
  Me: It's an internet thing; it stands for "What The Fuck".
  Mom: Ha ha!  I love it.  I'll have to remember that one.
mcantor··on If this then that
Get over it! They're not disrespecting or hurting anyone. They're not affecting the quality of their product. This is purely a style thing. Calling unconventional behavior "unprofessional" is a cop-out!

P.S. - I still upvoted you because I see where you're coming from, and "s//" is always funny to me for some reason.

mcantor··on Ask HN: How much did you earn as an employee from an exit?
Pardon my naivety, but you mention here that you cashed out only 1/3rd because cashing out 100% had "tax ramifications", even though 6 years later the shares you kept were worthless. Could you elaborate on the tax ramifications that made cashing out 100% a net loss compared to keeping shares that would only depreciate over time? If you cashed out for $50k with a third of your options, why wouldn't cashing out all of them be in the $150k range?
← PreviousPage 6 of 32Next →