JOB REFERRALS
    ON THIS PAGE
    ARCHIVES
    CATEGORIES
    BLOGROLL
    LINKS
    SEARCH
    MY BOOKS
    DISCLAIMER
 
 Tuesday, March 23, 2010
Amanda takes umbrage....

... with my earlier speaking about F# post, which I will admit, surprises me, since I would've thought somebody interested in promoting F# would've been more supportive of the idea of putting some ideas out to help other speakers get F# more easily adopted by the community. Perhaps I misunderstood her objections, but I thought a response was required in any event.

Amanda opens with:

Let's start with the "Do" category.

OK, then, let's. :-)

First you say you want the speaker to show inheritance... in a functional-first language. This is an obvious no-no. Inheritance should be used extremely lightly in any language and it should be hidden completely in F#. You should NEVER have a student/instructor/employee inherit from a person. This language isn't used that way.

That's odd.... that's entirely contradictory to what I've heard from the F# team. I've never heard anyone on the F# team ever call it a "functional-first" language, nor that inheritance (or any other object-oriented feature) is something that should be used "extremely lightly" or "hidden completely". Quite the contrary, in fact; when I did a tag-team presentation on F# with Luke Hoban, the PM of the F# team, he gently corrected my use of the phrase describing F# as a "functional-object hybrid" language to suggest instead that it was a "fusion" of both features.

But even if that's not the case (or perhaps isn't the case anymore), I think it's critical to give audience members something concrete and familiar to hang onto as they start the roller-coaster ride of learning not only a new syntax, but new concepts. To simply say, "Everything you know from objects is wrong" is to do them a disservice, particularly when the language clearly is intended to expose object-oriented concepts as a first-class citizen.

Second you say to show interop. This will show nothing about the language. You might as well just say it is a .net language. If you spend your F# session discussing what it means to be on .net, you fail. Nobody expects that one dll will not be able to call another. If they do, I assure you that they will not be writing F# anytime soon.

Ah, but here is where my decades of experience teaching languages to audiences all over the world kicks in: they don't know that. DLLs are not all created equal, as anyone who's ever tried to get COM components to interop with native C++ DLLs that in turn want to call into managed code DLLs will tell you. It's important to stress, again, that what they know is still relevant in this new world. In fact, the goal of showing them interoperability is to reassure them that, in fact, it's not a new world at all, but simply a different spin on the world they already know and love.

Next you say give concrete examples of where F# is a win. This is a sales pitch. It's fine for some audiences but if you intend to teach F# to the audience, you likely are already there. Just make sure your examples are real world and you should be fine. I challenge you to make your next blog a "Why F#" which contains real world examples. I've not ever heard you give valuable advice about when to use F#. Also please post what your real world experience is with F#. Where did you implement a solution? What was that project like? Why was F# the best choice?

Interesting. Based on the conversations I've had with others, the main reason people come to technical talks, at least the talks I've been to (both as an audience member and as a speaker) is to know when and where and how they can use this technology (whatever it is) to solve the problems they face. That means that they need to see and hear where a technology fits well as a solution against a given problem domain or case, and the sooner they get that information, the sooner they can start to evaluate where, how and when they should use a particular technology. This has been true of almost every "new" technology I've evaluated—from the more recent presentations and articles around WCF, Workflow, MongoDB and Axum to the older talks/trainings I've given for C#, Java (including servlets, JSPs, EJBs, JMS, and so on), C++ and patterns. Case in point: does F# offer up a great experience in building UIs? Not really—Visual Studio 2010 doesn't have any of the templates or designer support that C# and Visual Basic will have, making it awkward at best to build a UI around it. On top of that, the data-binding architecture present in both WinForms and WPF rely on the idea of mutable objects, which while something F# allows, isn't something it encourages. So, it seems pretty reasonable to assume that F# is not great for UI scenarios.

Oh, and your memory is letting you down here—your comment "I've not ever heard you give valuable advice about when to use F#" is patently false. You were standing next to me at DevTeach 2008, talking about F# to an audience of about 20 or so when I said that I thought that functional-object languages were a natural fit for building services (XML or otherwise).

More importantly, these were tips to speakers interested in F#—where they think F# is strong and they think F# is weak is a personal judgment, not something that I should dictate. You used F# to implement an insurance-scoring engine, as I recall. I've used it (in conjunction with AbsIL, which used to ship with the F# bits back when they were a MSR technology) to do some IL weaving in the spirit of AOP. I've used it in a couple of other cases, but alas I cannot divulge the details due to NDA. But where I've used it and where you've used it isn't the point—it's what the speaker talking about F# has done that's important. This isn't about us—it's about the guy or gal on the stage who's giving the talk.

Then you say to inform the audience that the language is Turing complete. This seems like a huge waste as well. If the audience needs to understand that you can accomplish the same things in C#/VB/F#/Iron*/etc, you are speaking to people who are very young in the understanding of programming. They won't be using F# anytime soon.

Hmm. I think this is a reaction to the comment "DO stress that F# can do everything that C# or Visual Basic can do", which is a very different creature than simply informing the audience that the language is Turing complete. Again, based on my decade's-plus years of training experience, it's important to let the audience know that they don't have to throw away everything they already know in order to use this language. I know that it's fashionable among the functional programming community to suggest that we should just "toss away all that object stuff", but frankly I've not found that to be the attitude among the "heavyweights" in that part of the industry, nor do I find that attitude laced throughout F#. If that were the case, why would F# go to such great lengths to incorporate object-orientation as a full part of its linguistic capabilities? It would be far simpler to be a CLI Consumer (much as managed JScript is/was) and only offer up functional mechanisms, a la Yeti in the Java space.

I lived through the procedural-to-object transition back in the late 80's/early 90's, and realized that if you want to bring the previous generation of programmers along with you into a brave new world, you have to show them that a complete reboot of their mental processes is not necessary. Otherwise, you're basically calling them idiots if they can't keep up. Perhaps you're OK with that; I'm not.

Finally you say to Tease them for 20 minutes. I am not sure what this means. Can you post those 35 lines to wow us? I'd love to see your real world demo that is 35 lines. I'm curious as to why you wouldn't be able to explain the 35 lines as well. I guess there isn't time because you're busy showing interop examples that prove F# is a Turing complete, .net language.

Alas, I doubt my 35 lines would impress you. However, my 35 lines of F# service code, or Aaron's 35 lines of F# natural-language parser code might impress the crowd we're speaking to. I dunno. More importantly, again, this isn't about what *I* want to do in a talk, it's about helping other F# speakers be able to better reach their audience.

Let's get into the Don't category:

So soon? But we were just getting comfortable with all the DO's being judged completely out of order from their corresponding DON'Ts. *shrug* Ah, well.

First you say to stay away from mathematical examples because people don't write mathematical code every day. I think you already mentioned that F# is not meant to be the language you use for every scenario. Now it seems you want to say it should be the everyday tool. I'm confused. I agree that some of these simple examples aren't very useful but then again it's not because they are mathematical. It's because they are simple and ridiculous. I don't use a web crawler everyday either but I see value in the demo. I think the examples need to be more real world, period. Have you posted that blog I requested yet? :)

Ah, the black/white pedagogical argument: if it's not black, it must be white, and if it's not white, it must be black. Your confusion is clear: if it is not a language to be used for everything, it must be a niche language solely for creating high-end mathematical systems, and if it isn't just for creating high-end mathematical systems, it must be a language used for everything.

My reasoning for avoiding the exponent-hugging example is pretty easy, I think: Mathematical examples reinforce the idea that F# is solely to be used for high-end mathematical scenarios. If you're OK with the language only appealing to that crowd, please, by all means, continue to use those examples. Myself, I think functional concepts are powerful, and I try to show people the power of extracting behavior by showing them widely-disparate uses of foldLeft across lists of things to produce concrete yet widely different results. Simple examples, but without a shred of "derivatives" found anywhere.

Alas, that blog post will have to wait—I have an F# book I'm finishing up, and I'd rather put the energy there.

Next up you say to not stress FSI or the REPL. I'll start by reminding you that FSI is the REPL. There aren't two different things here. I think it's great to show a REPL! This is not just a cool F# thing. It's common to most functional languages, statically typed or not. The statically typed argument might be a better one to have than Turing completeness. I'd much rather discuss those benefits for the types of code that are written in F#.

Wow. I wouldn't have thought I would have to remind you that REPL is a generic phrase that can apply to both FSI and the Interactive Window inside Visual Studio. And while I'm certainly happy to hear that you think it's great to show a REPL, the fact remains that most .NET developers don't know what to do with it. More importantly, demonstrating a REPL reinforces the idea that this is a shell-scripting language like Python and Ruby and PowerShell, hence the questions comparing F# to Python or Perl that come up every time I've seen an F# talk show off FSI or the Interactive Window. Business developers using .NET build using Visual Studio (with the exception of that small percentage who've discovered IPy or IRb) and, again, need to be brought gently into this new approach.

(For those readers still following along, the REPL concept is hardly restricted to the functional language cadre; in fact, object-oriented developers would be well-advised to play with one of their own ancient progenitors, Smalltalk, and its environment that is essentially one giant REPL baked into a GUI image that can be frozen and re-hydrated at any time. Long-time readers of this blog will know I've talked about this before, and how incredibly powerful it would be if we could do similar kinds of things to the JVM or CLR.)

You go back into the Why F# question without giving any real reason. Can you post that blog please? I think many of your readers would appreciate that! PS: The Steelers are fantastic! :)

If I'm following your point-by-point refutation correctly, you're now saying I'm "going back" to the "Why F#" question for no real reason; I would've thought the progression of DON'T followed by DO would've been pretty obvious, but perhaps I was assuming too much on the part of at least one of the post's readership. The DO was designed to offer up prescriptive advice about how to accomplish something I'd said to DON'T previously. And thus is true here: DON'T answer the "Why F#" question with "Productivity", DO answer it with something more concrete and tangible than that, either in the form of real-world examples or concrete scenarios.

I think by this point, given all the wheedling for that blog post, the general readership would probably be very interested in your own rationale blog post, by the way.

Alas, your Steelers barely made it to .500 last year, their franchise quarterback is now the target of his second (and possibly more, if the rumors are to be believed) sexual assault charge, and their principal receiver has a reputation around the league as being a dirty player. So perhaps we will simply have to disagree on how fantastic they are. Which, you will note, proves my point—as the old saying goes, "there is no accounting for taste", because I can't understand how you think. Which then means "It's just how I think" is pretty ridiculous as a justification for using a language.

You say to stay away from the "functional jazz" or the reason why anyone should be looking at F# to start with. People don't come to these types of talks to see how F# is just like C#. They want to see what is different. Don't stress the jargon but if someone asks, let them know there is a name for what they are looking at. I remember when I was learning F# that everyone hid the meaning of let!. They would say "Something special happens here" and that would leave me thinking they were trying to hide the magic. There is no magic! I don't assume people are morons. They can handle the truth. If they want to learn more I want to give them a term to google and some potential resources. There isn't time to cover that completely in most sessions though. It's something to be careful of, not to avoid completely.

Interesting how your anecdotal evidence differs from mine—what I've seen, based on the quick poll I took of the attendees at the user group meeting last night, and based on conversations I've had with hundreds of developers from companies all over the world over the last four years, vastly more attendees come to a talk on a given subject because they have no clue what this thing is and want to see a general overview of it. Shy Cohen, one of the attendees last night, whom I first met during my days as a digerati on the WCF team back when it was still called "Indigo", admitted as much during a whispered conversation at the back of the room. If Shy, old Microsoft hand that he is/was, bright guy that he is, and close friend to Lisa Feigenbaum, who's a Program Manager for Visual Studio, has no clue what F# is and comes to a talk on it so he can get a quick overview of it, how likely is it that everybody is coming to an F# talk with a predetermined idea of what the language is and are thus ready to be given "the truth" complete with all the big dime-store words?

Yes, people want to know what is different, but to do that, they also have to see what is the same. Which takes us back to my earlier points about showing them what is the same between F# and C#.

As for people waving their hands and saying "something special happens here", well, maybe you just listened to the wrong people. *shrug* Can't help you there. For as long as I've been giving talks on F#, dating back to SDWest back in 2005 when I gave a talk on "A Tour of Microsoft Research" during which I talked about Fugue, Detours, AbsIL and F#, I've shown the language, talked about what's happening in there, and shown the IL bindings underneath to give people concrete ideas to hold on to. It's the truth, but without the pretentiousness of big words.

The last point is obvious. Nobody can learn F# in 20 (or 30 as it was) minutes.

Unfortunately, that doesn't stop people from trying to teach the entirety of the language in 20 minutes. Or even in a full day. (From having taught languages for many years, and knowing that it took most of a week to teach C# back in the 1.0/2.0 timeframe, I'm finding that it takes about 5 days of full 8-to-5 training to get them competent and confident in using the language. Less than that, by about a day or so, if they have a strong background in C#.)

Context, context, context.

Indeed. But for now, Amanda, if you take such strong issue with my suggested guidelines for F# speakers, I encourage you to create your own guidelines and post them to your blog. Let's rise the tide to raise all the ships, and encourage a broad spectrum of talk styles.

In the meantime, though, I have a lunch with Michael later this week, some OTN and developerWorks articles to write, an F# book to finish, a Scala book to start, some client code to wrap up, a slew of Scala recordings to work through, soccer practice Thursday night, and a Seattle Tech Speakers Workshop meeting next month to prep for, in addition to a class next week that requires some final polish, so you'll have to excuse me if I don't respond further down this particular path.

Cheers!


Wednesday, March 24, 2010 7:24:46 AM (Pacific Daylight Time, UTC-07:00)
A lot of passion in this post, buddy. Not a lot of content.

A bit of information for you:
-I don't want to promote the use of F#. I'm not in sales. I just teach people how and when to use it.
-A REPL is a REPL no matter how it's accessed. Seriously, you didn't know they are the same?
-Obviously F# is a fusion language. It also obviously encourages immutability and first class functions - default is encouraged, right?
-Complex inheritance models and inheritance for the sake of inheritance is a terrible idea no matter the paradigm.
-I recall DevTeach. You gave incorrect information over and over and I corrected you some and held my breathe some.
-I know your coauthors say you haven't done any real world F# so they are writing the bulk of the book. You are lucky to have such great guys!
-Can we really believe all sexual assault charges? Some readers might find you speaking against sexual assault as ironic! Should we discuss your activity with so many women in IT. Happy Ada Lovelace Day!
-I wasn't saying the guy was right, I'm saying cut him some slack. Perhaps even say "Thanks for coming out and working so hard!" Private feedback is what you do when you are a good guy. You were just being an ass. Now I'm being an ass to show you how that feels.
-You keep discussing your years of experience. I work for a company that recently let you go for lack of technical experience and credibility.
-You use a lot of words to say not very much. That doesn't make you sound smarter. Neither does name dropping.
-You are a professional (Paid) speaker at NFJS. You are funny and you
swear. It's entertaining, that is all.
-Your sessions contain no actual technical discussion. All fluff and no stuff :)
-All of the talks I've seen you do, and that is quite a few, have been
compiled from a simple google of the topic. Attendees could simply
google and and read the first result for more information.
-You only speak about things you have never done in real life
-You have not had a job in more than 10 years which has required you
to write code. I know this for a fact. Your friends know this for a fact. You're readers may not be aware.
-You are threatened by people who know anything about F# because you
do not. I am sure that guy has written at least 1000 times the F# code
as what you have written
-Stop trying to prevent other people from speaking on the topic just because you think you are good at it, you aren't
-You aren't being invited back to conferences because your performance was bad. Ask me in private to find out which organizers have told me you will never be invited back. I don't want to embarrass anyone.
-I get that you aren't over me and that this is bait for interaction. I'm sorry that this is the end of my interest in interacting with you. Respond as you like but I won't be reading anything more. Please dear readers, don't point me to this man's blog again. Ted, I'll leave it to your readers and your ego to battle it out.
-You talk about all of the things you need to get done. Go get'em Tiger :)

Amanda Laucher
Wednesday, March 24, 2010 11:54:05 AM (Pacific Daylight Time, UTC-07:00)
Dear Ted,

You make some good points, but it's lost in the hubris of you sounding like a, ahem, 'bit of dick'. The core of your message to Amanda is lost in huffing and puffing you do over have much you know and have much you've done (under NDA, naturally).

You might not be as smart as you think you are, and getting into a pouting match with Amanda on the Worlds Largest Toilet Graffiti Wall (aka the internet) makes you look arrogant, dumb and, well, basically pretty unlikeable - borderline unprofessional.

The back-story that you both have F# books coming out soon is fairly sad too; professional envy is distasteful in any field, but in the tiny world of FP it seems especially wasteful.

You're a smart guy, but take your mouth out of gear for this one - no good will come of it, and your going to be turning a lot of people off. You come across as an old, puffed up jerk waving your 'decades of being a genius stick' at young people who are dancing on your lawn...

(goes off to get popcorn, to watch the unfolding train-wreck...)
Martin
Wednesday, March 24, 2010 5:41:44 PM (Pacific Daylight Time, UTC-07:00)
"People don't come to these types of talks to see how F# is just like C#."
"Interesting how your anecdotal evidence differs from mine"

Yes. You are both right, and you both raise some good points. Though I am inclined to come on Amanda's side.

From a practical point of view, people don't like change and they don't like to invest in big ones if they can avoid it. Was it Planck that said "The Old Theories only die out when the Old Professors die out". This was borne out when people chose C++ over alternatives, and when Java won over Smalltalk. Still, people don't just want an old language with new syntax, or at least some of them don't.

As a software company, Microsoft has the standard programming field well covered through C# among other languages. The point of F# to me is about introducing new methodology of programming in a more acceptable way to the public than, say, Haskell. In this they look to me to have succeeded.

The equivalent of reasoning that the F# experience is similar to C# or other similar mainstream programming a decade ago is saying that you should pick up Perl or Python because it is still similar to VB or Delphi. I personally wouldn't have been attracted.

Obviously, you are trying to sell F# to a more standard C#/Java group of people without making it like the sky has fallen. I commend you on that. They would mainly go on using it in a Java like way until they get more familiar with its idioms. Other people come from different backgrounds and would like a different approach.

Discussing the REPL seems to tell me you are very much on one side of the IDE divide. I did my fair share of the Visual Studio/Eclipse development. Add to that my years using Delphi, and I feel quite knowledgeable about the gains made by using an IDE. There is a reason, however, that there haven't been that much development of IDEs for scripting languages for example. Productivity gains come in a different way. Can I humbly submit to you that the F# community insisting on bringing up the REPL is about this other type of productivity? I am sure you know how to follow up on this idea if you wish.

In short, if you titled your blog "How to give a sales pitch about any generic product", especially when it is about treating the audience as customers rather than having an educational experience, I would have agreed with you. I have had my share of those.
Muhammad Alkarouri
Wednesday, March 24, 2010 6:19:00 PM (Pacific Daylight Time, UTC-07:00)
I like that F# and C# combined make a power chord, which I used in Crazy Train. And it made me millions.
Wednesday, March 24, 2010 8:23:17 PM (Pacific Daylight Time, UTC-07:00)
Nicely said, Amanda! You are my hero. Apparantly Ada Lovelace and Amanda Laucher have something in common; both deliver the goods and don't take any crap from those who are full of it.

Ted, was this post so long on purpose so that nobody would read it? You really are trying man but you wrote a book here and said nothing of value. I haven't seen any value in your videos in quite some time. Lay off of Mike for his F# talk.
Mark Toyle
Thursday, March 25, 2010 10:34:20 AM (Pacific Daylight Time, UTC-07:00)
Amanda, you really crossed the line here. Whatever (perhaps legitimate) frustrations you might have had with Ted's original posting, and perhaps your history in interacting with him on- and offline, do not justify the personal attacks on Ted. It doesn't even matter if some of them are true, what you have done is completely unprofessional.
Thursday, March 25, 2010 1:44:52 PM (Pacific Daylight Time, UTC-07:00)
I agree with Jeff Olson...Amanda, you lost quite a bit of respect here by making it a personal attack instead of an attack on the his opinions.

Ada Lovelace would most likely be pretty upset with you for you associating yourself with her.
John Smith
Thursday, March 25, 2010 2:29:29 PM (Pacific Daylight Time, UTC-07:00)
I actually don't see where Amanda associated herself with Ada Lovelace. She was saying that Ted mistreats women in IT and it happened to be on Ada Lovelace day.

Is John Smith actually Ted trying to make himself feel better since everyone has been applauding Amanda here and on the more interesting reddit version?

http://www.reddit.com/r/programming/comments/bhrr0/amanda_takes_umbrage_a_continuation_of_how_to_and/?sort=hot
Mike Martin
Thursday, March 25, 2010 6:13:19 PM (Pacific Daylight Time, UTC-07:00)
Personally, I think the exchange here makes both parties look bad. Regardless of whether Ted was in the right or wrong for critiquing another speaker, Amanda was pretty far out of line in making it a personal attack on Ted. Naturally, Ted was equally off in his response... and frankly the whole thing has gone on way too long. It's time to walk away, nothing to see here.
Friend of Both
Thursday, March 25, 2010 6:25:55 PM (Pacific Daylight Time, UTC-07:00)
"...if you want to bring the previous generation of programmers along with you into a brave new world, you have to show them that a complete reboot of their mental processes is not necessary."

Why not? My first functional programming experience was with Haskell, a language that more pure functional than F#. Making a complete break from the OO and imperative mindset and write pure functional code was all beneficial.

It's an experience that I find most valuable when learning F#, because without it, chances would have been greater that I'd be using the imperative constructs of F# for things that could have been done functionally. (If anyone wonders why that would be so bad, they have missed the point so badly that they had better stay with VB or PHP.)
Nick Nelson
Friday, March 26, 2010 5:44:51 AM (Pacific Daylight Time, UTC-07:00)
Lets move on.
How do I pronounce Tuple? Don Syme says two-pull, Amanda and Rob Pickering say tup-pull (rhyming with couple).
RichB
Friday, March 26, 2010 6:47:15 PM (Pacific Daylight Time, UTC-07:00)
Ted: Fact based, a little defensive... ok, a lot defensive and strewn with a lot of name dropping to recover wounded pride. But overall, certainly not a personal attack.

Amanda: One of the most disgusting, baseless, nasty personal attacks possible. Why not just say Ted has a tiny dick too?

Between this and the reddit posts, it is evident that Amanda doesn't need advice on giving F# talks, she needs serious fucking therapy. Get help. Now.
Proving F# Makes People Nuts
Friday, March 26, 2010 8:08:12 PM (Pacific Daylight Time, UTC-07:00)
Am I sensing F# with C (instead of with C#)?? That would make sense why there's all this drama; it's some dissonant shit all up in here. That's the problem - instead of a perfect fifth, it's a diminished fifth (aka tritone). Either get that perfect fourth (like those jerks who made "Smoke on the Water"), or get that perfect fifth. Otherwise, it's all harsh on my ears.

Randy
Saturday, March 27, 2010 10:10:16 AM (Pacific Daylight Time, UTC-07:00)
Ted,

You and Josh need to learn to be more professional. Aliases here and on redit do not disguise that you two are fighting over his wife and embarrassing your entire family. No woman is worth this. Your children are old enough to read this crap.

DramaDramaDrama? ProvingF#MakesPeopleNuts? JohnSmith? You need to move on. You are destroying your career and family here. Delete the post and end the drama.
Another Friend Of Both
Comments are closed.