技术总结和补充

技术总结

在和辰光师兄共事这么久后,深感自己在技术外的眼界(诸如产品、商业模式甚至更广的看法)和收获今非昔比。但是,对于追求实效和本质的我来说,技术的本质不能忘。若这些日子以来,只是富士康式地劳动,而不去反思技术,便丧失了实习的大部分意义。因此,尽管web编程,php后台,前端设计这些我以后可能用不上,但是开发思想是共通的,这里总结写收获在下面,希望日后再翻起,会觉得有所帮助。

关于调试技巧

开发和调试一定是共存的。因为大家的运气不会好到一次通过。适当的调试技巧有助于更快地完成需求(即设计的功能)。web编程的调试较有IDE环境的调试要更困难些,因为它project的概念并不明显,且web编程是多种语言的综合。包括php,asp等后台技术,html,javascript,css等前端技术。在没有编程环境下的调试,web也有它自己的style.

工具

浏览器的开发者工具是调试的利器。里面提供的element,network,sources,console等功能可以在前、后端给开发者反馈。以下就我的实践分别介绍之。

  • Element里可以看到网页源代码,各标签的格式。这里主要完成:1. 对css或是class样式设计进行反馈,开发者可以实时改变样式,所见即所得。觉得合适后,直接在后台照抄Element里的设置即可。2.观察有无标签错位或是id,class有误的情况,这个是html代码不能直接给你答案的。综上,前端应用较多
  • Network里可以看到页面呈现过程中所接受的文件。这个对于后台尤其是ajax开发则来说是极其重要的。这里有几点可以注意的:1.接受到的究竟是哪些文件,有需要的文件没有接收到么;2.点击文件后看到的内容是不是想要的,能不能反映问题。之所以说ajax很需要它。因为普适的var_dump大法在这里只有借用Network才能看到结果。
  • Sources主要用在对代码尤其是js代码段进行带断点的调试,alert大法固然好用,复杂的循环或选择结构存在时,断点会让你方便许多
  • Console也是前端大杀器。主要用于js调试。1.它能显示js error,这些会让js实效,但是它在页面是绝不会呈现出来的。2.能直接通过cli的方式检测js语句是否正确,磨刀不误砍柴工,这能让你能提高你写js时的成功率。
  • 剩下的就是Resources最常用,主要是因为它的记录cookie和session的功用。

方法

网页的呈现一般在编写完代码之后,除了浏览器的开发者工具外,php和js也有类似于printf,cout大法这样的调试方法。(说到这,顺便吐槽一句,IE的F12经常崩溃,chrome的Ctrl+Alt+I就从未遇到过这样的问题。且chrome的还有测试移动端甚至网速的定制,很对我胃口)php里最常用的就是var_dump()+die,它比printf强大的地方在于,它能把变量的详细情况呈现出来,谁用谁知道。js我没有研究过,但是alert()+return false(后一部分可以不要)已经很够用了。

思路

1.当程序原理上正确无误时,所有问题总会有原因。

2.二分法在猜测上总是效率最高的,优先将断点设置在段的中间位置。一步步寻找,答案就出来了。

关于常见问题

错误是web编程里的家常便饭(其他编程也是如此)。但实际上,很多错误的起因却是一样的。这里列举一些常见问题的原因。

  • 不匹配问题。这类问题包括大括号不匹配(很常见),标签不匹配,特殊语句不匹配。页面乱码或错得离谱时,很可能就是它导致的。
  • 有多余的无意义字母夹杂。这类问题包括夹杂在关键字里,夹杂在标签里,夹杂在语句里,夹杂在变量里甚至夹杂在空白处。第一、二、四种情况会报错xxx未定义,第三、五种情况则和具体位置有关。因为web编程多半使用vim远程完成,快捷命令极多的vim会让这种情况较为常见。
  • 没有预防特殊情况。包括空值或者负值等临界情况。这类问题比较隐蔽,一般不会出现,但是出现就可能导致重要问题。不过,比较好的是,加上检验语句还是不费功夫的。
  • 缺少空格。看起来可笑,实际却很常见。尤其在sql语句的处理上最甚。因为后台的sql基本上都是拼接而成的。所以字符串连接时若缺少了空格就会报sql错误。暴露数据库是很危险的。其他的,若html标签的属性间忘了加空格,属性值就会不起效果。
  • 误删或错误字符。这个也很常见。短的包括尖括号导致失配,长的包括语句段。不过好处在于,vim的u命令是很好用的。实在不行,还有git一直在监控。
  • 。。。。。。
    一般的错误问题都不会太大,多半是马虎粗心导致,掌握好上面说的调试方法,还是比较容易发现并修复的。

关于对vim和git的理解

因为需要在服务器上做操作,我学会了vim,并爱上了它。因为团队开发需要对项目的版本进行管理,我又学会了git,并爱上了它。它俩有个共同点,就是注重效率和轻便,但是功能强大。以下,分别谈点自己的认识。

从vim开始。vim不是编译器,更不是IDE,它只是个文本编辑器。但是配合了插件的vim使用起来和IDE一样顺手,甚至更方便。vim的特点很明显:1.纯命令行操作,鼠标可以扔掉了;2.极多的快捷键,若能熟练掌握,会相当方便。第二点是vim上手难的原因,但也是它厉害的原因。删除、选定、查询、替换等复杂的功能,vim几乎都能一键完成。我现在正在使用的vim配合了cscope.nerdtree,ctag。cscope可以寻找变量或函数的定义,nerdtree可以切换工作目录,ctag可以查看变量,函数列表,通过部分文字在工作环境下查询文件。这让代码的编写很是轻松。另外,vim的fold,补全等功能和配色也让它在快捷的同时达到了IDE的效果。桌面环境很吃资源,vim的存在让web程序员们能愉快地编程。

git是种习惯,而不只是工具。git的本地commit和鼓励分支的特点不止影响了技术。文档尤其是编程格外需要数据的安全性和可恢复性。git这个版本控制工具让程序员们可以无后顾之忧地修改文件,并且让团队间的合作变得简单可行。因为有rebase,git的本地提交的弊端被很好弥补了,多次细致的提交能让代码改变更易阅读;另外,由于git存储文件的思想和指针很类似,因此它鼓励分支并不会加重自己的负担,从而让项目开发限制更小。

对于技术方面的整理就先到这么多,有些积累说得清,有些积累说不清,说得清的我尽量写在这里,说不清的希望也当成为习惯留在脑海。

补充:商业模式

之前和辰光师兄交流时谈到的商业模式难以抄袭的问题,忘记记录下来,今日偶然想到,仍觉很有道理。这里补充记录下我的理解。

互联网产品的同质性很严重,越来越难难找到独一无二的产品。因为,只要有产品出现,简单的复制技术,就可很快的推出相仿的山寨版。阿里、腾讯、百度就可如此,技术的复制是很快的,流量和用户习惯又由他们把握。所以,这个年代,即使互联网市场风生水起,光靠点子进行互联网创业,最好的归宿也只有被BAT三家收购,卖个好价钱。这自然是创业者不想见到的。既然技术的抄袭难以避免,为何美团和饿了么仍然活得好好的,滴滴和快的也能共存,因为商业模式是抄不了的。

我们不妨对比一下,技术的抄袭抄过去的就可以了,我雇两倍的人、出两倍的价钱挖人才,就肯定能在同样时间做出更好的作品。商业模式的抄袭抄过去的一定不管用,因为,你只能看到竞争对手过去的规划,而不能看到他将来的举动。所以,这种抄袭是不靠谱的,只能跟着原创者的屁股后面走。正因此,做产品不只是技术问题,好的商业模式规划能让产品升华。

推而广之,这是否能应用到其他方面呢。总结起来就是,你很难做第二个谁谁谁。正是因为你猜不透他下一步要做什么,上一步在以后的规划中起着什么作用。这也从另一方面体现出实现规划的重要性。