OK, so this is my second AMA, but it's been a while and I thought I'd try to answer any burning questions out there in Dev land.
I've been a web developer for close to 15 years, largely in front end, more recently specialising in JS and React. I've just moved jobs to become a little more fullstack, dealing with AWS and cloud engineering.
I run The Front End podcast too, and I'll be using some of the material here for an upcoming Q+A episode.
No question to big, too small, too weird or off-topic!
(PS - I'd probably avoid the 'is HTML a programming language?' one because some people will literally burst into flames...)
Oldest comments (109)
Hi man, your profile is quite similar to mine. How do you think about Hooks? I think it sucks, and the people love it sucks even more. Nice to know you :D
Hello there!
I'll be honest, I was a little resistant to Hooks to begin with. But sometimes, when you're perfectly fine and dandy with whatever you're using, it's difficult to justify moving to something new, especially when the perceived benefits of that something new don't outweigh the effort involved to do the move. I was very productive with functional components and class-based ones.
However, I've made the leap after learning a bit more and gradually introducing them and now I love them as they make things much simpler more often than not.
Have a read of Amelia Wattenberger's amazing article on them and see if it changes your mind > wattenberger.com/blog/react-hooks
Thanks man, I just read the other article that you shared, and frankly, it doesn't change my mind. I am stubborn, I know, but her use of Class components is just terrible to begin with, and even if I don't know how to use it better than her, the benefit of Hooks code being shorter won't bribe me to look away from its hacky and dangerous nature. Thanks anyway. It's nice to know you
You too matey, always nice to make a connection :D
I think that's a great nature of development: what works for one, doesn't for another. And the Facebook team have explicitly said that class things aren't going away because they have literally 1000's of components that depend on them.
So the good news is that you don't have to choose!
Yeah, and then we have Preact, or Vue or stick with old versions... anything that keeps me away from Hooks. I thought Redux was worst until I saw Hooks.
Anyway, have a good day (or night). Cheers
the future of Redux?
Ooo straight in with the hard questions, love it!
Redux has always been a funny one for me as it seems so complex to begin with; mainly because it's a lot of overlapping terminology and takes quite a few moving parts to implement.
However, now that React has brought the concept into the core (things like
useReducer()
), I think there'll be a shift towards using something like that as opposed to more elaborate third-party libraries such as React-Redux.We may even see a shift away from this centralised state into smaller, micro-states that are only shared across part of an application...
Thank you for ur concise yet thorough response!!
I'm completely with u on this one. I'm quite happy it's shifting towards that direction:):).
Could you give advice on projects for newbies? What kind of technologies/skills you'd expect to see in a junior frontend dev's portfolio? I'm starting small, so feel like my github is a collection of trivial things. Thanks a lot.
Hey Thuyet,
Good question. I think I'd expect to see a smattering of different things as they try to work out what route they want to go down. I advise my mentee's to have a few 'complete' projects that showcase some exposure to a few different technologies or approaches.
For example, I have mentee who has built a great song-finder web app. You can search for artists or songs and view lyrics and find album info. It's really good as it showcases some HTML and CSS work, but exposure to real API's, React and (most importantly) how he thinks, how he has approached the problem.
Those kinds of things work really well for me and that's what I'd like to see if I were hiring someone.
Hi Rob, you mentioned in your descriptions that you just moved to another job to become a full-stack dev, so I guess this means that you got the job not having all the requirements for that role?
How would you suggest to approach a new role when you don't have all the skills required but want to have a chance to learn new things? Usually, this kind of situation is a classic for a junior dev but how does it work for seniors? Do they apply for entry-level too?
Congratulations on your new job!! :)
Thanks Davide.
Well, firstly, this was a bit of a happenstance opportunity that came about. I'd applied for a front end role that was purely London-based (job advert was quite vague), but the recruiter happened to have another role (the one I got) that was available and thought I'd be a good fit for.
I wasn't sure about my skill set, mainly because it's been a while since my back end days, even though I'd spent a lot of time with C# and SQL databases, etc. The main thing that gave me pause for thought was the amount of AWS involved -- something that hugely interested me, but I had no experience in.
But my advice is to always apply for a role, unless you absolutely know it's not right. For example, I have used cloud computing systems before (albeit lightly) and I knew I could learn to use AWS products. Certainly when we're talking about using an AWS SDK for something like JavaScript then, it's not easy, but it's familiar, right?!
However, if it was a C++ role, then yeah, there'd be no way I would apply for that as it's just so far out of my wheelhouse and skillset.
I think senior or more experienced devs have it easier, because, whilst not applying for entry-level things, it is easier to transfer experience and skills to related environments. I have some comprehension and physical experience with SQL, so it's easier for me to bring that back to the surface and start off more familiar in a new role that uses those skills.
For newer or junior devs, I'd have two bits of advice:
Plus, recruiters can be great if you find one that's invested in you. They'll help open doors that would be otherwise shut if you tried on your own!
Hi Rob, Many thanks for this thread. I have three questions.
At what extent a Front end developer should know the Backend or DevOps?
Actually, how do you define a Senior Frontend Developer? ( The first question's answer may be included here! )
Lastly, I am in this problem now actually. How do you make side projects to rank up your skills and show to your probable employees (as I am not so good at backend, showing a full functional app is bit trickier for me)?
Hey Anower,
Great questions. In order:
It depends on the role. Personally, I think companies expect too much from a single roles these days. If you need large amounts of backend and dev ops, then those are specialist (and separate) roles in themselves. However, it's useful to have some exposure to the concepts and even maybe some experience in configuring a CI/CD setup. There are a lot of venn diagrams in tech, so it's useful to be able to at least understand what the dev ops team is talking about, for example.
Again, it depends. For me, I think it's about experience. You've seen the same problems and solved the same challenges time and again and this allows you to cut some of the trial and error and see at least the direction you need to be headed. Sometimes, it's about knowing what absolutely won't work, rather than what will :D
I answered this sort of thing in one of the other answers on this page, but I'd focus on making realistic things that showcase a few different skills combined together. For example, you could make a weather tracker that automatically locates you based on your browser's location identifier, then pulls in local weather info from an API and displays it in a sexy way.
Not particularly flashy, certainly not original, but it showcases how you think and approach problems, which is what employers are most likely looking for (or they should be!).
Web API...I honestly don't know. I'm quite excited about some of the new JS features though. The optional chaining is on fire (developer.mozilla.org/en-US/docs/W...)!!
It's the little things on the front end that always prove the most fiddly and not, surprisingly, the huge complex features that people think will be hard. For example, in a recent project we had a really faffy combination of radio buttons and checkboxes. They had some tricky dependencies (like you could choose multiples of X but not Y) and the logic to remember all those choices and dependencies was mind-melting...
Recently, I've been working on a couple of things:
I'm a backend developer with 3 years of experience. I want to move on to frontend development ... what should I know?
The holy trinity: HTML, CSS, JavaScript. Then, how to slot them together successfully. You can always learn a framework (e.g. Vue, React, Angular), but I think it's easier to pick those up with solid fundamentals.
What are you coding in at the moment as a backend dev?
I'm currently working with php + symphony but in the past I have worked a lot with node js ... so I know js well enough.
I've always been a very creative person ... I love composing music and drawing. the idea of designing an ui has always attracted me. are there other tools you need to know? for example those related to the creation of a mockup or adobe stuff?
I think there's definitely a lot to be said for learning some complimentary skills, such as UI/UX design. Wireframing is valuable too, so check out something like Balsamiq, or Moqups (highly recommended), and Sketch (although that's a bit more design-y than pure wireframing).
A good tool to practice your front end skills is to take a theme design from something like Themeforest and try to recreate it yourself. It'll give you a good idea of the layout of a design and how to sharpen your creative eye for where things don't look quite right.
Photoshop skills can be useful, but it really depends on what you're doing. For example, I can chop graphics up and create clipping masks, but nothing fancy. I'm not a designer, and I shouldn't be. But it's useful to work in overlap sometimes and understand each other's language.
Hey Rob,
Thank you for this AMA. I have the following questions:
I am a full stack developer who although can code your front end app and handle all the behaviours, I often find myself struggling to make the UI look more appealing. What would you suggest I do or things I can read up on to come up with better designs.
I am a strong proponent for separation of concerns. One of the reasons why Angular appeals a lot to me and to an extent Vue as well. Nevertheless, I see companies increasingly switch to react or mention that they want developers with React experience. Should I pick up react or continue on my path of vanilla JS with a dash of Angular/Vue when a framework is required?
Hey Deepak,
Practice. Simple. A good example of this is to take an existing design (say, a template on somewhere like Themeforest) and code it up from scratch. By doing it over and over, you'll get to appreciate what works and why and develop your creative 'eye' for similar patterns (e.g. navigation or card layouts).
It really depends what you want to do. React, whether you like it or not, is the framework of choice in modern UI development. You don't have to make that choice, but it wouldn't hurt to be familiar with its concepts and approaches, which can only expand your skillset.
That said, it is largely just modern JavaScript with some HTML thrown in there and some React-specific concepts, so vanilla JS won't go out of style!
Your thoughts on Atomic CSS approach? Do you believe in it's future potential and the chances of it to become the main way we write styles?
Weirdly (and not least of all because it's a shameless plug :D ), we talked about this on Episode 7 of my podcast about Tailwind and the general shift towards this atomic/functional/utility-driven styling.
I really like it. I didn't to begin with. I think it takes a bit of a mind-shift to adopt it and it's not the most friendly of things to pick up. Especially when you've come from the cushty world of UI frameworks with their 'button button-primary' style approach.
However, I think the atomic approach is very appealing and I'm starting to adopt it in newer projects. I think it fits very well with our modern, modular development habits.
But sometimes, it's useful to have a blend. Tailwind, for example, is quite low-level by nature, but allows for common patterns to be grouped, where necessary, into something higher-level and more akin to a familiar design system or styling framework.
But the short answer is yes, I feel that it will start to replace a lot of common approaches which often become difficult to mange and bloated.
Exactly what I was thinking! Thanks for approving from experienced dev!
Hi Rob, nice to meet you!
I have 4years of experience as a Front-End and I am trying to learn to make API and learn a backend language to enhance a side project of mine that people around me are using everyday more. So I want to ask you which kind of BE technology to learn that could be a nice compromise between my poor knowledge of that field and to be perfect for an app that has the potential to be largley consumed?
Thank you for your time!
Nadia, hello!
Node might be a good way to go. It's already in JavaScript, so it should be less of a transition and learning curve for you. You can create API's in there using things like Express JS and hook up to a data store such as Firebase or AWS Dynamo DB, without having to muddy the waters with a fully-fledged DB solution.
That said, if you want to spread your wings a little more, then Python is a popular choice, coupled with Mongo DB for storage. You could host them on a service such as Netlify for very little to free cost too!
Hope that helps :D
Thank you for your response, Rob :) I think I will follow your advice and start to become a true MERN stack developer!
Sorry I got triggered by your comment Rob. DynamoDB is a fully fledged DB solution with global tables (multi region) and caching (DAX) built in. Amazon and other major corporations use it to for peta-byte scale databases. In terms of design and built for purpose for cloud it will beat MongoDB on performance without actually having to install and manage anything.
See the use cases here: aws.amazon.com/dynamodb/
It's highly recommended to use with local installs available on Docker.
Hey Rolf, no need to apologise sir and I definitely don't like the sound of triggering anyone 😬
But that's my bad, I phrased it poorly.
Of course Dynamo DB is a full solution. What I meant was, in Nadia's context of not having a lot of back end experience, something like Dynamo DB will give her some persistent storage with the hassle of setting up a full, traditional-style, relational DB. It also brings a much shallower learning curve too, especially when, as you say, there's no installation and managing of things.
Thanks for highlighting!
How do I learn to make UX/UI Designs?
Good question, a combination of a few things:
In react where should i use redux.
Should i store all states in redux?
Should i call all apis in redux?
What data should i put in redux?
currently in my company we do all type of api calling in redux. Sometime it cause issue like because it's UI is connected with store. it shows previous data first and after few sec. it shows new data.
Do you have any repo where i can see good coding structure?
Hey Parmesh,
I have a good article on this using data handlers with Redux which might be a good read for you.
But, to answer your questions, in order:
Use redux to manage (store, retrieve and edit) only the parts of state that don't make sense to keep locally to the component. For example, if you have a number of components that depend on the loading state of an API call to display different UI elements: this belongs in global state. Similar if you need to share parts of common data across different, unrelated components.
No, not everything state-related should live in redux global state. See answer one, but mainly if you have something that's local (for example, a toggle state of a button) then keep that in the component and don't involve redux
I'm not entirely sure I understand that one, but I would say 'no'. You might call redux actions based on the outcome of an API call, but don't call API's using redux. The redux pattern should be used to update state and that's it.
I think this is answered in the previous answers :)
Yep, check out the article link in the first part.
What is your Front End horror story?
Ooo horror story...I don't know how 'horrific' this is, but it certainly concerned me when I started at a very large organisation as a front end dev....
We had a website. The main website of the organisation that was responsible for everything from information to sales and marketing, the whole shebang really. It had 10's of millions of visits each year, and easily had between 1-2K of active people on the site at any given time.
How was this updated, you ask?
By manually running a Gulp task on someone's local machine to build the theme files, then MANUALLY (!!) uploading any changes over plain, vanilla FTP (using Filezilla) to the webserver. No unit tests, no decent form of manual testing available (because it ran on a complex and billion year old legacy CMS monstrosity), just copied over and clicking 'yes please, overwrite these files'...
I mean, it's not as bad as Hitler, but terrifying nonetheless...
Hello, what do you think about the future of Javascript? Will Svelte take place of React? Will WebAssembly make a huge difference in Front-end?
I don't know enough about Wasm (other than that's the abbreviation) to really give you a good answer there.
But, as for the future of JS, I don't think it's going anywhere anytime soon. I think there has been a lot of improvements on the language over the past few years and I think, given its popularity, we may end up seeing some of the features of TypeScript merged into the JavaScript core. Type checking and safety seem to be high on people's list of 'wants' so you never know. It wouldn't be a bad thing.
React gets a lot of hate, partly because it's Facebook, partly because it's arguably the most popular library out there, but I think the downside of it is that people use it for everything. Often it's a hammer just looking at everything like it's a nail!
However, I think there's a reason jQuery was as huge and widespread as it was: it sort of filled in the missing parts of JS and made some faffy things quite simple. I think it's similar with frameworks like Svelte and Alpine JS where they help join the dots between some things, without having to look to much larger and unnecessary solutions, such as React or Angular, etc.
I've personally used neither Svelte or Alpine, but I think they're definitely the direction front end is going: essentially gaining some of the component-driven nature of React with its templating approach, but without all the other stuff you don't need in every situation.
Great answer, thank you very much!
Partly, it's to remember that it's never quite as fast as people thing. There is the cutting edge where things progress very rapidly and it seems like they never sit still. Then there's this slower bubble in the middle (where most people live) where you're restrained to some extent by your workplace or tooling or tech stack, so it's not as rapid.
However, for me, I like to read several blogs, a lot of different opinions and techniques on places like Dev, and follow various people on twitter to keep up to date. If I come across something that piques my interest or I feel is valuable and I want a deeper dive, I'll invest in a solid book or course to learn more, with a view to implementing that knowledge as soon as possible.