tag 标签: 软件工程师

相关博文
  • 热度 30
    2015-3-29 15:59
    2188 次阅读|
    1 个评论
    作为一个开发者,最关心的不外乎提高自己的软件开发水平。那要从何做起呢?积累技术知识(比如Node或者No-SQL)?死磕那些经典的算法问题(比如气泡排序或者网址缩短)?或者是打牢基础?   作为一个程序员你的价值不是由你知道什么来衡量的,而是由你能做出什么来衡量的。两者看起来相似,但有着天壤之别。你的价值在于如何将项目不断向前推进,并带领团队一起进步。15年的开发生涯中,我从未需要去实现一个气泡排序算法或是网址缩短程序。   我要做的是花成千上万个小时来编写和重构账户管理工具、邮件系统,编辑套件、测试套件,整理业务逻辑,部署脚本、JS层,进行架构分析以及文档管理等等。这些才是真正有意义的东西,完成了这些我们才能迈上新台阶。 开发这些组件,就像搭建项目的一砖一瓦,需要花费几百上千小时的努力来琢磨。它们组成了复杂的系统,但它们本身却保持简单。软件之美就是“简单”。这些年的经验让我悟出的道理是,把时间花在编码和重构上,这比纯粹靠“才华”和空想更能实现目标。 执行、完成任务然后迭代,才能实现软件开发“简单和高效”的目标。深植于我们脑海深处的关于创业的宗旨,就是先构建基础,然后迭代。软件开发亦是如此。先开发一个粗糙的版本,然后重构、修补错误、精简。要得到结果,你得老老实实去写代码!去执行!   一些聪明的懒人,总是炫耀自己的才华,让同龄人为之惊叹。但一个公司这样做是不能成功的,伟大的产品不会靠吹嘘而来。公司要依靠的是那些起早贪黑、团结协作、踏实编码的人。吹嘘容易,实干不易,且行且珍惜。 业界一直存在这样的误解:一个商业公司要完成伟大的产品,需要靠那些小圈子的名人怪咖。可在现实生活中,这样恃才傲物的一小部分人虽然在感兴趣的方面有着惊人的才华,但与团队相处很不融洽,工作起来也很不沉稳。他们不仅没有实际成果,自以为是的优越感还会影响团队的氛围。他们总认为自己天赋异禀,想干才干,爱干才干,但他们影响了团队,还会扭曲其他人的价值观。 要成为真正伟大的开发者,应该从实干做起,遵循以下准则。   规范的函数和变量命名   难以置信,在编程中这是如此简单却又如此重要的法则。清晰的函数命名,常常伴随着清晰的逻辑实现。例如: def process_text string … end 这样的函数命名方式完全不能传达出来函数的功能是什么。而: def safe_convert_to_html string …… end 这样的函数命名方式,准确反映出了函数有且仅有什么作用。 除了“转换文本到HTML”之外,可能有开发者愿意实现其它功能,例如自动嵌入视频等,但通常这是不需要的。清晰规范的函数命名不仅能让人一眼看出它能做什么,也能让人知道它不能做什么。良好的命名规范可以提升代码可读性,让代码间关系更加清楚明白。不规范的命名,常常伴随着混乱的代码、BUG、糟糕的逻辑。 规范变量命名也同样重要,例如: if (u2.made 10.minutes.ago) !u2.tkn …… 这样的命名方式很难让人读懂,即便读懂了,也很难保证完全了解的作者的意图。这个变量命名很糟糕,不能传达任何信息。而且“并且不( !)”这样的语句本来就非常晦涩难懂,更别说在语句后面还跟着一个名词了。如果有人要重构这段代码的话,恐怕需要先费尽脑子搞清楚原作者是在干什么。如果将变量命名规范化,情况会很不一样。 if (new_user.created_at 10.minutes.ago) !new_user.invitation_token …… 当然,变量命名太过画蛇添足也不行。例如我们将这段代码,进一步注释成这样: user_is_recently_created = user.created_at 10.minutes.ago invitation_is_unsent = !user.invitation_token if user_is_recently_created invitation_is_unsent … user_recently_created,这个变量命名实在是浪费时间来解释显而易见的东西。 就像DHH说的那样,注释是个麻烦的东西,一旦逻辑改变,注释也要改变。如果代码能好的反映自身逻辑,便不需要注释。     积累——先求深,再求广   程序员在开发过程中,常常会遇到各种各样的问题,但很少是完全陌生、其它团队也没有遇到过的。在Stack Overflow上最吸引眼球的提问,大多曾在其它地方出现过。 多数时候,程序员所用的编程语言本身就自带了解决方案。笔者曾经调用一个封装好的内建函数,将一段60行代码重构到1行。 重复造车轮般的过程去实现那些编程语言内建的函数不仅浪费时间,也意味着程序的代码将更冗长,还可能引入bug,需要更多的单元测试和注释文档。 好好打牢自己的基础吧!如果你是一个ruby程序员,就好好学习Ruby丰富的数组方法;如果是Node开发者,就好好去理解node.js的架构;如果是Angular程序员,就去理解其内核背后的逻辑。在动手实现之前,先仔细查阅文档。记住,我们都站在巨人的肩膀上。把时间花去学习那些顶尖程序员的思路和方法,要正确的多。     培养对代码的嗅觉 很多程序员水平不错但是遇到了平台期,问题常常出在他们不知道如何提升自己。这也许是技术生涯里能够遇到的最糟糕的事情了。要想知道如何提升自己,首先得知道需要在哪方面有所提升。一个优秀的象棋手,总是会花时间研究其他优秀棋手的路数,对于一个优秀的程序员来说,也是如此。 要想提升自己,最好的办法莫过于培养对代码的嗅觉。哪怕不能清楚地说出原因,也能察觉到一段代码的问题在哪里。什么是代码嗅觉?比如读到一段很难懂的代码,会察觉到哪里有问题。面对一个很基础的功能,你会觉得语言本身应该有函数封装。要培养对代码的嗅觉,需要培养对代码的审美水平。代码之美,简单优雅! 在开发的过程中,应该力图将代码写的简单优雅。如果只能用复杂丑陋的方法实现,那起码要逻辑清晰。没有对优雅和糟糕代码的嗅觉,技术水平将难以提升。       提升代码可读性 Joel Spolsky曾经说过,Stack Exchange不仅造福那些提问者,也造福那些看到提问的阅读者。为什么?因为许多人遇到的问题都是相似的,这些相似的问题都可以参考这个解决方案进行处理,效用便最大化了。 程序员写代码时也应采用类似的策略。也许代码仅由你自己写,且只写了一次,但它会被很多人阅读、修改。所以,在写代码的时候,除了完成任务以外,还应力图不给后来人造成麻烦。在开发过程中,除了有良好的命名规范,还需要用严格的单元测试来保证代码足够耐用,经得起考验。种因得果,设想一下,一年之后在完全没有耐心,时间又紧迫的情况下,让你来读现在写下的代码,你理解那种心情吧!  
  • 热度 19
    2015-3-20 10:39
    1370 次阅读|
    0 个评论
    日前,赛灵思公司(Xilinx)面向全可编程SoC和MPSoC推出了一款软件定义SoC的开发环境SDSoC。这款开发环境极大地简化了SoC的编程体验,让嵌入式控制领域的系统架构师和软件工程师可以利用C/C++来同时做算法和功能的开发,并且在基础的硬件平台搭建好之后,便可以自由发挥,不再需要去求助于硬件工程师。 自赛灵思公司全球总裁兼CEO Moshe Gavrielov提出All Programmable Imperative(全可编程势在必行)的行业趋势后,该公司便一直在引领这个趋势——首先是取代标准芯片和定制芯片,其次是进入更广阔的嵌入式应用蓝海。那么,怎么样才能让更多的人能够使用赛灵思的产品呢?赛灵思推出了SDx的战略。 赛灵思自2014年4月开始先后发布了三款面向软件和系统工程师的软件定义开发环境SDx(图1,“SD”是软件定义的意思)。首先是针对网络推出的SDnet(“软”定义网络)。它能够让厂商用行为模型级的描述,把通信系统迅速实现出来。其次是针对数据中心推出的SDAccel(软件定义加速器)。在数据中心里要解决性能和功耗的问题,有很多应用场景要通过X86加FPGA的加速处理能力来做加速算法,SDAccel可以协助软件工程师把创意快速实现到整个X86和FPGA的流程中。此次推出的针对嵌入式设计SoC应用的SDSoC(软件定义SoC)意义更大,因为嵌入式控制无处不在,很多系统的设计和创新都是基于SoC平台进行设计的。这款设计环境将能使软件工程师也能够做硬件工程师的工作,在整个行业内必将产生出更大的影响力。那么,SDSoC具体是个怎么样的开发环境呢?它又有什么样的技术可以实现这样的目标呢? 图1:SDx三大法宝将FPGA运用拓展到软件工程师人群。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC让嵌入式系统软件设计人员直接参与到硬件设计 “今天我们介绍的是SDSoC,为什么我们要做这个软件开发的环境呢?最主要是在我们的产品系列里有SoC产品,全可编程SoC。这些产品系列有一个共同特点——它们之中都有ARM处理器和FPGA可编程资源。它们是全部硬件、全部软件可编程的产品,在使用的过程中,可以面向很多不同应用的场景。传统上我们面向开发的对象是硬件工程师更多,我们想通过这个开发的环境,让做软件的人员可以直接参与到产品的设计,把软件的创意通过它来很快地实现,变成一个真实的产品。这就是为什么我们要做SDSoC开发环境的最主要的理由。”赛灵思全球销售与市场亚太地区副总裁杨飞先生首先解释说(图2)。 图2:赛灵思全球销售与市场亚太地区副总裁杨飞讲述设计SDSoC开发环境的初衷。 赛灵思除了在半导体芯片领域持续领先,在设计方法论上更是不断创新。该公司五年前打造的Vivado设计套件,让设计工程师可以把他们设计通过该套件在硬件层面实现出来。同时,其还把设计层次拉高,可以让整个抽象性提高。这样做的好处是除了让传统硬件工程师可以参与以外,软件工程师和所有熟悉这样环境的工程师也可以有效地把FPGA给利用起来。SDx开发环境的推出,也是赛灵思认为很重要的一个策略方向,因为器件如果没有相关的设计方法论,整个设计时间和生产力就达不到用户想要的效果。 SDSoC工具面向Zynq全可编程SoC和MPSoC两个产品类型(都是基于ARM核的产品),其中包括28nm的Zynq SoC和16nm的MPSoC。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC提供类似ASSP编程体验的C/C++设计环境 工程师在做嵌入式设计的时候,可以用不同的方法论来解决相关问题——可以用CPU解决,也可以用ASSP(专用标准产品)来解决。CPU是纯软件编程的技术,有很多人会写C代码,因此CPU利用起来是比较灵活的。标准的ASSP是基于ARM和硬加速内核设计的,没有CPU这么灵活,但是也比较简单、比较容易。全可编程SoC性能很高、功能很好,但是其局限性是对硬件描述语言有认识的工程师才能开发相关产品。因此,其以前的应用环境没有CPU的开发环境这么好。“我们这次做的工作就是克服业界出现的问题,把整个SoC和MPSoC产品的开发环境做成跟平时习惯开发ASSP的软件工程师所习惯的环境,这样可以拉齐跟它们开发的关系。”杨总指出。 图3是SDSoC开发环境中所包含的资源功能。它与习惯开发的ASSP完全相同,可以用C/C++来做算法和功能的开发。它提供的系统级的特性描述功能可以做一些描述,比如有哪些函数希望用硬件来做,有哪些是希望用处理器来做,其中可以设计一些加速用的C和C++函数。最后是一个全系统优化的编译器。 图3:SDSoC开发环境与软件工程师习惯开发的ASSP完全相同,可以用C/C++来做算法和功能的开发。 这样的流程与传统的Zynq开发流程不一样的是,它面对的对象不是传统的硬件工程师,而是面向的是系统架构师和软件工程师。软件工程师很多时候对底层的硬件(包括数据流怎么去连接)这个概念不太清楚,以前他们没法去做相关的工作。而通过这个自动化的开发环境,它可以面向软件类的工程师,让他们也可以有效地来开发相关产品。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC基于Eclipse IDE设计,让软件工程师轻松上手 SDSoC基于软件工程师所熟悉的Eclipse IDE开发环境设计(图4)。软件工程师所要做的工作只是要把设计通过C/C++编好,在Eclipse IDE环境里形成不同函数;然后右击函数,就会跳出菜单,从而便可选择是通过硬件还是通过软件来实现。此外,这些选项里所调用的资源还有很多是经过优化的库,这样,软件工程师的工作效率就会得到很大程度的提高。 图4:SDSoC基于Eclipse IDE开发环境设计,可以在硬件实现和软件实现之间进行切换。 在SDSoC开发环境里有和ASSP开发一致的环境。为了让用户了解做这个设计,架构怎样才是最优,哪些功能可以用硬件来实现,哪些功能可以用软件来实现,该开发环境可以帮助做系统级的特性描述(图5)。这样便能让用户知道哪些部分要耗费多少资源,需要多少周期才能把事情做完;整个系统的设计里,有哪些通道是最关键的通道,对性能的影响在什么地方;应该怎么样选择来做最优设计等。嵌入式开发人员基本上都很熟悉相关环境,因此这对他们来说没有一个需要重新学习的过程。同时,这样还能使用户能够很快通过这个流程,找到系统级最优的设计。 图5:系统级的特性描述可对系统性能进行快速估算和自动测量。 此外,在做完这些工作后,就可以进行全系统优化的编译工作(图6)。整个设计中可利用的资源包括CPU和用来做硬加速的FPGA。整个函数拆分起来,有一部分是ARM代码,一部分是硬件加速的函数。ARM代码与硬件加速器怎么样才能把其中的数据通道给打通呢?这个全系统优化的编译器里有自动连接的功能,可以让这些数据自动生成,令ARM和硬加速的部分连接在一起。 图6:全系统优化编译器可实现ARM代码与硬件加速器之间的自动连接。 “这个流程的好处是,有了硬件和软件的整体化、全系统化优化的过程,与纯软件的设计相比,整个性能可以提升一百倍以上。对一个做系统的工程师来说,他感兴趣的是怎么样可以在把系统性能提高的同时,还可以用最低的功耗把设计给做出来。”杨总表示。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 平台开发人员专家级使用模型对性能和功耗实现最佳平衡 “我们还支持另外一个模式,叫做平台开发人员专家级使用模型(图7)。比如你要做一个挑战性很大的应用的时候,做视频的分析,视频流量很大,它里面系统的结构要怎么优化、怎么设计。我们可以让这个系统架构工程师来看看原始的数据,这里头的算法怎么去切割、怎么去复制,然后在处理器的部分和逻辑的部分,怎么可以把它给安排好,找到最佳的路径。找到之后,就可以直接把这个成果交给这个工程师,让这个工程师继续编程软件,那很快这个设计就可以做完。”杨总说道,“本来一个开发的工作需要十来个月的时间,可能现在三到六个月就可以做完,整个设计周期可以提高很多。这就是我们提供的专家级使用的模型,令开发人员可以更加优化、更加快速地完成开发的工作。” 图7:平台开发人员专家级使用模型可针对性能和功耗找到理想的系统架构;令开发人员可以更加快速地完成开发优化的工作。 一个例子是在做自动生成系统连接的时候,软件工程师并不知道其中数据是怎样流动的。处理器与逻辑之间可以通过ACP,也可以通过高性能带cache的、高性能不带cache的,或是通用接口的方式连接。它可以用软件,可以用DMA,可以用分散DMA,可以用处理器直接连接,也可以用FIFO的方式。用不同的资源来做,数据的移动速度是不一样的,当然速度越快越好,延时越小越好,因为这样系统的功能可以做到更高。SDSoC的工具就可以为软件工程师挑出一个最优的路径来走,这样他就不需要花时间来学习相关的工作,也不需要去计算这些报表,去决定怎么做。这是该工具可以帮助到他的地方,最重要的是可以缩短整个开发的流程。 为了加快开发的进度,SDSoC提供了很多库,包括赛灵思的库和其他第三方的库,有DSP、视频、定点、线性代数、BLAS、openCV的算法。用户不需要去做很多计算,就有很多现成的库可以使用。 SDSoC是一个综合的开发环境。接下来,赛灵思还将在该开发环境下,陆陆续续地提供一些针对某些特定应用场景的工具,即瞄准特定应用场景的库和支持。比如做视频、做图像、做软件无线电等相关应用的场景,赛灵思将会推出相关的配套元素。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC用户反馈:要早两年推出该有多好! 赛灵思SDSoC目前已有一些和客户合作的成功案例。赛灵思与ADI公司合作开发了一款Zynq SDR系统开发套件,通过SDSoC的开发环境,可以很快地把SDR平台的开发做出来(图8)。 图8:赛灵思与合作伙伴安富利、ADI开发的各种Zynq开发板,可令开发人员运用SDSoC和Vivado设计套件快速构建自己的定制平台。 一家做医疗和无人机等开发的公司Van Gogh Imaging,目前正在做3D计算机视觉的开发。ARM架构在智能性视觉方面优势很大,因为其中有算法和很高的数据带宽,通过硬加速可以做到很高性能的视频分析。有了SDSoC,在一个月之内就能把3D对象识别从概念变成现实的加速Zynq设计。 DAVE也是做嵌入式系统的公司。该公司利用SDSoC将Zynq SoC运用在一些医疗器械里,也是用很快的时间就把这些事情给做了出来。 “在国内推出SDSoC,很多客户反映,为什么两年前不推出来呢?以前需要一两年才能做好的事情,现在一两个月就可以做好。他们很期待这样的算法,可以令他们的生产力大幅提高。”杨总谈道。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 从演示效果看SDSoC能够给用户带来什么价值 在介绍完SDSoC之后,让我们再来看下SDSoC的实际演示效果,了解一下这个工具是怎么用的,用了之后有什么好处,又会给客户带来什么价值? 赛灵思亚太地区Zynq业务拓展经理罗霖先生演示的例子是视频监控(图9)——对前后两人的图像分别做一次滤波;然后把这两幅图像相减,得到一个差分图像;再做一次中值滤波,合并输出。在整个画面上如果有运动物体的话,可以用红线把边缘勾勒出来。整个开发的例子是C代码和SDSoC开发工具。整个设计,包括优化多次迭代,在两个礼拜内就能完成;过去做完优化可能需要两个月的时间。因此,这样对大家的生产力是一个极大的提高。 图9:赛灵思亚太地区Zynq业务拓展经理罗霖先生演示视频监控的例子。通过对比可以看出,视频监控在采用硬件加速后可以做到实时效果。 SDSoC目前支持的主流操作系统有Linux、FreeRTOS和裸机三种,今后赛灵思还会继续增加操作系统列表。“过去如果你用Zynq,光是把linux弄到Zynq上就需要很长时间。现在不需要担心要驱动任何程序,在这一部分就节省了大量的时间,我们全给弄好了。”罗经理表示。 最后,在演示效果时,罗霖对着摄像头挥手,谈道:“如果我不动,我手上是没有这个红色的边缘;如果我手稍微动一下,我手运动的轮廓都会有红色的边缘出来。现在这是硬件演示效果,大家可以看到非常流畅,是实时的。 “下面来看一下软件的效果。软件特别卡,一秒钟大概可以做到还不到一帧,非常不流畅。而硬件可以做到每秒60帧,就是可以看到系统的性能通过我们的SDSoC工具可以完全释放出来,有上百倍性能的提升。同时,在开发效率方面,可能过去要用两个月做的事情,现在用两个星期就可以做完。这就是SDSoC给开发者带来的价值。我们提供给软件工程师一个他们非常熟悉、非常易用的开发工具,这样他们能从第一天就上手,可以做SDSoC的开发。同时,他不用管上面的硬件细节,他只专注于他本身的算法和核心技术的开发。这样对于他来说,可以充分释放他的想象力跟创造力,打造出非常差异化的产品。” 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载
  • 热度 27
    2011-11-10 13:08
    4755 次阅读|
    8 个评论
           本人做软件工程师虽不过2年,而且仅限于学校范围内的软件开发,但基于对软件工程师这一职业的关注和热爱,结合本人之经验教训,将软件工程师的罪孽总结如下,希望能引起软件工程师朋友的重视,并一一对号入座,适时发现并纠正自身之罪孽,这将有助于软件工程师整体素质的提高。(仅供参考)      1.太过劳累,麻痹生活      杀伤力:10级      软件工程师的生活普遍没有规律,有一句名言,一个真正的软件工程师从不按早9晚5的生活过日子。这并非软件工程师独有的罪孽,随着社会竞争的加剧,中国很多其他职业也同时存在这一问题,只是在软件工程师这一独特群体身上体现的尤其突出,可谓有过之而无不及。拿我们工作室来说,每年的暑期开发是例行公事(每年秋季开学学校就要急着用我们的系统),在这段关键的开发期间,每人从早上9点工作到晚上12点,有时甚至吃住在工作室。如此,一个暑期方能完成整个项目。      软件工程师还有一个过于劳累的原因是太痴迷于程序编写,已经把写程序当成自己生活不可或缺的一部分。这是软件工程师的通病,一个真正的软件工程师的最大梦想是用一行行的代码去编织他们的世界。3721创始人,原雅虎中国总裁周鸿伟亦为软件工程师出身,虽然已改行从事风险投资,但一生感觉最快乐的事还是写程序。由此看见,写程序对软件工程师的魅力是如此之大。当然,写程序写到麻痹睡眠,麻痹生活也是正常之举了。      2.太过专注,麻木人情      杀伤力:8级      只有专注于程序设计,才能成为一名优秀的软件工程师,这是软件工程师的座右铭。然而这种专注,所付的代价也未免昂贵了点,可能麻木了人情,忽视了冷暖。网上调查的结果显示,一般的软件工程师(除了那些有着广泛的爱好,比如我)只局限于在软件工程师这一范围内结交知心朋友,因为大家可以合作项目,探讨技术,通过这种方式可以大幅提高软件工程师水平。但也正因如此,软件工程师的交际能力日渐衰退,交际范围日渐狭窄,这无疑将不利于软件工程师综合素质的提高。      我有个朋友,搞ACM(算法设计大赛)的,很牛。但在班上人际关系却不怎么好,首先他仅限于和ACM队员交往,不太主动和其他同学交往。其次,他经常一个人噼里啪啦的写程序,于是其他同学即便有程序上的问题,都不好意思去打搅他。同学告诉我,即便你厚着脸皮去请教他,他也可能因思维无法停滞而拒绝你,于是大家只好敬而远之。这样的软件工程师不在少数,给人的感觉是太过孤傲,太缺乏人情味,颇有一种高处不胜寒的味道。      3.太过专一,难以转型      杀伤力:9级      软件工程师是吃青春饭的群体。源于两点:1.软件开发中所用到的技术,大多更新换代非常频繁. 盖茨对软件开发人员说:4~5年后,现在的每句程序指令都得淘汰。这么快的更新速度,要求软件工程师必须有良好的创新能力和学习能力。很多软件工程师在 30岁以后将不具备这种能力,只有面临淘汰。何况IT行业人才辈出,长江后浪推前浪,无疑将加速这种优胜劣汰的机制。2.软件工程师的工作强度之大,是一般人难以承受的,这在第一点中已有说明,在此不便赘述。因此许多软件工程师在做了几年后发现自己后劲不足时谋求转型,但大多因为太专一于技术,缺乏综合能力而承受转型之痛。      在IT界不少名人从软件工程师做起,但后来实现了成功的转型,如金山董事长求伯君,总裁雷军,点击科技创始人王志东,百度创始人李彦宏等。此类转型之所以成功,除了扎实的技术外,更得利益于自身综合实力的储备。技术不是万能的,建议所有的软件工程师趁自己年轻时多多涉及其他知识,可以根据自己的爱好和实际情况做出选择。本人建议英语最好不要丢掉,有机会可以涉足管理,金融方面,还有一个重要的是结交朋友,多多益善,而且不限行业,三教九流为宜。      4.太过自信,缺乏沟通      杀伤力:7级      从金山大规模招聘游戏人才,建立成都亚丁工作室到宣讲会提出的团队精神大于个人主义的原则,方方面面昭示着当年求伯君孤军奋战写WPS的时代已经结束了。 IT行业的发展,软件规模的剧增,大规模解决方案的呼之欲出。。。。。。诸多迹象表明IT行业已经不再相信个人英雄主义了,只有秉承合作,开放的原则才能冲击IT行业的下一个制高点。      但我们还是很遗憾的看到,不少软件工程师在团队合作方面还有待加强。原因之一是之前没有团队开发的经验,习惯个人开发,在沟通能力上存在缺陷又不善于自我培养;原因之二是太过自信,这是一个很重要的原因,而且在高水平软件工程师身上体现的尤为突出。很多高水平软件工程师遇到问题不及时提出来,不是不敢提出,而是怕提出的问题遭队员笑话,有辱自己的水平。于是拼个鱼死网破都要自己搞定,走投无路时再去求教别人,这样的后果首先是降低了工作的效率,其次对整个项目的开发有害处,对整个团队的合作也有影响。      5.太过自负,玩世不恭      杀伤力:10级      过于自负,自认为技术很牛,看不起非技术人员,拿着软件工程师这块自诩的金字招牌,不屈服于现实的残酷凭自己的意志去发展,这是不少软件工程师易犯的臭毛病。和第4条太过自信颇有异曲同工之妙,不同之处在于程度较之已大大加深,表现方式也更为极端。      这主要体现于两点:1.看不起如营销,管理等非技术人员。拿营销人员来说,工作通常比软件工程师轻松,也没有软件工程师那么枯燥,陪客人吃吃饭,聊聊天可能一笔上千万的生意就谈下来了,一笔提成就划归帐下。这时软件工程师有意见了―――我辛辛苦苦熬夜写的程序难道还不如你轻轻松松的一顿饭值钱吗?我要说,你就还真不如人家值钱,所以千万不能歧视这类非技术人员,要知道挣大钱的往往是他们,还轮不到你软件工程师。2.自认为自己技术牛,可以改变一切而不考虑其可行性,这种人不占少数,但往往会碰壁,而且碰得头破血流。这让我想起了水木周平评论王志东推出Lavalava重归互联网一样,自认为技术很牛就可以得到市场的认同,谬矣,实在是自欺欺人!(这是他的观点,不代表我)      6.太过死板,缺乏情趣      杀伤力:9级      软件工程师不好**朋友(只因大多软件工程师都是男人),这是一个痛心疾首的但无法回避的惨酷现实。与其归咎于工作繁忙无法抽出时间陪女朋友这一客观因素,不如归咎于软件工程师太过死板,性格内向,缺乏情趣这一主观因素。      在软件工程师看来,是一就是一,是一就绝不会是二。如计算机处理系统指令一样,所有的都转化为二进制来实现。同样,大多软件工程师的思维方式也是这样的,他们希望尽量用代码来表现他们的思想,这从根本上造就了软件工程师死板的缺点。所以当他们面对自己喜欢的 MM时往往会不知所措,尚不能用传统方式顺畅的表达自己的爱意,更不要说用什么感动 MM的方式来表达了。一般的 MM最讨厌这种没有情趣的人了。当然,不排除有的 MM很喜欢软件工程师,因为他们很踏实,很傻,不会花心,不会叛变。但是现在的 MM都是要哄的,软件工程师虽很聪明,但在这一问题上并不占优势。所以,软件工程师单身也就是自然而然的事情了。。。。。。
  • 热度 38
    2011-9-5 16:20
    3656 次阅读|
    14 个评论
    今天出差刚回来,下午还是着急赶回了公司,取了一些下周去北京需要带的装备,看看是否离开的几天需要有事务需要去处理。有些空的时候,和Estella谈 谈她看完书的一些感受。有时候,不得不承认,同样的一个内容,同样的一些事情,自己处在“开发者”的角度,和现在处在给“开发者”是如此的不同,以至于有 些时候我有些恍惚。   曾几何时,我只是个开发者,我只是一个单纯的硬件工程师。那时候我认为,在一个项目团队里头,干好我自己的事情,和团队之中的软件工程师、布板工程师、机 构工程师、实验工程师和系统工程师协调各种细节问题,和项目管理纠缠时间节点,也会和工厂的工艺工程师研究一些焊接和制程过程的问题。更多的是在和芯片供 应商之间的交流,对元件和产品的各种特性的校核,做做各种过程文件,得到一个个产品的特性指标。并且看着各种实验特别是EMC实验的过程和结果,那是我以 前的生活,部分是我负责,部分是我支持,还有些是曾经的同事的故事。忽然之间,换了一份工作,也换了一种生活方式。   人总是一点一滴的在成长和成熟,有些事情我并没有准备,被赶鸭子上架,但是慢慢也在一次次的完善在舞台上的表演。也会更加严格的要求自己,调整着自己在职 位中的能力属性和时间分配。以前我很难想到,我需要在技术会议之中充当翻译(中=》英,英=》中)的角色,但是现在不由自主的就变成了必须完成的任务;甚 至某些时候,我可能是会议主持人,用着颤抖得声音,给诸多老板的老板们进行介绍。   以前我很难想到,我是一整个项目的接口人,各种信息和问题汇聚和交换的地方,大部分都是琐碎的事情,有些是我需要处理的,有些事情我需要去传递和找到解决 问题的人。我也没有想过,我真的在努力比较标准的制定基准,参与整个过程,并且充当嫁接沟通的桥梁;有时候则需要把整个标准进行翻译,比对和总结,整理出 那些通俗易懂的东西。这些是我以前不能想象的,不知不觉从事一年多的工作以后,我自然而然在承担着很多我以前不能的事情。   做得更好,做得让人理解,做得更进一步;不管喜欢与准备好与否,专注面对+用心解决。这可能是我一年来,彻底明白的一件事情,也是我以前一直被人诟病的方 面。但这也是大部分人的困惑,当你的工作与你的取向有差异的时候,是否有想过不太可能有完美的工作,把个人关注的和工作赋予的职责100%契合。相同的部 分意味着更多的兴趣和动力,相左的部分意味着什么呢?     想得多了,真得需要把直线思维给去除掉,正常的发展可能都是各种螺旋形前进方式,而看到的耀眼的成功,看上去直抵目标的直线是建立在一长段晦暗的准备(失 败)期的。事情永远不可能划根线自然就到了终点,而是紧紧地看着,一点点在走着。这可能也是欲速则不达的真意,也可能是工程师们成长的一道坎吧。   变得是方法和内容,不变的是态度和坚持。
  • 热度 25
    2009-12-23 21:22
    1966 次阅读|
    2 个评论
         我,08年毕业,和同学一起带着幻想来到深圳,现在的工作主要是硬件方面的工作,现扎起的工作也都是前人们遗留的结尾工作,唉!     原本对我的工作保有好大希望,可是我的热情却被老员工们带走了,呵呵!比较悲哀的是,身边的老前辈全走光了,只剩下我们一起来的。     看!我们的兄弟--软件科,队伍一天天壮大,士气亦愈来愈高涨!---我羡慕!     再看!我们,死气沉沉,一天天没头没脑的写文件,给兄弟们供货(焊板子),再按照兄弟们的设计原理图画PCB!---我无奈!     想当年,分立元器件横霸天下之时,我们是何等威风?     看今朝,集成元件铺天盖地,挟软件工程师几个C字母,便能令硬件工程师无处可去。     当然,我没有经验,现在不是抱怨的时候,但是整天这么没日没夜的重复着无技术含量的工作,压得我喘不过气,让我这个本想自学软件的人没了当日的豪情壮志,唉!我茫然!     现在的感觉:我是跑龙套的!     但是,我想当一名演员!
相关资源
  • 所需E币: 1
    时间: 2021-9-30 17:49
    大小: 1.52MB
    上传者: Argent
    从二极管到三极管,从单片机到多核MCU,3G网络到5G产品的普及,不管电子产品的集成度怎么高,其产品还是少不了电阻电容电感,每个元器件在电路中必然有其作用。单片机是芯片开发的基础,相信从中会获得您意想不到的知识。
  • 所需E币: 1
    时间: 2021-3-6 21:55
    大小: 600.1KB
    上传者: symic
    嵌入式软件工程师经典的面试题,网上收集的嵌入式面试题,后续逐步收集
  • 所需E币: 2
    时间: 2020-12-27 23:37
    大小: 193.77KB
    上传者: stanleylo2001
    Linux软件工程师上机实训资料详细说明
  • 所需E币: 0
    时间: 2020-11-16 23:36
    大小: 221.74KB
    上传者: stanleylo2001
    Linux软件工程师上机实训资料详细说明资源大小:221.74KB[摘要]Linux软件工程师上机实训本文是Linux软件工程师上机实训,主要内容包括Linux下常用命令和VI的使用、Linux下C语言的编译与调试、文件的操作、进程的创建、进程的控制、管道通信、信号机制、消息的发送与接收、共享存储区通信、数据库编程、网络编程等11个实训。&nbs