python开源项目贡献
by Utsab Saha
由Utsab Saha
通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributing to open source projects)
One of the concerns I often hear about from my coding students is, “How am I going to land a developer job without a computer science degree?”
我经常从编码学生那里听到的一个担忧是:“我如何在没有计算机科学学位的情况下找到开发人员的工作?”
This is an understandable concern, and I recently faced it myself when applying to become a Lecturer of Computer Science at California State University (Monterey Bay). The usual requirement for this kind of position is a Masters degree, which I did not have.
这是一个可以理解的问题,我最近在申请成为加利福尼亚州立大学(蒙特雷湾分校)计算机科学讲师时遇到了自己。 这种职位的通常要求是硕士学位,而我没有。
However, I was able to overcome the Masters degree requirement as a result of the work I had previously done on open source projects. This work helped me build the skillset, credibility, and professional network that ultimately served as a “back door” into the job.
但是,由于我以前在开源项目上所做的工作,我能够克服硕士学位的要求。 这项工作帮助我建立了技能,信誉和专业网络,最终成为了工作的“后门”。
I believe that volunteer work and open source projects are an incredible resource for anyone to bolster up their experience in a way that can bypass the usual requirements listed on the “front door” of a tech company. In this post, I will walk through the two key principles that have guided my process:
我认为,志愿工作和开源项目是任何人以一种可以绕开技术公司“前门”上列出的通常要求来增强其经验的不可思议的资源。 在这篇文章中,我将介绍指导我的过程的两个关键原则:
- Grow: I continually developed my skills by volunteering for projects I didn’t know how to do yet. 成长:我通过自愿参加我不知道该怎么做的项目来不断发展自己的技能。
- Serve: I built my professional network by offering my services to people without expecting anything in return. 服务:我通过向人们提供服务而建立了我的专业网络,而没有期望得到任何回报。
I will illustrate these themes across five projects. I’ll walk through how I reached out to people, listened to their needs, offered my services to them, and gradually built up my skillset in the process.
我将在五个项目中说明这些主题。 我将逐步介绍如何与他人联系,倾听他们的需求,向他们提供服务,并在此过程中逐步建立我的技能。
先决条件:了解您的“梦想工作” (Prerequisite: Know your “Dream Job”)
You really should take a job that if you were independently wealthy that would be the job you would take — Warren Buffet
您确实应该从事一项工作,如果您自己是有钱人,那将是您的工作-沃伦·巴菲特(Warren Buffet)
The principles I’m about to illustrate demanded a lot of patience and energy from me and often without any immediate reward. This was only possible for me because I had a clear vision of the kind of work that I found meaningful.
我要说明的原则要求我耐心和精力,而且常常没有任何立即的回报。 这对我来说是唯一可行的,因为我对自己认为有意义的工作有清晰的认识。
I’m passionate about improving social mobility. I’d like to create a world where everyone has access to personal mentorship no matter who they are or where they live. The way I do this is by helping people learn to code who are from underrepresented parts of the world.
我对改善社会流动性充满热情。 我想创造一个世界,每个人无论身在何处或居住在何处都可以获得个人指导。 我这样做的方式是帮助人们学习来自世界上代表性不足的地区的代码。
I feel deeply called to do this work to the point where I have paid to do it. I went through a coding bootcamp (Dev Bootcamp) as a paying student even though I already had worked at several companies as a web developer. My goal was not to learn how to code, but rather to learn how to teach.
我为完成这项工作而深感需要,为此我付了钱 。 尽管我已经在多家公司担任过Web开发人员,但还是以付费生的身份参加了编码训练营(Dev Bootcamp)。 我的目标不是学习编码,而是学习教学。
I later began volunteering for organizations, such as Code Tenderloin and freeCodeCamp, that I felt were aligned with my vision.
后来,我开始为我认为与我的愿景保持一致的组织(例如Code Tenderloin和freeCodeCamp)做志愿者。
What is the work that you love so much that you would pay to do it, or at the very least do it for free? And I challenge you to be more specific than “software developer”. Within software development, what specifically do you love, and why?
您热爱的工作是什么,您会为此付出代价,或者至少是免费的? 我要您比“软件开发人员”更具体。 在软件开发中,您特别喜欢什么?为什么?
侦察工作:了解问题 (Reconnaissance work: Understanding the Problem)
We have two ears and one mouth so that we can listen twice as much as we speak — Epectetus
我们有两只耳朵和一只嘴,所以我们可以听两倍于我们说话的声音— Epectetus
Once I knew my “dream job”, my next step was to research other organizations who were already doing interesting work in this area.
一旦我知道自己的“梦想工作”,我的下一步就是研究已经在该领域做过有趣工作的其他组织。
In addition to going through Dev Bootcamp in San Francisco as a student, I visited the The Grand Circus coding bootcamp in Detroit, Michigan. I was curious about The Grand Circus because they had found a way to teach coding in an area that was not your traditional tech-hub.
除了作为学生参加旧金山的开发训练营之外,我还参观了密歇根州底特律的The Grand Circus编码训练营。 我对The Grand Circus感到好奇,因为他们找到了一种在非传统技术中心的地区教授编码的方法。
I had many questions: What was the skillset of the students after learning coding for only 8 weeks? What were the challenges for teaching coding in a non-tech-hub area like Detroit? Where did their students find jobs?
我有很多问题:仅学习了8周的编码后,学生的技能是什么? 在像底特律这样的非技术中心地区教授编码的挑战是什么? 他们的学生在哪里找到工作?
In order to answer questions like these, I set up meetings with people from many different organizations.
为了回答此类问题,我与来自许多不同组织的人员举行了会议。
It may be instructive to see how I set up these meetings, so I’ll break down a cold email I sent to Bizdom, an entrepreneurship incubator in Detroit:
看看如何设置这些会议可能很有启发性,因此我将分解发送给底特律企业家孵化器Bizdom的一封冷电子邮件:
- In red: This shows that I took the time to read their website and understand what they do. This sets me apart from a generic spammer. 红色:表示我花时间阅读他们的网站并了解他们的工作。 这使我不同于一般的垃圾邮件发送者。
- In blue: This is the “story of me”. Who am I, why am I credible, and what’s driving me? What’s my why? 蓝色:这是“我的故事”。 我是谁,我为什么可信,是什么驱动着我? 我怎么了
- In green: This is the “story of us”. How do I see Bizdom and myself having a meaningful relationship 绿色:这是“我们的故事”。 我如何看待Bizdom和我自己有有意义的关系
- In yellow: This is the “story of now”. What action is happening now that would lead Bizdom and myself to do something together right now? 黄色:这是“现在的故事”。 现在正在发生什么动作,导致Bizdom和我现在一起做某事?
This formula had a greater than 50% success rate for setting up meetings with people I had never met before. Here are the notes from all of my meetings during the 5-day Detroit trip.
与从未见过的人进行会议时,此公式的成功率大于50%。 这是我为期5天的底特律旅行期间所有会议的备忘 。
Note that this formula, while effective, does take a good amount of homework. I needed to first have a clear vision for my dream job in order to have a compelling “story of me”. I needed to have researched the other organizations in order to have a compelling “story of us”. And I needed to have already planned a trip to Detroit in order to have a compelling “story of now”.
请注意,此公式虽然有效,但确实需要大量的作业。 首先,我必须对自己的梦想工作有一个清晰的愿景,以便获得引人入胜的“我的故事”。 我需要研究其他组织才能获得令人信服的“我们的故事”。 为了获得引人入胜的“现在的故事”,我必须已经计划去底特律旅行。
项目1:我自愿帮助一个人 (Project 1: I volunteered to help one person)
Give me six hours to chop down a tree and I will spend the first four sharpening the axe — Abraham Lincoln
给我六个小时的时间来砍树,我将用前四个时间来削斧头-亚伯拉罕·林肯(Abraham Lincoln)
The real fruit of my Detroit trip did not come from any of the meetings I set up beforehand.
我底特律之行的真正成果并不是来自我之前举行的任何会议。
As I was leaving the Grand Circus coding school, I had the good fortune to be sharing an elevator with a student — let’s call him “Robert” — who had just graduated from their program. After I gave Robert a verbal version of the story of me, story of us, story of now, he agreed to have lunch with me so that I could hear more about his experience.
当我离开大马戏团编码学校时,我有幸与刚刚从他们的课程毕业的学生(叫他“罗伯特”)共享电梯。 在我给罗伯特一个关于我的故事,我们的故事,现在的故事的口头版本之后,他同意与我共进午餐,以便我能更多地了解他的经历。
During our lunch, I listened to Robert’s story. I learned that what motivated him to attend the coding bootcamp was a desire to leave behind his blue-collar job at Ford motors. I learned that one of his key challenges was finding a babysitter for his 3-year-old daughter so that he could attend the coding bootcamp. I learned about his dream to build a fun educational mobile app for his daughter. I learned about his frustration that the coding bootcamp didn’t actually prepare him to build such an app.
午餐时,我听了罗伯特的故事。 我了解到促使他参加编码训练营的动机是想离开他在福特汽车公司的蓝领工作。 我了解到,他的主要挑战之一是为3岁的女儿找到保姆,以便他可以参加编码训练营。 我了解了他的梦想,那就是为他的女儿构建一个有趣的教育性移动应用程序。 我从他的沮丧中得知,编码训练营并没有真正让他准备构建这样的应用程序。
I later volunteered to become his coding mentor as he built this app. Even though I didn’t earn any income for doing this work, I did it anyway because it was one step closer towards my dream job. I went from merely chatting with organizations who were doing meaningful work to actually doing the work myself with a real human being. I was thrilled.
后来,我在他构建此应用程序时自愿成为他的编码指导。 即使我没有因为从事这项工作而获得任何收入,但我还是这么做了,因为这离我理想的工作又近了一步。 我从仅仅与从事有意义工作的组织聊天开始,到与一个真正的人自己实际进行工作。 我很激动。
I was also scared, because I had never taught coding to anyone before. To my mind, this was my opportunity to learn.
我也很害怕,因为我以前从未教过任何人编码。 在我看来,这是我学习的机会。
I worked with Robert for several months, during which time I would create modules for him like the following:
我与罗伯特一起工作了几个月,在这段时间里,我将为他创建模块,如下所示:
It ended up not working out long-term with Robert, which sorely disappointed me at the time. However, a couple of unexpected fruits came out of this:
最后与罗伯特没有长期合作,这让我非常失望。 但是,从中得出了一些意外的结果:
- Robert used to rave about the videos I would create for him. So I learned that one of my strengths was making instructional videos, which inspired me to continue making more of them, a habit that would serve me well later on. 罗伯特曾经喜欢我为他制作的视频。 因此,我了解到自己的长处之一就是制作教学视频,这启发了我继续制作更多的教学视频,这一习惯以后对我很有用。
- I became aware of one of my weaknesses: lack of organization. I had no long-term structure or curriculum I was following, which was probably not great for Robert’s morale. 我意识到自己的弱点之一:缺乏组织。 我没有要遵循的长期结构或课程,这可能对Robert的士气不利。
All of the modules I created for Robert set me up to start contributing to freeCodeCamp’s curriculum, which became my next big project.
我为Robert创建的所有模块都使我开始为freeCodeCamp的课程做出贡献,这成为了我的下一个大型项目。
项目2:为FreeCodeCamp创建课程 (Project 2: Creating curriculum for FreeCodeCamp)
If I have seen further than others, it is by standing on the shoulders of giants. — Isaac Newton
如果我比其他人看到更多,那就是站在巨人的肩膀上。 - 艾萨克·牛顿
freeCodeCamp solved my lack of organization in a big way. Their ready-made projects were exactly what I needed in order to be more organized as a coding teacher. When I discovered it was all open source, I thought that it was too good to be true. There must be some sort of catch I thought.
freeCodeCamp在很大程度上解决了我缺乏组织的问题。 他们现成的项目正是我需要的,以便使我成为更有组织的编码老师。 当我发现它全部是开源的时,我认为它太好了以至于无法实现。 我想一定有什么收获。
So I emailed Quincy Larson, the founder of freeCodeCamp, and asked him whether it really was ok for me to use their curriculum to teach my own students.
因此,我给freeCodeCamp的创始人昆西·拉森(Quincy Larson)发送了电子邮件,并问他使用他们的课程教我自己的学生是否真的可以接受我。
He said yes. There was no catch.
他说是的。 没有收获。
I was inspired by the philosophy of freeCodeCamp, so I volunteered to help:
我受到freeCodeCamp理念的启发,因此我自愿提供帮助:
If you look closely, you will find the usual elements of how I communicate: story of me, story of us, story of now.
如果仔细观察,您会发现我沟通的通常要素:我的故事,我们的故事,现在的故事。
There is one additional element, which is a link to prior work I created for Robert. This is an example of how previous volunteer work gradually built up my skillset so that I could work on larger and more complex projects.
还有一个附加元素,它是我为Robert创建的先前工作的链接。 这是一个示例,说明以前的志愿者如何逐步建立我的技能,以便我可以从事更大,更复杂的项目。
Within the span of a few emails with Quincy, I went from creating modules for one person, to creating modules for the 1-million-plus users of freeCodeCamp!
在向Quincy发送几封电子邮件的过程中,我从为一个人创建模块,到为100万以上的freeCodeCamp用户创建模块!
How cool is that? I was thrilled.
多么酷啊? 我很激动。
I was also, again, scared, because OOJS was not my strongest topic at the time. But to my mind this was my opportunity to learn it. I prepared myself by frantically consuming this book.
我也再次感到害怕,因为OOJS当时不是我最强的话题。 但是在我看来,这是我学习它的机会。 我疯狂地消费着这本书来作好准备。
I also decided to enlist the help of other people, so I reached out on the Dev Bootcamp Facebook group with the following post:
我还决定争取其他人的帮助,因此我在Dev Bootcamp Facebook组中提供了以下信息:
This post recruited 5 enthusiastic volunteers who teamed up with me to complete the object oriented javascript curriculum that is now visible on freeCodeCamp’s beta.
这篇文章招募了5位热情的志愿者,他们与我合作完成了面向对象的javascript课程 ,该课程现在可以在freeCodeCamp的Beta版中看到。
Note that the outcome of this project leveraged the previous reconnaissance work I did at Dev Bootcamp. I would have never predicted at the time that the people I would meet at DBC would one day team up with me. This illustrates the hidden power of taking action without expecting anything in return.
请注意,该项目的成果利用了我在Dev Bootcamp上所做的先前侦察工作。 那时我从来没有预料过,我将来在DBC遇到的人会和我合作。 这说明了采取行动而不期望任何回报的隐藏力量。
项目3:高级开发人员案例研究 (Project 3: Case studies on Senior Developers)
“A good hack for finding a problem worth solving is immersing yourself completely in a vertical you are passionate about and surrounding yourself with other passionate people. People inevitably have problems.” — Ash Maurya, author of Running Lean
“找到值得解决的问题的好办法是将自己完全沉浸在自己热衷的行业中,并与其他热情的人一起生活。 人们不可避免地会遇到问题。” — 《 跑步精益》作者Ash Maurya
As I worked alongside the five Dev Bootcamp graduates to create the freeCodeCamp curriculum, I enjoyed the privilege of hearing first-hand testimony about the ups and down of post-coding-bootcamp life.
当我与五个Dev Bootcamp毕业生一起创建freeCodeCamp课程时,我很荣幸听到有关后编码训练营生活兴衰的第一手证词。
One of their top desires was to to grow into senior-level developers, but they felt that the day-to-day work they were doing at their company wasn’t preparing them for such growth. They wanted to do more challenging work in order to continue developing their skillset.
他们的最大愿望之一就是成长为高级开发人员,但是他们感到自己在公司所做的日常工作并没有为他们的成长做好准备。 他们想做更多具有挑战性的工作,以便继续发展自己的技能。
I was curious whether this was true for more coding bootcamp graduates, so I interviewed a few friends from my Dev Bootcamp days to ask them about it. I conducted these conversations following the “problem interview” structure as defined in Chapter 7 of Running Lean.
我很好奇这是否适合更多的编码训练营毕业生,因此我采访了Dev Bootcamp时代的一些朋友,向他们询问有关情况。 我按照《 跑步精益》第7章中定义的“问题访谈”结构进行了这些对话。
At a high level, the goal of the “problem interview” is to understand your audience’s #1 biggest goal and understand how they are solving the problem today. Here is an example: (show link to Xavier’s interview)
从较高的层次上讲,“问题访谈”的目的是了解听众的第一大目标,并了解他们如何解决当前的问题。 这是一个示例:(显示指向Xavier采访的链接)
Key insights from the interview:
访谈的主要见解:
- Xavier’s number #1 goal (in red): “move from junior level developer to a mid-level developer”. Xavier的第一大目标(红色):“从初级开发人员转到中级开发人员”。
- How solves the problem (in blue): He asks senior level developers at his company how they arrived at particular conclusion. 如何解决问题(蓝色):他询问公司的高级开发人员如何得出特定结论。
- Idea for a blog post (in green): interview senior developers and walk through specific challenges that they faced to get a better understanding of their thought process. 博客文章的想法(绿色):采访高级开发人员,并逐步解决他们所面临的特定挑战,以更好地理解其思维过程。
I reached out to the more senior level developers I knew, including Alexandr Kurlin, the CTO of FrontRowEd, a startup that creates adaptive learning software for K-12 students. Here is the email I sent him to set up the interview:
我接触了我认识的更高级的开发人员,包括FrontRowEd的CTO Alexandr Kurlin,这是一家为K-12学生创建自适应学习软件的初创公司。 这是我发送给他进行面试的电子邮件:
Notice the way I describe the impact (in green). I have found that the most powerful way to inspire people to action is to highlight the deeper meaningfulness of their contribution. Research on motivation lists “impact on others” and “mastery” as two powerful forms of meaningfulness — which may remind you of the two guiding principles listed in the introduction that I use to motivate my own self!
注意我描述影响的方式(绿色)。 我发现,激励人们采取行动的最有力方法是突出人们的贡献的深远意义。 在动机研究中 ,“影响他人”和“掌握”是两种有意义的有意义的形式,这可能使您想起引言中列出的两个用以激励我自己的指导原则!
I worked with Alex to produce the following case study that was published to freeCodeCamp’s Youtube channel:
我与Alex一起制作了以下案例研究,该案例研究已发布到freeCodeCamp的Youtube频道:
I learned a lot from this project. I would bet that I personally learned more from the process of interviewing Alex than anyone who watched the video.
我从这个项目中学到了很多东西。 我敢打赌,比起观看视频的人,我个人从采访Alex的过程中学到的东西更多。
项目4:为freeCodeCamp构建教室模式功能 (Project 4: Building a Classroom Mode Feature for freeCodeCamp)
“Success is gained through giving without keeping score.” — Keith Ferrazzi
“不付出就可以通过付出获得成功。” —基思·费拉兹(Keith Ferrazzi)
I placed a call-to-action at the end of the video with Alex to build a feature for FreeCodeCamp’s open source repository as a way of putting the skills from the video into practice.
我与Alex一起在视频末尾放置了号召性用语,以为FreeCodeCamp的开源资源库构建功能,以将视频中的技能付诸实践。
Quincy Larson suggested creating a “classroom mode” feature. More and more teachers have been using freeCodeCamp to teach in their classrooms. However, freeCodeCamp was not built with this use case in mind. Could we solve that problem?
昆西·拉森(Quincy Larson)建议创建“教室模式”功能。 越来越多的老师已经在课堂上使用freeCodeCamp进行教学。 但是,在构建freeCodeCamp时并未考虑此用例。 我们可以解决这个问题吗?
I recruited the following team to help out:
我招募了以下团队来提供帮助:
- Udie Chima became our UX designer Udie Chima成为我们的用户体验设计师
- Jenny Tse became our project manager 谢妮妮(Jenny Tse)成为我们的项目经理
- Tom Lee, Priyanka Saigal and myself became the developers. Tom Lee,Priyanka Saigal和我本人成为开发人员。
Nearly all of these people I met during my reconnaissance work while exploring other coding bootcamps.
在探索其他编码训练营时,我在侦察工作中遇到的几乎所有这些人。
As a UX designer, Udie was curious to chat directly with other people who would be using the Classroom Mode feature. So we requested that Quincy make any introductions he could on our behalf. Quincy sent out the following tweet on our behalf:
作为用户体验设计师,Udie很好奇直接与将要使用“课堂模式”功能的其他人聊天。 因此,我们要求昆西代表他进行任何介绍。 昆西代表我们发送了以下推文:
This tweet led to around 10 user interviews with teachers from all over the world. Based on the insights from these interviews, Udie created the following interactive wireframes:
该推文导致来自世界各地的老师进行了大约10次用户访谈。 根据这些访谈的见解 ,Udie创建了以下交互式线框 :
One of the people we met as a result of Quincy’s tweet was Dr. Sathya Narayanan, a professor at California State University (Monterey Bay).
昆西的推文导致我们遇到的一个人是加利福尼亚州立大学(蒙特雷湾)的教授Sathya Narayanan博士。
项目5:在夏季训练营中提供志愿服务 (Project 5: Volunteering to help out at a summer bootcamp)
During my initial chat with Sathya over a zoom conference, I was inspired by his vision to make the college experience more accessible to women and minority groups. His experimental cohort-based model aimed to solve many of the design flaws in higher education revealed by Bridgette Burns’ research, which contributed to lower graduation rates among minorities. I was particularly intrigued by their focus on teaching soft skills that went beyond traditional academic knowledge.
在与Sathya进行的一次变焦会议上最初的交谈中,我受到他的远见卓识的启发,他的愿景是使妇女和少数群体能够更轻松地获得大学经历。 他的基于实验队列的模型旨在解决Bridgette Burns的研究揭示的高等教育中的许多设计缺陷,从而导致少数族裔的毕业率降低。 他们对教授超越传统学术知识的软技能的关注使我特别感兴趣。
He mentioned that he was shorthanded for an upcoming summer bootcamp on data structures, and I later emailed him offering my help:
他提到他缺席了即将到来的夏季数据结构训练营,后来我通过电子邮件给他提供了帮助:
The “example of my work” linked to one of the senior developer videos I created for freeCodeCamp’s Youtube channel.
“我的工作示例”链接到我为freeCodeCamp的Youtube频道创建的一位高级开发人员视频 。
It was a fulfilling experience to help Sathya during that summer. The CSUMB cohort program turned out to be as innovative and active as he claimed it to be.
在那个夏天帮助Sathya是一次充实的经历。 与他声称的一样,CSUMB队列计划同样具有创新性和积极性。
At the end of the bootcamp, Sathya mentioned that CSUMB had an open Lecturer position that he was hiring for. The job typically required a Masters degree requirement, but he said he would find a way to waive the requirement in my case. I went for it.
在训练营结束时,Sathya提到CSUMB有一个空缺的讲师职位,他正在招聘该职位。 该工作通常需要硕士学位要求,但他说他将找到一种方法来放弃我的情况。 我去了。
结论 (Conclusion)
It is an amazing feeling to finally get paid to do the same kind of work that I had been doing for free for the previous two years.
终于有报酬去做我过去两年免费从事的同样的工作,真是一种令人惊奇的感觉。
I am particularly grateful to Robert, the student from Detroit, whom I met on an elevator several years ago. Thank you for taking a chance on me and being my first student.
我特别感谢底特律的学生罗伯特(Robert),几年前我在电梯上遇到了他。 感谢您借此机会成为我的第一位学生。
As a call to action for the reader, if you would like to get involved in an open source project, I can help you get your first commit into the Classroom Mode feature we are building for freeCodeCamp. Feel free to message me on linkedin.
作为读者的号召性用语,如果您想参与一个开源项目,我可以帮助您首次提交为FreeCodeCamp构建的“课堂模式”功能。 随时在linkedin上给我发消息。
python开源项目贡献