㈠ 程序员的工作环境是怎样的
每个人职场人都希望在一个轻松、开心、干净、舒适的环境里面工作,这样心情好工作起来自然效率高,但是这毕竟是理想状态下的工作环境,当然现在绝大多数企业工作环境虽然达不到百分百,但至少有百分之六七十以上吧。
那么对于程序员这种有点特殊的工种工作环境又是怎么样的呢?
程序员又被人们称之为码农,也有人调侃戏称“程序猿”,程序员对工作环境往往需要有一张大的办公桌,他们不仅用一台电脑在工作,有时候需要几台电脑同时操作,而且遇到一些bug或者瓶颈的时候需要和同事协同工作,当然在硬件方面除了办公桌要大外,还需要配置比较高的电脑,毕竟这是程序员最基本的工作工具,试想如果刚有灵感,结果电脑卡顿或者死机了,那有可能灵感顿时就消失了,所以他们大多数工作环境都拥有足够大的办公桌和高配置的电脑。
前面就提到了程序员是有点特殊的工种,因为他们往往加班到很晚,时常会通宵,这就和我们正常上班的时间上错开了,他们往往白天睡觉,晚上工作,有时候为了打起精神工作,他们提神的方式各自不同,有抽烟的、有喝咖啡的、有听歌的等等,大家可以想象这是什么样的工作环境吗?但是程序员工作的时候,大多数情况下都需要安静的环境,毕竟安静能让人更好的思考问题。
每个人对工作环境要求都不一样,让自己觉得舒服的环境是自己愿意留在公司的原因之一吧,程序员也是一样的。
大公司的程序员,工作环境基本上就是一个电脑版的“衡水中学”,每天就是开会写代码改代码查代码开会继续循环往复,跟中学里每天就是拼命读书刷题刷题读书吃饭无味上厕所要跑一个样。
硬件配置无需你考虑,肯定是够你用。跟人的成本比起来,硬件就是个渣。
大公司的程序员工作比较稳定,每个人的分工是比较明确的,职业路径也很明晰,越往上的职位对智商的要求越高,这点和靠情商往上升的工作还真有点不一样。在程序员这个队伍里拍马屁搞关系基本没啥用,你写的代码都无需用户检验,自己一跑就知道成不成。这也是IT公司通常人际关系和氛围都比较轻松且简单直接的根本原因,特别适合那些不喜欢搞关系的同学去撸起袖子加油干。
如果你想在这个行业长期发展,智商一定要够用,真的。有没有基础倒在其次,如果数学好更佳。有些业内大咖本身是学数学或物理这些靠智商吃饭的学科的。
小公司的程序员,尤其是那些非IT类小公司里的程序员工作压力更大。面对不懂程序的销售和老板,还有极度贪心又不愿多付费的客户,需求三天两头变,界面是个人就可以提意见改,时间永远是“明天就要”。他们觉得程序员比悟空办法多,所以什么要求都提得出来。能在小公司做出成绩的程序员,真心让人敬佩不已。
小公司的程序员是掌握公司核心机密最多的人,比老板都掌握得多,所以通常他们的待遇也还过得去。另外他们一来二去把公司业务摸透了,出来自己干的也不少,当然能不能干成是另一回事。
其实程序员的工作环境真没什么要求,只要没什么干扰就行。学霸们在这里会找到十分熟悉的感觉,所以程序员之间以“同学”相称的极多。
我是2015年本科毕业的,但是2014年就开始工作了,从程序员+运营的工作开始实习(其实也是看最后哪一个更合适就走哪一个方向)。
对于实习阶段,因为当时待的是小公司,所以大家的配置都很一般。几个主力程序员加上我这个实习的,工作用的都是windows笔记本,联想的,除了我自己配的固态硬盘之外,很多都是机械硬盘在跑,没有特别明确的代码库规范、没有知识系统,交流全靠跑,有的是后端和前端一起干、前端和客服一起干,所以我兼职运营也是如此……平时要是不忙的话,那还没什么事儿,大家会闲聊扯淡,也算是其乐融融;但是要是忙起来,可能会突然加班到很晚——当然这种情况还是比较罕见的。
工作到了中型公司,跟以前的小公司就不在一个量级上了。这个时候主要的工作是后端开发,配置的电脑是联想的ThinkPad,但不是最高配那种,仍然没有固态硬盘,慢的要死。第一梯队的程序员配置有双显示器、机械键盘、mac。我的话配置的是外接显示器,座椅很一般,坐久了比较累。公司分工明确,办公室跨越两座楼,各个团队都有自己的办公室。有自己的wiki、定期站会、严格的代码规范、安全规范。一般情况下主要是在解决各种bug,或者开发新系统。偶尔流量高峰的时候,会加班到一两点,平常并不是特别忙,工作还是比较有序的。
其实想要招妹子进团队的,因为我们团队唯一的测试工程师长得真的一般,而且性格也很差……一个性格好长得好看的运营妹子真的能调动整个团队的气氛。
所以什么机械键盘、Mac、外接多少显示器、加多大固态硬盘、多好的人体工学座椅……这些都是假的,开发的团队里面有好看的妹子才真的是“好的开发环境”。
可以穿拖鞋?可以戴着耳机听着歌?配备两个显示器?身边总是围绕这MM端茶递水果?还是以上都不是,而是诗和远方?
程序员,一个高薪却严重亚 健康 的群体 。他们有着极客精神,疯狂coding的时候可以废寝忘食,但他们也追求精神自由,喜欢自由自在。对于这样一个群体,良好而又恰到好处的工作环境显得尤为重要。
1. 弹性上班制
常规企业的朝九晚五上班制度,说实话并不适合程序员一族,因为这种制度一定程度上扼杀了这个最需要差异性的群体的差异性,把程序员的Coding灵感等同于工厂流水线上机械手臂,希望按钮一按下,灵感发动,按钮再一按下,灵感结束。这是一种一厢情愿的想法。
所以对于高层次的程序员群体,请不要在作息时间上严格限制他们,因为他们不是装配工,有着独一无二的个体差异性,有着不同的思维G点,他们需要差异性的时间作息来调整自己的最佳状态,从而迸发激情和灵感。
2. 宽松的工作氛围
程序员群体讨厌管理,任何自上而下的所谓管理都容易引起程序员们的心理抵触,特别是那种死板的、指令式的管理模式,尤其让程序员们作呕。
程序员们希望自己做的事情是出于内心的意愿,那样他们就会干劲十足,而不是来自于经理计划文档中那条冷冰冰的文字,哪怕是他们心里意愿的和经理的计划本是同一件事。所以对于程序员群体的管理需要技巧,要化管理于无形,让他们感觉不到管理的痕迹,让他们感觉着做这些事情就是出自于他们自己的意愿。
总结来说就是让他们作为自己的管理者,而团队的管理者所要做就是培养他们这种自管理的能力。
适度的压力可以产生做事的动力,但长时间的持续的压力却是扼杀激情和创造力的罪魁祸首。压力会让程序员焦虑,同时也会造成低劣的设计和代码实现,因为交付的压力会让程序员对匆忙设计出来的方案妥协,而不会持续的优化找到最优方案。而一系列看似微不足道的缺陷设计集合到一起,就会形成让人意想不到的、不可控制的乱象。
所以,“快”不见得是好事,“慢”也不见得是坏事。
3. 鼓励参与开源项目
开源项目社区的欣欣向荣,是一朵盛开的奇葩,无论怎么赞誉都不为过。
一些着名的开源项目,例如Linux,Apahce, openssl等等,数不胜数的优秀设计,给我们带来了多少的惊喜,同时也催生了多少的商业公司。
参与到开源项目中,是一个程序员从初级走向高级、完善技术的最有效途径之一。一些着名的开源项目,架构设计和Coding技巧上都属上乘之作, 浸淫其中,受益匪浅。
其实以上三点不仅是对程序员群体,对任何一个职业的人来说都是适用的。再看下知乎上程序员们理想中的工作环境是怎样的。
@萧井陌:我读书的时候就有一个执念,一定要找一家可以穿拖鞋背心大裤衩上班的公司(当然我不穿大裤衩),如果我找不到这样的公司,说明我学得不好,所以我一直以来努力的目标似乎只是为了进一个能穿拖鞋的公司?哈哈哈哈。。。
@知乎用户:我只想要2个显示器
@知乎用户:1.安静,没有人随便喊你或者在你耳边说话;2.绝对的自由,程序员都有一定的怪癖,比如我喜欢听着摇滚乐写代码。这些都要被允许。3.温度,气味舒适的环境。
4.有个养眼的MM同事,大概是这样的
嘿,箭头方向那个哥们才是真正的程序员吧
5.独立10M光钎线
@Indream Luo,软件工程师:1.女多男少,人均年龄不到27;2.身处白云山上,与广东外语外贸大学一墙之隔;3.无边界文化,有问题可以找任何人沟通,包括高层,如果你见得到;4. 健康 文化,加班有补休,提倡8小时,自建食堂和农场,买下巴马泉眼特供矿泉水
@石磊
硬件:
1. 顶配的 MacBook Pro。
2. 上厕所不需要排队。
与人相关:
1. 不会在开发到一半时被通知要重新讨论功能,然后把以前做的东西全部推翻。
2. 没有不必要的会议,必要的会议速战速决。
3. 行政人事什么的做事清爽高效,这样不用在各种日常手续上浪费时间,只管写代码就好。
4. 同事们效率高、工作态度严肃、善于沟通、活泼有趣。
@张英锋:最理想的工作环境应该是能帮助团队沉下心来,开发出最好产品的环境。
1.上级对程序员工作的认可和尊重;
2.对所作的工作有自主权和决定权;
3.营造能让程序员专注于工作的设施,比如大家都提到的安静、以及各种提高生产率的硬件条件;
4.最后是公司是盈利的,最好是暴利,能持续提供更多福利。
@庄生:其实最重要的工作环境,还是有一帮靠谱的同事,真心的。可以术业有专攻,但是该你负责的你负责到底,保质保量,不要麻烦别人。
那你呢?你希望你的工作环境是怎样的?
上联:一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然七点起床八点开会处理九个漏洞十分辛苦 ;
下联:十年编码九年加班八面无光忙的七窍生烟到头六亲不认五体投地依旧四肢酸软三更加班只为二个臭钱一生孤苦;
横批:苦逼程序员。
程序员飘过
作为一名程序员的我可以很负责任的说:是的,工作环境就像问主图片那样,可能会稍微好点,我们公司都是中央空调,不用电风扇!
我在程序员的岗位上也有好几年了,也待过几家公司,其实就工作环境来说,程序员的工作环境还是不错的,不用风吹日晒雨淋,而且是冬暖夏凉!和人们眼中的白领工作人员的工作环境是差不多的。
工作氛围其实也是很好的,程序员在穿着方面大部分公司是没有什么太大要求,可以穿着自己喜欢的风格(脑补一下大裤衩配凉拖的程序员正在撸代码),同事之间的交流也是很活跃的,所以程序员的苦逼之处不在工作环境,而是工作内容和压力。
程序员分工:
1.纯软件工程师,就是只靠电脑吃饭的,设计包括但不仅限于---网页、架构、UI、数据、运维、系统等等,整天与代码打交道;
2.Firmware(分位)工程师,半软半硬的工种,要焊板,要搭建环境,还要写代码维护代码,算法可能没有纯软件工程师牛,但动手能力绝对强,涉及的知识面可能更广。
本人就是后者,来看下我的桌面:
各个公司对于办公环境都不一样,国外都注重个人隐私,很多都是一个人一个封闭的房间。国内大部分就像图中所示那样,半隔开。也有 科技 公司,鼓励大家敏捷开发,多沟通,开方式办公
请忽略那些包含“安静,优美,闲逸的办公环境”的答案吧!
图中的环境,只是正常普通公司的工作环境。
不一定是程序员的。
程序员的工作环境,因工作内容,导致需要很多屏幕。
而且电脑配置也需要很高。
每个人因面对的公司、自身能力等因素,都会导致工作环境的不一样。
所以就有了工作环境好坏的区分。
如果你曾对着大海构思过某个接口,
在樱花飘落的院落里调试过代码,
那么你还觉得在写字间喝着咖啡对着三屏显示器敲键盘是理想的环境吗?
工作环境,还是得靠自己改变。
在程序者的不断追求下,编程是可以和写作一样成为艺术创造过程,
那么任何一个能够激发出你灵感的时刻和环境都应该可以成为你的办公环境。
资深码农应邀回答这个问题。笼统来说,程序员的工作环境与图中展现的差别不大。但根据工作属性和所属行业来讲,还是有一些区别。
甲方和乙方的区别
我在刚毕业时进入了一家软件外包公司,几乎所有的工作都是在甲方所在地完成的。
因为甲方员工是公司的稳定员工,所以工位来讲就要精致一些,配备也要完善一些。一般都会是隔间,有抽屉、插座、文件架、座机、台式电脑,甚至还有床等等。
而我们作为乙方因为流动性大,人数也不固定,甲方公司不太可能为我们准备这些精致的办公位,一般只是拉几张桌子拼凑起来,然后再接几个线板,有时候靠椅都没有,还得坐独凳。
技术驱动和业务驱动的区别
现在任何一个互联网公司,技术部门是必不可少的。但是有的公司会以业务为驱动,有的公司会以技术驱动业务。
以业务为驱动的公司就会优先考虑业务的发展,然后技术来辅助实现。我现在所在的就是这样一家公司,这样的公司技术部门就会非常的小,人员也会很少。这样的公司程序员的工位大体上和整个公司的风格没有太大的区别,因为人少,一般只有5-6个人,做技术的也喜欢安静,所以一般位置会选择靠近办公室的角落。
以技术为驱动的公司会依靠自身技术实力结合行业发展,碰撞出一些具有竞争力的业务品种,并与业务部门配合来实现并推广产品。这样的公司技术人员起码占到50%以上,这样的公司更有可能为程序员规划一个单独的大办公室,与外界隔离。一方面是为技术人员提供安静、舒适的办公环境,另一方面也是尽量避免闲杂人等进出公司技术核心所在地。
以技术为驱动的公司往往技术实力比较突出,所以他们会为自己的技术团队配备“驾驶舱”、小机房等设施。
就问题中的格子间来讲,不管是什么性质的公司,只要场地不是特别的拥挤,都会设计成格子间,这样既保护了员工隐私也充分利用了办公场地的空间。这并不是程序员特有的风格。
㈡ 程序员,你们经常逛的网站有哪些
淘宝 亚马逊 小红书 网易考拉
虽然我是程序猿 可是我还是要买口红啊= =
㈢ 如何成为一名程序员 6种方法来成为一名程序员
目录方法1:网络编程1、了解网络编程的含义。2、浏览不同的网站,了解它们的外观。3、学习至少一种头脑风暴技术/方法,并学习一个用来实现头脑风暴的软件。4、熟悉网站结构。5、赶紧学一门图形设计的课程。6、了解网络下部构造的基本情况。7、学习HTML和CSS语言。8、学习XML及其相关技术,比如XSL和XPath(不是必需,仅作推荐)。9、先建立简单的静态网站,直至你熟悉并习惯HTML语言。10、学习客户端脚本语言。11、熟悉你所学的客户端脚本语言。12、学习至少一种服务器端脚本语言。13、学完服务器端编程语言之后就开始创建一个试验项目。14、获得你的网站,开始用你自己的网页实验。方法2:桌面软件编程1、弄清楚桌面软件编程是怎么回事。2、了解不同的电脑硬件结构。3、学习一种入门级(小孩子学的那种)编程语言。4、学习程序化、面向对象、函数设序设计规范的入门。5、学习一种程序化程式设计语言的入门课程。6、学习至少一种高级建模技术,比如UML 或ORM。7、开始编写一些小的主控台应用程式或类似的应用程式。8、学习一门你选择的编程语言的更高级课程。9、应用你所10、至少再学习一门编程语言规范的入门课程。11、试着比较你所学的两门编程语言。12、利用你学过的一种语言来学习可视化编程概念。13、开始把你所学的知识运用到你设计的软件小工程中。14、创建一个虚拟的"毕业工程"。15、通过学习更高级的课程、更加注意细节以及在网上学习搭建架构的技巧,来加深对你学过的可视化架构/库/包的理解。16、搜索其他含可视化元素的包/库并学习它们。17、学习图形学课程(而非图形设计)。18、成为游戏程序员(不是必须的)。方法3:分布式程序设计1、处理分布式应用编程。2、快速了解通信系统及其硬件。3、熟悉网络硬件结构和设备,比如集线器、接线台和路由器。4、学习网络协议的课程。5、学习XML 语言,并熟悉它。6、开始学习一门shell脚本语言。7、开始时用上你学的脚本知识,只运用程序化程式设计。8、使用你所学的脚本语言,写出实现机器之间通信的脚本。9、转移到桌面脚本/编程语言。10、专注于语言的核心部分,尤其hi那些支持网络。11、学习分布式应用设计与结构的课程。12、使用你所学的编程语言来了解服务部分建构和服务。13、学习如下技术中一种或更多。方法4:库/平台/框架/核心编程1、了解什么是核心编程。2、学习一门支持创建可重复使用内容/包的编程语言,如果你还没学过的话。3、学习一门UML 和ORM的高级课程。4、学习软件工程的课程。5、学习至少一个模块,基于内容的、面对对象的和 事件驱动编程技术和概念。6、进一步了解不同的操作系统及其支持的编程架构。7、集中学习独立平台架构、编程语言和技术。8、如果到目前为止你学习的编程语言具有ANSI/ISO/EEE/W3C标准版本,那么掌握这些标准。9、尝试模拟简单的、已经建立的库,尤其是开源的库。10、在你的编程领域内寻找开源的包。11、学习不同方法。方法5:系统编程1、了解系统编程的定义。2、跟着"桌面应用程序员"的前三个步骤。3、学习线性代数的入门课程。4、学习微积分课程。5、学习逻辑学和/或离散数学课程。6、了解不同的"准操作系统"。7、学习计算机硬件结构的课程(或者作为替代,看看书)。8、深入理解不同的计算机硬件平台。9、初步熟悉你所选择的硬件平台/操作系统的汇编语言。10、学习ANSI C 和 C++ 语言,还有程序化程式设计的一些概念。11、在你选择的平台上理解并实践C/C++标准库。12、搜索网络资源、书籍和课程来理解你的平台独特的C风格。13、用C/C++练习编写高级代码。14、学习更高级的Assembly。15、学习操作系统设计的课程。16、寻找并阅读你所选择的平台的相关文章。17、练习你已经掌握的知识。18、以最有益的顺序学习语言。方法6:编程科学1、了解编程科学家是做什么的。2、累积和四年制计算机科学学历同等多的科学知识。3、选择特定的领域。4、考虑获取更高级的学历。5、了解你选择的编程领域的相关技术和编程语言。成为程序员是一个日积月累的过程,需要日复一日年复一年的技能增长。编程本身是有趣的,并且有回报(脑力层面、精神层面、经济层面)。这份指南不能保证你轻松当上程序员。不要神化下面这些步骤,从中你大概能了解在现今编程界如何成为一名程序员。
方法1:网络编程
1、了解网络编程的含义。网络应用是指设计在网络结构顶层的软件部分。这就意味着这些应用是通过诸如火狐或IE之类的浏览器来处理的。架构于网络结构的顶层并不一定要连接到网络。这就是说网络应用建立在如下标准网络技术的顶层:HTTP
FTP
POP3
SMTP
TCP
IP协议
HTML
XML
Coldfusion
ASP
JSP
PHP
ASP.NET
2、浏览不同的网站,了解它们的外观。(右击,选择"查看源"或按F12。)寻找网站类型/内容的多样性,而非数量。通常你需要访问以下网站类型中至少一种: 团体网站(商业公司,非营利机构/组织,政府组织)
网络索引引擎(搜索引擎,meta搜索网站,专业化搜索引擎,目录)
数据挖掘网站
个人网站
信息/网络全书式网页(维基,数据单,技术规格,人工列表目录,博客和日志,新闻和新闻机构网站,黄页,等等。)
社交网站(社交门户,书签网站,记录笔记网站)
合作网站(这包含了上面提及的目录,比如维基和博客)
3、学习至少一种头脑风暴技术/方法,并学习一个用来实现头脑风暴的软件。例如:头脑风暴图和微软Visio。
4、熟悉网站结构。指的是创建概念化网络范式、网络地图和导航结构。
5、赶紧学一门图形设计的课程。尽量学习至少一个图形编辑/操作软件包(不是必须的,但强烈推荐)
6、了解网络下部构造的基本情况。包括了解以下: 基本网络服务协议(HTTP,FTP, SMTP和POP3或IMAP4)
网络服务器软件(最好其中一个就是你以后主要工作的平台)
网络浏览软件
邮件服务器和客户端软件
7、学习HTML和CSS语言。或许你还想要"所见即所得"软件包来编辑HTML。
8、学习XML及其相关技术,比如XSL和XPath(不是必需,仅作推荐)。
9、先建立简单的静态网站,直至你熟悉并习惯HTML语言。
10、学习客户端脚本语言。多数人要么学java,要么学VB,但也有一些人学习Perl和DHTML。
11、熟悉你所学的客户端脚本语言。潜意识里提醒自己只用你学的那个语言。只有在你熟悉你的客户端脚本语言之后才能进入下个步骤。
12、学习至少一种服务器端脚本语言。如果你只用一种服务器软件,那就学其中一种编程语言。否则,你得每个服务器软件都学至少一种编程语言。
13、学完服务器端编程语言之后就开始创建一个试验项目。
14、获得你的网站,开始用你自己的网页实验。
方法2:桌面软件编程
1、弄清楚桌面软件编程是怎么回事。多数桌面软件程序员都是编写商务需要的代码,所以好好了解一下商业及其组织和经济结构将对节省时间、提高效率大有裨益。
2、了解不同的电脑硬件结构。看看数字电路设计和电脑结构的入门级课程,但是也有人认为这对于刚起步来说太超前了,所以看两三篇说明的文章(比如 这一篇 和 这一篇)就够了。学完第一种编程语言后你可以再返回这个步骤。
3、学习一种入门级(小孩子学的那种)编程语言。不要因为你不是个小孩子就不好意思去学。这些入门级语言能大大减轻你正式学习第一门编程语言时的痛苦和压力。然而这一步也不是必须的。你也可以在上一步之前完成。
4、学习程序化、面向对象、函数设序设计规范的入门。
5、学习一种程序化程式设计语言的入门课程。无论你以后选择何种编程语言,在某种程度上它都要求程序化程式设计。此外,据多数程序员反映,程序化程式设计总的来说是了解编程的一个很好的切入点。
6、学习至少一种高级建模技术,比如UML 或ORM。
7、开始编写一些小的主控台应用程式或类似的应用程式。你可以利用编程书中的常见小练习。选择一个工具,用你所学的编程语言编写程序。
8、学习一门你选择的编程语言的更高级课程。确保进展之前先理解下列概念,并能熟练运用。对程序用户输入输出信息。
程式化设计语言写成的程序中的逻辑流程和执行流程。
声明、分配和比较变量
编程结构分支,比如if..then..else 和 select/switch..case.
循环结构,比如while..do, do..while/until, for..next.
创建、调用程序与函数的编程句法
数据类型及如何操控
用户定义数据类型(records/structs/units)及其使用
如果你的语言支持超载函数,理解它。
你选择的语言的内存处理方式(指针,变量窥视,等等。)
如果你的语言支持运营商超载,理解它。
如果你的语言支持delegates/函数指针,理解它。
9、应用你所学的高级技能 面向对象的规范
10、至少再学习一门编程语言规范的入门课程。推荐学习每种范式的编程语言,多数高级程序员确实是这么做的,然而,通常你开始时只学一种,应用所学知识训练了一段时间,获得了编程的鲜活经验,然后接着学习另一种。试试下面的语言: 逻辑编程范式
函数编程范式
面向对象的范式
11、试着比较你所学的两门编程语言。评估各自利弊。通常可按以下方法完成拿出你在学习第一门编程语言时编写的简单范例,现在用第二门语言重新编写。
创建一个工程,尽量用上两种语言完成它。有时取决于你选择的工程和语言,你可能仅用一门语言还无法完成这个工程呢!
写一份两种语言之间相似结构和独特之处对比的速查表或一览表。
尽量使用另一门语言找到模仿这两门语言中独特之处的办法。
12、利用你学过的一种语言来学习可视化编程概念。几乎所有的编程语言都具有支持可视化编程和其他支持控制台或类似控制台编程的版本/库。同时进行的包括: 初步了解事件驱动编程。在某种程度上,多数可视化编程依赖事件及事件处理(用上你选择的语言)。
尽可能多的尝试桌面软件,理解软件是做什么的。多数软件开发公司会提供产品的测试版,你可以拿来测试软件。在完善用户界面方面保持更新。
阅读关于图形用户界面的文章或教程。
13、开始把你所学的知识运用到你设计的软件小工程中。尽量把你的编程专业知识运用到你日常生活中的问题上。比如,编写程序,批量重命名文件,视觉上比较文本文件,复制目录里的文件名到内存/文本文件之类的东西。刚开始简单一点。
14、创建一个虚拟的"毕业工程"。把这个放到最后完成,用上你到目前为止学到的可视化编程技术。
15、通过学习更高级的课程、更加注意细节以及在网上学习搭建架构的技巧,来加深对你学过的可视化架构/库/包的理解。
16、搜索其他含可视化元素的包/库并学习它们。
17、学习图形学课程(而非图形设计)。对于想要写出吸引人的用户界面元素的程序员来说,这将大有裨益。
18、成为游戏程序员(不是必须的)。很大程度上游戏编程是被当作桌面编程的。如果你想成为游戏程序员,完成这些步骤后你需要进一步学习游戏编程。对于游戏程序员而言,图形学课程是必须的,后续步骤中第二门语言应该选择逻辑/函数编程语言(最好是Prolog或Lisp)。
方法3:分布式程序设计
1、处理分布式应用编程。分布式应用编程被许多人认为是最难学的一种,它要求计算机和通信技术中的不同知识。
2、快速了解通信系统及其硬件。这个步骤不是必须的,但是对于理解网络拓扑结构很有用。
3、熟悉网络硬件结构和设备,比如集线器、接线台和路由器。
4、学习网络协议的课程。在你开始分布式应用编程之前,你需要好好理解"开放系统互联 (OSI) "模型、以太、IP、TCP、UDP和HTTP 。
5、学习XML 语言,并熟悉它。
6、开始学习一门shell脚本语言。对基于Windows的编程,可以是任何能与Windows脚本宿主兼容的脚本。对基于Linux的编程,Bash脚本和 Perl就够了。对这两个平台都强烈推荐Java,原因如下: 几乎所有操作系统的都支持脚本宿主(Windows 脚本宿主默认支持java ,大多数Linux发行版都有支持java脚本控制的包)。
许多开发者认为它很容易学。
当你需要学第二门编程语言(C,C++,C#,Java和J#都有ALGOL开源句法)时,它拥有的ALGLO开源句法就能使你熟悉更多编程语言
通过学习java,你会熟悉网页的客户端脚本,这可谓一大福利!
7、开始时用上你学的脚本知识,只运用程序化程式设计。之后,根据你的脚本语言和它所支持的,你可以用上更高级的编程技巧和范式。所有的脚本语言在某种程度上都有程序化程式设计的一些方面。
8、使用你所学的脚本语言,写出实现机器之间通信的脚本。学习完成这个所必需的东西。简单的通信就足够了。
9、转移到桌面脚本/编程语言。一个比较好的是多范式语言,比如python。简单了解第二门语言。有许多理由让多数程序员选择java。然而,在这个领域内C#正在获得多数优势。Java和C#被青睐的原因如下:它们是面向对象的编程语言,使大量程序员免遭实现细节之苦,因为它们都支持组成部分(代码单元、预编译,它们可以执行特定任务,并被用到其他程序中)。
它们支持事件驱动编程,在某种程度上还支持OO和程式化程序设计。
建立语言的架构按属性分布(比如Java)。
有许多现成的包来处理。社交网络同时作为开源代码和架构内置包,这使得程序员继续其他人工作更加容易。
10、专注于语言的核心部分,尤其hi那些支持网络。少注意用户界面元素,比如输出,窗口设计和技术等。
11、学习分布式应用设计与结构的课程。可以通过书本、网上教程或学术课程来完成。然而,十分有必要理解分布式应用的结构及其概念。
12、使用你所学的编程语言来了解服务部分建构和服务。
13、学习如下技术中一种或更多。推荐你每一种都了解以下。多数分布式应用程序员不会止于一两门编程语言,他们会每个操作系统各学至少一种语言。这是因为如果你希望你的应用"分布式",你应该至少为每个主要的操作系统各提供一个版本。公共对象访问代理体系结构(CORBA)
简单对象访问协议(SOAP)
异步JavaScript和XML(AJAX)
分布式组建对象模型(DCOM)
.NET远程处理
XML 网络服务
方法4:库/平台/框架/核心编程
1、了解什么是核心编程。核心程序员几乎都是高级程序员,已经从编写应用转变为给其他程序员编写代码汇编。
2、学习一门支持创建可重复使用内容/包的编程语言,如果你还没学过的话。
3、学习一门UML 和ORM的高级课程。多数库开发者使用其中一种,或两种都用。
4、学习软件工程的课程。
5、学习至少一个模块,基于内容的、面对对象的和 事件驱动编程技术和概念。你所学覆盖越多编程范式和语言,你就能成为越成功的库/包程序员。
6、进一步了解不同的操作系统及其支持的编程架构。
7、集中学习独立平台架构、编程语言和技术。
8、如果到目前为止你学习的编程语言具有ANSI/ISO/EEE/W3C标准版本,那么掌握这些标准。无论何时尽可能使用标准代码。
9、尝试模拟简单的、已经建立的库,尤其是开源的库。这在成为库/包程序员的早期阶段十分有用。从简单的包开始,比如单位转换和中间科学计算包。如果你是大学生,利用你的非编程课程,尝试把这些课程的方程式与核心科学用作库。
10、在你的编程领域内寻找开源的包。首先下载包的二进制/可执行文件。尽量去用,并发现它的利弊。之后,下载源,尽量弄明白它是怎么完成的。尝试再创造这些库或其部分。刚开始,看完代码再做;之后,先做再看代码。后期阶段,尝试完善那些库。
11、学习不同方法。给程序员分发、配送内容。通常,库/包程序员倾向于以递归和/或迭代的思想来思考他们面临的所有问题 。尽量把每个问题当作一个小问题的汇编(一系列更小的任务)或一个重复的不断缩小问题范围直至把这些更小的范围彼此堆到一起的处理过程去思考。
库/包程序员倾向于概括化。也就是说,当面临一个特定的简单的问题时,他们通常会想到一个更为概括的问题,并努力解决这个更概括的问题,如此,小问题便不攻自破。
方法5:系统编程
1、了解系统编程的定义。系统编程处理的是编程的"科学",而不是具体的编程实现。不要把你自己栓到特定平台上。
2、跟着"桌面应用程序员"的前三个步骤。
3、学习线性代数的入门课程。
4、学习微积分课程。
5、学习逻辑学和/或离散数学课程。
6、了解不同的"准操作系统"。这可以通过以下途径完成:了解操作系统是如何安装的。
了解在一台PC上如何安装不同的操作系统(不是必须的,但作为推荐)
安装不止一种操作系统。不要在系统中安装任何辅助包,相反,仅利用操作系统本身提供的函数。
7、学习计算机硬件结构的课程(或者作为替代,看看书)。
8、深入理解不同的计算机硬件平台。
9、初步熟悉你所选择的硬件平台/操作系统的汇编语言。稍后你会学习其他平台/系统的汇编。
10、学习ANSI C 和 C++ 语言,还有程序化程式设计的一些概念。
11、在你选择的平台上理解并实践C/C++标准库。尤其注意标准模板库(STL)和活动模板库(ATL)。
12、搜索网络资源、书籍和课程来理解你的平台独特的C风格。
13、用C/C++练习编写高级代码。
14、学习更高级的Assembly。
15、学习操作系统设计的课程。
16、寻找并阅读你所选择的平台的相关文章。如果你选的是基于Unix的操作系统就会容易得多。充分理解你今后将要用来工作的系统。
17、练习你已经掌握的知识。首先创建小的系统软件。如下通常很有用: 试着重创你系统中已有的小工具。
试着把其他系统中的应用移植到你的系统里。
18、以最有益的顺序学习语言。此处是唯一强调第一门编程语言的地方。首先学习ANSI C 而不是 C++、C#、Java 、D。然后学习 C++。限制你第一门语言仅为C是因为系统编程要求程序员熟悉如下概念:源代码真实、完全的编译
低级对象输出文件
链接二进制
低级机器语言/汇编编程。C语言被某些人认为是伪饰过的/更容易学习的汇编语言。只要你愿意,它还支持插入汇编语言代码,并且它只是程序化的(像汇编)。
方法6:编程科学
1、了解编程科学家是做什么的。编程科学家是十分高级的程序员,他们不开发程序,但他们研究计算科学,比如密码学、编程语言和数据挖掘算法。没有深入的学术研究是很难达到这个水准的。
2、累积和四年制计算机科学学历同等多的科学知识。可通过如下其中一种完成: 获得真实的学术学历(这也是通常情况)。
从现代大学中获得该学历要求的课程大纲,自学课程或 分开一门门学。理论上这样做也可以,但还是推荐第一种做法。
3、选择特定的领域。越具体越好。这取决于你的偏好。但是这里给出计算机编程领域中一些主要的课题:算法设计(例如搜索、分类、密码、解码、错误检测 等)
编程语言/编译器设计/最优化
人工智能领域(模式识别,语音识别,自然语言处理,神经网络)
机器人技术
科学编程
超级计算
计算机辅助设计/模式(CAD/CAM)
虚拟现实
计算机图形学(计算机图形学通常和图形设计或图形用户界面设计混淆,计算机图形学是研究如何表示和操控计算机系统中的图形的领域)
4、考虑获取更高级的学历。或许你想追求硕士学历或博士学历。
5、了解你选择的编程领域的相关技术和编程语言。
小提示不管你想尝试哪种编程,不管你想达到何种水平,考虑去学校或本地社区大学上课。不要被诸如“计算机科学”一类的术语吓到。你参加的任何不需要预备课程的课程都应该集中教一些编程的基础知识。在上课之前先咨询一下老师或客服,确保这门课是你想要的,像“计算机文化”这样的课很有可能更多地集中在教你更熟悉办公应用之类。
㈣ Q版苏大强变身程序员表情包,哪一个深得你心
摘要
此处献上Q版程序员系列表情包
电视剧《都挺好》有多好看?
一天至少一次上热搜算不算?
虽然《都挺好》已经大结局,
但是它的表情包才刚开始火~
除了最后洗白的老爷子苏大强,
身为程序员的苏明哲
也赚翻了大家的眼球。
此处献上Q版程序员系列表情包
看看,哪一个深得你心?
太形象了,
惟妙惟肖啊!
除此以外,
还有不少趣图,
我们一起接着欣赏。
最后,
看看下面这张图
有同感的小伙伴们举起你的小手
IT大咖说 | 关于版权
感谢您对IT大咖说的热心支持!
点击 【阅读原文】 更多IT技术圈干货等你挖掘
㈤ 寻找一张关于程序员敲代码的动态图片
平均天100行有效代码我觉得对得起自己了纯手工写C++
前做web报表系统人家写好了张报表我拿来照着套生产其报表连html估计天能干上万行几十张报表干……
关键花思考和查资料上时间比敲代码多得多
sdmjxsfcry参考哈·····
㈥ 干货!程序员需要掌握的几种图
随着互联网寒冬的的到来,程序员就业环境越来越严峻,这就要求我们必须要不断提高自己,来应对高压的工作环境。下面介绍的这几种图是我在工作中经常使用的,所谓的图,都是为了辅助思考的,辅助开发的,比文字描述的更清晰,更有逻辑。
前些年,网上有一个口号喊得很响: “人人都是产品经理” 。这就要求我们需要学习认图、画图的技巧,能从需求文档里快速的抽象出我们想要的东西。最近,网上曝出的程序员和产品经理之间的矛盾,大都是需求不清晰产生的,作为程序员的我们如果掌握的产品经理所必须的技能,那我们以后就可以吊打产品经理了,哈哈哈哈。。。
流程图 是对过程、算法、流程的一种图像表示,在技术设计、交流及商业简报等领域有广泛的应用。
计算机语言只是一种工具。光学习语言的规则还不够,最重要的是学会针对各种类型的问题,拟定出有效的解决方法和步骤即算法。有了正确而有效的算法,可以利用任何一种计算机高级语言编写程序,使计算机进行工作。因此,设计算法是程序设计的核心。
对同一个问题,可以有不同的解题方法和步骤。
例如,求1+2+3+…+100,可以先进行1+2,再加3,再加4,一直加到100,也可采取100+(1+99)+(2+98)+…+(49+51)+50=100+50+49×100=5050。
还可以有其它的方法。当然,方法有优劣之分。有的方法只需进行很少的步骤,而有些方法则需要较多的步骤。一般说,希望采用方法简单,运算步骤少的方法。因此,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。
一个计算问题的解决过程通常包含下面几步:
传统流程图
用图表示的算法就是流程图。流程图是用一些图框来表示各种类型的操作,在框内写出各个步骤,然后用带箭头的线把它们连接起来,以表示执行的先后顺序。用图形表示算法,直观形象,易于理解。
美国国家标准化协会ANSI曾规定了一些常用的流程图符号,为世界各国程序工作者普遍采用。最常用的流程图符号见图。
流程图不仅可以指导编写程序,而且可以在调试程序中用来检查程序的正确性。如果框图是正确的而结果不对,则按照框图逐步检查程序是很容易发现其错误的。流程图还能作为程序说明书的一部分提供给别人,以便帮助别人理解你编写程序的思路和结构。
PS:墙裂推荐大家使用ProcessOn,画流程图的神器!!!
心智图 (Mind Map),又称 脑图 、 心智地图 、 脑力激荡图 、 思维导图 、 灵感触发图 、 概念地图 、 树状图 、 树枝图 或 思维地图 ,是一种图像式思维的工具以及一种利用图像式思考辅助工具来表达思维的工具。
心智图是由英国的托尼·博赞(托尼·布詹)于1970年代提出的一种辅助思考工具。心智图通过在平面上的一个主题出发画出相关联的对象,像一个心脏及其周边的血管图,故称为“心智图”。由于这种表现方式比单纯的文本更加接近人思考时的空间性想象,所以越来越为大家用于创造性思维过程中。
ps:我一般都是用的网络脑图,在线的比较方便
拓扑学(TOPOLOGY)是一种研究与大小、距离无关的几何图形特性的方法。 网络拓扑是由网络节点设备和通信介质构成的网络结构图。
拓扑学是数学中一个重要的、基础的分支。起初它是几何学的一支,研究几何图形在连续变形下保持不变的性质(所谓连续变形,形象地说就是允许伸缩和扭曲等变形,但不许割断和粘合) 拓扑图用于计算机网络示意,也就是不考虑计算机实际的位置,只表示网络中每台计算机以及网络设备之间的相互关系。
节点,节点就是网络单元。网络单元是网络系统中的各种数据处理设备、数据通信控制设备和数据终端设备。
链路,链路是两个节点间的连线。链路分“物理链路”和“逻辑链路”两种,前者是指实际存在的通信连线,后者是指在逻辑上起作用的网络通路。链路容量是指每个链路在单位时间内可接纳的最大信息量。
通路,通路是从发出信息的节点到接收信息的节点之间的一串节点和链路。
星型结构的优点是结构简单、建网容易、控制相对简单。其缺点是属集中控制,主节点负载过重,可靠性低,通信线路利用率低。
总线结构的优点是信道利用率较高,结构简单,价格相对便宜。缺点是同一时刻只能有两个网络节点相互通信,网络延伸距离有限,网络容纳节点数有限。在总线上只要有一个点出现连接问题,会影响整个网络的正常运行。目前在局域网中多采用此种结构。
环型结构的优点是一次通信信息在网中传输的最大传输延迟是固定的;每个网上节点只与其他两个节点有物理链路直接互连,因此,传输控制机制较为简单,实时性强。缺点是一个节点出现故障可能会终止全网运行,因此可靠性较差。
树型结构实际上是星型结构的一种变形,它将原来用单独链路直接连接的节点通过多级处理主机进行分级连接。
这种结构与星型结构相比降低了通信线路的成本,但增加了网络复杂性。网络中除最低层节点及其连线外,任一节点或连线的故障均影响其所在支路网络的正常工作。
UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
功能模型, 从用户的角度展示系统的功能,包括用例图。
对象模型, 采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图。
动态模型, 展现系统的内部行为。包括序列图,活动图,状态图。
实体关系图,简记E-R图是指以实体、关系、属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式。
㈦ 为什么程序员一定就是秃头这是什么梗
天天不是在找BUG 就是在修BUG ,太费脑子 了,又经常加班,是个体力+脑力的活,所以容易秃头
㈧ 程序员如何画图
经常写完文章, 收到的第一个问题是: 你的图是用啥画的; 其实自己也经常问别人. 最近强化了一下这方面的知识, 总结一下.
个人将画图的场景分为两种: PPT/文章中使用和系统中使用
可能有人觉得 系统中画图 需求不多, 个人感觉还是有必要的. 经常遇到费劲开发了一个系统, 遇到各路用户问问题. 如果有办法在系统中将执行流程直接生成流程图, 你好我好大家好.
GUI 画图工具有很多可选, 个人比较推荐的是 OmniGraffle , 在线工具推荐 lucidchart . 当然, 我也见过用 KeyNote 画出漂亮的系统图的, 工具不重要, 关键看人(说多了都是泪)
重点说一下程序画图. 最近反省了一下, 画图最多的就是那几个:
没了. 真的没了. 会这几个就可以行走江湖了.
然后, 推荐两个 library: blockdiag 和 graphviz .
blockdiag 是一个神奇的 python libary. 可以通过使用类似 graphviz 的语法, 画出 块图, 序列图, 网络图, 活动图. 还提供了一个 交互式的 shell , 用于调试上述几种图. 例如, shell 中输入:
立即的到如下图:
点击右上角切换成序列图, 输入如下内容:
有可以轻松得到如下序列图:
但是说好的 library 呢? 以 seqdiag 为例,
Graphviz 可谓是一代画图神器, 通过官网的示例图就知道有多强大. blockdiag 也是参考 Graphviz 的实现. 通过类似的语法描述, 生成所需的图形. 对于颜色的选择, 可以参考文档中 Colors 一节, 非常全面.
程序方面, 同名的 graphviz library 可以使用 pip install graphviz 安装, 非常方便. 示例python 程序如下:
既然有了 library 可以画图, 强烈建议在自己的系统中将一些复杂的流程化的事情通过根据当前系统状态画出图的方式展现给用户, 可以避免很多疑惑.
㈨ 程序员必备软件有哪些
每个资深程序员都有一套属于自己风格的软件集合,巧妙地使用编码工具可以带来想不到的惊喜效果,不仅能让工作变得更加有趣,还能大大提高工作效率。废话不多说,赶紧为还在奋战的程序员小伙伴们奉献这一套史上最全的软件清单。好处不再费口舌,自己慢慢体会。
1.Navicat 数据库管理工具
1.Beyond Compare文件对比
3.MindManager思维导图
4.文本编辑器三剑客
(1)notepad++是适用于Windows操作系统的文本编辑器,可以用来制作一般的纯文字说明文件,所见即所得功能、语法高亮、字词自动完成功能都是值得点赞的功能。
(2)Vim是从 vi 发展出来的文本编辑器。主要功能有代码补全、编译及错误跳转等,针对于程序员做了诸多的优化,所以在程序员中使用广泛。
(3)Emacs是着名的文本编辑器,被公认为是最受专业程序员喜爱的代码编辑器之一。拥有极强扩展性的编程语言,具有编程、编译乃至网络浏览等功能。
5.Dash
㈩ 有哪些质量上乘的程序员必关注的网站或论坛
CSDN是很早的了,到现在还是经久不衰,是一个非常大的论坛,还有github,有很多优秀的代码,世界上的码农都在贡献着,其他的还有一些比如segmentfault这种近些年来流行起来的网站。