充分理解您作为软件开发人员所知道的和不知道的一切
作为软件开发人员,不仅仅是了解如何处理冗长的代码。 当然,这是它的一个方面,也是非常重要的一个方面,但是要真正发挥作用,您还需要了解更多内容。
我一直发现,理清自己需要学习的知识以增强自己作为开发人员的技能以及如何不断填补我的知识空白在一定程度上具有挑战性。 软件领域在不断发展,我需要学习的东西列表越来越多。 棘手的一点是,当您刚入门时,您并不真正知道自己不知道什么。
那里有数百种编程语言和大量不同的框架。 您可以关注不同的编程范例。 更进一步,您选择工作的每个行业通常都需要一些特定于业务的专业知识。 再加上您需要的所有“在职”技能,表明您需要跟踪很多事情。
我发现这特别重要,因为它也提出了软件开发人员如何选择定义自己的问题。 您是否认为自己是Java开发人员? 还是您是一位经验丰富的Web开发人员,而他恰好在Python方面拥有一些专业知识? 还是无论角色如何,您是否都对大数据应用程序的工作绝对着迷?
随着时间的流逝,我发现将我的知识库与五个主要垂直领域保持一致是很有帮助的:
- 编程基础
- 技术深度
- 技术领域知识
- 系统知识
- 商业知识
大多数开发人员都熟悉前几个,但请允许我详细说明。
编程基础
希望所有开发人员都对基本的编程概念有基本的了解。 显然,这包括与编程有关的简单思想,例如变量,函数,循环等。但是,开发人员也应该对数据结构和算法设计以及诸如面向对象设计,函数式编程,迭代式编程的不同编程范例有扎实的理解。等等。
大多数正式的入门编程课程也倾向于充分强调这一点,这是有充分理由的。 最终,对这些概念有充分的了解将为您作为程序员所做的其他一切铺平道路。 尤其是在早期,当您只是在学习编码时,最好尽可能地巩固这些概念。
您的基础知识还包括您编写良好代码的能力。 在编写干净,可维护的代码时,学习最佳实践非常重要。 尽管每种语言都有其自己的最佳实践集,但是您应该学习一些原则 ,以确保无论环境如何,始终编写符合要求的代码。
技术深度
显然,仅仅知道什么是for循环并不能使您成为一名软件开发人员。 通常,下一步是获取您所学的所有知识,并将其应用于几种编程语言中。
我通常喜欢争辩说,学习如何适应不同的编程环境并快速选择新框架比真正擅长于其中任何一个框架都更为重要。 大多数流行语言都足够类似,您只需稍加练习即可在相对较短的时间内开始工作。
但是我也知道,尽管大多数编程语言在基本层面上都是相似的,但每种语言都有其自己的怪癖,值得超越特定点加以特别注意。 JavaScript是一个经典示例。 您可以在短短几周内就可以开始编写具有功能性的JavaScript,甚至还可以熟练掌握。 但是,掌握该语言必须提供的一些最高级的概念通常需要几个月甚至几年的时间。 这正是您的技术知识深度发挥作用的地方。 许多雇主珍视的正是这种专业知识。
不幸的是,真正擅长某事也是一把双刃剑。 尽管成为任何一种语言的专家都会使您对该领域更加满意,但是这也使您不太可能尝试自己不熟悉的事物。 容易陷入为您所做的一切利用单一技术的陷阱。
在最长的时间里,我认为自己完全是Rails开发人员。 我花了几个月的时间来掌握框架的来龙去脉,以至于使用其他任何工具来构建网站都显得荒谬。 这也使我不太可能考虑需要其他知识的工作。
技术领域知识
这与上一点有松散的关系,但涵盖了您使用的软件的一般领域 。 例如,作为Web开发人员的某人可能需要对Web的工作方式有所了解。 例如,对HTTP协议,REST API和数据库的基本了解可能会走很长一段路。
大多数现代Web框架都将其抽象化,为您完成了许多繁重的工作。 但是,对幕后情况有基本的了解仍然可以使您成为更灵活的开发人员。 您可以更改正在使用的语言,然后使用完全不熟悉的语法移至某些语言。 或者,您曾经使用过的框架现在已过时,需要换成新的东西。 这些都不会改变互联网的根本运作方式。 因此,有了这些知识,您就可以立马了。 它为您提供了一个更好的起点,您可以从中开始填补自己的知识空白。
对于任何软件开发领域都是如此。 移动开发,桌面开发,数据科学应用程序,嵌入式系统,图形工程等都是软件开发中复杂的子领域,每个子领域都有自己独特的技术挑战。 一个人通常可能需要多年的经验才能完全掌握与之相关的所有复杂性和实质性。
系统知识
每个代码库都是不同的,并且具有自己的个性。 任何已经存在一段时间的公司,其代码库都可能随着时间的推移而发展。 许多开发人员都在进行此工作。 对于使用时间较长的公司,可能仍会保留一些旧代码。 替代地,在代码库周围可能会有大量的死代码,从而降低了代码库的整体质量。 多年前为解决用例而创建的数据抽象可能不再有意义。 通常,您需要熟悉围绕代码本身的很多基础结构。
无论如何,要了解您正在处理的系统本身就需要进行一些工作。 这也是至关重要的,因为对您正在使用的内容的有限了解会减慢您的速度或进一步降低代码质量。 这些都不是理想的结果。
不幸的是,这通常不是您可以简单地自己学习的东西。 理解代码不同部分的唯一方法是随着时间的推移使用它们,并逐步建立您的理解。 在这里,团队高级成员的监督非常重要-他们可以确保您的代码仍然符合标准并且不会无意间破坏某些内容。
商业知识
最后,了解您正在开发的产品的核心业务也很重要。 这肯定在一个行业与下一个行业之间有所不同。 作为开发人员,除非您身处少数行业,否则可能不会期望您这样做。 某些行业,例如金融,AdTech或HealthTech,非常复杂,需要一些专门的非技术知识。
但是即使在其他行业,我也会认为拥有业务知识只会是一件积极的事情。 这不仅使您更加了解,还使您可以编写更好的代码。 作为开发人员的一部分工作是捕获外部世界中存在的关系并使用代码进行交流。 更好地了解这些关系有助于您做出更好的设计决策。
最终,没有一个事实可以解决软件开发庞大而复杂的事实。 从未有需要学习的东西或想法,探索短缺,而你根本没有完全完成。 变得更好的唯一方法是保持好奇心,意识到自己的盲点,并继续努力消除盲点。 干杯! :-)
From: https://hackernoon.com/defining-your-domain-8ac4b6d7be0f