zoukankan      html  css  js  c++  java
  • 为什么做一名程序员(转)

    你可以花一年的时间去寻找,

    每一个月都给自己定一个目标去实现。

    每个月都是一个每年可更新的技术性的或个人的挑战:

    1.进入真实生活。

    2.保持健康。

    3.欣然接受不舒适。

    4.学习一门新的编程语言。

    5.自动化。

    6.多学点数学。

    7.专注于安全。

    8.备份数据。

    9.多学点理论。

    10.对艺术和人文学科有所涉猎。

    11.学习新软件。

    12.完成一个个人项目。

    继续读下去,看看我的建议。

    1、进入真实生活。

    程序员们过分沉迷于数码设备,在数码设备之外也别有一番天地。

    因此,在真实生活中的投资会带来相对多的回报。

    这里有一个起步表,表中是真实生活中可供尝试的活动。对于每一项活动,如果你真心付出一个月,你就不再是一个新手(而是一个富有经验的初学者):

    做饭
    远足
    滑雪
    天文学
    慢跑
    举重
    木工
    武术
    跳舞

    2、保持健康

    程序员往往过着久坐不动的生活,因此我们面临着我们职业带来的特有健康挑战。

    我们往往会忽视这些挑战。

    每年,花一整月的时间,调整你的锻炼、饮食以及环境,来培养持久的健康习惯。

    每年去一次诊所,测量血压、胆固醇以及血糖。观察这些数值是怎样随时间而变化的。

    3、欣然接受不舒适

    从我 20 岁出头起,我观察比我年长的同伴,尝试发现为什么有些人停滞不前,而另外一部分人一直精力充沛。

    答案是舒适。

    舒适导致技术僵化。

    一个系统,它能正常为我们服务,而且我们一直在坚持使用它。

    但是,技术在进步,那些局限于舒适的人绝对认识不到这些进步的益处。

    惯例之所以变为舒适的,是因为它原来就是不舒适的。

    清单中的事情,可能让你在刚开始感到不舒服:

    换成德沃夏克键盘。
    从 emacs 编辑器转化到 vim 编辑器或者反过来。
    停止使用鼠标。
    使用不同的窗口管理器。
    从奶油和糖转变为不加牛奶的咖啡或者不经过调味的茶。
    花一整个月的时间试试『流行新垃圾』。
    每周关掉手机一天。
    学习使用单手输入设备。
    尝试使用不同的操作系统。
    对于一个小项目,尝试不同的版本控制系统。
    每周强制断网一天。
    试试饮食上的约束:纯素食主义、素食主义、不含奶类等等。
    每天吃一种你不喜欢的食物。
    少用有利手臂(dominant arm)。
    学习用非利手(non-dominant hand)写字。
    开始写博客。
    报名参加公众演讲。
    听一种你并不喜欢的音乐一个月。
    在医院或退休之家做志愿服务。
    一周禁食一次。
    去一个用不同语言或者有不同文化的国家。
    从你不喜欢的种类里选读一本广受欢迎的小说。
    从你不喜欢的种类里选观一部备受推崇的电影或片子。
    学会开手动档汽车。
    质疑一些你相信的事。

    做一些不一样的事情,一个月之后,决定是否想继续这样做,或者看看能不能找到这样的方法,能把新事物和旧事物最好的东西融合起来。

    举个例子,当用了 10 年的 emacs 转用 vim 时,在插入模式下,我设置了 emacs 风格的快捷键,但是我用的编辑器是 vim 

    更新:读者 Shae Erisson 为欣然接受不舒适续写了『的规则』:当已经有3个人推荐你尝试一样东西的话,你必须尝试一下。

    他还给出了一个『 15 分钟规则』:给某个东西(比如一部电影或电视节目) 15 分钟的评判时间。如果你在 15 分钟之后不想继续下去了,就放弃它。

    这两条规则我都喜欢。

    4、学习一门新的编程语言

    编程语言起起落落。

    只懂一门语言的程序员,他们解决问题的能力和事业前景会受局限。

    用它写一个不大的程序。

    这里有一些非主流的可供学习的语言:

    Racket.
    Haskell.
    Rust.
    Scala.
    Erlang.
    Clojure.
    SML/NJ.
    OCaml.
    Squeak.
    Prolog.
    Datalog.
    miniKanren.

    如果你有足够勇气,试一试依赖类型(dependently-typed)编程语言或者定理证明系统(theorem-proving systems):

    Agda.
    Coq.
    Idris.

    如果你没有编程语言可以去学了,自己发明一个。

    5、自动化

    程序员具备的最有力而未被利用的技能就是,使虚拟和现实自动化的能力。

    如果你从来没做过机器人的话,做一个吧。

    至少玩玩乐高头脑风暴机器人吧:

     

    或者玩玩 Arduino 板或树莓派:

     

    观察你做的日常活动,然后决定哪些能全部或者部分自动化。

    家庭自动化技术非常发达,借助 DIY 系统,例如 Insteon,很多东西都成为可能。

    花一个月的时间来做一个自动化的项目:

    调优你的邮件过滤器或者安装 procmail
    设置 shell 脚本,自动化经常性的操作。
    新建一个 shell 脚本来帮助你写作。
    学习怎样使用 cron 工具。
    把壁橱的灯和运动检测器连接在一起。
    在可能的地方用无线代替有线。
    停止手动同步:把它移到云端。
    安装远程声控系统。
    用你的服务器来控制你的恒温器。
    安装数码安全摄像头。
    做一个内线通话系统或者婴儿监视器。
    让你的咖啡机自动打开。
    为宠物安装自动加水的盘子。
    做传感器控制的宠物门。
    破解 Roomba,让它成为快递员。

    6、多学点数学

    计算机科学是一门与数学相关的学科。

    成为好的程序员的前提是成为好的数学家。

    不要让你的数学才能消失。

    考虑每年花一个月时间温习这些主题中的一个:

    逻辑学。
    离散数学。
    微积分。
    概率论。
    统计学。
    抽象代数。
    数论。
    范畴论。
    序理论。

    7、专注于安全

    极少数的程序员有好的安全习惯。

    如果你在意自己的电子信息安全,你将会更在意自己代码的安全性。

    检查一下,在每个网站上,你是否在用独特、复杂的密码?

    用加密的密码管理器管理你的密码,例如 PasswordSafe 或者 KeePassX

    如果你还没习惯全盘加密,那么抽出时间做一下。(在 Mac 机上,设置它不难。)

    每年,研究一下过去12个月的高危漏洞。他们是怎样发生的?什么样的编程习惯能够防止这些问题在你的代码中出现?

    这里是你可以尝试的其他安全任务:

    学习 SSH 还能做什么。
    在 Apache 上安装 SSL 安全证书。
    实现一个加密系统,例如 RSA 或者 AES
    尝试破解你的无线网络的密钥。
    用 WireShark 嗅探你的网络交通。
    设置无需密码、基于密钥的 ssh 登录。
    自己运行 nmap。配置你的防火墙。
    设置端口敲门(port-knocking)。
    做一个加密的 盘。
    安装日志文件监视器。
    设置 cron 作业(cronjob)来规律地更新软件包。

    8、备份你的数据

    每年,花时间来反思你的备份策略。

    用一个月的时间,最小化做备份的成本。

    (我最近把我的很多工作文件放到了 Copy 里,它是一个灵巧的类 DropBox 应用,有比 DropBox 更多的免费存储空间。通过这个推荐链接来得到多余的 5 GB。)

    选择容灾方案:为每台电脑指派单独硬盘,借助像 Time Machine 的工具,打开自动备份。

    用版本控制来管理关键文件,将他们存储在异地服务器中。

    9、多学点理论

    计算机科学有着丰富的理论结构。

    跟上新进展,复习你已经掌握的经典理论。

    每年花一个月,学习类似下面的理论:

    形式语言。
    自动机和可计算性理论。
    复杂度理论。
    形式化方法。
    语义学。
    算法和数据结构。

    对于初学者,你可能想看看这些帖子:

    用 Haskell 语言写 CEK 形式的(或者语义学上的)解释器。
    用推导来进行语法分析。
    被遗忘的方法:怎样从 Okasaki 的红黑树中删除元素。
    用推导的方法,使用 Scheme 语言对正则表达式进行模式匹配。
    将正则表达式转化为非确定有限状态自动机(NFA)。

    10、对艺术和人文学科有所涉猎

    工程师往往轻视艺术。

    工程师没有意识到的是,艺术和人文成就了卓越的技术。

    史蒂文 · 乔布斯喜欢指出联系技术和人文的重要性,而且真的是这样。

    不要对这些理论一无所知。

    艺术和人文训练直觉,并且使其变得敏锐。这个过程是以一种很难量化的方式进行的。然而这种直觉对于在量化领域中工作的我们来说,是必要的。

    工程师需要学习怎样度量他们不能计算的东西,而不是只计算他们能度量的东西。

    每年至少花一个月,多学学类似下面的理论:

    工业设计。
    哲学。
    摄影。
    绘画。
    写生。
    音乐和音乐理论。
    电影。
    文学。

    社会科学也对计算机科学有很多贡献。具体来说的话,试试经济学和心理学。

    11、学习新软件

    要为你自己的软件获得灵感,一个好的方法就是,学习一个或一类新应用。

    举个例子,如果你从来没有用过 3D 建模工具,试试 Blender

    或者,如果你从来没学过 LaTeX,真心地付诸一试。

    在你学习的过程中,把你喜欢的和不喜欢的东西都记录下来。

    扪心自问,这些观察是否反映到了你创造的软件中?

    在你自己的作品中指出坏毛病很难,但给别人的作品挑毛病就很容易。

    每一对父母的孩子都是漂亮的。

    学会认识自己丑陋的小孩。

    12、完成一个个人项目

    如果你整天总是为别人写代码,就要记住,程序员之所以成为程序员,是因为他为自己写程序。

    每年把一个月的时间花在你自己选择的项目上。

    实现那个项目的核心部分。

    使其开源,将它发布到世界。

  • 相关阅读:
    vue从详情页回到列表页,停留在之前的tab上
    vue-touch监听手指左滑右滑事件
    vue事件代理
    vue通过ref获取组件渲染后的dom(this.$refs.xxxRef.$el)
    vue水印-第二种方法:通过指令
    # 有时候代码超时
    # 今天的leetcode1268又用上了二分搜索。
    # linux命令小常识
    # 大家好
    今天尝试配置maven的时候
  • 原文地址:https://www.cnblogs.com/mebius4789/p/6284999.html
Copyright © 2011-2022 走看看