Enthusiasm

This post was written in reverent memory of two colleagues who have passed away since I worked with them, Kieran and Howard. Rest in Peace.

Today’s post is written (in part) from PAX West 2021 in Seattle, which jives well with today’s topic: Enthusiasm. Much of the best parts of my life revolve around enthusiasm. Conventions like PAX, Star Wars Celebration, and BlizzCon are—more than just marketing events—celebrations of enthusiasm. My closest friendships are built around a common currency of enthusiasm for topics and activities. We talk often and at length about our favorite games, movies, TV shows, books, and technology. My preferred YouTube content is from creators with enthusiasm for literature, health, teaching, or just knowledge in general. The online communities I participate in are powered not by organizations but the enthusiasm of their community members. I remember my favorite time of year as a Program Manager on the VB team was MVP Summit because of how exhilarating it is to just be around others who are enthusiastic about programming in my favorite language on my favorite platform. I realize that though across a wide range of domains, at my core I’m an enthusiast. In fact, when Microsoft first approached me about interviewing for the role of PM of the VB.NET compiler back in 2009 that’s precisely how I signed my email accepting the invite. Not “Professional IT Solutions Consultant” or “Enterprise Software Architect” but “Visual Basic Enthusiast Extraordinaire”.

In the beginning of this year, I mentioned taking a break from social media to get some quiet, so to speak. I’m happy to say one of the words to tumble out of that quiet was this: enthusiasm. Not fandom. Not fun or favoritism. Not ego. Not even love or passion. I’d been thinking about my reasons for continuing to think about VB and in VB and those other words while certainly undeniable to various degrees didn’t feel super defensible to me as a case for why anyone else should care what I have to say, how I feel, or what I do. Not defensible to these imaginary critics, btw, but defensible to me. But unlike loving what you do, or having a fun job, or being a fan of your tools, I think it’s pretty difficult to argue that a life, professional or otherwise should be carried on devoid of or without regard to enthusiasm. That doesn’t mean that every single day I sit at my desk and laugh hysterically and post on Instagram videos of my saying “Isn’t this so fun!? My desk is the happiest place on earth today!” but there’s still a general enthusiasm (what defines and encourages that enthusiasm is a topic for later) for the field taken on the whole that I believe is absolutely worth fighting for.

While pondering this idea several people come to mind, some as counter examples, but I’ve decided today to focus on the positive. Specifically, two immensely respected past colleagues with inspirational careers who have since passed on and I’d like to talk a bit about how they’ve influenced my thinking on this topic.

The first of which is a man who I didn’t interact with very often personally but who was one of several role models for me at Microsoft. When I joined the Visual Studio (Managed) Languages team I was advised to get a few mentors and I did. My peer mentor’s mentor was a man named Kieran. Kieran said something that I’ve never forgotten and which I think summarizes what I mean when I talk about enthusiasm, “I always want to run those last few steps to my office in the morning”. And whenever I remember Kieran, that’s how I picture him, hustling to his office toward whatever the day’s challenges were. Not that every day was a trip to the amusement park but that, on the whole, he was going somewhere he very much and wholeheartedly wanted to be. That’s the example he set for other PMs and for me and his loss 3 years ago no doubt left the world dimmer for a lot of folks for a lot of reasons.

Another person who’s been on my mind is Howard. I worked with Howard a little over a decade ago in Chicago. When he joined the company I was then at, he was already in his mid-60s. He was the most knowledgeable person I knew about business process orchestration and far from thinking about retirement he was always thinking about what was next. His enthusiasm for his work was inexhaustible. I ran into him a few years into my time at Microsoft and he was still at it as of last year in his mid-70s. I think of Howard as an example of a long and wholehearted career. Sadly, when I went to look Howard up before writing this post, I learned he passed away late last year. I left my condolences with the family through a page they set up and I repeat my sympathies here. This loss to his family is of course beyond my comprehension and words and I will always cherish his time in my life as a respected, amicable, and resilient colleague and as an inspiration.

I could go on listing individuals near and far who “worked” in their fields in their 50s, 60s, 70s, or 80s and beyond, from Sir. C.A.R. Hoare in computing to Dr. Anthony Fauci in immunology, other members of public service, entertainment, and industry. I mention all of this to say… I’m 36 (37 in exactly 1 month). When I think about some of the brilliant and tireless minds I’ve worked with on the Roslyn team and the length of a career there’s a very real possibility that I’m not even halfway through mine. There could be another 40+ years of me giving a damn in the general vicinity of computers and programming in some form or fashion. How do I want to spend them? Rolling out of bed in resignation or running those last few steps?

Something happened to me, y’all. I once referenced fighting to stay on a platform, but I realize I’m in a fight for my very enthusiasm for what could be a longer period of time than I have been on the Earth. Will I be silent? Will I connect with others? How? Do you know how many times someone I know or who knows someone I know has contacted me and said “I want to get started with programming, where do you recommend I start?” and I genuinely just had emptiness in my heart and nothing to say? This has been true for several years now, at least 4. I lost something vitally important because I let externalities convince me that my own enthusiasm didn’t matter. That it was immature, trivial, or irrelevant. At times in the last 5 years, I’ve thought of myself as on a journey looking for the soul of something and this year I’m realizing that my soul is at least part of what I’m looking for.

What’s the impact if I give up on that search or if I bow out of that fight? The impact for me personally? The impact on others, or the lack thereof because I never share what I’ve learned along what has been a rich career (that’s not even half done yet). And this has made me think about what enthuses me about our industry and what definitely does not (and it’s not precisely a particular tool or product, btw). Anyway, in this time of silence I’ve resolved that while I might face a lot of criticism no one can ever tell me that it’s wrong for me to fight for my enthusiasm for the next 40 years of my career and my life. Not just as a clinically depressed person but as a human being I believe that’s however narrow the odds, that’s always worth fighting for!

Regards,

-ADG

P.S. My next post has been titled “Two Anxieties and an Unarticulated Need” but I’m on the fence on how soon to post it. I’ve been holding on to it for over a year and I’ve sort of lost track of whether it’s important to say it now. I’m leaning yes but thoughts change. I’m at least leaving you the title, so you know there is a next post. There’s always a next post.

PHP

I’ve been learning to love PHP every day for a little over a month now. Not that one—gotcha! No, I mean I’ve been attending a Partial Hospitalization Program. So 5 days a week for 5 hours a day I’ve been at a facility with a team of mental health providers (therapists/social workers, psychiatrists, nurses, etc.) doing everything from finding me a new medication regiment for my depression and anxiety to regular individual therapy sessions as well as group therapy up to 3 times per day.

If that sounds intense, that’s because it is. Once again, I find myself on a mental health-related medical leave from work. This time I’ve taken 12-weeks of protected time under the 1993 Family and Medical Leave Act to try to finally get some treatment for various conditions mental and physical that I really wasn’t able to deal with last year in 2020 the way that I wanted to. As literally everyone on the planet knows, the entire healthcare infrastructure of… Earth was overloaded throughout 2020 and the mental health component was no exception. At times I had one or two month waits just for a single visit with a therapist and now I’m almost living with a whole crew of them.

I’ve actually recently transitioned out of PHP and have just started what’s known as IOP or the Intensive Outpatient Program. It’s just a truncated form of the same program as PHP, I just leave 2 hours earlier and will eventually transition down to 3 or fewer days of program per week as I try to transition back into “normal” life.

For a minute I wasn’t sure why I decided to write this other than simply as an update for the small number of folks on the planet who might take an interest but, earlier this year I was reminded by a very good friend that my talking about mental health has made it a little easier for other people dealing with struggles in their own lives or their families beyond anything particular to me. And that’s a second great reason to share.

I’m not blaming this all on last year, though last year was stressful for many ambient reasons. There were also family issues not directly related to the global situation (and some were) on top of the same challenges I struggled with in 2019… and 2018…. and 2017… and 2016… and you get the picture. I’m a little more positive now because I have the experience of taking a leave from Microsoft for 2 months in the spring of 2017. I know what to expect and what to avoid or embrace more fully.

One thing I thought I was prepared for but clearly am not, is fighting with insurance companies. I thought I was ready for them this time but nope. Actually, this whole last two years has been very educational about the horrors and intricacies of the health provider-insurance complex. It might be fun for me to engage as a software development if I weren’t an often barely functional patient just seeking help. It turns out that someone with a dangerously pessimistic world view and a constant sense of impending doom, failure, rejection, opposition, judgement, and punishment isn’t the person to take phone calls from an angry bureaucrat and they should probably appoint someone to advocate for disabled persons like myself in these situations. But I digress.

I guess my midyear update is this: I’ve taken some body-blows but I’m in treatment, baby-stepping back to the things in life I love. Whoever and wherever you, if you or someone you know is or has been on the ropes lately (and I think that describes a lot of us) I hope you/they have/can find the resources needed to get back to what you love. We all need to get back to more love.

On that note, my next post will be on enthusiasm.

Warmest regards,

-ADG

2021 Annual Update

I’d planned to post this much earlier in the month, but I guess it’s become a tradition to give an update on myself and my plans on or about the 25th of January. I’m trying to get accustomed to talking about myself on this blog (in addition to VB). After all, I am the eponymous topic of the domain name, but I’ve usually avoided in favor of posting one-offs in gists and stuff. There are reasons for that I’ll explain one day but I’ve rethought it and decided to open up a little bit more. While I know most people follow me to read about VB (and I still have oodles to say on that topic), I think it helps to have an outlet for my personal thoughts as well.

So, let’s talk about me in review and me looking ahead and what I’m working on with regard to my beloved language 😀

The Bonus Year

I debated whether to share this but in a lot of ways the current phase and perspective of my life traces back to an inflection point on October 8th, 2019. Don’t worry, there’s a happy ending (obviously). I don’t know that I’d call it “rock bottom” but it was definitely a local minimum.

While earlier that month I’d already suspected that I wasn’t as well as I thought I was and resolved to re-engage the mental health system (an epic tale for another day), while idling thinking about something else in the car I remembered that my upcoming birthday on the 12th wasn’t just any birthday; it was my 35th birthday. 35 being a really nice number I got to thinking that that Saturday (said birthday) was something of a natural stopping point. For me. It wasn’t in response to anything. In some ways it was in response to nothing. I just felt like I did some great stuff and didn’t have other imminent plans and it was a solid run. Even now over a year after the fact my hands tremble just thinking about it.

And while my tone now is a bit matter of fact, but at the time I was broken down crying in my car on the side of some street dreading the prospect that the next 3 days of my life would be the runaway part of my brain fixating on that train of “logic” and that the controllable part of my brain which very much terrified about the whole thing would be able to mount no compelling counter argument in that time.

Now, obviously I’m here writing you all, so you know how it worked out. The details aren’t important, but I got two very unlikely(ish) phone calls from my dad and my grandmother (birthday Oct. 9th). They weren’t about what was going on in my head at that moment, in fact neither of them had any idea that half an hour earlier I was—well I told you what I was—they had no idea. My dad just surprised me. I’d asked him for a longshot favor and didn’t at all expect him to say yes but he did, and I was just kind of shocked. And my grandma just gave me a completely different problem to fixate on and an idea on a neat short-term future that got me visualizing myself in a future beyond Saturday.

The point of this dark trip down memory lane is that I was on a kind of high after that for most of 2020. Despite it being a pretty yucky year globally and locally for me it was a sort of “bonus year” in that for a bit there I didn’t expect to have a 2020 so whatever was happening was gravy for me. I’m in a drastically different and better spot now than then though the year was absolutely full of stressors and struggles. It was just a matter of perspective.

Having said that, I think I’ve hit a plateau at least with my meds and occasional therapy sessions (damn you, COVID). I’ve been coasting and I need to take more steps to get further gains.

Quieting the voices

First let me say that for the most part you all in the community have been great this last year. Words of encouragement and comradery on an internet that’s all too often anything but encouraging or … comrader…ly?

ASIDE: Literally just purchased that domain name. Don’t know what I’ll use it for but the first step to building a great app is picking a trendy name! I can’t wait to see whatever that app turns out to be.

I digressed.  With very few exceptions most of the feedback I get is positive. And just know that there are individuals who still care and are working to move the VB community forward is also encouraging. Without any instigation from me I’ve seen a bunch of you all rolling up your sleeves building skills and saying this still matters to you and it really does inspire me.

The problem isn’t exactly the reality but my anxiety. In addition to depression, I have an anxiety disorder. So, I spend a lot of time thinking about potential futures. Many of them unpleasant. I’m also a perfectionist. There are a few reasons I didn’t blog more often in 2020. One is that every time I thought it might be a good time something absolutely horrible happened in the world and I didn’t really feel like it was appropriate or respectful to talk about my normal topic, which while near and dear to me, isn’t terribly important in the grand scheme of things. Another is that I’m super pre-emptively critical of my writing. I spend a lot of time thinking not just about what I want to say on any given day but how it fits together in a larger picture. Whether people will be confused if I don’t say enough or say things out of order, whether they’ll be bored if I say too much, whether they’ll be derisive, whether it’s thematically coherent, disappointing, underwhelming, do I have enough supporting evidence, will anyone believe in anything I’m saying, etc.

I’ve got a content outline/backlog that’s two pages long at least. But I do think a lot about the best way to present it. And while, as I said, the vast majority of feedback has been positive, I’ve occasionally gotten feedback that was just downright infuriating. In 2019 I wrote a series of posts about top-level code in VB across 5 different scenarios. I knew when I started that all 5 scenarios were going to be, and that the payoff was going to be relevant to the top-of-mind issues of web and mobile development. But I didn’t set it up right, I guess, because after my very first post on it some community member sent me a message that was infuriating. I can’t remember who because I deleted the message and all evidence of the message but the gist of it was that it was a terrible idea and a waste of time and that no one anywhere should spend anytime working on or thinking about it and it wasn’t going to help the community and that I was “brainwashed” by my time at Microsoft to focus on unimportant things, or whatever. I think maybe he unsubscribed? Now, obviously I think he’s wrong, but it was still very stressful and maybe I could have forecasted better to keep him from reacting that way.

I think of myself as a very empathetic person, and having a mood disorder, I’m affected by strong negative emotions and panic and chaos from folks, so I usually try to calm the room down when people are yelling “fire” as much for the sake of proceeding orderly as for my own wellbeing. (In hindsight I think I regret trying to pacify fires as often as I did honestly).

And the last reason is just that while I’m better than I have been at times in the last 5 years, I’m not “normal”. I’m not at 90% or 80%. And I prefer to write when I feel … clear headed. At peace. Positive. I want to write so much more than I do. I compose and revise and outline in my head constantly. And every day I think “I’ll write that down when I feel better. I just need to sleep this off. Tomorrow I’ll feel great”. Spoiler, I rarely feel great. Every day I tell myself I’ll be better and honestly most days I fail.

So yeah, I spend a lot of time beyond managing my own personal life thinking about how others will receive what I want to say. Too much time. And I’ve been getting a number of reach outs in the last several weeks to the tune of “So what is `Next`?”  And I realize that while I don’t actually think we’re in imminent danger even now, it’s not helping anybody for me to keep all of my thinking to myself as long as I have waiting until I have the perfect Tolkienesque narrative structure or until I have one of my rare moments of emotional clarity (incidentally I am writing this from such a place). I have to take more active steps to make it happen (in addition to professional behavioral therapy).

To that end, this month I’m testing a hypothesis with some promising results. You see, while I am not entirely in control of my depression/anxiety I have gleaned some insights from my experiences. Others I’ll share eventually but the relevant one today is about that anxiety I mentioned. I suppose there are others who genuinely hear literal “voices” in their head due to their mental health issues. I do not, in that literal sense. For me the “voices” are my own thoughts. My doubts, extrapolations, interpolations, simulations, etc. Irrational but ever present. And not just about this blog or code I write but about all manner of things, politics, economics, social issues, dating, etc. How the world will react to anything I do, anything I say. Friends, family, whatever the topic. It’s like a heavy weight I carry and have been carrying an exhaustingly long time. Very rarely do my fears play out as I imagine. I’m not sure they ever have, actually, but that’s just what my brain does. Foreseeing how things won’t work is actually a good skill for a language designer, but in other domains it can be problematic.

So, I figure if my problem is unrelenting anxiety about feedback from my online audience, if I simply remove all mechanisms to receive any feedback at all, logically I’ll have far fewer scenarios to be anxious about. You can fear what you know to be literally impossible. To that end, as of New Years day this year I’ve suspended virtually all of my online accounts. Facebook, Messenger, Snapchat, Instagram, dating apps, email notifications from GitHub, gitter, Discord. I’ve turned off all comments on my blog and removed the feedback page. I leave Twitter because it’s one way folks are notified when I post, and WordPress does that on its own. I’ve otherwise turned off Twitter notifications. In a sense I’ve cut myself completely off from the online world in one direction (inbound) and mostly in the opposite direction (outbound).

And get this. The very next morning the “voices” in my head were 80-90% quieter. There’s like a tiny little background thread of anxiety that knows I still have a Twitter account and that all hell could be breaking loose there. Anger, confusion, ridicule. But maybe I’ll just never log in again or something. Anyway, my mind isn’t thinking about “what ifs” nearly as much and that development was immediate.

So now, I’m going to try my best to just… dump content here not entirely haphazardly but maybe in what I might otherwise consider a first or second draft state. Maybe my spelling and grammar will be unprofessional and garbage-tier. If it bothers people or is unclear… ok. I’ll never know. It’s “not observable”. I’m sure once I put it all out there, I can look back over it and put together some kind of index page with a recommended reading order and make some retroactive edits or something. But every step of the journey won’t be overshadowed or threatened by how the world does or even might react to that one step in isolation. Sort it out later. There is some precedence for this. My very first blog post here only happened after sequestering myself in my apartment for 5 straight weeks. I should clean more this time though.

And I’m happy to say that a week or two into this experiment I woke up one morning with a new key insight about things that put several other topics I was trying to frame into a much better context. I freely wrote a 2-page outline of topics and points to go over in the coming months that had been bothering me for months. It always amazes me how much you don’t see or how much your creatively drops when you’re steeped in stress.

“Have you considered just… not worrying about any of this stuff anymore? Shouldn’t your health be your priority?”

I imagine this is a question. The short of it is this: I suspect part of my mental distress stems from an inability to self-actualize. That is to say, be exactly who I want to my utmost and do the things that I want to do. I think that the dissonance between where I am/the direction I’m headed, and where I want to be contributes to depression. Giving up things I love or want won’t make me better, it’ll make me worse. I have a vision that’s very different from what I’m seeing elsewhere and realizing that vision, however inefficiently, can only make me feel better about my life. Stripping away what you care about isn’t how you convince yourself to keep living.

OK, so enough about me, what am I working on (VB.NET-related)?

I feel very strongly that through the extensibility mechanisms already present in the various platforms we have all the tools we need to pursue continued innovation for the VB experience. I’m working on my particular vision of what that experience can be. I have to solve a few gnarly design problems before I have something compelling to show (no more prototypes for me!). At some point I’ll reach out to others with expertise in other areas to help out. If you’re feeling restless, seriously, go build your skills in doing anything. Extending anything. Making anything. Code, articles, whatever. Moreover, I think solving our current predicament in the VB.NET community is only 60% doing stuff and 40% psychological. This shift in mindset is long overdue and would have been necessary no matter what happened. My content for now will be about my own journey to discover both what I think the North star could be and my own personal North star as far as what I want for myself programming-wise for the next half of my professional life. I figure I should pull the curtain up sometime between the late-March and any time in May.

Happy 2021,

-Anthony D. Green

Resume Next

I’m always thinking and so of course I’ve been thinking a lot since my last post, though not as much as you might think, and certainly not as much as saying so might imply giving how long it’s been. I could have written this much sooner but against the backdrop of a world in chaos in so many dimensions it never felt like the right thing to be talking about. Economic freefall. Mass quarantine. Tens of thousands sick and worse. Brutality, protest, civil unrest, hope, and uncomfortable conversations. I could share some sensational imagery of smoke plumes over my own home community here on the South Side of Chicago (we’re ok, btw) but you get the idea. Maybe another day.

Today (before the Murder Hornets return), I want to talk about, ironically, a more lighthearted topic dear to my heart: VB. Believe it or not my last words on this subject were actually toned down about 10% emotionally than in the first drafts but in hindsight they were still maybe 10-15% more emotional than I would have liked, in hindsight. Maybe I’ll edit them a little one day. But I stand by my words. That we, the VB community, are in a situation that is unnecessary, inappropriate, poorly handled, disloyal, wasteful, and in contrary to the stated values I would like to believe in, expect, and see. And having said them, they’re said, and I’m not going to say them again really. I’m going to shift to what I think will/should/can happen next.

I’ve actually been thinking about this crossroads for a long time. Definitely since I left Redmond. It wasn’t entirely unanticipated in a broader sense and so I’ve had a lot of time to think about a sort of roadmap (or obstacle course, if you prefer). You see, when I write I usually have some idea of what the end of the essay will be—the message and some major stops along the way. The effort is in the finding of the precise route and the appropriate tone and context. And like my writing I can sort of see the endpoint (at least an endpoint), or at least some major stops along the way and a general flow and some tripwires here and there, but I think we’re all going to be finding the specifics of how and when it plays out over time. I’m actually super hopeful about it.

But this isn’t going to be a happening that unfolds in months, but a journey measured in years. And I’m totally cool with that because I think it matters (more on why in future posts). I absolutely know we’re going to lose a lot of folks along the way; I can’t control that and I don’t really blame them. We’re going to lose people to despair, to other languages, to other industries before it’s all done and that’s ok. If you look at the history of just about any other major language like C++ or Python you’ll see the ebbs and flows and I think we’re in an interesting place with open potential to go in any direction, but it’s not going to come easy or fast.

So, that’s what I’m going to be thinking about and talking about next. I’m going to be talking about next. And I didn’t want any of you reading this to think see any topic as “coming out of the blue” or wonder why or to think it’s just habit, or denial, or anything like that. There’s usually a method to my madness and a madness to my method.

Beyond me, of course, things are already happening. One alternate implementation of VB has been in the works for months already (it has nothing to do with me, I had no hand in it). There will likely be others. There will be forks and efforts and experiments and nothing and no one can stop it and we shouldn’t try. Many will live short lives and a few won’t. And all the while there will be a lot of competing viewpoints and agendas on what VB has been and what it should be and at times there won’t even be a clear and cohesive vision on either as we wander toward a future. So, I’m going to keep doing what I’ve always done: leveraging my years of experience to continue to provide context to our communal conversation.

In a reference to the role of Ender in later books I considered titling this post (and changing my Twitter handle) to “Speaker for the Dead” but I feared it was too morbid. Poetically, “the dead” that Ender first speaks for turn out to not be dead at all (not really a spoiler) but still too morbid.

Two years ago, I had to ask myself about what life after “Program Manager, Visual Basic, Microsoft” meant for some things that had been a huge part of my life for a very long time. So many things I still wanted to say, and do, and share. And I decided that my love of programming and VB belonged to me. It’s a thing intrinsic to my “self”, distinct from my job and I decided that I was not going to give up anything in my life that I legitimately enjoy. It’s mine. It’s me. It’s been a profession, but it’s also been a hobby and for far longer. It’s what I love talking about and teaching and also just how I like approaching everyday problems I run into and how I enthusiastically want to approach new problems. If you were to see some of my comments on VB Facebook groups, poor newbs get hit with a deluge of information because I can barely contain myself! So, once again, after asking myself the same question, I’ve come to the same decision. I’m not going to become less passionate and I’m not going to become passionate about something else because of someone else. My passion continues onward as I continue onward.

I know this is a little bit more rambling than my usual. I think my writing style is going to shift (and shrink) a little in the future. I’m probably going to get a little more personal too. Sorry. But when I start talking about whatever I’m about to start talking about I just didn’t want any of my readers to wonder why. It’s because I want to. It is intentional and very self-aware. It does have a point (or several), though the full picture won’t always or immediately be obvious.

“Is he forking the language!?”

No! And that’s all I’m going to say on that right now.

Lastly, I want to thank everyone who’s sent me an email or left me a comment over the last few months. I’ve seen most of them. Pretty much all positive. I’ve mentioned that I suffer from anxiety disorder and so I spend most of my day terrified of notifications and reading things online but you all have been awesome! You keep me inspired. I don’t always approve the comments right away, or reply, sorry, I will though. The folks on the vblang repo, still stoking the fires, you surprise and inspire me too. The new subscribers to this blog, and twitter, and even my YouTube channel… I’m flattered you assumed you’d hear from me again (you were right) and inspired by your support and interest. Thank you all!

Warmest regards,

-ADG

Part V: An Open Letter to Microsoft CEO Satya Nadella on the Matter of His Words and the Company He Leads

Dear Mr. Nadella,

I should set expectations that I don’t seriously expect you to read everything that I’ve written as part of this response; I don’t want to seem that presumptuous. You’re an insanely busy billionaire CEO of a very large organization focused on a lot of things right now and I’m assuming most of this will be digested by others but I hope you get the summary.

When you took over at Microsoft (I was then an FTE), I remember you saying you would “ruthlessly remove any obstacles that allow you to innovate”. I’ve detailed at length an obstacle to innovation.

This is not one of those situations where an irate customer makes a foreboding pronouncement about the financial direction of the company; you’re kicking ass. But Microsoft is a 1.1 trillion-dollar company with so diverse a portfolio and so extensive a sales pipeline that I genuinely believe you’ll make record profits no matter what. Any of us could cite a top of mind stumble or misstep, large or small, in past years that might have been fatal for another company but none of them, no matter their size, cost, or how humiliating has detracted from reaching that $1T number. So, I’m not going to pretend that doing the wrong thing here will have any impact nor am I going to assume that your continued success will indicate that the right thing must have happened.

Instead, I’m going to focus this letter on the character of your company, independent of its insane profitability, as it relates to your words. And because I have always been inspired by you since I was an FTE and you were leading Server & Tools (my BU), I’ve been paying attention.

In 2015, you inspiringly revealed that Microsoft’s mission was to “empower every person and every organization on the planet to achieve more”. It’s a mission I believe in. And in a lot of tech circles for a long time, the name Visual Basic has literally been synonymous with empowerment. Yet, last Wednesday (in the midst of a global pandemic) the VB.NET community was informed specifically that they would not be empowered to achieve anything more at all ever again.

In 2014, you said that a priority for you was “…zeroing in on what [you] can uniquely deliver to customers that is move valuable to them. [Your] goal is to build high value experiences…”. It has been my experience that the choice of programming language is quite possibly the highest value experience to a developer.

I know you care about bringing women and girls into computer science. This month is Women’s History Month (here in the US). This month we should be talking about the rich history of women (including women of color) in many positions of impact, influence, and leadership over the 30-year history of Visual Basic starting from version 1.0 to present and how those women’s participation in building Microsoft’s Developer Tools business should fundamentally alter the stereotype of what the people who create programming languages have and do look like. But that conversation sends a inconvenient mixed message when you’re moth-balling their legacy. Will it be told? These actions are not just about VBs future but in effect are minimalizing and rendering inconvenient a diverse and unique history.

I know you care about racial diversity in tech. I am a 35-year-old African-American male born, raised, educated, and currently residing (by choice) on the South Side of the City of Chicago (yes, that South Side of Chicago). Right now, I should be lining up opportunities to talk to neighborhood high schools (which predominantly serve African-American boys and girls) to talk to them about how the lifetime relationship I built with technology and your company through– and the skills I built from– Visual Basic (4,5,6,.NET) fundamentally changed my life, lifted me out of poverty, enabled me to empower others in my family and community, and led to me ascending to the top of my field as the Lead Language Designer and Program Manger for Visual Basic .NET at Microsoft. That’s the triumphant story I should be preparing to tell students who look like me and haven’t thought about computer science or don’t know if it’s for kids like them and from where they grew up.

But this little announcement, it puts an asterisk on my accomplishments. “I climbed to the top, but don’t get interested in my path too specifically. Maybe look around; don’t try to pick up the product I just told you I helped lead and build because that made you interested. Maybe you can start with it but you can’t go too far”. The one being installed over VB.NET isn’t the glass ceiling I thought I’d have to be talking to Black kids about.

In a time when everyone is trying to attract more people to our industry, to tech, to computer science and no one has really figured it out yet, it should be an all-hands-on-deck moment. Instead, Microsoft is taking players out of the game. Does that make sense?

And not to toot my own horn (I really don’t talk about myself like this much) but I was proud to be one of the few Black language designers of a major programming language let alone the lead one. But technically since the future of language evolution has been unilaterally and universally rejected am I even one anymore since the open source community where I’ve been prototyping and contributing language design proposals in continuance of that rarefied skillset has effectively been shut and myself implicitly disinvited. You can’t be a designer if there’s nothing to design; I think I’m just some guy now.

And I know you care about open source as well, stating in 2018 that Microsoft was “all in on open source”. But even without that quote I know it because I personally know the role you had in open sourcing Roslyn and with it C# and VB.NET. Which is why it is disappointing that this posture of unilateralism from some within Microsoft shows a misunderstanding of the spirit of open source. This “plan” is a violation a fundamental right of the community of an open source programming language to self-determination and is steering one of Microsoft’s earliest high-profile open source projects, the VB.NET language, toward a situation which can only be regarded as a failure of open source.

Is it that it’s a New Microsoft; unless it needs to briefly be the old one again?

In 2015, you said “We want to move from people needing Windows, to choosing Windows and loving Windows. That is our bold goal with Windows.”

So deeply did that statement penetrate my psyche that apparently, I subconsciously extended the spirit of it to a broader mandate that Microsoft wanted to move people from needing Microsoft, to wanting Microsoft, to loving Microsoft, and have remembered it that way since. Fortunately, also in 2015 you said “Customer love” was a better sign of success than revenue or profit so I’m covered.

But why should others seek to love you if we’re now witnessing the natural conclusion of love? If getting people to go from needing Microsoft to wanting Microsoft to loving Microsoft is in fact a goal then right now this plan going in the wrong direction. You have customers who love you already, and they have been wanting you for a while now, but this course of action can only reduce them to a state of resigned need. What comes next?

What’s the value in customer obsession if obsession turns to abuse?

In 2017, you said you came to “… the realization that in many cases, customers have already chosen to work with you and yet you consciously, or unconsciously, abandon them to go work off on the new shiny object is a mistake”. And I have believed that too and I love you for saying that!

But it’s natural for customers to wonder what’s the point in Hitting Refresh when they keep getting the same response.

In 2019, you said success comes from empathy. Customer empathy is a term I’m hearing a lot lately and that’s a great thing!

Having said that, if “The .NET Team” couldn’t see this coming—if they felt that they could make this decision and that the relationship between Microsoft and its VB.NET customers wouldn’t sour, that developer relations would be neutral or somehow improve or just adapt to a new normal, they can’t be said to have customer empathy.

And if they do in fact have customer empathy and did see it coming but then did it anyway, you have a different problem.

And finally, in 2019 you said, “the power law here is all around trust because one of the keys for us, as providers of platforms and tools, trust is everything” and went on to say, “if you have trust, you will have exponential benefit. If you erode trust it will exponentially decay”. Also in 2019 you said, “You can’t claim trust, you have to earn it every day”. You get it—Microsoft Runs on Trust.

But there are a lot of ways customers trust you and it can’t be that trust is just a matter of encryption strength and data privacy policies. Why should customers associate trust with Microsoft when the pervasive narrative that has overshadowed the VB.NET community for 18 years—literally that Microsoft cannot be trusted, that betrayal is coming sooner or later, be afraid, that we should distrust and prepare, is the narrative that’s proving out correct?

So, Mr. Nadella, sir. My only non-rhetorical question to you is this: What are we, the billions of your customers around the world, and your tens of thousands of employees and partners to make of the words; when representatives of your company needlessly and cavalierly undermine the integrity of those words with actions in contravention of everything you and other leaders under you have publicly and internally stated that you value?

With the highest respect and sincerity, and genuine confusion,

Anthony Diante Green
 Former Employee and Current VB.NET Customer

Preface | Part I | Part II | Part III | Part IV | Part V

Part IV: Visual Basic .NET

There’s an interesting linguistic phenomenon that happens when a brand becomes an archetype for a model or class of thing. No, not like “Googling it” but like when you say “The Cadillac of Smart Phones” or “Netflix for Planes” or the “Champagne of Tea”. It means your brand has become so synonymous with a unique quality that things in other categories can be defined in terms of you.

When someone calls something “The Visual Basic of X”, it implicitly sets certain expectations.

And more recently I’ve heard phrases bandied about like “The Visual Basic of Mixed Reality” or “The Visual Basic of Machine Learning”. You may not know exactly what that looks like, but you know what it means. When I say Nintendo’s “Super Mario Maker 2” is the “Visual Basic of 2D Platform Games” you understand how in 11 days it enabled the creation of 2 million levels by its users.

You can’t buy that kind of notoriety.

There is no “The C# of Building a Custom Car” (What does that even mean?)

If I said I was making the “Visual Basic of Small Business Ownership” you’d applaud. If I said I’d created the “Visual Basic of Becoming a Landlord” you’d say right on! If you can make anything The Visual Basic of doing that thing, we understand that to be good.

Well, VB.NET is the Visual Basic of (.NET) programming languages. How does it make sense to just set that brand on fire?

The Role of Women in the History of VB

I wish this had been highlighted sooner or under better circumstances and as I’ve failed to say it before I bear some responsibility for that. Because it feels like it could be the last meaningful opportunity, I’m making sure it goes on record while people are still watching.

Unlike most popular languages, VB doesn’t have any one “designer”, “founder”, “boss”, or “super star” associated with it for all or most of its life. When I hear about other programming languages, I notice that there’s a certain… stereotype to the pivotal and high-visibility people. They tend (there are exceptions) to be older, male, and usually Caucasian.

Because of its history VB (6 and .NET) has been touched in significant ways by a lot of people. And a lot of those people are women. It’s women’s history month, after all. Just an example of the women who’ve been on the VB team and/or had significant impact on its growth or community:

  • Laurie Corrin, Developer, the 3rd person on the VB 1.0 team, made Controls happen. Now Math & CS Educator
  • Nancy Schoeggl, Test Lead, VB1.0
  • Sarah Richie, International Test Lead, VB1.0-4.0, changed localized testing forever
  • Patricia Friel, PM, VBA, refused to go by “Pat” to make her gender ambiguous in emails.
  • DeeDee Walsh, PM, VB6
  • Julia Liuson, Developer -> Development Manager -> Product Unit Manager of VB.NET, now Corporate Vice President @ Microsoft, made language innovations like XML literals possible.
  • Amanda Silver, Lead PM Language, Compiler, Editor, & Debugging, now PM Director @ Microsoft, made LINQ happen
  • Beth Massi, PM, now board member on the .NET Foundation
  • Lisa Cohen (née Feigenbaum), PM, math genius, now Principal Data Scientist Manager @ Microsoft
  • Karen Ng (née Liu), Group Program Manager, Led project Roslyn, most significant investment in VB.NET in modern history -> Chief of Staff of Visual Studio
  • Sarika Calla, IDE Quality Lead
  • Julie Lerman, Programming Ninja, MVP, CS Course Author, DDD SME
  • Deborah Kurata, Rockstar Programmer, CS Course Author
  • Kathleen Dollard, Master Programmer, like 10-time MVP of the year -> PM for VB.NET
  • Richa Saxena Verma, SDET, Roslyn
  • Ying Peng, SDET -> SDE, Roslyn
  • Sophia Salim, SDET, VB10
  • Lakshmi Priya Sekar, SDET, Roslyn

And that’s just the few I could quickly pull off the top of my mind. I don’t have to room to tell the stories of these women and their impact on the team from VB1.0 to VB6 to VB.NET along its whole life. I don’t even have the space to summarize each of them and it would be immoral to bury those stories in the midst of this post. I feel bad only highlighting the roles of a few and really hope there’s an opportunity to tell more of them in a context that is inspiring rather than a painful reminder.

And that’s just some of the women, including women of color, who have held positions of impact, influence, and outright authority in every role on VB over its entire life (and have gone on to do great things since!). We should be talking about them, and not just because it’s Women’s History Month, but because they completely challenge the visuals of what the people who make programming languages and who are rock stars in programming language communities look like. And that history is Visual Basic’s history and it’s such an incredible asset, in my opinion, to showing a diverse world a different perspective on programming languages.

Fertile Soil

I sit in maybe 5-10 Facebook groups for VB users. Everyday I see questions. Questions from new developers. Questions from students. Questions from developers all over the world, many of whom don’t speak English as a first language. If you look at the MSDN forums for VB, you’ll see people asking questions, including rookie questions. Microsoft has stated at least as of 2017 that VB has “twice the share of new developers as it does all developers”. Meaning that even if … oddly, you assume there’s some fixed % of the total potential .NET developer base that’s genetically predisposed to being VB developers and that number just goes up or down, proportional to the total number of .NET developers (no reason to think anything works this way), VB grows faster that that passive increase. Meaning, it’s growing. It has the capacity for more growth.

As I mentioned in Part III, VB could have a higher net promoter score with a fixed perception of being loved so there’s even more growth potential.

My last story on this point. Circa 2016 a man named Matt, who work(ed) at Microsoft somewhere not at all near me, reach out on Outlook. He told me his son, Aidan, who was 11 at the time had discovered VB.NET somewhere, become super passionate about it and he wanted to know if he could bring him round for even more STEM inspiration with anyone on the team who had time.

Mads gave the kid an awesome historical perspective on programming. And I wanted him to meet Lucian, then VB Language PM.

I walk in Lucian’s office, he says (in his English accent) “I’m sorry Anthony, I’m very busy right now I really don’t have a lot of time”. I said, “There’s an 11-year-old boy here who’s started learning Visual Basic and his dad wants him to meet some folks on the team”. And Lucian said, “Give me 15 minutes” and then preceded to give him a kickass demo on GPU-accelerated fractals and high-performance falling sand animations in a Windows 10 app written in Visual Basic.

Then Aidan showed me his code—a Windows Forms app eerily similar in intent to the kinds of apps I was building when I was 13-15 in VB4. He was making similar mistakes to the ones I had made and I left the whole event maybe more inspired than he did.

I’m 35. This narrative that VB is just older persons at the tail end of their careers is not only ageist, non-inclusive, and disgusting but also inaccurate. This idea that there are no new VB developers or no growth potential is observably false if you bother to look.

We have a language whose syntax naturally lends itself to the possibilities of speech-to-text and text-to-speech synthesis that might open up more programming opportunities for the physically impaired and we’re just not even going to explore that… just because?

Even right now, VB.NET is in the Top 10 on the Tiobe index. It’s been in the top 10 pretty consistently. I know there are mixed opinions about the index but it is a thing other developers seem to care about. By contrast, (and I mean no disrespect to these awesome languages) F# is #32. TypeScript is #43. I’m not saying anything about those languages but why is VB.NET perceived as “on its last legs”, “a dying breed”, etc.?

Make no mistake, there is fertile soil here.

Technological assets almost any other language would kill and die for

Visual Basic .NET is a world-class language with such maturity in the infrastructure of the language. Just the overload resolution and type inference alone are worth years of development time. A modern compiler architecture along with an extensible set of platform APIs—Roslyn—built by the most brilliant minds in the industry that cost millions of dollars and 5 years to develop. The parser in VB is designed in such a way that makes certain experiences and features that would be prohibitively costly even in C# relatively trivial in VB. And it’s all open source! VB has a slick IDE, a great debugging experience. These are assets other non-Microsoft languages (and a few academics) would kill to have, other non-Microsoft languages are investing heavily to achieve, and VB already has them.

As a technologist, it is capricious and a criminal waste of innovation and innovation potential to take assets that virtually anyone else would die to have and just say “meh”? Because you can?

All of the ingredients for Greaterness

So, in conclusion: Visual Basic .NET is a world-class, open-source, cross-platform programming language which continues to attract new programmers across all ages, geographies, and genders, which I am consistently told cannot be made to succeed despite having a loyal if not zealous user-base looking for license to love and promote it, having amazing tooling, being on a great platform, from a great company, with consistent top-10 popularity, metonymic brand recognition in the industry for approachability and productivity, a history exhibiting the kind of diversity that documentaries and films are made about, having tons of potential for unique innovation in language and tooling, and being built on top of a brand new multi-million dollar tech stack developed specifically for it by the most brilliant minds over 5 years specifically to enable fluid innovation in language and tooling

!?!?!?HOW?!?!?!?

-Anthony D. Green

Preface | Part I | Part II | Part III | Part IV | Part V: An Open Letter to Satya Nadella

Part III: From Loving Microsoft, to Wanting Microsoft, to Needing Microsoft, to…?

A Love Story

I have loved Microsoft for most of my life.

(Don’t worry, this post isn’t just a clip show of my life, there’s some good stuff in the middle)

I remember in 1999, I was a Freshman in high school, and I wrote (and read aloud) an essay explaining the superiority of the open Windows hardware ecosystem to that of the proprietary Apple Macintosh. I tried to write a follow-up essay but the class groaned and so I wrote about Shakespeare.

Here’s a picture of me circa 2004—I would have been 19 or 20. I’m wearing a VB.NET “World Tour” T-Shirt. I remember taking about 3 hours of buses and climbing a fence to get from my home to the west Chicago suburb where Microsoft’s local office is to attend the .NET User Group meeting where I got that shirt.

I remember taking personal time to go to the swanky Expression Studio launch event, and the Windows XP Tablet PC event, and a Group Policy Management seminar when I was basically a young kid with barely two nickels in my pocket and no reason to be there. I’ve had a Windows Mobile device or Windows Phone almost exclusively since 2005. People would ask me why and I’d say “I like having a phone I can program”.

I loved .NET, VB, and Visual Studio so much that I begged my uncle to use his credit card to spend the $12.95 to get the 180-day Visual Studio .NET 2003 trial DVD shipped to me and that built relationships with other Microsoft products such as SQL Server, Windows Server, and IIS.

It’s possibly the only company, the only team, and the only project that could get me, a lifelong Chicagoan to even consider moving to the other side of the country, away from my family, for any length of time.

Which is why it’s so painful for me to consider that that love could be the worst decision of my life. Literally all of the pain and frustration I feel isn’t from merely using Microsoft. It’s from loving Microsoft.

And I’m probably not alone. Satya once said he wanted to take people “from needing Windows to choosing Windows to loving Windows”. I guess, in my head I (perhaps wrongly) expanded that to taking people “from needing Microsoft, to wanting Microsoft, to loving Microsoft” but so what? Should I love one part of Microsoft and distrust another? Shall I love your right arm but not your left foot?

In any event it seems like we’re going in the wrong direction. Microsoft has a group of people who fervently love them (and have loved them even when it meant given up other OSes) and it feels like they’re problem solving how to “get them to love us less, they love too much”, “wouldn’t it be great if they loved us less enough to be open to using other tools instead of the apparently addictive substance we make that they want to use exclusively until the end of time”.

And with choices like these those people (like myself) will go from loving Microsoft to just… really wishing for stuff. Not expecting it. But kind of desiring it. And eventually, not even wanting it but just … dealing with what you need because it’s what you have already. And when “The .NET Team” says “We’re not going to evolve the language, enjoy using it as it” they’re in effect saying “We want you in that 3rd bucket of people who just need us”. But what comes next when you don’t need it? Apathy? Hate?

Behavior unbecoming of being loved

There’s a notion I observed while in the halls of Redmond. I don’t know if it’s because the company has so many college hires who have never lived outside of the Microsoft bubble. Maybe it’s an engineering thing. But there’s an assumption (they aren’t conscious of it, I promise) that if you block off certain things to customers you create a path of least resistance for them to do the things you want.

So, for example,

  • If there is no express edition for Windows Desktop, people will make Modern Windows apps.
  • If we take down the WinForms videos, people will start programming using XAML.
  • If Xbox One is online only, people will buy Xbox One and stay online.

The problem with that thinking is that it’s manipulative. Would you ever love someone who curtailed your options in order to get you to behave the way they want?

The basis for this faulting thinking is the belief that you’re entitled to that love to begin with. It’ll just come to you whether you deserve it or not and it’s just about deciding where it goes. Or as PlayStation-fan buddy describes certain Xbox behaviors: “The assumption that all roads lead to Microsoft”.

I’ll give you another example. In 2010 there was a bug in the Visual Basic runtime around the feature that makes it super easy to make single-instance Windows Forms applications in VB. The way it works is that when you open an app it opens a socket and listens and the next instance that opens tries to connect to that port to check if an instance is already running and terminates if it is.

The problem with that approach is that in an untrusted security environment (or, I think, with the Windows Firewall on) this throws exceptions. So, the solution was to use IPC (inter-process communication) rather than sockets.

In 2012 (I was on Roslyn at the time), I remember the team that owned that component deciding not to fix the bug. And the rationale was “Once Windows 8 comes out everyone will just make Windows 8 apps and there won’t be any new WinForms apps so why does it matter?”. They genuinely could not imagine that everyone wouldn’t immediately drop whatever they were doing and run to what was next simply because it was being made. They bet on it. They weren’t malicious. But, is that reasoning becoming of being loved?

I question if the thing that would be best for Microsoft (and I swear, not something they’ve ever uttered even privately that they’re going for) is obedience.

Love is hard. You have to earn it. You have to keep it. You can’t always control it. Obedience is easy. It’s definitely not a universal problem in the company, but what “The .NET Team” is in effect saying is, “Obey or begone”. I do not see how that gets them to love. I do not get how other people love someone who behaves that way to people who already love them.

I really want this company to behave like someone deserving of love, so that others will love them as I have.

The desire to be loved

In 2016, I along with colleagues in the UX research group at Microsoft conducted a study of VB developers. We pulled from a number of sources, sent them surveys, looked at the results, scheduled interviews with a few dozen. One thing we were trying to compute was the “Net Promoter Score” of VB—a metric that was all the rage at the time and tells you how likely customers are to recommend your offering to others. There were a lot of folks who rated 10 “would recommend highly” but also plenty of folks who were what they call “passives”. They were scoring VB just below the point where you’re considered a promoter. And there were a few people who were outright “Would not recommend!”. Looking through the raw survey verbatim feedback of why they said what they said, a majority of respondents who didn’t score 9 or 10 said some variation of “Love it, would otherwise recommend it, but wish Microsoft would show it some love”. In other words, it’s not language instability, or the phase of the moon, or the average IQ of VB developers, or an increasingly git-based world that hurts VBs potential. The most commonly cited reason for not promoting it—for VB not growing faster is Microsoft.

And you’d be surprised how often the word “love” appeared in those verbatims. Many developers either said the loved the language or wished Microsoft would show it more love. Not, “I wish Microsoft would show us a set of stable templates in our core scenarios” but love.

A company should not be its customers biggest problem, perceived or actual, and if you think I’m exaggerating, consider how many problems VB.NET developers had on March 10th this year and how many they had the next day and who was entirely responsible for the delta.

Trying hard to stay on the platform

I’m trying really hard to stay on the platform. Writing this much and prototyping for open source this much isn’t free. This is not about recent events, but for the first time in my life I’m more open than I’ve ever been to the looking at languages beyond VB, IDEs beyond Visual Studio, platforms beyond .NET, and even OSes beyond Windows. But I’m trying.

Right now, there’s a whole bunch of folks around the world that just saw a post on the .NET Blog who just want to keep loving Microsoft. They just want to snuggle up to it, use its stuff, and give it their money.

If someone wants to love you, you should let them.

I want to keep loving Microsoft too. I just wish they’d let me.

-Anthony D. Green

Preface | Part I | Part II | Part III | Part IV | Part V: An Open Letter to Satya Nadella

Part II: A Direct Response

Inappropriate

For starters, I just want to say that this statement on .NET 5.0 seems ill-timed. The nature of the message contrasts in a very unflattering way with the kind of reassuring supportive messaging other companies I interact with have been putting out during this time of worldwide crisis. I can only hope that this timing is a coincidence and not any intentional decision to take advantage of a social media trend and a news media cycle currently preoccupied with an admittedly more important global pandemic.

Disingenuous

Next, I want to address some disingenuous language you’ve sprinkled in here and some other language not used but evoked here which I’ve heard floated in the last year or two in places, testing out reactions.

The idea that Visual Basic’s “stability” is “valued”. Well, of course! Everybody enjoys stability. It’s kind of part of the Microsoft brand. What exactly is the implication here, that … if we add one more feature to VB.NET… the users will rebel and… leave? To C# (and you desperately want to prevent that)? To Java? What? They’ll stop upgrading to VS for fear of new features creeping in? And at a greater rate than those who won’t upgrade because they have no reason to? They’ll rebel more than they do when you tell them you’re not evolving the language anymore? How did you do the math on that? Was there a survey!?

“The most important thing is that it keeps doing what it’s been doing”

Was instability on the table? How does this contrast with the other .NET languages? Is that the new C# tagline? “C# – breaking stuff, all the time”. “F# – too bleeding edge for compat; the F stands for free-and-loose”. It’s a meaningless thing to say because for its entire life since 2002 the evolution of VB.NET has been concerned with stability and compatibility, like all of the .NET languages.

This is like when discussing hiring from underrepresented groups someone says “But of course the most important thing is that they’re qualified!”. It’s disingenuous. It prefaces or excuses the inexcusable by putting it next to a statement that’s universally considered sound and positive but the impacts of the thought next to it are anything but sound and positive.

This is made more inappropriate by the fact that, as I point out here, the .NET Team (no quotes) is generally not part of the VB.NET community. You, a group of people not in my ingroup, telling me what matters to me and then using that thing you told me I value to discount my opinion is condescending and inappropriate. It would be so in every other context and it’s still so here.

“People aren’t clamoring for new features”

You have numerous channels for user feedback where currently and since its inception, members of the VB community have and do communicate constantly their desire for evolution in language and tooling because that is also valued.

Again, it’s like someone saying “But the biggest contributor to carbon emissions is going to be the industrialization of China and India, so nothing we do matters anyway”. They’re not putting that cherry-picked fact forth because of their genuine heartfelt commitment to disseminating objective truth but because that particular truth doesn’t ask anything of them today. It allows them to keep doing what they’re already doing. And this narrative you’ve constructed about stability and compatibility is an equally disingenuous notion that doesn’t ask anything of you.

More Inappropriate

If you look at the F# language suggestions repo there’s a section on the design process. And in the section on new features it says this:

“Stability is a virtue”

Stability is valued elsewhere and yet F# marches on. They didn’t need to make a sweeping statement sandwiched in the middle of a post on how “F# planned to be in next release of Visual Studio”. They just keep the language stable because that’s leadership.

I worked on VB.NET for 8 years. I never needed to make a sweeping statement about evolution in general to be responsible, keep it stable, or compatible. I’ve personally argued against or killed plenty of unnecessary features that were only proposed because that feature was going into C# but just didn’t make sense in VB, wasn’t needed, or broke compat, etc.:

  • Expression-bodied properties & methods?
    Stylistically inconsistent, waste of time; long tail of follow-up asks to make it consistent.
  • Primary constructors?
    Wrong design for VB.
  • Deconstruction statements?
    Too early to tell given named tuple elements.
  • Declaration expressions?
    Didn’t fit.
  • Async void?
    Didn’t need it, tried to kill it and failed.

So, for instance, when thinking about “evolving”, what about a feature like Await being allowed in Catch & Finally blocks? It’s a feature I know customers clamored about when it was cut from VS2015 due to the unplanned schedule contraction detailed here. Logically, it was an approved and desired feature that should have rolled over to the next release but didn’t make it and should have rolled over to the next release after that and still hasn’t made it.

If right now you’re thinking “Oh! Forgot/didn’t know about that”, it indicates to me that you’re probably not the body who should be making sweeping statements about the language’s evolution.

When the implementation of ref returning methods was too invasive and incoherent with the VB design I proposed a tailored subset and then accounted for that decision publicly. I signed my name. As I did on every feature request on Connect, UserVoice, or GitHub that I’ve ever responded to across hundreds of customer interactions. I know Mads has been similarly accountable for C# and Don accounts for F#.

The “The .NET Team” attribution on this post illustrates precisely the lack of accountability when there isn’t a VB Team that I describe here. Who is “The .NET Team”? If I have questions, who do I reach out to? If we’re at a conference do I just walk up to anybody and start talking? If this decision turns out to be really bad, who is held accountable for it? Do we just get a whole new “The .NET Team”? Like, all of you?

I suppose that it’s consolation that you didn’t scapegoat Kathleen on this one. I watched her tirelessly advocate for VB, including thoughtful language evolution for 8 years. We don’t always agree but she’s been fighting this fight longer than I have. We know how long she’s been at Microsoft and I’ve seen what happens when newer PMs take the fall for other people’s decisions so I’m glad at least that you didn’t drag her name through this mud pit you’ve created.

You should be able to articulate the principles, the design patterns, and the style of the Visual Basic .NET and how any potential new feature caused by anything either fits or doesn’t fit into that style, or is incompatible. And if don’t feel capable of that then you definitely aren’t the body that should be making sweeping statements about the language’s values and evolution.

You’ve presented this blurb couched in language which suggest stewardship with intention and thought when it precisely promises the absence of thought and the absence of intention. This post is illustrative of precisely why leadership of an open source language from people outside of that language community is wrong.

More Disingenuous

But let’s go back to my example of Await in Catch/Finally; a feature which illustrates that this statement isn’t the result of a shift in thinking but attempt to normalize or rationalize a system which is already horribly broken.

It’s a feature we (because I was there) costed at about a week. It had been done for C# already but had to be cut in VB due to a schedule change. It’s a known quantity of low cost that adds no new syntax to the language, probably has no IDE work, and actually makes the language more consistent. This would otherwise be the least controversial addition to the language. This lowest hanging fruit has been out of reach for 5 years.

Now let’s take something that was done. In VS2017 Visual Basic, like C#, received updates after RTM. One such update was non-trailing named arguments. A great feature that makes VB code more descriptive. The problem is that as an out-of-band feature, in order to use it you had to update the project language version to 15.5. No UI for doing that. No dropdown in the project properties.

So, you’ve somehow worked yourself into a situation where you’ve not only been unable to deliver small, well-understood features, with no new syntax or conceptual burden, that were already agreed upon and promised, but you’re also unable to ship any UI to enable customers to use the new features you have added. Which is an indictment of your process. The only thing that’s changed here is whereas before you were unable or unwilling to account for missing features, now you don’t have to.

Continuing on this thread, in C# there was a quick-fix (a feature pioneered in VB) to update the language version from within the editor. It made 150% sense for VB, but required an API change within the bowels of Visual Studio to pass some information from one service to another in order to make that fix possible. But the bureaucracy made even that impossible. The only option for VB users was to unload the project and manually modify their project file: the most un-VB experience ever.

And in VS2019 you cut temporary “zero-impact” projects, a feature that QuickBasic, VB6, and VBA all have and most other Microsoft products have an analog to. I open word, I can start drafting in a new doc without saving to a particular location. I can even work on VBA macros without saving. Same with Excel, PowerPoint, Notepad, Paint, etc. It’s an established paradigm.

Speaking directly to my point about whether a C# body can understand, respect, and defend VB experiences: this feature was specifically added back to VS2005 after massive feedback from VB users that creating “ConsoleApplication238” was a big takeback from VB6. It was available to C# for years but off by default and on by default under the VB profile, including the very successful VB Express Edition.

I literally use this feature every day: Spinning up temporary projects to help other VB users on the Internet. Do you know how many throwaway projects one makes in a day answering questions on VB Facebook groups? VS2019 literally broke one of my critical workflows and you weren’t even slightly apologetic. You didn’t care about stability or compatibility or the spirit of VB then. But what you probably cared about was NuGet and that zero-impact projects didn’t support it, and you didn’t want to do the work to make that happen, and so dismantling a core VB experience of 12 years was an easy decision for you.

So, here’s my problem and why this post lacks credibility as any genuine stewardship from the thoughtful “good guys” you try so hard to present yourself as with these crafted words. It is evident that you don’t truly understand, respect, or care about VB’s unique qualities or vantage point. You only use its uniqueness and its style as a bludgeon weaponized against its community: a nebulous reason to do or not do whatever you want. Which, again, is an indictment of a process where C# developers lead the VB language.

You can’t (for systemic reasons) or don’t want (because you’re not VB developers) to work on VB. I also don’t want you working on VB. It’s demonstrably harmful and it was harmful long before this statement. Far more harmful than whatever “stability” or “compatibility” boogeymen you’re protecting us from. But there is a working model for liberating yourself from that responsibility that doesn’t involve hurting me. I want you to be only as involved and concerned with VB as you are and have always been with F# and through the same means. I’m sure they equally thank you for that level of autonomy.

Conclusion

“The .NET Team” is effectively a body of C# developers. C# developers should not be making sweeping declarations on the future of VB.NET because none of them have to live with those decisions. You’ve attempted to present a narrative of stewardship under the color of legitimacy but your statement on “Visual Basic support planned for .NET 5.0” is replete with questionable timing, questionable reasoning, questionable plans, from a questionable source with questionable history and just a general display of questionable judgement. The current system is broken and it’s failed. And your statement is not the solution to that brokenness, it’s just the latest symptom.

When you’re doing something righteous, well-reasoned, and that reflects honorably on you and your company, no one will be suspicious of why you published it in the middle of a global pandemic, and you’ll feel confident enough in it to sign your name.

-Anthony D. Green

Preface | Part I | Part II | Part III | Part IV | Part V: An Open Letter to Satya Nadella

Comments have been disabled for this post. If you have feedback on this topic specifically it belongs here, on the .NET Blog.

Part I: A Fundamental Right to Self-Determination

In 2014 Microsoft open-sourced Visual Basic .NET as part of the “Roslyn” project. For its entire life before that VB (both Classic and .NET) had been a closed-source proprietary language. And in a timeframe where standardized languages and open source languages were establishing themselves as the new normal, VB caught a lot of flack for that. But regardless, it was a product. The owned product of one company: Microsoft. Some people buy it, some people don’t. It sucks if they stop making Twinkies but Twinkies are a product produced by Hostess.

But, when Microsoft “hit the button” on pushing that code to CodePlex (later moved to GitHub) with an Apache license they fundamentally changed the nature of what Visual Basic .NET was. It is now an open source programming language. Not a product in a portfolio.

And every community of an open source programming language, by definition, has a fundamental right to self-determination. That’s the whole point. It’s implicit in the right to fork that the community has an interest in shared ownership with the project leaders (not owners). It’s got a whole “consent of the governed” vibe to it. It’s why they’re called benevolent dictators. It’s why Don Syme styles himself nobly as a contributor, not a puppet-master. If there isn’t a right to self-determination what does it even mean to be open?

“You can work on exactly what we say in accordance with our roadmap which is dictated entirely by us in our interests based on our priority, capacity, without your input or consideration for you and don’t even bother thinking about or talking about anything else because it ain’t gonna happen, nuh-uh it’s been decided already” isn’t open source; it’s just free labor.

Further, the open source model only works because the project leaders are part of the community. They don’t sit outside and above it. Linus isn’t a Windows community member. The folks calling the shots on Python aren’t predominantly Lua developers. Don may be a phenomenally brilliant F# developer, with years of knowledge, experience, and technical skill that enables him to lead the F# language but he derives the legitimacy of leadership because he is an F# developer. Same goes for the rest of the F# team @ Microsoft. Only when project leadership is part of the community does that leadership uphold the fundamental right to self-determination because they are part of the self.

The open-source programming language VB.NET’s developer community likewise has a fundamental right to self-determination and satisfying outsiders cannot be a perquisite to self-determination, by definition.

A peculiar quality

This is a writing about Visual Basic, specifically VB.NET, and a peculiar and seemingly unique relationship it seems to have with the rest of the programming world and particularly with its sibling language C#. I’ve wanted to write an article for a while on toxic behavior in the programming community in general, and specifically in some parts of the .NET community. This writing touches on that subject but I’m going to try to keep it focused on the role a particularly toxic instinct should not play in this discussion or really any discussion about VB.NET. The unique quality of VB is this:

Visual Basic .NET is (to my knowledge) the only programming language on whose community other programmers who are not part of that community feel entitled to an opinion or need and that that opinion or need carry equal or greater weight.

This is particularly true of C# developers and all the more dangerous because of the disparity in size between the two communities. And because the “The .NET Team” in Microsoft consist almost exclusively of C# developers (with notable exceptions on Roslyn), I’m including them in the broader C# community.

Unsafe spaces

Whenever there is any discussion between VB.NET developers in any shared space, on a blog, on a mailing list, on Twitter, in a presentation, in a meeting room, there is almost invariably a C# community member who not only has an opinion on VB.NET and VB.NET developers but feels obligated to share it on equal footing and with equal weight to the members of the VB.NET community and the presumed, ingrained expectation that that opinion be respected.

This is not normal. Java has existed for most of my life. It would never occur to me to pop up on any blog post about Java at all and say anything, especially anything negative, about Java developers. What’s Ruby up to these days? I don’t know. When someone tweets about JavaScript there isn’t any foul impulse swelling within me that just has to escape. I’ve never seen a VB.NET programmer make a sweeping, offensive statement about F# developers or their feelings about the future of the F# language let alone present that statement as if it’s a legitimate contribution to a discussion about F# or within that community.

What I love about F# and have observed inside and out of Microsoft is that most people seem to think they aren’t smart enough to contribute in any way to a conversation about F#. It’s a multi-paradigm language with all the same features and capabilities as C# but they just can’t reason about it. They are quiet and humble because they’re afraid they’ll open their mouths and say something about something they don’t understand and look bad. At worse they’ll say “that looks confusing” and just sort of wander off. They don’t hijack the conversation.

Ex-officio my role as VB language PM, I sat on the C# design team for a while (just as I asked the F# PM to sit on the VB design meeting). I had opinions. I offered suggestions. But I never advanced the idea that I was more than a guest in that conversation or that my feelings about the design of C# or certain features were important; because I’ll never have to live with the definite assignment rules (that I dislike).

Yet on the matter of VB.NET there are seemingly hundreds of thousands of C# developers waiting in the wings at every turn, dying to make proclamations and it is exhausting and toxic and literally leads to VB.NET developers simply not participating in mixed-company settings.

I’ve tried to create or maintain “safe spaces” for VB.NET whether that was the team blog, or the MSDN forums, or the separate vblang repo because I’ve seen how just by virtue of numbers even the most well-intentioned C# voices drown out the VB.NET ones. There was a fairly active VB mailing list I was on for years. Plenty of VB discussion. Sometimes positive, sometimes a little heated, but active. And when we elected to merge that list with C# and F# to create a unified “.NET list” I watched the VB voices just fall silent after every time one of them spoke on a VB matter 5 non-VB programmers would jump in. When it comes to VB, everybody wants to contribute their own fears, uncertainties, and doubts, and the deluge from the larger numbers is stifling the voice of the actual community members.

A big part of the reason I don’t engage on Twitter as much is because for any VB related tweet there’s high percentage chance (too high for me) that some non-VB developer will see that as their invitation to shape the conversation about their feelings. “I feel VB developers are old, fight me or I won’t stop tweeting you!”. “I’m not a VB developer or haven’t used it for years so I don’t really care one way or another, but, I saw this tweet/blog and thought it was my opportunity to take up time, space, energy, and oxygen”. “I’m happy for your performance numbers, and Imma let you finish, but how do you explain these CareerBuilder numbers for VB.NET jobs in my state? Do the data science for me and you can continue having thoughts or enjoying things”.

Check your privilege

A few years ago, a VB MVP made a rather controversial comparison. It was provocative and more than a little offensive so I’m not going to restate it, but in my own time I have come to an observation which quite unintentionally evokes a corollary:

C# developers are the privileged majority group of .NET developers.

When I say this, I don’t mean “most of .NET is C# developers”. I mean that if you look at the behaviors of privileged subpopulations in “the real world” (pick your analogy), the C# community exhibits an alarming number of parallels to certain negative behaviors of those groups. I don’t know if having lived my whole life as a Black man makes me hypersensitive to these parallels or if others have noticed this too.

I say all of this to ask, if you’re not a VB.NET developer, and especially if you’re part of the C# community to keep in mind the fact that you are outside of the VB.NET community. This isn’t about you.

If you want to show support, show support. But outside of that, have respect and humility for the fact that the people impacted by these decisions should be the people shaping the discussion around the decisions. You literally have no skin in the game.

  • It’s not incumbent on us (VB.NET developers), to convince you (C# developers) that we actually experience pain for you to stop doing thing things we ask you not to do because it’s offensive.
  • It’s not incumbent on us to convince you that we’re smart enough to do anything.
  • It’s not incumbent on us to convince you that we will succeed at open source in order to be allowed to proceed with our already open-sourced language.
  • It’s not incumbent on us to convince you that we like the web or mobile.
  • It’s not incumbent on us to convince you that we hit “New Project” often enough.
  • It’s not incumbent on us to show that we switch jobs often enough to keep up with the new skills.
  • It’s not incumbent on us to prove that there are any new VB.NET programmers coming into the world (there are).
  • It’s not incumbent on us to prove that the apps made by the new programmers are real enough or complex enough or connected enough or have enough concurrent users or generate enough revenue or sales volume.
  • It’s not incumbent on us to provide a map to all of our social communities on every site and every IRC channel in every language so that you can survey them to see if the activity level meets your idea of living.
  • It’s not incumbent on us to convince you of particular year-over-year growth numbers projected out over five years for you to allow us to continue being.
  • It’s not incumbent on us to program how you program or how you want us to program or to adopt technologies at a rate you find sensible in order to justify being left to our own devices without interference.
  • It’s not incumbent on us to convince you that VB really is distinct enough from C# to justify us having a preference at all (in 58 pages or more).
  • It’s not incumbent on us to describe a physical impairment that keeps us from technically just using some other language.
  • It’s not incumbent on us to disprove your stereotypes about us regarding race, gender, age, or anything else for that matter in order to earn the right to be respected.
  • It’s not incumbent on us to provide a logical proof to you that you’re being disrespectful in order for you to stop doing it when asked.
  • It’s not important that you are happy or unhappy that we exist.
  • It’s not important whether you know or have met 5 or more of us personally.
  • IT’S NOT ABOUT YOU.

So please, when you’re tweeting, or leaving comments, keep that in mind. And keep in mind that while each of you may have a thousand questions, and that it could even be education or fun to answer some of them, the answers to those questions are not actually relevant to the discussion because You. Are. Not. Us.

Forking isn’t success, it’s failure

This is not a decision that needed to be made at the VB.NET community. It didn’t need to be made for the VB.NET community. It didn’t need to be made at all. We have a fundamental right to self-determination that ought to be recognized and respected unencumbered by the fears, uncertainties, and doubts of individuals who are not part of this community in any way and do not have to live with the consequences of these discussions at all. VB.NET is no longer a product, VB.NET is an open source programming language that needs to be led by people who are actually VB.NET developers: the few within Microsoft in concert with the many more of us without. I’m not writing this as some prelude to a defiant fork; I really want to avoid that. If someone on “The .NET Team” doesn’t get why, they don’t understand open source as well as they think they do. This language needing to fork (if it comes to that) isn’t an example of Microsoft succeeding at open source; it’s failing.

-Anthony D. Green

Preface | Part I | Part II | Part III | Part IV | Part V: An Open Letter to Satya Nadella