代码整洁之道的作品目录
第1章 整洁代码 11.1 要有代码 2 1.2 糟糕的代码 21.3 混乱的代价 31.3.1 华丽新设计 41.3.2 态度 41.3.3 迷题 51.3.4 整洁代码的艺术 51.3.5 什么是整洁代码 61.4 思想流派 101.5 我们是作者 111.6 童子军军规 121.7 前传与原则 12 1.8 小结 121.9 文献 13第2章 有意义的命名 152.1 介绍 152.2 名副其实 162.3 避免误导 172.4 做有意义的区分 182.5 使用读得出来的名称 192.6 使用可搜索的名称 20 2.7 避免使用编码 212.7.1 匈牙利语标记法 212.7.2 成员前缀 212.7.3 接口和实现 222.8 避免思维映射 222.9 类名 232.10 方法名 232.11 别扮可爱 232.12 每个概念对应一个词 242.13 别用双关语 242.14 使用解决方案领域名称 252.15 使用源自所涉问题领域的名称 252.16 添加有意义的语境 252.17 不要添加没用的语境 272.18 最后的话 27第3章 函数 293.1 短小 323.2 只做一件事 333.3 每个函数一个抽象层级 343.4 switch语句 353.5 使用描述性的名称 363.6 函数参数 373.6.1 一元函数的普遍形式 383.6.2 标识参数 383.6.3 二元函数 383.6.4 三元函数 393.6.5 参数对象 393.6.6 参数列表 403.6.7 动词与关键字 403.7 无副作用 403.8 分隔指令与询问 423.9 使用异常替代返回错误码 42 3.9.1 抽离Try/Catch代码块 433.9.2 错误处理就是一件事 443.9.3 Error.java依赖磁铁 443.10 别重复自己 443.11 结构化编程 453.12 如何写出这样的函数 453.13 小结 453.14 SetupTeardownIncluder程序 46 3.15 文献 48第4章 注释 494.1 注释不能美化糟糕的代码 504.2 用代码来阐述 514.3 好注释 514.3.1 法律信息 514.3.2 提供信息的注释 514.3.3 对意图的解释 524.3.4 阐释 53 4.3.5 警示 534.3.6 TODO注释 544.3.7 放大 544.3.8 公共API中的Javadoc 554.4 坏注释 554.4.1 喃喃自语 554.4.2 多余的注释 564.4.3 误导性注释 584.4.4 循规式注释 584.4.5 日志式注释 59 4.4.6 废话注释 594.4.7 可怕的废话 614.4.8 能用函数或变量时就别用注释 624.4.9 位置标记 624.4.10 括号后面的注释 624.4.11 归属与署名 634.4.12 注释掉的代码 634.4.13 HTML注释 644.4.14 非本地信息 644.4.15 信息过多 654.4.16 不明显的联系 65 4.4.17 函数头 664.4.18 非公共代码中的Javadoc 664.4.19 范例 664.5 文献 69第5章 格式 715.1 格式的目的 725.2 垂直格式 725.2.1 向报纸学习 735.2.2 概念间垂直方向上的区隔 73 5.2.3 垂直方向上的靠近 745.2.4 垂直距离 755.2.5 垂直顺序 795.3 横向格式 795.3.1 水平方向上的区隔与靠近 805.3.2 水平对齐 815.3.3 缩进 825.3.4 空范围 845.4 团队规则 845.5 鲍勃大叔的格式规则 85第6章 对象和数据结构 87 6.1 数据抽象 876.2 数据、对象的反对称性 896.3 得墨忒耳律 916.3.1 火车失事 916.3.2 混杂 926.3.3 隐藏结构 926.4 数据传送对象 936.5 小结 94 6.6 文献 94第7章 错误处理 957.1 使用异常而非返回码 967.2 先写Try-Catch-Finally语句 977.3 使用不可控异常 987.4 给出异常发生的环境说明 997.5 依调用者需要定义异常类 997.6 定义常规流程 1007.7 别返回null值 1017.8 别传递null值 1027.9 小结 103 7.10 文献 104第8章 边界 1058.1 使用第三方代码 1068.2 浏览和学习边界 1078.3 学习log4j 1088.4 学习性测试的好处不只是免费 1108.5 使用尚不存在的代码 1108.6 整洁的边界 1118.7 文献 112第9章 单元测试 1139.1 TDD三定律 114 9.2 保持测试整洁 1159.3 整洁的测试 1169.3.1 面向特定领域的测试语言 1189.3.2 双重标准 1199.4 每个测试一个断言 1219.5 F.I.R.S.T. 1229.6 小结 1239.7 文献 124第10章 类 12510.1 类的组织 12610.2 类应该短小 12610.2.1 单一权责原则 12810.2.2 内聚 12910.2.3 保持内聚性就会得到许多短小的类 13010.3 为了修改而组织 13610.4 文献 139第11章 系统 14111.1 如何建造一个城市 14211.2 将系统的构造与使用分开 14211.2.1 分解main 14311.2.2 工厂 14311.2.3 依赖注入 14411.3 扩容 14511.4 Java代理 14811.5 纯Java AOP框架 15011.6 AspectJ的方面 15211.7 测试驱动系统架构 153 11.8 优化决策 15411.9 明智使用添加了可论证价值的标准 15411.10 系统需要领域特定语言 15411.11 小结 15511.12 文献 155第12章 迭进 15712.1 通过迭进设计达到整洁目的 15712.2 简单设计规则1:运行所有测试 158 12.3 简单设计规则2~4:重构 15812.4 不可重复 15912.5 表达力 16112.6 尽可能少的类和方法 16212.7 小结 16212.8 文献 162第13章 并发编程 16313.1 为什么要并发 164 13.2 挑战 16513.3 并发防御原则 16613.3.1 单一权责原则 16613.3.2 推论:限制数据作用域 16613.3.3 推论:使用数据复本 16713.3.4 推论:线程应尽可能地独立 16713.4 了解Java库 16713.5 了解执行模型 16813.5.1 生产者-消费者模型 169 13.5.2 读者-作者模型 16913.5.3 宴席哲学家 16913.6 警惕同步方法之间的依赖 16913.7 保持同步区域微小 17013.8 很难编写正确的关闭代码 17013.9 测试线程代码 17113.9.1 将伪失败看作可能的线程问题 17113.9.2 先使非线程代码可工作 17113.9.3 编写可插拔的线程代码 17213.9.4 编写可调整的线程代码 17213.9.5 运行多于处理器数量的线程 172 13.9.6 在不同平台上运行 17213.9.7 装置试错代码 17313.9.8 硬编码 17313.9.9 自动化 17413.10 小结 17513.11 文献 175第14章 逐步改进 17614.1 Args的实现 177 14.2 Args:草稿 18314.2.1 所以我暂停了 19514.2.2 渐进 19514.3 字符串参数 19714.4 小结 234第15章 JUnit内幕 23515.1 JUnit框架 23615.2 小结 249 第16章 重构SerialDate 25116.1 首先,让它能工作 25216.2 让它做对 25416.3 小结 26616.4 文献 267第17章 味道与启发 26917.1 注释 27017.2 环境 27117.3 函数 27117.4 一般性问题 27217.5 Java 288 17.6 名称 29117.7 测试 29417.8 小结 29517.9 文献 296附录A 并发编程II 297A.1 客户端/服务器的例子 297A.1.1 服务器 297A.1.2 添加线程代码 298 A.1.3 观察服务器端 299A.1.4 小结 301A.2 执行的可能路径 301A.2.1 路径数量 302A.2.2 深入挖掘 303A.2.3 小结 305A.3 了解类库 305A.3.1 Executor框架 305A.3.2 非锁定的解决方案 306A.3.3 非线程安全类 307A.4 方法之间的依赖可能破坏并发代码 308 A.4.1 容忍错误 309A.4.2 基于客户代码的锁定 309A.4.3 基于服务端的锁定 311A.5 提升吞吐量 312A.5.1 单线程条件下的吞吐量 313A.5.2 多线程条件下的吞吐量 313A.6 死锁 314A.6.1 互斥 315A.6.2 上锁及等待 315A.6.3 无抢先机制 315A.6.4 循环等待 315A.6.5 不互斥 316A.6.6 不上锁及等待 316A.6.7 满足抢先机制 317A.6.8 不做循环等待 317A.7 测试多线程代码 317A.8 测试线程代码的工具支持 320A.9 小结 320A.10 教程:完整代码范例 321A.10.1 客户端/服务器非线程代码 321A.10.2 使用线程的客户端/服务器代码 324附录B org.jfree.date.SerialDate 327结束语 389
代码整洁之道的内容简介
软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。《代码整洁之道》提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,这些实践在《代码整洁之道》中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。
《代码整洁之道》epub下载在线阅读,求百度网盘云资源
《代码整洁之道》([美] Robert C. Martin)电子书网盘下载免费在线阅读链接:https://pan.baidu.com/s/1iM-wXXGr5aY4JXApiLPwzg 提取码:9es3书名:代码整洁之道作者:[美] Robert C. Martin译者:韩磊豆瓣评分:8.7出版社:人民邮电出版社出版年份:2020-2页数:387内容简介:软件质量,不但依赖架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。本书提出一种观点:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自实际项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。本书阅读对象为一切有志于改善代码质量的程序员及技术经理。书中介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。作者简介:作者 | Robert C. Martin世界级软件开发大师,设计模式和敏捷开发先驱,敏捷联盟首任主席,C++ Report前主编,被后辈程序员尊称为“Bob大叔”。20世纪70年代初成为职业程序员,后创办Object Mentor公司并任总裁。Martin还是一名多产的作家,至今已发表数百篇文章、论文和博客文章。除本书外,还著有《代码整洁之道:程序员的职业素养》《敏捷软件开发:原则、模式和实践》《UML:Java程序员指南》等。译者 | 韩磊互联网产品与社区运营专家,技术书籍著译者。曾任CSDN及《程序员》杂志副总经理、总编辑,广东二十一世纪传媒新媒体事业部总经理等职。现任AR初创企业亮风台广州公司总经理。除本书外,还译有《梦断代码》《C#编程风格》等书。与刘韧合著《网络媒体教程》,与戴飞合译《Beginning C# Objects中文版:概念到代码》。
《代码整洁之道》epub下载在线阅读,求百度网盘云资源
《代码整洁之道》([美] Robert C. Martin)电子书网盘下载免费在线阅读资源链接:链接:https://pan.baidu.com/s/1jGwYjazmD65UY7cvRqyCfQ 提取码:5ixt书名:代码整洁之道作者:[美] Robert C. Martin译者:韩磊豆瓣评分:8.7出版社:人民邮电出版社出版年份:2020-2页数:387内容简介:软件质量,不但依赖架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。本书提出一种观点:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自实际项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。本书阅读对象为一切有志于改善代码质量的程序员及技术经理。书中介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。作者简介:作者 | Robert C. Martin世界级软件开发大师,设计模式和敏捷开发先驱,敏捷联盟首任主席,C++ Report前主编,被后辈程序员尊称为“Bob大叔”。20世纪70年代初成为职业程序员,后创办Object Mentor公司并任总裁。Martin还是一名多产的作家,至今已发表数百篇文章、论文和博客文章。除本书外,还著有《代码整洁之道:程序员的职业素养》《敏捷软件开发:原则、模式和实践》《UML:Java程序员指南》等。译者 | 韩磊互联网产品与社区运营专家,技术书籍著译者。曾任CSDN及《程序员》杂志副总经理、总编辑,广东二十一世纪传媒新媒体事业部总经理等职。现任AR初创企业亮风台广州公司总经理。除本书外,还译有《梦断代码》《C#编程风格》等书。与刘韧合著《网络媒体教程》,与戴飞合译《Beginning C# Objects中文版:概念到代码》。
画蛇添足的意思是什么? 寓意是什么?
画蛇添足:
画蛇时给蛇添上脚.比喻做了多余的事,非但无益,反而不合适.也比喻虚构事实,无中生有.
画蛇添足 (发音 huà shé tiān zú)
【解 释】 画蛇时给蛇添上脚.比喻做了多余的事,反而有害无益,徒劳无功.
【出 处】 西汉·刘向《战国策·齐策二》:“蛇固无足,子安能为之足?”
【用 法】 连动式;作宾语;含贬义
【示 例】 周而复《上海的早晨》第四部:“他想接上去说,又觉得是~,只好惋惜地坐着没动.”
【近义词】 徒劳无功、多此一举
【反义词】 画龙点睛、恰到好处、恰如其分
【灯 谜】 巳
【典 故】
故事发生在古代楚国.有一家人家祭祀祖宗.仪式完毕后,把剩下的一壶酒,赏给手下的办事人员喝.人多酒少,很难分配.这几个人就商量分酒的办法.有个人说:“一壶酒分给几个人喝,太少了.要喝就喝个痛快.给一个人喝才过瘾呢!”大家都这样想,可是谁也不肯放弃这个权利.另一个提议说:“这样吧,让我们来个画蛇比赛.每个人在地上画一条蛇,谁先画完,谁就喝这壶酒.”大伙儿都赞成这个办法.于是每个人折了一根树枝,同时开始画起来.有一个人画得最快,转眼之间,把蛇画好了.他左手抓过酒壶,得意地看看同伴,心想,他们要赶上我还差得远哩.便洋洋自得地说:“我再给蛇添上几只脚,也能比你们先画完.”正当他画第二只脚的时候,另一个人把蛇画完了.他一把夺过酒壶说:“蛇本来是没有脚的,你画的根本就不是蛇.还是我先画完,酒应当归我喝.” 添画蛇脚的人无话可说,只好咽着唾沫,看别人喝酒.
[提示]
画蛇,就要象一条蛇;添上脚,就成了“四不象”.做任何事情都要实事求是,不卖弄聪明,不节外生技.否则,非但不能把事情做好,反而会把事情办糟.
[原文]
楚有祠者①,踢其舍人卮酒②.舍人相谓曰③:“数人饮之不足,一人饮之有余,请画地为蛇,先成者饮酒.”一人蛇先成,引酒且饮之④;乃左手持卮,右手画蛇曰:“吾能为之足.”未成.一人之蛇成,夺其卮曰:“蛇固无足⑤,子安能为之足⑥?”遂饮其
酒⑦.为蛇足者,终亡其酒⑧.——《战国策》
[注释]
①祠(cí)——春祭.
②舍人——古代王公贵族手下的办事人员.卮(zhī)—— 古代盛酒的器具.
③相谓——互相商量.
④引酒——拿过酒杯.引,取过来.且——将要.
⑤固——本来.
⑥子——对人的尊称.安——怎么.
⑦遂——就.
⑧亡——失去.
示例 将军功绩已成,威声大震,可以止矣.今若前进,倘不如意,正如“~”也.(明·施耐庵《水浒全传》第一百十回)
英文:draw a snake and add feet to it—ruin the effect by adding sth.superfluous 蛇本来没有脚有人却给它加上脚,故事见《战国策·齐策二》.比喻做事多此一举,反而坏事.例:今若前进,倘不如意,正如画蛇添足也.——《三国演义》
大家怎么理解“业务代码”?为什么有人觉得写业务代码很low?
在我眼里,也经常会把程序员分成两类:一种是我等这种写业务代码的程序员,另外一种是研究高深算法、造“轮子”的“科学家”... 将他们称之为科学家是有些夸张,第一次冒出这样的想法是参加一个技术大会,当别的嘉宾都在分享开发、设计、架构、管理方面的经验时,一名在腾讯工作的算法工程师(应该已经是一个小领导了),他上台分享了一些诸如:滑动平均自回归模型、神经网络基因表达式编程、SVM回归机集成学习...坐在台下的我第一次冒出这样的念头:“这**是科学家研究的东西吧。” 当然,倒也不能说写业务代码就很 low,写业务代码也不是想象中那么简单的。 写业务相关的代码,必须了解业务流程,还需要了解业务人员心里是怎么想的,也就是业务出发点是什么样子的。 比如我最近遇到一个需求,过程大概是这样的:销售人员在卖一款产品,这款产品非常火,有些优秀的销售人员一周可能能卖出去几百上千单;结果我们接到一个需求,要限制每个代理人的销售数量,比如每人只能卖 10 个(之前已经卖掉的不算);这就让我们非常奇怪,本来卖的好好的,为什么要做这个限制呢?这个需求看起来就非常的不合理。 后来业务人员和我们解释了一下原因:因为这款产品公司不挣钱,销售人员为了推这个产品,花在别的产品上的时间就少了,所以出这个功能,就是让销售人员“收收心”,把精力放在其他产品上。 这么一解释,我们就立刻明白了;所以如果你不明白业务的时候,看着需求敲代码也是非常容易出错的。 有些人会认为业务逻辑就是一堆 if-else,但是我认为在实际工作中,这些 if-else 也是非常难做到的。 业务逻辑是人设计的,业务逻辑难不可怕,可怕的是它不严谨和变化快;业务逻辑和那些确定性的东西不一样,比如我们写好的代码 if-else 两个分支,那么再怎么也不会跳出这个范围,业务逻辑就不一样了,它是非常灵活的、不确定的,业务机会来的快消失的也快,我们很难开发出来一套全面的、完善的、灵活的的系统,去应对将来可能会发生的需求。 所以在开发过程中,如果可以将业务流程拆分成多个组件模型,组件和组件配合完成一个完成的业务流程;当业务发生变化或有新业务的时候,只需要重新编排这些组件,或对某一个组件做少量更改,就可以满足业务变化;如果能做到这个程度,也是非常不容易的。 在这个过程中,你需要做到高内聚低耦合,避免过度抽象,从业务流程和动机出发,已满足业务需要为主;既然做不了“科学家”,我们就努力把业务代码写好把。 我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。 首先,我认为写业务代码不“low”,但是大部分不假思索拷贝粘贴的业务代码比较“low”,换句话说就是所谓的五年工作经验就是把第一年的工作重复了五遍。 技术人员成长一般有两条线,一条是成为技术专家,一条是成为领域专家。所谓的转管理我理解也就是领域专家,毕竟不懂得领域知识是无法做好管理的,比如说你是互联网金融某个业务部门的leader,那么你肯定要懂金融。领域知识就是在不断的写业务代码和思考中积累起来。 还有一个问题就是如何定义业务,比如说“实现一个修改订单功能”,这是一个业务需求,看起来很low,但是如果业务需求改成“实现一个修改订单功能,要求在有限资源的情况下并发10k,响应时间不高于10ms”,那这个需求就有挑战。说这个问题想说明白一件事情,如果做业务不要停留的在业务表面,仅仅满足于实现功能,要主动思考。 最后总结一下,没有最好的技术,只有最适合业务的技术。技术是内功,业务是招式,内功不足,后续成长乏力,没有招式,内功也不能发挥威力。这是也很多互联网创业公司做大了之后要技术转型的原因。 作为一个程序员,我也是写代码的,我不觉得写业务代码很low。 1.首先大家所认为的业务代码就是一些和业务相关的增删改查,涉及到的技术点相对来说是固定的,写熟了之后,就是复制,粘贴,不存在什么技术阻碍,很多人就觉得非常的简单,没有技术含量,做这些工作的人也显得非常的low,如果你也是这样认为的,那你就错了,因为写业务代码的基本都是初级,中级的程序员,工作经验有限,不具备写一些公共方法和接口的能力,但是并不代表以后能力不会提升,如果持续努力,也会成长为高级程序员或是架构师,谁天生就是高级程序员呢,不都是一点点积累起来的吗?而且就算是写业务代码也不能就是low呀,有些业务场景是非常复杂的,逻辑必须十分严谨,稍有差错可能就会出现bug,对公司造成巨大的损失,不是写业务代码就是很容易的。 2.除了业务代码就是非业务代码了,比如开发数据库,开发框架,或是写一些公共的方法或是接口,供初级开发者调用。写非业务代码的人技术也不一定就非常的厉害,因为就算是开发框架或是数据库之类的项目,也不一定都是高级开发,也会有一些水平较低的开发,因为写业务代码还是非业务代码和项目也有关系,如果你们团队开发的是开发框架或是数据库这种的项目,那么你们团队没有人写业务代码,也不能说明你们团队每个人技术都很厉害,只是项目性质不一样罢了。 3.业务代码这个词看你的理解吧,我认为其实所有的代码都可以成为是业务代码,无论开发什么产品,都是有业务需求的,有了需求才有开发的动力,对于开发数据库来说,数据库的需求就是业务,对于开发框架来说,框架的功能就是业务,所以我认为广义上来讲都是业务代码,没有非业务代码这一说,所以具体看你认为业务的定义是什么了。不过无论如何也不应该去嘲笑或是去贬低别人吧,嘲笑或是贬低一类人就更不应该了。 业务程序开发相对于底层基础架构层的程序开发有所不同: 业务开发的时间比较紧,变化快。 这个特点导致程序员没有时间重构代码,或者不愿意重构代码,而是用最简单粗暴的复制黏贴的方式快速实现业务逻辑。其实所有的复制黏贴都意味着需要重构。 底层系统的开发,一般是架构师和高级程序员来设计和控制项目时间。相对来说,开发周期长,变化缓慢。会更加注重架构的合理性和稳定性,而且会不断重构和改进。 业务开发一旦完成,只要平稳运行就不会有人再回来补技术债务,不会把它写得更好。除非这个业务爆发了,不得不从新架构以支持更高的并发。如果上线之后表现不佳,很可能下线不再维护。所以公司也不太愿意花太多精力在一个还没有被市场认可的产品项目上。 而底层架构框架的项目会在不同的产品项目中不断应用。不断地进化。就像Spring之类的开源框架一样,不断的升级和完善。 相对来说,业务开发程序员会花大量的时间学习和理解业务知识;而底层框架程序员更多的时间在学习技术架构。如果业务知识在行业内通用,比如财务,金融行业知识。那么长期的积累对业务开发也是很有帮助的。如果业务是很小众的,甚至,这几个月做这个业务,下半年又做另一个业务,做的时候也一知半解,就像很多外包一样,那就没有什么业务沉淀了。 我就是写业务代码的,不过我觉得这很正常啊,不知道你是怎么就觉得low啦? 所以,做为一个企业,支撑发展的肯定是他的业务,不管是卖什么服务,都要通过业务来赚钱,可能针对业务,企业内部还会做一些细化。比如说,有人会是做一些前端,一些人做后端,还有运维,运营,产品的配合。前端再细化,一部分人会做一些页面的展示,呈现,还有一部分人会做一些适合业务的工具,来提升开发效率。 那如果你自己的定位是只是单单写页面的,那只能说你对自己的要求有点低,你没有去考虑如何做一些提升工作效率的事情。举个例子,比如说常见的后台管理系统,因为功能都很类似的,那你有去考虑如何做一个通用的模版吗,还是就是不断地去重复。 这个别人的产出,做了一个vue的后台管理系统的模版,现在的GitHub star在6万多,通过这个项目,他就可以得到更多人的认可,也能得到更多的好的工作机会。 所以,不要觉得业务代码就是low的,要善于去总结,然后再分享自己的经验,没准你也能成为一个领域内的Top。 不要太在意所谓low与不low,需要在意的是做了这个项目或业务后,对自己的能力有没有长进,如果有,那说明不low。如果没有,那说明你只是在机械的劳动而已。 每个大佬都是从业务代码做起的,大佬们注重的是能否成长,学习实践的机会,以及平台的大小和未来是否和自己的目标相匹配。 总结来说,只要能提升自己能力的任何工作,都是值得的。 我觉得首先大家要理解什么是“业务代码”,业务代码是一个相对的概念。 1.对于一个一般的物联网应用型公司来说,业务代码就是根据客户需求基于一个MCU或者MPU的应用控制逻辑的实现。 2.对于一个做纯上层应用的公司来说,业务代码就是基于一个操作系统为客户量身定制对应的app,并实现对应的应用逻辑。 3.对于一个微型控制器设计厂商,业务代码就是底层架构裸机的具体实现和各个外设驱动的框架设计。 4.对于一个设计操作系统的开发人员来说,业务代码就是架构设计、内存管理、调度机制优化、优先级管理、进程间通信机制优化、线程管理和内核完善等等。 所谓”业务代码”都是相对的,没有参考系怎么谈。像操作系统,站在操作系统内核提供方的角度看,上层所有的应用框架,进程服务,都是业务代码,我是为他们服务的。技术只是工具,业务实现才是目的,站在不同供应商的角度,只要涉及代码的地方都可以称之为业务代码。所以站在这个维度,如果要说业务代码“LOW”,那就没有代码是不"LOW"的了。 不过,真正接触底层或者实现RTOS底层业务框架的工程师其实是很少的。大部分工程师基本上都是对于客户需求做一些非驱动底层非操作系统框架的应用型的开发,所以大多时候“业务代码“又单一的被指向了那些只是对客户的上层应用的需求做开发、调整或者迭代的代码。 而这部分代码究竟"LOW"还是不"LOW"呢,我的答案是:不"LOW"。但是现实却是很“LOW”,之所以会被想成LOW,是因为: 1.判断一个程序员的优秀程度已经不单单看你写了多少应用型的代码,设计了多少应用框架,而是你懂不懂底层驱动逻辑,懂不懂操作系统内核,懂不懂内核裁减等等。所以这种情况会经常出现在面试过程中,面试官会因为你不懂底层驱动、不懂内核而给你比较低的薪水。 2.懂得写业务代码的人,他的程序员基础并不一定就牢固。因为上层应用可能对业务比较看重,但是对于一些特定的语言的编程并没有那么严谨。能用就可以,所以会自然而然的认为这样的程序员“LOW”。而一个会写底层驱动的人,他考虑更多的是基础代码的安全、严谨性和容量问题等等,他们的语言基础相对来说要牢固很多。 3.技术负责人一般都是全能型的人。会写底层驱动或者更懂操作系统内核的人更容易成为技术的领头人。而那些只会“业务代码”的人,放在大部分公司,一般都不会有太多的上升空间。 根据以上分析过后呢,做“业务代码”的程序员基本上会被想的很“LOW”,但是结合我的亲身经历,不同的人对于这个事情却会有不同的看法。 比如对于领导来说,那就不一样了。你将“业务代码”的需求迭代了,完善了,提前任务完成了,客户很满意。那领导不会认为你是一个很“LOW”的程序员。你很高级,领导很欣赏,“后果”很舒服。但是对于一个面试官来说,你就会点上层应用的调用和设计。我为什么要给你这么多薪水?虽然会被想成很"LOW",但是也是现实。 业务代码不一定low,能完成用户需求的代码就是好代码。 另外,对于我们搞嵌入式软件、EDA工具软件的来说,业务软件反而是更有技术含量的,更具科学意义的代码,而软件可能只是载体,你啥时候透过代码理解了它们背后的物理概念、数学公式,你就超越了程序员,能向科学家又迈进一步。 互联网软件其实也一样,软件实现的是一个业务流程的自动化,你完全可以透过你写的程序还原甲方用户的业务流程,而这种流程是老板制订的,认识会上一个层次,将来可以向老板迈进 我发现很多程序员对于处理业务逻辑都是「嗤之以鼻」。感觉自己天天写业务逻辑代码,改 Bug 都没有时间学习,没有时间实现个人成长? 但是,作为程序员来讲,如果不是做底层基础技术研发的话,大部分的工作不就是做这些拧螺丝的工作吗?其实拧螺丝有那么容易吗?可能拧螺丝很容易,但是拧好螺丝就不那么简单了。 别小瞧业务逻辑代码,如果真正写好,要把逻辑写得清晰简单易用,功能健壮稳定,性能同时达到要求的话,其实是挺难的。 其实很多程序员都跟他一样,都在痛苦的编程,一方面对自己有更高的要求,一方面又嫌弃现在写的代码没有技术含量。又有更高的要去和希望,又嫌弃现在的工作,就是不思考出现的原因,不去付诸行动。还不停的抱怨: 感觉自己天天写业务逻辑代码,改 Bug 都没有时间学习,没有时间实现个人成长? 到这里,我们不禁一问:那我们该如何摆脱这种现状呢?其实很简单,我们应该摆正自己的态度和观点,正确看待写业务逻辑这些代码就行了。 坚持不懈的写好业务逻辑代码 就像我在上面说的: 别小瞧业务逻辑代码,如果真正写好,要把逻辑写得清晰简单易用,功能健壮稳定,性能同时达到要求的话,其实是挺难的。 所以,我们要正确看待写业务逻辑的代码,应该摆正心态,坚持不懈的去写,所谓量变引起质变,就是这个道理。写业务代码,积累代码量,一力降十会,在积累了巨量的代码量之后,几乎任何所谓的有技术含量的东西都构不成挑战性。当然,要想真正的通过自己写业务代码,写好业务代码还应该有接下来的这个思考。 业务逻辑代码同样可以玩出很多花样 其实业务逻辑代码一样可以玩出很多花样,而这才是能够提升你能力的本质。比如:你写了一个处理单任务的业务逻辑,虽然满足了用户的需求,但是你这时能不能对自己有一个更高的要求呢?单任务虽然是功能实现了,但是效率可能不行,处理慢,那搞个多任务处理的逻辑怎么样?任务池、线程池、内存池、并发、同步等等这些技术点都来了。如果你对自己有这样的要求,而你自己有追求的话,就会进一步思考如何去做到这些,你做到了,你能力就提升了。 同样,很多人感觉处理业务逻辑,就是一些各种循环,条件判断,只要逻辑稍微严谨点,功能就都没问题,就都实现了,确实是这样的。这就是你对于业务逻辑没有兴趣的根点所在。 那你为什么不想想: 如何使用循环和条件判断可以提升效率呢?满足了功能的那些需求,是不是有些地方可以优化一下呢?是不是可以提升一下性能呢? 其实,这个技术的进步和积累,就在于自己内心对自己有没有更高的要求和追求。这是大实话,也是大白话。很多人就感觉只要实现了功能需求就够了,满足了用户就行了。然后,这个项目完事了,下个项目遇到差不多的逻辑,还是这么处理,又完事了,每个项目,每个功能都是这样重复的处理,从来不思考最优的实现方式,你感觉能够进步吗?你能不烦气吗?十年如一日的工作,10 年也就积累了一年的工作经验,在重复使用。 业务逻辑的最优方式,就是思考如何大道至简 通过一个业务逻辑实现一个功能,基本上只要是程序员,脑子不笨,都能做出来,做出来是一回事,但是做好是另外一回事。大道至简,我们要做就得想办法做到最好。这里的好有很多层意思。 比如: 你写的业务逻辑代码 是否能够做到准确,稳定,高效,易读,易扩展,易维护,兼容性强呢? 问自己一句,如果你能做到这些,那确实是好。如果做不到,你还是处理初级水平,当然不行,这就是你在工作中提升能力的机会。别说没时间,都是借口。 精益求精是对代码大道至简的永恒的追求,也是我们在处理业务逻辑代码中不断提高自己能力的过程。 明明自己水平初级,就容易骄傲自满,感觉可以了,我想学更高的技术,那么更高的技术是自己在处理业务逻辑中一步一步积累出来的,不是干了初级的活,不用积累,直接学高级的技术,就能高级了。 我特别喜欢网上有个网友写的一段话: 其实很多技术大牛和技术专家,都是从业务逻辑做起,慢慢积累思考起来的。比如:在处理业务逻辑之前,会思考如何设计这个架构,可以让代码更好的扩展和维护。在处理业务逻辑的时候,思考如何的处理才能提高性能和效率?一步一步的实验和总结,积累,才成就了今天的成绩。 所以,不要对处理业务逻辑嗤之以鼻,不要以为能够满足需求就够了。你重复不思考的粘贴和复制肯定是不行的,必然会对编程失去兴趣,自然无法更好的成长和进步。应该在编程的过程中追求更高的要求,寻找更高的兴趣,这样才能让你持续进步,从而进阶。 林子大了什么鸟都有,不知道你说的有人是指多少比例的人。我的理解代码可以分为两类:1:工具栏或者框架类2:业务类。写工具类偏重于健壮可拓展可复用;写业务类偏重于逻辑严谨没有漏洞,化繁为简。毕竟有些时候需求或者业务都不甚清楚他们想要的逻辑。有时候复杂的业务流程你捋都不顺,更别说代码写的好了。当然,工具类到高深,工具好用,框架优秀确实需要的技术功底深厚,比业务类要考虑的东西也多,但不代表写业务类代码很low。当然,不管写什么代码,完全复制黏贴而不去考虑与实际场景结合,不去想为什么?有没有更好的处理方案是比较low的
大家怎么理解“业务代码”?为什么有人觉得写业务代码很low?
在我眼里,也经常会把程序员分成两类:一种是我等这种写业务代码的程序员,另外一种是研究高深算法、造“轮子”的“科学家”...
将他们称之为科学家是有些夸张,第一次冒出这样的想法是参加一个技术大会,当别的嘉宾都在分享开发、设计、架构、管理方面的经验时,一名在腾讯工作的算法工程师(应该已经是一个小领导了),他上台分享了一些诸如:滑动平均自回归模型、神经网络基因表达式编程、SVM回归机集成学习...坐在台下的我第一次冒出这样的念头:“这**是科学家研究的东西吧。”
当然,倒也不能说写业务代码就很 low,写业务代码也不是想象中那么简单的。
写业务相关的代码,必须了解业务流程,还需要了解业务人员心里是怎么想的,也就是业务出发点是什么样子的。
比如我最近遇到一个需求,过程大概是这样的:销售人员在卖一款产品,这款产品非常火,有些优秀的销售人员一周可能能卖出去几百上千单;结果我们接到一个需求,要限制每个代理人的销售数量,比如每人只能卖 10 个(之前已经卖掉的不算);这就让我们非常奇怪,本来卖的好好的,为什么要做这个限制呢?这个需求看起来就非常的不合理。
后来业务人员和我们解释了一下原因:因为这款产品公司不挣钱,销售人员为了推这个产品,花在别的产品上的时间就少了,所以出这个功能,就是让销售人员“收收心”,把精力放在其他产品上。
这么一解释,我们就立刻明白了;所以如果你不明白业务的时候,看着需求敲代码也是非常容易出错的。
有些人会认为业务逻辑就是一堆 if-else,但是我认为在实际工作中,这些 if-else 也是非常难做到的。
业务逻辑是人设计的,业务逻辑难不可怕,可怕的是它不严谨和变化快;业务逻辑和那些确定性的东西不一样,比如我们写好的代码 if-else 两个分支,那么再怎么也不会跳出这个范围,业务逻辑就不一样了,它是非常灵活的、不确定的,业务机会来的快消失的也快,我们很难开发出来一套全面的、完善的、灵活的的系统,去应对将来可能会发生的需求。
所以在开发过程中,如果可以将业务流程拆分成多个组件模型,组件和组件配合完成一个完成的业务流程;当业务发生变化或有新业务的时候,只需要重新编排这些组件,或对某一个组件做少量更改,就可以满足业务变化;如果能做到这个程度,也是非常不容易的。
在这个过程中,你需要做到高内聚低耦合,避免过度抽象,从业务流程和动机出发,已满足业务需要为主;既然做不了“科学家”,我们就努力把业务代码写好把。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
首先,我认为写业务代码不“low”,但是大部分不假思索拷贝粘贴的业务代码比较“low”,换句话说就是所谓的五年工作经验就是把第一年的工作重复了五遍。
技术人员成长一般有两条线,一条是成为技术专家,一条是成为领域专家。所谓的转管理我理解也就是领域专家,毕竟不懂得领域知识是无法做好管理的,比如说你是互联网金融某个业务部门的leader,那么你肯定要懂金融。领域知识就是在不断的写业务代码和思考中积累起来。
还有一个问题就是如何定义业务,比如说“实现一个修改订单功能”,这是一个业务需求,看起来很low,但是如果业务需求改成“实现一个修改订单功能,要求在有限资源的情况下并发10k,响应时间不高于10ms”,那这个需求就有挑战。说这个问题想说明白一件事情,如果做业务不要停留的在业务表面,仅仅满足于实现功能,要主动思考。
最后总结一下,没有最好的技术,只有最适合业务的技术。技术是内功,业务是招式,内功不足,后续成长乏力,没有招式,内功也不能发挥威力。这是也很多互联网创业公司做大了之后要技术转型的原因。
业务程序开发相对于底层基础架构层的程序开发有所不同:
业务开发的时间比较紧,变化快。
这个特点导致程序员没有时间重构代码,或者不愿意重构代码,而是用最简单粗暴的复制黏贴的方式快速实现业务逻辑。其实所有的复制黏贴都意味着需要重构。
底层系统的开发,一般是架构师和高级程序员来设计和控制项目时间。相对来说,开发周期长,变化缓慢。会更加注重架构的合理性和稳定性,而且会不断重构和改进。
业务开发一旦完成,只要平稳运行就不会有人再回来补技术债务,不会把它写得更好。除非这个业务爆发了,不得不从新架构以支持更高的并发。如果上线之后表现不佳,很可能下线不再维护。所以公司也不太愿意花太多精力在一个还没有被市场认可的产品项目上。
而底层架构框架的项目会在不同的产品项目中不断应用。不断地进化。就像Spring之类的开源框架一样,不断的升级和完善。
相对来说,业务开发程序员会花大量的时间学习和理解业务知识;而底层框架程序员更多的时间在学习技术架构。如果业务知识在行业内通用,比如财务,金融行业知识。那么长期的积累对业务开发也是很有帮助的。如果业务是很小众的,甚至,这几个月做这个业务,下半年又做另一个业务,做的时候也一知半解,就像很多外包一样,那就没有什么业务沉淀了。
我就是写业务代码的,不过我觉得这很正常啊,不知道你是怎么就觉得low啦?
所以,做为一个企业,支撑发展的肯定是他的业务,不管是卖什么服务,都要通过业务来赚钱,可能针对业务,企业内部还会做一些细化。比如说,有人会是做一些前端,一些人做后端,还有运维,运营,产品的配合。前端再细化,一部分人会做一些页面的展示,呈现,还有一部分人会做一些适合业务的工具,来提升开发效率。
那如果你自己的定位是只是单单写页面的,那只能说你对自己的要求有点低,你没有去考虑如何做一些提升工作效率的事情。举个例子,比如说常见的后台管理系统,因为功能都很类似的,那你有去考虑如何做一个通用的模版吗,还是就是不断地去重复。
这个别人的产出,做了一个vue的后台管理系统的模版,现在的GitHub star在6万多,通过这个项目,他就可以得到更多人的认可,也能得到更多的好的工作机会。
所以,不要觉得业务代码就是low的,要善于去总结,然后再分享自己的经验,没准你也能成为一个领域内的Top。
不要太在意所谓low与不low,需要在意的是做了这个项目或业务后,对自己的能力有没有长进,如果有,那说明不low。如果没有,那说明你只是在机械的劳动而已。
每个大佬都是从业务代码做起的,大佬们注重的是能否成长,学习实践的机会,以及平台的大小和未来是否和自己的目标相匹配。
总结来说,只要能提升自己能力的任何工作,都是值得的。
业务代码不一定low,能完成用户需求的代码就是好代码。
另外,对于我们搞嵌入式软件、EDA工具软件的来说,业务软件反而是更有技术含量的,更具科学意义的代码,而软件可能只是载体,你啥时候透过代码理解了它们背后的物理概念、数学公式,你就超越了程序员,能向科学家又迈进一步。
互联网软件其实也一样,软件实现的是一个业务流程的自动化,你完全可以透过你写的程序还原甲方用户的业务流程,而这种流程是老板制订的,认识会上一个层次,将来可以向老板迈进
我觉得首先大家要理解什么是“业务代码”,业务代码是一个相对的概念。
1.对于一个一般的物联网应用型公司来说,业务代码就是根据客户需求基于一个MCU或者MPU的应用控制逻辑的实现。
2.对于一个做纯上层应用的公司来说,业务代码就是基于一个操作系统为客户量身定制对应的app,并实现对应的应用逻辑。
3.对于一个微型控制器设计厂商,业务代码就是底层架构裸机的具体实现和各个外设驱动的框架设计。
4.对于一个设计操作系统的开发人员来说,业务代码就是架构设计、内存管理、调度机制优化、优先级管理、进程间通信机制优化、线程管理和内核完善等等。
所谓”业务代码”都是相对的,没有参考系怎么谈。像操作系统,站在操作系统内核提供方的角度看,上层所有的应用框架,进程服务,都是业务代码,我是为他们服务的。技术只是工具,业务实现才是目的,站在不同供应商的角度,只要涉及代码的地方都可以称之为业务代码。所以站在这个维度,如果要说业务代码“LOW”,那就没有代码是不"LOW"的了。
不过,真正接触底层或者实现RTOS底层业务框架的工程师其实是很少的。大部分工程师基本上都是对于客户需求做一些非驱动底层非操作系统框架的应用型的开发,所以大多时候“业务代码“又单一的被指向了那些只是对客户的上层应用的需求做开发、调整或者迭代的代码。
而这部分代码究竟"LOW"还是不"LOW"呢,我的答案是:不"LOW"。但是现实却是很“LOW”,之所以会被想成LOW,是因为:
1.判断一个程序员的优秀程度已经不单单看你写了多少应用型的代码,设计了多少应用框架,而是你懂不懂底层驱动逻辑,懂不懂操作系统内核,懂不懂内核裁减等等。所以这种情况会经常出现在面试过程中,面试官会因为你不懂底层驱动、不懂内核而给你比较低的薪水。
2.懂得写业务代码的人,他的程序员基础并不一定就牢固。因为上层应用可能对业务比较看重,但是对于一些特定的语言的编程并没有那么严谨。能用就可以,所以会自然而然的认为这样的程序员“LOW”。而一个会写底层驱动的人,他考虑更多的是基础代码的安全、严谨性和容量问题等等,他们的语言基础相对来说要牢固很多。
3.技术负责人一般都是全能型的人。会写底层驱动或者更懂操作系统内核的人更容易成为技术的领头人。而那些只会“业务代码”的人,放在大部分公司,一般都不会有太多的上升空间。
根据以上分析过后呢,做“业务代码”的程序员基本上会被想的很“LOW”,但是结合我的亲身经历,不同的人对于这个事情却会有不同的看法。
比如对于领导来说,那就不一样了。你将“业务代码”的需求迭代了,完善了,提前任务完成了,客户很满意。那领导不会认为你是一个很“LOW”的程序员。你很高级,领导很欣赏,“后果”很舒服。但是对于一个面试官来说,你就会点上层应用的调用和设计。我为什么要给你这么多薪水?虽然会被想成很"LOW",但是也是现实。
好了,这个问题就回答到这里,以上都是个人结合实际经历的一些体会,喜欢的加关注,我是一名深漂的嵌入式程序员,欢迎私信留言,感谢!
我有面试过一个40岁的程序员,做过几百个网站,要求工资才6000元,他只会做简单的企业网站,因为他一直在很小的公司工作,只能做小项目,这我觉得是业务代码,就是做一些重复和没难道的工作。
林子大了什么鸟都有,不知道你说的有人是指多少比例的人。我的理解代码可以分为两类:1:工具栏或者框架类2:业务类。写工具类偏重于健壮可拓展可复用;写业务类偏重于逻辑严谨没有漏洞,化繁为简。毕竟有些时候需求或者业务都不甚清楚他们想要的逻辑。有时候复杂的业务流程你捋都不顺,更别说代码写的好了。当然,工具类到高深,工具好用,框架优秀确实需要的技术功底深厚,比业务类要考虑的东西也多,但不代表写业务类代码很low。当然,不管写什么代码,完全复制黏贴而不去考虑与实际场景结合,不去想为什么?有没有更好的处理方案是比较low的
有人觉得low
1.可能是觉得没有什么技术含量吧,用的都是一些成熟的技术框架,就是一些增删改查而已,但是这并不意味着写业务代码就很简单,因为这里面包含着业务逻辑,业务逻辑有简单的也有复杂的,如果对业务逻辑业务背景不理解或理解不透就很难实施下去,其实现在很多专家级别的程序员并不是技术有多牛,而是对某个行业领域有比较深刻的理解。
2.还有可能就是内心里对业务就很轻视,这个更是不应该的,因为技术是为业务服务的,是业务让技术变的有价值。
华为自研编程语言“仓颉”火上热搜,英文编程还香吗?
华为自研编程语言“仓颉”火上热搜,英文编程还香吗?下面就我们来针对这个问题进行一番探讨,希望这些内容能够帮到有需要的朋友们。备受关注的华为自研编程语言「仓颉」,又火上热搜榜了。华为自研编程语言「仓颉」火上热搜榜,内测组员辟谣:并不是中文编程。此次是由于「仓颉」宣布启动了内测,现阶段己经有一部分开发人员取得源码。不久前,华为编程语言实验室公布了一份“新语言表达使用报考-202203”问卷调查,宣布征选一小批开发人员对「仓颉」编程语言开展小范畴检测。从问卷调查内容看来,开发人员们必须填好Gitee首页、岗位和企业等信息内容,随后等候电子邮件通告。如今,伴随着大量关键点被表露出去,以前针对「仓颉」猜想的一些传闻,也拥有清晰的回答。英文名字Cangjie,并不是中文编程。实际上,早在上年10月,华为官方网就确立表露过“将公布自研洪蒙编程语言”。对于此事,华为消费者业务软件部首席总裁龚体表明,它将“为洪蒙绿色生态基础建设补上最终一环”。与此同时,华为也早已注册申请了“华为仓颉”、“仓颉语言表达”等商标logo,归类包含仪器设备、设计方案科学研究等,而一部分“仓颉”商标logo则仍在商标驳回复审、申请注册的环节。这儿见到华为还申请注册了一个叫“仓杰”的商标logo,现阶段也早已根据申请办理,伴随着内测的打开,一部分开发人员在取得「仓颉」的源码后,也对先前满天飞的揣测和传闻开展了一些回复。其一,「仓颉」的英文名字便是Cangjie,而不是先前传言的“char”。那时候华为被曝产品研发「仓颉」后,知乎问答就发出过这门编程语言英文名字是“char”的信息:现阶段这一传言早已被辟谣。其二,「仓颉」并不是中文编程,也不会有所说的“套壳”。据知乎问答一位匿名用户表明,感受后发觉「仓颉」编程语言“跟汉语一点儿关联没有”,英语的语法相近go+java。实际上,如今顺手一搜或是能找到一大堆有关「仓颉」是中文编程的谣言。其三,往往仍在内测,是由于包含精英团队和内测组员都仍在改善编码。嗯,问便是仍在修bug(手动狗头)。但实际上,大伙儿最惊讶的或是「仓颉」这门编程语言到底长啥样。实际上,先前华为编程语言实验室负责人、南京大学冯新宇专家教授,早已设立过一门有关《编程语言的设计和实现》的课程内容,现阶段华为官方网已释放B站短视频。在专题讲座一开始,冯专家教授就表露了自身现阶段开展的一些工作中。从总体上,学术研究上的分析主要包含PL基础理论及运用等,而工业生产层面的科学研究,则主要是领着华为编程语言实验室开展工业生产编程语言的设计方案和完成。在冯新宇专家教授得出的教学课件中可以看到,现阶段的编程语言种类关键可以分成下列几类,在其中重点提及了服务平台型语言表达:像C#、Go、Swift这种开源系统编程语言,也全是由像Google、微软和iPhone那样的企业自身资金投入去做的,为此操控语言表达的工艺演变对策和方位。但华为「仓颉」到底是一门如何的语言表达,现阶段也有待官方网宣布公布信息内容。
华为自研编程语言“仓颉”火上热搜,这是否降低了编程门槛?
首先,一种编程语言,用不用中文写代码并不是太重要,当然如果他用中文会在一定程度上有利于降低程序员的入门门槛,同时也可以提高程序代码的可读性,但也仅限于此了。其次,华为推出仓颉编程语言,确实是令国人震撼的消息,源于华为在硬件底层、操作系统、编译器、IDE工具都已很深的积累和造诣,华为推出编程语言也是水到渠成的事,主要还是防止某一天被掐脖子。据我所知仓颉并不是就一个纯中文的编程语言,而是综合了现java,python,go等语音的特点,发明了更简洁更高效,更符合现代思维,支持中文定义的语言,有点像python拿来就用易上手的语言。另外,编程,很大程度上不是取决于用什么编程语言,而是取决于编程人的思维,解决问题的算法,以及脑洞。如果只是简单的程序,实现一些简单的功能,普通人稍微培训一下就可以做到(就是要熟悉编程语言的语法格式等等),但是,如果要成为高级程序员,能做出复杂的实现高级功能的大型程序,还是要经过系统的学习才行。如果中国的计算机系统,它的底层架构,数据结构,逻辑运算都可以用中文,编程就没有英文字母什么事了,普通人当然也可以成为程序员,只不过是像写作文一样,水平高低问题。纵使是中文编程,也是需要系统的学习的,况且仓颉编程并不是中文编程,编程是一种思维。最后,计算机所识别的代码是二进制的,类似于“0100011”这一类的数字编程语言使用汉字还是英文,仅仅是为了方便编程人员,编完的程序,还需要汇编才能被计算机执行,最终汇编完的程序,在计算机看来没有汉字和英文的区别。
《Python灰帽子黑客与逆向工程师的Python编程之道》pdf下载在线阅读,求百度网盘云资源
《Python灰帽子》([美] Justin Seitz)电子书网盘下载免费在线阅读资源链接:链接: https://pan.baidu.com/s/1gaJDi3feRTx7hAO3AgFolw 提取码: 128s书名:Python灰帽子作者:[美] Justin Seitz译者:丁赟卿 译豆瓣评分:7.5出版社:电子工业出版社出版年份:2011-3页数:216内容简介:《Python灰帽子》是由知名安全机构Immunity Inc的资深黑帽Justin Seitz主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍。老牌黑客,同时也是Immunity Inc的创始人兼首席技术执行官(CTO)Dave Aitel为这本书担任了技术编辑一职。书中绝大部分篇幅着眼于黑客技术领域中的两大经久不衰的话题:逆向工程与漏洞挖掘,并向读者呈现了几乎每个逆向工程师或安全研究人员在日常工作中所面临的各种场景,其中包括:如何设计与构建自己的调试工具,如何自动化实现烦琐的逆向分析任务,如何设计与构建自己的fuzzing工具,如何利用fuzzing 测试来找出存在于软件产品中的安全漏洞,一些小技巧诸如钩子与注入技术的应用,以及对一些主流Python安全工具如PyDbg、 Immunity Debugger、Sulley、IDAPython、PyEmu等的深入介绍。作者借助于如今黑客社区中备受青睐的编程语言 Python引领读者构建出精悍的脚本程序来一一应对上述这些问题。出现在书中的相当一部分Python代码实例借鉴或直接来源于一些优秀的开源安全项目,诸如Pedram Amini的Paimei,由此读者可以领略到安全研究者们是如何将黑客艺术与工程技术优雅融合来解决那些棘手问题的。作者简介:Justin Seitz是一名Immunity公司的高级安全研究员,他在以往的工作中花费了大量的时间从事漏洞挖掘、逆向工程、编写漏洞利用以及编写Python代码的研究。
求《Python灰帽子黑客与逆向工程师的编程之道》全文免费下载百度网盘资源,谢谢~
《Python灰帽子黑客与逆向工程师的Python编程之道》百度网盘pdf最新全集下载:链接:https://pan.baidu.com/s/1QqjrTzpKBsgFisae1oXZ9w?pwd=x4sd 提取码:x4sd简介:本书的绝大部分篇幅着眼于黑客技术领域中的两大经久不衰的话题:逆向工程与漏洞挖掘,并向读者呈现了几乎每个逆向工程师或安全研究人员在日常工作中所面临的各种场景,其中包括:如何设计?构建自己的调试工具,如何自动化实现烦琐的逆向分析任务,如何设计与构建自己的fuzzing工具,如何利用fuzzing测试来找出存在于软件产品中的安全漏洞,一些小技巧诸如钩子与注入技术的应用,以及对一些主流Python安全工具如PyDbg、Immunity\nDebugger、Sulley、IDAPython、PyEmu等的深入介绍。作者借助于如今黑客社区中备受青睐的编程语言Python读者构建出精悍的脚本程序来——应对上述这些问题。出现在本书中的相当一部分Python代码实例借鉴或直接来源于一些的开源安全项目,诸如Pedram\nAmini的Paimei,由此读者可以领略到安全研究者?是如何将黑客艺术与工程技术优雅融合来解决那些棘手问题的。本书适合热衷于黑客技术,特别是与逆向工程与漏洞挖掘领域相关的读者,以及所有对Python编程感兴趣的读者阅读与参考。