校友邮箱_freeCodeCamp校友网络:FCC校友的自主指导网络

校友邮箱

by peterWeinberg

彼得·温伯格

freeCodeCamp校友网络:FCC校友的自主指导网络 (The freeCodeCamp Alumni Network: A homegrown mentorship network for FCC alumni)

For the last year, I’ve been spending nearly all my free time learning to code. I’ve been a regular freeCodeCamp contributor, working on various projects such as the new React and Beta curriculums, the Testable Projects, a CDN-loaded front end test suite.

在过去的一年中,我几乎所有的业余时间都花在学习编码上。 我一直是freeCodeCamp的定期撰稿人,从事各种项目的研究,例如新的ReactBeta课程, 可测试项目 ,一个CDN加载的前端测试套件。

But about 3 months ago, I set out to level-up my coding skills in a big way. I only had one criteria: I wanted to take on my biggest coding challenge yet.

但是大约3个月前,我开始大幅度提高我的编码技能。 我只有一个条件:我想承担我迄今为止最大的编码挑战。

The final result is the culmination of 2 Campers’ efforts, 60 days of development, and hundreds of hours of work. And, of course, a project that I’m incredibly excited to introduce: the freeCodeCamp Alumni Network (FCCAN)!

最终结果是2个Campers的努力,60天的开发和数百小时的工作达到了顶点。 当然,我非常高兴地介绍一个项目: freeCodeCamp校友网络 (FCCAN)!

FCCAN is an extension of the freeCodeCamp community, where holders of at least one freeCodeCamp certificate can come to connect.

FCCAN是freeCodeCamp社区的扩展,在那里至少有一个freeCodeCamp证书的持有者可以连接。

In short, our goal is to promote meaningful relationships among experienced campers. Especially those who are looking to level-up their skills and/or share their expertise with other Campers. Here’s a few features that we know you’ll love:

简而言之,我们的目标是促进经验丰富的露营者之间的有意义的关系。 尤其是那些希望提升自己的技能和/或与其他露营者分享他们的专业知识的人。 这是我们知道您会喜欢的一些功能:

  • Seamless user authentication. Sign in using your GitHub account and verify with your freeCodeCamp credentials.

    无缝的用户身份验证 。 使用您的GitHub帐户登录,并使用freeCodeCamp凭据进行验证。

  • Mentorship opportunities. An optional mentorship program for prospective mentors and mentees.

    指导机会 。 针对潜在导师和受训者的可选导师计划。

  • Personal profile. Identify coding skills and interests, personal stats, mentorship status, and more.

    个人简介 。 识别编码技能和兴趣,个人统计数据,指导状态等。

  • Member search. A search engine to help you find other members (and potential mentors) based on skills, interests, location, and more.

    会员搜索 。 一个搜索引擎,可帮助您根据技能,兴趣,位置等找到其他成员(和潜在的指导者)。

  • Collaboration. Looking for help with your new app? Share your open source projects with other Campers here.

    合作。 在寻求有关新应用程序的帮助? 在这里与其他Campers共享您的开源项目。

  • Keep in touch. Identified a potential mentor? Reach out through FCCAN private chat, or visit the public room to talk all things code.

    保持联系。 确定了潜在的导师? 通过FCCAN私人聊天进行访问,或访问公共场所讨论所有代码。

FCCAN is a platform to help you take your relationships with your fellow Campers to the next level.

FCCAN是一个平台,可帮助您将与露营者的关系提升到新的水平。

But to fully realize this vision, we need you, the Campers, to come along for the ride with us. We invite you to visit the application and check out our about page. If you’re intrigued, sign up and see what it’s all about!

但是,要完全实现这一愿景,我们需要露营者与我们同行。 我们邀请您访问该应用程序并查看我们的“关于”页面。 如果您感兴趣,请注册并查看全部内容!

Our new home is www.fcc-alumni.com.

我们的新家是www.fcc-alumni.com

There’s always room for improvement, but we’re pretty happy with the MVP that we have, and we hope that you will be too.

总是有改进的空间,但是我们对拥有的MVP感到非常满意,希望您也能如此。

In the spirit of freeCodeCamp and Open Source Software, this project is 100% open source. We encourage you to check out the repo and explore the codebase.

本着freeCodeCamp和开源软件的精神,该项目是100%开源的。 我们鼓励您检查回购并浏览代码库。

Active development will continue on this project, so if you find a bug or have a suggestion for a feature, feel free to open an issue. If you’re interested in contributing, we’ve already collected a few suggestions from our team and beta testers that we would love some help with! Please check out our contribution guidelines if you’d like to learn more.

积极的开发将继续在这个项目上进行,因此,如果您发现错误或对功能有建议,请随时提出问题 。 如果您有兴趣提供帮助,我们已经从我们的团队和Beta测试人员那里收集了一些建议 ,希望对您有所帮助! 如果您想了解更多信息,请查阅我们的贡献准则

Now that you’ve seen the project (and set up a totally rad profile!), I hope you’ll stick around to hear our story.

既然您已经看到了该项目(并建立了一个完整的rad个人资料!),希望您能继续听我们的故事。

Three months ago, I thought coding something on this level was something I’d never be able to do. A feeling that I know that many Campers can relate to.

三个月前,我认为编写此类代码是我永远都做不到的。 我知道许多露营者都可以与之建立联系。

So if you’re intrigued, read on to learn more about the freeCodeCamp Alumni Network and how two freeCodeCampers developed a complex full-stack web application in just two months.

所以,如果你感兴趣,请继续阅读以了解更多有关 freeCodeCamp校友会网和两个freeCodeCampers如何发展,在短短两个月复杂的全栈的Web应用程序。

I started coding just over a year ago, and my journey has been one of completely self-guided learning. Throughout this short history, I’ve relied almost entirely on freeCodeCamp to sharpen my skills.

我从一年多以前开始编写代码,而我的旅程一直是完全自主学习的过程之一。 在这段短暂的历史中,我几乎完全依靠freeCodeCamp来提高自己的技能。

During this time, I picked up some basic skills in JavaScript, React, HTML5, CSS3, and Sass. You might recognize these as some of the core skills evangelized in freeCodeCamp’s current curriculum.

在这段时间里,我学习了JavaScript,React,HTML5,CSS3和Sass的一些基本技能。 您可能会意识到这些是freeCodeCamp当前课程中传授的一些核心技能。

And although I had accomplished a lot, I found that I had gotten to a sort of plateau. What felt like rapid progress to my totally un-tech-oriented brain, actually just barely positioned me as a beginner-level programmer.

尽管我取得了很多成就,但我发现自己已经进入了一个平稳的时期。 感觉到了我完全不以技术为导向的大脑的飞速进步,实际上只是将我定位为初学者级程序员。

I knew I needed a much stronger arsenal of skills. But, transitioning from basic front end projects, to developing production-level full stack applications from scratch, felt like a gap that I was never going to be able to bridge. But, I knew I needed to somehow, so I began to explore some new avenues.

我知道我需要一个更强大的技能库。 但是,从基本的前端项目过渡到从头开发生产级别的全堆栈应用程序,感觉就像是我永远无法弥合的鸿沟。 但是,我知道我需要某种方式,所以我开始探索一些新途径。

One thing I discovered, was that I learned much more and much faster when I was working with other programmers. So I reached out to Chance McAlister (aka Chance Taken), the father and organizer of the Chingu Cohorts. Chance regularly champions group projects within the Cohorts, and he set me up with a team who had recently finished up a project of their own.

我发现的一件事是,当我与其他程序员一起工作时,我学到的东西越来越多。 因此,我与Chingu群组的父亲和组织者Chance McAlister (又名Chance Taken )取得了联系 。 Chance经常在同类群组中倡导小组项目,他与我组成了一个团队,该团队最近完成了自己的项目。

The project was Campfire Stories (a freeCodeCamp-centric app that recounts campers’ stories), and they needed a bit of help maintaining and improving their legacy codebase. So I had a call with one of the creators to bring me up to speed. And wow… the complexity and architecture of the application was just way too much for me to follow.

该项目是Campfire Stories(一款以freeCodeCamp为中心的应用程序,可以记录营员的故事),他们需要一些帮助来维护和改进其原有代码库 。 因此,我与一位创作者打了个电话,让我快速入门。 哇...应用程序的复杂性和体系结构对我来说太过分了。

Even though I was mostly familiar with their technology, the structure and coding paradigms seemed totally foreign to me. I was further behind than I had realized, and I walked away from that call feeling a tad disheartened. All the confidence I had gained over the last few months had all but vanished.

尽管我对它们的技术最熟悉,但是结构和编码范例对我来说似乎完全陌生。 我比我意识到的要落后得多,我从那个电话中走了出来,感到有点沮丧。 过去几个月我所获得的所有信心几乎消失了。

How was I ever going to learn this stuff? The back end was completely intimidating, I barely understood state management, and complex views were more than I could handle.

我怎么会学习这些东西? 后端完全令人生畏,我几乎不了解状态管理,而且复杂的视图超出了我的处理能力。

It took me a couple of days, but I eventually overcame my defeatism. As confounded as I was by the complexity of the Campfire Stories codebase, I emerged feeling more motivated than ever to get the job done. It was just my approach that was wrong.

我花了几天的时间,但最终我克服了失败主义。 就像我对Campfire Stories代码库的复杂性感到困惑一样,我比以往任何时候都更有动力完成工作。 只是我的方法是错误的。

The recipe for my success, I realized, was to build and define the architecture from scratch. That way I could follow the process from zero to complex every step of the way.

我意识到,成功的秘诀是从头开始构建和定义架构。 这样,我可以遵循从零到复杂的过程。

So, after this first failed attempt, I decided the timing was ripe to give an idea of my own a try.

因此,在第一次尝试失败之后,我决定是时候尝试一下自己的想法了。

Inspired by Campfire Stories, I also wanted to build a freeCodeCamp-related app. One of my favorite things about freeCodeCamp is the success stories I often hear, about people “graduating” from freeCodeCamp, and getting coding jobs in the real world.

受Campfire Stories的启发,我还想构建一个与FreeCodeCamp相关的应用程序。 关于freeCodeCamp的我最喜欢的事情之一就是我经常听到的成功故事,这些故事是关于人们从freeCodeCamp“毕业”并获得现实世界中的编码工作的。

These stories are an important part of other campers’ success. Knowing there’s a pot of gold at the end of the rainbow is a huge motivator!

这些故事是其他营员成功的重要组成部分。 知道彩虹尽头有一个金壶是一个巨大的动力!

With this in mind, I envisioned a place where campers could come to connect and track one another’s accomplishments. The idea would change a bit over time, but this was enough to get the ball rolling. I pitched it to Chance, who helped me to develop the idea a bit further, and soon after, we had formed a team.

考虑到这一点,我设想了一个露营者可以联系并追踪彼此成就的地方。 这个想法会随着时间的流逝而改变,但这足以使球滚动。 我向Chance推荐了这个机会,Chance帮助我进一步发展了这个想法 ,不久之后,我们成立了一个团队。

I was pretty pumped, this was exactly the kind of project I needed to take on to get my skills to where I wanted them to be! Once we had defined what our minimum viable product (MVP) would look like, it was clear that this project was going to be rather ambitious for a few beginner-level programmers. We would need:

我非常激动,这正是我需要进行的那种项目,以使我的技能达到我希望的水平! 一旦我们定义了最低可行产品(MVP)的外观,很显然,这个项目对于一些初学者来说将是一个很大的野心。 我们会需要:

  • Working user registration/authentication

    工作用户注册/身份验证
  • A database to store user data

    一个存储用户数据的数据库
  • An interface for users to input, edit, and maintain personal data

    用户输入,编辑和维护个人数据的界面
  • A way for users to communicate with one another within the application

    用户在应用程序内相互通信的一种方式
  • A search feature for users to find one another

    一种搜索功能,供用户相互查找
  • Effective routing from one view to the next

    从一个视图到下一个视图的有效路由
  • State management to manage complex application state

    状态管理以管理复杂的应用程序状态

And this was just to get us off the ground! My wish was coming true — this was shaping up to be the most complex and challenging project I had ever taken on.

这只是让我们踏上第一步! 我的愿望成真了–这正在成为我从事过的最复杂,最具挑战性的项目。

We defined our technology stack and got to work. We opted for classic freeCodeCamp, and chose ReactJS as a JavaScript framework, and in fully embracing that choice, Redux, and React-Redux were natural additions to the mix for state management. A MongoDB database, and an Express/NodeJS back end rounded out the core of our application. We bootstrapped our project with Create-React-App, made some tweaks for Sass support, installed an army of NPM packages, and were on our way.

我们定义了技术堆栈并开始工作。 我们选择了经典的freeCodeCamp,并选择了ReactJS作为JavaScript框架,并且在完全接受该选择的情况下,Redux和React-Redux是对状态管理的自然补充。 MongoDB数据库和Express / NodeJS后端完善了我们应用程序的核心。 我们使用Create-React-App引导了我们的项目,对Sass进行了一些调整,安装了一系列NPM软件包,然后我们就开始了。

Now up until this point, I had done enough research to know what each of these technologies were. But aside from React and Sass, I had never touched a single one. Needless to say, this was going to be a challenge for me.

到目前为止,我已经进行了足够的研究以了解这些技术中的每一项。 但是除了React和Sass之外,我从未碰过任何一个。 不用说,这将对我构成挑战。

Yet through some pair programming, and by working very closely with my teammate, Sean Smith, I was able to overcome every technological hurdle I encountered.

但是,通过一些配对编程,并与我的队友Sean Smith紧密合作,我能够克服我遇到的每个技术障碍。

After configuring Create-React-App to work with a proxy server, our first step was to implement user authentication and registration. This was quite the challenge — we wanted to decouple registration from the app itself (less sensitive data for us to manage, fewer usernames and passwords for you). So enabling GitHub-based login via PassportJS seemed like the way to go.

配置Create-React-App与代理服务器一起使用后,我们的第一步是实施用户身份验证和注册。 这是一个很大的挑战-我们想使注册与应用程序本身脱钩(我们管理的敏感数据更少,您的用户名和密码更少)。 因此,通过PassportJS启用基于GitHub的登录似乎是一种方法。

However, we also needed to implement some sort of user verification process since we wanted to enforce that members actually be freeCodeCamp alumni (that is, campers who’ve earned at least one certificate). After devising an end-point redirect counting technique for verifying user certs using Axios, we were finally on our way!

但是,我们还需要实施某种类型的用户验证过程,因为我们要强制成员实际上是freeCodeCamp的校友(也就是说,已经获得至少一个证书的露营者)。 在设计了一种用于使用Axios验证用户证书的端点重定向计数技术之后 ,我们终于可以上路了!

This was my first ever introduction to back end programming, and a major milestone for the app. Now that we could login and logout successfully, the real work could begin.

这是我对后端编程的第一次介绍,也是该应用程序的一个重要里程碑。 现在我们可以成功登录和注销,接下来就可以开始真正的工作了。

Next up was tackling state management. For example, to create the user profile page, the core of the FCCAN user experience, we needed to implement CRUD functionality, or Create, Read, Update, and Delete.

接下来是处理状态管理。 例如,要创建FCCAN用户体验的核心用户配置文件页面,我们需要实现CRUD功能,或创建,读取,更新和删除。

The preferences page is highly editable — over a dozen fields makes for some complicated state, too complex for React to manage alone. This was a job for Redux. This meant we were managing state on 3 separate levels spanning both ends of the stack: with React, on the Component level, with Redux on the Store level, and with MongoDB on the database level.

首选项页面是高度可编辑的-十几个字段使某些状态变得复杂,对于React来说太复杂而无法单独管理。 这是Redux的工作。 这意味着我们要在跨越堆栈两端的3个不同级别上管理状态:在组件级别使用React,在组件级别使用Redux,在数据库级别使用Redux。

Figuring out how to efficiently manipulate and manage a complex state object proved a formidable challenge. Yet once we had it down, we were able to reuse this same paradigm over and over again throughout the application.

弄清楚如何有效地操纵和管理复杂的状态对象被证明是一个巨大的挑战。 然而,一旦失败了,我们就可以在整个应用程序中重复使用相同的范例。

Here is another great example, which unlike our CRUD example, uses only React and Redux (see gif below):

这是另一个很好的示例,与我们的CRUD示例不同,它仅使用React和Redux(请参见下面的gif):

Notice that even though I’ve navigated away from the search page, when I return, the state exists exactly as it was when I left.

请注意,即使我已经离开搜索页面,但是当我返回时,该状态与我离开时的状态完全相同。

State managed locally by React clears as soon as a component unmounts, but passing this state to Redux allows us to preserve that state beyond the lifecycle of a React component, and passing it to the database as needed allows us to preserve that state beyond the lifecycle of a Redux store, which exists inherently only as long as a user’s session is persisted.

由React在本地管理的状态会在组件卸载后立即清除,但是将状态传递给Redux可以使我们在React组件的生命周期之外保留该状态,并根据需要将其传递给数据库可以使我们在生命周期之外保留该状态Redux存储区的名称,它仅在用户会话持续存在的情况下才存在。

The single most complex implementation of CRUD functionality in the FCCAN application is our chat feature. While this may not seem like a typical CRUD implementation, the core principles are exactly the same.

FCCAN应用程序中最复杂的CRUD功能实现是我们的聊天功能。 尽管这似乎不是典型的CRUD实现,但其核心原理是完全相同的。

Basically, the database is our single source of truth. For any CRUD action, we POST to a route which handles that action. If, and only if, we get a successful response from the server (indicating the database is up to date with that action), we then broadcast a real-time update via Socket.IO. Simultaneously, we dispatch an action which performs an update to the UI through Redux, where the chat data is persisted using ImmutableJS data structures.

基本上,数据库是我们唯一的真理来源。 对于任何CRUD动作,我们都会发布到处理该动作的路由。 当且仅当我们从服务器获得成功的响应(表明该操作是最新的数据库)时,我们才通过Socket.IO广播实时更新。 同时,我们调度了一个操作,该操作通过Redux对UI执行更新,在该操作中,聊天数据使用ImmutableJS数据结构持久化。

In this way, we only show an update to a user if we have actually updated the data in the database first. Using this pattern, we were able to implement some core chat functionality including likes, editing and deleting messages, and just for fun, some pretty cool emojis!

这样,仅当我们首先实际更新了数据库中的数据时,我们才会向用户显示更新。 使用这种模式,我们能够实现一些核心的聊天功能,包括喜欢,编辑和删除消息,以及一些有趣的表情符号!

While continuing to check off the boxes on our MVP feature checklist, we had to consider design every step of the way. From this perspective, our early decision to adapt Semantic-UI as a CSS library proved to be a sound one. We used it heavily and were very happy with its sleek and easy to work with styling and layout options, its Semantic-UI-React integration, and its well-thought-out responsive design capabilities. When it came to the latter, we sometimes supplemented Semantic with React-Screen-Size, when the default breaks and media queries were not enough.

在继续选中MVP功能清单上的框时,我们必须考虑设计的每一步。 从这个角度来看,我们早期决定将Semantic-UI用作CSS库被证明是一个不错的选择。 我们大量使用它,并且对它的时尚和易于使用的样式和布局选项,其Semantic-UI-React集成以及深思熟虑的响应式设计功能感到非常满意。 当涉及到后者时,有时会在默认设置中断且媒体查询不够的情况下用React-Screen-Size补充语义。

For more granular control over styling, we complimented Semantic with some custom Sass stylesheets and Styled-Components. Styled-Components is a newer CSS/JavaScript package for React that allows for more intuitive and conditionally rendered CSS, written directly into your component files. I highly recommend that you check it out.

为了更精细地控制样式,我们用一些自定义的Sass样式表和Styled-Components来补充Semantic。 Styled-Components是React的更新CSS / JavaScript包,它允许直接编写到组件文件中的更直观,有条件CSS呈现。 我强烈建议您检查一下。

Once we had our core functionality down, we were ready for our next big step: deployment.

一旦我们的核心功能失效,我们就准备好下一步,即部署。

I had never deployed an application before, and quickly found that this brought with it a whole new set of challenges.

我以前从未部署过应用程序,很快发现这带来了一系列全新的挑战。

We configured Heroku, subscribed to cloud hosted instances of MongoDB and Redis, and after hours of troubleshooting and 19 commits later, we had reached another major landmark. A beta version of FCCAN was finally live!

我们配置了Heroku,订阅了MongoDB和Redis的云托管实例,经过数小时的故障排除和19次提交,我们达到了另一个重要的里程碑。 FCCAN的Beta版终于上线了!

Though this was not as glorious as I had hoped it would be. Once the app was live, some new concerns were immediately brought to light. For one thing, we needed a much stronger mobile UI (which we had been unable to reliably test up until this point). And, of course, cross-device compatibility was a major problem.

尽管这并不像我希望的那样光荣。 该应用上线后,立即发现了一些新问题。 一方面,我们需要更强大的移动用户界面(到目前为止,我们无法可靠地对其进行测试)。 而且,当然,跨设备兼容性是一个主要问题。

But, we were in the home stretch. Nearly there, we were both extremely motivated to see this project through to completion.

但是,我们在家里。 在那附近,我们俩都非常有动力看到这个项目直到完成。

Over the next few weeks, we were busy at work putting some finishing touches on our application. Not to mention working out a few major bugs. For example, it was a shock to discover that if someone got distracted during login and never attempted to “verify” their account, the entire app would crash!

在接下来的几周中,我们忙于工作,对我们的应用程序进行了一些润色。 更不用说解决一些主要的错误。 例如,令人震惊的是,如果某人在登录期间分心并且从未尝试“验证”其帐户,则整个应用程序将崩溃!

As a final touch, we decided to move away from the default Semantic-UI theme, which didn’t feel quite sleek enough. Plus, we wanted Campers to feel right at home, even on their very first visit. We thought the best way to achieve this would be to recreate the freeCodeCamp theme as closely as we could, while not having to backtrack and compromise the stylistic choices we had already made.

最后,我们决定放弃默认的Semantic-UI主题,该主题还不够时尚。 另外,我们希望露营者即使在初次访问时也能感到宾至如归。 我们认为实现此目标的最佳方法是尽可能地重新创建freeCodeCamp主题,而不必回溯和损害我们已经做出的样式选择。

So instead of pulling in Semantic via CDN, we use their Gulp build tools and custom theming capabilities and built the package directly into our project. The results were fantastic. The site went from a tacky and unprofessional-feeling teal, to a sharp and distinguished freeCodeCamp green.

因此,我们不是使用CDN引入语义,而是使用他们的Gulp构建工具和自定义主题功能,并将包直接构建到我们的项目中。 结果很棒。 该站点从俗气而又不专业的蓝绿色变成了鲜明而杰出的freeCodeCamp绿色。

After 60 days of development and about 20–30 hours per week, we had just about wrapped things up. We conducted a short round of beta testing with live users, and now, as I write this article, we are finally ready for our official launch!

经过60天的开发和每周大约20-30个小时的开发,我们几乎完成了所有工作。 我们与现场用户进行了一轮Beta测试,现在,当我写这篇文章时,我们终于可以正式发布了!

This had turned out to be the quintessential experience that I was looking for. Throughout this process, as things got incrementally more complex, the architecture and inner workings of a modern single-page web app became clear to me. As the codebase grew, I was there for it every step of the way, either contributing code, or reviewing and understanding the code that I didn’t.

事实证明这是我一直在寻找的典型经验。 在整个过程中,随着事情变得越来越复杂,现代单页Web应用程序的体系结构和内部工作对我来说变得很清楚。 随着代码库的增长,我可以做到这一切,无论是贡献代码,还是查看和理解我没有的代码。

Now that we’re done, I can’t reiterate enough times how enriching this experience has been for me. The key takeaway is this: sometimes taking baby steps just doesn’t cut it anymore. If you ever feel frustrated about the rate of your progress, or if you feel like you’ve plateaued, don’t give up.

现在我们已经完成了,我无法重申足够多的时间使我获得丰富的经验。 关键要点是:有时候迈出婴儿的脚步已经不再困难了。 如果您对进度感到沮丧,或者感觉已经停滞不前,请不要放弃。

Instead, go out and find something that’s twice or three times as hard than anything you’ve ever done before.

相反,出去寻找比以前做过的任何事情都要困难两倍或三倍的事情。

It will be difficult, any might feel impossible at times. But the reward of finally completing the challenge, and the value of the knowledge you’ll gain along the way is immeasurable!

是困难的,有时任何人都觉得不可能。 但是,最终完成挑战所获得的回报以及您在此过程中将获得的知识的价值是无法估量的!

Whether 1 or 100 people join the freeCodeCamp Alumni Network, this will all have been worth it. If you can relate to the mindset I had before I started the development of this project, I would encourage you to think about what represents your next biggest challenge, attack it, and own it! I hope you will have as much fun with it as I did.

无论有1或100个人加入freeCodeCamp校友网络,这一切都是值得的。 如果您可以与开始开发此项目之前的心态联系起来,我鼓励您考虑一下代表着您的下一个最大挑战的事物,即予以挑战并加以拥有! 希望您会和我一样开心。

翻译自: https://www.freecodecamp.org/news/the-freecodecamp-alumni-network-a-homegrown-mentorship-network-for-fcc-alumni-529e4531c34f/

校友邮箱

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值