程序员

每个程序员都应该知道的基础数论

这篇文章讨论了数论中每个程序员都应该知道的几个重要概念。本文的内容既不是对数论的入门介绍,也不是针对数论中任何特定算法的讨论,而只是想要做为数论的一篇参考。如果读者想要获取关于数论的更多细节,文中也提供了一些外部的参考文献(大多数来自于 Wikipedia 和 Wolfram )。

0. 皮亚诺公理

整个算术规则都是建立在 5 个基本公理基础之上的,这 5 个基本公理被称为皮亚诺公理。皮亚诺公理定义了自然数所具有的特性,具体如下:
• 0是自然数;
• 每个自然数都有一个后续自然数;
• 0不是任何自然数的后续自然数;
• 不同自然数的后续自然数不同;
• 如果集合S包含了数字0,并且包含S中每一个数字的后续自然数,那么集合S就包含了所有的自然数。

上述第5个公理也被称为“数学归纳法的基础”。

通常,除了我们想要证明其他算术定理的情况,我们很少直接使用上述公理。但作为算术的基石,这些公理是值得我们去了解的。

1. 算术基本定理和除法运算法则

每个程序员都该知道的五大定理

定律-或称法则,可以指导我们并让我们在同伴的错误中学习。这篇文章中,我将介绍我每次设计或实现软件时出现在我脑海的五大定律。其中有些和开发有关,有些和系统组织有关。它们可以帮助你成为合格的软件工程师。

墨菲定律

“凡事可能出错,就一定出错。”

这条定律来源于 Edward Murphy —— 一名航天工程师在 50 年代初对火箭测试失败的回应。这条定律给我们的启示是永远在系统关键地方使用防御性设计,因为系统某些地方总会出错!

这条定律很容易引入软件工程领域。当你将软件暴露给终端用户,他们会创造性地输入一些出人意料的内容,使系统宕机。所以你需要让你的软件足够健壮,能够检测并警告非预期行为。

当你在机器上运行软件时,任何地方都有可能发生问题 —— 从硬盘上的系统到数据中心的电力供应。所以你必须确保你设计的架构在每个层级都可以应对故障。

程序员的八重境界

看到一篇有趣的文章The Eight Levels of Programmers。以前似乎看过不少这种程序员的多少个级别、境界,但这篇语言很风趣,而且分类比较细化,让人觉得挺合情合理、无法反驳的。绝大部分人想成为一名优秀程序员的人,通过努力可以避免1,因为在编程上的追求避开了2,最终可能都停留在4或5。但努力追寻是没有错的,不然没有梦想和咸鱼有什么分别:)。注意一点,作者并没有无脑地批判谁,并没有说会编程、代码写得好就怎样,其他都是不求上进、不务正业。他全文一直都在客观强调一点:每个人的追求不同,想好自己想要活成什么样子,然后就去努力。

下面就简单翻译一下,说是翻译,没有逐字逐句。而且加了一些自己想说的话,主要是传达一下作者的主要想法。另外倒排了一下八个Level的顺序,这样读起来可能更有意思。希望大家阅读愉快。

普通程序员如何向人工智能方向转型?

眼下,人工智能已经成为越来越火的一个方向。普通程序员,如何转向人工智能方向,是知乎上的一个问题。本文是我对此问题的一个回答的归档版。相比原回答有所内容增加。

一. 目的

本文的目的是给出一个简单的,平滑的,易于实现的学习方法,帮助 “普通” 程序员踏入AI领域这个门。这里,我对普通程序员的定义是:拥有大学本科知识;平时工作较忙;自己能获取的数据有限。因此,本文更像是一篇 “from the scratch” 的AI入门教程。

二. AI领域简介

AI,也就是人工智能,并不仅仅包括机器学习。曾经,符号与逻辑被认为是人工智能实现的关键,而如今则是基于统计的机器学习占据了主导地位。最近火热的深度学习正是机器学习中的一个子项。目前可以说,学习AI主要的是学习机器学习。

但是,人工智能并不等同于机器学习,这点在进入这个领域时一定要认识清楚。关于AI领域的发展历史介绍推荐看周老师写的《机器学习简介》。下面一个问题是:AI的门好跨么?其实很不好跨。我们以机器学习为例。

盘点2017年热度很高的编程语言

“世上语言千千万,我却独爱这一种!”这句话用来形容程序员和编程语言之间的爱恨情仇实在是再精准不过了。根据GitHub 2016年的开源报告,其上所有开源项目共包含了316种编程语言,这是一个什么概念呢?举个例子来说,世界上共有226个国家和地区,也就是说编程语言的数量比国家数量还多。

想要全部精通这些语言显然是个不可能事件,所以编程语言的选择就有了先后之分。编程语言的好坏之争娱乐性高于知识性,所以本文不以好坏论高下,而是以热度作为参考条件,盘点2017年哪些编程语言最受欢迎。

盘点2017年热度很高的编程语言
▲蓝色为Java,红色为Go,黄色为Swift,绿色为Python,紫色为Kotlin

每个程序员都应该记住的十大编程语言之父

C创始人,Dennis Ritchie ,丹尼斯•里奇被世人尊称为“无形之王的C语言之父”,是计算机及网络技术的奠定者,曾担任朗讯科技公司贝尔实验室下属的计算机科学研究中心系统软件研究部的主任一职。是为乔布斯等一众IT巨擘提供肩膀的巨人。2011年10月与乔布斯相继离世,却远未像乔布斯那样得到全球的追捧和悼念。

每个程序员都应该记住的十大编程语言之父

七大有效的编程习惯助你成为更好地程序员

原文:Seven useful programming habits
作者:Bartlomiej Karalus
翻译:雨言

译者注:编程能力和水平固然重要,但如果具备良好的编程习惯,往往也能帮助你事半功倍。本文作者通过切身经验,分享了七个有效的编程习惯,希望对大家有所帮助。

最近在读一些不错的关于习惯养成的书籍,读完之后,备受启迪,于是,我开始反省自己目前的各种习惯,其中有一些就是平时日常生活中的习惯,也有一些仅仅与工作有关,说到工作,就不得不说一下编程习惯了,我很乐意与大家分享我的编程习惯。

随时随地“Ctrl+S”

这是我多年来一直坚持的一个习惯,尽管现在很多新的IDE甚至不需要手动保存,可以自动保存,但我还是会在代码结束的最后一行不由自主地按下组合键“Ctrl+S”,如果我没记错的话,每次只要我敲键盘一停下来我就会“Ctrl+S”,但奇怪的是,这个“Ctrl+S”实际上比我同事脸上的笑容更能节省我一天的时间。

定期释放大脑内存

作为一名程序员,你有必要了解这些黑客工具!

我们曾对黑客的世界充满着无限的幻想和畏惧,但随着技术的崛起和安全领域的进步,黑客技术已经变得越来越普遍。事实上,很多黑客工具被用于网络安全的工具可以用来进行渗透测试和安全测试,所以作为一名程序员,很有必要了解甚至尝试一下这些开源的黑客工具。但是请不要将它们用在非法用途。

作为一名程序员,你有必要了解这些黑客工具!

1、渗透测试环境 Metasploit

Metasploit Framework是一个编写,测试和使用exploit代码的完善环境。这个环境为渗透测试,shellcode编写和漏洞研究 提供了一个可靠的平台,这个框架主要是由面向对象的Perl编程语言编写的,并带有由C语言,汇编程序和Python编写的可选组件。

Metasploit Framework 作为一个缓冲区溢出测试使用的辅助工具,也可以说是一个漏洞利用和测试平台。它集成了各平台上常见的溢出漏洞和流行的shellcode,并且不断更新,使得缓冲区溢出测试变得方便和简单。

项目难做,程序员难当,软件开发中的9大难题

(本文节选自【德】Christian Grobmeier作品《程序员之禅》)

是什么让项目变糟?何时起我们下班回家时开始盘算:“见鬼,我得离开”?下面是我们程序员不时要面对的一个问题清单,这些问题让我们筋疲力尽。而通常我们又躲不掉,不得不设法去应付。

01 错误的团队

如果你不幸处在一个错误的团队中,问题则免不了。大家也许都还不错,但是当其中某人因为钱的事情不高兴,或者对琐碎的任务感到厌烦时,他就可能破坏团队的气氛。其他人可能只顾着自己的事业,这使得他们变成了糟糕的团队伙伴。某人会认为自己是在帮助这些人实现他们自己的事业目标。如果一个团队成员的知识太少,也可能出现不友好的情况。如果你从事的工作与你的技能不配,或者没有人能够帮你迈出第一步的话,你也可能陷入麻烦。

团队需要和谐。如果你有幸身处“分享同一个梦想”的团队,一切都很美妙。如果你是由无聊或自负之人组成的团队的一员,你可能会经历一段非常艰难的时光。

好的API都有哪些特点?你能做到几点

作者丨 Erik Dietrich
译者丨黑色巧克力

好的API是怎样的,应该具备哪些特点,作者对此进行了详细说明,并把API比作产品,主张编写API时从用户的角度换位思考。

如果用户通过他们自己的代码与你的代码进行交互,那么你将需要构建一个API。因此,理解好的API特性是至关重要的。那么什么是好的API呢?

“API”一词似乎是对软件开发人员的一种Rorschach Test。Web开发人员将API视为REST端点和wsdl。相比之下,桌面开发人员可能认为API是由来自其他组织的开发人员编写的“代码库”。人们编写像驱动程序这样的低级代码是为了提供操作系统调用的入口。

API提供了一种更通用的思维方式,我个人喜欢下面“技术术语”的定义。

API是一组命令、函数、协议和对象,程序员可以用它们来开发软件或与外部系统进行交互。它为开发人员提供了执行通用操作的标准命令,这样他们就不必从头开始编写代码了。

API定义了其他程序员如何与软件进行交互。因此,我提到的每一角色都有自己的正确答案,但只是一小部分。当你写代码的时候,想想调用这段代码的用户。如果该用户想通过自己的代码与你的代码进行交互,那么你将需要构建一个API。这方便于你公司的其他开发人员,甚至你的团队使用你的代码。

同步内容
--电子创新网--
粤ICP备12070055号