在第一部分中,我提到了成为开发人员所涉及的技术技能。现在我要谈一些非技术性的技能。
4 学会沟通
编程归根结底是将人类思想转化为机器逻辑的艺术。因此,一半的工作在于理解和表达人类思想!
事实上,沟通是作为开发人员可以培养的最重要的一项技能。想想这份工作有多少:与客户、同事、主管、用户、开源贡献者、同行,甚至是你未来的自己沟通。你必须能够编写错误报告、审查代码、编写文档、创建规范、提出问题、回答问题……
语言问题
掌握人类语言很重要。流利地使用清晰、正确的英语(编程的通用语)非常重要。如果你是其他语言的母语人士,你也应该能够有效和流利地使用它。
语法和拼写很重要!似乎有一种社会推动避免这两种情况,但一个好的程序员不应该给自己这样的许可。如果你不能正确地使用更宽容的人类语言,那么你怎么能正确地使用一种没有错误空间的编程语言呢?
与他人交流时,适当的语言技能很重要。编程是一个真正的国际化、多元文化领域,尽管英语是主要语言,但很大一部分开发人员将英语作为第二或第三语言!正确使用该语言可确保每个人(不仅是母语人士)都能理解你。
如果你想提高你的英语技能,请考虑将 LanguageTool或 Grammarly添加到你的浏览器中。我还强烈推荐Gary Lutz 的 The Writer's Digest Grammar Desk Reference ,William Strunk 和 EB White 的 The Elements of Style
经常阅读
大多数成功的开发人员都会承认自己是狂热的读者,通常是小说和非小说。这似乎与学习成为一名开发人员的目标相切,但阅读是增加你的知识和你对英语语言的掌握的唯一最佳方式。
对编程文化的随意一瞥就会发现这种对阅读和语言的热爱。我们的行话中充斥着对道格拉斯•亚当斯、罗伯特•海因莱因、刘易斯•卡罗尔等人的引用。双关语和微妙的文字游戏经常出现在对话、评论甚至代码本身中。
每个人对小说的品味各不相同,但也有一些关于编程行业的非小说类书籍值得一读。我在推荐阅读部分中包含了一些内容。
重要的是要腾出时间阅读,并且阅读的不仅仅是技术书籍。
写作
伟大的程序员通常也是优秀的作家。由于我们在软件开发方面的经验,我们能够写出高质量的文章和书籍。
当然,写作和沟通技巧不只是偶然。这些必须被磨练,而做到这一点的最好方法就是通过写作!好消息是,现在互联网上这么多社区论坛,你(可能)已经是某个社区的成员,所以如果你想开始,只需点击社区的发布文章,开始写作。你写得越多,你就会越擅长。
再一次,这可能让人觉得无关紧要,但我保证这些技能会直接延续到软件开发中。
- 写作可以增强你将抽象概念转化为具体形式的能力。
- 写作可以提高你有效交流想法的能力,这是撰写评论、文档和错误报告的一项重要技能。
- 写作使你能够向他人展示你的问题和想法,这在寻求编程问题的帮助时至关重要。
- 写作是人与人之间的交流,可以接受建设性的反馈;这反过来又加强了其他三个!
5 解决难题
编程的核心是应用数学和逻辑。不,不,不,不要逃跑!我不是指数学课。(我们大多数人也讨厌这一点。)
大多数益智游戏固有的技能,你会发现几乎所有程序员都喜欢。它们对于编程也是必不可少的,这本身就是一个难题。你必须使用现有信息来查找缺失的数据(演绎推理)。解决一些问题需要你在一组数据中找到模式(归纳推理)。调试通常需要你从行为向后工作以找出错误的原因(溯因推理)。当然,编程语言本质上只是决策树(if X then Y else Z)。
数学也经常出现。显然,代数很常见,正如编程中“变量”的存在所证明的那样。软件开发中的不同主题使用线性代数、三角学、微积分、概率和统计中的概念来解决问题。
你可以通过三种方式强化这些技能:
解决难题!程序员喜欢各种各样的益智游戏,从数独到传送门。尝试各种。挑战自己。此外,你的职业发展部分通常不涉及玩游戏!
参与竞争性编码。 CodinGame和 HackerRank等网站提供了数百个编码难题,从琐碎到荒谬的困难。CodinGame(以及其他网站)还提供实时多人编码游戏,挑战你的技能。通过这些我学到了很多!
学习数学。如果你从未学过微积分、三角学或线性代数,那么现在是开始的好时机。计算机编程的许多分支都依赖于这些概念,但即使你很少使用你的技能,额外的高等数学练习仍然会提高你最重要的逻辑技能。