您好、欢迎来到现金彩票网!
当前位置:刘伯温首页 > 图灵完备 >

如何在职系统学习编程?

发布时间:2019-07-28 09:09 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  2016-05-05展开全部一般地说计算机知识分为两类(事实上就我所知的大部分功课学科都是如此),一类是纯工程,一类是纯学术。纯工程讲究的是用起来,特征是分类详细而且子方向之间有门槛,纯学术讲究的是为什么,特征是研究的东西比较抽象而且多半和数学有关系。具体到计算机,纯工程的内容包括:

  应用和工具以及其对应的协议。比如网络应用离不开浏览器和HTML协议;网络管理离不开各种邮件、SSH以及相关的各种协议;安全就离不开认证、证书和对应的NTLM、Kerberos和PKI协议。

  各种算法的证明、可计算性描述。包括那些计算机系出身的半吊子最爱拿来唬人的图灵完备的概念。

  具体领域相关的算法。比如信号处理,用于通信、语音和图形处理。又比如PKI背后的安全模型倚仗的非对称加密和哈希算法,还有编译原理背后的自动机理论。

  当然具体到实践上,我们也能看到有很多工作的要求不是那么泾渭分明地区别学术和应用知识。比如编译和图形方面的开发,本身是工程,但对程序员的学术功底要求非常高。不过我相信这些很可能不是楼主希望关注的东西。

  一边学习语言,一边动手写应用。如今的应用开发环境已经越来越友好,比如Android,由于引入了Java平台,我们不像用C写程序的时代那样时时刻刻注意内存泄漏。虽然质量上刚开始无法保证,但随便做一个小应用装在自己的手机上玩玩开始没问题的。别怕程序难看,一开始很正常。顺便说一句,我个人不推荐从App Store开始,因为它的审核相对较严,而且一开始就要投资,如果不是认真地想做点应用还是算了。

  在从应用入手的过程中掌握基础的软件开发知识。包括但不限于:通用的数据结构(数组、链表、哈希表、二叉树)以及对应的时间和空间复杂度;内存使用的常识(泄漏、垃圾收集,引用计数等),基础的算法(排序、二分查找)。这里的原则是尽量使用程序框架给出的设施,而不是自己写。先把程序做出来,然后在这个基础上用自己写的函数去替换框架的版本,看看自己是不是正确理解了程序。另一个原则是遇到问题力求弄明白,因为这些东西是基础知识,明白了之后到处都可以用。

  对于那些和具体领域相关性明显的应用,我的建议是不求甚解。比如证书的原理,对于应用来说理解证书的签发和认证过程是要点,如果把大把的时间消耗到证明大素数分解的正确性和MD5碰撞的产生率,那就是走偏了。这些内容需要的知识更适合交给数学家解决,而对试图专注应用的人来说,即使明白了这些也不能帮助你更好地使用PKI。

  理解程序性能分析。这个阶段的路子走得对不对很大程度上取决于前一个阶段是不是走偏了。我曾经见过很多半吊子的数学狂(包括很多科班出身的),他们在这个阶段很容易陷入所谓“数学证明决定论”的圈子。也就是不用工具,只凭从书本上看来的算法复杂度来决定软件的优化。这实际上是不对的。正确的方法是借助工具,主要的工具包括调试器(debugger)、代码覆盖(code coverage)和性能分析(profiler),用实验来确定你的软件哪里跑得慢,以及为什么跑得慢。

  尝试手动优化。手动优化的方法很多,首选的做法是在性能分析的基础上选择更高效的算法和数据结构。这个阶段也有它容易走偏的地方,就是很多人津津乐道的“用C改写Java”,或者“用汇编改写C”。特别是后者,如今计算机行业里用汇编的人不多,能搞这个的往往会被人盲目崇拜。但是作为应用来说,这些优化往往是以调试时的复杂度和日后维护的复杂性为代价的。所以如果不是实验的结果表明不做不行,则不要随意进行这样的优化。

  用!用!用!你的软件做得好不好不是证明出来的,而是用出来的。很多时候自己写的程序在写完第一次跑的时候可能啥事也没有,但真的用到用户环境里去就乱七八糟到处开花。首先我们必须正视这一点,即没有人写出来的程序第一次跑就100%不出错(别听信那些所谓的“程序证明”爱好者的胡话,他们未必真的写过一个程序),所以不要害怕。另一方面要重视这一点,遇到问题必须自己调试解决,才能让软件真正做到可用。这个阶段的任务是不要让任何一个程序错误跑掉,坚决抵制所谓“既然这样做不行,那样做就可以了吧”的诱惑,有问题就就地解决,才能真正提高程序的质量。

  以上大概就是写一个小软件的全过程。如果能坚持到这个时候,我相信楼主已经能够很好地把握软件开发的过程了。等到自己软件玩得转了,再可以考虑参加一些开源项目之类的,但那个话题相对较远,以后再说吧。

  我的建议是:首先看官方范例,比如Android的例子在SDK里就有很多,甚至自己有一个记事本小应用。先从这些例子开始。如果遇到不懂的,看SDK,如果不行就上Stackoverflow问问题,或者知乎上也未尝不可。我个人不建议找中文网站。计算机开发的国际语言是英语,英文资料要比中文资料丰富而且准确很多。

  还有一个小建议是勤于记笔记。有些很奇怪的小问题在文档里未必能提到,多记一些个人笔记,随时备忘比较好。

http://sox-populi.com/tulingwanbei/474.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有