Matt Legend Gemmell Modesty is Lying

Mac OS X Cocoa and iPhone Development Services available at Instinctive Code.
Favorites icon
Favorites for iPhone
Speed-dial with style.
Mac OS X Cocoa and iPhone Developer for hire
Sheercore Comics - Geeks with Swords!

Other Pages

Categories

Posted
8 December 2008 @ 5pm

Categories
Development

Tags
, , , , ,

What have you tried?

If you’re a developer and you’re about to ask another developer a technical question (on a forum, via email, on a chat channel, or in person), you’d better be ready to answer the question “What have you tried?”

This of course isn’t specific to software developers, but that’s my field and it’s thus the area in which I’m most familiar with the issue which motivated me to write this. I’m (sadly) quite sure that it applies to your own industry too, whatever that might be.

The thing is, there’s a disease in the software development world; a sort of sickness. It’s an unusual sickness in that it’s often not something you acquire once you actually join the industry (like greying hair, caffeine addiction and an ulcer), but rather it’s something that new recruits already have when they arrive.

Now, a quick clarification before I continue: when I say “new recruits”, I don’t just mean graduates and other young people. There are those who will say that this sickness is a product of modern western education systems, and that things were perhaps better back in the day. Maybe that’s true and maybe it’s not, but I’m not qualified to say and that isn’t the position I’m putting forward here anyway. The illness I’m talking about seems to apply to both young and old alike.

The illness, of course, is a flawed approach to solving problems. Here’s an example, which is an actual quote from a web forum:


1) Can we establish http connection in application.

if so, i need that code.

I checked NSURLconnection. I cannot intergrate that code.

2) I want to display a image from the website

Can anybody please provide me the code?

If anybody having sample program please give me.

So where’s the problem? It’s not in the quality of English (it’s reasonably evident that English may not be this person’s first language, and that doesn’t matter as long as the intent is clear – which it is). It’s not in punctuation and grammar, because those things again aren’t particularly important in this context as long as they don’t become barriers to understanding what’s being asked.

The problem is that this person’s problem-solving technique is to ask for the solution. Not to seek advice on how to approach the task, or ask for the names of likely classes to look into, or a link to an example – but to just ask for the code, fully formed and ready to go. This is not problem solving, and software engineering is entirely about problem solving.

The interesting thing to note here is that the above example isn’t actually as bad as it could be; there’s one tiny glimmer of light to be found in the assertion that this person “checked NSURLConnection”. That inspires some small amount of confidence, since NSURLConnection is indeed a suitable class to learn about when wanting to make HTTP connections in Cocoa. However, it seems that “checking” it was pretty much the sum of our friend’s effort – they “cannot integrate that code”, and have thus given up.

This is an issue we all see constantly (and I don’t mean having trouble making HTTP connections). There’s an entire class of so-called developers whose first and final tactic when given a problem to solve is to simply ask for the completed solution elsewhere, commonly on web forums or other suitable help channels. Their goal is the same as ours – to have code which solves the problem, which can then be presumably delivered to the client. This goal is reasonable and quite normal.

What isn’t normal is the unwillingness (I hesitate to say inability – because after all, very few things are truly, fundamentally “hard” if you apply sufficient thought and effort) to achieve that goal by a process of self-education, honest attempts and the classic iterative process of refinement and improvement until something acceptable is created. This process in turn equips you better to handle the next challenge, and sooner or later you find that:

  • there are entire sets of familiar problems to which you already know the answer and can approach with confidence; and:
  • you’re quite capable of approaching unfamiliar problems by generalising your current knowledge and conducting some simple focused research.

This isn’t some trick of software engineering; this is the entire process of learning how to do anything at all.

It’s not a secret handed out at institutions of higher education, it’s just how things work: you begin with a lack of understanding about a topic, and a need to solve a problem in that topic area. The honest, sustainable means of doing so is to improve your understanding. This is achieved by:

  1. Formulating a question which, when correctly answered, will improve your understanding in some way; then:
  2. Attempting to answer it.

Note the second step above. To argue that grabbing the completed solution in some way satisfies this process is laziness and intellectual dishonesty, and probably renders you unworthy of being helped. For after all, why should someone else do your work for you?

I’ve had a lot of personal experience with people displaying this troubling unwillingness to learn or research or try. I’ve released a lot of code over the years, and I’m very visible in the open source community for the platforms I work with. Since open source contributors seem to be seen as freelance teachers, that means I get a lot of email asking for help with one thing or another. And I provide that help whenever I can.

I’ve helped literally hundreds of people looking to get started with Cocoa, since Mac OS X was first released. I don’t send boilerplate replies, either – I replied to each email individually. Everything from specific code issues (including but by no means limited to queries relating to my own code), book recommendations, right up to advice on how to get started with programming as a whole; I’ve done my duty in that regard, and I really do believe it is a duty. People who can do something to whatever extent ought to help others who wish to be able to do the same; surely that’s a fundamental truth and indeed a desire for all of us.

But this is real life, and no principle comes without the consideration of certain realities. Help may be free for the most part, but that doesn’t mean there isn’t a cost-benefit ratio to be considered. My benefit may come from a warm fuzzy feeling rather than cold hard cash, but if you’re wasting my time then you’re not going to seem as worthy as someone who genuinely wants to learn.

Here’s a secret: willingness and desire to learn are the true qualifications.

Not ability; we all have differing innate and developed levels of ability to acquire certain skills. Some (probably most) of these can be improved with practice, and some can’t – and it’s wrong to pigeonhole or generalise a person’s ability in an entire discipline just because of their seeming difficulty in one particular aspect of that discipline. But if you want someone to spend time and effort (especially if it’s time they’re giving freely), then you’d better earn it.

Earning it isn’t about throwing a few units of currency at your teacher, and it’s not even about successfully completing your task – it’s about bloody trying. And trying is what so many of the type of developers I’m talking about seem bizarrely unwilling to do. So, of course, many of us ignore them. Problem solved, right? Wrong.

There’s a huge knock-on negative effect of the proliferation of this unwillingness to make the effort to solve problems yourself. People who are in a position to help stop frequenting the chatrooms, forums and mailing lists. “Bad signal to noise ratio”, they say, with some justification. The losers are the genuine (by which I mean well-meaning, willing-to-learn people who just happen to be new to a particular area) developers who naturally choose those places to ask their legitimate questions. These people have a reduced chance to get meaningful guidance because of the effort involved in working out who’s a lazy time-waster and who isn’t.

This is an awful thing, and it’s never been more relevant – since logically, platforms which are young and/or experiencing a surge in popularity are exposed to this phenomenon the most. There are fewer people who are genuinely experienced, the average level of experience is less, the amount of help being requested is higher, and there’s a far higher proportion of lazy, grab-the-money-and-run types mixed up in it all. This is the iPhone, Android and so on.

So, if you’re going to ask a technical question, I guess the first thing I have to say to you is: Great! You’re asking a question, and that means we have a better than even chance that you want to learn something. That’s usually awesome, and I stand ready to salute you.

But wait. Have you considered – really considered – what it is you’re about to ask? Is this the right time to ask, or can you take one more step first, which might either make your question clearer (good) or even unnecessary (probably better)?

Try taking a few minutes to run through these points:

  • Have you broken the question or problem down sufficiently to really ask something concrete? In software engineering, you can pretty much divide problems into the two categories of (1) things that can be broken down further, and (2) things you already know how to do or can look up trivially.
  • Is your problem the sort of standard question for which there’s definitely already some sample code and documentation available? There isn’t a GUI toolkit in the world that doesn’t have a section in the tutorial on how to put a window on screen. There’s no programming language that doesn’t tell you how to read the contents of a file. Skim the documentation, or do a quick search. If your problem is that simple, the answer is probably just moments away. You can find it!
  • Try searching the web. This is glib advice, I know, but stay with me. If you’re having trouble getting a decent result, you need to narrow things down. Don’t search for “if statement” if you’re just interested in an if-statement in ruby; instead, try “ruby if statement”. What might be even better is finding a site that’s specific to the language or technology you’re working with, and searching there. For Cocoa, this is the CocoaBuilder list archives. Someone else has probably asked your question – or maybe a hundred someones.
  • Whoever made your language or framework or API or whatever also created a bunch of sample code; really, they did. It’s designed to help you get on your feet with various common tasks, and there might be some code that does at least some of what you want to do. It’ll take you only a few minutes to check, and at the very least you can grab a load of code which will come in handy at some point in the future.
  • Use your IDE’s online reference or other built-in documentation. Xcode has a documentation browser. Eclipse etc will show you the Java class documentation. PHP.net has you covered for your PHP scripts. Find the canonical reference for what you’re working with, and search it. You’re going to find something that’s helpful almost every time.

OK, you’ve gone through those steps and tried at least a few of them. I can now finally say congratulations. Either you’ve solved your own problem (great), or you are now officially ready to be helped.

When I ask you “what have you tried?”, you can say with confidence that you’ve tried all that stuff above, and you can tell me anything promising you found, or you can say that you’ve at least come up empty honestly. I’m going to help you at this point, because I can see that you want to learn and that you’re willing to work for it, and so I want to teach you.

That’s the key realisation. When you’re asked “what have you tried?”, it doesn’t mean “show me the code you’ve written, or piss off”. What you have to do is at least try to help yourself – and the trying is the important thing.

Not just for avoiding pissing off someone who would otherwise be willing to give freely of their valuable time to help you, but actually for your own development. Do it enough times and the number of questions you’ll actually have to ask will start to go down. You’ll also be in the position to help others (including me), and that way everybody wins.

So next time you’re considering asking a question, you’d better be ready with a convincing answer when you’re asked “What have you tried?”

If your answer amounts to “not a lot”, take my word for it: the next question you get back will be “then why should I help you?”

 

Update: I’ve pointed the domain whathaveyoutried.com to this post.


70 Comments

Ahruman
8 December 2008 @ 5pm

See also: Help Vampires: A Spotter’s Guide, and Mike Ash’s Getting Answers, a guide to not being one.


andylockran
8 December 2008 @ 5pm

Hey,

This is an excellent article. Sometimes for new users, they expect things to work right away – and want us other developers to set it up for them.

I think this is a bigger problem in OSS software, as too many people are ready to help end-users who have no idea, which is a distinct difference to between helping other software engineers/developers.

It’s nice to see that someone is trying to help themselves, and in their own little way identifying new issues/bugs. However, if the documentation is poor, sometimes the question may have to be asked to direct them to a place where they can help themselves. Someone asking a question, albeit with a lack of previous effort – but where the answer is not a solution, but information, should be treated with respect.


Iain Simpson
8 December 2008 @ 5pm

Aye.

I just hope that I never get stuck working with anyone like that.

I’m not sure if it’s something that you can cure so easily though. How do you make them read your advice?

tl;dr!! PLEASE SUMMARISE KTHX!


Ben
8 December 2008 @ 6pm

>> It’s not a secret handed out at institutions of higher education

That’s not entirely right. While it’s not something *only* handed out by higher education, it’s something that *is* often taught there. I’d say that one of the better things university taught me was how to think; how to examine and break things down; how to teach yourself something.

A bit like the subject you are discussing in this post really.


Dave Hendrix
8 December 2008 @ 6pm

Extremely well said. Your post should be required reading for anyone joining development (and probably many other) mailing lists/groups/discussions.


Wolf
8 December 2008 @ 7pm

Amen.

At our workplace we have a few rules and one of them is to try to find the solution to a problem for 20 minutes before asking.

When being taught, actually remembering and having improved upon whatever it was motivates the teacher greatly.


Vincent Noel
8 December 2008 @ 8pm

This is a theme that has already been discussed a lot on the linux side: http://www.catb.org/~esr/faqs/smart-questions.html


Glenn Fleishman
8 December 2008 @ 9pm

Just to provide a gentle counter case: I have spent many many hours writing code and then discovering there’s a library that does everything, is licensed for my use, and much more efficient and far reaching.

So there’s a benefit in saying, “I’m trying to solve problem X; before I go down the rabbit hole, has someone else solved this problem before and written a library or module I can use? If so, thanks. Otherwise, I’ll figure out how to do this.”


Devon
8 December 2008 @ 9pm

One of the reasons http://www.justfuckinggoogleit.com/ was invented. Some people are even too lazy to search anything for the simplest of problems. Any easy search often turns up the answer.


Doug Adams
8 December 2008 @ 10pm

An aspect of this I frequently see is when a developer gets stuck trying to make something work they immediately assume it is because of a “bug” and not their own inability to solve the problem. I find this very annoying, and it says a lot about how the developer approaches problem solving.


Zach Leatherman
8 December 2008 @ 10pm

As someone who spends a lot of time supporting the code that I sometimes get to actually develop, I really appreciated this article.

I’ve answered a lot of questions, and certainly, the more questions you answer, the easier it becomes to tell if someone’s put in their due diligence, ESPECIALLY if the same person asks you the same question twice (insulting and frustrating).

Really, it boils down to passion. Is someone trying to earn a paycheck, or do they enjoy what they’re doing? That is what separates the self teachers from the leeches.

Great read.


alastair
8 December 2008 @ 11pm

The irony of this excellent post from Matt is that the people who should really read and understand it are the least likely to find it and do so.

On a personal note, the S:N ratio problem has become increasingly self-evident, especially on cocoa-dev, where for some time I have found it impossible to keep up with the list in the time I have available to do so :-(


Matthieu Cormier
9 December 2008 @ 12am

Does anyone else agree that this is a more common occurrence since the iPhone SDK was released? The cocoadev forums have disentegrated into help vampires asking questions since March.


Brad Larson
9 December 2008 @ 4am

I agree with the others, this is an excellent article and should be required reading for new programmers (especially those on the iPhone).

However, this is not just limited to programming. In my engineering school, and even during my graduate research, there were far too many people looking for someone to spoonfeed them an answer. Thankfully, many of my professors would make you go learn certain lessons by yourself, and most of those people could not handle it and didn’t make it past their sophomore year. Others did, and made me pull my hair out (”No, there is no paper that fully lays out for you what we’re trying to discover. This hasn’t been discovered yet.”).

We spend far too much time in our schools on rote memorization of things you’ll forget anyway and not enough on how to think.


Biappi
9 December 2008 @ 4am

Problem is: people that usually ask those questions are not developers!

i tend to think they’re really some kind of kids with too much time on their hands… “iphone?! ooh kewl, let’s do something”.

for a person new to the idea of software engineering the most effective way is to do a “collage” patchwork of all code samples they found on the way…

however i think that same question may be asked by a “real” software developer and it’s somewhat legitimate.

it’s really hard to find good documentation those days, (apple is a real niche out there), i tend to search in the net sources that complements the documentation i’m reading, often i even download the source code for the application / framework i’m studying, if it’s available, and read it, often finding that i understand it better than the docs, or in some cases i even disassembled some binaries to have examples on how to do something!

as an answer, i usually ignore them or just link to the (good) documentation i found.


Richard Careaga
9 December 2008 @ 7am

It was not always thus. I did a lot of support for Netscape servers in the mid-90s and learned more from the questions than anyone could have learned from my answers. I gave that up to go back to my first love (mortgage backed securities law–alas, she left me recently) where a similar community of learners existed who were more interested in the questions. Answers come and go.


Danny Greg
9 December 2008 @ 9am

Great post Matt.

Although, just to echo Glenn a bit. One of the scenarios I frequently encounter when asking a “Cocoa Senior” for advice on a particular method/class is that they will immediately ask “what is it you are trying to achieve?”.

It is one thing making sure you have tried to solve your problem, it is another to ensure that your question is given in enough context so that the answers you receive help you the best they can. If I ask a question about a specific class but I shouldn’t be using it, I would quite like to know!


mmalc
9 December 2008 @ 9am

From my perspective, at least, the reduction in SNR on cocoa-dev began well before the arrival of the iPhone SDK.

Much more than a year ago, I started a “policy” whereby when I could find an answer to a question in the documentation within about a minute, I would to reply to a question simply with an URL which pointed to the relevant document. Then I found that the majority of my posts consisted simply of links to the documentation…

What I have found most astounding is the sense of entitlement that so many posters seem to have. They asked a question (for a sufficiently generous definition of “asked a question”), so they appear to believe that they deserve an answer. Moreover, there is a widespread attitude that someone who suggests that they should put in at least a modicum of effort into solving their own problem (for example, by entering the subject line of their post as a search term in Google…) is being rude. The failure to appreciate that it is in fact they that are the problem is perhaps not surprising; what can be astonishing is the level of belligerence in response to such a suggestion.

Generally I don’t think it’s helpful to work these issues out on-list — it simply further diminishes the SNR — but when you come across help vampires and others of their ilk, I’d certainly encourage people to send a *polite* (although it doesn’t have to be warm and fuzzy) *off-list* message pointing to resources (such as this) that describe more appropriate approaches to problem-solving…


christian
9 December 2008 @ 10am

You’re so right in your post!
Current generation of programmers tend to exspect to put together programs by changing sample code and put snippets together.
i for myself am in the process of learning cocoa (does that process ever end? No!?) and find it usefull to read design patterns from others. BUT i write my own code and draw my on conclusions.
i.e. in the iphone sdk environment one programmer used NSData objects (sample in a forum) to read his state – it can be done directly with NSKeyedunarchiver as well, so why use an intermediate NSData object? That’s the kind of stuff many out there miss.


Mo
9 December 2008 @ 10am

There’s nothing which frustrates me than getting a “help, it doesn’t work!” request from a developer who has made no attempt whatsoever to debug the issue themselves. Our web platform helpfully dumps a backtrace whenever a catchable error occurs (99% of everything that goes wrong), though it might as well not bother for all the good it does. My first question is inevitably “what does the backtrace say?”, followed by “well, go to that line and fix it”, and there it ends. Clients are much the same; a typical exchange might go along the lines of:

“the form won’t submit”
“well, do you have any idea why not?”
“it says I need to fill in the highlighted field”
“can you see the highlighted field and are you able to fill it in?”
“…yes”
“does it work now?”
“…yes”

I don’t mind fixing stuff or helping people if they’ve exhausted all the usual avenues and actually done some investigation themselves, but there’s a limit to how many times a developer should have to hand-hold people through reading what’s on the screen.

Er, rant over, sorry.


Ian Turner
9 December 2008 @ 1pm

I’m newish to programming, but I’ve spent many years training graduates in civil engineering and this really is not an uncommon problem. The work I do has very few standard solutions, you usually have to come up with your own solution to any given problem. There are no books with worked examples for so many of the basic problems.
More and more graduates expect to have a worked solution so all they do is pop some new numbers in and come out with a new answer. Come on, I expect much more than that from a graduate.
I don’t think the problem in Cocoa or even programming is just because of the newer platforms, like the iPhone or Android, although they definitely don’t help. For me the problem is much deeper and multi faceted and it is getting worse. I just don’t think that the way we educate and use the skills of the people in the world is working, the real world is changing faster than the way we prepare people for it. We have to change the way that people train others, the expectations of students and the type of relationship that students and teachers have.
Thanks Matt for posting this. A great example to everyone of how, sometimes, you have to teach students something that they didn’t know they needed to learn.


Alex Muller
9 December 2008 @ 8pm

So true – and this applies to every single part of life. It’s always great to see people who want to learn, and to be able to help is such a great feeling.


sysmgr
10 December 2008 @ 7am

I fully agree on the article, I’m sure it’s more general. But in my view, the problem is not with the developers directly, but with cost-based management, and education.
In todays system development, the primary key is “deliver ASAP” and moving around trying solutions would mean you’re losing time – in the minds of “management”. It also leads to the believe that “programming” is all about getting the right components together and glue them toegether. Preferably using an environment that does all the work fro them so they don’t need to think beforerhand on how to do things the right way. These developers are lost in the dark if things go wrong, and they don’t have a clue what to do and where to look.
Education sghould have told them, but ‘old style development’ is out of fashion – doesn’t look slick and cool anymore, and ‘nobody uses it today’.


John C. Randolph
11 December 2008 @ 1am

I’ve seen something worse than the example you give above, and it’s when someone insists on following habits that simply don’t make any sense in the environment in which they’re working.

One question I’ve seen pop up over and over in Cocoa development forums is “how do I write Cocoa apps without a nib?” That question is a big red flag that says “don’t answer this guy, he’ll just lead you down a rat hole.”

-jcr


John C. Randolph
11 December 2008 @ 1am

ensure that your question is given in enough context so that the answers you receive help you the best they can.

Bingo!

I can’t tell you how many times I got questions about details of the Cocoa frameworks that really didn’t make any sense. Sometimes, I’d have to go through two or three rounds of e-mail tag before the person seeking my help would get around to telling me what he needed to do, even though my first reply was to ask him for the big picture.

-jcr


Moose
11 December 2008 @ 4am

I agree with @sysmgr too. The management always wants things asap. The programmers are squeezed to the edge money for value to get something done asap. No longer are there time to even explore, develop, find out. Who to blame? The system? The programmer? Or the management in the end?

But I totally agree with this articles. From time to time I have people coming to ask me questions. Designers, servicing, junior programmers. All they want is answers spoon fed to them. So that they can finish their work and go home to play game and have some life. Hence the question, why should I help them?

I guess there’s a vicious cycle somewhere. But if everybody is to think again, and carry their own burden to do the share of research, and if the bloody management will think about how actually more effective it is to have more time for the people, will they only able to start that ripple effect of everybody has to think for themselves. otherwise, the trend is going to continue – it didn’t work, can you give me the source code plz ?


Rick Cogley
11 December 2008 @ 8am

Well said. I ask project staff members to indeed come to me, but not come to me until they’ve tried climbing Mt. Everest themselves (well, at least Mt. Fuji in my case) and have at least some idea of what they think and propose. If you give people solutions all the time, they tend to start assuming the solutions were easy to come by, which is of course never the case. The problems I solve are organizational, business, cultural and technical in nature, and your advice is appropriate for any manager as well as anyone trying to be more than just a doorstopper in a team, in my opinion.

Sincerely,
Rick Cogley
Tokyo


mikeash
11 December 2008 @ 6pm

Well said. The only problem is that the people who most need to read this are the people who never will, or if they do will never realize that it’s directed toward them.

This is the real problem. There’s nothing that I know of that you can say to these people to suddenly make them realize that they’re doing it wrong and need to approach problem solving differently. ESR’s treatise didn’t do it. Mine didn’t do it. Getting in their face and telling them to shape up certainly doesn’t do it. Even being polite to them and suggesting that they ought to do things differently results in either being ignored, insulted, or simply driving the guy to some other forum.

How do you solve it, then? I really have no idea…. Maybe the only way is to switch to another platform which is so unpopular and unprofitable that only the truly dedicated exist there.


Waldo
12 December 2008 @ 1am

Great article. While an experienced and well-rounded SysAd (though with little formal training), I am new to programming. I find that I tend towards two extremes. On one side, I attempt to learn every bit of background and “read the book” before I try to get things done. On the other, I sometimes catch myself about to look for a resident expert and ask for a handout.

It’s usually when I see how much of “the book” I have left to read (or at least how much intervening material there is between where I am and what I need to get to), when I start looking around for help. At times like these, I try to let go my OCD for grokking everything in sequence, step back, and try to buckle down to the exact problem.

Unfortunately, I see the beggar mentality often at my work; Too often I get an email not asking for help, but rather demanding a solution. Smooth as silk, a click of the send button makes their problem mine.

Great article,
Waldo


Self Education « GribbleLab
12 December 2008 @ 3pm

[...] What have you tried? [...]


Paul
12 December 2008 @ 3pm

Great essay Matt. I think the general principles apply not just to computer science & software engineering, but in particular to graduate school in the sciences as well. To succeed one has to learn not just the answers to questions, but how to GET the answers to questions independently.

http://gribblelab.org/2008/12/12/self-education/


Matt
16 December 2008 @ 4pm

A corollary to this is “Did you ask Google first?” which I think can be applied anywhere in the trying phase, but certainly before asking.


Jean-Daniel
18 December 2008 @ 2pm

My two cents.
I fully agree on this great article too. Can’t say it better.


Johnny Vector
4 January 2009 @ 7pm

Feh. If it hasn’t already been written by Matt Gemmell or Kurt Revis, it’s not worth writing. Unless it’s a UI issue, in which case I can just steal it from Uli Kusterer!

On a serious note, I think I’ve asked exactly zero questions on coreaudio-api, because every time I was about to, I found that 20 minutes of searching the archives (or the web) found me someone who had a similar enough problem that I got the key answer to let me figure it out myself. And thus, learned something.

When I’m on the giving end of advice (not so much with Cocoa, yet), I do find that pointing people to learning resources makes them happy a fair fraction of the time. That’s what keeps me giving back even against the onslaught of vampires.


Matt Patenaude
13 January 2009 @ 6am

Great post, and a good observation. In fact, I’d say this is one of the things that separates “developers” and “code monkeys” — to some people, coding is just a job that they want to get done as quickly as possible. Other people actually enjoy it, and those are the ones that want to learn more.

The people who enjoy it turn coding into something more, and ascend to the level of “developer.” Everyone else will just continue to churn out loveless code.


Jerry Krinock
19 January 2009 @ 3am

The “Drafts” folder in my email client probably has hundreds of messages that I wrote to Apple’s cocoa-dev mailing list over the last few years and never sent. When I have a problem I can’t solve, I switch to Mail.app, think through the whole situation, and compose a message about it. Then I read the message and ask myself, “Now, when so-and-so reads this message, what are they going to tell me to try?” Usually, I can think of an answer, and quite often, I try it and — voila — problem solved, or at least, completely redefined.


Chris A.
24 January 2009 @ 1am

I guess if I found this site then I don’t qualify as one of these “vampires” but I am very new to Cocoa so here’s my 2 cents from the other side of the coin…

Cocoa has been the hardest thing I’ve ever done on a computer. Period.

Why? I don’t have any background in C++ or JAVA and the only OOP exposure I have is with Ruby On Rails. Memory management, pointers, public/private methods…these are all foreign concepts to me. I tackled some books but y’know reading technical books just doesn’t do it for me. It’s not how I learn well and it’s not how I’ve learned to do things in the past. I learn things by doing or by example.

When I run into a Cocoa wall and the XCode documentation doesn’t shine any light I start googling. What do I find? A mixture of the following…

-nothing
-a link to the Apple documentation
-a pointer to an outdated Apple XCode example
-an example from a forum/mail-list post from 2005
-an idea from the example from 2005 to start another google search

So why should I bother posting a question?

Now maybe I’m a johnny-come-lately and the forums/mail-lists are already saturated with what Matt speaks of but I’m constantly surprised at the lack of answers/help that there actually is.

I think that Cocoa/XCode/IB has so many facets that it’s hard to capture what everyone wants to be able to do so only the common things are talked about or documented at great length. Like “how to build a Core Data application with no code!”. Apple is partly to blame as they market things as being so easy. Where’s the slick Core Audio API?

That’s my 2 cents. It hasn’t deterred me from continuing on yet and everytime I solve a problem I shout for joy! Looking back I just wish that some of these simple problems hadn’t taken 3 days to solve for lack of help.


mzincali
7 March 2009 @ 6am

There is another issue possibly driving these kind of questions. For example, I want my iPhone app to play a system beep when the user presses the wrong key and to play a click sound when the user types on my custom keypad.

So I go off and look for what I think should be a standard API call. I find that maybe

AudioServicesPlaySystemSound (theSound);

will do what I need. Looking into it, I am surprised how much work is involved.

So then I go to see whether anyone knows how to get a simple SysBeep(), or ClickSnd() – after all, haven’t OS’s as far back as early UNIX provided simple little sound routines like that? Is it possible that the iPhone, with all it’s sound capabilities, does not have such a call? No, I can’t believe it. Thus I ask.

I’m not a sound guru. I loathe having to create .caf or .wav in order to do something that is not the focus of my app, and an area that I have little expertise in. A good SDK is supposed to free you from doing mundane stuff, and allow you to focus on bringing your expertise to life.

Looks like, though, that I have to go off and figure out how to make a click sound and a “bonk” sound.


Imagist
30 May 2009 @ 2pm

It’s worth noting that in some cases this is a valid learning technique. As an example: if you’ve never seen how to read and write files in Java, no amount of pointing you to FileReader, FileWriter, BufferedReader, etc. is going to help you figure out how to read and write files, let alone do it *correctly*.

Of course, at some point you have to learn how the different pieces of code work so that you can adapt it to a specific situation, and you should be able to do all kinds of crazy specific reads and writes that nobody else did or even thought of.

In theory, with a well-designed API you can look at the documentation of the functions/objects and figure out how to use them, but practice relegates this to a rarity.


DKarma
30 May 2009 @ 3pm

Of course they’re going to ask for the answer because why would you reinvent the wheel if it’s already been done?
If you have some simple inane question posed to a just-grad you really think they’re going to research how to embed pix? NO they’re going to work smart not hard. If it hasn’t been done or if they can’t find an answer quickly online they’ll probably try to figure it out eventually, but look at it this way.
When you boss asks you to complete a task do you complete it quickly or start from the beginning even though someone already has an idea of how it should be done?
If you said the latter you should probably be fired for wasting the company’s fucking time.
If i had an emp. who tried to do everything from scratch and didn’t bother to find a quick pre=fab answer online they would be canned.


Dave Ross
30 May 2009 @ 4pm

DKarma, stop fooling yourself. That’s not working smart, that’s taking a huge gamble. Everything’s fine until there’s a bug in that copy & pasted code, and the manager that wanted that code written “right away” is going to want it fixed “right away”, too.

Guess who gets called in to clean up those messes? Yep, it’s the developers who actually know what they’re doing. And we’re a little resentful about it.

There’s a big difference between doing “everything from scratch” and pulling code from dubious sources (sample code, forum posts). Why not a happy medium, where infrastructure is handled with well documented and tested frameworks, while the rest of the code is written in-house and, most importantly, actually understood by the people who claim credit for it?


Ben McCann
30 May 2009 @ 5pm

You ignored the bad English, but I’m not so sure it’s irrelevant. I have a blog where I’ve published numerous tutorials and get a lot of comments along the lines of “hello, i need program to do x. i not attempt yet. you write for me.” Here’s a post from Vineeth: “Please send me the audio recording code for android simulator. I tried the above code. Its not working. Please send me the code for audio recording.” These comments are always in horrible English and the asker appears to be from India given his name. Perhaps there’s a cultural aspect to these questions that we’re missing? Maybe it’s the culture of the outsourcing firms in India?


andrew
30 May 2009 @ 6pm

After calculators, some teachers bemoan that we will lose our mental capacity.
After movies, some actors bemoan that we loss the appreciation for live performance.
After spell-and-grammar checkers, some writers bemoan that machines now tell us how to write.
After google, some teachers bemoan that we loss the ability to look up references using microfilm.
After object oriented programming and the internet, some programmers bemoan that we loss the ability to write original code.
As our life improves, some of us bemoan that we loss our ability to make spears, to hunt a deer with spears and eat raw meat.


lead piper
30 May 2009 @ 7pm

THIS is a DIRECT result of the lack of education that people recieve both institutionally and at home. If you are taught to THINK instead of ASK and are pushed into the world to SURVIVE instead of expecting a hand out from mommy, daddy, the government etc then you will learn to innovate and create.

Unfortunately the current generation crop were raised by family members who EXPECT that they have RIGHT to everything and therefore think all they have to do is ASK and it will be provided (oops stepping into the religion realm here!)

There are only a few innovators but there are many more followers and the fact of the matter is unless you are EDUCATED to THINK you are a FOLLOWER.

so lead, follow or get out of my way before I lead pipe you in the head.


Jonathan
30 May 2009 @ 9pm

This is a great article thanks. I see this kind of attitude every day as I take my computer science course. Most of the other students just want answers without understanding. I make it my goal to do as much as I can myself (for example I refuse to use jQuery when developing in javascript as it takes away the challenge of thinking through the steps required to achieve the goal). But am I trying to do too much in this way? Would it be better for me to use pre-written code (at least some of the time) .. I don’t want to get stuck in the habbit of always writing my own code even for the simplest of tasks when others have already. Don’t want to re-invent the wheel.

I will be sure to rememeber the domain so I can provide it when I’m next asked for the answers in CS.

Jonathan.


mario
30 May 2009 @ 9pm

To the problem of garbage-filled developer forums / bulletin boards: I think it might really help a lot, if every forum submission required users to tick a short already-tried-those questionary or “captcha”. For example a few generic language-specific questions or error messages, and a “I’ve-already-tried-following-google-search-terms”-box might weed out the most trivial newbie submissions.
A query-as-you-write AJAX help/suggestion box (think clippy) might also do the trick.
At least, I believe there are some possible technological solutions for the signal-to-noise-ratio problem in web forums. It has just not been tried yet.


Jon
30 May 2009 @ 9pm

We’ve all seen someone bitch and moan on a forum about how Linux people are “assholes” and “zealots” and “elitist”. NOW YOU KNOW WHY: they are effectively obstructing noise


Jon
30 May 2009 @ 9pm

‘if every forum submission required users to tick a short already-tried-those questionary or “captcha”’

Lazy people are dishonest people.


zzz
30 May 2009 @ 10pm

What a retard. Anyone with a slight hint of intelligence knows that the very best software engineers are adept at integrating the work of others…a programmer who’s first instinct is to find the best wheel for the job already invented by someone else rather than create their own sub-standard solution are always the most successful.


tonetheman
31 May 2009 @ 1am

I too have played with Cocoa and mac in general and they are not simple. And even worse most code points back to the apple code. I am not just picking on Apple either. It is just in some cases you really have no place to start (no place to put your toe) and pretty much the only choice is to ask for a solution.

In most cases I want people who ask me questions to do research first too. I think it is the only way to learn, fail first and often.


Richard
31 May 2009 @ 3am

I rarely comment on anything, but I really liked your article. I have relatively little experience, am a senior computer science/engineering major, and absolutely hate seeing the things that you’re describing. If I can’t figure out a problem, given available information, I step back, have a few beers, think about it, and then dive back in. Surely the beers don’t help (and are not always present), but when I finally do solve a problem I feel that much more satisfied.

I’ve experienced far too many people during my time at university who want “help” with homework or projects. This “help” usually involves obtaining a copy of my code or answers to a homework assignment, copying them, and submitting them. I have learned to weed out these types and refuse them, especially considering most of my classes are curved. If one of these students had a question for me that involved my knowledge and not my solution, I would be more than happy to help. I would see a question like that as adding to my overall understanding of a problem. Alas, those questions are far too rare.

I am about to enter a career, and I am confident that I will never end up as one of the “engineers” (in quotes because they are probably not really engineers) you mentioned in your article.


Abhi
1 June 2009 @ 5am

Nic Article Matt.


Jonathan Dickinson
1 June 2009 @ 6am

The real question is where do you draw the line with *being helpful*? I often come across questions like this on SO and it usually takes less than 30s to answer them (if the ‘Engrish’ is good enough). If they come back and ask for all the code – well then lmgtfy.com is your best friend (often it is the best answer).


dawmail333
1 June 2009 @ 7am

Someone sees the light! Thanks for this post: I personally can’t stand to just ask for code that ‘works thx’, because that’s (IMO) cheating, and only hurts you in the bargain: you don’t know how it works, you can only modify it a bit etc… I’ll bookmark this page, just so I can show people!

And this article explains one of the reasons I like dreamincode.net . And CodeProject is a great self-help I found too.

But in sooth, there’s nothing I despise more than leeching, learn-nothing bludgers that call themselves ‘Programmers’. Try getting away with that as an engineer!


sergey
1 June 2009 @ 10am

I think that this problem is just one of the manifestations of the problematic approach to life. We may call it the “Western” approach, maybe.

As sysmgr points out, the management often wants the solution ASAP, the cheapest one, etc. I am far from being a manager, but i perfectly understand this kind of logic. If the company is at verge of a bankruptcy because the sales are low because of the competition, it seems very logical that the management would prefer the “ready” solutions, that they won’t have time to invest in “development”, etc. But when we look around, we will see the same thing everywhere: the people want to take pills and become slim (instead of gradually working to change the eating habits), the people want to go to the psychologist to “magically” solve their relationship problems, etc. Heck, the people even want the entertainment to be “effective”! If you don’t provide a quick and cheap answer/product, you’re out of the game (so it seems).

Many people DO understand what quality is, and ARE ready to invest and to seek out the “best”, but it is still a minority of people. The quest for the “best” has often the same problem, just on another (more “prestige” level). Nevertheless, the willingness to do it is the key part of the solution. For example, when you understand that pills or food additives won’t make you loose weight, you start looking for the “gym” or “workout” solutions; but then you end up going to the wrong classes or buying a stupid “workout” equipment for home (that doesn’t help much). When you understand THIS, you go to the much better classes, and start learning more about the body; you may even go to the very expensive lessons, but that is also still not perfect. Eventually (and hopefully) you may understand that you’re involved in the constant process of self –improvement. At this point you would already have much better “attitudes” than in the beginning.

So, what is the solution to the problem posed in the article? IMHO (according to the spirit of the article itself) – there can not be a “magic” solution. They solution can only be a personal one – improving yourself (maybe by helping others to improve, maybe not). Posting of such articles is probably one of the steps; because some people who will read it, and are not “there” yet – they still will carry something out of it, they still will be exposed to this opinion. It will be another drop of good will to improve the world in the ocean of idontknowhat. And now stop procrastinating, and back to work!!!


Paul
1 June 2009 @ 11am

Great article. The only time I ask for help with a problem, I always as for someone to ‘point’ me in the right direction, prefering to work out the solution myself, but then only after much time researching on my own. Another negative side I see is the number of people that ask for help, but do not acknowledge when a response has provided them with a solution to their issue. Not only is this common courtesty, but it also helps others that may come across the same issue. Not very professional.


Jeff
1 June 2009 @ 2pm

I had a older colleague tell me when i was starting out that you ind two kind of people in our industry. Natural Coders and Natural Troubleshooters, and very seldom some one who is both. I have found it to be very true. I have worked with devs who could right increadibly elegant code but could troubleshoot their way out of a paper bag. It’s no excuse and the behavior you describe makes me apoplectic. Especially now… When I started you would have to fish through books other obscure sources looking for answers. Now, Google it… You can find samples and other people who have had the same issues. Just begging for help is no way get a job done.


David Morton
1 June 2009 @ 3pm

I wrote a blog on this same topic a few months ago as well:

http://blog.davemorton.net/2009/02/on-integrity-and-learning-c.html

As a frequent answerer on MSDN, I feel the pain of those who constantly request to “please send code”. There are some also who seem unwilling to do any research on their own. If this continues for some time with a particular user, rather than continuing to answer their questions, I will simply begin ignoring their questions entirely.

Don’t get me wrong. I love helping other people solve their software development problems, but that’s just it. I love _helping_ other people, not doing their work for them.

Anyways, your article is very well put. Props on making it to CodeProject’s Daily Digest today.


sa
1 June 2009 @ 5pm

I have not time to read the whole article & comments through. Could someone plz provide a simple “summary” so I can use it in my life ;-)


Ryk
1 June 2009 @ 5pm

I couldn’t help, as I read this great essay, how much worse the situation would be if these ‘helpasites’ lived in the days when one needed to actually use BOOKS?


jwatts1980
1 June 2009 @ 8pm

There are those of us who learn better by example. I can learn much more much faster by dissecting a good code example than I can by spending the same time researching an issue.

That said, I still conform to some of the rules Matt laid out. I spend some amount of time looking into the issue before I would flat out ask for the answer. I have enough confidence in my ability to find a solution to a problem that if I don’t find it in a reasonable amount of time, then I figure it’s an obscure or difficult thing to do.

But from the perspective of the one answering the question, they have no idea what process has brought the questioner to this point. Thus the title of the article, “What have you tried?”


That Guy
2 June 2009 @ 9am

I used to teach programming (Java, C++) and I remember the same issues, students would just run up to my desk and say “I have an error”, the first thing i would ask is what is the error, 99.99% of the time they would say they dont know, my response eventually was to tell them to go back and read the error on the screen THEN come back for help.

I usually tell people where/how to find the answer they are looking for instead of the specifics but there are some people who still focus on just getting the final answer.

I have all respect for someone who will try to find the answer or actually take the time to disect the code that works, from what I have seen if you give someone the answer most of the time they wont go through the answer and instead use it and move on to the next issue

Great Article!! im saving this link as a reply to these people ;-)


Jonathan Peterson
2 June 2009 @ 3pm

Over the short (but growing) time that I have been learning code, I have been astounded by this phenomenon. (That is not to say that it has been restricted to this industry… but rather that I’ve begun noticing it due to my own need for seeking guidance.)

I was raised, and schooled (in public systems) with the mentality that you’re supporting… and indeed it was shocking and disgusting to me the first time I encountered someone who did not want to learn, but rather to be handed the answers.


Benjamin Kinsey
3 June 2009 @ 10pm

As others have pointed out, I think the author fails to recognize “learning by example” as a valid method to understanding how things work in practice. Now I see people linking to this article as an excuse not to help people, because they feel the person asking for help has not put in a sufficient amount of work.


mi-san
4 June 2009 @ 7am

I agree with this totally,

Sometimes people ask me “how do i put my image on my web page” wich is not even an programming issue, but rather more of a markup issue. But anyway, most of the time i tell those people where to look for it, and make them figure out themselfs. In the case of the web image, i just tell them to google for “HTML ” and that they will find the answer there.

People that ask me “plzz i need code asap!”, i just respond with “No, I have put time and effort in creating this code, I needed that code as part of MY sollution to MY problem. It would not be fair to just give away my code, to both myself and the one asking for the code.

Willingness to learn, not having a problem to research the web or visit the local library, for hours-days-weeks or even years will result in learning whatever you want to learn, not just programming.

i remember a quote i’ve read somewhere, Good old Ben Franklin once sayd:
“To try and to fail is to learn, to fail to try is living with the burden of how things could have been” i think this one applies pretty well here.

Well i have to get some work done, Great Article! Greetz from The Netherlands.


Alexander Predl
4 June 2009 @ 8am

Yes you are absolutley right!

But on the other hand, there are outnumberd users they only critizise written language, or formulation, not helping at all. Then a big discussion startes, about formulation, unkindness of the poster and/or answers… at the end the poster has no answer and getting flames.

Please STOP this, post only if you have a question, if something is unclear. Post helping code or maybe a hint/link to the solution. I mean this in developer forums not here…

about me: if you right noticed, my native language is also not english, it is german. But I’m willing to learn!

Greetings from Austria


Lexar
6 June 2009 @ 10pm

Everyone in who uses forums to ask questions should read this

A lot of people sometimes just want to get the answer, or even worst, when they say: please give me code to…


Jelahd
8 June 2009 @ 7am

This is a rant by yet another egotistical developer considering himself superior. Another Ego trip for another “me me me” developer.
What is it with developers and Ego?
20 yeasr in developement and development management and that has been the one constant.
It should get its own greek letter. Get out of your own butts.


darel
27 June 2009 @ 5am

hence why it’d probably be impossible to pinpoint when rtfm was first quoted.. this has to be a problem since the beginning of time. its called laziness i believe :)


RSJames
30 June 2009 @ 9pm

This brings to mind something I did in college. It happened fairly recently (that is “recently” in a geological time frame…): I was given a programming assignment in a Pascal class to develop and implement an algorithm to “partition” a number, preferably using recursion. I didn’t feel like using recursion, and was curious if someone else had already done the algorithm. Here is what I did:
1. Walked to the library.
2. Thought up a likely sounding subject. Found the drawer in the card catalog where the subject was listed (alphabetically). (This was the newer, engineering, library, with a nondescript card catalog. The older library had gorgeous oak cabinets. But I digress…)
3. Tried another subject or two. Eventually found a card for a promising sounding book. Wrote down the title and call number. Got a few more titles in case the first book didn’t have what I needed.
4. Went upstairs to the stacks. Using the Dewey Decimal number, found the appropriate shelf. Read titles ‘till I found the book I wanted.
5. Looked up the subject in the index of the book, and then went to the appropriate page.
6. Started reading and Bingo! Not just one, but three pseudo-code version of algorithms for the problem.
7. Photocopied the pages. Good thing I had enough change in my pocket to use the photocopier.
8. Walked across the street to the building that had the terminals for the DEC-20 computer. Logged on and started translating the pseudo-code into Pascal. Response time was good, only a few seconds per line, so it went fast. Was glad I was using Pascal on a terminal instead of having to punch cards for the FORTRAN system. Ran the program in batch mode (there was no other choice.) Debugged. Reran. Repeat. Finally printed out the program and results on green and white paper.
9. Handed in my printout in class.

Total time, about 2 ½ hours. And I was able to brag to my classmates about the great shortcut I had taken on the assignment, and it WAS a big timesaver.

Do any of the steps above seem familiar to you? How many of you even know what a card catalog is?


Leave a Comment

iPhone dev tips for synced contacts Animal Crossing Wii Friend Code