软件开发者成长完全攻略第1章:HowtoGetinHow-To-Get
发表时间:2023-10-03 13:01:09
文章来源:炫佑科技
浏览次数:208
菏泽炫佑科技
软件开发者成长完全攻略第1章:HowtoGetinHow-To-Get
原文地址:如何进入
如何进入--.png
当我刚开始学习软件开发时,我毫无头绪。
我感到非常沮丧。 我无法理解一切,我什至不认为我可以“掌握”编程。
我之所以告诉你这些,是因为我觉得你既然选择了我的书,就说明你可能和我当时的感受是一样的。
别担心,这是正常的。 事实上,这只是常态。
让我彻底澄清一下:你不需要成为天才,甚至不需要高于平均水平的智力,才能成为一名软件开发人员。
对于一个刚刚踏入软件开发之门的初学者来说,如果你不感到手足无措,感觉脚踝上绑着重物,被扔进池底,那么你可能做错了什么,或者你可能根本就不是一个人。 普通人——或者两者兼而有之。
无论如何,您应该知道,刚开始时会很困难且令人困惑,但它不会持续很长时间 - 我向您保证。
我是怎么开始的
我依稀记得我什么时候开始自学编程的。 那时的编程材料还没有现在那么多。 事实上,我根本没有任何信息。
我去下载了一个非常流行的MUD(多用户地下城,你可以把它想象成一个基于文本的魔兽世界,毕竟那是一个使用调制解调器拨号上网的时代)的源代码。
但我不明白我正在看的代码是什么意思。 我只知道我想创建我自己的 MUD 修改版本并为其添加新功能,而关键就隐藏在这些神秘的混乱文本中。
于是我开始乱搞,我改变了一些变量的值。 我试图找到控制暴击几率的代码,修改它,重新编译,看看会发生什么。
有时它会按我的预期工作,而有时它根本无法编译。 在探索代码的作用和不起作用的过程中,我学到了很多东西。
我仍然不明白我在修改什么,但是经过一周左右的“摸索”,我实际上创建了一个带有我自己添加的功能的新版本的 MUD。
距离我成为一名熟练的程序员还有很长的路要走,但我已经开始了——每个人都需要一个开始。
我讲这个故事是为了让你明白,相比直接拿起书本,相比去大学或者培训机构,相比其他任何事情……这才是入门编程的正确方式。
您必须熟悉代码并了解哪些方法可以使其工作,哪些其他方法不能。 (我坚信这是*好的学习方式。请参阅我的软技能书中有关学习的章节。)
然而,学习如何编码和进入软件开发世界之间存在很大差异。
是的,你必须先学会编码,但软件开发不仅仅是写代码。 本章讨论的是编码以外的技能。
了解这个职业
首先,您需要了解一些有关软件开发的知识。
这比你想象的更容易也更难。
本书有一整节专门讨论“软件开发技能”,但我想首先在这里进行快速概述。
软件开发不仅仅是编写代码。 编码是其中的重要组成部分,但如果您只知道如何编码,您可能不会走得太远 - 特别是如果您想在工作中脱颖而出。
软件开发背后的想法是自动化手动流程,或者创建一个新的自动化流程来完成手动无法完成的事情。
想象一下我现在使用的文字处理软件。 我正在使用文档来撰写这篇文章。
如果没有Docs或其他文字处理软件,我就必须使用打字机或手写来写文章。
如果我想格式化文章,我必须在打印之前手动完成。
如果我想纠正一些错误——尤其是拼写错误——我需要在手边准备一瓶修正液。 (也许还有一瓶威士忌。)
当然,现在能帮我做这些事情的不仅仅是Docs。 还有很多其他硬件或软件可以帮助我自动化手写或排版过程,但我想您已经明白了。
因此,在你上车之前软件开发者成长完全攻略第1章:HowtoGetinHow-To-Get,我需要强调一件事。 你越早知道这一点越好。
在实现自动化之前,您必须知道如何手动执行该操作。
了解需求
太多有抱负且经验丰富的开发人员在没有完全理解其软件功能需求的情况下进行开发。 他们想做的就是编写代码。 (这对于学习编码来说很好——如上面的 MUD 示例——但不适合开发企业级软件。)
当然,你比他们聪明,因为你现在正在读这本书。
找出要解决的问题是任何软件开发过程的**步。 您想要自动化什么流程?
不同的软件开发模型对这个问题有不同的方法,但对我们来说,目前这并不重要。 现在*重要的是,在开发实际编码之前,您需要某种方法来收集需求并了解需要解决的问题是什么。
这可以像与潜在客户谈论他们想要的软件及其具有哪些功能一样随意。 它也可以非常正式并编写标准文档。
设计
一旦您了解了需求是什么,您就可以开始设计如何使用代码来完成它——同样,您需要在开始编写代码之前完成设计。
将其视为代码架构的蓝图。 再次强调,不同的软件开发模式有不同的方式来解决这个问题,但现阶段*重要的是在开发代码之前需要进行某种程度的设计。
这适用于各种规模的软件。 一些研究过敏捷开发(后面章节讨论)的程序员感觉不需要任何设计,直接开始编码即可。 虽然前期设计在敏捷开发中并不重要,但设计仍然是必要的。
你不能只编写一个软件。
编码
设计完成后,您就可以开始为软件的功能编写一些测试(即测试驱动开发或TDD),也可以直接开始编写代码。 (我们将在后面的章节中介绍 TDD。)
编码是一个专门的话题,所以我不会在这里详细介绍,但我想推荐两本关于如何编写好的代码的必读书籍。
首先推荐史蒂夫的《代码百科全书》,这是一本所有程序员必读的经典书籍。
第二本书是Rober的《Clean Code》,另一本教你如何编写更好代码的经典书籍。
用目前的话来说,这两本书可以教你如何编写既可读又易于维护的优雅代码。
这两本书对我的编码技能产生了深远的影响,尤其是代码的清晰度和设计。
测试与发布
编码完成后,就该发布了,对吗?
错误的! 现在我们进入测试代码的过程。 同样,不同的开发模式有不同的方式来处理这个问题,但一般来说,在软件正式发布给用户之前需要进行一定程度的测试。
例如,在传统的瀑布式开发模型中,测试阶段是整个软件开发过程的*后阶段。 然而,在敏捷项目中,每次迭代都需要进行测试,通常需要两周左右的时间。
代码测试完成后,发布就开始了,发布有自己完整、独立的流程。
我们暂时不会详细讨论 - 稍后会有一整章专门讨论这一点 - 但发布过程本质上涉及将开发的软件部署到服务器,使其在应用程序商店中可用,或使用其他东西使其可用给用户。 到软件。 (这个过程可能相当复杂。)
在此过程中,代码可能(实际上必须)存储在源代码仓库中。 这个源代码仓库将管理不同版本的代码,并存储其在开发过程中的更改。
在一些比较复杂的应用中,会涉及到数据存储,这里我们也需要用到数据库。
数据库通常用来存储应用程序的用户数据或者一些配置信息,这些数据也需要随着代码一起更新。
许多软件开发团队使用某种形式的持续集成环境,在提交代码时自动构建代码。
编程不仅仅是写代码
*后,不要忘记调试。 作为一名开发人员,您将花费大部分时间来弄清楚为什么您的或其他人的代码无法正常工作。
如您所见,软件开发不仅仅是编写代码。
在获得真正的程序员工作之前,您需要了解所有这些技术。 此外,我希望您能够精通其中一些技术。
不要害怕,我写这本书的目的是帮助您实现上述目标——或者至少为您指明正确的方向。 您可能需要自己学习所有技术,但至少我会向您展示如何学习它们。
制定一个计划
好吧,约翰,现在我明白了软件开发不仅仅是编写代码,我愿意花很多时间调试它,但是你还没有告诉我如何开始吗? 怎么说?
嗯,是。 我知道你的意思,但你知道吗? 我有个好消息要告诉你:你已经开始了。 恭喜。
当您拿起一本书(例如这本书)并开始理解软件开发不仅仅是编写代码时,您已经比大多数其他开发人员有了更好的开始。
是的,是的,这有点让人感觉良好,但这是事实。 有一天软件开发,当你成为像我一样经验丰富的软件开发人员时,你也会说同样的话。
现在,让我们更实际一点,你需要制定一个计划。
是的,这是一个计划。 这是一个真正的、无需动脑筋的计划,它将使您从对软件开发一无所知(或几乎一无所知)成为一名经验丰富的开发人员。
你可以选择很多不同的路径——我将在接下来的章节中一一介绍它们——但你选择哪条路径并不是*重要的。 更重要的是你选择了一条路并坚持走下去。
整合计划
让我们看看您的计划应该是什么样子。
首先,你需要对自己目前的水平有一个正确的评估,弄清楚自己需要学习哪些知识。
您有软件开发经验吗?
你知道哪些软件开发语言吗?
您以前编写过任何应用程序,还是完全从头开始?
我之前提到的其他技能呢?
你掌握其中任何一个了吗?
您了解数据库、源代码版本控制、测试驱动开发、测试、调试或软件开发模式吗?
同时,问问自己软件开发想要往哪个方向发展。
很多新手可能想做游戏开发,但这现实吗? 如果是这样,你从哪里开始? 你是否下定决心,投入大量的时间去面对挑战,走完这条漫长而孤独的路?
太多的人在没有事先思考的情况下就朝着某个方向出发了。
花时间回答这些问题,以便您在开始之前有一个相当清晰的计划。
不要误会我的意思,我肯定会在本书中尽力帮助您解决这些问题,但我无法为您做所有事情。
我可以为您提供成为一名优秀甚至伟大的开发人员所需的所有信息,但您需要将这些信息放在一起并创建一个适合您的计划,然后遵循该计划。
创建计划
一旦您思考了这些问题,就该实际制定计划了。
制定计划的*佳方法是从你想要实现的目标开始倒推。
与“学习如何编程”或“成为一名软件开发人员”相比,你需要有一个更明确的目标,即你想成为一名开发人员的方向。
在本书的“你需要了解的软件开发知识”部分,我将介绍不同的软件开发角色和工作类型供你选择。 您还可以在线搜索以决定哪一个*适合您。
你的目标应该尽可能具体,这样你才能知道自己需要学习什么知识,如何制作简历和作品集,想要进入什么学校或培训机构,甚至想要申请什么样的工作。
我知道做出选择和下定决心是多么困难,但我怎么强调目标的重要性都不为过。
目标越具体,后续的学习就越容易。 您将确切地知道需要学习什么以及如何执行每一步。
谁想成为一名“运动员”?
想一想:假设您的目标是成为一名“运动员”。
这个目标太宽泛了。 如何训练自己成为一名“运动员”?
也许您举重和跑步,或者您可能训练游泳。 同时,你会去网球场练习击球。
你会努力完成所有的运动训练,以便当*终决定时,你可以加入任何运动队。
这听起来很荒谬,对吧? 这就像有人想成为“软件开发人员”一样荒谬 - 实际上更荒谬。
相反,您需要从一开始就选择一项运动。
一旦你选择了跑步方式,了解如何训练会让你的生活变得更轻松——相信我。
从目标开始倒推,确定实现目标所需的知识和行动。 完成这一步后,就该真正开始制定计划了。
你的计划的开始应该围绕你需要学习的所有技术。 弄清楚所有这些知识应该学习的顺序以及如何学习是至关重要的。
接下来,您需要弄清楚申请职位并找到**份工作需要什么。
*后,您需要有一个可靠的计划来获得这份工作。 你要去哪里找工作? 你需要做什么? 您要申请什么类型的工作?
我可能还给你补充一个计划,就是找到**份工作之后,如何继续提升自己的开发能力,学习更多的知识。
这里的信息可能有点太多,但不用担心。 我写这本书的目的是让您更轻松地完成这一切。
在接下来的几章中,我将帮助你弄清楚你想要掌握的技能以及如何学习它们,在接下来的章节中,我将向你描述找到工作的所有细节。
现在您可以开始考虑您的计划应该是什么样子,并尝试考虑您想成为什么类型的软件开发人员。
嘿约翰
但我真的不知道自己想成为什么类型的开发者?
这是一个很好的问题。 如果您是初学者,您甚至可能不知道有哪些选项可用 - 除了游戏开发人员。
幸运的是,这并不是一个很难解决的问题——尽管它需要您进行一些在线搜索。
在本书的后面,我将讨论某些类型的软件开发人员。 主要在“您需要了解的软件开发知识”部分,但您也需要自己进行搜索。
询问一些软件开发人员,您知道他们从事什么类型的软件开发以及他们属于什么类型的软件开发人员。
想想你更感兴趣创造什么,并搜索这个东西的相关技术和编程语言。
对于软件开发人员来说,现在有太多的技术和相关领域。
您想开发网络应用程序吗? 移动应用程序怎么样? 您想编写代码来控制冰箱的温度或将宇航员送入太空吗?
思考这些问题并进行搜索。 如果你提出正确的问题,答案就不难找到。
一个具体的例子
我一直觉得示例起着很大的作用,所以现在让我们看一个真实的场景,一个想要使用 Node.js 作为主要技术的 Web 开发人员的计划:
目标:成为一名 Node.js 开发人员
计划:
了解编写清晰代码的*佳实践。 了解如何构建 Node.js 应用程序。准备找工作 获取工作
一开始你的计划会很粗略,但是当你更多地了解你需要学习的内容时,你可以在计划中添加更多细节。
一开始就准备好计划很重要。 你可以随时修改或调整你的计划,但如果一开始就没有计划,你就会像无头苍蝇一样仓促行事,极有可能导致沮丧并放弃学习。
在下一章中,我将帮助您进一步完善您的计划,我们将讨论成为软件开发工程师所需掌握的技能。
炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等