Sixth Edition MEGA UPDATE
It has been over six weeks since my last update on the book (and my last blog post).
It’s time for an update!
Things have been moving along, but… man it has been slow going. I’ve had a long weekend, and been trying to gather my thoughts on what to do next and where to go.
Among other things, one big thing I wanted to do this weekend was get my act together. “GET MY ACT TOGETHER!” was actually literally written on my whiteboard.
Also on the list: writing this post. Here we are at the end of the weekend, and I’m checking off the last item.
Let’s talk about timing first, then scope.
Timing of the Sixth Edition
I’ve long said that I can’t really predict when this stuff will get done. It is done when it is done.
But I can confidently say it won’t be less than eight weeks, even if everything goes great.
So we’re looking at May at the earliest.
That’s a super optimistic take, though. There is less than a 1% chance of it being faster than that, and probably a 95% chance of it being later than May.
Were I taking a guess, I’d put the 50/50 mark at about August, and the 95% mark more like November.
Which means it is time to revisit the connundrum I posed six weeks ago. I was going to publish the sixth edition last November, and the seventh edition this upcoming November, in conjunction with C# 11 and C# 12 respectively. But with this release dragging on, how should I handle that?
I have a few options:
- Publish the sixth edition when it is ready in, say, May or August, and then publish the seventh edition, as previously planned, in November. At this point, that’s putting two editions within six months of each other, which is really unheard of.
- Publish the sixth edition when it is good and ready (May or August), and push the seventh edition out a year to when C# 13 arrives.
- Push the sixth edition out to November, include C# 12 features in it, and then push the seventh edition out until C# 13.
The feedback I got was split into two camps. Nobody–myself included–is a fan of #1 at this point. But the people who already had the fifth edition all preferred #3, while the people who were thinking about buying in the near future but didn’t already have the book preferred #2.
Which… is about as surprising as your cereal getting soggy after sitting in milk for an hour.
I’ve ruled out #1.
2 and 3 are looking more and more similar as the expected completion date drags out. It may quickly become a moot point.
However, I’ll say that I’m leaning toward #3. That takes the immediate pressure off of me, and allows me time to get it right.
If you were in the camp that preferred #2, keep in mind that I’m already committed to helping those who pay for the current, fifth edition get updated to the sixth edition when it comes out. I can’t update a print copy with a newer print copy, but digital editions are easy to get to people who get the current PDF or print editions. So don’t feel like you can’t just get started on your journey today.
What Will Be in the Sixth Edition?
It is time for a bit of an update–and explanation on why this has taken as long as it has.
Here are the major differences that you’ll see with the sixth edition. Keep in mind that this is still building off of the same general structure that the fifth edition has. These seem significant–and they are–but a good chunk of the book will still be the same.
C# 11 (and maybe 12)
The book will obviously include content that covers the new C# 11 features, and C# 12 as well, if it gets pushed out until November, when C# 12 arrives.
The language updates are always the main driving force behind new editions, but I always take time to clean up things that I think could be explained better, or areas that I’ve seen people struggle with, or adding polish.
Revised Introduction to Objects
I’ve helped a lot of people on Discord who are struggling with objects and why they matter. I think the content that is there for fifth edition is good, but there are definitely a few things I’ve spotted that could help make this very important section of the book easier to understand why it matters.
Additionally, I’m de-emphasizing things like CRC cards in favor of a more practical example of software design, by working through the design for a complete game of Minesweeper.
That should do a better job at introducing some basic concepts and guidelines about objects.
The book is not a software design book, so I’m still keeping it contained in a single chapter. (I’d love to write a C#-focused software design book. Maybe once I get the sixth edition off my back.)
The Catacombs of the Class will get a few adjustments as well, though the end goal there is still Tic-Tac-Toe, as I think that’s a good project to cut your teeth on. It is big enough to really start to deserve objects, but small enough to not feel too overwhelmed.
Emphasizing the Fundamentals
One other thing I see a lot of people surprised by is how expressions can be recombined. Consider this code:
ArrowheadType arrowheadType = GetArrowheadTypeFromUser(); Arrow a = new Arrow(FletchingType.Plastic, arrowheadType, GetLengthFromUser());
I’ve probably helped four or five readers connect the dots here in the last week or two.
Expressions are a key building block of C#–or really, all programming languages.
People see things like a literal value like
FletchingType.Plastic, or a variable like
arrowheadType and aren’t too suprised, but then see that you can take the return value of a method and feed that right into another method, like
GetLengthFromUser(), and it is a pleasant surpirse.
C# is mostly made up of just a very small handful of things, each of which come in different flavors:
- Statements (
- Expressions (
3 + a,
- Type definitions (classes, structs, enumerations, etc.)
- Type members (methods, constructors, fields, properties, etc.)
- Types (
Every new version of the language simply adds in a few more of those.
I want to emphasize these fundamentals a little more throughout the book, but especially the early part of the book.
This next item dovetails with the previous item.
Another problem I often see is people saying, “Hey, I just saw this code here in Level 28, but it was never covered. Or I don’t remember it.” Usually, it was covered, it was just missed somehow.
Even back in the first edition, I considered having a feature that I’m now actually planning on including: inventory items.
Think of how in all of the Zelda games–and really, many RPG or action/adventure games–when you get a new item, the game makes a big deal about the item. Link holds the item above his head, a triumphant song plays, and you get a brief description of the item you just found.
I’m planning on adding little sections like that in the book.
This would be things like, you learn about block statements, and there’s a little section (kind of like the challenges, but looking a bit different) with the new item called out, and summarized.
The hope is that this makes it much clearer when you’ve encountered a new tool. Fewer people will miss them, and when they do, they’ll be able to find them much more easily when they go back and look.
I’d also like to have some sort of “inventory screen” at the start of the book to go with the map and XP Tracker, which you can use to track your progress. But I don’t know the details on that yet. There are a ton of potential items. There are at least 20 statement types and probably 30+ expression types, let alone counting up the ways to make a type, the type members, and the types themselves. Plus, I want to add quest-related items like the Heart of Objects, and… some other secret items that I’ll be adding for the sixth edition.
Worldbuilding, Challenges, and Storyline
One critique I’ve gotten in the last few years is that people wish the challenges and storyline felt a bit more cohesive. People have really liked having a narrative and storyline, with an overarching goal.
I’ll admit, I was too scared to do that for the first three editions of the book, and only convinced myself it was the right move in the fourth edition.
But I agree with this critique.
I think there are a lot of challenges that feel useful, but kind of like side quests that don’t move the main plot forward. Then when something does move the plot forward it sort of races forward to another major event.
I’ve put a lot of time into thinking through the world–doing worldbuilding. I’ve worked on the plot a lot, and been working on how to make the challenges fit in to the story better.
I’ve got to say it has been hard work, but also very rewarding work.
I have been able to answer some lingering questions like:
- What exactly is the Uncoded One?
- Where are all the other programmers, and why can’t somebody else handle the Uncoded One?
- How, exactly, does programming take shape in this world? Is it like a wizard casting spells? What does it look like to the inhabitants? Why doesn’t everybody just become a programmer?
I think people will like the improvements.
These changes won’t make you a better programmer, but I still think it will make for a more polished, more immersive experience.
Refined and Added Challenges
Mostly to go with the previous item, I’m expecting to make some adjustments to quite a few of the challenges. These are mostly going to be to make them drive the main plot forward and to be consistent with how the world works.
I think the Variable Shop challenge is a good example.
Why does a variable shop exist in the first place? Who is buying variables? What does that even mean?
I’ve liked that it just adds some flavor to the world. It’s not just a bakery. It’s a shop in a world within the computer, somehow. Why shouldn’t people buy variables?
Along the way, I’ve done a little bit of soul searching to think through what stuff I really want people to have experience with as they move through the book. There are a few topics that I think deserve a challenge, and they’ll get one in the sixth edition. So there will be a few more challenges than the 5th Edition.
(And a number of troublesome challenges like Vin Fletcher’s Arrows, Simula’s Soup, and the ones at the start of the Catacombs of the Class are all getting some significant revisions to make them less intimidating.)
Anyway, that’s probably plenty of writing for now. I’ve got more book work to take care of tonight, so I’m going to move on to that. Expect more updates soon!