dotnet / try

Try .NET provides developers and content authors with tools to create interactive experiences.
MIT License
2.88k stars 521 forks source link

First Draft: Please review Product Roadmap #90

Open LadyNaggaga opened 6 years ago

LadyNaggaga commented 6 years ago

Please take a moment to review the Try .NET product roadmap.

Note: This is only a product roadmap and it only focuses on the Try .NET themes and high level features. I am still working on the technical roadmap that will further broken down our engineering goals, timelines and operations.

Request for feedback

Suggestions welcome - Please fork the wiki and submit a PR.

rowanmiller commented 6 years ago

From a developer perspective, the main pain point I have at the moment is the security that only allows request from certain domains. This is painful for local development, as we have to edit hosts file, change to use something other than localhost for the local URL etc.

From an end user perspective, here are the main things I'd like to see:

I think it would also be good to have an item around standing up some form of web presence for Try.NET. As it becomes more of a thing, we'll want to take users to a pretty page that tells the Try.NET story. This will also mean sorting out the split between infrastructure and customer facing content.

rowanmiller commented 6 years ago

BTW for the security thing, my ideal solution would be some form of "free quota" that allows a small number of requests from a certain location. When I'm working on this content, I probably send a couple of hundred requests a day at most.

LadyNaggaga commented 6 years ago

@rowanmiller this is all very good feedback and a lot of the features you have mentioned are inline with the current product roadmap.

csharpfritz commented 6 years ago

I think we need to trim out the chrome around the editor experience on the website when it is not embedded on another site. A menubar, help pages, and configuration links would go a long way to making the application more usable

jongalloway commented 6 years ago

Storage: What about HTML5 Local Storage? Should a Blazor-based experience be listed on the roadmap? It would be nice to include better editing support - Monaco or similar.

I made a few minor tweaks - punctuation, one spelling error.

LadyNaggaga commented 6 years ago

@jongalloway these are both great discussion points for the Technical Roadmap Storage: Just reading up HTML5 Local storage and it has some really advantages. Web Storage API is worth exploring. Blazor is definitely on top of our radar for the Try .NET experience. cc'd @jonsequitur

rowanmiller commented 6 years ago

We use local storage in the In-Browser Tutorial to keep the users code at each step of the tutorial. That way if they close the browser and come back later, or go back to a previous step, we have the code the way they last left it.

timheuer commented 6 years ago

As mentioned in a call with @LadyNaggaga I really think that NuGet/library support needs to be strongly considered for roadmap. The examples that I see primarily being shown for Try .NET are not in line with what I think people really are wanting to try, which are beyond Console.WriteLine kind of things. Think about a learner's journey and how they really are likely going to be googling a LOT. They will come across snippets that say "use JSON.NET" as an example.

I know for some learning platforms we may be able to pre-provision a set of packages/libs in an environment maybe, but we should consider some type of aspect that allows for use of libs/NuGet in the Try experience. It will be more authentic to what they will see in other learning C# content online to support that.

BillWagner commented 6 years ago

I love a lot of what's in the proposal:

From a curriculum / learning standpoint, I'd like to see these considered (from most useful to more edge scenarios):

svick commented 6 years ago

@BillWagner

Move more toward "full" C# as opposed to the C# interactive syntax. The interactive is great early in learning, but gets limiting as soon as we're teaching larger building blocks.

Isn't that already supported? When I go to try.dot.net, the example code that shows up has a normal static void Main() inside a Program class. You can omit all that and it still works, but it's an option if you want it.

Though the one thing that doesn't seem to work is declaring namespaces ("error CS7021: Cannot declare namespace in script code").

BillWagner commented 6 years ago

@svick:

Isn't that already supported?

As you say, mostly. I want to declare namespaces. I avoid using the #r syntax because I have to explain it, and explain that it doesn't work when you're working locally. We've had progress, but we're not where I want to see us yet.

jonsequitur commented 6 years ago

@BillWagner, @timheuer, and @svick, full C# and support for NuGet packages are implemented.

The default console experience gives you control of all of the code for your program, and includes a reference to Newtonsoft.Json. Namespaces will also work. https://try.dot.net/?workspaceType=console

In order to still allow the "code snippet" experience we also have Gist support where we only display and allow editing of a specified region, but the program can include multiple files: https://try.dot.net/?workspaceType=nodatime.api&fromGist=8e2ea50af097df663d9c8e19eb8fbf0a&bufferId=TryNodaTime.cs@fragment&canShowGithubPanel=true

A limitation of the current NuGet package experience is that we pre-provision specific packages. Content authors and end users can't currently add their own packages.

Edit: Since it's probably not clear, the querystring parameters in these examples work identically in the embeded iframe's src attribute.

timheuer commented 6 years ago

@jonsequitur I'm not talking about pre-provision with specific packages...I want to be able to use Alexa.NET library as an example...I can't unless you pre-provision for me.

LadyNaggaga commented 6 years ago

@timheuer for the scenarios we are targeting right now pre-provisioned environments are best user experience. On the fly NuGet packages calls that is a little out of scope for now :) . The goal is to have the required ones warmed up for the customer.

timheuer commented 6 years ago

I'll challenge that thought a bit in that it is counter to the statement on 'Simple to Embed' -- for me, as the owner of Alexa.NET I want to embed a Try .NET experience into my documentation. Will I be able to identify what packages to pre-provision? or will I be limited to what is provisioned based on what MSFT wants. If the latter, then it is no longer simple to embed for 3rd parties to put in their documentation/learning.

LadyNaggaga commented 6 years ago

@timheuer yes as the owner of Alexa.NET you will be able to identify the packages to pre-vision. NodaTime is an example of us doing that.
Question: are you describing more of the NodaTime experience or packages on the fly?

timheuer commented 6 years ago

@LadyNaggaga - yeah packages on the fly. I'd love to see the NodaTime experience (read: how does someone on board), but I wonder from a resource standpoint does it make a diff to have 'reserved' pre-provision environments? Dunno, just thinking aloud. But if the onboarding experience is simple, maybe I'm satisfied.

jonsequitur commented 6 years ago

@timheuer We want to make sure that the onboarding experience is easy and we're just at the beginning of figuring out what that entails. At the moment, pre-provisioning is necessary for performance reasons and it's a manual process, which clearly doesn't scale. When we solve the performance problem, then a self-serve bring-your-own-package capability becomes feasible, and we need to make sure we design that in a way where the embed code still works as the service changes over time. We're planning to get there.

shanselman commented 6 years ago

FWIW I like the #r syntax. It's built-in/part of Roslyn and it takes 15 seconds to learn.

LadyNaggaga commented 6 years ago

@shanselman #r is specific to scripting. See @BillWagner comment.

shanselman commented 6 years ago

I get that, but does that preclude us using it?

kendrahavens commented 6 years ago

I'm sure this won't be top priority, but I'd love to have an easy experience for writing and running tests in the browser. Some challenges this brings would be:

  1. How to initialize a test run in a browser?
  2. Good test architecture implies having a separate test project and references which is difficult represent in a repl
LadyNaggaga commented 6 years ago

@shanselman we are using full C# not scripting. "On the fly" package request is definitely something we need to explore . However, I am not sure the #r would work incase since we are using full C# and not scripting.

Since the support for assemblies has become big part of this thread, I am moving to a new issue here.

jonsequitur commented 6 years ago

@kendrahavens We've talked some about a test scenario and would welcome some help designing it. Among the ideas that came up:

We would want a way to display test results that's a little more interesting than the current console output.

kendrahavens commented 6 years ago

@jonsequitur These sound like great options. I think having a TDD page would be very useful! I'll open an issue on a test section design for more discussion.

LadyNaggaga commented 6 years ago

Link to Unit Testing Scenario

jskeet commented 6 years ago

A few suggestions, mostly in the "simple to embed" area (as that's where I've had first-hand experience - thanks team!)

LadyNaggaga commented 6 years ago

@jskeet this is great feedback thank you!
I have opened few issues to get into deeper into the conversation. Simple to Embed: JavaScript Support Experimenting with Blazor Add ability to write and run Tests OSS Journey[link coming soon] :)

rowanmiller commented 6 years ago

On the .NET website side we'd be very interested in the testing scenario too. For the .NET Playpen idea we're experimenting with, we want to include coding challenges. Having a proper unit test for pass/fail would be fantastic!

BillWagner commented 6 years ago

Another item that should be on the roadmap is to have the try.dot.net experience use the current culture from the user's browser. See discussion in dotnet/docs#5440

dcuccia commented 4 years ago

Is there a technical roadmap document beyond the product roadmap wiki?

I couldn't find an issue elsewhere, so I would like to augment Experimenting with Blazor and suggest Notebooks with Blazor Client. Motivating examples:

Lmk how I can help - I'd be delighted to create a new Issue, if that's appropriate.

Thanks! David

dcuccia commented 4 years ago

Just read through @shanselman's blog post and even more excited than before. Would be great to have an updated roadmap. Things I'd like to understand at a basic level are if/when we might see intellisense and debugging, and whether a client-side Blazor experience is planned (see above). Let me know what the community can do to help this awesome project!

dcuccia commented 4 years ago

@LadyNaggaga can you provide any input on the above?

LadyNaggaga commented 4 years ago

@dcuccia sorry for the slow response. You will see intellisense in the future, debugging for notebooks is still in design discussion, and client-side blazor is available.
I will be putting together an update roadmap that will be available the week of December 2nd. We are making a few changes to the repo to make it more straight forward for the our amazing community to contribute to the project.

dcuccia commented 4 years ago

@LadyNaggaga fantastic! Thanks for replying!

kevindarby commented 4 years ago

Any estimate as to when intellisense will happen?

I have been able to debug in VSCode by using the attach function below and attaching to the dotnet-try process; it's a little more cumbersome than say starting the process tree in the debugger, but it works.

     {
        "name": ".NET Core Attach",
        "type": "coreclr",
        "request": "attach",
        "processId": "${command:pickProcess}"
     }, 
John0x commented 4 years ago

This could make F# and C# a lot more viable for data science workflows. Great work :) Is there a rough ETA for intellisense/autocomplete for jupyter notebooks?