软件随笔

(一篇草稿)

“偏瘫”的工程师

越来越觉得,”不会写前端”就是阻碍自己的一个瓶颈。
社会岗位的分工有其合理性,但就个人的提升而言,前后端划分就如同高中的文理分科一样,把很多人都变成了只会单条腿行走的“偏瘫”。在这种岗位划分下,很多人就会心安理得地绕过问题:”这属于前端的问题,交给前端”。其实这都是自我设限。
而实际上我们要构建的肯定是整个系统,怎么可能不遇到前端/后端/devops上的问题呢?所以,工程师必定是全栈的。
往远了说——什么是“工程师”呢?英语意思更明显。工程师的英文是Engineer, 即Engine-er。可见,工程师应是业务的引擎Engine。引擎的作用是为系统提供动力,重要性可见一斑。
一个同时会前端和后端人对一个系统的“掌握感”和只会前端/后端的人是不一样的。
如果你碰巧有一些心血来潮的想法想要实现,大概率这个想法的实现既需要前端又需要后端吧。
有一句名言,不知是孔子/鲁迅/莫言/马克吐温这几位中哪位老人家说的了:种一棵树,最好的时间是10年前,其次是现在。


上手前端

现在是学习前端的好时候:

  • 2020年9月, Vue.js团队官宣Vue3.0发布,主要升级包括Composition Api和对Typescript的更好支持。
    之前简单了解了现在前端最流行的两个框架:React vs Vue. Vue为前端新手提供了更低的上手门槛。同时我个人也不喜欢React那种函数式的风格,总觉得有时候违反直觉不好理解,也听到了同事对于React状态管理的吐槽。
    前端框架/库眼花缭乱,这一方面是好事,代表着社区的旺盛生命力,另一方面却也让普通的开发者面临”选择困难症“,甚至要理解不同的”心智模型“——这是我在看React各种状态管理库对比时看到的一个词语。
    Vue生态为我们提供了一个质量上乘的选择, 就像茴香豆的茴字有七种写法,而我只需要会一种、能出活就行了。

  • CSS是前端学习的半壁江山。前端的核心是数据的展示和交互,这和后端注重数据的存储和计算是不一样的。现在,Flexbox在css布局方面已经成为主流,这意味着现在学习css可以很大程度减少以往要学position/float的难度。另外,Tailwindcss等css库也为css开发提供了更丰富的选择。

  • 开发工具的完善,提供了良好的DX(developer experience, 开发者体验)。前端开发的一大好处就是你可以同步看到你的代码结果-即UI。Chrome devtools能让你同时看到UI components, state, events,这比后端的debug要方便。另外还可以选用一些帮助开发的chrome extensions,比如Flex Highlighter, Gridman.

  • 云的发展。 这十几年云服务的发展,让很多组件已经是通过简单配置即可集成使用,乃至开箱即用。

  • 学习资源的丰富和易用。 现在要学习某个开发技术简直太方便了,各种tutorials简直是生怕你看不懂,都是step by step/图文并茂的教。另外,有一些网络视频课程(Mooc)质量似乎不错,挑一个跟着做吧。

  • 现在又有了强大的chatgpt了,有问题你可以随时向它请教。

    做开发写代码毕竟是门手艺,很多东西你跟着做一两遍也就会了,多看几篇教程也就懂了。
    总之,先做几个前端的需求吧——也许做上那么十来个需求你就有上手的感觉了,就有信心进一步深入了。


一份生产力清单

  1. 打造舒适的开发环境
  • Mac, 外接两个4K大屏。
    建议买Macbook Pro. 我现在用的M2 24G还是不太够,尤其是当开了两个ide和chrome打开几十个标签页时。等明年M3出来再考虑升级吧。
    Mac的另一个好处是,你可以两个月不关电脑。
    如果你需要在下班时间充充电,那么配个手提电脑包或背包。
  • 梯子- Chrome 沉浸式翻译插件
  • gpt - 网上免费的很多,推荐一个:phind.com。
  • Alfred. 配置快速搜索和浏览器标签页快速打开。
  • 机械键盘, cherry樱桃轴的就行。 我用了几个月了,真的手感好。
  • 升降桌.
  1. 抗干扰
  • 蓝牙耳机,带主动降噪的。配一点自然声-比如下雨声。 主打的就是一个”沉浸式“、”连贯的“的办公体验

  • 如果容易受周围人的影响,争取个独立办公环境吧,或者工位带挡板也行。 实在没有,可以把屏幕摆在两边

  • 屏蔽类应用。
    作为一个整天面对电脑和网络的人,真的很容易不注意就打开了一个无关的页面链接,然后发现一个小时就过去了。
    时间不是核心资源, 时间+注意力才是核心资源。
    人类与社交巨头的注意力之争注定是苦难的, 各种算法就算你的刺激吸引你的注意力。
    但人与动物的区别是,人会利用工具:
    网络屏蔽类软件,如Freedom , SelfControl . 具体可看徐的这个回答。更理想的状态是:开启白名单模式——只允许方位特定的一小拨网站–而且在设定的时间内无法更改。

  • 减少被小需求打断的次数。 有个报道说,人的大脑能保持专注的时间最多就2小时。经常有这种忽然提过来的小东西需要改,建议尽量往后放。

  1. 两个习惯:一个是”写下来“, 一个是”预习“
  • 所谓“写下来”, 就是当处理一个问题时,把自己的思考过程写下来—这样有了记录。 我用两个软件:Obsidian和Dynalist
  • 预习, 就是每天晚上花15分钟预习一下次日的工作。 不预则废,就像中学时为第二天的课程预习一样, 对第二天get ready,这种感觉是不一样的。 进一步,可以花5分钟对今天的工作进行150字的小结,就像发条微博一样。

我个人的经验是,当你对某个问题有了一点思路时,你想去把思路转变成代码— 这个时候coding的感觉是最好的。
连贯感是宝贵的,讲究一个乘胜追击、趁热打铁,不宜打断。


职场的妙招

  1. Ownership
    意思是:你在把公司的事情当成自己家的一亩三分地在做
    之前看到一句话,深深认同:这行里面最好的员工真的就是有很强的ownership和commitment才行。要是对项目尽心尽力才行。
    技术是其次的,是好员工的必要条件而非充分条件。毕竟,一个员工如果真的有很强的ownership–能把公司的项目当成自家的一亩三分地去做,他自然就会去琢磨怎么把系统做得更好,投入地去解决问题。而绝大多数技术问题没有给时间解决不了的。那一段时间下来他的技术水平就不会差。
    现实是:大多数人都很”聪明“—— 如果就是领工资替人干活的心态,那当然是一样的钱活儿越少越好啦——因为确实有很多属于重复劳动的需求, 干这些活对于公司是产出,但对于自己是消耗,利益不一致嘛。

  2. 软件的初衷:
    我知道一个宝姐的软件,很明显她需要软件方面,包括但不限于一个网站,小程序……
    我有时会想:如果这个人就是我的家人,我会怎么做?
    稍微一代入,可能就会发现一种状态:

  • 可能会埋头干
  • 知道我必须解决那些问题,因为除了自己,你没法把问题甩给其他人。我想这就是”承担责任“, 什么问题都是可以解决的,
  • 如果解决不了或者需要帮手, 我就找来比我水平高的人一起解决,我想这就是:”团队协作“,
    说这个的意思在于:owership是很重要的。 换个思维,可能工作感受完全不一样,结果也会是不一样的。
  1. 你从lixinger构建者角度 立马知道哪些重要怎么做, 包括对方系统怎么做。

  2. Shein, 满帮—人家一问就知道你没玩过。

  3. 要活干,交给我?
    好处1: 你在挑战自己。要相信这行真的没啥问题是给时间还理解不了,解决不了的。
    好处2: 哪怕不能按时完成, 由于沉没成本,领导大概率会继续让你做。
    好处3: 你成了承担责任的那一个。

  4. NPT
    但是还有一个问题:很多活确实是重复性的,而且永远有一堆TODO。 那么,如何破局呢?
    这类工作,我们叫它 NPT—— Non Promotable Tasks, 屁事. 很多活儿,它本身确实是重复性的、对个人提升没有帮助的。
    举个例子,现在chatgpt这么牛,你有没有考虑过他


值得思考的问题

有些问题, 都想过,单独成段不合适,用片段记录在下

  • 为什么很多知识成为了心理负担?很多东西,比如elasticsearch, mq, k8s,
    Tailwindcss……它们明明是用来解决了我们的一大头疼事情来帮助我们开发的,为什么很多人面对它却不想学?
  • Chatgpt能够做到:输入你的需求,它能输出一段代码实现你的需求,比如一个页面。那么,作为一个写代码的,我似乎也是接收产品方提出的需求,开发对应的功能。
    那么, 我和chatgpt的区别在哪?它的输出速度可比我快多了。我能比chatgpt强在哪?为什么公司花钱雇佣我 而不是用chatgpt?
  • 提出质量高的需求至关重要。一个好的产品经理的作用大于十个程序员。这个论述是指产品有一定自由度和开发性的地方,那种很明确的基本功能除外。 那么,如何发掘/整理出好的需求?即,如何想出对系统的好的、可行的改进?
  • 如果你是以把公司分配的活儿干好的,那么不学前端是自然的,因为公司不会给后端工程师分配前端的问题;如果你是以做好一个系统来思考的,那么不会前端有点说不过去了。
  • 说白了,有很多系统。 自己的domain, 连线法- 自己的结合。 — 。 这是你积累自己的资产的方式, 就像销售一样,人家积累的是什么客户资源。
    自己的积累呢, 不能纯是一点”技术“吧, 举个例子,我在一个咨询行业的公司工作了几年, 或者做企业自动化, 做CRM做几年,可视化。
    找到自己的domain领域。 我们不可能四处出击, 找到domain也就有了自己更明确的方向,自己的domain里做得比别人好,并不困难。
    • 看实难,实至简。其中的道理就是把问题分解:大题目分解成小题目,小题目再分解成steps。
    • 另一点是,以es,redis,nginx这些工具来说,可能10%的文档和最常见的应用场景就够了。
  • 工作绝对不仅仅是技术。工作是为生活服务的。 生活之树常青。
  • 利他是一种很高的理念。
  • 冬暖夏凉?
  • 好的搭档非常重要。团队的实质就是能力的倍乘和互补。

找到自己的领域

引用孟岩的一个观点:个人的核心竞争力是是他独特的个性知识经验组合。这个行业里拥挤着上百万聪明人,彼此之间真正的不同在哪里?不在于你学的是什么技术,学得多深,IQ多少,而在于你身上有别人没有的独特的个性、背景、知识和经验的组合。
我想他的意思类似于“连点成线”(Connecting dots)。
这是技术之外的事情了,但其实非常重要。 如果你很幸运有自己感兴趣的领域/事物,发现自己可以用技术来做点有用的东西,那再好不过;或者,熟悉公司的业务,看看能为公司做些什么。

(作为大学时第一次接触C语言就觉得这玩意真无聊的人, 我动摇过。但我发现程序员其实也有可能达到不错的生活状态。再说了,软件都做不好,我又有什么自信换行能做的比别人好呢。 )

这段话,摘抄自一篇书评:
……近一两年,“工匠精神”一词日渐风靡。人们讨论德国工业4.0,日本千年老店,将这些成就归结于工匠精神。
所谓工匠精神,就是用时光去打磨一件心爱的东西。在这样一个快节奏、碎片化的时代,心无旁骛、专心致志是不容易的,因为总有一件事情令人分心,总有一个意外猝不及防,让人偏离初心,渐行渐远,忘却本来的目标。
此外,工匠精神还意味着,极有可能是在相当长的一段时间里,没有经济收益,也就是不赚钱,甚至以后赚不赚钱,也不确定。因此如果不是出于热爱,就不会坚持,就不可能达到忘我的工匠精神境界。
巴菲特说:“有钱的好处在于,我可以有选择的自由”。20年前读到这句话,神往不已。现在经过多年的努力,当国人不再被贫瘠的经济基础所困,他们内心的工匠精神开始迸发出火焰,为社会增添光彩……

附录:分享几篇文章

产品、代码及投资 — 产品篇, @理杏仁Bing, https://www.lixinger.com/marketing/about-us-product
产品、代码及投资 — 代码篇, @理杏仁Bing, https://www.lixinger.com/marketing/about-us-coding
盘点一下过去一年理杏仁都做了什么, @理杏仁lixinger, https://mp.weixin.qq.com/s/4VU03PcCC_ek0wUqJHEt4g
如果有梦,请一定不要落下, @理杏仁lixinger, https://mp.weixin.qq.com/s/OazrQ77X9VP4TT-YF1TVng
技术路线的选择重要但不具有决定性, @孟岩, 2008, https://mp.weixin.qq.com/s/TQ-ObRLtj9YLnSkYWYDz8w
当我是flomo的工程师时,我在思考些什么, @flomo Light, https://mp.weixin.qq.com/s/5qudRuVQkEaWF-MbzhmRqg


软件随笔
https://www.nanlan.top/build-software-chat/
作者
Jiaheng
发布于
2023年3月20日
许可协议