给初级开发人员的建议
1. 学习基础知识
2. 如果你没有计算机科学学位,别担心
3. 如果你有计算机科学学位,别让它影响你的思维
4. 这些是你需要学习/复习的主题
5. 学习新技术时,了解其可能性并知道在哪里查找
6. 不要浪费时间掌握框架和库
7. 花时间享受你所在的地方
在过去的几年里,我与一些实习生和初级开发人员合作过。本文列出了我在指导他们时经常重复的一些建议。
某种程度上,如果可以的话,这些就是我想给年轻时的自己的建议。我希望自己在大学刚毕业、寻找开发工作时就知道这些建议。这些经验教训曾经帮助——或者说,本来可以——帮助我度过职业生涯的第一年,尤其是在我最终踏上软件开发之旅之后。
1. 学习基础知识
刚开始学习的时候,你该如何决定学习什么呢?编程语言和框架种类繁多。行业中充斥着各种流行术语,例如数据科学、机器学习、微服务、云计算、NoSQL、DevOps、区块链等等。此外,还有各种缩写。UI、UX、API、OOP、IoT、CMS、CDN、PaaS、SaaS,这些缩写究竟是什么意思呢?
如果你恰好对 JavaScript 生态系统或前端感兴趣(如果你没有计算机科学或 IT 背景,那么你可能还不太了解前端和后端开发人员之间的区别——到底有什么区别?全栈开发人员到底是什么?我刚开始的时候也不知道),你可能会被琳琅满目的 JavaScript 框架弄得眼花缭乱,它们似乎都在做着同样的事情。事实上,大多数流行的编程语言都是如此。流行催生了框架。
那么,你该如何决定选择哪种编程语言呢?你之前在某个博客上看到 JavaScript 代表着未来,后来又看到一篇博客声称“WebAssembly 将取代 JavaScript”。或许你应该学习 Java,所有企业似乎都在招聘 Java,但后来你听到朋友说 Kotlin 会取代 Java。你还能相信谁呢?你会选择一种能让你的简历更令人印象深刻的编程语言吗?但是,如果这种语言被另一种语言取代,会发生什么呢?
首先,你可以放心,所有流行的编程语言都不会有那么短的生命周期。它们之所以流行是有原因的,每种语言都有其特定的领域来解决特定的问题。如果它们在特定领域没有凭借其特性或工具表现出色,就不会流行。其次,所有编程语言的底层功能都是一样的:它们操作计算机的内存。因此,对其中一种语言的了解可以很好地应用于其他语言。
话虽如此,有些语言对初学者来说比其他语言更友好。例如,我不建议任何人将 JavaScript 和 C++ 作为第一语言。坚持学习 Java、Python 或 C 语言中的一种,并学好它。如果你这样做,到时候你就能很快掌握新的语言。不要浪费太多时间学习框架,让你的简历更臃肿。任何值得加入的开发团队都不会期望其初级员工成为框架专家。框架应该在工作中学习。
在学习所选语言时,你唯一应该关注的就是基础知识。除了学习你首选语言中变量、条件和循环的工作原理之外,了解类型系统的工作原理也很重要。粗略了解计算机内存的工作原理也是很好的。将这些知识与你的语言中可用的数据类型相结合,并了解如何使用常见的数据结构和算法,将帮助你成为一个有效的问题解决者,从而在技术面试中表现出色。此外,尝试进行足够的练习,以便能够快速编写简单问题的代码。如果你已经很好地掌握了基础知识,请练习指针和递归问题。当然,有些人会告诉你,在现实生活中你不需要经常使用它们,对于很多工作来说这可能是真的;然而,解决指针和递归问题会激发那种对编写好的代码非常有用的间接思维。
2. 如果你没有计算机科学学位,别担心
我并不认为计算机科学学位毫无用处。绝对不是。计算机科学学位是否物有所值是另一个问题,答案取决于你的情况以及授予该学位的具体学校。话虽如此,如果你没有学位也不用担心。只是要知道,你将与拥有学位的人竞争,因此存在一定的差距,你必须努力去弥补。
我们很荣幸能够在这样一个领域工作,你可以免费在网上获得相当于本科学位的课程。Coursera 提供许多优秀的课程,你可以免费旁听。此外,还有麻省理工学院的开放式课程、edX 等等。与许多其他自然科学不同,你在计算机科学领域的学习不会因为没有实验室而受到阻碍。你的笔记本电脑就是一个合适的实验室,可以用于所有你可能参加的在线课程。好好利用这项特权吧。不要低估良好教育的价值。
3. 如果你有计算机科学学位,别让它影响你的思维
如果你恰好拥有计算机科学学位,那你就领先一步了。但不要以此为借口变得傲慢,也不要犯下看不起那些没有学位的人的错误。那些自学编程的人很可能充满热情,这将使他们成为高效的开发人员。我认识的一些最优秀的开发人员并非来自计算机科学背景。
现在就利用你的时间来学习你在大学期间错过的课程。那些你计划选修但没来得及上的课程;那些被你忽略的课程。
4. 这些是你需要学习/复习的主题
以下是我认为对任何开发人员都有价值的知识主题列表。我将它们列为计算机科学学位提供的课程或科目,并按其重要性大致排序。显然,在找到工作之前,你不需要熟悉所有这些知识;你的目标应该是在开始工作后继续学习这些主题,因为从长远来看,这些知识会让你成为一名更优秀的程序员。
- 数据结构和算法
- 面向对象编程
- 编程语言(涵盖类型系统、函数式编程、函数式和面向对象编程的比较、解释器等的课程)
- 操作系统
- 硬件或系统编程(C/C++)
- 计算机组织/架构
- 编译器
如果你还没有在大学正式学习过计算机科学,这些科目将帮助你最快地弥补差距。网上有很多资源可以为你提供所有这些主题的充分背景知识。如果你目前正在攻读计算机科学学位,或者计划将来攻读计算机科学学位,请尽量确保在大学期间学习这些内容。如果你已经完成了计算机科学课程,你可能需要复习你错过的主题,并复习你已经学过的内容。
学习时,务必注重深度而非广度。你正在努力打造自己的事业,因此应该以精通你的技能为目标。精通没有捷径。
如果您有兴趣进入令人垂涎的人工智能或数据科学领域,您可以参考以下一些其他主题:
- 线性代数
- 多元微积分
- 本科水平统计学
- 机器学习
- 计算机视觉
- 深度学习
- 自然语言处理
5. 学习新技术时,了解其可能性并知道在哪里查找
工作很大一部分是阅读文档。记住某个库或框架的特性和功能毫无意义。随着你对某个框架的经验积累,你就会记住。在早期,你只需要了解你使用的每种技术可以构建什么,并确保你知道在哪里查找它们。我在第一份工作中从我的高级开发人员那里得到了这条建议,它一直对我有帮助。
6. 不要浪费时间掌握框架和库
我上面已经提到过这一点,你可能已经想知道我对框架有什么意见。虽然专注于自己喜欢的技术栈并积累专业知识很有价值,但我坚信职业生涯的早期阶段应该专注于学习基础知识。
我是一名跨 Web 栈的顾问,经常需要在各个项目之间奔波。在前端工作时,我感觉每隔一天就得在不同框架之间切换。在 React、React Native、Vue、Angular、jQuery、LWC、Aura、VisualForce、Redux、Redux Sagas、Apollo Client 等框架之间来回切换时,唯一能让我保持清醒的,就是我在职业生涯早期花在 JavaScript 上的功夫。了解这些框架和库背后的语言,有助于我快速学习新的语言。
要知道,如果每个人都只是依赖现有的框架和库,就不会有新的框架和库出现。因此,我的建议是学习基础知识,这样到时候你就可以自己动手编写了。这些都是作为一名程序员可以获得的更有价值的经验。
7. 花时间享受你所在的地方
随着你积累更多经验,如果你的工作至少还算称得上优秀,你的 LinkedIn 收件箱很快就会被招聘人员的邮件淹没。其中一些人也相当优秀。他们会向你承诺一份光鲜亮丽的新工作,薪水更高,项目更有趣,还能让你接触到更新、更现代化的技术栈。
如果你总是追逐下一个大目标,你永远无法享受现在的处境。花点时间欣赏你目前的项目、你的技术栈、你的工作,并充分利用你眼前的学习机会。
文章来源:https://dev.to/samkhan27/advice-to-junior-developers-30a3