写给新手程序员的一封信

简介: 首先,欢迎来到程序员的世界。在这个世界上,不是有很多人想创造软件并解决问题。你是一名hacker,属于那些愿意做一些有挑战性的事情的人。

首先,欢迎来到程序员的世界。在这个世界上,不是有很多人想创造软件并解决问题。你是一名hacker,属于那些愿意做一些有挑战性的事情的人。

当你不创造东西时,你只会根据自己的感觉而不是能力去看待问题。

-- WhyTheLuckyStiff

对于下面的文字你不必完全接受,所有这些来自一个其貌不扬的程序员。我喜欢把事情做到最好,而不是对原来的东西修修补补。

仅仅是因为爱好开始做一些创新,这是一个很好的开始!如果你说“我要先学习一下再开始做”那么你永远不会真正开始。每个人都需要从某个地方开始,所以现在打开你的编辑器开始写代码吧。

下面是一些很重要的建议,虽然有人并不认同,但我保证你看完我的分析以后会站在我这一边。一开始,先不要管算法和数据结构。大多数简单的程序不需要用到算法和数据结构,所以当你真正需要时再去学习。编程一段时间以后,你就会知道在哪些地方用到他们。这时知道算法的名字并了解它们的功能,然后找一些相关的论文去理解算法并动手编程实践。如果没有现成的函数库(其他程序员提供的可重用代码),你用自己喜欢的编程语言来实现它。

image.png

0. 选择一门好的编程语言,一门你自认为可以用它快速地做出一些有用东西的语言。

不要选择C语言作为你第一门编程语言。也许选择C语言会给你一种过时的满足感。虽然它比早期的汇编语言提供了更好语法描述,但是今天C(或者C++)不是能够快速编写软件的语言。毫不偏袒的说,我建议你学习一种动态语言。选择一种你觉得语法(文档)让你使用起来更舒服的编程。为此,你可能需要花费一些时间来在几种不同的语言之间进行比较。这么做目的不是为了让你感觉更好或者让编程更容易。更快地完成自己的作品并且能够看到成果,才是激励你编程的源动力。不要选择一门需要某种重量级的IDE(IDE是一种能够帮助你编写并运行代码的工具)才能轻松编程的语言。你所需要的仅仅是一个文本编辑器。(注:原文并没有标号,是我们加上的,请大家别忘记了哦,我们是从零开始数数的。:) )

1. 选择一个好的编辑器。

编辑器对程序员而言,就是像是弓对弓箭手一样重要。这里有一些推荐的编辑器:

  • SublimeText – 如果你刚开始编程,推荐使用SublimeText 2
  • Emacs – 学习曲线陡峭,快捷键复杂。如果你想定制自己的使用习惯,需要学习Emacs Lisp.
  • Vim – 不仅操作简洁而且它默认包含在linux的发行版中,所以深受大家欢迎。我开始使用了2年Emacs。由于Emacs的快捷键操作过于复杂,我的双手开始经常疼痛,这迫使我转向了Vim阵营。了解Vim的快捷键是非常有必要的。当你在远程的服务器上编辑代码时,你唯一不需要安装的编辑器就是Vim。

注意!Emacs和Vim可能已经成为成为古董了。但是,它们都具备一些现代编辑器多不具备的功能。

2. 选择一个你可以从中学到东西的操作系统

Windows不会教会你任何东西。使用Windows你唯一学会的就是打开一个exe(可执行)文件来安装软件和使用它。可能刚开始的时候你会觉得很酷,但是长远来看,如果你立志成为一个web开发人员,可能还是要具备基本的linux知识,尤其是当你要发布程序的时候。Linux也允许你根据自己的要求来定制程序。Macs也很酷,但是我认为你现在经济上还负担不起。

3. 不要通过复制粘贴来做备份

一个新手程序员通常会把文件复制粘贴到一个临时目录下面来进行备份。这也许也是他们唯一知道的方法。不要那么做!你需要使用版本控制软件。我强烈推荐使用git,它是个目前很流行的版本控制工具,而且使用起来非常简单。对一个Git新手,有一个良好的社区和很多参考资源来学习。(除了Git之外,还有mercurial, darcs, fossil等等。但是我还是建议从Git开始,我有很多的理由来支持Git,这里就不多费口舌了。)

4. 知道去哪里寻求帮助

参加一个和你相关的(你使用编程工具相关的)程序员社区。比如StackOverflow就是程序员的Facebook。那里没有消息状态和回复,取而代之的是问题和答案。除此之外还要学会使用IRC。IRC是一种老式的聊天室,现在还在被大多数开发人员用来分享技术信息和帮助解决问题。

5. 培养你的礼仪

知道什么时候问问题。你遇到的大多数问题都是别人碰到过并且在Internet上能够找到解答的。在IRC或者任何论坛里发问之前,先搜索一下google(或者blekko)来看看是不是有现成的答案。在IRC上问问题需要有耐心。永远记住,人们只是处于好心来免费帮助你。有时你发问以后需要几个小时才能有回复。所以,耐心等待。除此之外,记得问问题的时候要礼貌。世界很小,你怎么对待别人,别人就会怎么对待你。

6. 结交朋友,技术书籍只能教你解决常见的问题(他们说:书是死的)

当你在捣鼓一些程序或者从程序的作者那里学习,你能学到一些书本上没有的东西。当你散步的时候,请和遇到的朋友打招呼。你肯定不是唯一的程序员。和其他的程序员一起交朋友一起工作。你会注意到,当一群技术爱好者在一起的时候,不论话题是从什么地方开始,最后总是以技术话题收尾。这是必然的现象。所以你可以尽情参与。在你的黄金年龄努力编程,我能告诉你的是,我在开始6年前寻找朋友并开始讨论编程,从那时起才学到那些书本和文章不会我的东西。所以我总是说,我的编程经验有6年,因为只有那个时候开始,我才开始与人交流并开始感觉真正地开始学习编程。

7. 参加开源项目

为开源项目编写代码能带来回报。这不仅仅是帮助别人,你留下的代码会被其他人使用或(可能)改进。当别人给你的代码添加功能或者提出修改意见时,也是在提高你的编程水平。开源软件项目不一定要是一个大工程,编写一个下载youtube视频的小程序也是很有用的。更重要的是,你会惊奇地发现你编写的代码会成为与他人有效沟通的桥梁

最后,若干年之后如果本文的内容曾经对你有一点点的帮助,作为回报请写一封类似的信给希望开始编程并不知如何入手的朋友,有可能的话请纠正本文中过时的内容。

智者说过,掌握某个东西需要10年或10000个小时,也就是汉语中的“十年磨一剑”,所以不用着急。


相关文章
|
存储 JavaScript 前端开发
使用CDN方法的方式进行Vue.js的安装
最近公司需要进行一些前端的开发工作用到了Vue前端框架,所以准备自学Vue,顺便几下学习的过程以及一些问题。
1064 0
使用CDN方法的方式进行Vue.js的安装
|
Android开发 Kotlin
Android Studio 制作聊天界面实践(Kotlin版)
Android Studio 制作聊天界面实践(Kotlin版)
910 0
Android Studio 制作聊天界面实践(Kotlin版)
|
Kubernetes 容器 Perl
从 K8S 的 Cloud Provider 到 CCM 的演进之路
Kubernetes 是一个云原生平台,但为了让 Kubernetes 能够更好地运行在公有云平台上,能够灵活地使用、管理云上其他的基础资源和基础服务,云厂商需要实现自己的适配器。本文详细解读了 Kubernetes 从 Cloud Provider 到 Cloud Controller Mananger(CCM) 的演变过程及其实现细节,希望有助于大家更好地在公有云平台上构建基于 Kubernetes 的容器服务。
4113 0
|
6月前
|
存储 弹性计算 Cloud Native
云原生成本精细化管理实践:企迈科技的成本中心建设之路
企迈实施成本中心建设的项目核心目标不仅是实现云资源的优化配置,还要为管理层提供清晰、实时的成本数据分析,帮助管理层做出更加精准的决策。通过精细化的云成本管控,逐步实现成本降低、资源合理分配和更加高效的云产品使用。
云原生成本精细化管理实践:企迈科技的成本中心建设之路
|
10月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
379 4
|
机器学习/深度学习 人工智能 JSON
在LLM浪潮下,prompt工程师需要很懂算法吗?
最近AI大神吴恩达推出prompt教程并给出了prompt构建三大原则,Prompt Engineering Guide也提出了诸多技巧,受AI技术的快速发展的影响,你觉得在LLM浪潮下,prompt工程师需要很懂算法吗?欢迎一起来聊一聊~
25759 50
在LLM浪潮下,prompt工程师需要很懂算法吗?
|
10月前
|
JSON 安全 数据安全/隐私保护
Python安全守护神:OAuth与JWT,让黑客望而却步的魔法阵🧙‍♂️
在网络世界中,数据安全至关重要。本文介绍了如何在Python环境中使用OAuth 2.0和JSON Web Tokens (JWT) 构建安全的认证系统。OAuth 2.0是一种开放标准授权协议,允许客户端在不暴露用户凭证的情况下访问资源。JWT则是一种轻量级的数据交换格式,用于在各方之间安全地传输信息。结合两者,可以构建出既安全又高效的认证体系。文章通过Flask-OAuthlib和PyJWT库的示例代码,详细展示了实现过程。
262 2
|
JSON 前端开发 JavaScript
构建简易天气查询应用
【8月更文挑战第31天】本文将引导你一步步打造一个简易的天气查询应用,不仅提供代码示例,还分享如何利用开源API获取实时数据。我们将探讨如何设计用户界面,处理用户输入,并展示如何在屏幕上优雅地呈现天气信息。文章末尾,我们还将讨论如何进行错误处理和优化用户体验。
|
网络协议 前端开发 Java
Netty实战(二)第一个Netty程序
这只是一个简单的应用程序,但是**它可以伸缩到支持数千个并发连接**——每秒可以比普通的基于套接字的 Java 应用程序处理多得多的消息。
259 0
|
Java 关系型数据库 MySQL
基于 SpringBoot 的 4S店车辆管理系统,可作为毕业设计
基于 SpringBoot 的 4S店车辆管理系统,可作为毕业设计