1.在网吧写代码是怎样一种体验 知乎
那时还在大学暑假期间,学校实验室有项目在赶工,我因为要补牙齿不得不回老家几天。
有时候突然一个电话打来说哪里哪里要修改一下,哪里哪里再加个功能。 那时我家还没有宽带,无线网卡也是慢成狗,只好到小区楼下的网吧交流跟进同步代码。
我家在三线小城市,网吧也是十分落后,机器都是XP,配置网速也好不到哪去。那时候随身wifi刚出,幸好我未雨绸缪买了一个,开自己的笔记本上网。
我家小区对面是个高中,周围都是些学生打MOBA游戏(不在行,分不清是LOL还是DOTA),也有打第一视角射击游戏的(不在行,分不清是CF还是穿越火线)。 他们在被杀死或者等匹配的间隙会看我这边,黑色屏幕和花花绿绿的代码给他们带来不小的视觉冲击,我健步如飞的手指给他们带来不小的心灵震撼,从他们的眼神中我分明看到对代码的好奇,对IT行业的向往。
直到一位小弟忍不住了,噙着泪水问我是不是在电脑城工作,可不可以帮他刷个黄钻并且盗他兄弟的QQ号,我终于发怒了,默默写了个for循环在电脑屏幕上骂了他一百次。 然而我有着被导师骂一百次的心理素质,迅速平静下来,让他把QQ号和密码告诉我,今晚帮他全钻刷齐,附赠全套QQ秀,报酬是帮我付这次的上网钱。
他高兴坏了,连忙把账号密码抄在我胳膊上(佛说 随身带笔的男孩 运气不会太差)。 这号我时常登录,见证了他被女孩子劈腿两次的悲伤故事,看到了他加密相册里各种以网吧为背景的杀马特自拍。
我还帮他删了几次来自备注“伤我最深的你”的矫情留言,拉黑几个在他自拍下评论“帅”“酷”的虚伪之徒。希望他在感叹人工智能强大的同时,还能回忆起偶遇的电脑城的我,深藏功与名。
2.里面代码要怎么写
1. 打好基础写出高质量代码,并不是搭建空中楼阁,需要有一定的基础,这里我重点强调与代码质量密切相关的几点:掌握好开发语言,比如做Android就必须对Java足够熟悉,《Effective Java》一书就是教授大家如何更好得掌握Java, 写出高质量Java代码。
熟悉开发平台, 不同的开发平台,有不同的API, 有不同的工作原理,同样是Java代码,在PC上写与Android上写很多地方不一样,要去熟悉Android编程的一些特性,iOS编程的一些特性,了解清楚这些,才能写出更加地道的代码,充分发挥各自平台的优势。基础的数据结构与算法,掌握好这些在解决一些特定问题时,可以以更加优雅有效的方式处理。
基础的设计原则,无需完全掌握23种经典设计模式,只需要了解一些常用的设计原则即可,甚至你也可以只了解什么是低耦合,并在你的代码中坚持实践,也能写出很不错的代码。2. 代码标准代码标准在团队合作中尤为重要,谁也不希望一个项目中代码风格各异,看得让人糟心,即便是个人开发者,现在也需要跟各种开源项目打交道。
标准怎么定是一个老生常谈的话题,我个人职业生涯中经历过很多次的代码标准讨论会议,C++, C#, Java等等,大家有时会坚持自己的习惯不肯退让。可现如今时代不一样了,Google等大厂已经为我们制定好了各种标准,不用争了,就用这些业界标准吧。
3. 想好再写除非你很清楚你要怎么做,否则我不建议边做边想。你真的搞清楚你要解决的问题是什么了吗?你的方案是否能有效?有没有更优雅简单的方案?准备怎么设计它,必要的情况下,需要有设计文档,复杂一些的设计需要有同行评审,写代码其实是很简单的事情,前提是你得先想清楚。
4. 代码重构重构对于代码质量的重要性不言而喻,反正我是很难一次把代码写得让自己满意、无可挑剔,《重构》这本书作为业内经典也理应人人必读,也有其他类似的教授重构技巧的书,有些也非常不错,遗憾的是我发现很多工作多年的同学甚至都没有了解过重构的概念。5. 技术债务知乎上最近有个热门问题《为什么有些大公司技术弱爆了?》,其实里面提到的很多归根结底都是技术债务问题,这在一些大公司尤为常见。
技术债务话题太大,但就代码质量而言,我只想提一下不要因为这些债是前人留下的你就不去管,现实是没有多少机会让你从一个清爽清新的项目开始做起,你不得不去面对这些,你也没法完全不跟这些所谓的烂代码打交道。因此我建议各位:当你负责一个小模块时,除了把它做好之外,也要顺便将与之纠缠在一起的技术债务还掉,因为这些债务最终将是整个团队来共同承担,任何一个人都别想独善其身,如果你还对高质量代码有追求的话。
作为团队的技术负责人,也要顶住压力,鼓励大家勇于做出尝试,引导大家不断改进代码质量,不要总是畏手畏脚,停滞不前,真要背锅也得上,要有担当。6. 代码审查我曾经听过一些较高级别的技术分享,竟然还不时听到一些呼吁大家要做代码审查的主题,我以为在这个级别的技术会议上,不应再讨论代码审查有什么好,为什么要做代码审查之类的问题。
同时我接触过相当多所谓国内一线互联网公司,竟有许多是不做代码审查的,这一度让我颇为意外。这里也不想多谈如何做好代码审查,只是就代码质量这点,不客气地说:没有过代码审查经历的同学,往往很难写出高质量的代码,尤其是在各种追求速度的糙快猛创业公司。
7. 静态检查很多代码上的问题,都可以通过一些工具来找到,某些场景下,它比人要靠谱得多,至少不会出现某些细节上的遗漏,同时也能有效帮助大家减少代码审查的工作量。Android开发中有Lint, Find bugs, PMD等优秀静态检查工具可用,通过改进这些工具找出的问题,就能对语法的细节,规范,编程的技巧有更多直观了解。
建议最好与持续集成(CI),代码审查环境配套使用, 每次提交的代码都能自动验证是否通过了工具的代码检查,通过才允许提交。8. 单元测试Android单元测试,一直备受争议,主要还是原生的测试框架不够方便,每跑一次用例需要在模拟器或者真机上运行,效率太低,也不方便在CI环境下自动构建单元测试,好在有Robolectric,能帮我们解决部分问题。
单元测试的一个非常显著的优点是,当你需要修改大量代码时,尽管放心修改,只需要保证单元测试用例通过即可,无需瞻前顾后。9. 充分自测有一种说法:程序员最害怕的是他自己写的代码,尤其是准备在众人面前show自己的工作成果时,因此在写完代码后,需要至少跑一遍基本的场景,一些简单的异常流。
在把你的工作成果提交给测试或用户前,充分自测是基本的职业素养,不要总想着让测试帮你找问题,随便用几下就Crash的东西,你好意思拿给别人吗?10. 善用开源并非开源的东西,质量就高,但至少关注度较高,使用人数较多,口碑较好的开源项目,质量是有一定保证的,这其中的道理很简单。即便存在一些问题,也可以通过提交反馈,不断改进。
最重要的是,你自己花时间造的轮子,需要很多精力维护,而充分利用开源项目,能帮助你节省很多时间,把精力专注在最需要你关心的问题上。更主要是传播了振动的能量。
当。
3.为什么学了那么久的编程还是感觉自己什么都做不出来
1. 如果是基础能力不扎实,需要边学边练。在学完一个知识点及时做题练习和回顾,力求了解这个知识点的更多细节。
2. 学习编程时写的代码只是为了打好基础,但真正开发应用时则是将各种学到的知识综合应用起来,形成一个实体。厨师基本功是掌握和应用各种原材料,然后将不同原材料结合起来做成一道菜,就像将学过的代码知识综合起来应用,形成一个具体的软件。因此学了知识后,尝试着多去做一些应用来练手比较好。
3. 学会利用社区资源。CSDN、博客园、QQ交流群、知乎甚至贴吧,都可以成为技术学习的来源。比如教学时写的代码可能并没有教如何做一个简单的音乐播放器,那么自己就可以先去百度了解一下大概要用到哪些技术,如何做,以及是否有教学贴之类的。
4. 重点:成品才能检验自己对编程学习能力的掌握情况。这才是最主要的,光学了基础知识,终究只是理论。觉得自己什么都做不出来,要么基础差,要么就是不想动。先尝试着自己去做一点简单的应用,之后再慢慢提升自己。
4.程序员怎么提高自己的开发水平 知乎
自己研究啊,找点小项目来搞搞,搞着搞着你就对技术知道的多了,自己的技术水平自然也就上去了。
比如,自己写个WebServer,写完以后你就知道,从单线程响应,到支持图片、音频啥的,慢慢的,你就能体会server的基本原理;
再比如,自己写个网络爬虫,爬点天气预报数据、新闻啥的,从单线程爬,到多线程爬,从每隔一段时间爬,到每天定时定点爬,从爬不需要登录的,到爬需要登录认证的,完事后,啥是多线程、线程池、怎么模拟登录,你还能不明白?
爬到天气预报,那你还不写个小android/ios/html5程序,把天气呈现出来,从只呈现一个城市的,到呈现可以选城市的,从没有动画的,到有动画的。什么sqlite、自定义控件、handler、ajax、webservice你还会不熟?
我就这么干的,我不是程序猿,这只是我的爱好,但学习让我挺快乐。
5.零基础的小白如何成为一名代码高手
如何成为代码高手
1.最重要的是学会写程序
C语言也好,python也好,你得学会把自己的思考用程序实现。举个例子,你想制定计划表,安排自己的时间,那这个问题就可以写个程序来实现;你想做笔记、管理自己的文件,这也是一个程序。
从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。这个过程中你逐渐明白数组、指针、内存布局、函数,了解递归、栈、链表,然后学基本的数据结构。之后再写程序,你需要考虑代码的优雅、简单、时间空间效率高,使用什么样的方式来实现最好。最后你学会了复用,学会了调用系统API,学会了想什么就能用代码实现什么或者知道它不能被实现,你就学会了编程。
编程是一种创造。如果你对创造有兴趣,那么就很容易,反之则很难。
编织,手工,写诗,作曲。这些和编程一样,当产物出来的时候,会有一种特殊的快感。
如果你感受不到这种快感,那么趁早还是换一条路走吧。
作者:Jason He
链接:/question/27254231/answer/36474095
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
自学计算机主要是照着MIT,CMU,Princeton,Stardford这些名校网站上的课程,挑符合自己口味的来学。
这里推荐几门基础课:
1. MIT6.01 Spring 2011, 导论性质的课程。适合大一学生。用的编程语言是 Python。老师课讲得很好。目标是掌握良好的系统思维方法,所谓的PCAP(Primitive, Combination, Abstraction, Pattern)
2. Coursera 上面的 Programming Language 这门课,来自华盛顿大学。系统地学习编程语言和相关理论。课程上用了ML, Racket和Ruby。相关的阅读,可以看Dan Friedman的little 小人书系列,essential of programming language之类。之后便可自称polyglot了。目标是理解编程语言的本质,将来学习新的语法就轻松多了。再NB一些,可以自己创造新的语法了。
3. Coursera 上的Algorithm 这个系列的课,来自Princeton。我觉得是教的最好的算法课,比MIT的6.006 好多了,MIT的老师喜欢在大黑板上狂写,虽然很有激情,但对于算法教学来说,有点low了。初级算法课程还是用动画和图表来得直观一些。
4. MIT6.828 操作系统。课程讲的XV6,一个很简单的操作系统,类unix。实验用JOS,也是一个很简单的操作系统,但是设计思想和XV6 不一样。在自己实现这个操作系统的过程中,可以学到很多东西。
5. Coursera上面的Computer Architecture,同样来自Princeton。讲的是处理器的架构和设计。
对于一个初学者来说,把以上的基础课程刷下来,就上升一个level了。
很多应用的东西,比如Web开发,数据库什么的,就找具体的项目来练手了。
路漫漫其修远兮~~
6.编程中怎么区别属性和方法 知乎
属性的严格写法是
public class a
{
public string a;
public int b;
}
这个才叫属性,属性是一个类的变量,属性作为变量不承担任何计算过程。
而属性过程则不同
属性过程的写法
public class a
{
private string a;
private int b;
public string a
{
get
{
return this.a;
}
set
{
this.a=value;
}
}
public int b
{
get
{
return this.b;
}
set
{
this.b=value;
}
}
}
属性过程则不同,属性过程可以理解为特殊的方法或函数,这个方法只有一个参数并且只能返回一个值。
属性过程的作用在于,对输入数据的有效性处理
设想一下用户注册这个功能
用户注册有一个用户类
用户类有一个属性用户名
public class user
{
public string username;
}
而通常限制用户注册用户名不能为空要在用户界面去限制。
user Objus=new user();
if(Objus.username==null)
{
throw new Exception("用户名不能为空");
}
这样写的确没错,但是如果你登陆里也要限制用户名不能为空,用户修改资料里也得限制,这时候还得写一遍上面的代码,而这样就会有很多重复的代码。
就算你能复制粘贴,这些代码也是重复的每回你也要复制粘贴才可以。
如果用属性过程
public class user
{
private string _username;
public string username
{
get
{
return this._username;
}
set
{
if(value==null)
{
throw new Exception("用户名不能为空");
}
this._username=value;
}
}
}
这时你登陆界面只需两行代码就验证了用户名不能为空
user Objus=new user();
Objus.username=this.Textbox1.Text;
就两行就可以,其他地方也是一样,这就是属性过程。