每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,欢迎关注开源日报。交流QQ群:202790710;微博:https://weibo.com/openingsource;电报群 https://t.me/OpeningSourceOrg

2018年9月20日:开源日报第196期

今日推荐开源项目:《你们可真是个小机灵鬼 Open Source Ideas》传送门:GitHub链接

推荐理由:这个项目是一个开源想法集合,你可以把自己的疯狂想法提出来然后寻找队友,亦或者作为别人疯狂想法的队友,用途各种各样,兴许你提出一个想法之后过了很久再回来,有人实现它了,然后你一看:“卧槽这什么玩意和我想象中完全不一样。”这也很有意思不是吗?

2018年9月20日:开源日报第196期

今日推荐英文原文:《The 439 day Journey that Changed my Life》作者:Daniel Lemay

原文链接:https://medium.freecodecamp.org/the-439-day-journey-that-changed-my-life-3c45a8cad5dd

推荐理由:讲述了作者通过在网络上自学,最后成为了一名开发人员的故事,顺带提出了他在学习时发现的很有效的几个方面

The 439 day Journey that Changed my Life

It was Spring of 2017. I was beyond displeased with my current work situation. I dreaded going into work every day and being a punching bag for what wasn’t going right in the organization.

My closest coworkers were amazing. Our relationship was one part caring about each other, and one part informal group therapy. These people are all that kept me somewhat stable.

But this story isn’t about that place. Those details aren’t important or beneficial. All you need to know is that my work environment was beyond toxic, and I needed an exit strategy.

At first, I started applying for other jobs my the same field. This lead to an interview scheduled for a similar position in a smaller organization.

During this search process, I also began to question whether it was the best approach to pursue this career path. What had once felt clear continued to grow hazier. One week before my scheduled interview, I decided to try out modern web development, just to see if it would be something of interest.

The Start of Something New

After some research, I decided to try out freeCodeCamp. I didn’t want to invest any money up front, just in case this was another flight of fancy.

Within the first two days, I was hooked. I canceled my interview and decided to focus on exploring this new skill in an environment I was already comfortable in.

I flew through the sections on HTML and CSS with ease. Coming up to the foreboding gates of the JavaScript section filled me with unease. Could I actually handle logical programming? Should I stop and turn back? Maybe I should stay in a field I was already good at?

There were so many sources of anxiety when I was learning new things, and my perfectionism wasn’t helping either. Determined, and with the encouraging words of several friends, I pushed forward.

Starting to work with JavaScript was as challenging as I expected. But I found the mental puzzles of basic algorithms to be intriguing. Even when I was driving my car, I would be sifting through options and potential solutions in my head.

The mental challenge — and the feeling I got when I finally solved a problem — were invigorating. There was a sense of mental euphoria after solving a problem before jumping into the next one.

Within two months of starting, I knew that this is what I wanted to do. But I was far from having the necessary skills to be employable.

I elected to continue teaching myself using mostly free resources for a multitude of reasons. Quitting my job to go to a code school was not a financially viable option, since I was the primary income earner for our family of three. Later on, this also ruled out the notion of internships.

There are amazing resources available online to teach yourself for free or with minor investment, and freeCodeCamp is one of them. The downside of this approach is that there is no one watching over you to provide structure or deadlines. There are no assignment due dates, no professional grading, no mentorship.

As a new learner, you have to seek out this additional structure if you want it. This is difficult, and requires a great deal of internal motivation and self-discipline.

People learn in different ways and at varying paces. Traditional educational processes can often fall short of tailoring this to each learner. But I thrive best in self-directed learning environments where I can pursue what interests me, and push things forward at my own level.

So I continued to push myself, and completed the freeCodeCamp Front End Certification in the first 5.5 months. This consisted of completing 10 projects and several dozen algorithm challenges.

Near the end of this process, I decided that I wanted to learn React. I purchased my first paid course since starting this journey: Wes Bos’ React course. It was an amazing course and definitely helped me to get up and running faster. I used the final three projects to solidify my initial learning of React.

After completing the Front End Certification, I began exploring the back end program at freeCodeCamp. Soon thereafter, I abandoned it in favor of other things that sparked my interest.

One of the most valuable experiences during this journey was joining a team project with two other developers that I had never met. Chingu is an organization which helps coordinate developers of similar skillsets around the world to complete a larger project in approximately 6 weeks.

This experience exposed me to working on a project in a team environment, and shore up best practices with git workflows. It also forced me to explore how to break down a larger application into smaller manageable parts. I have written in depth about this experience here.

After completing this project in late 2017, I felt more confident in my abilities and started the job search.

The Final Mile

On a long hike, the final mile is often the most arduous. So much has been achieved and the end is in sight. However, you can be exhausted from pushing yourself and uncertain if what you’re pursuing was a wise choice. You might ask, Did I push myself too far? Everything is aching, and each step falls heavier than the previous.

For me, April and May of this year were disheartening. I had built out several projects to show to prospective employers, was active in the community, and continued learning. Despite my best efforts, the job search was going nowhere. I wasn’t surprised, but it was disheartening. I knew that not having a formal technical education or prior work experience in the field would be a significant obstacle.

I pretty much gave up applying to jobs posted online after having received next to 0% response rate from job boards. I suspect that these items precluded me from making it past the HR screening. To circumvent this, I focused on increasing the attention I paid to networking, as well as presenting on some topics at local meetups.

Presenting on technical topics can be an intimidating endeavor. Not only can the fear of public speaking come into play, but imposter syndrome can further stoke that anxiety.

For my first real presentation, I didn’t have time to get nervous. Three hours before a meetup, someone asked if I would be interested in talking about Gatsby. I had built out my site using Gatsby and loved the process, so I was happy to talk about it in an informal setting of 10–15 people.

When I arrived later that evening, I found out it would be recorded. The presentation went well, despite having no time to prepare for it, and was well received. Later on, I would find out that the recording was shared with the developer team at the company I now work for. The presentation on Gatsby was the icebreaker that dispelled the anxiety of talking about technical topics.

After building my site with Gatsby, I became mesmerized by GraphQL. I dove into learning as much as I could about it, and have since given four presentations of the topic. I have written more in-depth about confronting the fear of technical presentations here.

In early May I started the interview process for the company that I am now working at, thanks to an introduction from my networking at meetups. I went through a couple rounds of conversations and interviews with different team members and joined the team on June 11, 2018. 439 days after starting this wild journey, I became a professional developer.

Lessons Learned and What’s Next

During the course of this journey, I have found several key concepts that are beneficial when learning new skills. These concepts are not exclusive to software development.

Be Consistent and chip away at your goals: This is a crucial lesson that often gets overlooked. A more experienced developer put this into perspective for me when I was stuck on a larger problem. It is easy to look at the end goal in the distance and become disillusioned at the possibility of traversing the trail. We don’t get there by mentally willing it to be. Goal setting is best approached by breaking larger goals into smaller approachable ones. Setting micro-goals that align with the end goal allows for consistent check-ins and celebrating when you achieve them.

Always be in the mindset of setting goals, working towards them, and adjusting them if needed. If a goal no longer becomes applicable or is clear that it is in not in the direction you want to go, feel free to leave it by the wayside. Consistency helps maintain inertia in achieving these goals. For development, I recommend the 100 Days of Code challenge and local meetups to immerse yourself in the community.

Exercise motivational learning: Road maps are great in the sense that they can help keep a pulse on what technologies are in demand or popular. However, I recommend tempering that with what you desire to learn. What excites you? What is a problem you want to solve and what technologies do you need to get you there?

It has been my experience that the more time I have spent focusing my learning on something I was passionate about, the more engaged I was. There is a correlation between my engagement and the progress I make. This was a primary reason why I stopped following a specific program after understanding the basic fundamentals of web development. Internal motivation is more impactful than external motivation.

Always be building: Internalizing concepts comes from implementation and discovering the various subtleties to navigate. This is hard to achieve through solely reading the documentation and watching tutorials.

When setting out to build a project, it is important to determine an appropriate level of complexity. When embarking on a new task, it should always seem barely out of reach. If it is something that seems easy you likely are not challenging yourself enough. Likewise, if it seems insurmountable, the task at hand is likely too complex.

Fail fast and fail often, for it is in examining our failures that we can make necessary course corrections and come back stronger.

Network and engage with people in the community: I’m an introverted person, and it takes a lot for me to go into a room full of people that I don’t know and socialize. But meetups and the associated networking can be a very valuable aspect of the learning experience and job search.

Recognizing this importance, I pushed through some of my introverted hesitations. I learned so much from listening to other people present on things and engaging with them. Consistent attendance at a smaller meetup was one of the largest benefits. I felt comfortable asking people to review the code that I had written and give me feedback. This helped to confirm some things that I was doing well and some anti-patterns to correct.

Don’t underestimate the importance of soft skills: It can be easy to become enraptured with a list of technical skills which a job may need. Technical skills are important and are necessary. However, soft skills are as important if not more so. The ability to talk to people, engage with different perspectives, and display empathy is of crucial importance. We work with people, and the products that we make have the opportunity for a positive or negative impact. A person with amazing technical skills, but poor soft skills can be disastrous to a team environment.

Never stop learning: There is always more to learn, especially in software and web development. We can always be pushing ourselves further. Always be curious and dive into things that are intriguing to us. I have been focusing on static typing within JavaScript and am starting to get into ReasonML. More to come on that in the future.

There are many great resources available to those interested in learning web development. The proliferation of these resources is the main reason I was able to learn a new skill while still working a full-time job and maintaining family time. These resources need some extra considerations and engagement by the learner, but they are an amazing way to learn new skills. I hope this article and lessons learned proves helpful in pursuing your own journey.

If you are interested in connecting with me further, please connect with me on Twitter or check out my blog.


每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,欢迎关注开源日报。交流QQ群:202790710;微博:https://weibo.com/openingsource;电报群 https://t.me/OpeningSourceOrg