Tell us your ideas for the upcoming project-based Algorithms section

Hello, everyone. A few months back @QuincyLarson announced that we will be building a new version (viz. 7.0) of the curriculum. The version 7.0 will be project-oriented. We’ll learn by building real-world projects. You can read the full announcement here: Help us build Version 7.0 of the freeCodeCamp curriculum.

In the new version, the JS Basic algorithm scripting and JS Intermediate algorithm scripting sections were to be replaced by a single section “Learn Algorithms by Building _________”.

Initially, we decided to build a Search Engine to teach algorithmic concepts but it looked too difficult to implement. Then we decided to build a News Feed console-based app but I thought it won’t give campers enough exposure to different type of problems. Then I gave an idea of Train Reservation console-based app. Still, I wasn’t satisfied with the challenges of this app.

Now, we need your help in deciding how we should approach the famous JS Basic and Intermediate algorithm scripting sections in the upcoming project-oriented curriculum.

The new project-based approach

Building a single full-fledged project: with this approach, we are facing an issue: We are unable to cover a broad range of algorithmic problems. The news feed app was too much string focused. The train reservation app provides easy problems. We need a challenging and broad range of algorithmic problems. If you have an idea or app in mind which can cover different and challenging algorithmic problems as we have in the present curriculum then please tell us.

Building basic, intermediate and advanced algorithmic projects - all three different: I think this approach is the right one. It will cover a broad range of challenges and teach campers how algorithms are applied in real-world projects. Please tell us what console-based applications we can build to provide campers with challenging algorithmic problems.

The current challenge-based approach

The current challenge-based approach is appreciated by many campers. It’s very challenging and gives campers satisfaction after working through the challenges. So if you think this approach should be the way forward please tell us your thoughts.


Do you know what will the best scenario? The best scenario will be when you will build your idea into a console-based app and millions of programmers will learn through it via freeCodeCamp. Just imagine the impact you’ll create in the community. So I encourage you all not just to tell us your ideas but to take part in contributing to the upcoming curriculum.

You just need to reply with your idea and how will it provide a challenging and broad set of algorithmic problems? I’ll personally reply to each and every idea :).

Before I end I want to thank all the contributors and campers for making this platform an awesome place to learn, help and grow :heart:. Happy coding.

2 Likes

I hate to snipe from the sidelines, but is reserving seats on a train really all that exciting to newcomers?

How about a simple Pokémon-type game, whether it’s robots, monsters, whatever? It’s got RPG elements, which is a trove of different algorithms (and a good place to teach functional programming since there’s not much I/O going on). It has web UI and backend elements like databases for tasks like managing a roster. And of course it has action for real-time game development.

In the end, it’s about what the curriculum devs want to write, but if there’s still ambivalence about it, maybe put the short list of options up for a poll?

@chuckadams The train reservation app may sound a bit uninteresting. It’s the challenges which matter. It’s all in the problems they offer.

We have already built an RPG game similar in spirit to Pokemon for the basic JavaScript section. Here’s the link to it: https://codepen.io/beaucarnes/pen/BbLWpe

Actually we need to create a console-based application not a real web app. We’ll tell campers to build the project function by function (or part by part). Each function will throw a new problem to them and they’ll solve it with help of knowledge of JS data structures.

Do you have any other idea for this?

1 Like

I suppose my overall point was that I was endorsing the “single project evolving over time” angle rather than having several disconnected projects. For a long-term project to hold a user’s interest, it has to be, well, interesting. The game project for example could easily start as a console project (I remember BBS door games very well).

I don’t want to denigrate anyone’s hard work – FSM knows you guys work harder on FCC than anyone. I just wanted to put in my 2 quatloos worth :slight_smile:

1 Like

@chuckadams I got your point brother :). Let’s see what others bring in to the table.

Btw can you suggest a door game for algorithmic challenges?

TradeWars comes immediately to mind, as well as LORD and its innumerable clones with different settings (I’ve seen Old West, Sci-Fi, and Schoolyard settings). LORD is basically an ancestor to MUDs and can easily evolve that way, whereas TW is a bit more of an economic sim, with the consumer economy geared toward annihilating each other.

1 Like

First off, very nice idea to have campers doing projects.

But to make this exclusively available to advance level algorithm won’t encourage campers since a lot is struggling to even wrap their head around basic programming concepts. Simply put, can your current camper write a simple website on their own from a blank page and a file system to maintain all the assets without the aid of “codepen” for example. This should be the first focus.

Secondly, project based assignment should be applied to every section, the exercises will place emphasis on mastering a skill rather than knowing a skill. If the camper just learned how <ul> tag works, put up an assignment that ask them to build a list of something. Then after 10 lesson or so, put up another assignment that ask the camper to use everything they know up to “that” point and build a project.

At the moment, putting the requirements on the left hand panel with a brief description doesn’t help campers putting the big picture together.

Thirdly, let the camper decide what project to do. Everyone have their own interest.

I believe every projects have their own challenge, what appeared to be easy could actually be pretty complex. I think the best challenge that you can give is simply ask for an application with no further instruction than that. Let the camper decide what technologies to use, and how far they want to take it. If the camper could only accomplish console app, so be it. If the camper want to take it up a notch, let them build a whole site. If that is not enough, let them take care of the back end.

A project that encourages continuous growth over a bunch of random little projects.

Unfortunately that’s like starting a writing student off with a blank sheet of paper. It could work for projects with personal guidance and review – my midterm and final projects in software engineering were like that – but not for a curriculum that is for all intents and purposes structured like a book.

Initially everyone struggles. But with time we learn and we keep on removing layers of abstraction.

That’s great. Can you suggest a console-based app for algorithmic challenges? A problem set you have solved in the past or maybe a project/app you have undertaken or maybe if you can think out a good app/game for algorithmic challenges. We need tons of app ideas then we’ll decide which we’ll implement among those.

I remember writing a lot of tiny game programs in C/C++…

  • Knights Tour - A puzzle type game where you are placed on a chessboard as a Knight as your hero, your objective is to move that knight (like in chess) on every block on the board without stepping on the same block twice. Then after that is possible, incorporate AI to complete the run. The game can be scale up to incorporate graphics, or turn into a Chess game.

  • Mini RPG Game - Running around on a predefined sized map, tiled based or pixel based. This was a graphical project. You can shoot, enemy pops up randomly, they drop loots. You can combine loots. Probably not good idea for console.

  • Command Prompt Emulator - write artificial commands. Have it build a data structure and traverse through it. Almost like the old school DOS.

All of these projects can be as large as people want.

1 Like

Just to add to what @vivek-agrawal27 has said here, the full curriculum of freeCodeCamp will involve building dozens of projects, and it’s perfectly fine for us to have several projects focused on applying algorithm-related concepts - and just getting more practice coding.

The main constraint is that the project has to be simple enough that a new coder who has made it that far in the curriculum can build it line-by-line - one passing test at a time.

That includes the UI logic, the business logic, and any data structures for storing the state of the application.

So again - this level of simplicity is a big constraint, and one of the reasons designing these projects is so challenging.

This said, it can be done, and @beaucarnes has already created two of these projects and their tests. It is possible - it’s just incredibly hard. If you’re up to the challenge, and if you want to play a part in designing these projects like @vivek-agrawal27 is - projects which 100,000s of people will build over the coming years - then I encourage you to find a project you’re interested in and help contribute.

Here’s the board: https://github.com/orgs/freeCodeCamp/projects/10

And of course, Vivek and I are happy to answer any questions you all may have. This is kind of an unprecedented initiative - an interactive fully-project based curriculum where every step has a an automatic test behind it. No big blocks of text. No videos. Just a test message and a code prompt. It’s how we envisioned learning to code 5 years ago when we started freeCodeCamp. And we’re finally getting close to realizing that vision.

1 Like

This looks challenging. I’ll definitely keep this idea in mind.

Thanks for the suggestions @Cowwy. It means a lot to us :).

Yes, we have some constraints but that’s what we all love, right? Challenging problems ;). It’s my personal experience that I learn when I build something myself. When I solve problems myself. The project-based approach is all about that. I’m very excited to see how we all unfold the lessons in a project-oriented manner.

That said, we also need to give importance to theoretical knowledge. The real challenge is to create a fine balance between the two - practical project-based tests and explaining the theory behind it.

Yeah :heart_eyes:!

For me as a self-taught developer, what I find lacking on most learning platforms, is the historic part of computer science a bit? The why algorithms are necessary, where are they used, etc. It would be interesting to have some algorithm problems based on history, famous algorithms as well and a little explanation for those, how did they happen, what problem did they try to solve, etc, I think that would excite some people and grab their attention.

I hope you guys don’t remove the algorithm section as it is entirely, I think it’s just great to be able to sit for 10 minutes and solve a problem, I do it at lunch, at night…It is one of the main reasons FCC grabbed me in the first place.

1 Like

That’s an amazing idea! I feel that too we need to cover the whys and hows of algorithms. I’ll definitely keep your idea in mind while designing the exercises :).

Sorry to say but we are planning to remove the algorithms section entirely. The current algorithms section will be replaced by set of apps. We’ll tell you a problem to solve and you’ll have to solve it by implementing a function much like the current challenges.

Btw, do you think we should keep the challenge-based approach or should we try the new project-based one? and why?

We are totally open for discussions and I’m ready to change paths. It’s not like we have to implement the project-based approach to the whole curriculum. We are leaving it to you all to decide what should we do with the algorithms section.

Actually, this post hasn’t got much traction. So it’ll be great if you tell your like-minded friends to share their ideas here on this post. Thanks and happy coding!

Awesome, good to know.

I think it’s good to have both, in my opinion. I think it’s different to sit down to work on a project, which may take several “sittings”, than to sit down 20 minutes to get a few challenges done, which in itself feels rewarding.I myself make a big distinction on both and treat them very differently, I only work on projects at a specific time of the day, but challenges it’s something I can take on at different times of the day, like I said, a lunch break or whatnot.

Ohh, I’m sorry @camperextraordinaire. I didn’t know that.

How can that be possible? I mean campers will have an option to choose between the two approaches?

Would it be possible to move the old challenges into the Guide section or something so they can serve as a reference or extra tutorial? There are many times that I remember something in a challenge that I did that would help with a project. And it’s useful to find the challenge, read the text, try out the code, read the hints and code solutions, and even see if the neighboring challenges are related. (I know other more complete references exist out in the web, but it’s nice to be able to go back to the information we’ve already learned here even if it’s just as a springboard to know what to google next.) It seems like a waste to get rid of all that information entirely, even if the new project-based curriculum will be much better for learners.

1 Like