我总结了很多品质,比如:
解决问题的能力
独立思考的能力
要好奇,要有探索的精神
逻辑是清晰的,在流行的语言中可以清楚地理解技术问题
良好的英语阅读能力
数学好
经过一段时间的观察,我发现所有上述特征,都可以通过行为习惯得到,也就是如果你有以下习惯,那么你可能拥有且不限于以上所有的特质。
大多数程序员喜欢谈论编程语言
编程语言是目前为止大多数程序员谈论的话题,他们喜欢讨论哪种编程语言更有优势,专注于编程语言列表,因为这样,一些人将会继续学习一种新的编程语言,而不是普通程序员的证书。相反,由于缺乏经验,另一部分无法分辨哪一种语言对他们来说是最好的,从而延迟了行动,陷入了无限的纠缠之中。在不同的编程语言的阵营之间有时会发生争吵,这被视为对他们的信仰的辩护,反过来,也会有一群旁观者。
大多数人都关注这个层次的编程语言,然而,最大的原因可能是编程语言是编程世界的门,它也是最实用的工具,学习一门编程语言,你可以使用一种新的方式和计算机交互。
但是,不同于现实世界,在现实世界中,学习一门外语,相当于打开一个新的世界,学习英语,例如,你可以免费穿梭在英语国家,了解他们的文化和历史,掌握第一手的外语知识,这样他们就可以帮助你更好的决策,可以说如何掌握一门外语可以让你认知线性增长。相反,在计算机世界中,你学习一种语言,它不会带给你1+1=2的影响,因为从本质上讲,我们的目的不是学习更多的编程语言,但使用电脑,帮助我们来完成特定的任务,想知道同样的任务,甚至可以通过几种不同的语言。
我曾经见过一个问题,一个提问者可能是一个新人,他说:我想学习编程,但我不知道我是否会先学习Python或Javascript。回答的人对他说:“你在这些事情上花的时间,也许能学到其中之一。”
是的,优秀的程序员不会花大量的时间编程语言,因为他们专注于更重要的事情。
大多数程序员都不重视基础
IT行业的门槛很低,任何学过编程语言的人都能进入这一行,更深层的意思是工作是重复性劳动,不需要太有创造力的人才。
在聊天时,经常讨论算法的主题。例如,“算法在工作中很重要并不重要。许多人给出的答案并不重要,因为他们在日常工作中不被使用。这是一个典型的实用主义的答案,也非常令人困惑,因为“日常工作比”它是真实的,但是这个事实并没有推导出算法对于这个结论来说并不重要。
算法是非常重要的,就像数学是所有学科的基础,所以它是非常重要的数学,算法是系统的灵魂,是区别不同的软件芯片,最典型的例子是谷歌的搜索引擎,它是依赖于著名的PageRank算法与其他市场上搜索产品不同,该算法直接影响到搜索体验,人们想要的结果的概率大。
提高算法的能力不仅可以提高软件的竞争力,昌平镇电脑培训认为还能提高我们的逻辑思维能力,人与人之间的差异实际上在于思维能力的差异,如果你每天都在敲门的话还有这类代码,你的思维有多大不会改变,但在人工智能的时代,你会考虑监督学习,无监督学习算法,我认为你的未来会更好。
使用一种特殊的编程语言、编程很牛,单单靠这个并不能说一名程序员/开发者就是优秀程序员/开发者。 快速发展的开发环境使得这个行业比我今天看到的任何一个行业都要发展迅速,这既有积极的一面也有消极的一面:今天的程序员/开发者有很多编程语言、开发工具和开发平台可选,但是建立一个安全、可扩展的环境却变得难了很多硬件和软件正日新月异地变得更加复杂,但现在学习新技术比过去要难太多了。以下是优秀程序员应当具备的品质:语言和工具(Languages and Tools:)任何程序员/开发者需要具备的第一个技能就是,能够用编程语言工作并会使用与之相关的主要开发工具,包括:工具、IDEs, web 框架, messaging APIs。程序设计方法(Programming Paradigm:)举例来说,很好地理解面向对象,这对使用强制式语言(Imperative Language也称过程式语言)写出可维护的代码至关重要。在企业开发中你会遇到各种不同的问题,理解多种程序设计方法并知道何时使用,将使这些问题迎刃而解。领域专长的知识(Domain Specific Knowledge:)如果想编写系统来解决特定领域内的问题,那么拥有该领域的专长知识将非常重要。尽管许多这样的知识是由项目的商业分析员(Business Analyst)来获悉,但如果开发者也能获取,那么跟用户的交流将会更加容易,而且更能够理解他们的专业词汇。人际关系(People Skills:)软件开发中最重要的技能之一就是能够与其他开发者一起高效工作?同事、质量/商业分析员(Quality/Business Analysts),客户,用户,很多很多……如果你能够很好地处理这些关系,那么成功的大路也离你不远矣。解决问题(Problem Solving:)有能力解决那些没有明显解决方法的问题,这一点在软件开发中很重要。当把你的应用配置到JBoss或者通过一个测试找到一个棘手bug的时候,理智地编程将成为调试一个类路径(class path)问题。沟通能力(Good Communication skills:)在软件世界中,人们通常认为好的沟通能力就是流利地说话,事实上这远不是。这指的是:你能够多么有效地与其他人交流。作为一名优秀的开发者,你应当能够很好地表达你的想法,很好地听,以及很好地掌控你与他人沟通的过程。读书(Read Books:)读大量书将了解很多不同的技术,读书使你对一种技术有了快速、直接的视角。通常你应当选择知名学者的书,他们推崇实践和用技术解决问题的多种方法。在这个过程中,你将学到很多并逐渐形成自己的方法。没准哪天你也就能出书了呢。使用一种特殊的编程语言、编程很牛,单单靠这个并不能说一名程序员/开发者就是优秀程序员/开发者。 快速发展的开发环境使得这个行业比我今天看到的任何一个行业都要发展迅速,这既有积极的一面也有消极的一面:今天的程序员/开发者有很多编程语言、开发工具和开发平台可选,但是建立一个安全、可扩展的环境却变得难了很多;硬件和软件正日新月异地变得更加复杂,但现在学习新技术比过去要难太多了。以下是优秀程序员应当具备的品质:语言和工具(Languages and Tools:) 任何程序员/开发者需要具备的第一个技能就是,能够用编程语言工作并会使用与之相关的主要开发工具,包括:工具、IDEs, web 框架, messaging APIs。程序设计方法(Programming Paradigm:)举例来说,很好地理解面向对象,这对使用强制式语言(Imperative Language也称过程式语言)写出可维护的代码至关重要。在企业开发中你会遇到各种不同的问题,理解多种程序设计方法并知道何时使用,将使这些问题迎刃而解。领域专长的知识(Domain Specific Knowledge:)如果想编写系统来解决特定领域内的问题,那么拥有该领域的专长知识将非常重要。尽管许多这样的知识是由项目的商业分析员(Business Analyst)来获悉,但如果开发者也能获取,那么跟用户的交流将会更加容易,而且更能够理解他们的专业词汇。人际关系(People Skills:) 软件开发中最重要的技能之一就是能够与其他开发者一起高效工作——同事、质量/商业分析员(Quality/Business Analysts),客户,用户,很多很多……如果你能够很好地处理这些关系,那么成功的大路也离你不远矣。解决问题(Problem Solving:) 有能力解决那些没有明显解决方法的问题,这一点在软件开发中很重要。当把你的应用配置到JBoss或者通过一个测试找到一个棘手bug的时候,理智地编程将成为调试一个类路径(class path)问题。沟通能力(Good Communication skills:) 在软件世界中,人们通常认为好的沟通能力就是流利地说话,事实上这远不是。这指的是:你能够多么有效地与其他人交流。作为一名优秀的开发者,你应当能够很好地表达你的想法,很好地听,以及很好地掌控你与他人沟通的过程。读书(Read Books:) 读大量书将了解很多不同的技术,读书使你对一种技术有了快速、直接的视角。通常你应当选择知名学者的书,他们推崇实践和用技术解决问题的多种方法。在这个过程中,你将学到很多并逐渐形成自己的方法。没准哪天你也就能出书了呢。遵循范例和最好的实践(Follow Patterns and Best Practices :) 范例和实践反映了技术指导、常见技术问题和基于真实事件的实践。学习的过程是循序渐进的,但是一劳永逸。这会节省你非常多的时间和精力,让你的工作更加有效。遵循一本“代码编程指南”(Code Design Guideline),经常使用代码分析工具将检测和分析你的代码。讨论/小组沟通(Discussion/Newsgroup:) 参加开发社区会提高你的领导能力以及贡献感,二者都是成功的必需品。在社区内参加一场含量较高的技术讨论将使你充满成就感,而且会增长你的知识,因为其中的智者会查看和评点你的解决方法,你也会查看和评点他们的。而且这个过程教会你接纳并感激别人的建议。如果她/他做出了积极的贡献,不要忘了赞扬和鼓励('pat someone on the back')。网络和数据库知识(Knowledge of Networking and Databases:)有人也许不赞成这点,但是一个优秀的开发者应当知道网络和数据库的基本东西。而且在思考解决方法的时候,不要忘记将二者考虑在内。拥有二者的知识,能够帮你写出更好的代码并节省你很多时间。博客、写文章(Blog/ Write Articles:) 我们中有谁能够记住每件事?我不能,所以我把他们记下来。当我需要的时候,可以回头翻阅参考。除此之外,我可以借此从读者那里获得反馈,让我对同样的问题收获更多的方法。我已经获悉了许多与我工作有关的反馈,虽然有好有坏,但我会一一验证,这个过程也让我受益匪浅。KISS 不要想歪了,这里的KISS不是你想的那样,是指让应用/方法直短、简单(Keep Implementations/Approaches Short and Simple的简写)。不要使用行话来让事情更加复杂,因为人们很难理解它们。最好的方法是简化你的设计并避免过度设计(over-engineering)的东西。像测试者一样思考(Think as a Tester:)开发者和测试者,来自两个不同阵营的两类人群,随时准备同彼此较量。我发现二者的合作将产生非常好的结果。既不会损害开发者的利益也不会损害测试者的利益。实际上,长期来看,像测试者一样思考有利于减少你代码的bug,而且会形成很好的编程习惯和思维。坚持一致是游戏规则(Consistency is the name of the game:) 你是否经常跳槽或者被你的薪水所打击?如果是,那么静坐下来放松下并重新规划。好好想想不要让你的决定天马行空,为了不断向前,你需要一个坚实的决定并坚持不懈。参加技术研讨会/大事件(Attend technology seminars and events:)如果你所在的城市有技术研讨会,一定要抽出时间参加。大部分的研讨会是免费的,而且会提供新技术的重要信息。万家通吃还是一门独大?(Jack of all or Master of One?:) 嗯……这个问题不好回答。在现在的环境下,你必须掌握一种以上的技术。尽管这不容易,但是好的开发者还是能够做到。其中的关键就在于适应性:如果你精于某种技术,那么给以机会你将较容易地在短期内掌握一种新技术。你不妨试试,多掌握一种技术可以让你在使用中对比、选择。最后,请记住你不是要永远做个程序员。所以一旦你自我满足并觉得自己是个优秀的程序员,你就得重新规划你自己(re-program yourself)。扩展你的兴趣。开发只是这个过程的一部分,了解用户和商业实际上是一种艺术,每个人应当以此为目标并努力掌握它。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)