The Appeal of Coding a Site
Semi-famed Youtuber Ali Abdaal suggests that everyone makes a website; if you don't, you're not doing it right. That suggestion stuck with me, as it evidently has for others (see an unaffiliated example here). It gets you creating rather than just consuming, helps you professionally, and grows your name, among other benefits, supposedly.1 As a child I also had an inclination toward making sites even if I didn't know how and resorted to using Google Sites under psuedonyms, replete with Star Wars banners and unrelated iconography. To my mind at the time, I identified Star Wars as something cool, and something I would want my personal brand associated with.
This is all to say that the idea of having my own site had been on my mind for quite some time, and it was amplified further by the imagined fun of highlighting my photography and writing. I was and am a major of computer science, after all, so presumably I could make a website quite easily. After taking a majority Meta Front-End Developer Professional Certificate course through Coursera over the summer of 2023, I thought I had the skills necessary to start (and any I lacked which were necessary to finish I could learn as I went).
What I've Learned
First and foremost, I've learned that website development isn't so easy. And if it is easy then it's definitely not quick. At least not if you avoid simpler, pre-baked mainstream solutions. Tools like Squarespace or Wordpress are successful for good reason: It takes a lot of experience and time to create a well-structured, well-coded, decent-looking, semi-performant website. I've spent hours and hours figuring out how to get a background image to cover an entire screen without distorting itself and another heaping of hours then figuring out how to get that same background to persist across subpages in a manner that I think my framework Next.js would most prefer.
To establish this point, I'll admit I twice tried to get the footer's SVG icons to transition to a desired orange color, and as of now, I still haven't found an elegant solution for accomplishing this desired effect, and yet perhaps 6 hours' time has been spent cummulatively trying to solve the issue. But herein lies one of the greatest takeaways from this entire experience: Look for outside help quickly, be ready to compromise on vision, and consider the importance of the desired feature in the full scope of your valuable time and the project's ambitions.
Moving on Quickly
When you're working on a problem, whether as in my case it's something small like an SVG color transition or something larger like an image database, if you can't derive a solution within a reasonable timeframe (think 30 minutes), look for outside help. Don't be stubborn and stare at your screen. You're more than likely not boosting your IQ; rather, you're wasting your time in ignorance of either tools you don't yet know of or points of view you haven't yet seen.
This logic applies to more than just website development; it applies to mathematical problem-solving, coding challenges, exam. preparation, and really anything that has great breadth and requires you to be proficient across that breadth. If you or your product (e.g., a website) are expected to be good "across the board", investing hours into the deepest understanding or best solution of a single problem or subproblem is not as valuable as hours spread across multiple problems with a set of less deep but still proficient understandings or solutions.
As a practical example, you probably shouldn't spend 5 hours accomplishing the Leetcode coding challenge 3Sum all on your lonesome when you can spend 5 hours solving 3Sum, Rotate Image, Longest Common Subsequence, and Maximum Product Subarray with help. And in relation to this website, changing the transparency of the SVGs (rather than their color) was a good enough solution that allowed me to improve other aspects of the website more readily and thus increase its overall quality more in the same amount of time.
It comes down to satisficing many problems as opposed to maximizing one.
When Greater Depth and Less Breadth is Valid
Sometimes going deeper and taking your time to sit on something is worthwhile or even required. Designers of novel products or solutions (think algorithms, scientific discoveries, or the original iPhone) do not necessarily have the luxury of pre-existing solutions, and inspiration can be less useful and more difficult to encounter. This makes total sense, and that is why it's important to consider what your specific job is and how the task at hand compares to it. The full context needs to be consciously considered when one is stumped; a small but reasonable cost-benefit analysis needs to be conducted. Ask, Is this problem the essence of my current work or is it a small subcomponent? Am I draining my time that could be better spent on other parts of my work?
They are ultimately small, common-sense questions, but in the moment you may not think to ask them unless you have proactively prepared yourself with the mindset to ask those types of questions.
Website Development is Engaging But Not Essential Enough to Prioritize It
Going into this project, I was naive to what front-end development entailed. I knew that it was inherently related to what was seen by users of a website, but I didn't realize until last fall just how reliant websites are on their back end. Put another way, I didn't realize just how un-realiant websites are on their front end.
The delineation between where a front end ends and a back end begins was hazy. Now it's clear: You need a back end for any case in which you have real-time data or a user-base that needs to login. That interactivity with data is where all the complex, algorithmic, gamified action can happen for your applications. Do you want to enable comments, messaging, user statistics, or leaderboards? How about version control for your articles that you might upload or special access permissions for special users? All those examples essentially require a back-end. So while not only is a front-end-only site quite limited, but front-end develpoment is so abstracted and its optimizations are so advanced that if you are working in a small team or on your own (i.e., not at Meta or Vercel pioneering advances for their own commerical sake), you'll mostly be implementing others' ideas and pre-made code.
In my opinion, front-end devlepoment's tools and frameworks used today do not require the same learning curve and thus do not provide the same capitalization on a computer scientist's skillset as other fields such as data analytics or natural language processing or cryoptography or other such subfields might. Unlike in those subfields, in front-end development, you can often just paste your code or idea into an AI model, repeat this prompt in a few various permutations if you were unlucky in the received response, and sooner than later get your desired result. Much if not most of front-end development is patternistic and rote, and therefore it's perfect for an AI to emulate. To quote my peers, front-end development is the most copy-and-paste subfield in computer science.
The Argument for Front End as Artistic, Creative Expression
There is a significant upside though which I must confess: For those who are more artistically inclined, front-end development can actually be quite fun. Front-end development can very much be viewed from the perspective of graphic design (the front-end designer is indeed designing graphics) and working in an integrated development environment while comparing panels of code to its result has parallels to tools such as Adobe Photoshop and Illustrator. The developer gets to create a large, interactive visual product with a network of interweaving pages and components, and it can be a challenge to make something that looks aesthetically pleasing and cohesive, and thus it can be quite rewarding when you succeed in it.
However, I fear that AI will soon saturate the front-end roles currently held by humans. After all, AI has come to easily replicate master artists with excess speed and a beauty that most humans only dream they could capture themselves. And with respect to front-end developent, AI models such as ChatGPT can easily write most boilerplate code you may need for a front-end, something already being captured precisely by libraries like Tailwind's Headless UI. So while front-end development as it stands can absoluetly scratch a certain creative itch, and a well designed front-end is beautiful, it may not for much longer require us. In that case, why not opt in for Squarespace from that start?
My Advice to Other Computer-Science- or Software-Engineering-Adjacent Individuals
If you are invigorated by aesthetics or graphic design, by all means engage in front-end development. Although I predict the skill's demand will be soon met with AI automation, it remains in demand, and it is one of the more propserous artistic endeavors.2
If you are not one of the individuals who falls into the camp of giddy excitement when learning about or implementing front-end design, my recommendation is that you skip learning front-end development or delay it until the end. It's worth knowing the basics of how HTML, CSS, and a library like React practically function, but going beyond that by developing your own website with proprietary code using an advanced framework without broader pre-baked solutions is simply not a good use of an actively learning computer scientist's or software engineer's time.