About 2 years ago, I revamped my hub site using Django. This was the first step (I had hoped) toward a unified architecture for all my websites. It didn’t turn out that way, but this project is still simmering on the back burner.
Most content management systems are designed as monoliths with turnkey features. This is a wonderful boon for authors who want to, for example, throw up a blog, as they have a low-overhead solution they can deploy and quickly start publishing with. But it presents problems if you want to customize them (anything outside of the turnkey modules and settings available) because you have to work around the existing features before you can implement your customizations. And it presents problems when managing multiple websites because now you have to manage multiple independent monoliths and often can’t even benefit from automation.
I was hoping that my play with Django would be the beginning of a new relationship that would allow me to address these problems. Unfortunately, I was unhappy with where Django left me (and my hub site has been growing stale since then). In the meantime, I got a new job, which completely dominated my life for the better part of two years. (That is the explanation for my extended absence.) Then I got laid off in a downturn of pandemic proportions—literally.
But my dream of a unified website architecture never died. And I’d like to lay out the business case (as it were) for this solution and the requirements it will need to meet. I’ll go further down the road in a later post and talk about architecture options.
I sent a copy of my resume to HubSpot, and one of their talent acquisition people got me on the phone to talk. It sounded like a potentially good fit, and I was invited to take the HubSpot coding challenge.
Which I did.
Today, I had a conversation with a small company that doesn’t use version control.
It’s hard to remember what it was like before version control. I know I did get started in a world without it. When I started in embedded development, we didn’t have version control.
Before there was version control, I made versioned backups of my entire working directory.
Yikes. Dark ages.
Online coding assessments are all the rage for certifying a software developer’s skills during the hiring process. Don’t get me wrong, this is a much better system than what we used to have. A decade ago, all we had were red-flag job ads, whiteboard coding, and buzzword bingo. Back then, oh what I would have done for a chance to develop some actual code—even on a toy problem—just to demonstrate my programming prowess. And these systems are absolutely an improvement. We’re on the right track.
The most well-known system is HackerRank’s, but there are several others as well. I’m picking on HackerRank in the title, but I’m actually commenting on all the online coding assessments (including HackerRank). They all work approximately the same: They usually involve a number of multiple-choice questions followed by a couple of programming challenges. In the programming challenges, you can generally choose from a list of programming languages, and your solutions will be judged against pre-written test cases, some of which you might not have access to.
These assessments are much better than what came before, but they still suffer from fundamental pitfalls that you ought to be aware of, whether you’re a job-seeker or a hiring manager. They’re saddled with the fallout from an educational system that teaches memorization and compliance (rather than innovation and initiative), and they probably don’t reflect what you want to be looking for in a software engineer.
The last time I did any serious (or semi-serious) work in Java was in 2006. I used J2EE 5.0, which was the current version at the time, to demonstrate how we could migrate our enterprise web app package from spaghetti C++ to a more soundly architected framework in which most of the low-level work was done for us. I used Jetty as a servlet container for the demo because it was lightweight and easy to get going in a dev environment, although there were other options (most notably Tomcat). That was a long time ago and many versions away. I went into full-time LAMP work with Modern Perl and became a full-stack web developer.
My current circumstances have encouraged me to revisit Java. Firstly, I have some experience with it. I started by going through the Java practice challenges on HackerRank. I’m pleased with how easily it all comes back to me. I guess programming is like riding a bike. I’m using Java for all the online coding assessments as I look for work (except for the Perl positions). And I’m putting together a Java version of a TicTacToe app.
This has inspired some thoughts on the current Java ecosystem… and how it compares to the Modern Perl ecosystem.
I also blog over at The Perl Shop Blog. Most of what I write about Perl anymore is over there.
My recent pieces include: Continue reading
Posted in Uncategorized
This is a topic that I’ve seen pop up in discussions and articles about Go. The Go programming language does not support inheritance, but instead it supports composition via “embedding.”
It can be a little hard to grasp the difference. This is especially so if you’ve worked in a language like C++, which implements inheritance by (literally) embedding the superclass object within the subclass object.
However, the semantics of Go’s embedding fail to support inheritance in important ways, and there are other Go features and idioms that we use to implement inheritance semantics (or something like them). Continue reading
In the prior episode of this story, I had written a test to detect the bug I want to fix. The
djangocms-picture plugin includes errant whitespace inside of HTML anchor tags, which renders as annoying blue underlines next to the images.
I had also discovered why my test didn’t fail as it should have, because Django’s
assertHTMLEqual() doesn’t detect all semantically significant whitespace differences. I’m sure it seemed a good idea at the time. But sorry, that’s not working for me.
Fortunately, it’s not that difficult to redesign
assertHTMLEqual(). Continue reading
Last time, I began fixing a fairly simply space-within-anchor-tags bug in
I’m using this exercise as an opportunity to (a) try out a disciplined development process in the context of a Django application and (b) dig into the Django and Django CMS APIs.
This involves writing a failing test against the existing plugin rendering code, seeing it fail, fixing the bug, and then seeing the test pass.
My experience so far with this framework has not been as stellar as I had originally thought it would be. Continue reading