大家在寻找的高级程序员到底是什么样子的?
原文地址:大家在寻找的高级程序员到底是什么样子的? 转载
我们的中国文化,对“面子”看的特别重,所以你会发现身边到处都是高级XXX,听着倍儿有面子,程序员也不例外。
但是你真要问每个人,你认为的高级XXX是什么样子的。估计每个人都有不同的回答。
我还记得在我刚开始从事编程工作的时候,对坐在边上不远的那位我心目中的高级程序员的印象是:
工作至少有6、7年以上,能写一个用起来很方便、看起来很牛逼、但是不太容易让初级人员看懂的框架。
前两天,我把这个问题丢到群里,大家给出的答案中,占比最高的是以下几个。
有 N 年以上编程经验(大部分都说5年以上)
有出版过技术图书
对某领域内对常用框架原理有了解,并且实际使用超过2年
可以随时随地快速写出常见的一些算法
至少封装过一个被全局使用的开发框架
写出来的代码,阅读起来很好理解
能带领其他人员成功完成项目
你看,这件事对大家来说就是常说的,“一千个人眼中有一千个哈姆雷特”。
不过这也正常,毕竟像初级、中级、高级这种高度抽象的词汇,想要得到一个可描述的定义与人交流,必然需要夹杂着个人的主观因素。
但是很多行业都在这么进行分类,自然有它的 ...
阿里高级技术专家方法论:如何写复杂业务代码?
原文地址:阿里高级技术专家方法论:如何写复杂业务代码? 转载
阿里妹导读:张建飞是阿里巴巴高级技术专家,一直在致力于应用架构和代码复杂度的治理。最近,他在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。结合实际的业务场景,Frank 沉淀了一套“如何写复杂业务代码”的方法论,在此分享给大家,相信同样的方法论可以复制到大部分复杂业务场景。
一个复杂业务的处理过程业务背景简单的介绍下业务背景,零售通是给线下小店供货的B2B模式,我们希望通过数字化重构传统供应链渠道,提升供应链效率,为新零售助力。阿里在中间是一个平台角色,提供的是Bsbc中的service的功能。
商品力是零售通的核心所在,一个商品在零售通的生命周期如下图所示:
在上图中红框标识的是一个运营操作的“上架”动作,这是非常关键的业务操作。上架之后,商品就能在零售通上面对小店进行销售了。因为上架操作非常关键,所以也是商品域中最复杂的业务之一,涉及很多的数据校验和关联操作。针对上架,一个简化的业务流程如下所示:
过程分解像这么复杂的业务,我想应该没有人会写在一个serv ...
降低软件复杂性的一般原则和方法
原文地址:降低软件复杂性的一般原则和方法 转载
追求卓越、学习成长是美团的基因,因此工作之余,多读书、读好书蔚然成风——我们有专门的P2P图书馆、不时的好书推荐、图书打卡交流群和各种丰富读书活动……
本文是作者阅读John Ousterhout的《A Philosophy of Software Design》之后,结合自己的工作经验,对“降低复杂性”做了详细总结,希望给读者朋友们带来不一样的思路。
一、前言斯坦福教授、Tcl语言发明者John Ousterhout 的著作《A Philosophy of Software Design》[1],自出版以来,好评如潮。按照IT图书出版的惯例,如果冠名为“实践”,书中内容关注的是某项技术的细节和技巧;冠名为“艺术”,内容可能是记录优秀作品的设计过程和经验;而冠名为“哲学”,则是一些通用的原则和方法论,这些原则方法论串起来,能够形成一个体系。正如“知行合一”、“世界是由原子构成的”、“我思故我在”,这些耳熟能详的句子能够一定程度上代表背后的人物和思想。用一句话概括《A Philosophy of Software Design》, ...
技术团队管理
原文地址:技术团队管理(上) 转载 ,技术团队管理(下) 转载
对于非创业阶段的公司,业务相对稳定,公司发展的目标、计划也比较明确,公司一般很重视产品技术团队的建设;在这样的环境下,研发团队应该如何发展呢?笔者准备从以下几个角度,来探讨技术团队的综合管理。
招聘
人员培养
团队文化、氛围
技术栈、技术架构
项目管理
晋升
招聘每个公司对引入合适的人才,都逐渐形成自己的人才观和人事方面的方法论。大部分团队的负责人和leader,也接受过公司关于人才招聘方面的培训。我们如何去寻找到合适的人才呢?请看下面这张图。【来自百度百科:人才冰山模型】
对一个候选人,我们的面试过程,也是从这几个方面进行考察。稍微和上面有一些差异。
知识: 在专业知识方面考察时,需要注意的是让至少高于候选人两个级别的人来面试,从而能准确的评价候选人的知识。如果让低P的人来面试,很可能会因为面试官没听懂候选人的回答,而早早误杀掉。
对于技术团队,在知识上,一般考察的是算法、数据结构、常用技术栈和数据库等方面的、有一致理解的“知识”。
经验: 在考察一个人的经验时,首先看的是他的简历,这样能快速的对一个人的经验 ...
研发Leader成长手册
原文地址:研发leader成长手册(一) 转载 ,研发Leader成长手册(二) 转载 ,研发Leader成长手册(三) 转载
近来和一些担任研发leader的同事和朋友交流中,发现部分同学,在研发leader的岗位工作上遇到了瓶颈。具体的问题,有个人发展空间上的,有工作内容上的,有时间精力安排的,有对外合作配合的,笔者仅以自己过去的经历和对leader工作的理解,分享一下对成为一个成功的研发leader的视角、观点。
研发leader的工作内容,可以分为以下几个方向:
技术方向工作
规划方向工作(目标、计划、执行、制度等)
协调方向工作(跨部门沟通、跨部门项目协作)
团队方向工作(招聘、培养、沟通、团建、宣传等)
在这几个方向上,分4个主题,逐个来分析、探讨。这4点交融在leader的工作中,因此每个方向探讨时,会有互相交叉的部分。
技术方向篇在技术工作方向上,容易出现的三个误区:
A. 技术leader是团队的产出核心,其他人辅助工作
B. “我”是做技术的,产品、运营做的好不好,不关我事
C. “他们”技术不行,培养太花时间,等他们做完,我早做完了
下面我们来刨析 ...
智能写作v2.0
引用自:智能写作v2.0 转载
computational literature
如何看待文科渐渐「计算化」的趋势?
近年随着算力和数据科学的发展,不少文科开始出现「计算XX学」的分支,跟写作相关的比如,计算文学、计算语言学、计算美学。本文大量的工作基于《人工智能写作指南v1.0》,结合近些年作者的实践研究及国内外行业进展,整理而成,主要包括知识点、产品、技术栈等内容。
版本记录:
2019-02-14 v1.0
2020-04-26 v2.0
背景这是一个机器人写稿的时代,智能写作应用的行业涉及非常广,有新闻业、媒体业、广告业、自媒体行业、政府公文等等,跟文字生产有关的都有所应用。
应用场景上下游主要分为上游的生产端,表现为创作工具(诸如编辑器、笔记类产品),中间环节主要是内容的审核、发布、培训(主要产品比如文本风险、版权检测、多平台自动发布),下游主要是内容的消费,比如广告变现、知识付费等。
最典型的产品是机器人记者,是不是意味着“人类记者即将失业”?其实不然,目前,新闻机器人主要用于以数据为基础的报道领域,例如公司年报、股票市场简报、地震报道和体育报道等等数据类的新 ...
开发环境搭建
工具说明
名称
简介
使用说明
OpenLDAP
开源的LDAP协议实现。
OpenLDAP
GitLab
Git仓库管理工具
GitLab使用手册
GitLab-CI
GitLab默认集成的持续集成工具
GitLab-CI Runner
Confluence
专业的企业知识管理与协同软件,可用于构建企业wiki
–
Jira
项目与事务跟踪工具,广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域
–
Crowd
Confluence与Jira单点登录
–
SonarQube
代码质量管理平台
SonarQube
Nexus
Maven仓库管理器
Sonatype Help
Portainer
Docker可视化管理工具
Portainer安装
jumpserver
开源堡垒机,符合4A的专业运维审计系统。
jumpserver
使用 docker-compose 部署以上工具的 docker-compose.yml 文件内容如下:
1234567891011121314151617181920 ...
WSL2使用指南
WSL2简介及安装
关于 WSL2
安装 WSL2
安装WSL2支持的Linux发行版进入 Microsoft Store 搜索关键词 wsl,选择要安装的Linux发行版,推荐安装 Ubuntu。
Ubuntu系统配置替换 APT 软件源备份原有源文件:
12# 备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
执行 sudo nano /etc/apt/sources.list 修改 sources.list 文件,更改为阿里源:
12345678910deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricte ...
三大报表:财务界的通用语言
原文地址:三大报表:财务界的通用语言 转载
你问一名程序员:世界上最好的语言是什么,你可能会得到各种答案。但如果你问一名财务人员,想要了解一家公司,什么是必不可少的?他们的回答会非常一致:三张报表。
资产负债表、利润表、现金流量表,这三张报表跨越了国别与行业,无论你是美国的炼油厂,还是巴西的农贸公司,这三张报表的编制与格式却是大同小异的。这当然不是一个巧合,而是因为任何一家商业公司,都可以抽象成一个用钱生钱的过程:融资拿到钱,投资花掉钱,经营赚回钱。而三张报表,则是这个过程的忠实记录者。
资产负债表
利润表
现金流量表
一、资产负债表资产负债表反映的是企业的融资和投资过程。
先说说融资,顾名思义,融资就是找到成立和运营公司需要的钱。而一家公司拿到的钱,又可以分为股权融资和债权融资,这两者有什么不同呢?同样是给企业注入资金,但两者承担的风险和收益是完全不同的。
股权融资的收益,是和企业的发展息息相关的。如果企业发展得特别好,每年赚到的净利润都是属于股东的,而如果发展得不好,你同样需要承担亏损,决定是否追加资本,甚至就算是倒闭,也是优先补偿债权人后,才将剩余的清算价 ...
做支付需要了解哪些行业知识
原文地址:做支付需要了解哪些行业知识 转载
这篇文章适合新手入门学几句黑话,老司机建议直接快进。
二清即是二次清算。支付机构将资金结算给了平台,平台再自行将资金清算给下游的商户客户。如果平台没有清算资质(支付牌照),就算违规二清。管控二清行为主要是防范平台吸收资金后并且挪用资金进行高风险投资甚至卷款跑路。对于正经平台而言账户里沉淀了资金反而烫手。
“匹夫无罪,怀璧其罪”。
支付牌照 即《第三方支付的业务许可证》,央行颁发,受央行监管。
主要分为三种牌照:银行卡收单(主要形式为POS机刷卡)、互联网支付、预付卡发行与受理。
支付牌照之前抢手原因是申请门槛太高,需央行审核发照。更重要的是央行几乎停止发牌照了(吊销的牌照的比新发的还多)。全国仅存200家左右第三方支付公司,能做互联网支付的应该不到一百家了。备付金收归央行管理后,支付公司纯靠支付手续费躺着挣钱越来越难了。更多的支付公司指望能像支付宝一样将流量变现,做征信、理财、借贷、异业营销等。
怎么避免二清 电商(包括类似模式的)平台多如牛毛,有牌照的寥寥无几。虽然很多平台在这块都涉及违规操作,但估计是因为央行没工夫和这些规 ...
支付系统
原文地址:支付系统
概述
支付系统是连接消费者、商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付金额等),金额对账等功能,根据不同公司对于支付业务的定位不同大概有几个阶段:第一阶段:支付作为一个(封闭)的、独立的应用系统,为各系统提供支付功能支持。一般来说,这个系统仅限于为公司内部的业务提供支付支持,并且和业务紧密耦合。第二阶段:支付作为一个开发的系统,为公司内外部系统、各种业务提供支付服务,支付服务本身应该是和具体的业务解耦合。
支付是电商系统中核心
我们先来看一下用户完成一次购物需要进行那些操作:
通常消费者在手机APP或者网站都会涉及到支付相关的业务场景,用户只需要简单点击支付按钮输入支付密码,就可以完成整个支付过程,那么我就和大家一起来看看一个完整的支付系统有什么功能组成和设计时需要考虑那些问题。
支付系统的作用
从上图中我们可以看出真实的资金流向。首先当用户产生支付行为时,资金从用户端流向支付系统,退款时则相反,从支付系统回流至用户端。因此在整个交易过程中用户端与支付系统是双向资金的流动方式。对于支付系统而 ...
色彩体系
在日常的工作中,我们经常会使用到色彩,主流的色彩体系有 Material Design、Ant Design 等等。这里将主流的色彩体系做一个汇总收录,方便查找和使用。
Material DesignMaterial DesignMaterial Design Dark
Ant DesignAnt DesignAnt Design Dark
卓越的人和普通的人到底区别在哪?你根本想不到是它
原文地址:卓越的人和普通的人到底区别在哪?你根本想不到是它 转载
在某些时刻,比如企业招聘的时候,比如你给上小学的儿子讲数学题的时候,再比如,你花了半小时跟某人辩论,最后却发现他根本不讲逻辑的时候,难免会在头脑中形成这样的问题:到底人和人之间的区别是什么?到底是什么东西导致了这些区别?
如果考察一下人的核心特质(或能力),下面这个清单很容易列出来:
专业知识;
逻辑思考力;
持续学习能力;
沟通和表达能力;
决断能力;
冒险精神;
毅力;
……
这些能力都很重要,但哪个才是最重要的能力?到底是其中的哪一个导致了人与人的不同?
这其实跟一个更宏大的课题有关。在这个世界上,大多数人碌碌无为,只有少数精英引领着这个世界前进。他们摘得诺贝尔奖的桂冠,他们写出不朽的作品,他们创造出伟大的科技公司,他们设计出家喻户晓的产品,深深地影响整个时代。他们是科学家、发明家、作家、企业家,以及各个专业领域的「大家」。总之,他们是「卓越的人」。
于是,前面的问题就演变成了:普通的人和卓越的人到底区别在哪?
在卓越的人身上,肯定具有某种不同凡响的能力和特质,是普通人所缺乏的。如果我们找到了它,是不是我 ...
如何自学一个领域?这里有一份全指南
原文地址:如何自学一个领域?这里有一份全指南 转载
以前写过不少跟学习相关的文章,但大都是集中于某个点,欠缺系统性。
今天,我想通过这篇详细的文章,把「学习」这个问题,简单梳理一下。
当然,这是一个巨大的话题,难免挂一漏万。以后有机会,再慢慢补充,形成一整个关于学习的系列。
希望能够帮到你。
1. 框架不少读者朋友问过我「刚刚入门一个领域,什么都不懂,怎么学?」我的回答永远都是一样的:
一定要先从搭框架开始。
什么叫搭框架呢?简而言之,就是给你的大脑一个铺垫,让它准备好,告诉它:在未来的日子里,我们将会大量吸收这个领域的知识,请做好理解和储存它们的准备。
举个例子:当你撰写一份策划方案、报告时,你第一步是不是先有一个整体构思,列一个大纲:我先写什么,然后写什么,最后写什么 —— 接下去才开始动手?
学习也是一样的。如果缺少了框架,你所有获取的知识,就只是碎片信息而已。它们会孤零零地漂浮在记忆里,难以稳固存在,也难以被你所调用、组织、整合。
那么,如何搭建框架,令我们的学习更加体系化呢?
我建议的方法,是去搜寻这个领域相关的经典教材,大约3-5本。然后读一遍 —— 无需一字不漏地 ...
Jira基本概念
Project(项目)Jira中的项目是一组问题单(issue)的集合,项目可以根据组织需求来定义,例如:软件研发项目,市场营销活动,服务台(helpdesk)系统,一个请假管理系统等等。每一个问题单属于一个项目。每个项目需要有一个名称(例如:Website Issues)和关键字(Key,例如WEB)。项目的关键字会成为项目问题单前缀,例如WEB-101,WEB-102等等。
组件是什么(component)组件时项目中的问题单的一种逻辑分组。一个项目根据组织的需要可能会包括多种组件。
举例而言,一个软件开发项目可以包括如下组件:文档,后端,邮件子系统,界面。一个网站系统可能包括产品,联系方式等组件。在一个项目中,一个问题单可以归属于0到多个组件。
在Jira较新的版本中,组件被更名为模块。
版本是什么(version)对于一些类型的项目,尤其是软件研发项目,把一个问题单关联到一个特定的项目版本(例如:1.0beta,1.0,1.2,2.。0)会非常有用。
问题单(Issues)有两个跟版本有关的字段:
影响版本(Affects Version(s)):这个是要说明受问题单影响 ...
工具整合
GitLab-CI整合SonarQube……
GitLab整合Jira一、整合步骤1、打开项目页面,进入 设置 → 集成 → 项目服务 → JIRA
2、填写并保存JIRA配置
Username 统一使用 gitlab-admin。
二、整合示例提交代码时在提交说明中填写Jira Issue的ID(如下图的 STUDYCLOUD-3)即可自动关联上Jira。
需求分析
一、我们应当如何做需求分析?需求分析不是一蹴而就的,它应当贯穿整个开发周期,不断的分析确认的过程。这就是敏捷开发倡导的需求反馈。敏捷开发认为,需求分析阶段不可能解决所有的需求问题,因此在设计、开发、测试,直到最终交付客户,这整个过程都应当不停地用开发的成果与客户交流,及时获得反馈。只有这样才能及时纠正需求理解的偏差,保证项目的成功。
二、我们应当怎样做需求调研?
1、初识我们对客户提出的需求进行深入理解以后,运用我们专业知识,提出比客户的原始需求更加合理、可操作的解决方案,让客户感觉你说的正是他们想要的。如果能够这样,客户不仅能够欣然接收你提出的方案,而且会感觉你非常专业,你在客户心目中的形象也会无形中提高,使你有更多的机会提出有利于开发的可行方案,降低开发的风险。这毫无疑问会形成一个良性循环,但要做到这一点并不容易,毫无疑问,在与客户接触初期的表现起到了极其关键的作用。
高层领导关心的是宏观的目标,因此软件研发目标、宏观统计报表、决策支持功能,我们应该怎样做需求分析,应当与高层领导谈。
中层领导关心的是具体的效益,即软件给各个部门信息化管理方面带来的效益,因此,中层领导是各项业 ...
项目决策
在结果还没出现之前,一个决策的好坏似乎是无法判定的。但是当结果出现之后,再依据结果判定这个决策好坏,是否又为时已晚?判断决策优劣并非是为了以结果论英雄,更多的是为达到某个既定结果所进行的决策预判。
不论在军事还是商业,或者是生活上,一个好的决策一定是在其决策周期及决策目标下,基于确定性边界条件及核心逻辑演绎下的结果。也只有这样的决策才能算是一个好的决策。
决策有三个基础:决策目标、决策条件、决策逻辑。
一个好的决策一定是由对应的决策条件来做支撑,并且基于这些决策条件,以及想要达成的决策目标,有一套核心而正确的决策逻辑来实现。这三个决策基础实际上形成一个决策链条,环环相扣,任何一个环节的不利都将直接导致整个决策失效。
决策目标在我们做决策的过程中,我们都会预先假设了这么一个决策目标,这也是一个成功决策首先要具备的条件。如果决策目标都改变了,那么这个决策当下就已经宣告无效。
决策目标包含两个作用:
评价作用:评价作用主要体现在决策目标作为一个确定标准,能够对决策逻辑和决策条件进行定性,通过否定决策逻辑和决策条件来否定自身。
指导作用:在具体的决策过程中,指导作用能够帮助我们选择正确的 ...
项目规范
整体流程
在日常工作中,使用wiki和jira进行协作的一般流程为:
调研、收集资料,并形成相关文档记录在wiki上。
组织相关人员进行文档评审会议,指定与会人员进行会议记录,并形成行动项。
项目管理人员将行动项转换成jira的问题,指派问题的经办人,指定任务时间。
问题的报告人和经办人根据实际的执行情况修改jira问题的详情、状态等。
项目负责人周期性的对问题的执行情况进行跟踪反馈,并制定后续的行动策略。
以下简称为一般流程。
立项
完成《行业分析报告》、《竞品分析报告》、《技术可行性分析报告》、《成本与效益报告》、《项目计划》等文档的一般流程。
《项目计划》完成之后,会根据具体的项目计划内容形成多个jira史诗,每个史诗可以继续细分成多个故事或任务。jira故事(即常说的“用户故事”)一般需要编写相应的需求设计,而任务则会转化成具体的方案设计、开发任务等。
需求
根据用户故事进行需求分析,需求分析包含以下内容:
明确基本需求
挖掘隐含需求
扩展需求
业务架构(前端流程、后台处理流程、资金链)
筛选不合理需求
编写软件产品《需求设计》文档,并完成《需求设计》文档的一般流 ...
不好意思,你的辛劳并不等于酬劳
原文地址:不好意思,你的辛劳并不等于酬劳 转载
今天的文章算是“996”系列的最后一篇,来聊聊时间和报酬的问题。
很多人抱怨说自己工作时间长加班多,为什么获得的薪酬还那么少。
那是因为你还没有了解职场上的游戏规则:
职场上升的本质,是一个不断把初级资源转化成高级资源的过程。
你所获得的回报,绝不应该以时间来计量,否则一辈子都是受人剥削的打工仔。
为什么这么说?且听我慢慢道来。
如果把我们漫长几十年的职场生涯比作一场竞技游戏,那么大部分普通人在大学毕业的初始阶段,时间和精力就是最初级,也是最重要的资源。
我们往后的人生,实质上比拼的就是你怎么利用这些初级资源。
3年前我曾用小号在知乎上发起过一个很火的问题,叫为什么毕业三四年之后,人和人的差别变得如此巨大?
除了少数幸运儿天生自带身份、背景、家庭社会地位所带来的光环加持,更多普通人三四年后的差异,完全取决于他怎么去利用初级资源,也就是时间。
有的人懂得将时间进行高阶置换,用时间去换知识,换技能,换人脉,换名声,换一系列能在往后职场通关打怪中帮到自己的高级资源;
而有的人并没有意识到这一点,在一无所有的年纪用时间去换所谓的“快乐” ...