Look ma, no React: I recoded my portfolio site with vanilla everything
clairefro.dev
clairefro.dev
A better education path (in a bootcamp, university, book, youtube, whatever) would start with the fundamentals and build it from the ground up... not the other way around.
(I just realized how lucky I am for being taught in the best possible order, from the ground up... first the basics... and how so many people didn't have this opportunity)
Give that "senior CSS developer" a day and figure out how to manage state, then what you get is a crap.
The proper way to do it is to do code reviews and teach newbies how to do things like this. Ideally they should have asked about it(or just googled) before the review.
I think "well just fix it later if needed" is asking for trouble and you're basically just writing legacy code.
I think a failing of a lot of these bootcamps is they encourage people to present themselves as more experienced than they actually are. I don’t mind someone who’s starting out, and has a lot of potential, but please be honest about your skill level, as it just disappoints the interviewer and misrepresents you.
But yes, to anyone in a boot camp, get yourself some Khan Academy or whatever you need to get the fundamentals. This is an art, a science, and a craft, and you need to study to show your pride in that craft.
This was around 2017, most students didn't become React devs. Most students did end up in the JS ecosystem, but 30% did something else [1].
[1] When I say 30%, that's not an official statistics. It's just on my impression what I've personally seen from students who connected to me on LinkedIn. It's a guestimate at best.
For example, I never really had to know how a compiler works or assembly, but I know it. I only needed my data structures and algorithms knowledge once. My knowledge of UML? Meh
And so on
The problem with _aiming_ only high enough to create technicians, though, is that you create a good chunk of _operators_, instead, who make do with both thin _and shallow_ slices of knowledge, making them poorly suited to any kind of generalization.
Once in a while, (lower level) software needs to be rewritten as underlying invariants go out of fashion. Think filesystems due to hardware access patterns etc. - to unlock magnitudes of performance improvements. The scary part is maybe we'll never have enough programmers to know how to do "the hard stuff" anymore. I hope I'm proven wrong though!
I had some friends being honest about only wanting some good money, not top high, but in comfortable zone, and preferably fast, in less than a year. With that kinda of mentality, I usually recommend going straight to the most used stack where I live, React, Angular or Java.
They are usually just starting and want to feel the waters, I tell about the basics and link some online courses. Everyone can start on one tech and learn another later.
I myself learned frontend before high school and only had a formal education on software years later on college, and now I feel like pretty proficient on software as a whole. The answer to it, is usually giving some time and experience
The biggest single thing I think I ended up doing during that session was getting him to re-frame his thinking from "I'm a React developer" to "I'm a developer", emphasising how all the fundamentals remain the same, just the nitty gritty implementation changes a bit from time to time. It was interesting to watch that lightbulb moment happening with him as we were talking, while also frustrating that the bootcamp etc. training he'd been through had so fundamentally set his thinking up wrong from the outset (since had a few more interns that came via different bootcamps, and it has been the same story with each!)
I'm glad I've only been around the industry for 25-some-odd years. We already had many high level abstractions to work with. If I were old like you and had to start with flipping toggle switches, I'm sure I would have zoned out immediately and never progressed further.
I could handle flipping toggle switches now, but only because I've been engrossed in the bigger picture thanks to those high level abstractions.
I argue that this is why schools are terrible for teaching. They try and teach fundamentals without making kids interested in the topic first. As someone who taught many kids, the struggle is always making them interested, not the rate at which they learn.
I remember when I started programming, the worst advice i got was on stack overflow, that I should learn from this thick c++ textbook as a start... Wasted couple months on that book, where the concepts went through one ear and out the other, became extremely disinterested. Only until someone told me to just learn Javascript and build things was when I progressed and learned rapidly. Took me only a year after that to get a job with me becoming interested very quickly on learning fundamentals from there. If I kept learning from a book, it would've taken me several years before I got to even building. It's silly to assume someone who learns from the top down can't learn the fundamentals at some point.
Now I've learned game development and currently learning ai on the side. I've tried bottoms up learning many times, but it is incredibly slow to get my goals. Top down and learning fundamentals after you get your hands dirty has been the absolute fastest way for me to learn new topics. With bottoms up, while you may learn many of the basics, you also happen to learn a bunch of extraneous information that you may never use, and will forget because you don't use it.
From my experience with bootcamp people, it leaves them woefully underprepared. But my sample size is small: 3 people, 3 separate bootcamps, similar results. They knew one portion of react, no fundamentals.
And sadly a couple of them really took to using Copilot. So they don't know how to do what they're doing and couldn't explain their submitted code.
Just the worst of all worlds there. They were effectively incredibly expensive Copilot subscriptions (not to belittle them, they did that themselves)
I just think for some, bottoms up learning has quite some disadvantages and was an approach that I've used for a long time with okay results. It would get me to where I wanted to be...but it takes way too long sometimes.
Of course there are people like you mentioned though who only do top down learning but just never go into learning the fundamentals ever, which is another problem in its own right.
* Isolate highly specific techniques into drills.
* Then go directly to practicing live gameplay. Ignore intermediate exercises.
And the approach with programming can, in fact, do this, if presented properly: definitely, we know how to isolate things into short follow-along examples. What tends to be missing is the "live gameplay" element, because it's hard to set up sample projects that are complex enough to reveal the need for a particular technique.
Nobody learns block how devices work before filesystems because it's backwards. Filesystems are the motivation, block devices are a means. The processors course in college comes after the intro programming and after systems programming.
So let's take you, for example.
How far back did you start ? Did you write a basic HTML site in notepad?
Did you program your own TCP/IP stack?
Of course you at least configured the actual Web server using Apache on your Debian vps, right?
See how tired this argument is?
As for me, I just directly manipulate the platters of my hard drive using a magnetized needle to encode sequences of ones and zeros.
So the options are bootcamp or not. Not from the ground up or not. Bootcamps cater thst group. Ideally skilled, smart, willing to learn but on a tight schedule and in need of a job.
This also changed my mind a bit on how to think about bootcamps. They are a way to give people who couldn't afford a longer education on the discipline an entry point.
All the success or failure is still on the person, and there is a lot to learn, but I respect everyone going through the hard path.
Also I find the colour scheme hard to read but maybe it’s just me.
If you started your career in the last 5-10 years then yes, it might be news.
An entire generation of web developers has been trained to think that every app big and small needs to be a convoluted SPA. The results are a disaster.
I use JSX because it's a nicer templating system than EJS or similar. It allows me to write components to encapsulate reused fragments rather than text manipulation. And I like it, which counts for something.
Candidly, this is something that people who fulminate about React probably should know before they start talking.
For example, I've been working on a character generator for the Inquisitor tabletop game. It's completely static because I just SFTP the build output to my webserver, but it uses React and JSX.
If you've ever had to build a static website from scratch, with the same navigation, footer etc. on each page, and without using frames, then you'll appreciate the amount of work that a templating engine saves you (whether JS-based or else).
Note they said "JSX as a templating language". Why worsen the experience using Python + Jinja when you're just building a static site.
A static site is necessarily not dynamic though, as soon as you need dynamic features you need to reach for one tool or another. "Static site generators" are just dynamic sites with a pre-compile step instead of JIT.
When I think of a static site, I am thinking HTML, CSS, some server side includes for header and footer. A bit of vanilla JS if you absolutely need it. Apache and nginx both have native template includes so you don't even need an extra language like py or php.
So if you wanted to say, pre-generate those pages with the header and footer already there, you would ... ?
I would not want to pre-generate those pages. Your static files on an S3 bucket are still served by a webserver.
Anyway, can you honestly say, hand over heart, that server side rendered JSX or React is a robust and simple solution comparable to SSI or I don't know, a bit of copy pasting? Of course not. Server side rendering is a complex toolchain that will rapidly and constantly deprecate. My blog has been sitting on the same "stack" for 13 years, takes me 5 seconds to set up a new post.
I have worked on countless JS projects, sometimes they don't even build just 6 months later without faffing about with packages and versions.
The thread is about pregenerating static content, "can you honestly say, hand over heart, that server side rendered ..." is way off base. Seems like"static site" means "assets can be plopped into any server that can serve static assets" to one set of people, and to others it's an invitation to balk?
I'm in the former camp, if that wasn't obvious. If you want to talk about serving static assets to host a blog, I'm down. If you want to compare server stacks, I'm out.
My TL;DR I guess, pregenerating/SSR, is a more complicated toolchain than is needed for a simple site (and what I interpreted the topic comment's point to be). How you serve it wasn't really the issue, that is the easy part. I might leave it at that, cheers for being gracious.
Every time i start making a static website, i end up needing to include a table (or some other structured display of data) and then just switch to JSX to render the data with a loop. Sometimes i then render it as html and deploy, and sometimes i deploy it as react. But that’s how i usually end up using React even when static.
I wouldn't go back to doing text manipulation to generate HTML, because I value not having to make sure I've escaped all my quotes.
For instance, CFML:
<ul> <cfoutput query="people"> <li>#firstName# #lastName# </cfouput> </ul>
You can also write classes that return data and custom tags that return rendered html.
<cf_PeopleList queryObject="#people#">
I'm not saying we need to go back to those languages necessarily, but I think there's a ton of misconception about how those languages can be used, and quite a bit of reinventing the wheel in the Javascript world.
But even, granting your correction: in the CF example you're writing representation and logic in two separate contexts. JSX does not do that. JSX is JavaScript and the constructs that JavaScript provides work without fail with the constructed trees (which need not be DOM trees, e.g. react-three-fiber) you're generating. It puts a lot of strain on the assertion that you must-repeat-must separate these concerns, which hasn't been materially true really at any point in my career all the way back to JSP or Velocity templates where (much like ColdFusion) you had worse tools for one context than you got for free with the other.
While JSX and something like CFML (or hell, Angular) look similar when you squint, this is a different thing. The closest equivalent is something like Scala or Visual Basic XML literals, which never took off; JSX is no-bullshit a step change in consistency and productivity and it's awesome.
I am unaware of a major PHP framework that is designed around similar, though it may exist.
If you mean rendered once for all, i.e. statically, there are some PHP wikis, frameworks, and caching plugins that can/do work that way.
I fail to understand why anybody would use JavaScript - a language so bad everybody uses a series of wrappers around it - for anything they didn’t absolutely have to (e.g. client code).
The entire point of the MVC architecture is to allow you to pick the best tools for the job.
EDIT: I’m not saying PHP is good, though it’s better than JS. And TypeScript is still JavaScript with extra steps.
TypeScript is an excellent language and I agree, no one should be using Javascript anymore.
edit: hm, she says it's a yaki imo / satsuma imo color theme. I love yaki imo.
The site has poor contrast ratio - fails all accessibility guidelines for text contrast ratio requirements.
For me, the main problem is the font weight. I'm sure it looks better on high-density displays, but it is way too thin to read comfortably at a regular pixel density.
I use a tool called CCA and it takes font size into consideration.
I use a high resolution screen and the text is rather small - hence why it's harder to read.
On mobile it's OK.
* as it’s simplest, it’s a really easy to use templating tool.
* there are a tools that compile to mostly static HTML, so not performance hits
* theres almost always something that pushes you to want some JS. React is handy to have. It also opens the door to all of the the community packages. No sense to re-invent the wheel.
What besides shitty/illegal tracking code and cookies do you need to include? Honest question.
More generally, forms. Forms always seems to morph into more than just simple inputs.
I even wrote my own simple test framework that shoves the results on the bottom of a page. After adding a few features I decided to switch it to Jasmine.
One thing I'm noticing is how often you need npm which I find very annoying. How is a JS library or framework anything more than a single JS file that you have to include in your page? Why is everything npm this and yarn that? Jasmine has standalone install instructions that are easy to find but I can't say the same about Jest.
Jest is a different story, it's not a single JS file and has many dependencies. Running it globally is an easy way to reduce the need to include it per project.
I'd much rather do `npm i whatever` than having to hunt down a bunch of git repos and copying files over and when they're outdated having to do the same thing to update them etc.
> Coding a basic vanilla multi-page application (MPA) saves time in development (goodbye babel/postcss/SSR config) and builds are fast (this site builds in less than 1.2 seconds).
I'd hope that builds would be on the order of a small pile of milliseconds! (or zero: a site like that could just be handcoded, really).
> I'm only using these 2 lines of Javascript to add the current year in the footer copyright tag
This could also be eliminated. At least in the US, there is no legal reason to add a copyright notice at all, and you certainly don't have to add a year. Those requirements were removed years ago.
But, if all you want is the year, why not do that server-side? Or bake it into the html and set up a bit of automation to replace the year with a new one every Jan 1.
In this case I think I'd argue that the JS solution is the most simple to implement+maintain.
Another advantage of setting it in the build is it'd show even without javascript. If I disable JS, no copyright statement at all appears on the page. So if it was really necessary to declare your copyright, then would it mean anyone who disables JS can freely infringe?
I agree just leaving the copyright out of the footer would be best.
It's like when remix people talk about progressive enhancement to me. Sure, cool, you can do things differently. But why? If you already know the ins and outs of a framework or tool and are productive with it, use it. I'm never gonna hire someone because of how much they "flexed" with their vanilla site, just like I won't hire someone who flexed with their cool fresh-from-bootcamp react animations.
Remix is an improvement over react as a framework though because you can fall back on native browser functionality where the framework will fall short (high latency, slow devices, no JavaScript).
100% agree here. But if I were going to rewrite a whole application, I'd need a really good value prop.
> high latency, slow devices, no JavaScript
I don't see why high latency would be improved by remix, you're still fetching everything it's just without the waterfall. I've yet to see a modern-ish device (going back to iPhone 7s) that struggle so hard with rendering that progressive enhancement is valuable.
Are there modern devices which are that slow? Or browsers without js?
It's exactly because of the waterfall. If I have to make 3 roundtrip fetches, and the latency of each is increased by 150ms, then eliminating 2 subsequent fetches will save me 300ms.
> I've yet to see a modern-ish device (going back to iPhone 7s) that struggle so hard with rendering that progressive enhancement is valuable.
I have used an uncountable number of websites that are extremely janky, slow to load, and overall unpleasant to use on mobile while traveling on trains and busses between cell towers. Some of that can be attributed to ads but the reality is you don't need SPA's to serve news. Remix is cool in that it lets you develop like an app but serve like a website.
All the tooling we have is exactly why React has an overhead which is far from nil. Every package goes through a period of changing its best practices, some go through multiple. Entire packages go in and out of season, seemingly depending on the phase of the moon. There's a new bundler every year, each with its own quirks. For some things there's 4 "go to" packages that achieve the same thing but take a different path to get there. You have all these packages and tooling you have to learn, stay in touch with, maintain and fight against. All of that so you could ship megabytes of JS that ultimately just changes some text on a page. You can do all of that with vanilla JS and spare yourself the headache.
But if you're already doing that, because you work in the field, or are passionate about it, then that checkbox is ticked.
I wouldn't do all that JUST to build a static portfolio, but if you already learnt and kept up with all of that stuff, then I still don't see why not use it.
I worked on a team maintaining solutions in React, Vue, angular, Svelte, JQuery and more. It sucked. Basically every task I ever did there was my first time doing that thing with that framework.
I'm not arguing everyone needs to move to react. I'm saying the opposite. Stick to the tools you know. I once worked in a strict java-angular.js shop, and it was awesome. Everyone was familiar with the tech and the company saved energy otherwise wasted on tool-related decisions.
My point is this
> it is more of a flex in this SPA era to show you know how to make a website the old-fashioned way.
is not valuable to me at all. If I were giving advice to a new programmer, I'd tell them learn the basics first, like your html, js, css, and then familiarise yourself with one of the frameworks. Then if you want to build your portfolio, build it in whatever you like, but for people at that level, it can be a great chance to practice and show off their skills to employers. If you're shipping 2MB, who cares.
npm install -g vite
vite init my-react-app
npm install
npm run dev
The most popular build tools have mostly stayed the same. Some things have fallen out of fashion sure like gulp. But overall the abstractions built over complicated tools have only improved and only made it easier to get started with web dev. I’d argue it’s never been easier to start a modern statically typed react app.
Someone forgot to tell these folks:
https://buttercms.com/blog/how-to-create-a-blog-with-react/
https://www.sanity.io/guides/build-your-first-blog-using-rea...
(and many more)
I'm firmly in the camp that React and similar frameworks are overused. However, the point is that there's a large part of our industry that is bought-in (and in many cases, built businesses around) the concept of "React all the things" and it's encouraging to see push back.
Not interested in reinventing the wheel (no framework), dealing with lots of boilerplate and over-complication (Next/React) or using multiple UI libraries (Astro). SvelteKit is a fine balance between simple and providing enough functionality that allows me to focus on generating content with minimal friction.
Proceeds with a distracting animated image of the old portfolio, thought that was funny.
Why was it developed?
Because, you know, users just love seeing a bunch of grey boxes shimmer and dance on a white background for several seconds before the magic really starts to happen.
So any exercise which demonstrates that there just might be an alternative to this philosophy should be applauded.
This guy asked what we will use in the front-end. I said react and he was like "amazing, good job, it will be great" and the talked about we should always use react. So yes, there are places where react is used without question.
Also, we will use snowflake as a backend while indexing would make everything a lot faster and the budiness logic is done by 800+ line sql (stored procedure).
I ranted about this in another thread a few months ago and I stand by what I wrote: https://news.ycombinator.com/item?id=34857513
This has nothing to do with React, this is a placeholder rendering strategy employed by many different frameworks and languages.The rendering strategies are orthogonal to the framework.
I've written many websites entirely in React but you'd never know it, because they're all SSG. I've done hybrid SSR + SSG + placeholder/delayed load.
I could have done all of that with .NET, Elixir, etc. too because it has nothing to do with the language/framework.
Instead of making sweeping statements about the choice of stack, I appreciate that someone took their time and built something of their own. Congrats. Next thing they should do is an accessibility audit and learn from it.
P. S. Needs to be even more garish. Remember the "space pigs" theme of FastTracker II? Man, those were the days.
When I started my first Node/Express project I picked pug too but quickly realized it was too removed from vanilla HTML I was seeing in the books/MDN and switched to Handlebars. Immediately discovered that Handlebars didn’t have a built in support for something fairly basic I needed and I either had to roll my own extension to it or look for something else so I ended up switching yet again to EJS and I’m still using it a year later today. EJS is perfect if you want vanilla HTML + vanilla JS.
Not really. Doesn't your experience, reflected in your CV and the technical interview, already prove that? A portfolio site is nice to have, particularly if you're a designer and want to showcase your work, but it shouldn't be a requirement for a developer, frontend or otherwise.
While the paperfuge is cool and may even reach higher RPM/G than some bench top ultracentrifuges, it cannot do so consistently.
Putting "Samples were centrifuged at whatever amount of G:s yours truly could crank out on a hand built paperfuge for a solid 10 minutes" in the materials and methods section doesn't exactly scream reproducible science.
Before that I had a Phoenix site and I feel like every time I touched it (months apart) I had to update something.
Not such a big deal at work where monitoring for security vulnerabilities and updating dependencies is paid work that we make time for but I hate that kind of busy work on my own time.
So while one doesn't have to know JS, it will definitely get you through a lot of doors. And not knowing it, or being too stubborn to keep your skills in it polished will keep you in the doghouse.
My concern here is that your website _is_ your portfolio - including how you build it. It's not just the content and long narrative that's going to sell you. This new approach has switched from showing what you can do to telling what you can do.
I don't have to use any of Hugo, Jelkyll,..., because i can cook my own SSG toolkit right inside React.