How to quickly Onboarding new students?

This problem involves many roles. In addition to developing new students and mentors, there are also team leaders and architects. HR may also pay attention to this problem, especially in the process of technological transformation of the company.

In our service orientation, new students have to face two challenges, one is language and the other is project. In order to reduce the training cost of new students and enable new students to help the team improve the delivery ability faster and better, it is necessary to conduct orientation training for new students and let mentors guide new students to work in an orderly manner. This paper proposes a collaboration framework for the development of new students and mentors, aiming at helping new students to quickly Onboarding, as shown in the picture below:

Language **** language consensus

In general, we can reach a consensus with new students by discussing the role, choice and learning of programming languages.

  • The problem can be solved in any programming language

  • Choose a programming language with a domain advantage

  • A comprehensive understanding of a programming language through its features

The role of Language

In “Introduction to Computer Systems”, the author reveals the relationship between programming languages and computer systems. Generally speaking, programming language is a tool to describe algorithm – computability problem solution. One end of programming language is human, the other end is machine. The whole level of abstraction system revolves around human-machine relationship, and human controls machine through program.

We see algorithms as thinking things, as core; Programming languages are considered expressive, non-core — they are just physical shells of thought.

If we are working on layer N, we only need to focus on layer N, or at most layer N plus or minus 1. Usually, we only need to focus on the application of the programming language, not the implementation of the programming language.

In short, language is a means to value, not an end.

Choice of language

Generally, an algorithm can be described in any programming language. Why programming language X and not Y? Or Z, the ultimate programming language?

The problem of choosing a programming language is not so much choosing a programming language as choosing an ecology — libraries, frameworks, tools, and so on that surround the programming language. Moreover, the choice of programming language goes beyond the consideration of language itself, and requires comprehensive consideration of customers, businesses and teams.

In general, SRE chooses Go or Python, QA and implementation chooses Python, server-side and data-server-side Scala or Java, and, in particular, Lua, Go, and Ruby. Add the data acquisition SDK, and more programming languages are involved.

We need to have an open mind, break the “one language will do it all” mentality, and choose the language that best fits the application domain.

Language learning

In the book “Principles of Programming Languages”, the author introduced to us the main components and characteristics of mainstream programming languages, we can take this as the outline, through the language characteristics to grasp a programming language. For general language features, we can use the existing programming language experience to quickly learn; For specific language features, we need to focus on learning.

There are many expressions of a language feature at the grammatical level, but its thinking core is the same. Therefore, we should take the learning of language feature as the first and grammar learning as the second.

Learn quickly

How to learn quickly? The trick is to acquire the minimum necessary knowledge, that is, to focus on learning the minimum necessary knowledge.

Next, we will use common features, quick learning tags, and project orientation to identify the minimum necessary knowledge to support new students in learning a programming language, thus setting clear learning goals for new students.

General features

Mastering the common features of programming languages helps you learn new programming languages. These general features include, but are not limited to:

  • Variables and functions

  • Basic operators (arithmetic, logical, relational, bitwise), precedence and associativity of operators

  • Expressions and statements

  • Control process

  • Type system, type derivation

  • object-oriented

  • functional

  • Concurrent, asynchronous

This requires new students to have a certain understanding of the common language characteristics.

Quickly learn label

Martin Odersky, the founder of Scala, defined the level of expertise required by application developers and library designers, as shown below:

Application development engineer

Class library designer

Overall Scala skill hierarchy

Primary A1

primary

Intermediate A2

Primary L1

The intermediate

Experts A3

Intermediate L2

senior

Experts L3

experts

Learn Scala Quickly marks Scala language knowledge according to the above experience hierarchy so that learners can read and review selectively, which I call Quick Tags.

We use quick learning labels to guide new students to learn the direction and content, generally A1 -> A2 -> L1 ->… The order.

Project oriented

In practice, we found that the key language features used in the project were not included in the appropriate quick learning label. Therefore, on the basis of A label and L label, we introduced P label to mark the programming language knowledge according to the key language features used in the new students’ hands-on project.

In this way, we can divide the minimum necessary knowledge in finer granularity and make the learning goals of new students more focused.

Best practices

We try to introduce two best practices — experiment-driven development and test-driven development — in the process of getting new students to use programming languages and hands-on projects.

We recommend that new students try to learn programming language features through experiment-driven development; Test driven development to complete hands-on projects.

Experiment-driven development

Experiment-driven development is where developers spend time experimenting in an interactive environment or REPL before writing test or production code.

The value of using REPL (read-evaluate-print-loop) for experiment-driven development is illustrated in Understanding Scala:

REPL is a great way to start learning about expression oriented programming.

REPL is a powerful way to test the Scala language and its type system.

REPL is a quick way to test a Web service or REST API.

REPL helps developers ensure that their designed apis are expressive in the type system.

REPL is the best tool for teaching Scala.

Test-driven development

We recommend new students to write test code first and then product code in the process of developing hands-on projects, and to think of a better design in the process of code reconstruction.

Here we highlight two benefits of test-driven development: quality assurance and design aid. Quality assurance can make new students more confident in delivering their own output, and auxiliary design can make new students deliver better output.

Learn project

After two weeks of programming language learning (this process can be skipped if you have a programming language background), new students can usually start working on projects, which are assigned by the Mentor and the team Leader. In the process of new students getting started with the project, they should follow the production and research process and specifications of the company — Jira Ticket specification, technical document design specification, MR specification and code specification. Mentors and other students should actively give guidance in the process of reviewing the codes of new students.

For new students

New students are expected to follow the rules of test-driven development and experiment with the REPL with programming language knowledge they do not have. Both experimental code and project code can be reviewed by Mentor through GitLab.

In addition, new students should take the initiative to feedback questions to Mentor.

To Mentor

Mentor needs to help new students determine the minimum necessary knowledge and start the project, and then communicate with new students through GitLab, comment on the code of new students and give guidance.

The result of code review can be used as a reference for new students’ entry review.

In addition, Mentor should timely respond to the feedback of new students.

conclusion

This paper tries to solve the problem of “how to quickly Onboarding research and development students”, standardize the behavior of new students and mentors, and enable new students to quickly start language, quickly start projects and quickly Onboarding under the guidance of mentors, so as to better help the team improve the delivery ability.

                                                    

Author: Liu Zhenyuan/Server engineer

Recruitment information

GrowingIO technology team is an energetic and passionate technical team. We are looking for more positions! We are looking for big data engineers/Java engineers/data mining engineers 
, etc. If you are interested, please send your resume to [email protected] (please specify your specific position title). More positions and information can enter the recruitment website to check!

About GrowingIO

GrowingIO is the leading one-stop data growth engine overall solution service provider in China. Founded in 2015, GrowingIO takes data intelligence analysis ability as the core. By constructing customer data platform, GrowingIO creates growth marketing closed-loop, helping enterprises improve data-driven ability, enabling business decisions and realizing business growth.