缘起一位朋友对于学习编程的困惑,笔者也对自己这些年的编程经验做一些总结。
朋友说到自己最近在看《http权威指南》但是全都是概念性的知识,看着就困,问我是如何学习的。
我说,看这类说我也会睡着。我也非科班出身,只是在大学的时候出于对朋友的帮助需要在网上爬取些信息,然后就学习了一下 VB 这门语言,做了个简单的爬虫。算是误打误撞干起了编程这个行当。
毕业后去了一家培训机构,学习的是C++, 反而做PHP 到现在有三年了,C++早已忘干净。
自己最多算是一个熟练的工人,拼凑一些代码,写一些功能,跑起来,没有bug。从业少许几年,比刚毕业的大学生有少许经验,离经验丰富者尚缺许多内力。
做过外包,发现与不懂技术的客户沟通费力在,他们并不懂技术上如何实现或者实现的难易程度,却总爱以自己的理解来告诉技术人员如何来做。客户以为就差一个写代码的人了, 而这个写代码的人仿佛只是需要把自己说的人话翻译成计算机听的懂的代码而已。
除去编程的语言不谈,经验丰富与经验尚且者的区别除了在写代码的速度,更重要的是对代码的架构能力。
如果只是将功能拼凑出来,对于大多数程序员并非难事。难的就在,代码的可扩展性,如果你写的代码,在以后的扩展中需要重新修改,那么就是不可扩展的。
很多外包公司采用的是20%老手80%新手的人员结构,新手可能为了快速完成功能,就会存在很多硬编码,导致项目后期维护难,出现bug也无法调试。
在谈谈解决问题的能力,在实际的工作中必然存在很多超过我们现有能力的问题需要解决。
1、语言方面,比如php并不适合在多线程的模式或者对性能要求较高的业务场景。笔者曾经接触过多个语言的项目,php做接口 ,nodejs做通信服务,lua处理高并发场景。只能硬着头皮上,边学边改。这里了的学习过程有若干经验可以谈谈。
在开始解决问题之前我需要有哪些基础知识做准备。比如,在需要修改lua项目的代码,我首先需要对lua这么语言有一些了解, 那么我需要要知道 lua有哪些数据结构,一些基本的语法形式是怎样的。确定了这些目标就去找资料,做笔记,写测试代码等等。
确定技术方案,一个问题没有最优的方案,只有当下最优方案。可能由于项目进度,自身能力,资源问题等等,综合多项因素考虑,找到一个当前最优方案才是上策。
2、还是回到基础知识。比如 http原理,tcp/ip通信原理, 计算机组成原理等等,这些看似无用,实则有用的知识,更如内功一般,没有具体的招式,弄明白原理性的东西对理解编程的根本有着极大的帮助。
谷歌 还是 百度?
刚毕业的时候一直是用百度,毕业一年之后,用谷歌多一些,很多问题谷歌的搜索结果要比百度精准一些。
百度和谷歌 是两个观察这个世界不同的角度,谷歌更加透明,视野更加宽广。透过不同的角度观察到的世界自然不同,所理解的世界也不一样。