银河初级开发者指南

对于许多人来说,开始软件开发似乎太困难且繁琐的任务。 实际上,您只需要一台计算机并且对软件开发非常感兴趣即可上手。 在这个故事中,我将介绍软件开发的所有基本知识,并介绍一些您以前可能没有想到的主题。 尽管这个故事不会为您做最艰苦的工作,但它仍然有望将您踢到足以开始的脚步。

系好安全带,然后走吧!

银河初级开发者指南

缩写和定义

对于特别是初级开发人员,此故事中可能会有一些您不理解的单词和缩写。 我已经收集了一些此列表,因此,如果您发现一个您不理解的单词,可以随时返回本章。

  • 编程语言-转换为计算机执行指令的正式语言
  • 源代码 —包含特定于编程语言格式的文本的文件。 文件是实际编程的地方
  • 构建/编译 -将源代码转换为机器可读格式,例如可执行文件
  • 调试 -使用调试器工具或其他调试方法在源代码中查找问题
  • 开源- “开源软件(OSS)是一种计算机软件,其源代码与许可证一起提供,版权所有者拥有向任何人和出于任何目的学习,更改和分发该软件的权利。” -*
  • IDE —集成开发环境,如文本编辑器中的功能,支持编译,调试和其他与软件构建有关的活动
  • API —应用程序编程接口。 一组定义的方法,可用于在软件组件之间进行通信
  • UML —统一建模语言。 用于以标准方式可视化系统架构的建模语言
  • SQL —结构化查询语言。 用于管理关系数据库中的数据
  • CPU —*处理器,与处理器相同。 计算机中用于执行计算机程序指令的组件
  • RAM —随机存取存储器。 CPU中正在运行的数据和机器代码的运行时存储
  • 软件要求 -由管理人员,规范,客户或另一方提供/提供的软件组件的必需功能和非功能功能

选择您的母语

银河初级开发者指南

您可能已经知道,有多种不同的编程语言。 最难的部分是选择应该从哪开始。 我会看到选择第一种编程语言可以是以下各项的总和或单个值:

  1. 易于学习和编写。 语法简单,学习曲线柔和的语言可能是您所尊重的一种价值。 如果代码更容易编写,您很可能不得不花费更少的时间查找文档或为建立额外的时间而苦苦挣扎。 易于学习的语言的示例是脚本语言,例如Python或PHP。 您应该查看http://www.99-bottles-of-beer.net来比较不同语言之间的语法,并了解最适合您的语法。
  2. 最常用的语言。 许多人使用的语言必须具有良好的语言。 如果您想成为时髦人士并追随主流,这对您可能是有价值的方面。 根据*HackerRank开发人员的调查, Java语言是当前使用最广泛的编程语言。
  3. 雇主最想要的语言。 如果您想以开发人员的身份工作,这可能是选择第一语言的最重要方面。 从调查中可以看出,最需要的程序员是了解Javascript框架的程序员。 当然,这在本地可能会发生很大变化,您应该尝试在本地进行工作搜索,以了解最需要哪种开发人员。 当前,至少在我居住的地方,对拥有任何编程语言知识的开发人员都有很多需求,因此使用哪种语言都没有太大关系。
  4. 性能。 这是您在寻找编程语言时要考虑的最有趣的方面之一。 如您所知,最现代的语言(例如JavaPHP)并不是市场上性能最高的语言。 如果您真的想一点一点地了解代码,建议您使用C甚至汇编语言。
  5. 由科技巨头。 如果您有为技术巨头工作的梦想,则应该学习公司特定的一种语言; 谷歌, 哈克为Facebook和斯威夫特为苹果。 这些语言在这些公司之外也被使用,因此即使您没有找到理想的工作,您仍然有经验。
  6. 功能丰富。 如果您正在寻找功能丰富的语言,可以从语言本身中利用许多现有代码,那么我建议您从Java开始。 它内置了大量的事物,您可以获得更多的开源软件来帮助您构建事物。

想想您想通过编程技能实现什么? 是要找到工作,打动您的朋友,建立机器人,建立自己的网站还是其他? 接下来,我收集了您可能感兴趣的一些领域,以及哪些编程语言主要用于这些方面:

  • 网站和网页游戏-HTML,Javascript,CSS,Java,PHP
  • 微控制器— C ++,C,汇编
  • 桌面程序-.NET,Qt,C ++,Java
  • 游戏开发— C#,C ++
  • 手机游戏开发-C ++,Java,Swift,Objective-C

该列表并不完整,但是可以让您了解可以使用哪种搜索词来寻找最佳语言。

实际上与语言无关

现在您可能已经知道在开发的第一步要开始使用哪种语言,因此我不得不让您失望,并告诉您实际上这不是您应该训练的语言。 编程语言是一种语言。 这是一种像任何自然语言一样表达自己的方式。 虽然了解一种编程语言可以完成一项任务,但不一定会使您的思维定势在所需位置。 考虑编程时,至少要考虑以下几个方面:

  • 解决问题。 这实际上是软件开发中最关键的方面。 如果您不编码就不知道如何解决问题,即使您知道世界上所有的编程语言,也无法做到。
  • 阅读。 如果您使用软件,您将会学到很多东西。 至少有80%的时间将用于阅读其他人的代码,API文档,规范等。了解如何阅读和理解代码实际上非常重要。
  • 软件体系结构 尽管您很可能不会以某个大型项目的总设计师开始,但仍然有必要了解一些有关软件体系结构的知识。 至少了解有关MVC(模型-视图-控制器)模式的知识,并学习阅读UML图表。 如果您加入一个建立架构的新团队,并且将漂亮的图像转换为功能代码,那这一点尤其重要。
  • 面向对象 与面向对象编程中一样。 大多数现代语言都是面向对象的语言。 基本上,一旦您了解了这些语言中的任何一种的工作原理,就已经涵盖了比您知道的更多的语言。 因此,如果您不打算进行一些底层编程,请从一开始就很好地学习它。
  • 数据库。 我们中的某些人永远不会使用单个数据库,但是它们仍然非常有趣,可以为软件工程师增加很多价值。 因此,考虑学习SQL的基础知识只是为了了解这些东西是如何工作的,以及将来如何使用它们。
  • 计算机架构。 要拥有基本的专门知识,所有软件工程师都需要掌握计算机中正在发生的事情。 什么是RAM?如何使用?CPU如何工作?多任务处理如何? 尽管您可能不需要在项目中直接使用它们,但是对于每个将位从零转换为一的人(即使在进行Web编程时),这都是一个很好的基础知识。

开发人员所需的大多数技能根本与编程语言无关。 语言使人们有可能去做事情,而软件开发人员却可以去做。 永远不要低估缺乏编程语言技能的开发人员-他/她可能比您想像的还要了解更多。

查找工具箱

银河初级开发者指南

我需要什么程序才能开始编写? 实际上,这取决于您选择的许多编程语言。 大多数语言,例如C,C ++,Go和Java,都需要一些编译器来构建机器可执行代码。 某些语言(例如Python,PHP和其他脚本语言)在运行之前不需要进行编译,但仍然需要其下的框架才能产生一些输出。

互联网上有大量针对所有主要语言的教程,其中包含有关如何在不同操作系统上为不同语言设置构建环境的信息。

对我来说,一直很清楚所有开发都是在Linux平台上完成的。 有人可能会对此争论不休,并且使用Windows或Mac,但都是一样的-您可以在任何平台上进行软件开发。 如果您不熟悉Linux,我强烈建议您尝试一些简单的发行版(例如Ubuntu)进行软件开发。 您甚至可以将其安装在名为VirtualBox的工具上,然后在Windows / Mac中运行它。 为此,再次从Internet搜索教程。

另一个重要的发现是您选择的文本编辑器。 您可以选择许多文本编辑器和IDE,以下是最常用的编辑器和列表:

  • Eclipse —用于几乎所有语言的开发的IDE。 非常肿,尤其是如果您安装了许多插件。
  • Sublime Text-最新的髋关节编辑器之一。 快速而全面的编辑器。
  • NetBeans —另一个肿的IDE,可以使用多种语言进行开发。
  • 原子 - “面向21世纪**的文本编辑器”。 非常用户友好,快速,美观。
  • Notepad ++ —周围最常用的编辑器之一。 我的诚实观点是相当不错的基本编辑。
  • Vim —想看起来像一个黑客并且仍然非常有生产力吗? 使用Vim。 (还要查看我的Vim速成课程
  • Emacs-另一个提高生产力的编辑器,许多程序员使用。 程序员们一直在争论哪个更好。

除了列出的之外,还有来自JetBrains等的大量商业编辑器,而不会忘记每个人都喜欢的Microsoft Visual Studio 我建议您至少尝试2–3个编辑器,然后看看最适合您的感觉。

每个开发人员在其工具箱中必须拥有的必备工具是版本控制。 版本控制用于跟踪不同贡献者对源文件的更改。 如果您与其他人一起工作,这是必须拥有的,并且如果您独自开发,它也会有很大帮助。

最常用的两个版本控制系统是GitSubversion 尽管Git如今越来越受欢迎,但它可能是您迟早会喜欢Subversion。 我建议您至少学习如何使用Git和Subversion的一些基础知识。 有真棒在线教程提供的Git 这里这样检查出来。

您的第一个程序

当某人开始学习编程时,他们通常从编写输出著名词:“ Hello world”的程序开始。 实际上,有一个网站可以在https://helloworldcollection.github.io上找到使用500多种不同编程语言进行操作的示例,如果您有兴趣的话。

我建议您从简单的“ Hello world”程序开始,以完成任务。 特别是如果您的语言选择需要编译,则可能需要一段时间才能了解如何构建和运行它。

整理好所有可以从程序中实际输出的内容之后,您应该为第一个实际程序想到一个主意。 它可能只是解析输入文本或小型游戏的简单工具。 开始您最感兴趣的事情。

在开始项目之前,我建议您为项目创建存储库,例如到GitHub GitHub是一项在线服务,您可以在其中托管您的Git项目,为其他项目做贡献以及与其他开发人员进行协作。 用户界面非常聪明,您可以轻松找到版本历史记录和对项目所做的更改。 如果您不愿意将代码公开发布,则仍应使用该项目的版本控制,例如本地git存储库。

银河初级开发者指南
著名的GitHub徽标

另外,您可能要确保您的程序能够按预期工作。 我建议您查看针对所选语言的可用测试框架,例如googletest for C ++或Codeception for PHP。 通过测试,您可以证明功能并防止代码中的进一步缺陷。 测试真的很重要,尤其是当您的软件不断增长并进行更多抽象时。 同样,所有现代软件公司都在某些测试框架上进行自动测试,因此至少对其中一些有所了解对您的经验也有好处。

获得帮助

开始使用软件时,最关键的事情之一就是寻求帮助。 每个开发人员都会不时碰壁 ,只是无法自己解决方案。 信息的最重要来源是程序员程序员-您的同事,学校朋友甚至您的家人。 您应该记住,没有愚蠢的问题,只有愚蠢的答案。 这也适用于您询问有关软件开发的问题。

另外,您也不要忘记为程序员提供的所有在线服务,例如:

  • * —也许是寻找特定主题答案的第一位。 非常活跃的开发人员社区,提出并回答问题。
  • IRC —不错的老式Internet中继聊天。 程序员可以通过许多渠道获得专家帮助。 只需使用您喜欢的搜索引擎进行搜索。
  • Reddit-非常受欢迎的讨论区,您还可以在其中找到一些答案。 例如,请参阅编程学习 编程主题。
  • 书籍-有大量用于软件开发的文献,最难的是找到最好的书籍。 在本故事的结尾,我将收集很少的建议。
  • Youtube —也是查找信息的好地方,特别是由年轻的程序员使用。 特别是来自不同会议(例如FOSDEM )的录制的演讲可以为您提供有关软件开发的未来的大量信息。

练习练习

除了刚开始的项目,您还应该在其他方法上练习软件开发。 很少有(也是在线服务)专门从事此工作。 仅提及其中的几个: HackerRankCodility 这些服务使您可以完成各种困难的编程挑战。 一些公司实际上使用这些服务来预选职位空缺,这就是为什么它们也是未来求职的好习惯。

学习新事物的一种好方法是重构自己的代码。 或者,如果您胆量大,也可以由其他人编写代码。 提高性能,优化内存使用或简化复杂性可以教会您许多新技术和编程语言功能。 您可能要考虑在GitHub中添加一些开源软件,或者邀请您的朋友来处理您自己的项目。 通常最好的学习方法是阅读和理解别人编写的代码。

另外,您可能想参加一些培训或去学校学习软件开发。 这可能会帮助您入门,但不幸的是,它不会完成繁重的工作。 考虑到您的未来职业生涯,大多数教学仅涉及软件开发的内容或侧重于完全错误的事情。 从个人经验来看,只有那些在业余时间(而不是在学校)上进行软件开发的人才真正将其发展为职业。

推荐读物

银河初级开发者指南

您可能需要考虑阅读一些书籍:

  • Code Craft-适用于所有技能开发人员的优秀书籍。 从软件开发的最基础开始,一直到上层流程。
  • 设计模式 -伟大的详细描述和软件构造中最常用的设计模式的体系结构示例。 如果您想担任架构师或核心软件工程师,则必须阅读。
  • 代码完成2 —也是一本非常不错的书,并且为程序员的所有经验水平所熟悉。 讲解软件开发的艺术和科学。
  • **编码面试:150个编程问题和解答 —标题说明了一切。 如果您正在寻找从事软件开发人员的工作,请阅读此内容。
  • 神话中的人月 -本书很经典,但考虑到现代软件开发,仍然有很多内容。 我认为这是所有软件开发人员必须阅读的内容。

如果您还有更多好书,请在评论中让我知道!

结论

无论您做什么,都没有学习编程的捷径。 一遍又一遍地练习,提问和创造事物-这是您到达自己想去的唯一途径。 我向您保证,它将最终归还。

由于我不是图书作者(至少现在还不是),所以这只是表面上的一个划痕。 如果您想对我了解更多,请在评论中让我知道-我什至可以为此写第二部分。 也欢迎所有评论和改进意见。 和往常一样:感谢您的宝贵时间。

关于我

我是Heikki Hellgren,是Elektrobit Automotive的软件开发人员和技术爱好者。 我的兴趣是软件构建,工具,自动测试以及AI和自动驾驶等所有新奇事物。 您可以在MediumTwitter上关注我。 您也可以查看我的网站以获取更多信息。

From: https://hackernoon.com/junior-developers-guide-to-galaxy-8c8e5108f495