zoukankan      html  css  js  c++  java
  • 《构建之法》第4章、第17章读后有感

    《构建之法》第4章、第17章读后有感

    一、第4章  两人合作

    1.文章内容:

       程序中的实体、变量是程序员昼思夜想的对象,要起一个好的名字才行。大家都知道用单个字母给有复杂语义的实体命名是不好的,在C语言家族中,比较通用的,也是经过了很多实践检验的方法叫“匈牙利命名法”。

    我的疑惑:

       什么是“匈牙利命名法”?适用于什么地方?不适用于什么地方?

    我的思考:

       “匈牙利命名法”是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。“匈牙利命名法”是在变量前面加上有意义的前缀,程序员就能一眼看出变量的类型及相应的语义,非常便于记忆,而且使变量名非常清晰易懂,增强了代码的可读性,方便各程序员之间相互交流代码。例如:

    fFileExist,表明是一个bool值,表示文件是否存在;

    szPath,表明是一个以0结束的字符串,表示一个路径。

         但是,“匈牙利命名法”不适用于微软的.NET框架和一些强类型的语言(如C#)中,因为这些语言对类型有严格的要求,不同类型的值是不能做运算的,比如说,C#中,if()语句只能接受bool值的表达式。

       除此之外,我经过上网查阅资料之后,我具体了解到:“匈牙利命名法”在C语言是难以实施的,在C++语言中是无法实施的。“匈牙利命名法”是类型系统的冗余,所以实施“匈牙利命名法”的关键是我们是否能够精确地对类型系统进行复制,这取决于类型系统的复杂性。

    C语言:

    1.内置类型:int,char,float,double 复制为 n,ch,f,d?好像没有什么问题。但是void应该怎么表示,“匈牙利命名法”做不到。

    2.组合类型:array,union,enum,struct 复制为 a,u,e,s?并不方便。

    这里的难点不是为主类型取名,而是为副类型取名。an表示整型数组?sfoo,sbar表示结构foo,结构bar?ausfoo表示联合结构foo数组?非常冗繁。

    3.特殊类型:pointer。pointer在理论上应该是组合类型,但是在C语言中可以认为是内置类型,因为C语言并没有非常严格地区分不同的指针类型。

    C++语言:

    1.class:如果说C语言中的struct还可以用stru搪塞过去的话,不要梦想用cls来搪塞C++中的class。严格地讲,class根本就并不是一个类型,而是创造类型的工具,在C++中,语言内置类型的数量和class创造的用户自定义类型的数量相比完全可以忽略不计。stdvectorFoo表示标准库向量类型变量Foo,是不合乎逻辑的。

    2.命名空间:boostfilesystemiteratorFoo,表示boost空间filesystem子空间遍历目录类型变量Foo,依旧不可行。

    3.模板:std::map类型的确切名字是什么,已经超过了255个字符。

    4.模板参数:template const T& max(const T& a, const T& b, BinaryPredicate comp) 这一条来用“匈牙利命名法”命名,难度极大。

    5.类型修饰:static,extern,mutable,register,volatile,const,short,long,unsigned 加上类型修饰,更是难上加难。

       总之,“匈牙利命名法”有其优点但也有缺点,这就需要在使用中扬长避短,合理应用它。

     

    2.文章内容:

       注释(包括所有源代码)应该只用ASCII字符,不要用中文或其他字符,否则会极大地影响程序的可移植性。

    我的疑惑:

       程序运行时注释是不被执行的为什么又会影响到程序的可移植性?

    我的思考:

       注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。正确的程序注释一般包括序言性注释和功能性注释。序言性注释的主要内容包括模块的接口、数据的描述和模块的功能。模块的功能性注释的主要内容包括程序段的功能、语句的功能和数据的状态。

       可移植性是软件质量之一,良好的可移植性可以提高软件的生命周期。代码的可移植性主题是软件;可移植性是软件产品的一种能力属性,其行为表现为一种程度,而表现出来的程度与环境密切相关。软件可移植性指与软件从某一环境转移到另一环境下的难易程度。为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境,尽量不用与系统的底层相关性强的语言。当然,可移植性并不是指所写的程序不作修改就可以在任何计算机上运行,而是指当条件有变化时,程序无需作很多修改就可运行。

       使程序可移植的第一步就是使用标准库函数,并且把它们和ANSI/ISO C标准中定义的头文件放在一起使用;第二步是尽可能使所写的程序适用于所有的编译程序,而不是仅仅适用于你现在所使用的编译程序;第三步是把不可移植的代码分离出来,假如你无法确定某段程序是否可移植,你就应该尽快注释出这一点。所以,注释对于程序的可移植性具有至关重要的作用,如果使用不当,势必会影响到程序的可移植性。

       但是,目前为止,我只知道了注释确实会影响到程序的可移植性,但是,对于它是如何影响的,我任存有疑虑。

     

    二、第17章   人,绩效和职业道德

    1.文章内容:

       在口语中,大家通常认为领导就是管人的,名称大概是经理。很多技术人员在展望将来的职业发展时,会说“我以后想做管人的”。其实,领导(Leader)和经理(Manager)是有区别的。

    我的疑惑:

       领导和经理有什么区别?

    我的思考:

       “经理把事情做正确。领导做正确的事情。” 传统智慧用这样的话鼓励经理们为自己挂上“领导”的标签,它让经理扮演靠得住的实干家,而领导则是全局在胸、运筹帷幄、精明老到的主管。大部分人更希望成为精明老到的主管而不是靠得住的实干家。

       经理和领导之间的差别比大多数人想象的要深奥得多, 优秀经理与优秀领导之间最重要的区别在于两者关注的焦点不同。优秀经理是向内看的,他们关注公司内部,深入了解每个人,了解每个员工在风格、目标、需求和动机等方面的差异。 而优秀领导正好相反,他们是向外看的,他们看外部竞争,看未来,看不同的前进路径,他们关注宏观格局,寻找各种联系和空隙,然后在阻力最弱的地方出奇制胜,他们必定有远见卓识、善于战略思维和行动,如果表演得出色,这无疑是一个至关重要的角色。

       优秀经理不是一些等着天降领导重任的小主管们,而优秀领导也不是一些见多识广的经理。经理与领导的核心活动是完全不同的。对一个人来讲,完全有这种可能:他是一位很出色的经理,却是一名很糟糕的领导。不过,对一个人来说,同样存在另一种可能:他当领导很出色却当不好经理。当然,也有少数才华出众的人,当领导或经理都能干得很出色。 如果混淆这两个角色,要求每个经理都成为领导,或者把“领导”简单定义为“经理”的高级形式,那么,至关重要的“催化剂”作用就会被低估、误解,继而无法发挥,如此,公司就会垮台。

     

    2.文章内容:

       软件团队中,所有人的工作被集成在一个软件产品中,互相依赖,产品功能受到用户赞扬或批评,都不能简单地完全对应于某一个人的工作。

    我的疑惑:

       既然软件产品是团队中每一个人共同劳动的成果,那么应当如何来正确衡量个人的绩效呢?

    我的思考:

       绩效衡量是指从质量和数量方面评估某种组织实体(例如:组织,过程,团队或个人)达到它们使命、目的、目标,行动步骤或达到希望标准的程度。在企业绩效管理中,绩效衡量扮演着一个举足轻重的角色,使用得当它可以成为大幅度提高组织绩效的助推器,使用不当则会变成组织变革和绩效提升的拦路虎。有效地使用绩效衡量方法可以对企业运营状况进行及时的反馈,根据这些反馈我们可以判断企业是否在向自己的组织目标迈进、员工是否需要培训、流程该如何优化重组等等。

       看了书上的内容,我明白了单靠工作量、资历、效率、队友评估、犯错数量等指标来衡量一个人的工作绩效,那是远远不够的。经过上网查阅资料后,我了了解到企业管理绩效衡量指标有以下几类:
    (1)战略管理评价:主要反映企业所制定战略规划的科学性,战略规划是否符合企业实际,员工对战略规划的认知程度,战略规划的保障措施及其执行力,以及战略规划的实施效果等方面的情况。
    (2)发展创新评价:主要反映企业在经营管理创新、工艺革新、技术改造、新产品开发、品牌培育、市场拓展、专利申请及核心技术研发等方面的措施及成效。
    (3)经营决策评价:主要反映企业在决策管理、决策程序、决策方法、决策执行、决策监督、责任追究等方面采取的措施及实施效果,重点反映企业是否存在重大经营决策失误。
    (4)风险控制评价:主要反映企业在财务风险、市场风险、技术风险、管理风险、信用风险和道德风险等方面的管理与控制措施及效果,包括风险控制标准、风险评估程序、风险防范与化解措施等。
    (5)基础管理评价:主要反映企业在制度建设、内部控制、重大事项管理、信息化建设、标准化管理等方面的情况,包括财务管理、对外投资、采购与销售、存货管理、质量管理、安全管理、法律事务等。
    (6)人力资源评价:主要反映企业人才结构、人才培养、人才引进、人才储备、人事调配、员工绩效管理、分配与激励、企业文化建设、员工工作热情等方面的情况。
    (7)行业影响评价:主要反映企业主营业务的市场占有率、对国民经济及区域经济的影响与带动力、主要产品的市场认可程度、是否具有核心竞争能力以及产业引导能力等方面的情况。
    (8)社会贡献评价:主要反映企业在资源节约、环境保护、吸纳就业、工资福利、安全生产、上缴税收、商业诚信、和谐社会建设等方面的贡献程度和社会责任的履行情况。

       所以,衡量一个人的工作绩效,应当从多方面来考虑,更何况,软件产品还是多人劳动的结果,这就更不能轻易马虎。所以,我认为,衡量一个人的工作绩效,应该综合以下方面来考虑:总体有效性、生产率、效率、利润、质量、事故、增长、旷工、人员调整、工作满意度、动机、士气、控制、冲突/融合、适应性/创新性、计划与目标设定、目标一致、组织目标内部化。

     

    3.文章内容:

       绝大部分工程师都在某一个企业工作,工程师的成长也和企业的兴衰有很大关系。企业兴旺,工程师也是与有荣焉,很多人觉得是自己的功劳,理所应当提薪升职;企业衰落,很多工程师未必觉得是自己的问题(我的代码很好的,都是经理、市场、老大的问题!);企业最后要裁员,很多人为了一些补偿和企业产生纠纷。

    我的疑惑:

       如何正确看待个人与企业的关系?个人应当对企业的成败负有怎样的责任?

    我的思考:

       企业的发展和员工个人成长是相辅相成的,也是一种相互依存的关系。没有企业的发展,就不会给员工提供好的发展环境,一个企业给我们提供了资源,提供了方针政策的方向,我们个人在企业方针政策的带领下发挥我们自己的能力。同时,企业要更好的发展,也离不开我们个人的发展,因为我们个人做得越好,企业也做得越强越大。

       企业组织行为通常只是依据财务或经济术语来加以界定:赚钱、股值上涨、积累或增加财富、有效使用资源或提供商品和服务等。由于目的单一,所有非财务和非经济的东西都被看作是获得目的的手段。但是,在我看来,认识公司的一个更好的方式,就是把公司看作是一个具有多元目的的组织。当然,经济目的是公司的一个基本目的;然而,企业组织也应当有其社会目的和环境目的。关键问题在于,要认识到每个目的都具有天然的价值,以相互关联的方式与其他目的联系在一起。

       责任是当代道德的一个关键概念,行为者的责任程度与其自由程度应该是一致的。责任涉及三个部分:责任主体,或者说由谁负责;责任内容,或者说负什么责;所要对之负责的权威,或者说对谁负责。不幸的是,人们想要拥有更多的自由,却不愿意承担更多的责任。但是,行为者的责任程度与其具有的自由程度应该是一致的,然而,自由与责任之间的这种基本联系,经常被人们忽略甚至拒斥,其实,自由仅仅是整个现象的否定方面,它的肯定方面是责任。自由事实上有堕为恣意妄为的危险,除非按照责任而生活。换句话说,自由空间愈大,责任也就愈大。不论是在公司还是在军队,高层领导比其下属都具有更大的自由空间,因此也要承担更大的责任,但这并不意味着下属就没有任何责任。

       总之,个人与企业有着密切相关的联系,个人对企业的成败也负有一定的责任,个人应当与企业同甘共苦,共同进退。这不仅仅是一个道德的要求,同时,这也是一个职业的基本要求。

     

  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/yangyc/p/8666711.html
Copyright © 2011-2022 走看看