[相关总结性文章] 写给即将入行的程序员的一封信

本文来自:安卓航班网

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

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

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

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

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

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

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

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

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

SublimeText 2 – 如果你刚开始编程,推荐使用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视频的小程序也是很有用的。更重要的是,你会惊奇地发现你编写的代码会成为与他人有效沟通的桥梁。(其实关于参与开源项目,伯乐在线编译的不少有关程序员的文章都是如此建议,比如Justin James 的《程序员开始编程生涯的5个建议》)

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

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

原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=2942&extra=page%3D1

转载于:https://www.cnblogs.com/yyq-quan/archive/2011/08/23/2151187.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火狐浏览器所有的快捷键

From: http://zhidao.baidu.com/question/218604936.html firefox快捷键搜索类:本页查找: CtrlF 再次查找: F3 输入查找链接: 输入查找文本: / 查找: ShiftF3 网页搜索: CtrlK 或 CtrlEfire…

超文本引用href的几种用法

href"要跳转目标链接"; href"#";当前页面不跳转(返回顶部) href"###";当前页面不跳转(同时不回到顶部) href"javascript:;";当前页面不跳转,返回空 href"javscript:void…

[react] React的触摸事件有哪几种?

[react] React的触摸事件有哪几种? onTouchCancel onTouchEnd onTouchMove onTouchStart 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

arm-linux-gnueabihf gcc8.3交叉编译工具搭建教程

一、运行环境 1.1 执行机环境 ld GNU ld (GNU Binutils for Raspbian) 2.31.1 ldd ldd (Debian GLIBC 2.28-10rpi1) 2.28 Copyright (C) 2018 Free Software Foundation, Inc. gcc (Raspbian 8.3.0-6rpi1) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc.…

Md5 Md5实现原理

参考: http://wenku.baidu.com/view/ddb1008271fe910ef12df8df.html转载于:https://www.cnblogs.com/85538649/archive/2011/08/24/2152187.html

Linux tcpdump命令详解

From: http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包…

Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的另一解决办法

在http://www.cnblogs.com/downcom/archive/2009/10/26/1590120.html中我曾给出一种解决方法,但这种方法在本地用64位系统开发程序,但服务器却是使用的32位的系统时却是很麻烦的,一直得改来改去的,今天使用另一种解决方法。 1、打…

整理一下网上看到的几个巧妙小电路

1、单按键开关机电路 思路:按下按键后,MCU输出开机信号PG1,关机则检测KEY1的电平,关键是二极管构成“或”的电路。 2、USB和电池供电切换电路 思路:USB有电则断开电池供电回路,用P-MOS管实现 3、快速放电…

[react] 状态管理器解决了什么问题?什么时候用状态管理器?

[react] 状态管理器解决了什么问题?什么时候用状态管理器? 专注 view 层 React 官网是这么简介的。JavaScript library for building user interfaces.专注 view 层 的特点决定了它不是一个全能框架,相比 angular 这种全能框架,R…

艾伟:ASP.NET跨页面传值技巧总结

关于页面传值的方法,引发了很多讨论。看来有很多人关注这个,我就我个人观点做了些总结,希望对大家有所帮助。 1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递…

BCC异或校验 Linux C

1、BCC异或校验 从输入的HEX第一个字节开始,按字节依次循环计算异或值直到HEX结尾字节,得到的最终一个字节值。 2、C程序 /******************************************************************************* _____ ___ ____ ___ _____ _ …

Linux tcpdump命令用法详解

From: http://os.51cto.com/art/201005/201921.htm TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员 进行网络分析而设计的。对于网络管理人员来说,使用…

[react] 在React中怎么引用sass或less?

[react] 在React中怎么引用sass或less&#xff1f; 安装 npm node-sass -D 导入&#xff1a; import app from ../app.module.scss 使用&#xff1a; <div className{app.tabbar}> 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

Revit二次开发“创建组遍历组Group”

group 就是吧一些有关系的对象放在一个组里面 [Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)]//[Journaling(JournalingMode.NoCommandData)]publicclasscmdGroup : IExternalCommand{ publicResult Execute(ExternalCommandData cmdData…

hdu 3951 硬币围成一圈(博弈)

n个硬币围成一个环 每次只能取1-K个硬币 最后取完者胜 假如5个硬币 每次取1-2个情况1 先手取1个 后手取剩下4个中间2个 破坏了连续 虽然最后剩2个&#xff0c;但先手只能取一个 然后后再取一个 后手胜 情况2 先手取2个 后手取剩下3个中间的那1个 然后同理 后手胜 Sample Input2…

C 如何对指针进行指定字节的偏置操作

1、概念 指针进行偏置操作后&#xff0c;需要注意的是偏置指向为同类型的指针&#xff0c;不可简单认为指针的指向地址增加或减小响应的偏置量。 2、示例 int aVal 100; int *pVal; int offset 2; pVal &aValoffset;Q:假设aVal的地址为6684156&#xff1b;求pVal的值…

[react] 举例说明如何在React创建一个事件

[react] 举例说明如何在React创建一个事件 import React, { Component } from react; import ReactDOM from react-dom; var EventEmitter require(events).EventEmitter; let emitter new EventEmitter();class ListItem extends Component {static defaultProps {checked…

c# 2.0实现摄象头视频采集,拍照,录象

From: http://blog.csdn.net/ysq5202121/article/details/5672291 Camera.cs类文件using System; using System.IO; using System.Drawing.Imaging; using System.Runtime.InteropServices; using System.Drawing; using System.Collections; using System.Data;namespace So…

socket初级使用(客户端)

在国庆这段时间里用零星的一些时间看了一下socket的学习资料&#xff0c;由于笔者偏向学习实用方面的内容&#xff0c;因此此篇文章涉及理论知识较少&#xff0c;主要是以实现思路(怎么做)为主,但在实现之前还是需要了解一些基础的理论知识(如果其中有误请指出) TCP是用socket来…

CRC16循环冗余校验 RTU-MODBUS标准 Linux C

1、概述 CRC16循环冗余校验常用在MODBUS协议中&#xff0c;用于校验报文的完整性。CRC16校验值为uint16_t 无符号整形2字节&#xff0c;在MODBUS协议中&#xff0c;低检验字节在前&#xff0c;高校验字节在后&#xff0c;比如校验结果crc160x1788&#xff0c;则MODBUS中的校验…