输出.1
一旦某人开始高谈阔论就要小心了,它在为自己的无能找借口。我从不觉得对着国际形势指点江山,挥斥方琼的三和大神和在镜头前一副无限不屑态度侃侃而言的三百斤教授有什么本质的区别,因为它们做的事在底层逻辑上都是为了得到外行的认同,去改变它人的认知。
客观事实并不会因此有任何变化。
事实上我现在做的,和我要做的也是一样的事。
我释然了,我的进厂大概是命运使然。作为第一批接触移动互联网的人,初中的时候我学会了刷钻,刷机,免流,内存修改,还用手机作为IDE开发了第一个安卓app——一个解一元二次方程的软件。我觉得自己很聪明,自己比周围的所有人都聪明,至少只有班上最聪明的人才能和我交流编程。
这样聪明的我知道了,原来世界上有个东西叫“青少年信息学奥林匹克竞赛”,力扣也有类似的比赛,起初以为是周赛加强版,然后泡了一杯茶做了一天没做出一道简单题。
曾经还以为一个木函的开发者是什么天才,后来发现只是调用API原来我也可以,现在发现那个“我也可以”的想法和信竞职业选手相比,几乎低了一个次元。
我也以为自己逻辑思维很好,直到需要定义状态,需要证明可以贪心……我发现我的逻辑思维几乎为0。大概是这样,周围都是0.004,我是0.04,所以我觉得我很强,可力扣人均0.5甚至有的0.99,我四舍五入就是0了。
大概CF人均1.2吧,我不是很懂。
环境是这样。我也从小就很喜欢计算机,但是只在每周一节的微机课才能碰到,而且就算家里有了电脑大概也只是多了几个DNF搬砖号。
退一万步,回到根本的问题。
对于软件开发而言,算法和数据结构的意义在哪?我没有学过任何算法,冒泡排序都不会,可我还是独立开发了很多软件。
提高软件运行效率的话,最多的手段是多线程,而非算法。
多数情况下,软件开发中设计模式的重要性远远大于算法,设计模式和算法正好相对,它提升的是人的效率,而这和钱是直接挂钩的。
像HashMap,Treeset这种底层库,确实用到了诸如红黑树之类的结构,可就算我不知道这一点也不影响我的使用,屏蔽实现细节本身就是面相对象的核心思想。
像Redis这种软件,用到了跳表这种数据结构,但是又有谁会,并且有能力,有动机造这种级别的轮子呢。
结论就是,实际开发中算法几乎一无是处。我们多数人需要解决的问题,都不至于用到算法,也不至于用算法来造新的轮子。
但这一切并不是毫无意义的。我写过一个分割文件的软件,第一个分片的前几个字节存储了下一个分片的信息,下一个分片同理。
这其实就是链表的思想,尽管我没有用过链表,但第一时间还是这样想了。
于我而言事情就很清晰了。我喜欢设计模式是因为这里面包含了诸如奥卡姆剃刀一类的哲学思想,这种去除重复,解除耦合的感觉很爽。
我以为算法更接近数学,但现在我发现算法也是一种思想。只不过它针对的问题更加广泛,更加底层,但这绝不是无用的。
我瞎猜的,输入框下面的自动提示,应该有用到字典树,如果让我来实现就用字典树……当然更大的可能是直接调用了startWith,不过startWith可能就是字典树实现的?应该不至于,需要太多额外内存了……
除此以外,我感觉算法训练让我理解问题的能力提升了很多,不仅是编程,这对于我思考任何抽象的问题都是有帮助的。
遇到一个未知问题除了睡大觉,还有了一些思考的底气。