编程沉思录

原文链接

从一开始对编程一无所知到现在也有好多年了,体会了刚入门时啥也不懂的煎熬期和入门之后快速成长的愉悦期,再到现在到达瓶颈的迷茫期。跟所有行业一样,IT编程从业者也有自己的成长周期,同时相比于其它行业由于知识密集程度比高,软件开发者成长周期更加突出显著。处在迷茫期的我一直在思考,现在限制自己的因素到底是什么,最终发现到现在现在限制进步的不再是具体的知识而是思想认知上的一些东西,这里我把自己总结的一些想法分享给大家。算不上什么真知灼见,只能算是一些思考吧,希望对大家有帮助。

1.开发要有全流程概念

我们一开始开发,可能只是做一个大工程的一部分,比如工程是造航母,而我们的工作是拧螺丝。但是在自己的领域工作久了,我们容易一叶障目不见泰山。当然专注自己的工作没有问题,但是工作的时候我们要有大局观,有一个完整的流程概念。意思就是虽然自己拧的是螺丝,但内心时时刻刻要有一个航母的轮廓,不能在自己从事的细节中迷失了自己。说白了要去了解开发的全流程,明白一个软件从一无所有到最后打包发布的完整流程,是如何实现的。顺便在这个过程中锻炼自己对软件设计的理解。

2.深入深入再深入

程序员都自嘲自己的工作是“搬砖”,很形象,确实,对于大多数程序员从事的工作就是重复的低价值的代码编写工作,和泥瓦匠的砌墙垒砖很像。如何跳出这个怪圈呢,因为随着时间的推移,身体机能的退化,不可能谁都能长期坚持繁重的编码工作,这也就是为什么程序员出现35岁的怪圈。这里我的建议是深入深入在深入,建立自己的技术护城河,深入到一个具体的领域中,靠软件设计、架构、技术领导力以及自己的经验来赚钱,而不是靠自己的体力劳动搬砖来实现。

3.学习过程中的举一反三

有时候确实是这样,很懂简单正确的概念,必须得学习了高深的知识之后才能透彻理解。举一反三,虽说很简单很易懂,但是直到现在我才明白它的重要性。软件开发领域知识更新换代的非常快,有些东西可能都还没学明白又会出现新的知识。这就要求我们在学习的过程中触类旁通,举一反三。当然不止是编程领域,所有的领域都一样。这里举个例子,在学习编程语言的时候,一定不要陷入具体的语法结构中拔不出来,要有类比,有横向对比的意识,通过和其它的语言进行对比来对其进行理解对比的方面可以包括:对内存的操作管理的差异、对并发请求处理的差异、协同作业的差异、网络的特点、运行模式、是否容易测试(异常处理)、语言的独特性(语法糖)。

当然这里只举了一个很简单的例子,还可以联系更多的方面。通过举一反三,多领域对知识进行理解,我们可以扩展自己的认知,从而加深学习的深度。

4.做好价值的判断

在开发和设计的时候我们通常会面临很多技术选择,这时候要求我们了解框架的有缺点、语言开发的便捷性、技术路线的短板和瓶颈。做这些选择的时候考量标准是什么呢?我认为应该考虑的价值有运维人员的价值、开发人员的价值、客户的价值等等。当然具体项目中不同人员的价值权重也不一样,但是通过对这些价值的考量我们可以做出当前最优的决策。

5.程序开发过程中的二八原则

程序员开发过程中符合二八原则,真正优秀的程序员八成的时间是用来做思考和设计的,真正的投入到编写过程中的时间很少也就只占二成左右。软件开发过程中真正重要的工作是设计和思考,因为只有想清楚才能做明白。通过优秀的设计可以极大的提高开发效率。所以在工作的时候一定要认真思考和设计,在没想明白的时候不要盲目的行动。很多时候工作太累,是因为自己思考的太少,导致了过多的无效劳动,浪费了精力。

6.对自己的技术要有规划

我还是强调一点工作是工作,自己的技术成长是自己的技术成长,一定要设计好自己的技术成长。不要在日复一日的忙碌中迷失了自己,工作是工作自己的成长是自己的成长。仰望天空,脚踏实地。

7.凡事不可重复三次

代码重构中有个重要的一环就是剔除重复,同样类比到我们的工作和生活中也一样。做事,一件事情重复到第二次,我们就应该停下来思考,这些事情是不是有什么规律,可不可以通过自动化或者其它的方法来进行回避。反复的桌面操作我们可以通过按键精灵来模拟,复杂的字符串操作我们可以使用正则表达式,相同模式的代码可以通过正则表达式实现,也可以通过Excel来进行编写。

凡事做三遍,就一定要开始思考了,这个事肯定有解决方法。要从中提取出一种的通用的解决方案。这个概念可以延伸到生活中的方方面面;一定要多思考;提高效率解决低效问题,才能腾出更多的时间去解决复杂问题。

8.丰富自己的技术栈

不管是开发语言还是UI框架亦或是开发工具,我们都应多掌握一些,这样开发的时候才能有所选择,有所对比,避免自己掉入某些坑中。同时程序员应该具备快速学习使用新技术的能力。

9.考虑自己的输出

程序员写简历的时候通常会描述自己会什么语言,学习过什么框架,做过什么项目。这些都是表层的,真正的高手输出的是一种能力,一种价值,一个产品,而不是一个简单的功能模块。所以在日常的工作中我们应该挖掘痛点,通过个人努力把遇到的痛点问题,提成一个通用的模板问题,彻底解决这个问题,并把它作为一种能力或者产品进行输出。

10.洞悉软件问题的本质

所有的软件问题归根到底分为三类问题:业务问题、线程和进程问题(时间问题)、内存问题(空间问题)。在大型软件设计中,最复杂的是缓存管理,因为涉及到时间问题和空间问题的交错,需要投入更多的时间和精力。

架构,设计,哲学;

学习东西,第一步是要做知识梳理行的整理,第二步是要做自己理解性的整理。第三步是要举一反三联系社会联系自身,内化成一种闪念。

思考的时候从更高的角度去思考,便可以得出不同的结论,从全局的角度去出发,抓住大势,根据大势去做决断,去思考。

大势是一种概率,而不能百分之百发生。

决定做某一件事情的时候,一定要明确这件事情有什么特殊价值。先看看有没有现成的工具可以做。做事,一定要从一想到二想到更多,使自己做的事情更有通用性,而不能只是解决死的问题。

做事情之前一定要沉下心来进行思考,在没思考好的时候一定不要盲目行动。思考的时候一定要多问自己思考,通过画图或者写文字的方式刺激自己的思考。

潜意识里面不要跟大多数人进行对比,一定要跟自己同等级或者同圈子的人进行比较,激励自己的前进。看看和自己同龄的人都在做什么,自己要不断的学习和进步。

对自己的未来生活要有规划,有憧憬,为自己的生活一定要提前规划好,自己的生活方式自己的决策一定要理性。不能盲目的从众。自己为什么买房一定要清楚,不能为了买房而去买房, 否则将来遇到变化之后会亏很多。

自己的对未来的期许一定要清楚,让孩子生长在什么环境下,生活在什么生活中。周边有什么环境,什么的同学是什么样子的。孩子的学区房,种种方面考虑一套房肯定是不够的。得更加努力的去赚钱,提升自己的技能。

对生活中可能出现的变故一定要有预案。为所有可能遇到的问题,做好准备。一定要对自己未来的规划做好,不能浑浑噩噩的。

一定要想这样对自己有什么帮助,自己已经不再是在那个圈子了,自己要和自己所在的圈子进行比较,进行学习。

不要被网上的新闻所侵染,要对自己的定位明白,理解自己是不同的。

投资的话,投的是一种趋势,一种大概率。

学习知识要建立二维甚至三维的知识框架,要是insert而不是append.要建立知识与知识之间的联系。一个领域之内的知识是二维的,不同领域的知识之间组成了三维,领域与领域之间还有知识的融合。

最简单的方法,就是把学到的知识总结三遍,像看连环画一样,不同的寻找知识与知识之间的联系。慢慢的吃透摸透知识之间的关联。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值