程序员

从程序员的角度谈创业三年

杀马特。学长 韩版系。学妹 提交于 2020-04-04 10:00:30
从程序员的角度谈创业三年    摘要:在创业三年时间里作为联合创始人,虽然拿着大家均等的股份,我始终是没有什么话语权的,但是,这也给了我从旁观者的角度看清整个局面的机会。 创业公司的成败绝大程度取决于技术大牛和公司 Leader,这两个人最好能在性格上形成互补 ,而遗憾的是我们公司是同一人。 关于决定是否创业 2012年4月,正好三年前整,在深圳能源正混的郁郁不得志的时候,大学的好兄弟找到我一起创业,他们有钱、有 idea,就是差人,当时的我还是技术菜鸟,本科学的也不是计算机,看着移动互联网蓬勃的发展羡慕不已。很快就答应了一起干,因为心里想着就算创业失败了,那也学到了技术,也不愁再去找工作。现在回想起来觉得太鲁莽了些,抱着这样的想法的程序员应该不止我一个,每个人的生活条件和家庭背景不同,对与错得由你自己来评判。 ​关于股份如何分配 成功的企业大多是相似的,而失败的初创公司最大可能是股权分配不合理,我们的核心团队成员最开始有四个人,Team Leader 在股份分配的问题上的意见是四人平均分,换取他掌握公司话语权。当时大家就都表示了异议,激烈的争吵了几天,谁也说服不了谁,最后不了了之,这也为后来的分崩离析埋下了伏笔。试想下,假如你确实牛逼,大家敬你服你不就完了吗,又何须用股份来换取决策权。 大家能力不同,那么股份平分的缺点是什么呢?创业是一个漫长的过程,每个人付出的时间

函数语言

折月煮酒 提交于 2020-04-04 07:58:49
一、什么是函数式语言? 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言。 函数式语言主要成分是原始函数、定义函数和函数型。这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组)作为单一值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为高阶函数,程序就是函数,程序作用在结构型数据上,产生结构型结果,从根本上改变了冯·诺伊曼式语言的“逐词”工作方式。 二、有哪些函数式语言? 1.lisp 2.common lisp ,Common lisp 是一个庞大的语言,支持多种编程范式,Common Lisp多用来写专家系统,也可以构造大型软件。 3.scheme,scheme是Common lisp的子集,由于语言核心很小,多用在教育领域。 4.Haskell ,Haskell是一种于1980年代末期所发布的函数式编程语言,Haskell函数式编程语言是在Miranda的基础上得到了,它对Miranda进行了标准化,所以这种语言集合了其他相关函数式编程开发的原理,它无需花费太多的赘述就能完成一些数据结构,比如链表和矩阵,是当前最广泛地被用于研究的一种函数式编程语言。 5.Clean ,它和Haskell有很多一样的地方。目前这门语言是用C写成的,由尼兹梅根大学负责维护。 6.Meta Language

最牛B的编码套路(CSDN上的一篇文章写得很不错)

南笙酒味 提交于 2020-04-04 07:51:52
最牛B的编码套路 点击此处查看来源   最近,我大量阅读了Steve Yegge的文章。其中有一篇叫“ Practicing Programming ”(练习编程),写成于2005年,读后令我惊讶不已: 与你所相信的恰恰相反,单纯地每天埋头于工作并不能算是真正意义上的锻炼——参加会议并不能锻炼你的人际交往能力;回复邮件并不能提高你的打字水平。你必须定期留出时间,集中锻炼,这样才能把事情做得更好。 我认识很多杰出的程序员——这是在亚马逊工作最好的额外“福利”之一。如果仔细观察他们,你会发现他们时时都在锻炼。他们已经很优秀了,但他们仍然不忘锻炼。他们锻炼的方法林林总总,而我在这篇文章中只会介绍其中的几种。 据我了解,这些杰出程序员之所以如此成功,就是因为他们一直在锻炼。完美的身材要靠定期的锻炼才能获得,而且必须坚持锻炼才能保持,否则身材就会走形。对于编程和软件工程来说,道理是一样的。 这是一个重要的区别——我每天都开车去上班,但我的驾驶水平远远不如专业车手;类似的情况,天天编程可能并不足以使你成为一名专业的程序员。那么,什么才能把一个普通人变成一名专业车手或者专业程序员呢?你需要锻炼什么呢? 答案就在《科学美国人》的一篇名为“The Expert Mind”(专家思维)的文章里: 爱立信提出,重要的并不是经验本身,而是“努力的学习”,也就是要不断地挑战自身能力之外的东西

程序员开发大型应用程序的技巧

时间秒杀一切 提交于 2020-04-04 07:50:11
  英文原文: Tips to Developers Starting on Large Applications   假如你是一名Java开发者,正在开发和维护包含2000个类并使用了很多框架的应用程序。你要如何理解这些代码呢?在典型的Java企业项目 小组中,大部分能够帮你的高级工程师看起来都很忙,文档也很少。你需要尽快交付成果,并向项目组证明自己的能力。你会如何处理这种状况呢?这篇文章为开始 开发新项目的Java开发者提供了一些建议。    1. 不要试图一下子搞懂整个项目   仔细考虑一下,为什么你会想要先理解项目代码呢?大部分情况是有人要求你修复一个bug,或者增强系统已有功能。你要做的第一件事情不是理解整个项目的架构。当对项目进行维护时,这样做(理解整个项目架构)可能会对你造成巨大的压力。   即便是有10年编程经验的Java开发者,也无法理解项目的核心工作机制,尽管他们可能已经在这个项目工作超过一年(假设他们并非最初的开发人员)。比如,对于认证机制或事务管理机制还是缺乏确切的认识。   他们是怎么做的呢?他们对于自己负责的部分非常了解,并且能够交付价值给小组。每天的交付价值远比了解一些以后还不确定有没有的东西重要的多。    2. 关注于尽快交付价值   那我是要打消你对于理解项目架构的热情吗?完全不是。我只是要求你尽早地交付价值,一旦你开始一个项目,搭建了开发环境

一个优秀的程序员应该如何提高工作效率?

左心房为你撑大大i 提交于 2020-04-04 06:44:43
当我们评价一个程序员是否优秀时,要从多个方面进行评估。 专业技能、专业知识、创造力、经验,这些都是重要的因素。当然,还有他们的工作态度、工作效率和工作质量。如果程序员的工作是没有效率的,那就意味着他们所投入的时间和精力是没有效果的。在 livecoding.tv 最近发布的一篇博文中,他们总结了10个影响程序员工作效率的坏习惯。看完这篇文章后你会发现,里面所列举的坏习惯,总有一两个可以在自己的身上找得到。从中你也可以学习到那些优秀的程序员是如何提高工作效率的。 1.专注于一个工作而不是同时处理多个任务 同一时间处理多个工作任务,我们对这种情况并不陌生。有时候是迫不得已,但有时候也是个人的习惯造成的。“同一时间处理多个任务”看起来不错,给人感觉你的工作出色,但实际上,由于要不断转换工作内容,它会影响了你的专注力和创造力。对于程序员来说,专注于某一个开发工作是很重要的。如果要同时处理几个任务,你不得不为此消耗精力,这样一来工作效率就会降低了。解决的方法是做好工作安排,把相似的工作放在一起,专心做好一个工作直到它完成了为止,再去做下一个工作。 2.建立一个有条理的工作系统 程序员给很多人的感觉是有点神经质的,就是那种专注起来令人倾心,糊涂起来让人抓狂的那种。他们可以投入到开发环境中不眠不休,但有很多人也会在工作中出现各种马虎,健忘和凌乱的状况。工作没有条理可以直接影响工作效率

2014程序员之路

一笑奈何 提交于 2020-04-04 03:23:32
2014年(阴历)即将结束,对于我来说絮絮叨叨的总结一下我的2014程序员之路是一件痛苦并快乐的事情。在我看来 总结 是成长的捷径。 为什么要写这篇总结 原因很简单,1)2014已经过去了,希望在这期间发生的让我愧疚的事情不再仅仅是经历,而要变成我生涯经验 ,2)为2015年调整方向打下基础! 这篇总结如何而来 人是感性动物,遗忘是是人感性的一种表现,如果我在某个晚上坐在电脑面前空想我的2014年之路,那么那晚出炉的2014年总结也太不严谨了!一篇优美的文章需要旁征博引,一份优秀的年终述职报告需要工作数据堆积,那么我这篇总结是2014年每月的总结提炼出来的,同样每个月的总结是由每个星期提炼而来的。这样周总结、月总结、年总结形成一个平面金字塔。 总结什么内容是什么 总结的内容是很明确的,1)总结这个时间段我们都做了些什么;2)哪些做的不够好;3)哪些事情做的仍然有提高的空间。 感觉没有什么好总结的怎么办 有些人认为没什么好总结的,除了白天上班把工作做好就没有其他事情了,除了工作之外业余充电,给自己找点事情做很重要,只有做了一些事情我们才有总结的内容。所以这个时候计划驱动一天、一周、一个月、一年,甚至五年是十分必要的。 我的“2014程序员之路”是从14年4月份开始的,为什么是这个时间点呢,这就和我的月总结有关系了,我从14年的4月才开始建立起比较完整的月总结体系,至于“总结体系

2019 年终总结,240+篇,已分类整理

对着背影说爱祢 提交于 2020-04-04 00:03:24
code小生 一个专注大前端领域的技术平台 以下内容按照技术模块来划分,每个大的分类下文章顺序是按照难易程序来的,这样学习起来方便些。 2017 | 我在 5 个月时间里分享了 98 篇文章 2017 下半年总结 2018 文章合集 日常开发技术 仿网易考拉 个人中心 tableView弹簧动画 Android 仿网易云鲸云音效动效 Android-图片的选择,裁剪,压缩,适配高版本 【Android】线程/进程绑定指定CPU核 Android 官方架构组件(一)——Lifecycle Android 读写锁的应用,以及最佳的磁盘缓存设计 RxJava2+Retrofit2+RxLifecycle3+OkHttp3网络请求封装 Android 官方架构组件(二)——LiveData 玩转通讯录备份(JNI实战) Android 官方架构组件(三)——ViewModel ​迟来的 2018 年总结 Android 研发技术进阶之路 ​APP上架到各大应用市场技巧 Android 框架思考--工具类设计(Glide、Picasso切换实现) ​在安卓的道路上铿锵前行 ​Android Glide缓存策略分析 ​UiStatus 一个简单且强大的 Android Ui 视图状态控制库 ​Android性能优化:关于 内存泄露 的知识都在这里了!(文不如图,图不如表) ​无懈可击

面试刷题27:程序员如何防护java界的新冠肺炎?

江枫思渺然 提交于 2020-04-03 17:17:53
背景 安全是软件设计的第二个非功能性需求,一般是当软件出现安全问题的时候才会得到重视。 最明显的比如 数据库用户信息和密码泄漏等; 数据加解密技术 单向加密 md5+salt值, 这个是软件设计中使用的比较多的。 但是要预防彩虹表的解密,在加密前校验密码的规则,符合安全等级。 对称加密 编程中用的比较多的是RSA加密,即增加一个秘钥。可以通过秘钥进行加解密。 效率比较高。安全性也比较高,但是要预防秘钥的泄漏。 非对称加密 即使用证书,公私钥对,一般是使用公钥解密,私钥加密; 比如数字证书,对外发的文件,通过私钥加密,拿到公钥可以解密,也可以确定文件的可靠性。 HTTPS: 是一种综合利用非对称和对称加密的协议。 首次建立连接使用 私钥生成一个秘钥,客户端拿到证书之后,使用它对传输内容进行加密,服务端使用秘钥进行解密。兼顾了效率和安全。 http攻击和防护 SQL注入 在参数中加入非法的sql,直接传递到数据库执行,达成攻击目的。 预防方法:使用PrepareStatement XSS 即把攻击脚本当成数据保存在服务端,其它用户使用该数据的时候,会转换成攻击脚本,泄漏用户信息等。 预防方法:增加请求过滤;设置web防火墙; 小结 实际工作中如何保证软件系统的安全: 增加代码层面的请求过滤; 及时更新各种软件和组件的版本,修复安全漏洞; 对数据进行加密

每个程序员都应该读的书

浪子不回头ぞ 提交于 2020-04-03 09:08:30
1. 《代码大全》 史蒂夫·迈克康奈尔 推荐数:1684 code complete 代码大全 “优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky 对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac 2. 《程序员修炼之道》 推荐数:1504 Pragmatic Programmer 程序员修炼之道 对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel 3. 《计算机程序的构造和解释》 推荐数:916 Structure and Interpretation of Computer Programs 计算机程序的构造和解释 就个人而言,这本书目前为止对我影响醉倒的一本编程书。 《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面

我希望自己是个医生

核能气质少年 提交于 2020-04-03 04:21:02
我希望自己是个医生,而不只是一个护士。我希望整个环境健康愉快起来,而不是沮丧的一味的适应现在的环境。我希望专注于我擅长的知识,并将它们发挥、贡献出来,而不是将它们埋没然后重新开始学习陌生的不感兴趣的知识领域。 这次我想努力的改善环境,而不是一味的改变自己…… 如果我是医生,我想开出几副药,虽然,我,可能,只是个庸医! 1:基盘搭建 搭建一个能够快速进行开发的平台。我们以前称之为"基盘"。他就是有结构的封装了很多常用方法和过程的开发框架。因为进行了常用方法和过程的封装,所以程序员可以更简单的进行开发,程序员可以将更多的精力放在业务逻辑的实现,而不是繁琐的常用功能的实现细节,例如连接数据库,对表的增删改,事务等常用的操作。因为对常用且多数的方法进行了封装,所以新人只需要知道如何去使用,而不用了解具体的实现过程,这就降低了开发的技术含量。新人只要经过简单的培训就基本可以进行开发了。有了基盘,不仅仅带来能够快速开发的好处,更多的好处是它能让更多的新人参与进来,不会出现能干活的就那么几个,累的要死,更多的新人却没有办法使用的尴尬。注:基盘的搭建是个逐步完成完善的过程。 2:角色分工 在基盘基本搭建完成以后,新人可以很快的加入开发。那么更多的经验丰富的编程人员的工作可以得到分担,这些有经验的编程人员的精力自然能向自己感兴趣的方向发展。如何有效的引导他们的兴趣,让他们的兴趣对工作有益