On HN I try to have a measured tone. On my personal blog,I just write(rant!) without regard to "voice" and so on. It doesn't help that, while I enjoy meeting people and parties and such, I am equally content to stay in the shadows and don't care about "personal brand" or building a group to bring change and so on.
I just got frustrated at receiving the nth "please mentor me and send me some code so I can do a cool AI project for my bachelor's degree requirements. I need this next week." email.
http://news.ycombinator.com/item?id=670453 is the original thread , with many nice comments.
On the note of mentoring, I resolved in my mind that if a request came from a HN member I would say yes no matter what. When joining HN, I was extremely impressed with the don't be a jerk mantra that was an overarching theme. Many of the other sites that I had been contributing to had devolved into a typical technical arrogance contents. Upon see a community of technical people that treated each other with respect (a rarity), I decided that not only would I like to be associated with the group, but that I would resolve to help any member in any way possible. Mentoring is part of that. I have to say, I have helped 3 people who where looking for mentorship on this site and all of them have been pleasant experiences. Some of them I did not see the value in what they where working on (that means nothing we all don't get why something went big at some point) but I did see the passion and even though I did not see the usefulness of there vision when applied to my life, it does not mean that I could not offer advice in other areas that I had run into similar pain point in my start-ups. For the individuals that I helped mentor on a pure "learning programming" basis from this site they where all pleasant, greatfull and considerate of my time. I am glad that I did each and every one of them, as I believe not only did it help them progress but it help me as well. Transitioning from a gatherer of wisdom to a giver takes practice and each of them gave me the opportunity to practice. For that I am greatfull.
Got tired of it and am back to doing something on my own, which involves actually writing code. There are days that I have doubts about whether I am really any good at this. But I need to work harder and persist, which I never did before.
I see this a lot with students in introductory physics. If they come to me and say "I don't get it" or "I can't get started" I actually invest less time than if I get a good student who has hit a wall and can't get through. The student who won't/can't start will get sent to the tutoring center and I will spend the time with the kid who works hard. There's only so much of me to go around and I want to make it count.
Sometimes it's just easier to say, "Oh, you want to support local variables in your compiler? Easy, just implement your symbol table this way and support for local variables will just fall out as a side effect."
I learned this approach from my wife, incidentally, who is a teacher.
Things which induce me to drop what I am doing and immediately get to work on someone's behalf:
1) Demonstrating that you know me well, either through familiarity with what I've done, what I've written, myself personally, or someone close to me.
2) Demonstrating that you have put a lot of work into something and can benefit from specific application of my expertise.
3) A precise request which I can satisfy. ("Can you teach me about running a business?" is not a precise request -- well, OK, it is, but only if you accept "I could." as a complete answer. "I have built an application which does X. I want to increase its organic search rankings for X, and having done my homework about SEO, I understand this means I need to get links to my website. Can you give me an idea for an X-related piece of linkbait?" is a precise question.)
Things which people frequently try that are not as successful as they probably hope:
1) "Help me, Obi Wan, you're my only hope." I enjoy backing underdogs, not losers. There is a difference. Pluck and vim and tales of what you've managed to do make you sound like an underdog. Apologies and lack of confidence and telling me who you've already asked who ignored you totally make you sound like a loser. (By the way, it very rarely improves any negotiation to tell the other party that they were the first person you thought of after the first four people you thought of said no.)
2) "This will only take..." Asking me to drop what I'm doing is much more disruptive than many people would assume it is. Also, folks have a tendency to underestimate how much work is required or how thoroughly I tend to answer requests which I answer.
3) Napkin stage ideas. Most of them will be culled before shipping. Why should I dedicate my limited time on a project which will probably be shelved, when I could instead work on something which will, with certainty, help people?
On a more serious note, thanks for writing this, Patrick. I had an idea a few days ago--more precisely a new permutation on an idea I've been banging on for over a year now--and my goal is to launch on Jan 1. I would really like to have your input on some of the details. I had decided to not email you--you are busy and right now I can't afford to pay for your time--but I'll take 60% odds. So you'll be hearing from me as soon as I launch, hopefully 21 days from today.
Thanks for this. I've spent too much time helping people work out the scenarios and options for projects which will never happen. I only recently started realizing this for what it is, and you just summed up really well exactly the problem with it.
A couple other observations - a friend of mine makes nature documentaries and commercials, and he's constantly getting requests from people who want to work for free for him, get mentored, get advice, "look at my stuff", etc, etc. He says whenever anyone asks to work for him, with him, etc., he gives them a simple, straightforward, ~5 hour assignment to do. That cuts 90%+ of people right there.
> I enjoy backing underdogs, not losers.
I've found "helpful-but-not-compassionate" goes a long ways, since I almost never get requests like this any more. I write all over the place "drop me a line, what can I do for you, etc, etc." Lots of people take me up on it (I got 23 emails from people today, most were interesting... this is a bit higher than normal).
But I find losers like compassion. Instead of wanting to win, they want to feel good about being losers. Thus, any help you give them is useless to them, until they gain a real desire to win, and ideally evidence some of that desire. If you write touchy-feely stuff, you get people coming to you ostensibly for advice, but secretly just wanting a shoulder to cry on, which is worse than useless if you want to build real world stuff.
Ultra-practical, humble, disciplined, hard working, willing and eager to serve, charitable, empathetic, but absolutely no compassion seems to attract just about everyone you could really help, while turning off most people who want a shoulder to cry on. Of course, no compassion completely outrages people who have compassion as a heavy part of their identity.
That's the price you pay, I guess. I reckon all the practical people will look at these comments and nod, and the people whose hearts bleed will be outraged. That's not actually a good thing in my book, but so it goes. All life includes tradeoffs.
FWIW: I'm a bleeding heart type who has spent a lot of time pondering how to be genuinely helpful without stepping in a lot of the pitfalls I've either witnessed or experienced first-hand. I've drawn similar conclusions. I would go so far as to say that if you really want to help someone, it is actually cruel to go the "I feel your pain" route. A lot of people will stop trying to really fix the problem if they can get some emotional relief. Also, my observation has been that tea and sympathy is generally offered for really hard problems that people believe cannot be fixed. I have come to view tea and sympathy as a very ugly message -- a veiled way of saying "you poor thing, you're doomed".
When I was starting to learn Linux after getting frustrated
and formatting Windows ME off my HDD, I quickly learned how
to ask questions the smart way: go to a Linux-promoter's
forum and say, "Windows does <insert task> better than Linux"
or "Linux is bad because it can't do <insert task>". Every
time I did this, I was flooded with solutions... unless I
was right. Either way, I had my answer. Meanwhile, if I
asked questions the smart way as recommended by Raymond,
I'd be lucky if I received any answers -- I'd have already
done a bunch of research, and this would be clear, so
nobody else would feel the need to do experimenting or
research on their own to figure it out.I disagree that ML is something that can be picked up through just an OCW site and such. "Real" ML involves way too much mathematics and does not overlap much with programming. ..unless your idea of Software Engineering is writing stuff in MATLAB.
There are so many books and the path to knowledge can be daunting.
In the spirit of the blog-post's advice I was trying to gauge whether to take the author's advice seriously, but after some short searching I could not come up with publications in ML. I definitely found several moderately complex projects with an ML "flavor." And that's already way better than most people who try to get into this by themselves and shows Ravi picked up on a bunch of stuff.
Ravi mentioned 5 years ago that reading the literature felt like banging your head against the wall and I think most of people who attempt the self-taught route are going to feel the same.
You're looking at a year or two of full-time college-like preparation during which you will learn lots of math but little to no ML. Only then can you begin to really learn ML. The books by themselves are simply not enough to learn this stuff. One needs to literally go through as many lectures as possible in the relevant coursework online, and do the labs. Various CS departments that actually have some traction in ML spend a large chunk of time designing the course and labs are incredibly illuminating.
If you just want to learn how to apply an ML algorithm taught in an undergraduate-level course, disregard my post.
Truly understanding anything written by Bishop or even going through ESL completely is something that is going to take an enormous amount of time (on your own easily a year, if you have the background) and mathematical skills that are typically way outside of what a Software Engineer deals with in any of the projects. I mean Bishop introduces hyperpriors in Chapter 1 or 2 for chrissake.
I can see how getting into patricle-filtering based probabilistic robotics can be easier, but try some EKF-based methods and feel the pain, that is, feel the amount of math that you don't know yet.
Extra hint for HN readers: take a look at the CVs of hot-shots in ML. Lots of Math and Physics undergrads, and a PhD in Theoretical Physics or Mathematics is not a rare occurrence by any means.
I'd also take a risk and say that traditional mentor/student relationships in India are quite different from the less formal ones in the West. My experience with colleagues from India is that they are much more likely to observe the authority ladder. Just look up Anil K Bera's interview with C.R.Rao (of Rao-Blackwell theorem) especially w/regards to how things were going at ISI.
"You're looking at a year or two of full-time college-like preparation during which you will learn lots of math but little to no ML. Only then can you begin to really learn ML."
(In my experience) This is completely true. I would go so far as to say ML is applied math. It took me more time than a year, but it could be done in a shorter period of time by someone doing it full time/ someone brighter than me.
"The books by themselves are simply not enough to learn this stuff. One needs to literally go through as many lectures as possible in the relevant coursework online, and do the labs. "
This is also true. Thankfully most of this(courework/lecture/papers) is online and (most) professors are glad to answer (well structured, focussed) questions by email. If you are saying this is not as good as doing a PhD in say, CMU, full time I will be the first to agree. If you are saying it can't be done at all outside a formal PhD program I will have to respectfully disagree.
"Truly understanding anything written by Bishop or even going through ESL completely is something that is going to take an enormous amount of time (on your own easily a year, if you have the background) and mathematical skills that are typically way outside of what a Software Engineer deals with in any of the projects."
This is true too :-). Most software engineers shouldn't try. The time commitment required is enormous and the whole idea of my rant was to try to discourage people from taking shortcuts like "being mentored".
That said, perhaps where we disagree is the idea that something taking a large amount of time is a bad thing or that such understanding can only come with formal education. The difference in our opinions may boil down to or opinions about "you can't do this on your own".
"I definitely found several moderately complex projects with an ML "flavor." And that's already way better than most people who try to get into this by themselves and shows Ravi picked up on a bunch of stuff."
Thanks, but (a) I don't write much about the work I do on my blog or elsewhere except in the most general terms (for many reasons I won't go into here). Judging the quality of my (paid for) work by referring to my very infrequent blog articles/website is a little naive. (b) More importantly I made no claims to be a professional ML researcher, who should be approached by people who are or want to be fulltime researchers.
I am "just a programmer" working on ML projects. My output (that I trade for money so I can put bread on the table) is code , not research. I don't try to hide that or give a false impression of being a professional researcher.
At best I am an amateur dabbler in the research bits of ML, just like some people dabble in astronomy without being professional astronomers. It is just something I like to fiddle with, so please don't take me seriously.
"In the spirit of the blog-post's advice I was trying to gauge whether to take the author's advice seriously, but after some short searching I could not come up with publications in ML."
You could not come up with publications because I don't have any!. And you should not take my "advice" ( I was just ranting, not really giving advice!) at all :-).
That post was written for people who write to me asking for mentorship and so on, who presumable have made the (wrong!) decision to ask me for advice. It was not written for serious researchers trying to gauge whether they should take me seriously . You shouldn't, for the simple reason I am not a researcher, just a programmer doing ML work!
My initial goal was to do interesting projects/get away from the enterprise outsourcing world. That is fairly hard to do in India but that is now done and sustainable.
What I do now is convert research results (from professional researchers) into well engineered systems. To do this I need to able to consume research, not generate it. So yes, you are completely (utterly, unequivocally) right when you say I don't have any publications/research credentials and should not be treated as an ML researcher.
At some point, I think I will try to publish. It is a decent challenge for someone like me with no formal education in math or CS. I like challenges.(Tangentially a lot of published material is rehashed minor incremental stuff, with irreproducible results and no proofs. The really good papers are somewhat rarer.)
All I'll say for wrt publishing now is "Watch this space". Publication is on my agenda. Not a very high priority but it is a goal. People tell me it can't (in practice) be done except in a formal PhD(ish) program. I might even do a formal PhD one of these days - I like the idea of working with smart people - but meanwhile I am not going to wait around to be "given permission" to learn/do things.If at some point I have some published papers so I an be taken "seriously" by others, that is great. If I don't, that is great too. Life is too short to go around satisfying other people's expectations.
I've never listened to people who say I can't do this or that because I was too old/too young/too uneducated/born in the wrong place/living in the wrong place/don't have the right educational background/whatever.
If I can't bypass an entrenched system or pick the locks of doors slammed in my face, then what kind of hacker am I? We'll see someday if people can get published outside the formal "system". I am not daunted by the prospect. And if I do get published, I will post here on HN.
"I'd also take a risk and say that traditional mentor/student relationships in India are quite different from the less formal ones in the West. My experience with colleagues from India is that they are much more likely to observe the authority ladder."
This is very true so you are not taking a risk at all by saying so. I've been reprimanded before for "thinking like a Westerner","not respecting hierarchy", "not having asense of patriotism or nationalism" (!), and "treating superiors as peers" (all actual quotes).
There are some really good profs here who treat their students like colleagues and one of them recently reached out to me with an offer of doing joint research in an interesting area. So maybe I'll end up being professional researcher after all. I am trying to work out the logistics now. Wish me luck.
(PS: I am completely embarrassed that a rant I dashed off in twenty minutes or so is getting so much attention on HN, Blush! Run away and hide!)
- Siddhartha by Hermann Hesse
Then I just went and wrote the code, put up a repo on Launchpad. I was soon getting many helpful comments.
I knew a student once who was messing around with Java, and I pointed him at Lisp and some code for a metacircular evaluator. He figured it out in no time flat. It's fun to blow people's minds, and to watch them learn.
But as the article says, you can't help people who aren't willing to roll up their sleeves and go to work.
I think people are often quite hung up on being courteous, and are keen to gain permission to have that initial conversation.
While I think that's understandable, this is a nice example of why it's useful to a) be persistent, and b) get to the point of the conversation efficiently and effectively.
Funny -- this is almost exactly the advice I wrote in "How to get your professors' attention -- and coaching and mentoring": http://jseliger.com/2010/10/02/how-to-get-your-professors%E2... . The big thing you need to do if you're trying to get someone's attention is show that you're worth the investment.
Most people either don't do this or don't know how to.