作为一个程序员,一直在看CSDN。学了很多,看了很多,但是一直都没有发过自己的博客。CSDN教会了我很多,从大学在西电开始,大家一起做lab,卡着时间写程序,到现在我身在国外,看着一个一个due。感觉自己经历了很多,学到了很多。
一开始从来没想过,做程序员写代码,还需要记录很多东西。因为不管是C,C++,Java。 总感觉会了的东西就成为了自己的一部分,不会忘记,所以没必要记录,很多大佬在CSDN记录也只不过是为了记录自己的学习过程,授之以渔,是给别人看的。
但是自从出国以后,我感觉不是这样的,我莫名感觉自己的学习需要记录,不是为了让别人看到我写的东西有多么厉害。只是为了记录自己的思维,很多思想的火花就是一瞬间的,错过了就是错过了。 写代码也不是写的东西满足需求就是好代码。时间复杂度,空间复杂度,健壮性,易读性这些都非常重要。
我研究生期间接触了很多functional programming language。编程之美这个词我真的是从functional programming language 之中学到的。简简单单的3行,可以执行的功能非常强大。我从来没有想到代码可以写到这样的地步。回想自己之前写的代码,固然满足需求,也没有什么非常拖沓的地方。但是,根本无法跟这样简介的代码相比。将自己的思考结晶浓缩精简到极致,从寥寥数行的代码中,看到你整个的思维过程,这大概就是编程之美吧。
我作为一个偏向full stack 的工程师,从Java 到Javascript,这两门对我影响最深刻的语言。还记得大学上Java课的时候我使用java写一个Socket通信的并发聊天室。费尽心思,写出来的代码只能说勉强满足需求。我自己对于并发的了解很少,知道工作之后第一次写并发才知道其实自己一直以来对并发的理解并不对。我反思一下,这是因为我的知识网络结果很不完善。我总喜欢用木桶效应来看待自己对于知识的掌握,一个桶能装多少水只取决于最短的那个木板能装多少水。回想大学的时候,我总是沉迷于Java的语法细节,忽略了很多东西。对于封装多态,面向对象的种种都是似是而非。学习Java应该从面向对象将其,而非如何实现一个Helloworld或者更复杂的东西。只有用面向对象的视角看Java,才算是Java入门。
后来我又接触Javascript,第一次只是因为使用javaweb,使用Jquery,javascript是必须会的技能,所以开始看Javascript,我一开始真的以为这只是一个脚本语言,并不能称之为一个编程语言,更不知还有nodejs,甚至reactjs angularjs这些。我开始只是感觉这语言没有那么多条条框框,真的很方便。但是我并没有深究,我只是为了完成项目,为了使用而使用。所以说人还是要多读书,functional language无疑是非常重要且深刻的研究方向。我学习了Ocaml,我为这个语言的简洁和强大的功能感到震惊。世界在飞速进步,我们不能固步自封,努力跟上大家的步伐才,不然就会被时代淘汰。Java 12中已经有了coroutine即协程的概念,这跟Golang中的Fiber很像,传统的单线程加上异步回调已经跟不上时代了。需要学习的东西太多,如果不记录,怎么能记录下思维的过程。每次回想都会花费大量的时间,这无疑是巨大的弊端,掌握的东西越多,越需要记录。从我们原来思想的轨迹出发,试着改换不同的路线,才会有新的世界产生。Java并不代表着繁复,Java也可以写到非常简洁。
今日写下我CSDN的第一个博客,欠CSDN很多,包括这篇博客都是拖了很久才抽出时间写的。世界很大,时间太少。作为一个程序员,我何日才能成为一个有思想有深度的工程师呢。