My Software Development Journey
Discovery
Near the end of my 11-year tenure in the retail industry, I made a choice to transition into a new career. Initially, I set out to become proficient in seven spoken languages to gain a competitive advantage in the job market. However, while researching one of the languages on the internet, I stumbled upon search results related to programming languages. I figured I could learn this quicker than I could a spoken language, so I redirected my focus towards learning programming. This was the beginning of my programming journey.
Investment
There were a lot of programming languages to choose from. I chose to learn Python due to its readable syntax. To facilitate my learning process, I invested in an iPod Touch for $299, despite the financial strain it posed, and I also purchased the Pythonista iOS app for for $4.99. Additionally, I became an active participant in the Pythonista community, engaging with fellow learners and professionals alike.
Solving someone's problem
Once I developed a level of comfort with Python, I built various utility applications. One of the first apps I created was a file organization tool that organized my mom's computer files. This project allowed me to apply programming in a practical and impactful manner.
My return on investment
One day, as I was browsing the Pythonista forum, I saw a post by a gentleman who needed assistance developing a script. Turns out he was an esteemed college professor. Remarkably, the collaboration amounted to just 20 minutes of work, for which I was compensated $200. This experience served as a testament to the value of learning to program and it further motivated me to continue learning to code.
Building something I care about
Inspired by my passion for technology and spirituality, I set out to create a Bible application using the Pythonista app to help me with studying the bible. During this time I also purchased the Editorial iOS app, which is a programmable text editor with which I rebuilt the bible app to help me search the scriptures quicker. To this day, I rely on this application as an indispensable tool for my biblical studies!
Volunteering
Following an unfortunate job loss, I formulated a plan to volunteer and expand my professional network. This led me to join a local meetup group, where I had the privilege of teaching Python and game development using the Godot engine to students ranging from ages 7 to 18. Through this opportunity, I not only imparted knowledge but also fostered a sense of community and empowerment within the next generation of programmers.
Landing my first job in the industry
Recognizing my potential and passion, the organizer of the meetup extended a contractual job offer for a technical support for his online photography e-commerce app. This opportunity allowed me to leverage my skills in a practical business context, gaining firsthand experience in the dynamic field of technology-driven commerce.
Mentorship
During this period, I connected with a friend who introduced me to my first coding mentor. Together, we embarked on an ambitious endeavor to construct an online video streaming platform. Initially starting with Python and subsequently transitioning to Rails, I learned about emerging trends such as serverless architecture and Docker containerization. While my technical skillset was still evolving, this project served as a springboard for expanding my knowledge in areas such as Strapi, a headless CMS, Vue.js for frontend development, JSON web tokens for secure authentication, and the concept of decoupling frontend and backend components.
Learn through Teaching
I discovered that teaching others played a crucial role in enhancing my understanding of programming concepts. By simplifying complex ideas and articulating them to fellow learners, I was compelled to break down intricate concepts into more digestible pieces. This process not only reinforced my own knowledge but also solidified my grasp of fundamental programming principles.
Learn through modeling
Another effective strategy I used was the practice of modeling. By creating simplified representations of real-world scenarios or problem domains, I was able to visualize and understand their underlying structures and relationships. This approach helped me identify patterns, design efficient solutions, and develop a more intuitive understanding of programming concepts.
Learning through abstraction
To make things simple, I embraced the power of abstraction. By isolating essential elements and hiding unnecessary details, I could focus on the core concepts and functionalities without getting overwhelmed by complexity. Abstraction allowed me to approach problems at a higher level, enabling more efficient problem-solving and code organization.
Learning through analogies
To further simplify intricate programming concepts, I used analogies. By drawing parallels between abstract programming concepts and familiar real-world scenarios, I could bridge the gap in understanding. Analogies provided relatable contexts that helped me comprehend complex ideas by leveraging my existing knowledge and experiences.
The Tools I used
I explored a variety of resources and tools that proved invaluable in my educational journey. Software development courses played a fundamental role in providing structured learning experiences. I enrolled in online courses that covered a wide range of programming topics, including languages, frameworks, algorithms, and data structures. These courses offered comprehensive materials, interactive exercises, and assessments, allowing me to learn at my own pace while gaining a solid foundation in programming principles.
YouTube became a go-to platform for me to access an extensive library of programming tutorials, walkthroughs, and demonstrations. I found video content particularly beneficial for visualizing concepts, following step-by-step instructions, and witnessing real-time coding examples. The diverse community of programming enthusiasts and educators on YouTube greatly contributed to my understanding and provided additional perspectives on various programming topics.
In addition to courses and YouTube, I relied on articles as a valuable source of information. Blogs, technical publications, and online documentation provided in-depth explanations, insights, and practical tips. I sought out articles from reputable sources and experienced programmers to expand my knowledge, explore advanced topics, and stay updated with the latest trends and practices in the programming world.
Another platform that significantly contributed to my learning journey was Udemy. I enrolled in several online programming courses offered on Udemy, which provided structured and comprehensive learning experiences. These courses included video lectures, hands-on exercises, quizzes, and assignments, allowing me to deepen my understanding and apply my knowledge in practical scenarios.
Overall, the combination of courses, YouTube, articles, and Udemy formed a powerful toolkit that empowered me to learn programming effectively. These resources offered diverse learning experiences, catered to different learning styles, and provided access to a wealth of knowledge and expertise. By leveraging these tools, I was able to acquire new skills, gain confidence in programming, and continuously expand my capabilities as a developer.
My first interviews
My approach to interviews is to be transparent and open about my skills, knowledge, and areas for growth. I believe in being candid about my abilities and highlighting the steps I have taken to acquire the necessary skills and knowledge to improve my programming skills.
During interviews, I make sure to clearly articulate what I am capable of and what areas I may still be developing. I emphasize my willingness to learn and my commitment to continuous improvement. By setting realistic expectations and demonstrating a growth mindset, I aim to build trust and foster effective communication with interviewers.
Even if an interview doesn't result in an offer, I approach it as a valuable learning experience. I reflect on the feedback provided and identify areas for improvement. This allows me to further enhance my skills and knowledge, ensuring continuous growth and readiness for future opportunities in the programming field.
Landing my first programming job
My first programming job was with a startup company where I played a significant role in its launch. In this role, I had the opportunity to wear multiple hats and engage in diverse responsibilities. I was involved in project management, which included coordinating tasks, ensuring timelines were met, and facilitating effective communication between team members. Additionally, I had direct interaction with clients, addressing their needs and providing technical guidance and support.
During my time at the startup, I utilized my skills in Vue.js, a JavaScript framework, and also had the opportunity to learn Ruby on Rails, a popular web development framework. This hands-on experience allowed me to apply my technical knowledge in real-world scenarios and further enhance my skills.
In addition to my technical contributions, I took on the responsibility of developing curriculum for a computer science course. This involved structuring the content, designing learning materials, and creating exercises and assignments to facilitate effective learning for students.
By actively engaging in diverse roles and responsibilities, I gained practical experience, honed my technical skills, and developed valuable project management and communication abilities. I believe that my experience in launching a startup, utilizing Vue.js and Ruby on Rails, and contributing to curriculum development demonstrates my adaptability, versatility, and passion for learning.
Interviewing with Gitlab
During my job search, I had the opportunity to interview with Gitlab, and it was an exceptional experience. Throughout the interview process, I found their approach to be thorough, professional, and engaging.
I was able to progress quite far in the interview stages, which allowed me to gain valuable insights into Gitlab's company culture, values, and the nature of their work. The interviewers were knowledgeable, supportive, and provided constructive feedback at every step.
While I didn't receive an offer from Gitlab, they expressed appreciation for my skills and expressed interest in my future applications. They even mentioned that if I were to reapply, I would have the opportunity to bypass certain stages of the interview process. This positive feedback and encouragement reinforced my perception of Gitlab as a company that values talent, growth, and ongoing relationships with potential candidates.
I hold Gitlab in high regard, not only for their excellent interview process but also for their commitment to creating a positive candidate experience. Their recognition of my abilities and the potential for future opportunities speaks to their professionalism and dedication to nurturing talent within the industry.
I continue to view Gitlab as a great company, one that aligns with my values and goals in the programming field. The experience of interviewing with them has left a lasting impression, and I would enthusiastically consider reapplying in the future should the opportunity arise.
Overall, my interaction with Gitlab exemplified the importance of positive candidate experiences and the impact they can have on building lasting relationships and mutual respect between candidates and companies.
Working at a fin-tech company
Presently, I am fortunate to be employed at an online fintech company that has had a profound impact on my professional growth. This organization has provided me with exceptional opportunities to expand my skill set, and their unwavering patience and support have been instrumental in my development as a programmer.
Working within this company's dynamic environment has exposed me to a wealth of knowledge and expertise. The culture is one of the highlights, characterized by a diverse blend of individuals from various backgrounds, ages, and nationalities. The inclusive and collaborative atmosphere fosters an environment where everyone feels valued and motivated to contribute their best.
One aspect that sets this company apart is the strong emphasis on teamwork and cooperation. Colleagues readily lend their expertise and guidance, resulting in a cohesive and supportive work environment. The collective intelligence of the team is evident, and the opportunity to learn from such talented individuals has been invaluable.
The company's commitment to nurturing its employees' growth is evident in the multitude of learning opportunities available. From technical workshops to continuous professional development programs, they prioritize equipping their workforce with the necessary tools and knowledge to thrive in the industry.
Moreover, the company's dedication to innovation and cutting-edge technologies is inspiring. They encourage exploration and experimentation, fostering an environment that encourages employees to push boundaries and bring forth new ideas.
In summary, my experience at this fintech company has been nothing short of exceptional. The combination of a supportive and collaborative culture, a diverse and talented workforce, and the opportunity to work on cutting-edge projects has propelled my growth as a programmer. I am grateful for the invaluable experience I have gained and look forward to continuing my journey with this remarkable organization.
Building my Portfolio
In addition to my professional endeavors, I recognized the importance of having a platform to showcase my diverse skill set, ranging from graphic design to programming. To address this need, I took the initiative to create a personal website that serves as a comprehensive portfolio of my work.
Through this website, I not only exhibit my various projects and achievements but also provide a platform to share my knowledge and experiences. With the intention of supporting aspiring developers, I have incorporated a blog section where I regularly share insights, tutorials, and best practices related to web development. It is my sincere hope that the information shared on this blog will prove valuable to individuals seeking guidance and inspiration in their own programming journeys.
Furthermore, I have curated a collection of app templates available for sale on the website. These templates serve as practical resources for novice developers, offering them a safe environment to practice and enhance their web development skills. By providing these resources, I aim to empower and encourage individuals to actively engage in the learning process, enabling them to gain hands-on experience and refine their abilities.
Overall, my website serves as a testament to my dedication, expertise, and passion for both programming and sharing knowledge with others. It is my sincere aspiration that the content and resources available on this platform will contribute to the growth and success of aspiring developers, fostering a supportive community where learning and collaboration thrive.
Continual Learning
Continual learning and personal growth are fundamental aspects of my journey as a professional. In order to stay at the forefront of the rapidly evolving tech industry, I actively seek opportunities to expand my skill set and deepen my understanding of various technologies and concepts.
One area of focus in my ongoing learning endeavors is system design. Recognizing the importance of this aspect in software development, I dedicate time to studying system design principles and techniques. I leverage valuable resources, such as system design interview videos, to gain insights into real-world scenarios and best practices. By immersing myself in these materials, I strive to enhance my ability to design robust and scalable software systems.
Additionally, I am currently delving into the world of Java. As part of my responsibilities at the company I work for, I have embraced this programming language to meet the specific needs of our projects. To accelerate my learning process and gain comprehensive knowledge, I leverage various resources, including ChatGPT, an advanced language model that provides insights, explanations, and assistance on a wide range of topics. By leveraging this tool, I am able to augment my learning experience, gain deeper insights into Java, and apply my knowledge effectively in my day-to-day work.
Through these ongoing learning efforts and the diverse range of projects I undertake, I am able to continuously refine my skills, stay up to date with industry trends, and deliver high-quality solutions to the challenges I encounter. I am committed to embracing a growth mindset and leveraging the resources available to me to foster personal and professional development, ultimately driving success in my career.
Documenting my failures and successes
Documenting both failures and successes is an integral part of my learning process and personal growth. Recognizing the value in these experiences, I maintain a record of my endeavors to reflect upon and extract meaningful insights.
When it comes to failures, I view them as valuable learning opportunities rather than setbacks. By documenting these instances, I can analyze what went wrong, identify areas for improvement, and formulate strategies to prevent similar pitfalls in the future. This practice allows me to cultivate a growth-oriented mindset, embracing failures as stepping stones toward progress.
On the other hand, documenting successes serves as a celebration of achievements and milestones in my journey. By capturing these moments, I can reflect on the strategies, techniques, and approaches that led to positive outcomes. This helps me recognize my strengths, reinforce effective practices, and build confidence in my abilities.
By documenting both failures and successes, I create a comprehensive learning log that provides me with a holistic view of my experiences. This record serves as a valuable resource, allowing me to track my progress, identify patterns, and make informed decisions moving forward. Whether it's through written reflections, project documentation, or sharing insights with others, I ensure that my learnings are captured and accessible for continuous improvement.
Ultimately, this practice of documenting failures and successes not only enhances my individual growth but also enables me to share my learnings with others, fostering a culture of learning and collaboration within the broader tech community.
Summary
In summary, my journey into programming has been one of self-discovery, continuous learning, and practical application. From humble beginnings with Pythonista on my iPod Touch to collaborating on innovative projects, volunteering, and acquiring diverse technical skills, I have embarked on a path that has transformed my career trajectory and instilled in me a deep passion for the dynamic world of programming and technology.
Throughout my journey of learning programming, I actively utilized various techniques to simplify and enhance my understanding. Teaching others, modeling, abstraction, and analogies all played significant roles in breaking down complex concepts, fostering a deeper comprehension of programming principles, and ultimately accelerating my growth as a programmer.