无线电波段和频谱

电磁波

在空间传播着的交变电磁场,即电磁波。它在真空中的传播速度约为每秒30万公里。电磁波包括的范围很广。实验证明,无线电波、红外线、可见光、紫外线、X射线、γ射线都是电磁波。光波的频率比无线电波的频率要高很多,光波的波长比无线电波的波长短很多;而X射线和γ射线的频率则更高,波长则更短。

为了对各种电磁波有个全面的了解,人们将这些电磁波按照它们的波长或频率、波数、能量的大小顺序进行排列,这就是电磁波谱。

电磁波谱

Read More

码路指南:在博与专之间取得平衡 平衡最合适

转自 http://www.nowamagic.net/librarys/veda/detail/2664 2014年01月20日

“博”与“专”上的迷失

假设说一个人的学习已经聚焦,并且学习的内容和自己实际参与的项目也相吻合,那么是不是就没有问题了?很不幸,答案仍然是否定的,在任何一个子领域里,仍然需要进一步去考虑“博”与“专”的均衡。

Read More

码路指南:为何你成不了编程高手? 成长路上常见的坑

转自 http://www.nowamagic.net/librarys/veda/detail/2661 2014年01月19日

前面讲到了程序员成为高手需要有一张地图,借助这样一张地图,程序员可以尝试成为架构师、Guru或者纯管理者。但这条路总是不会那么顺畅。

升级练功流的网游中总会给修仙的主人公设置下几大关卡,比如:金丹难成、元神难成、成了元神后还有天人五衰等等。没有这些关口,情节很难推动,所以仙侠类的网游几乎无一例外依赖于这类设定。这一传统甚至可以追溯到《西游记》和《封神演义》。

拿这个来对照程序员的增值道路,就会猛地发现,升级练功流也不完全是扯淡。不管走那条道路,程序员的修炼路上同样的也有三灾九难,要想成就高手,还是得一个个跨过去才行。如果一个程序员达到一定高度后再回头观望,那就会发现自己的同学、曾经的同事总是会因为这样那样的原因倒下去。这并不是一个简单的天道酬勤就可以敷衍的行当,下面就让我们来具体看看,究竟增值过程中可能遇到那些陷阱,掉到坑里又需要付出多大代价才爬的出来。

Read More

码路指南:程序员的几个职场发展方向 职场该如何走?

转自: http://www.nowamagic.net/librarys/veda/detail/2660 2014年01月18日

清代著名学者曾对知识地图的必要性做过非常精确的表述:

凡读书最切要者,目录之学也。目录明,方可读书,不明,终是乱读。

—— 王鸣盛,《十七史商榷》

目录即是地图。

对于软件开发的知识,我更愿意使用下面的的“地图”,这不一定是最合理的,但确实对归纳各种软件开发知识有所帮助。

1. 通用的领域知识
  • 编程语言(C/C++,Java,C#,Python,Perl,PHP等)
  • 框架和类库(Struts,Spring,OSGi的某个具体实现,MFC,Boost等)
  • 平台(Windows API,POSIX,.Net Framework※1,Java API,C/C++ Runtime Library等)。恰如Jeffry Richter所说,大多时候可以从内存机制、线程机制、错误处理、异常处理、组件构建、组件组合等方面来进一步考察一个平台。
  • 计算机体系结构 (CPU指令,虚拟存储等)
  • 数据库
  • 实用技巧 (调试方法,代码生成器等)

… …
\1有的时候子类别间的界限并不是很容易界定,其中一个主要原因就是存在着像.Net Framework这样涵盖了过多内容的概念。*

Read More

码路指南:怎样才算是编程高手? 高手的定义

转自: http://www.nowamagic.net/librarys/veda/detail/2659 2014年01月18日

一旦度过了初始阶段,做过了前面说的那些事情,那么一个人算是基本入行了,接下来的目标就非常简单,要在选定方向上成为高手。高手意味着专业,而在分工无限细化的年代里,专业则是生存、发展好最为重要的一个前提。

高手的定义和养成关键

我估计如果问100个人“什么样的程序员是高手?”,那答案会有100多个。因为同一个人还可能给高手下不同的定义。

在这里我们认为,在特定领域里能搞定大部分人搞不定事情的就是高手。从这样一个定义出发,我们会发现在技术人员和销售人员眼里,高手的内涵是有很大差异的。

纯技术人员更多的关注性能能不能提到极致,并发能不能处理的很好,内存溢出Bug能不能很快搞定,类库的机理熟悉不熟悉等等。而在销售人员的眼里,则在技术外还多看了些东西,比如业务流程熟不熟悉、使用性好不好、能否迅速对应变化、能否在限定工期和预算下搞定任务等。

考虑到职场和产品销售有着非常紧密的关系,我们这里使用后一个视角,而非是单纯的技术视角。

有几类本质上很不同的人都会被视为高手,比如说:

  • 能写出很牛的病毒的。这个不举例子,但当年读过CIH的代码,我是被其精巧给震住了。此外也许搞加密解密的也应该放在这个类别里。
  • 能把一堆3D图形放到64K的。以前专门有个比赛是干这个的,64K大小的EXE能给你放10几分钟很酷的3D动画,第一次见绝对会很震惊。
  • 能迅速调试出问题所在的。内存泄露、多线程同步这类问题往往让人纠缠很久也搞不定,但就是有人能很快的解决这类问题。
  • 能仅靠几个人就架起高并发网站的。新兴Web2.0网站如:Flickr,甚至还可以包括Google,在初期往往是几个人搞起来的,这些人名声不显,但绝对是高手。
  • 能主导开发出很牛的产品的。这个上可以想想Unix和Linux的作者等。
  • 能主持大规模软件设计的。这个往往更有商业价值,我们常说的Martin Fowler应该可以算在这个类别。
  • 能把一种语言研究的特别牛的。想想各个编程语言的创建者,想想C++的大牛们。当然创建某一门语言的也可以归到这个类别里。
  • 能开辟自己方法论的。比如搞CMMI的Watts S. Humphrey。
  • 能写出很牛的书的。比如:Windows平台下写了Windows核心编程的Jeffry Richard。
  • 能写出很牛的算法的。比如:Donald Knuth。

……

Read More

码路指南:缘起 专治各种迷茫

转自 http://www.nowamagic.net/librarys/veda/detail/2663 2014-01-01

此文章所在专题列表如下:

  • 码路指南:缘起
  • 码路指南:怎样才算是编程高手?
  • 码路指南:程序员的几个职场发展方向
  • 码路指南:为何你成不了编程高手?
  • 码路指南:在博与专之间取得平衡
  • 码路指南:别错过人生中学习的黄金时期
  • 码路指南:物质驱动与兴趣驱动
  • 码路指南:保持内心的青春与理想

  我们这一代的父辈,大部分都不是程序员,没有从事编程的经验。以我自己来说,我是2000年初中二年级才接触的电脑,而那时候也正是个人电脑开始普及的时候,所以我是随着PC和互联网蓬勃发展而涌起的编程者大浪中的一员。由于可鉴的前车并不多,这朵大浪会如何走向,又会有多少人拍死在沙滩上,后继的浪潮我们又该如何正确看待,这些问题其实我们都是要想清楚的。毕竟我们最起码要生活,那么职业发展问题是个大问题。

  我相信很多程序员都会有各种各样的迷茫,比如:

  • 我该如何入门?
  • 我该如何提高自己的编程水平?
  • 我的编程水平遇到瓶颈了,如何突破?
  • 为什么我努力看书学习,还是感觉没多大提升?
  • 我觉得我现在是专家,啥都做得出了!但其实你还是个编程新手
  • 我在公司里无晋升/加薪希望,该怎么办?
  • 我都过30岁了,还在编程一线加班,怎么办?

  等等……

  这些问题我们都需要弄明白。如何自己想不明白,就需要外人点播一下。

  我一直关注博客园的“理想流”,很欣赏他独到的思考,最近看到他出的书,还有写的“程序员生存定律”一系列文章,私以为对指导我们程序员的职业生涯有不错的帮助,于是拜读并加以排版整理,后续会再加入自己的一些看法,记录在“码路指南”这个专题里。希望更多人看到,也希望帮助更多人解决迷茫。

程序员技术练级攻略

转自: https://www.oschina.net/news/19857/programmer-level 2011年07月19日

月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文章。

我的这个朋友把这篇文章取名叫Build Your Programming Technical Skills,我实在不知道用中文怎么翻译,但我在写的过程中,我觉得这很像一个打网游做任务升级的一个过程,所以取名叫“技术练级攻略”,题目有点大,呵呵,这个标题纯粹是为了好玩。这里仅仅是在分享Mailper和我个人的学习经历。(注:省去了我作为一个初学者曾经学习过的一些技术(今天明显过时了),如:Delphi/Power builder,也省去了我学过的一些我觉得没意思的技术Lotus Notes/ActiveX/COM/ADO/ATL/.NET ……)

前言

你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:

  • 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。
  • 回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
  • 一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。
  • 一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。

注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:

  • 现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。
  • 越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。
  • 微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》
    所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。

Read More

想在 IT 行业牛B起来, 看他说了些什么... (年轻人必读)

转自: CSDN博客 程序人生 2015-05-27

最近收到一些在校大学生的来信,询问大学应该怎样学习,应该选择什么方向学习什么技术,应该如何为工作准备…… 看到这些问仿佛看到了当年的自己,深有感触!发现其中很多问题对大部分大学生都很有帮助,于是将回信以博客的形式公开,结合自己一路走来的经历与大家分享个人对IT行业、学习、工作的看法,希望能帮助更多的人。

有什么方式可以让我从牛A变成牛B?

IT技术方向划分:

你对技术方向的概括算是较全面了,我稍微修改一下觉得这样划分更合理一点:

  • 移动开发方向
  • web前端方向
  • web后台方向
  • 游戏开发方向
  • 算法/研究方向

因为互联网行业后端服务器一般都是Linux,所以web后台开发和Linux服务器开发可视为是一个方向(除非你指的Linux服务器开发是系统架构师,不过那是运维的工作,应该不算做开发吧)。还有一个方向是算法/研究方向(如大数据、云计算、内核开发),虽然你把它从本科的范围内排除了,但我个人不这么认为。虽然算法/研究方向基本上都要求研究生或博士及以上,但本科生还是有的,只是比较少,需要非常厉害的优秀人才,阿里的云计算还有本科生呢!还有就是游戏开发以C++为主却不仅限于C++,虽然很多大型游戏都是C++开发的,比如现在的手游也有Android、IOS的开发的,还有些游戏开发会用新的技术(如比较有名的Unity,可能在大学都还接触不到)。数据库基本上都是架构师和程序员一起的设计的,只有大公司才会有专业的DBA。

IT行业的发展趋势:

移动端

移动端(手机操作系统)是一个变化最快的领域,也存在很大的变数。10年之前,在诺基亚风靡全球的时候,你会想到Android有现在这么大的前景这么多的用户量吗?10年开始(其实08年就开始酝酿了),Android迅速崛起,发展异常的凶猛,到12年几乎人手一台Android设备了,与此同时诺基亚却一路下滑,直至跌到低谷再也爬不起来的,后来投入微软的怀抱也发展的不太顺利,已经是大势已去。而苹果从2007年第一代iphone诞生的时候开始,走的就是高大上的路线,主要针对的是高端人群,价格是所有手机中最高的,但技术也是最牛逼的,体验是最友好的,以至于每一次的发布会排队的人都济到爆!看到移动平台的快速发展和触摸屏手机的迅速崛起后,微软也于2010年投入了移动平台,发布了Windows Phone操作系统,凭借着 Windows PC操作系统的声望和Microsoft的品牌吸引了不少的windows phone的用户,但与Android和iphone相比,还是相差太远。个人认为:苹果是用户量较少,却是最赚钱的,凭借其强大的技术实力和追求完美的精神,在三到五年内应该还可以发展的很好,这方面的工作前景自然也是不错的;Android是用户量最多的,目前的就业机会还是挺多的,但未来是否会被新一代的手机替换还不可预知;windows phone关注的较少,个人不太看好!

互联网

我认为IT领域未来的发展方向,从实体方面来看一定是智能设备和物联网,从领域来看一定是互联网+,未来的网络将会越来越智能。

互联网是网络与网络,网络与人的连接;而物联网就是物体与网络,人与网络的连接。阿里巴巴的投资人孙正义在互联网大会上说过:“今天每个人大概会有两个移动设备,2020年的时候,每个人连接的设备的数量会达到一千个”。未来将会是周围都是物体,而物体都与网络连接,也就是周围都是物体,周围都是网络。而且物体将会越来越智能,智能家居应该会发展起来,比如你一回家,空调就开了,电灯就亮了;一出门空调和电灯就关了,还提醒你今天的天气状况…… 现在已经有很多物联网慢慢发展起来了。

互联网+就是互联网与传统行业的结合(互联网 + 传统行业)。现在又有一个新的说法,就是“+互联网”,比如万科的房地产以属于标准的传统行业,现在与快钱合作引入互联网,也想打造一个电子商务平台。不管是“互联网+”还是”+互联网”,都是互联网不断地渗透到传统行业,互联网与各行各业的结合将会更加紧密,比如互联网+金融,现在BAT三家打的正热闹呢!再比如互联网与传统餐饮业的结合,打造出了现在的百度外卖,再比如新兴的e袋洗是互联网与洗衣店的结合。

游戏

我本人不怎么玩游戏,对游戏不太了解!但从整个社会发展来看,世界在不断发展,中国也日益强大,随着经济水平的不断提高,人们有更多的时间用来悠闲娱乐,也有更好的物质基础。在这种趋势下,玩游戏的人应该会越来越多,游戏行业应该会越来越景气。

Read More

程序员必须进行的10项投资

转自: 博客园 http://news.cnblogs.com/n/209983/ 2014-06-09

1. 你的健康

  显而易见,开发人员经常都是坐着不动的。每天坐8到16个小时,只休息很短的时间,你的肚子周围很容易会堆起赘肉。肥胖是其它疾病的催化剂,而其中心脏病又是最可怕的。多花点时间运动一下就能避免这样的情况,如果有可能的话,花点钱办一张健身房的会员卡。

  长时间以不符合人体工程学的姿势打字,也容易使开发人员选成重复性的肌肉损伤,比如说腕管综合征。每隔几个小时拉伸一下你的手腕或者买块鼠标和键盘都能用的手腕护垫可以避免这样的损伤。

  盯着屏幕也会给你的眼睛造成压迫,这就是为什么建议配一副防眩光眼镜而不是普通眼镜的原因(假设你是戴眼镜的)。

2. 提高你的数学能力

  数学可以提高你的逻辑思考能力,解决问题的方式,在多数情况下,它还能增加你的耐心。有些数学知识是可以直接在软件开发中使用的,比如离散数学 ,但有些知识忘了也没事,这要看你从事的是那个领域的开发了。比如说,游戏开发人员经常会使用到物理和微积分,而我作为一名企业应用的开发人员,很少发现有能用上它们的地方 。不管怎么说,数学能让你变得更加优秀。

3. 提高你的英语水平

  编程、脚本 、标记性语言使用的都是英文,而开源项目比如Linux它们的注解通常也都是英文。来自世界各地的开发人员通过英语来协作开发。面向国际客户的开发人员都必须学习英语,因为这样才能够将业务需求转化成解决方案。

  明白了吧?英语对程序员来说,就好比二进制对于计算机一样。

4. 一个自己的域名和网站

  有一个自己专属的邮箱地址而不是什么something@yahoo.com或者someone@gmail.com是不是感觉挺酷?每年只需花费一点点钱,就能让你看起来和别人与众不同。我自己买的这个lambdageek域名只花了13美金而已。个人域名还能给你的个人品牌添加自信和专业,让潜在的用户或者同事了解到,你自己究竟是什么样的。当然了,这假设你的域名不能是什么乱七八糟.com。

5. 一个活跃的Github帐户

  作品集之于艺术家就犹如Github之于开发人员。这点就不必多说了。

6. 一台好的电脑

  你听说过有程序员没有自己的电脑的么?我是没听说过。没有自己电脑的开发人员就好比没有激光剑的绝地武士一样。我这里指的好的电脑至少得有4GB内存(要想不那么快过时至少得有8GB)。我比较推荐的是4000刀的Macbook Pro,不过对于那些有特殊需求的极端场景,我持保留意见 。

7. 足够快的网速

  互联网就是码农们的氧气。断网对我来说就好比断了空气供给一样,简直无法忍受。有了一个稳定的网络连接,你可以看下视频教程来进行学习,或者泡泡论坛,甚至可以及时关注到Hacker News上的最新文章。

8. 读一些经典的计算机科学的书籍

有一些书我认为是软件开发领域的经典之作:

  • 计算机程序的构造和解释
  • 算法导论
  • 离散数学及其应用
  • 代码大全2
  • 程序员修炼之道
  • 重构-改善既有代码的设计
  • 人月神话

9. 学士学位

  一个本科学历能够增加获取工作的几率。不管你是刚毕业的学生还是刚辞职准备找下一份工作,这都是有用的。再想像一下这样的情况 :如果很多研究生都挤破了头去抢一份工作,那么一个本科生的简历能被看到的概率又有多少?

10. 资格认证 (可选)

  资格认证能检验你的某一项技术的能力。通过了某项认证意味着别人已经认可了,你对企业认为可能有价值的某个东西有了比较深入的理解。有些公司会给有相关认证的程序员提供更好的薪水和待遇,但有些公司压根儿就不在乎这些东西。比如说,成为一名认证的Java程序员意味着你对Java语言理解得比较透彻了,但这并不意味着你具备了解决问题的能力。一些公司更看重的是一个人的关键的思考能力而不是他在某项编程语言上的经验,因为编程语言可以很容易学会,而解决问题则不然。

来自: it.deepinmind.com

如何成为一位杰出的程序员

转自: IT江湖 编程感悟 2014-07-02

如何成为一名杰出的程序员,这是一个比较复杂的问题,什么叫杰出?下面我给你大家总结一下,文中说的一些观点,你可能不认同,没关系!评论反馈一下!

1. 解决问题的能力和创新能力

个人觉的不管你是什么语言的程序员,在解决问题上面一定要有很好的方法,很快的解决问题。这种能力不是一年两年可以练出来的,需要大量的实践以及经验。创新能力对于程序员来说很重要,要学会举一反三,从不同的思路来创新出新的东西。对一些新的技术要时刻的了解并学习。

2. 一颗不断学习,不断思考的大脑

技术更新的很快,一些新的技术是来解决一些旧的框架出现的问题的,所以我们要有一颗不断学习的心,这样我们才不会被淘汰,而且这些的新的技术并不是很难,所以我们一定抽出时间来学习新的知识,丰富自己!!

3. 技术要做到精益求精

编程语言那么多,多语言的程序员虽然抢手,但是如果是半瓶水的水平,估计也是没人愿意要的。
现在程序员非常多,是因为这个行业入门的门槛非常低,也就造成行业的水平参差不齐。做一个网站很难么,找个现成的框架,懂点数据库,建个数据表,前端再找个现成的模板,修修改改一个网站就出来了。
但是满足这样就完了?那么水平可能永远就是这样了,其实这其中每一个点都是可以研究的很深的,比如网站的大数据存储,如何提供程序并行运行的效率,,未来计算机行业的技术分工会越来越细,任何一个方面的专家都是相当有用的

4. Stay hungry ,Stay Foolish

技术是永无止境的,好的程序员必须保持对于新的技术敏感度,保持学习的热情
同时看书学习可以更多的得到思维模式,可以在最快的时间发现问题的所在
如果没有好的思维模式,很多程序员遇到需求了,先百度,看看有没有相似的代码,遇到bug再去百度下,看看别人是怎么解的,这种永远只是码农而已
听说一本好的程序书籍至少要读12遍才能理解。。。

5. 事情做得专业的前提是能关注到细节

我觉得细心谨慎是程序员最基本的修养和素质,逻辑能力啥的倒是更为上一层的事情。整天想好的算法和架构是没有用的,你知道当你跟产品经理说解了半天的bug是因为少了个分号的时候,产品经理心中鄙视的是多么的波涛汹涌么。
如果连这些代码基本的细节都不能注意的话,谈何其他呢
祝大家成为杰出的程序员!!

IT江湖官网群:383126909 我们一起成长

IT 推荐书籍 - 2016

开发语言

C/C++

  • C++ 程序设计语言
  • Effective C++
  • More Effective C++
  • Effective Modern C++
  • C++ 性能优化手册

python

  • python 核心编程

java

  • Java核心技术卷1 + Java核心技术卷2
  • Head First 设计模式

系统原理

  • 编译原理

操作系统

  • 深入理解计算机系统
  • 深入理解LINUX内核
  • Unix 核心编程

计算机网络

  • 计算机网络
  • TCP/IP 卷 1,2,3

软件开发

  • Google 软件测试之道

软件工程

  • 系统架构设计师教程
  • 系统分析师教程

IT BoK 4 Snowyying

更新时间: 2016-12-02


一 通用领域

1. 语言
  • C/C++:
    C (procedural);
    C++ (object-oriented);
    Template (generic) [meta programming];
    STL [functional].
  • lua
  • python

推荐书籍: 7E1I

2. 框架
  • Boost (ASIO)
  • Duilib
3. 平台

恰如Jeffry Richter所说:
大多时候可以从内存机制、线程机制、错误处理、异常处理、组件构建、组件组合等方面来进一步考察一个平台。

  • POSIX
  • C/C++ Runtime Library
  • Windows API
  • .Net Framework
  • Java API
4. 计算机体系结构
  • CPU指令
  • 虚拟存储
  • 汇编语言

推荐书籍: 计算机体系结构-量化研究方法

5. 操作系统
  • 进程
  • 内存
  • 调度
  • IO和文件
  • 嵌入式系统

推荐书籍: 操作系统—精髓与设计原理; 深入理解Linux内核

6. 数据库
  • SQL
7. 实用技巧
  • 法律法规
  • 标准指南
  • 测试工具 [gtest/vs]
  • 调试方法 (性能/压力)
  • 代码生成

二 概念逻辑

1. 数学
  • 数据结构
  • 常用算法
  • 高数/线代/离散
2. 经济学
3. OOA / OOD
4. GoF
5. 重构
6. UML

推荐书籍: 设计模式-可复用面向对象软件的基础; 重构-改善既有代码的设计; UML用户指南; UML参考手册


三 专业领域

1. 网络
  • TCP/IP 协议
  • Wireshark 网络分析
  • 网络应用 (网络库)(SOCKET+P2P)
  • TCP/IP 路由技术

推荐书籍: TCP/IP详解(I+II+III); Unix网络编程(I+II)

2. 安全
  • 密码编码学
  • 网络安全
  • 渗透测试 [Kali linux]
3. 多媒体 (图形图像 / 音视频)
  • 图形
  • 视频 (ffmpeg)
  • 音频

四 间接知识

1. 软件工程和方法论
  • swebok
  • SQuaRE
  • CMMI
2. 项目管理
3. 系统分析师 / 架构设计师

代码大全2; 人月神话; 人件; 程序员修炼之道-从小工到专家; 设计原本