learn.lianglianglee.com/专栏/架构设计面试精讲/结束语 程序员的道、术、势.md.html
2022-08-14 03:40:33 +08:00

293 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>结束语 程序员的道、术、势.md.html</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/架构设计面试精讲/00 开篇词 中高级研发面试,逃不开架构设计这一环.md.html">00 开篇词 中高级研发面试,逃不开架构设计这一环</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/01 研发工程师想提升面试竞争力,该具备这三个技术认知.md.html">01 研发工程师想提升面试竞争力,该具备这三个技术认知</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/02 研发工程师如何用架构师视角回答架构设计方案?.md.html">02 研发工程师如何用架构师视角回答架构设计方案?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/03 面试官如何考察与 CAP 有关的分布式理论?.md.html">03 面试官如何考察与 CAP 有关的分布式理论?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/04 亿级商品存储下,如何深度回答分布式系统的原理性问题?.md.html">04 亿级商品存储下,如何深度回答分布式系统的原理性问题?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/05 海量并发场景下,如何回答分布式事务一致性问题?.md.html">05 海量并发场景下,如何回答分布式事务一致性问题?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/06 分布式系统中,如何回答锁的实现原理?.md.html">06 分布式系统中,如何回答锁的实现原理?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/07 RPC如何在面试中展现出“造轮子”的能力.md.html">07 RPC如何在面试中展现出“造轮子”的能力</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/08 MQ如何回答消息队列的丢失、重复与积压问题.md.html">08 MQ如何回答消息队列的丢失、重复与积压问题</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/08 案例串联 如何让系统抗住双十一的预约抢购活动?.md.html">08 案例串联 如何让系统抗住双十一的预约抢购活动?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/09 如何回答 MySQL 的索引原理与优化问题?.md.html">09 如何回答 MySQL 的索引原理与优化问题?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/10 如何回答 MySQL 的事务隔离级别和锁的机制?.md.html">10 如何回答 MySQL 的事务隔离级别和锁的机制?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/11 读多写少MySQL 如何优化数据查询方案?.md.html">11 读多写少MySQL 如何优化数据查询方案?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/12 写多读少MySQL 如何优化数据存储方案?.md.html">12 写多读少MySQL 如何优化数据存储方案?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/13 缓存原理:应对面试你要掌握 Redis 哪些原理?.md.html">13 缓存原理:应对面试你要掌握 Redis 哪些原理?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/14 缓存策略:面试中如何回答缓存穿透、雪崩等问题?.md.html">14 缓存策略:面试中如何回答缓存穿透、雪崩等问题?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/15 如何向面试官证明你做的系统是高可用的?.md.html">15 如何向面试官证明你做的系统是高可用的?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/16 如何从架构师角度回答系统容错、降级等高可用问题?.md.html">16 如何从架构师角度回答系统容错、降级等高可用问题?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/17 如何向面试官证明你做的系统是高性能的?.md.html">17 如何向面试官证明你做的系统是高性能的?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/18 如何从架构师角度回答怎么应对千万级流量的问题?.md.html">18 如何从架构师角度回答怎么应对千万级流量的问题?</a>
</li>
<li>
<a href="/专栏/架构设计面试精讲/19 彩蛋 互联网架构设计面试,你需要掌握的知识体系.md.html">19 彩蛋 互联网架构设计面试,你需要掌握的知识体系</a>
</li>
<li>
<a class="current-tab" href="/专栏/架构设计面试精讲/结束语 程序员的道、术、势.md.html">结束语 程序员的道、术、势</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>结束语 程序员的道、术、势</h1>
<p>时间如白驹过隙,经过两个多月的课程更新,到今天,咱们的课程也就正式结束了。</p>
<p>在更新课程的过程中,我看了很多同学的留言,有积极提问题的,比如 blossom、徐力辉同学等也有分享自己方案的比如 coder、Reiser同学。很开心你们能在课程中有所收获。</p>
<p>当然了,在这个过程中我也发现了一个很明显的问题,那就是:作为技术人员,很容易在学习的过程中,纠结于具体的形式(比如案例、代码)。<strong>在我看来,相比于形式,思维过程最为重要。</strong> 比如我是怎么思考到某个点?有哪些合理或者不合理的地方?哪些能变成你自己的?哪些你只是看个热闹?</p>
<p>你只有真正思考、转化、并积累,能力才能得到提升。</p>
<h3>关于结束语</h3>
<p>结束语我想了很久,希望能在最后用微薄的能力来帮你深入理解技术人员的职业规划和发展:不仅要关注专业技术(术),还要有自己的分析能力(道),并且要懂得顺势而为(势)。</p>
<p>举个例子,几年前,架构师 A 空降到某互联网大厂做某个系统的技术负责人,当时团队有 5 个核心研发,他们对于 A 的态度有抵触、有观望、有站队,还有左右摇摆。总之,他们表现出了职场老油条各种该有的表现。</p>
<p>那么如果你是架构师兼技术负责人该怎么驾驭团队呢A 只做了这几个工作:</p>
<ol>
<li><strong>立规矩</strong>:找所有研发谈话,明确告知他们做事的准则和底线,任何人不可以越红线半步。</li>
<li><strong>建系统</strong>:推进新系统的建设,招聘新人,培养自己的人,并让老人维护老系统,确保新系统在建设的过程中,老系统不出问题,保证业务的正常运行。</li>
<li><strong>定节奏</strong>:让团队按照新的节奏做事儿,加班制度、值班制度,打破原有的工作节奏,整体提速。</li>
</ol>
<p>一个季度过后A 带出了一个富有激情和战斗力的团队,而老团队的人有的改变,也有的离开。</p>
<p>你可能会问,这个故事和“道术势”有什么关系?这不就是一个技术管理人应该具备的素质吗?</p>
<p>并不是,很多事情你看似简单,但其中会有很多思考(认知层)、执行(技术层)和借势(战略层)的操作,不是每一个人都能做好的。</p>
<p>那当你看完这个故事,有没有思考这样几个问题呢?</p>
<ul>
<li>为什么 A 重新“立规矩”就能立下来?</li>
<li>为什么 A 说推进“新系统”就能获得老板的同意?</li>
<li>为什么 A 说重新“定节奏”就能得到团队的支持?</li>
</ul>
<p><strong>我就把这三个问题当作这一讲的思考题,欢迎你在留言区发表自己的想法,我们再一起讨论。</strong></p>
<p>接着说回来作为技术人员的你一定不要高估辛苦工作的作用低估判断力的价值。举个不恰当的例子CEO 一年看起来什么都没做,但他一个判断就可能让整个公司的业务走向巅峰或者没落。</p>
<p>讲了这么多,我想给你一些职场建议。</p>
<h3>送给老人的四条建议</h3>
<ul>
<li><strong>思考</strong></li>
</ul>
<p>你要有敏感的思考能力(这里用的是敏感,不是敏捷或敏锐)。因为对于同样一个问题,每个人都有自己的理解方式,不同人由于学历、阅历、经历的不同,对问题的理解深度也会有所不同,所以不是所有人天生就能有敏锐的视角,这个很正常。</p>
<p>但我希望你的思维是敏感的,通过敏感驱动思考,通过思考驱动学习和总结,直至敏锐。这确实需要大量的练习,它也是一个潜移默化的过程,最终你会因为这个习惯受益一生。</p>
<ul>
<li><strong>表达</strong></li>
</ul>
<p>你要有良好的表达能力,无论是和同事还是领导之间的沟通,这里的沟通并不是指会说话,而是会表达、敢表达、表达准确。</p>
<p>有一点你要注意,表达不是指口才好,而是建立在你充分思考基础之上的分析,而我建议你多学习一下结构化思维,比如《金字塔原理》。相信你会发现表达、汇报、甚至 PPT 功底都会有所提升。</p>
<ul>
<li><strong>惊艳</strong></li>
</ul>
<p>这一点其实是我对自己的要求,我会暗示自己,当作一件很有价值的事情时,评估的方式就是要惊艳到自己。</p>
<p>因为只有惊艳到自己,你做的事情才会超出别人的预期,超出领导对你的期望。领导要的可能是 1你要尽力做到 1.2,甚至 1.5,因为 1 谁都能做到,而超出的 0.2 / 0.5 就是你与其他人拉开的差距。<strong>事事有回应,件件有着落,回应和着落都要超出预期。</strong> 千万不要当职场老油条,因为懒惰会变成习惯,最终会影响你的判断力。</p>
<ul>
<li><strong>认知</strong></li>
</ul>
<p>工作几年的职场老人,一定要对“地位、格局、方法论、手段”,这些看似很空的词有明确的认知,你要让这些极空的词儿变得很具体。举个例子,比如一道面试题“什么是架构设计?”,作为一名合格的职场技术人,至少要有以下的认知。</p>
<ol>
<li>和一面解释:架构就是系统设计,比我在做 A 项目时,考虑到问题 X我的解决办法是 Y。</li>
<li>和二面解释:架构就是业务发展中将系统变得有序,比如架构设计就是合理的组织系统、模块、组件,让它们更加有序,为的是让系统有能力快速响应(需求/用户/市场)变化。</li>
<li>和部门总监解释:架构即管理</li>
</ol>
<h3>送给新人的四条建议</h3>
<p>对于职场新人,我也有几条建议送给你。</p>
<ul>
<li>要有计划,有积累:在寻求公司价值的同时,要对自己个人未来的价值有追求和计划。</li>
<li>学习一些时间管理四象限:重视重要不紧急的事情,新人不要觉得时间多就随意挥霍,你的价值才能决定你的圈子和你的人脉。</li>
<li>要自己定位自己:不要让别人或你的上级定位你,虽然屁股决定脑袋,但你对自己的定位会决定你屁股的位置。</li>
<li>要善于归纳总结和思考:这会让你和其他人拉开差距。</li>
</ul>
<p>讲到这儿,我想送你一句话:作为技术人,要在职业发展过程中,让自己体会到这样的三个阶段,“做下不做上”“做下也做上”“做上不做下”,相信在看完今天的内容,你应该会对这几句话有新的感悟。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/架构设计面试精讲/19 彩蛋 互联网架构设计面试,你需要掌握的知识体系.md.html">上一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7099792ce8b43cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>