个人经历

  任何心得写出来都需要个人经历,否则凭空想象真想不出来,然而有趣的是笔者这篇感悟并不是在工作中得出来的,而是在一个和软件开发完全不相干的领域中得到的灵感,昨晚EDG和TES鏖战五局,尽管最终EDG还是没能战胜自己的心魔TES,为什么,不得不说选手的战术执行得很差,但是EDG深厚的战术储备仍然让TES在比赛结束后心有余悸。笔者是一个电子竞技迷,曾经一度也幻想过当电竞选手,当然笔者这个年龄不可能再去打电子竞技,所以只好跑来和大家抢饭吃了。

  今年MSI关注LOL赛事的同学们我想应该不用多说,我们就看坚守到最后的三支队伍,就会发现最后这个结局并不出人意料,LCK赛区传奇的队伍T1,阵容是去年的世界赛亚军,然而在今年的MSI中,却先后败给了LPL的JDG和BLG,只能遗憾退场,从比分上来看如果说T1对上JDG是打得满头大汗,那打BLG就明显显得战力不够。

  为什么这样的结局,除开选手的个人发挥,另一个原因就是因为今年T1的战术储备实在是太少,只要ban掉Faker的奎桑提,基本上就赢了一半。在JDG打出了T1的压箱底阵容后,BLG只需要照猫画虎,就轻松地送走了T1,同样的道理,先后战胜了两支LCK的队伍的BLG最后还是没能打赢JDG,原因何在?其中一个原因也是战术储备的问题,只要看决赛的第一把就知道了,JDG的战术储备明显占优势,手里还有泰坦打野的阵容。

  大家发现笔者今天要讲的是什么了吗,是的那就是:战术储备

技术实战

  如果说有同学是一整个系列的博客看到这的话一定会奇怪,笔者之前教大家用搭积木的思维去做项目,这会儿又提到战术储备,是不是精神分裂,当然不是,这两个东西并不矛盾。

  我拿一个和积木非常相似的东西来给大家做个比喻,七巧板大家肯定都不陌生,如果现在大家去参加七巧板比赛

  比方说我只是要你拼出一条鱼,那肯定难不倒很多同学,但是如果我后面加要求,这条鱼不能太胖,或者尾巴不能太大。这个时候是不是就考验你平时的有没有拿着七巧板各种玩的经验啦。

  那么放回到编程中其实也一样,事实上给你足够的时间和空间,你可以用暴力算法解决世界上所有的问题,但是实际中用户肯定不会那么宽容,他一定要你做出来的东西火力又猛又轻巧。所以,这就解释了很多时候暴力算法是一个可行的解决方案,但并不是一个合适的解决方案

  对于很多经验不足的同学,上来肯定无师自通暴力算法,但是相信同学们在刷算法题的时候也会有所感受,用暴力算法往往只能算出来一部分结果。

  所以遇到真正解决实际问题的时候,就考验你平时有没有足够的经验积累,从中选出最合适的方法来解决当前的问题,也就是我所说的战术储备问题

  在笔者有限的开发经验中,笔者发现尽管编程语言的知识很庞大,但是在实际开发中,用到的所谓的高大上的知识并不多,大部分用到的技能都还是停留在基础知识部分。有的同学肯定又要问,难道只有基础知识就可以做出大量的战术储备了吗,当然可以,同学们知道七巧板可以拼出来的图形有多少种嘛,据说有1600多种,所以同学们试想一下,哪怕你只学一门编程语言的基础知识,也能整理出一本小册子,也够你组合半天了,这还没算上你学的算法思想,数据结构等等,一个程序中也从来没说过只能有一种算法或者数据结构

  顺带也给同学们解释一下,为什么很多开发岗位要求三年工作经验,原因很简单嘛,三年他的战术储备经验肯定是到了一定地步的。很多同学可能理论学的很多,甚至有的同学一本书都啃了好几遍,但是走到实际开发仍然显得比较苦手,原因很简单,你手里抱着一堆零件,没有组合经验,那只能是看上去像学渣文具多。

  有的同学可能盲目地把实战和做项目画等号,事实上这个说法是有问题的,因为做项目只是把功能实现了,但是并不一定你用的是最合适的方法实现了功能。就算你想把实战和做项目画等号,你也得学着多去重构代码,那才叫实战。但是,我想有点经验的同学都知道,重构的代价有时候很大,甚至会把整个项目结构都破坏掉。所以,笔者个人是不建议直接把做项目和实战画等号的。

理论积累

  如果说同学们走到上述这一步,那证明同学们已经走到了入门阶段。那么是不是说,我只需要学基础,后面的那些高端知识看一看就行了呢。当然不是,俗话说巧妇难为无米之炊,笔者拿七巧板给大家只是做个比喻,基础知识到底能组合出多少东西笔者也不知道,但是肯定只能覆盖一小部分。如果真的可以解决全部问题,后面那些知识点就没有必要存在了。

  大家终究还是要搞清楚理论学习和技术实战的目的,技术实战的目的笔者在先前也说明了,是为了战术储备。那么理论学习的目的是什么,就是原始积累,要搭积木首先得要有足够的零件,而理论学习的目的就是这个,你手里有足够多的零件,才能组合出无限的精彩。

  所以,笔者也再次提醒大家,离开了学校也必须要持续学习,否则三板斧终究是走不远的。

  理论积累和技术实战是两个相辅相成的部分,既有区分又有联系,在这里光靠笔者给大家讲终究是停留于表面,大家一定要去学着多实践

项目设计

  笔者在之前一篇博客中也提到了,这个时候积木数量足够了,我们的对积木的了解也已经足够透彻了,现在就到了搭积木的时候,做项目包括模块划分,界面设计,结构优化种种内容,如果说技术实战是战术储备,那么项目设计是什么?战略规划,这就是另一个完全不同的模块。

  战术设计是指在战略规划的基础上,制定具体的行动计划和实施方案,以达到战略目标。类似地,功能开发是在软件设计的基础上,根据具体需求和设计方案,实施具体的功能开发,以实现软件的功能和特性。

  战略规划是指在整体上确定目标和方向,制定长期计划,以实现组织的愿景和使命。类似地,软件设计也需要在整体上确定软件的目标和方向,考虑软件的整体架构和设计原则,以满足用户需求和实现软件的目标。

  事实上战略规划也是可以放入到平时的实战的,想必很多同学都知道我们作为软件工程师后面的一条出路是什么?是的,那就是架构设计师。架构设计师,针对软件整体架构进行设计,而不负责具体的项目开发,因为他做的是战略规划,具体的战术设计,怎么实现功能是交给下面的一线开发人员去做的

  很多同学为什么走不到这个地步,因为一开始就没有注重练习,举一个最简单的例子,笔者做一个图书管理系统和做一个外卖点餐系统,是不是软件的整体结构是有所不同的?因此,平时也一定要注意练习

  笔者之前也在博客中提到了,有时候做个人项目的时候感到非常迷茫,为什么?现在我想大家应该明白了吧,相当于战略规划和战术储备都是临时白手起家的,那可不就得困难重重嘛。

附注

  那么今天就和大家聊到这里,希望笔者可以给大家带来一些帮助,早日克服困难,做出属于自己的独家项目,笔者接下来会更加努力的工作,给大家带来更多的经验分享,希望同学们工作顺利,早日升职加薪、当上总经理、出任CEO、迎娶白富美、走上人生巅峰,想想是不是还有点小激动呢

在黑夜里梦想着光,心中覆盖悲伤,在悲伤里忍受孤独,空守一丝温暖。我的泪水是无底深海,对你的爱已无言,相信无尽的力量,那是真爱永在。我的信仰是无底深海,澎湃着心中火焰,燃烧无尽的力量,那是忠诚永在。