Secret programmers in everyday life (outsourcing, technology-oriented, business-driven) Company

table of Contents

First, the writing background
Second, the various types of companies ambience
Third, the various types of the company's development process specification
Fourth, how to improve the core competitiveness of the company's
five some pertinent suggestions

A writing background

I have had three sections internship during college, in an outsourcing company sophomore, junior went to technology-based companies, and now stay in a business-driven company. I know relatively long time readers should know, I experienced a good intern, advance to positive twice, most recently this work was originally six months of internship trial period, only practice a month in advance to positive.

Writing this article has three objectives:
  1. Purely to share experience of the three.
  2. Share the same time, to the students and not working in these companies the students some reference. After all, they did not really experienced before, others are just mouth said, is the so-called "Siege."
  3. Because I have a habit of re-set the stage, the performance of the work of these three sections can also think, will be here to share some of improving the core competitiveness of experience for different types of companies.

Secret programmers in everyday life (outsourcing, technology-oriented, business-driven) Company

Second, the various types of companies ambience

① Outsourcing

We had a team of 10 people, assigned to state-owned enterprises which develop, we only assigned to a small room, but before the room or warehouse, in most corners of the company.

The atmosphere inside the room , "is consistent with" the development of the atmosphere, only to the point of the meal to eat only someone shouting voices, other times it was quiet.

This state-owned enterprises have their own canteen, their employees are catered, staffing card. But this enterprise for our team to just one card, that is, our team share a card, so we get to the cafeteria after a row with rotation brush. After the meal, everyone on the team needs to turn 12 yuan as CTO noon meal, CTO harvested after transferred to the unified corporate finance, that is, we do not pack meal.

Turn card, do not pack these meals are good, after all outsourcing team Well, can understand. But sometimes in the cafeteria holidays specially cooked soup or whatever, we see a team come, they just say we did not. Once Mid-Autumn Festival, the Ministry of Personnel issued in the cafeteria door gift, a team of older employees to go collar, the Ministry of Personnel of people because of our relatively new, so ask about the basic information, we heard the technical department, and quickly waved He waved and said no.

While this outsourcing 996, 800 a month only made me pay, but also the transfer of Alipay, but I was very grateful for giving me this opportunity for me to learn, there is no "sense of belonging" and "identity" also told me only just practice, the two friends feel believe in outsourcing all too well.

② technology-oriented

The company is a technology-based company in the true sense, the core competitiveness of our products is the technology to address other competing products on the market can not be resolved.

The company's founder and management of all technical background, the enterprise has set up a university, there is compulsory and elective courses above, then after class to take the exam, test scores as one of the year-end performance indicators. On the HR, R & D personnel down to the bottom of a large data had to be baptized knowledge, casually is a variety of Hadoop, Spark. In addition, the company will often external to the company to share technology, the enterprise will do regular share.

This technology is the atmosphere each technical people aspire to, encounter any difficulties, internal staff to brainstorm what can be resolved.

This enterprise technical staff is with the core of the core sector must also be development department, and for different technology, in the part of the union points relatively small, which module, which functions specific to.

③ business-driven

In this company, the normal development department is not core departments, but they are also indispensable. Take my current electricity supplier companies, the data sector is intended to provide some data to allow them to better pricing, custom activities to the Operations Department.

The company's core competence should be the product, followed by mode, and the mode contains the operations, sales and so on. Technology is only established as a secondary part of this model, build a platform, or some indicator data, all in order to better service business.

Most Internet companies are market-driven business companies, these companies will outsource part of the edge, we do focus on the core business, the core business of technology for technology-based companies, like as not any harsh, seeking the best value for money.

Secret programmers in everyday life (outsourcing, technology-oriented, business-driven) Company

Third, the various types of the company's development process specifications

①外包

不管是烂代码还是冗余代码,只要能实现功能的就是好代码。大部分的外包公司或者说基本所有的外包公司都不会做code review,只要能把功能实现交给客户就行。

大二的时候,我们团队虽然驻扎在一家国企里面,但真正做该企业项目的只有我一个人,其他人都在做不同的项目。我那时既自豪又感概,自豪地跟同学说我自己一个人搞一个国企项目,感慨公司心真大,把一个国企项目交给我的一个实习生来做。

那时也不懂什么叫好代码,都是冲着功能实现去的,各种调包,copy & paster,if else while for常常写出死亡三角,没人批评我说代码写的丑,没人让我封装,都是夸我功能实现的快,就是bug多了点。

产品经理时不时地走到我身边,跟我说要加哪些功能,哪些不要,业务逻辑都是freestyle,现场画逻辑图。刚开始不懂,认真地听产品经理说,然后拿小本本记。后来我的leader跟我说:别听产品经理的,有不懂的问我就行,到后来国企的运营部也来找我提需求,真的是人人都是产品经理啊!

团队里没有专门的测试同事,都是上线那天一起加班,国企运营部的人帮忙测试,我们开发就在旁边实时解决测出来的问题,顺利的话当天发布,要是有遇到解决不了的bug就结束加班,明天继续。

这个项目经过我手之后写的是又大又烂,现在的我也看不下去那些代码了,这个项目在我走之后也下线了。

在这家公司,我从跟甲方博弈,到跟产品经理撕逼,再到前端后台数据库服务器,全搞了一遍。不得不说这也是一个难得的学习机会,但是我在下一家公司尝了这家公司带给我的苦。

②技术型公司

一年后来到了这家公司,这家公司是数仓行业的标杆,产品是To B的,客户都是各领域的KOL,又是中国第一个Apache顶级开源项目,无论是技术还是开发流程规范说领先的应该不过分。

先看看我们的开发流程和规范:
1. PRD/issue
如果是新功能,而且相对比较大的,需要产品经理画出原型图以及详细说明清楚;如果是bug或者比较小的功能,需要在github的issue上说清楚。口头说的永远无效,如果产品经理口头对我们说什么,我们都会要求他给文档、发邮件或者在issue上说明清楚,也是保留证据,防止互相甩锅。

2. 本地Reproduce
本地重现bug。也就是出现bug的时候,我们开发要进行本地重现,只有重现出来才能从根本上解决问题。这一步是最难的,也是耗时最长的。如果连bug本地重现也重现不出来,后续工作基本难以进行。

3. 定位Root cause
对于Bug,我们要先找到引起的根本原因,这块最考验综合能力。mentor给我的箴言就是:「大胆假设,小心求证」。 把所有可能性列出来,然后一个个去证实。只有定位了Root cause,你才能开始去写代码。

4. Design review
这是代码架构设计上的一个review,是跟mentor或者leader对接确认的,在编写代码之前完成,避免设计不行,被全部推翻。这块也要写在github的issue,一方面为后人留下痕迹,便于后面维护或者迭代复盘。而且高层也经常翻阅issue,design review做的不好,也会被指出来,及时发现问题。

5. 代码编写(阿里巴巴手册,UT,IT)
写好代码是新手的基本要求,不写低质量代码。这边要求按照effect java以及阿里巴巴代码手册进行约束,以及每写完代码都要通过UT或者IT进行覆盖。

6. Test plan
当你写完代码之后,你需要制定一个测试计划,也就是测试用例,去解决之前相同操作下会出现的bug或者验证你的新功能。

7. Test evidence
也就是Test plan制定完之后进行实施,将验证成功的截图进行保留,贴到issue,作为你完成功能的证据。

8. CI
Continuous Integration-持续集成服务,它会自己运行构建和测试,反馈过程中是否存在Bug或者其他问题,看是否与我们预期的结果一致。我们是在Jenkins上完成的,当你的代码有点改动你就需要去跑CI,避免影响到系统的其他模块。

9. Code review
当你写完代码并且通过测试之后,通过pr的方式先给导师review,导师review完之后提交给leader,对于一些比较重要的模块,在leader看完代码之后还要进一步提交给CTO。看完这个你还敢提交烂代码?别说烂代码了,一个变量名定义的不好都得被打回来。

刚开始入职的时候觉得这些操作很烦,改一行代码就得去issue上面写一堆,而且也要跑个几小时的CI。当后来吃了几次亏,真香。别看除了代码编写还有很多其他操作,其他操作也是为了让你更好地去编写代码,帮你梳理整个开发流程,也不自觉地提升你工作的严谨性。所以到现在,我来公司解决的第一个bug,我都还知道Root cause,以及其他细节。其他人也知道,因为我都贴在issue上面。

由于我在第一段工作中养成很多不好的习惯,比如说代码写的又快又烂,debug各种log乱打,为了实现功能破坏了设计模式等等。所以在第二段工作经历中被骂的狗血淋头,国庆7天看了4本关于代码设计的书籍并做了总结,对项目源码进行深入阅读,学习一些设计模式等等。

在第二家公司,虽然被怼了很多,但是收获非常大,可以看我在第三家的表现。

③业务驱动型

业务驱动型的公司处于外包和技术型之间,也是以实现功能为主,又要注重后期维护,对规范处于中立状态,不挖坑,不矫情。

由于我从第二家公司出来后,对代码有一定的洁癖,所以到了第三家公司一有空就重构项目代码,leader也赞同我的行为,经常找我聊代码设计和规范。我也主动申请要补充部门的开发流程规范,数据库的字段规范,并补全项目代码的UT、IT等等。这也是我能提前转正的原因之一。

Secret programmers in everyday life (outsourcing, technology-oriented, business-driven) Company

四、如何在不同类型的公司提高核心竞争力

在外包公司,不能局限于一个点进行开发,外包公司需要的是全能型人才,哪里缺哪里补上。在外包公司不需要你技术多厉害,但需要你会利用现成的资源以最快的速度完成项目开发。你会的方面越多,公司需要你的地方也就越多,你得到的也更多。

在技术型公司,不需要你会的有多广,你只需要针对公司产品的一个点进行深入了解,不断地进行优化,这个点就是你的核心竞争力。再由这个点切入到相关模块,技术深度才是王道。

在业务驱动型公司,不能光会技术,当其他开发人员只会跟老板讲技术,而你能将具体技术落实到业务,并且能从业务层面反推到技术实现,老板能不喜欢吗?但也要记住,技术是生存之道,别顾此失彼,耍小聪明。

技术人员的核心竞争力终究是技术,但技术也分广度、深度、与业务结合的能力,在不同的环境下,应该学会取舍。

五、一些中肯建议

1.外包公司能不能去?

在没有更好的选择下,能去,有总比没有好。并不是所以的外包公司都是一个模样,说不定你的leader好,服务的又是又好又有钱的甲方,好吃好喝好款待。但大部分的外包还是不咋地,这边调查好背景就行。

2.技术型公司×××?

所有开源项目背后的公司都是技术型公司。比如开源Kylin的Kyligence,开源Dubbo、RocketMQ的阿里、开源Flutter的谷歌等等。而像阿里、腾讯这种大公司,每个BU就是一个类型的小公司,有些负责技术,有些负责业务,有些外包。

3. For the final year students of choice?

Recommendations to technology-based companies or the core technology sector. You can see from my case, I technology companies to help create an overall maximum, may implement career. When you get used to low standard stuff for a long time, it is difficult to generate interest in a high standard.

4. My views on these three companies?

For outsourcing companies, I think it will be missing "sense of belonging" and "identity" , after all, do not own the product, we had to go to the customer site presence, but also for outsourcing of technology is not very good.

For technology-based companies, for personal growth definitely help a lot, but in this company due to the surrounding level higher than you are the person to solve the problem are also more difficult, so there will be pressure and produces virtually anxiety.

For service companies, it is best to choose your good at and have relevant work experience in the business. I did the first paragraph internship project is the electricity supplier, so I work now is to find the electricity business, after all, the business logic is the same, even before he jumped, will choose the electricity supplier industry, after all, in addition to technology, industry knowledge is also competition one force.

Choose what type of company, eyes of the beholder, you can make choices based on their interests and local expertise.

Guess you like

Origin blog.51cto.com/14295088/2408839