聊一聊我的计算机学习经历吧(四)

简介: hey guys ,我是 cxuan,这一篇文章我就要和你聊聊编程如何学习,这一篇文章涉及的内容简直太多了,我将从入门开始,一步一步到如何提高,然后到一些学习的相关问题,还有一些计算机相关的术语等,干货也非常多,准备好了吗?那么我们开始吧。

如何开始制作网站/制作 Web 应用程序/进行网站开发

了解 Web 开发的方法有很多,但是通常你需要掌握的核心技能通常分为前端技能(在用户的 Web 浏览器上运行的代码)和后端技能(在服务器上运行的代码)。

通常,大多数人会建议你先学习 HTML,CSS 和 Javascript(按此顺序),这是在每个 Web 浏览器上运行并组成每个网站的三种核心语言。

你可以在 https://www.reddit.com/r/webdev/wiki/faq 上找到更多信息。这是面向初学者的另一套在线课程、教程和资源列表 https://github.com/Michael0x2a/curated-programming-resources/blob/master/resources.md#html-css-and-javascript

如何开始制作移动应用程序/ Android 应用程序/ iOS 应用程序/ Windows Phone应用程序

你将需要为每种类型的智能手机学习不同的编程语言。

你还可以使用Phonegap和Titanium等技术制作可以在所有三款主要智能手机上运行的应用程序-它们使你可以使用 HTML,CSS 和 Javascript 编写应用程序一次,并可以在任何平台上运行该应用程序。

有关更多信息,可以查阅移动应用程序开发资源列表 https://www.reddit.com/r/learnprogramming/wiki/online#wiki_mobile_app_development

但是,请记住,上述资源中的许多都是针对已经具有一些编程经验的人。如果你以前从未编程过,则可能要开始学习一种语言,该语言拥有更多的资源供初学者使用。一旦获得了一定的经验,并了解了编程背后的基本概念,你通常会发现学习一种新语言并开始学习移动开发容易得多

如何使事情自动化

对于 Windows,有两种专用的编程语言,例如 Autohotkey 和 AutoIt。

另一个可行的跨平台替代方法是 Python https://www.python.org/,使用 Python 更容易构建自动化并完成一些无聊的 working http://automatetheboringstuff.com/

如果要自动化 MS-Office,请使用内置的编程语言Visual Basic for Applications(VBA)https://www.reddit.com/r/vba 专门用于 VBA 编程。

什么是最最最最最最好的

这篇文章 https://www.reddit.com/r/learnprogramming/comments/3r7lhp/a_collection_of_150_what_are_the_best_dev/ 汇总了 150 涉及什么是"最好的"问题和答案,包括语言工具和主题。

术语和词汇

计算机科学,计算机工程,软件工程,编程和编码之间有什么区别

计算机科学(CS),计算机工程(CE),软件工程(SE),编程和编码都是相互关联的术语,但彼此之间有微妙的区别,这通常使初学者很难区分它们。

你应该做的第一个区分是区分CS / CE / SE和编程/编码。CS,CE 和 SE 都是研究领域,说“我正在学习计算机科学”将类似于说“我正在学习化学”或“我正在学习文学”。相反,编程和编码是活动-它们是您要做的事情。要使用隐喻,学习 CS / CE / SE 就像学习音乐理论,而学习编程/编码就像学习如何弹奏特定乐器。

从理论上讲,你可以学习一个而不能学习另一个,但是如果你同时学习两者,那么你的经验将更加丰富。

另一个区别是,虽然 CS / CE / SE 是你可以学习的东西,但是学习编程只是通过实践才能实现的。实际上,大多数大学和学校将要做的是正式教授一种语言以教授编码的基础知识,然后将重点放在 CS,CE 和 SE 的教学上,让学生学习如何通过练习和完成家庭作业来编程。

CS vs CE vs SE

你应该在 CS,CE 和 SE 之间进行下一个区分。简而言之,尽管有很多重叠之处,但“计算机科学”与计算机或科学无关,而更多地是研究可计算性概念的应用数学领域。计算机工程与 CS 类似,但倾向于将重点更多地放在低级硬件上,就像计算机科学和电气工程之间的交叉。最后,软件工程更多地是关于如何构建大型而复杂的程序,同时防止因为一些因素导致软件崩溃,软件工程理论较少。

关于这三个概念的论述,你可以在 https://www.reddit.com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/ 找到更详细的。

编程与编码

最后,编程 vs 编码,这两个术语之间的差异很小-许多人可以互换使用它们。通常,术语“编程”似乎比“编码”具有更积极的含义。如果你说“我是程序员”,则表示你具有一定的专业水平-这表示你不仅可以编写代码,而且对基本原理和理论有扎实的了解,知道如何与客户沟通和工作与其他人等。

相反,如果你说“我是编码员”,则通常意味着你的注意力仅集中在编写代码上,而其他方面则更少。

但是,这里的不同含义仍然很小 - 在绝大多数情况下,您可以互换使用这两个术语。

C,C ++,Objective-C 和 C#有什么区别

C 语言是这些语言中最小和最早的一种。它最初是作为 Unix 操作系统的系统编程语言创建的,如今仍广泛用于应用程序编程。

C++ 是一种非常流行的通用编程语言,最初是基于 C 的。通过一些调整,大多数 C 代码都可以编译为 C++ 代码。但是 C++ 添加了大量语言功能,这些语言功能与使用 C 的方式相比,大大改变了使用该语言的方式。用 C++ 编写 C 风格的代码通常被认为是不好的做法。

Objective-C 是 C 的严格超集,这意味着所有有效的 C 代码也是有效的 Objective-C 代码。Objective-C 的普及程度不及 C 或 C++,它目前主要用于 Apple OS X 和 iOS 平台的开发中。

从任何技术意义上讲,C# 都不基于C。C# 是 Microsoft 设计的通用语言,在许多方面与 Java 相似。它可以编译为在虚拟机中运行的中间形式,这与之前的三种语言都被编译为本地机器代码不同。尽管 C# 借鉴了 C 和 C++ 的语法元素(就像 Java一样),但它与这些语言没有真正的技术关系。

Java 和 JavaScript 有什么区别

很多人经常会把 Java 和 JavaScript 搞混,其实这两者语言除了叫法有点关系外, Java 和 JavaScript 在任何技术意义上都不相关。它们共享一些语法,因为它们都受 C 的影响,仅此而已。Wikipedia 很好地解释了为什么存在名称相似性:https://en.wikipedia.org/wiki/JavaScript#JavaScript_and_Java

工具和版本控制

什么是源/版本/版本控制?我应该使用它吗

软件开发是一项协作的技能。版本控制系统(VCS)是一种可跟踪代码更改的工具,可让你执行诸如撤消编码错误之类的方便工作,并查看代码随时间的变化。现代分布式版本控制系统(DVCS)还使您可以轻松地与其他程序员使用同一代码。应该说你绝对应该使用版本控制系统!

目前最受欢迎的应该就是 git 了。

你可以通过阅读 git 入门 https://cgordini.blogspot.com/2013/05/git-101.html 以及免费的 gitbok https://git-scm.com/book/en/v2 来使用 git。

当然廖雪峰的 git 讲解的也非常好 https://www.liaoxuefeng.com/wiki/896043488029600

什么是 IDE,我应该使用吗

IDE 是一个集成开发环境,它是一个 GUI 应用程序,通常包括带有代码完成和语法突出显示功能的文本编辑器,一些项目管理功能,一个编译器或解释器(可配置或包含)以及许多其他用于编写的精美功能。运行和测试代码更加容易。使用 IDE 的替代方法是自动自行执行 IDE 为你执行的操作。此方法要求程序员使用单独的工具,并且对开发过程有更深入的了解。

对于初学者来说,这两种开发方法都有争论:

  • 使用 IDE 意味着你不必对开发过程有太多了解,不必使用命令行界面,也不必配置这些工具即可正常工作。IDE 提供了一种快速的方法来建立代码,甚至可以为你编写一些代码!
  • 另一方面,从命令行工作意味着您不必适应 IDE 设计人员的思维方式,并且由于隐藏了更少的开发过程,因此你可以更好地了解软件构建过程。

使用 IDE 而不是使用单独的工具通常取决于个人喜好(除非你的雇主/学校当然需要使用特定的开发环境)。如果您以前从未使用过 IDE,请下载一种流行的 IDE 并进行修改。而且,如果您从未使用过命令行中的 vim 或编译的代码,请尝试一下,看看你是否喜欢它。

常见的 IDE 和轻量级文本编辑器都可以在 https://www.reddit.com/r/learnprogramming/wiki/tools 中找到。

电脑和操作系统

我应该使用哪种操作系统

许多初学者经常遇到的一个问题是,他们应该使用哪种操作系统 - Windows,Mac 或 Linux。

坦白地说,这无关紧要 - 在当今时代,你可以使用的工具的质量和成熟度在所有平台上都将大致相同,并且任何完善的编程语言都将在所有操作系统上使用。

话虽这么说,你最终应该对这三种操作系统有一定程度的了解,以免遇到新的操作系统不知所错。

这个规则有两个例外

  • 如果要在 Windows 平台上开发,请选择 Windows 计算机
  • 如果要在 Mac 或者iOS 平台上开发,请获取 Mac 计算机

某些 Microsoft 和 .NET 工具仍主要针对 Windows。

虽然可以在任何计算机上开发 Mac 和 iOS 应用程序,但必须在 Mac 机器上使用 Xcode 来编译应用程序并将其提交到应用程序商店。

最后,还值得注意的是,如果我有一台 Windows 计算机,那么设置一个我可以使用的 Linux 虚拟机将非常容易,而不必担心它会干扰我现有的 Windows 操作系统。

我应该选择什么样的电脑/笔记本电脑

同样,这并不重要 - 任何中档笔记本电脑或计算机都可以。如果你已经拥有一台计算机或笔记本电脑,则应该使用它而不是购买新计算机。基本上,你可以学习编程,并且可以在现有的几乎所有计算机上编写复杂而有趣的程序。

但是,如果你碰巧需要购买一台新计算机并想将其用于编程,则应优先选择 CPU,RAM 和硬盘驱动器。如果可能,请尝试获得具有以下规格或更高规格的计算机:

  • 英特尔 i5 CPU(3.0+ GHz)+
  • 4 GB以上的 RAM
  • 200 + GB硬盘
  • (可选)固态驱动器

如果你可以升级,则优先考虑获得更好的 CPU 和更多的 RAM 而不是获得更大的硬盘驱动器 - 更加强大的 CPU 总是有帮助的。

如果你想购买台式机,那么这些规格实际上是唯一相关的规格。如果你希望具有便携性,则应购买一台笔记本电脑,并确保其配备足够大的屏幕和键盘,以方便进行编程。但是,便携式计算机的可用性和可移植性之间达到了很好的平衡:

  • 屏幕越大,电池寿命越短(但你愿意设置屏幕亮度的调光器,电池寿命越长)
  • 屏幕越小,可以容纳的空间就越少,并且必须在 Windows /桌面之间进行更多的翻转。
  • 理想情况下,你应该能够舒适的使用两个窗口
  • 笔记本电脑越大,重量越重,随身携带的重量也越重

还还需问你自己,你打算如何使用笔记本电脑。你是否打算整天坐在办公桌上,还是将其随身携带在校园中。

如果你对机器学习,自然语言处理或图形(包括游戏开发)特别感兴趣,则可能要考虑购买配备 GPU 的机器。尽管不需要 GPU 来执行任何这些操作,但是你通常可以通过仔细编写代码来加快代码的速度,从而尽可能地利用GPU。

如果您对机器学习或 NLP 感兴趣,你可以通过相对便宜的价格通过 Amazon Web Services(AWS)或 Google Compute Engine(GCE)等服务在云中租用带有 GPU 的机器。

职业和工作

程序员赚钱吗

这个因人而异,现在 360 行行行转程序员,导致这个行业的门槛越来越低,所以一般程序员大家的薪资水平差不多,互联网的薪资相比传统行业会高不少,但是互联网对于程序员的要求也相对较高。

如何进入该行业并获得入门级工作

前提假设是你已经掌握一门语言并知道如何进行编码,获得入门级工作主要有两个阶段

  • 制作出足以使 HR 开始邀请你面试的简历
  • 通过面试

这两个阶段需要一些不同的策略。

阶段1:建立引人注目的简历

在第 1 阶段中,你的目标是稳步开始向简历中添加可帮助你脱颖而出(或至少可以使你与其他正在申请的申请人相媲美的项目)。

为此,一项特别有用的策略是开始构建可以向潜在雇主炫耀的项目组合。

  • 独立副业
  • 志愿工作,比如为一些非营利组织建立网站
  • 课堂项目
  • 你在工作中所做的工作,找到了整合编程的方法
  • 研究独立的项目,或者你在学校实验室中做过的研究
  • 过去的工作或实习项目

拥有强大的项目组合可以使雇主成功地运用编程语言,库和技术来解决问题,并为他们提供一种更准确地评估你的技能水平的方法。

一些注意事项

  • 你的项目不一定需要外观华丽。具有技术背景的招聘人员会明白,不是所有的有趣的项目已经或需要一个漂亮的界面。更重要的是你能描述清楚你所做的工作,你所负责的事情,从而展现你所做工作的复杂性
    也许主要的例外是,如果你申请的职位需要一些视觉才能。例如,如果你要申请前端 Web 设计师角色,那么拥有一些可以显示出可以打造美观且可用的网站的项目会有所帮助。
  • 当然,从事项目并不是你唯一可以做的事情。诸如获得学位(最好是与计算机科学相关的学科)之类的事情也肯定会有所帮助。
  • 有些人还参加训练营,以部分加快建立相关简历/作品集的过程。只需确保在参加训练营之前先做一下研究:有些很棒,有些甚至是彻头彻尾的骗局。这个需要你自己甄别

阶段 2:通过面试

这个过程就需要你和面试官真刀真枪的干架了!不过面试主要分为两种:传统软件行业和互联网公司。一般传统软件公司或者一些互联网公司会问一些你能不能快速上手解决问题的面试题,而一些顶尖的互联网却喜欢专注于基础知识和框架的深度使用

你可能会遇到的一些常见面试原型包括:

  • 给你带来某种形式的编码挑战,通常是关于数据结构和算法的挑战,一般俗称刷题。你可以在牛客网或者 LeetCode 进行刷题。
  • 向你询问与面试的特定职位有关的问题-例如前端网页设计,网络安全,中间件原理,JVM 原理,框架深度使用等
  • 要求你尝试设计一些较大项目的体系结构
  • 向你询问简历中列出的项目(有时,通常是有时深入关注单个项目)
  • 只是一般地讨论技术

总结

这一篇内容内容我为你介绍了小白新手如何学习编程、一步一步到高级程序员会经历哪些步骤,为你罗列了非常多优质的编程资源,以及学习中国的困惑,如何提高,在最后为你解释了一些编程中常见的问题,简历都需要注意哪些等等。

这篇内容相当于是一个使用说明手册了,你可以按照这个路线来一步一步规划你的编程生涯。最后祝你早日成为大牛(形容这个程序员的水平非常高)

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
7月前
|
算法 C语言
关于技术面试一些有用的经历
关于技术面试一些有用的经历
45 0
|
人工智能 算法 安全
【C++怎么入门】C++是什么及发展史 | 重要性(工作领域、校招领域) | 怎么学
【C++怎么入门】C++是什么及发展史 | 重要性(工作领域、校招领域) | 怎么学
165 0
【C++怎么入门】C++是什么及发展史 | 重要性(工作领域、校招领域) | 怎么学
|
算法 前端开发 JavaScript
聊一聊我的计算机学习经历吧(一)
hey guys ,我是 cxuan,这一篇文章我就要和你聊聊编程如何学习,这一篇文章涉及的内容简直太多了,我将从入门开始,一步一步到如何提高,然后到一些学习的相关问题,还有一些计算机相关的术语等,干货也非常多,准备好了吗?那么我们开始吧。
聊一聊我的计算机学习经历吧(一)
|
移动开发 前端开发 JavaScript
聊一聊我的计算机学习经历吧(三)
hey guys ,我是 cxuan,这一篇文章我就要和你聊聊编程如何学习,这一篇文章涉及的内容简直太多了,我将从入门开始,一步一步到如何提高,然后到一些学习的相关问题,还有一些计算机相关的术语等,干货也非常多,准备好了吗?那么我们开始吧。
|
算法 前端开发 Java
聊一聊我的计算机学习经历吧(二)
hey guys ,我是 cxuan,这一篇文章我就要和你聊聊编程如何学习,这一篇文章涉及的内容简直太多了,我将从入门开始,一步一步到如何提高,然后到一些学习的相关问题,还有一些计算机相关的术语等,干货也非常多,准备好了吗?那么我们开始吧。
|
消息中间件 缓存 中间件
来自一个阿里工作的朋友经验之谈!
第一点:就是阿里的技术。
190 0
|
算法 数据安全/隐私保护
算法学习之路|聪明的打字员
阿兰是某机密部门的打字员,她现在接到一个任务:需要在一天之内输入几百个长度固定为6的密码。当然,她希望输入的过程中敲击键盘的总次数越少越好。
1526 0