My name is Joey Pedicini. I began my journey in 2010 after graduating high school, which was over 13 years ago as of writing this. My objective is to assist you on your own journey. I want to help you avoid the mistakes I made, prepare you for the obstacles you may encounter, encourage you to believe in yourself, provide clear direction for your path, and support you in reaching your fullest potential.
I enrolled at The Ohio State University to pursue a Bachelor's of Science degree in Computer and Information Science. When I applied to university, I had a vague idea of what I wanted to do in my career. I knew that I enjoyed working with computers and had a natural talent for it, but that was the extent of my knowledge. I was unsure if college was the right path for me, as it was simply what many of my peers were doing and what my parents and teachers encouraged me to pursue. However, I have no regrets about my decision and I mention this to provide some context for the choices I made on my journey.
During the first two years, there were multiple occasions where I seriously contemplated changing my major. I found it challenging to grasp the concepts, particularly when comparing myself to classmates who appeared to have years of coding experience. Recursion, in particular, was a source of great confusion for me. I barely managed to navigate through assembly language, finite state machines, and operating systems.
I didn’t give up, and I’m grateful I didn’t, because once I got introduced to web development, and specifically frontend development, my outlook on my career changed and I found my footing. This is why I truly believe, no matter what you are trying to learn or what career you are trying to get into, you have unique skills and interests, it’s a matter of finding a role where you can let those aspects shine brightest.
What is my goal?
- to help you cut through the noise. If you ask 100 different senior engineers what is most important for junior engineers to learn, you will get 100 different answers. But there are common themes that they all can agree on. I want you to focus on that right away and not waste your time on things that don’t matter
- for this course to act as a self-guided mentorship. to recreate the proven methods that I work with my clients in order to scale this mentorship to more people
- to build your confidence. Confidence is the number one trait that will carry you in your career. Everything in this book will tie back to building your confidence.
- to organize my thoughts and ideas into an easy to follow guide for any junior developer, whether they are trying to start their career, or reach the next level.
In this book, I aim to provide my own perspective and guidance that can be applied to learning any new skill and entering any new career. In my opinion, the foundations of learning remain consistent regardless of the specific skill or career you are pursuing. While I will delve into the specifics of frontend web development later in the book, there will still be plenty of tips and learning guides that can be useful for a wider range of studies. Additionally, you may find value in following the guide to building your own personal project or gaining a better understanding of what frontend web developers do.
My goal is to provide as much vital information in as few words as possible. If you are anything like me, you have a hard time focusing on reading when there are too many words, or you can’t even get yourself to start because of the wall of text in front of you. I hope to avoid that.
The Journey of Learning Software Development
Learning software development is hard. There's no definitive right or wrong way to learn, but I firmly believe that anyone can learn if they're properly motivated. For some, this motivation stems from the thrill of creation—starting with an idea in their head, transforming it into physical reality, and then sharing that with the world. That's my preferred learning method, and that's how I assist my mentees.
The Power of Personal Projects
There are countless ways we can integrate software into our daily lives. Even though we're all unique individuals, with our own interests and skills, there's a software project out there for everyone. For me, that project materialized as a journaling app I named Bonjournl.
From Problem to Project: The Story of Bonjournl
It all started with a problem—I needed a tool to encourage me to write daily, as writing contributes positively to my mental health. I wasn’t satisfied with the existing tools; they all served their purpose but didn’t align with my unique workflow. So, I noted down a few key features that I wanted my app to possess, drafted some rough sketches on a whiteboard, and set to work. This journey highlighted how one's own challenges could fuel creative problem solving and product development.
Guiding Clients on their Learning Journey
When I initiate work with a new client, I urge them to consider a problem in their daily life that software could potentially solve or improve. It might be an existing product that falls short of addressing their unique challenges. There are a variety of projects that people have wanted to build: a habit tracker, an anonymous therapy app, a podcast summary generator, an online dog tag, a community prayer app, and the list goes on.
The Impact: Creating and Learning
What's fantastic about this learning approach is the innovation it spurs. While learning software development, fresh ideas and perspectives on existing issues are constantly being formed. One project at a time, we're incrementally improving the world. The ability to share your creation with the world is a powerful driving force.
Learning in the Information Age
The allure of the information age is vast. All the information you need to bring whatever ideas you conjure up to life is at your fingertips. At times, all that's required is guidance from someone who has tread the path before to help you navigate it.
The Mentor's Role
My clients are the captains of the ship; I merely act as a guide to keep them on course and prevent capsizing. I'm there to cheer you on and reassure you that you have what it takes. Through this process, not only do my clients gain a comprehensive understanding of software development, but they also build practical solutions that they can take pride in.
The Step-by-Step Process: Bringing Ideas to Life
One of the crucial elements of the mentorship I offer is a defined process for taking an idea from conception to realization. It's a step-by-step journey, which we'll explore in more depth below.
1. Ideation
The first step is to form an idea. There are no limitations on what ideas can be worked on, but the idea should serve a purpose - it should solve a problem. So, I suppose we could say we start with identifying the problem statement.
2. Establishing Requirements
Next, we come up with a few requirements. Bonus points are given for writing these requirements as user stories. I encourage my clients to learn about what makes a good user story (Given, When, Then; Acceptance Criteria).
3. Sketching the User Interface
If our project has a user interface, we then create some whiteboard sketches of what it will look like. This step allows us to visualize our product and plan for its functionality.
4. Review and Feedback
Then comes the review stage. We go over the sketches and requirements together, and I provide my feedback. After that, we decide on a task management process that suits the client's comfort level. This could range from using Jira, GitHub issues, or even just a plain to-do list.
5. Task List Creation
Once we have our management process, we create a list of tasks and prioritize them. The goal is to produce working, useful software as early in the process as possible to facilitate early feedback.
6. Choosing the Tech Stack
The next step is deciding on the tech stack. The choice entirely depends on what the client feels comfortable with, because the learning process can adapt to anything.
7. Development and Check-ins
Task by task, we build the project, with weekly check-ins to assess progress. I also remain available via chat for any queries or hurdles the client might face during their coding journey.
8. Setup and Launch
The first task is always to get a "Hello World" app running and have your main branch hooked up to a CI pipeline. This ensures that each push updates your production app.
9. Iteration
Once enough of the project is complete to start using and sharing it with others, we can begin to identify what is missing and what could be improved. This stage involves a lot of iteration and refinement based on the feedback received.
Embrace Imperfection: There's No Such Thing as Terrible Code
One key piece of advice I always share with budding developers is that there is no such thing as terrible code. There is working software, and there is non-working software.
Too often, developers hold themselves back because they fear producing bad code. But the reality is, the internet is built on what some may consider "bad" code. Especially if it's a proof-of-concept project, the quality of the code doesn't matter in the least. The goal is to build something that elicits feedback and allows for further iteration. If it ever reached a point where it received funding, a team would be brought on board to re-write the software to be more scalable.
So write code that might be deemed terrible and wear it as a badge of honor! It's a testament to your learning journey, and each line of code brings you one step closer to becoming the developer you aspire to be.
In conclusion
Learning software development is an enriching journey that fosters creativity and problem-solving skills. Through identifying everyday problems and turning them into personal projects, you'll gain a deeper understanding of software development and improve the world one project at a time.
Humans are innately creative. I want to build something beautiful and leave my legacy. So that someone in the future, whom I will never meet or ever know, can look at or make use of something I created which will truly add value to their life and allow them to pursue their own passion and leave their own legacy.