What up! I’ve booked us for Monday. Here’s what I’d like to look at:
- Code review of my AWS project that I’ll be showing on virtualBrownBag Wednesday. I’m gonna do some polishing right now, so I’ll link to it later today. It’s a tool to help prevent surprise AWS bills, and someone on twitter actually just said they’d like to buy it, I’m not going to ever sell it but that got my attention and got me off my ass 🙂
- That’ll probably be most of the hour, but I’ve also been thinking about the learning journey more generally, and it would be fun to talk through my thoughts:
There’s a learning gap that I’m really interested in, that seems to happen in almost every field. The fact that it exists in programming is interesting because this is damn near a purely-problem-solving discipline, that has been using the internet as much as possible (we built the thing), that has been largely self-taught since the beginning, and that still hasn’t solved this problem. I think this reddit post talks about it in an interesting and useful way: https://www.reddit.com/r/learnprogramming/comments/5zc24o/the_best_way_to_learn_how_to_code/
The “foggy bridge” from that post seems to exist in basically every field. For some reason, people who have been working professionally for just a year or two are far better equipped than even those who have gone to school in a discipline. Law is a great example of this: when you graduate law school and pass the bar, you’re not ready to be a lawyer. You’re ready to learn how to lawyer. Medicine, as far as I can tell, is the only profession that handles this in a systematic way, and they do it by requiring a residency—an apprenticeship. So what the hell is going on in apprenticeships and why aren’t those things just taught in learning courses?
The other interesting thing about programming is that, while the “soft skills” that seem most resistant to anything but an apprenticeship are poorly taught almost by necessity, the “hard skills” seem to be poorly taught too. There isn’t much of a roadmap after the syntax step in the above reddit post; the industry as a whole does a poor job of communicating exactly what is needed and how to get there. Now I’m thinking of how much time a hiring manager open to newbies could save by listing the technical requirements and putting in an example project for each one; not just “familiar with Go,” but “able to build a simple CRUD webserver in Go that handles interthread communication, uses structured logging, was built with TDD, and has a full suite of unit, integration, and end-to-end tests.”
I’ve always been surprised that there aren’t more resources like your 5-projects ebook. It seems to me like there should be “building tracks” along with learning tracks, and also (here’s one place where we might disagree) it’s starting to seem to me that for a lot of people, grinding leetcode/codewars might be an important building track. Those kinds of sites seem like the fastest way to really get a language under your fingers, and, to a lesser extent, the pattern recognition that comes with learning a bunch of algorithms seems valuable.
In your book you talk about working in brownfields and contributing to open source as two technical skills that tend to happen when you’re freelancing and not before, and I’ve thought about these too. It makes no sense to me that there aren’t tutorials for each of these things. If I were a university or a major boot camp, I would absolutely build out a big codebase or find a willing open-source partner with a young project (I don’t know enough about git to answer this question—when you fork a project, do you also get the previous commits? If so, could you, say, find a young project, roll it back to before a particular bugfix, and then have “fix this bug” as an exercise? That would be pretty cool. Or—hey!—you could fork a project and deliberately “unfactor” parts, making them rough or introducing bugs!) and do a course/module in refactoring an existing codebase.
Anyway. Right now it seems to me that it would be nice to have these things:
- An agreed-upon standard for language fluency. The amount of fluency with a language that newbies need to have before they start applying is unclear. This actually seems pretty well suited to being fixed by leetcode/codewars, and it would be a super handy shorthand: “You need to be able to solve 5-kyu problems in codewars in less than 20 minutes per problem”, for example. Now that I think about it, I bet 100Devs has this floating around in their collective knowledge.
- More building tracks seem badly needed, similar to your 5-project book or Forrest Brazeal’s cloud challenge.
- After those, then some open-ended project tasks. “Build a twitter clone,” etc. Maybe with a couple tool suggestions and nothing more. This is also where “build whatever you like” goes.
- A refactoring/open-source course would be amazing.
Super interested to hear your thoughts on all this. Have a great weekend and I’ll see you Monday!
Notes
- fundamentals
- best practices
- deployment
- monitoring
- response
Also talk about cost monitoring
Todo
- [ ]