鄙人大学电气自动化专业,非科班出身,对编程了解不深,但是,经过多年学习以及实践,对它又有了一番新的认识,在这里我想把它说一下。
可能适合刚入门或者即将入门的新人。
编程其实就是编写程序,让计算机解决某个问题并得到想要得到的结果。
重要的是只要运行起来,就可以离开人自动运行。
程序(计算机程序),一组指令,一组指示计算机或者其他具有消息处理能力装置每一步动作的指令,通常用某种程序语言编写,运行于某种目标体系结构上。
程序是由语言写出来的,语言分为高级和低级,应对离自然语言的远近,越自然化的语言,自然越高级。
数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。例如 各种类型,视频文本。
是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
一个数据对象可以由若干个数据项组成,例如人,眼耳鼻舌身等属性。
是性质相同的数据元素的集合,是数据的子集。
是相互之间存在一种或多种特定关系的数据元素的集合,分为逻辑结构和物理结构.
逻辑结构:集合,线性,树形,图形。
物理结构:线性,链式
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
所以,我认为就算是最简单的一个指令,也算是算法。
而大部分外人所说的算法,是高深的算法或者值钱的算法或者性能高的算法。
不要对算法想象的特别的高深,这样就不容易深入学习,其实计算机的计算单元只是一个加法计算器就实现了加减乘除。
数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。
算法的操作对象是数据结构。数据结构是算法设计的基础。
两者都是为最终解决问题服务的
所以,编程的本质就在于算法与数据结构的结合。
下面是我自己总结编程的要点。
如果将逻辑和控制有效的分开,那么,代码就变得容易改进和维护。
第一个表达式倾向于数据结构和算法,它是想把这两个拆分,早期都在走这条路。他们认为,如果数据结构设计得好,算法也会变得简单,而且一个好的通用的算法应该可以用在不同的数据结构上。
第二个表达式则想表达,数据结构不复杂,复杂的是算法,也就是我们的业务逻辑是复杂的。我们的算法由两个逻辑组成,一个是真正的业务逻辑,另外一种是控制逻辑。程序中有两种代码,一种是真正的业务逻辑代码,另一种代码是控制我们程序的代码,叫控制代码,这根本不是业务逻辑,业务逻辑不关心这个事情。
所以
程序 = 数据结构 + 控制 + 逻辑

实际上的执行描述应该是这样的。
大部分的语言都是基于操作系统的,当一个语言的程序执行了读取文件的操作,他就会先调用操作系统的读取文件的方法,这个方法由操作系统这个程序提前内置。
操作系统是由内核,文件系统,各种驱动,IO,寄存器,硬盘,网络等等组成,实现了对硬件资源的全面掌控或者说是管理。
而,大部分的软件也是基于对硬件或者对数据的管理。

硬件为执行者
忠实的执行由软件生成的机器码,既机器指令,并有条不紊的执行。
对数据进行各种搬移,并发数据按需放到不定的指定位置。
这个其实是我很早就好奇的一件事情,硬件何时与软件建立了沟通,软件如何与硬件进行了联系,又或,啥时候进入了所谓的Main方法。

这个是嵌入式的汇编启动代码,中间的一部分,写的是,在启动的过程中,指定了要执行的__main函数。
__main函数代码是编译器自动生成的,你无法直接找到。
__main主要做这么两件事:初始化C/C++所需的资源,调用main函数
各种编程语言由编译器或者解释器,生成汇编,再然后生成与当前CPU相匹配的机器码(机器语言),然后由CPU解释为之执行,每一条机器语言对应一条指令集。
总而言之,汇编直接对应指令集。汇编是指令集的简写或者名称形式。
CPU忠实的执行了全部代码给的所有指令集合,并完成了工作。
这就是它的本质,很简单,但是,看书又很枯燥,也许不会有人告诉你,但是,知道了,又感觉那么的简单的事情。
了解和知道整体,才助于有系统化的知识。
碎片的知识是片面的,只有系统化的知识才是整体的,可以让你轻松看到问题的本质,更有效率的处理完事务,也容易让你思考。

我们必当写过一个“操作系统”。
就比如,操作系统里有一个内存管理,我们为了不局限于单体,就出现了Memcached,Redis,等基于内存和硬盘管理的业务型内存管理。
然后,从单体的操作系统,延伸到了,分布式,集群,共用多台计算机资源,分布或共同执行。
所以,操作系统也在从无到有,从单到集中再到分布,合而分之,分而合之。
我曾经面试过一些新人,每个人对问题都有不同的见解,但是,我还是希望有自己的见解,而不是听闻而已。
就比如,windows安全还是linux安全?
稳定的事物必然是趋向于降低变化的,但是,发展,拓展,扩展,都是需要外扩,发展才是硬道理,针对业务的发展,不得不拥抱变化,甚至要主动积极的引入变化,但是,为了保证整体的稳定,又要避免对稳定部分的引入变化,引起整体的震荡。
这种矛盾的局面下,形成了两个极端,一方面要让业务活起来,流动起来,一方面又想让其他核心业务稳定起来,不要影响现有业务。
而这种极端的环境结果,是必然的。
只能针对两种不同的极端情况,对其采纳即可,保持一种平衡。
优秀的语言很多,用的广泛的语言也很多,市场占有率高的语言也有很多,工资高的语言也有很多,但是,真到具体选择的时候,发现还是让人纠结。
入门语言,尽量选择交集,这样,都占有一定的好处,入门之后,还是不要太在意语言本身了,把它当成一种工具,这样,工具多少其实无碍。
毕竟,工具好坏都不太影响你真正成果的产出。
每个人对于一些定论都有各自的见解,但是,我还是希望得有自己的深度思考,就比如,windows安全还是linux安全?,如果尽信网上说的,那就是linux安全,毕竟linux漏洞少。
尽信书,不如无书。
如果我刚毕业,可能会说某某能力很重要,咋的咋的,但是,自己工作多年,所以,也不太好说哪个能力重要,但是,扬长避短,才能让你发展起来。
很多人都会说自己不会啥不会啥,而不会说自己会啥会啥,我想选择另外一边会有不同的人生结果。
按照自然发展规律,以后用汉语(自然语言)来编程指日可待。
这样,各种的AI智能,都是先从理解人类所说的话语的语义开始的,自然语言分析也是一门学科。
勿忘初心,方得始终
为什么人一定要有梦想或者理想,因为如果你想都不想,放到你面前也不会属于你自己。
梦想是一定要有的,万一实现了呢?
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。
我正在查看Ruby日志记录库Logging.logger方法并从sourceatgithub提出问题与这段代码有关:logger=::Logging::Logger.new(name)logger.add_appendersappenderlogger.additive=falseclass我知道类 最佳答案 这实际上删除了方法(当它实际被执行时)。这是确保close不会被调用两次的保障措施。看起来好像有嵌套的“class 关于Ruby元编程问题,我们在StackOverflow上找到一
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
使用Paperclip,我想从这样的URL抓取图像:require'open-uri'user.photo=open(url)问题是我最后得到一个像“open-uri20110915-4852-1o7k5uw”这样的文件名。有什么方法可以更改user.photo上的文件名?作为一个额外的变化,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名就更好了,这样图像就会上传到正确的S3key。像这样:user.photo=open(url),:filename=>URI.parse(url).path 最佳答案
我正在开发一个xcode自动构建系统。在执行一些预构建验证时,我想检查指定的证书文件是否已被撤销。我了解securityverify-cert验证其他证书属性但不验证吊销。我如何检查撤销?我正在用Ruby编写构建系统,但我对任何语言的想法都持开放态度。我阅读了这个答案(Openssl-Howtocheckifacertificateisrevokedornot),但指向底部的链接(DoesOpenSSLautomaticallyhandleCRLs(CertificateRevocationLists)now?)进入的Material对我的目的来说有点过于复杂(用户上传已撤销的证书是一
关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby有很大不同。由于我与ruby之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?