When Bart and I started the Programming by Stealth podcast, we were doing something no one had ever done before (at least to our knowledge.) Who would think that an audio podcast was a good way to learn to program?
Because we were breaking new ground, we had no one to learn from. There was no guidebook to follow. Over the years we’ve both learned a lot about how to make this crazy idea work.
For example, we figured out that while we’re recording, communication between the two of us is greatly increased by video. When Bart sees a confused look on my face, he can stop and ask me what I need to be clarified. I can actually raise my hand to get his attention when he’s on a roll but I’m lost on something three sentences back. We both wish we’d thought of this at the beginning but at least we eventually figured it out.
Another huge enhancement to learning was when we got the idea for Bart to give the audience challenges at the end of teaching us some new concepts. I know that it’s a lot more work for Bart to come up with a clever problem to be solved that lends itself to exactly what he’s trying to teach, but it makes a huge difference in cementing these concepts for me and the listeners.
Another thing that has helped make it even more fun was when I added a PBS channel to the Podfeet Slack (podfeet.com/slack). This gave the community of developer-inclined folks a place to chat about the nerdier stuff in computing. It also kept us from bothering everyone in the mainstream channels! Not everyone in the PBS channel is probably following along with Programming By Stealth, but they are still helpful to those of us who are learning.
Recently we started learning about shell scripts. We have some really fun, bite-sized challenges from Bart in this series. For example, right now we’re working on a shell script that prompts the user with a menu of breakfast items and then will print out what they ordered, all from the command line in the Terminal. It’s super fun.
Anyway, as we’ve started working on these challenges, Ian Lessing posted in Slack that he had put his work in process on a service called GitHub. GitHub is kind of hard to explain to non-developers, but it’s a place where you can post your work and it’s a mirror of what you’re doing locally on your own machine. So each time Ian makes some progress, he pushes his new work back up to GitHub and it gets updated.
Now it takes some courage to post your work in progress so publicly, but that’s what open source development is all about, believe it or not.
I figured if Ian had the courage, then I’d do it too. I pushed my work-in-progress code up to my GitHub account, and put a link in the thread where Ian had posted.
Then Ben Rose chimed in and asked a great question. He asked whether there was a place for the PBS students to share their work. And that’s what started the newest enhancement to the Programming By Stealth podcast.
Backing up a tiny bit first, Bart had thought of this idea years ago and created a Programming By Stealth Gallery that was part of the shownotes for the show, but it was very cumbersome to maintain. Anything that takes time to maintain is likely to fall onto the back burner for me and especially for Bart. He works full time, cycles a couple of hours a day, has a home life with his darling beloved, AND hosts both Programming By Stealth and his own shows, Let’s Talk Apple and Let’s Talk Photography! There are no more hours to squeeze out of him.
We started throwing ideas around in Slack and then I started doing some research. It turns out that GitHub has something they call an Organization. GitHub Organizations allow a lot of granular control over what privileges different people have. I can be the almighty ruler, and then I can invite PBS students in as members. I can restrict what members can do, or give them a lot of freedom.
I’m much more inclined to give people a lot of freedom, especially because I have to invite people to join. As near as I can find, there isn’t even an “ask to join” option. This should keep out bots and mean people, or at least I hope so.
As I started looking at this Organization concept, I realized that I’d need some people to help me kick the tires and figure out how it should be organized. Ian and Ben seemed like the obvious candidates.
We had a lot of different ideas. When you push code up to GitHub, you do it into what’s called a repository, or as the cool kids call it, a repo.
We considered having a repo for each installment of Programming By Stealth, but since we’re already on PBS 147, that seemed a bit daunting. Also, remember that a lot of people are not following along in real-time. For example, Marijana just joined the Slack community and she’s on PBS 12. We want to make sure everyone feels comfortable and welcome so it can’t be crazy complicated.
Then we considered just making a repo for each person who joined. Then they would create a folder structure within their repo for each set of challenges they were working on. But even that could end up with what Ian calls “repo sprawl”.
Ian wondered if it would work to create one repo for all of the people and all of the assignments, and then to create a folder for each human where they would organize their solutions.
Ben suggested a design where we had one repo like Ian suggested, but then we had a folder for each installment of PBS, and then folders inside for each person. Pros and cons to that idea too.
One of my desires was to allow people to push their challenge solutions up to the Organization but to also be able to push them up to their own repos.
I invited both Ben and Ian into the Organization. That didn’t seem like enough people to break things, so I also invited Dorothy, aka maclurker, aka the person who maintains the PBS Index.
I created a repo for each person and then the four of us went to town testing out ideas.
As we were grappling with the design, Ian suggested that maybe he and I should do a video call to chat to roll the ideas around. This was wonderful for so many reasons. First of all, Ian has been part of the community forever, and I’d never talked to him directly. He pointed out that he’s seen me on video before because he attends the live show, but I’d never seen him. I feel like I have a new friend.
As we started working through the various ideas, it became quite clear that Ian, like so many other learners in the Programming By Stealth community, is actually an accomplished developer. He explained that no matter how much you know, you can still learn more, and he says he learns so much from Bart even on subjects he thought he had down pat. He’s pretty good at shell scripting but he wants to be great at it.
Anyway, by the time Ian and I got together and did a screenshare of the GitHub Organization (with me driving), I’d really mucked things up. Remember I wanted to be able to put up my solutions here but also into my own repo. I also wanted to keep my own folder organization with other stuff in there that’s unrelated to the class.
I’m glad I did muck things up because I think it was important to think about how to structure the design so that well-intentioned people couldn’t break it too badly without us being able to fix it.
After a lot of testing and changing things around, we settled on Ian’s plan. No, he didn’t strong-arm me! It took walking through a couple of the repo sprawl methods to understand the advantage of all of the people and all of their solutions all in one repo. With us all in one repo together, when the students pull from GitHub, they get everyone’s solutions. If the purpose of this project is to see how other people are solving the same problem, then you want everyone’s work.
We blew away all of the repos everyone had created and made one called pbs-challenges. Inside the repo, we created four folders for the four beta testers.
As soon as we did that, I realized I needed to change the name of the organization. I had named it pbs-challenges. So that meant we had a repo named pbs-challenges in an Organization named pbs-challenges. That was just silliness.
We renamed the Organization pbs-students. That leaves the door open for future uses for the Organization and we can make other repos when we feel like it.
As soon as we changed the name to pbs-students, I realized we needed an avatar for the Organization! Ian laughed as I pulled up Affinity Designer with Bart’s Programming By Stealth logo as a scalable vector graphic (SVG) and started to play with design ideas. I opened The Noun Project and did a search for graduation cap and started to drag in different ideas.
I didn’t waste all of Ian’s time on this but I did tell him I’d probably spend hours working on it. He said, “Oh I’m sure you will…and then you’ll figure out something to automate about it!” He sees me.
I’m delighted with the avatar – he suggested a jaunty tilt to the graduation cap, and maybe a different color – so I made the graduation cap red on top of Bart’s little ninja and it’s absolutely adorable.
There was one last thing to do – and that was to write some README files to explain to people how this is going to work. I explained how the folder structure was going to work, and how everyone is expected to play in their own sandbox. I also included this sentence:
I expect civilized behavior in this organization and since it will be filled with NosillaCastaways, I know you’ll be kind, supportive, and respectful.
I’m not really worried about it, but it helps to say it out loud.
I hope if you’re a student of the Programming By Stealth series, you’ll join us in the pbs-students organization and share your work. If you just want to lurk and see what it looks like, go to github.com/pbs-students and check it out. If nothing else, go there to see how adorable the avatar is!
To join the Organization you do need to have a free (or paid) GitHub account, so when you contact me (via email or Slack) be sure to tell me your GitHub handle. I need that in order to invite you.
I’m super excited about this and learning from all of the kids in class who know more than I do!
So cool!! What language do you guys prefer to program in?
We don’t have a preferred language, rather it’s whatever language we’re using as Bart is teaching us. We started with HTML, then learned CSS, then JavaScript, then Git, then Chezmoi (I know those last two aren’t languages), and now we’re doing shell scripting. We’ve learned about test driven development and more.