-->
13 min read
As of the first of this month, it’s been 11 months since I have been in my current position. It took exactly 1 year between “We are sorry ” and “Welcome to the team”. Eventually, someone will speak to the emotional toll of the job hunt in this current market but not me. This job hunt consisted of upskilling, networking, re-learning and unlearning stuff. Overall, I tracked somewhere in the neighbourhood of 700-ish applications, what I will say is that job-hunt 2023 was different from all the previous timelines. A new career opportunity, as always, brings a new set of challenges but also provides a lot of insights, here are 11 insights learnt thus far :
Staying current in software development requires one to embrace a state of “comfortable discomfort” - which lends itself to always learning and adapting. This means on average based on your skill level, will spend anything from 3 to 6 months annually, learning something completely new or digging deeper into what you already know. To strengthen and enhance my skill set, I have done the following :
Enums (short for enumerations) are a way to define a set of named constants. They’re instrumental in TypeScript for creating more expressive and type-safe code. In my head, they have the same features as objects. Here is another way of explaining them, ” imagine you have a box of coloured pencils. You know that in this box, you can only have certain colours - let’s say red, blue, green, and yellow. You can’t suddenly have a purple pencil appear in the box. An enum (short for enumeration) in programming is like that box of coloured pencils. It’s a special way to create a group of named values that don’t change. Just like you know exactly what colours are in your pencil box, an enum lets programmers define a set of named values that they know will always be the same. My takeaways include :
I also found this resource and this video to be extremely helpful.
Container queries allow you to apply styles based on the size of a containing element, rather than the viewport size. Here are some key points :
My references were this CSS tricks article and this video.
I became aware of slots as we utilize this feature in our codebase and @abbeyperini’s talk on said topic. Slots can be best described as a powerful feature in web components and some frameworks that allow for flexible content composition.
<my-component>
<span slot="header">Custom Header</span>
<p slot="content">Custom Content</p>
</my-component>
It’s often overlooked, but taking care of yourself is essential, especially in the fast-paced tech world. The culture of hustle and grind can be alluring, and many of us have indulged in that mindset. However, the reality is that pushing yourself too hard can lead to burnout, and your body will inevitably demand a break. Here’s some crucial advice for anyone navigating this landscape:
Sleep: Prioritize quality sleep to recharge your mind and body. Aim for 7-9 hours per night to enhance focus and productivity.
Hobbies: Engage in activities outside of work that bring you joy and relaxation. Hobbies can provide a much-needed mental escape.
Exercise: Incorporate regular physical activity into your routine. Whether it’s a brisk walk, yoga, or weight training, movement is vital for both physical and mental health.
Nutrition: Fuel your body with balanced meals rich in nutrients. Proper nutrition supports energy levels and cognitive function.
Ergonomics: Set up your workspace to promote good posture and reduce strain. Invest in ergonomic furniture and accessories to protect your health.
By embracing these self-care practices, you can maintain a healthy balance in your life while thriving in the tech community. Remember, taking care of yourself is not just an option; it’s a necessity for long-term success!
Demonstrating your learning through projects and sharing knowledge is crucial for career growth.
Creating a portfolio of projects: Build projects that showcase different skills and technologies. Include detailed README files explaining your process and decisions. Host your projects on platforms like GitHub and include live demos where possible. The rules are: make it live, make it testable and make well documented.
Preparing and delivering tech talks: Start with lightning talks at local meetups to build confidence. Choose topics you’re passionate about and have practical experience with. Use tools like reveal.js or Google Slides to create engaging slide decks.
Writing blog posts or creating video tutorials: Start a technical blog to document your learning journey. Create step-by-step tutorials on solving specific problems. Consider starting a YouTube channel for video content if that suits your style.
Effective note-taking is crucial for retaining and organizing knowledge in the fast-paced world of web development.
Effective note-taking techniques: Zettelkasten method: Create atomic notes with links between related concepts. Cornell method: Divide notes into main points, details, and summary sections. Mind mapping: Use visual diagrams to connect related ideas.
Using code snippets and diagrams: Include relevant code snippets in your notes for quick reference. Use tools like Mermaid or PlantUML to create diagrams directly in your markdown notes. Annotate code and diagrams with explanations of key concepts.
Tools and apps for organizing notes: Paper notebooks, highlighters and a pen will work wonders if that is your style, do it in such a way that it can be used to explain a concept to anyone. I would look into a tablet with a pen or stylus for note-taking, I Have too many notebooks, as this would help you to have access to all your notes digitally. Other considerations include Notion (an all-in-one workspace with rich formatting and database features), Obsidian( a markdown-based, with powerful linking and graphing capabilities) and VS Code with appropriate extensions (Keep notes close to your development environment).
Knowing how and when to ask for help is a crucial skill in development.
Best practices for asking questions online: Search thoroughly before asking to avoid duplicate questions. Provide a minimal, reproducible example of your problem. Clearly state what you’ve already tried and what results you got.
When and how to reach out to seniors or mentors: Try to solve the problem yourself first, but don’t waste excessive time if stuck. Prepare your question in advance, including context and your attempted solutions. Be respectful of their time and express gratitude for their help.
Structuring your question: Start with a clear, concise description of the problem. Provide necessary context: environment, relevant code, error messages. Clearly state your expected outcome and what you’ve tried so far.
Efficient reading and comprehension of technical material is a key skill for developers.
Techniques for reading technical documentation: Skim first to get an overview, then do a deeper read. Use the documentation’s search function to find specific information. Practice active reading: take notes, and try out code examples.
Selecting appropriate resources: For beginners: Look for “Getting Started” guides and tutorials. For intermediate/advanced: Refer to API references and advanced guides. Supplement official docs with community resources like MDN for web technologies.
Creating a personal reference library: Bookmark useful documentation pages for quick access. Maintain a list of go-to books or online resources for different topics. Use tools like Pocket or Raindrop.io to organize and tag useful articles and resources.
The choice between utility-first CSS frameworks like Tailwind and traditional CSS depends on various factors. Let it be known that I have a certain amount of dislike for Tailwind due to its accessibility issues.
Pros and cons of Tailwind CSS: Pros:
When to use Tailwind vs vanilla CSS:
Customizing and extending Tailwind:
tailwind.config.js
file to customize colours, spacing, breakpoints, etc.@apply
directive in your CSS.AI assistants can be powerful tools for developers when used effectively. In a lot of ways my questions got better with time, thus I tend to do or observe the following when using “Geeps” or the other cousins :
Formulating queries for useful responses: Be specific and provide context. Break complex problems into smaller, focused questions. Learn how to use technical terminology or analogies accurately.
Leveraging AI for code reviews and refactoring: Use the tool to review code snippets for potential improvements. Ask for explanations of complex code sections that you have either been handed or created, yes it happens.
Using AI to explain concepts or debug issues: Request step-by-step explanations of difficult concepts, analogies or annotations. Use the tool to describe bugs in detail and ask for potential causes and solutions. Use the tool to brainstorm different approaches to solving a problem.
A year or two ago, a friend of mine mentioned Zod in a conversation and explained it to me, sorta kinda made sense to me then. But now the best way is explain Zod is that it is a TypeScript-first schema declaration and validation library. Think of it as a powerful tool that helps you ensure your data is exactly what you expect it to be. Here’s a more detailed breakdown:
Schema Declaration: Just like we described checking if names are text and ages are numbers, Zod lets you define these rules clearly:
import { z } from "zod";
const friendSchema = z.object({
name: z.string(),
age: z.number(),
email: z.string().email()
});
This schema says: “A friend should have a name that’s a string, an age that’s a number, and an email that’s a valid email string.”
Type Inference: One of Zod’s superpowers is that TypeScript can automatically figure out the type from your schema:
type Friend = z.infer<typeof friendSchema>;
// TypeScript now knows Friend is: { name: string; age: number; email: string }
Validation: Remember our “friendly robot assistant” that checks if data looks right? Here’s how that works in Zod:
const result = friendSchema.safeParse({
name: "Alice",
age: 12,
email: "alice@example.com"
});
if (result.success) {
console.log("Data is valid!", result.data);
} else {
console.log("Oops, something's wrong:", result.error);
}
Advanced Features: As you get more comfortable, Zod offers more advanced tools:
z.string().min(3, { message: "Name too short!" })
z.string().transform(s => s.toLowerCase())
z.union([z.string(), z.number()])
Why Use Zod?
In practice, Zod is super useful for:
Think of a LEGO analogy; Zod is like having a master builder’s guidebook that not only shows you how pieces should fit together but actively helps you assemble them correctly. It gives you confidence that your data structures are solid, just like a well-built LEGO castle.As you grow as a developer, you’ll find Zod or tools like it become an invaluable tool in your toolkit for building robust, type-safe applications.
Remember, your journey in tech is uniquely yours. Embrace the challenges, celebrate the victories (no matter how small), and never underestimate the power of perseverance. Remember that even the most daunting job hunts can lead to opportunities for tremendous growth and learning. As you continue on your path, keep pushing your boundaries, stay curious, and most importantly, take care of yourself. The future of tech is bright, and with the insights and attitudes I outlined here, here is to hoping that you will be better equipped to be a part of it. I can be found on the socials (LinkedIn and Twitter) and my dms should be open if you want to drop a line.
This was originally published on dev.to in October 2024. I am currently migrating my main source of publication to a personal self-hosted blog (developer growth).