ok. 一个标准的产品经理有这么几个技能点,那么作为一个程序员,只能给一些工程技术方面的建议了。
从大体环境上来讲,有操作系统(OS), 数据库,服务器,编程语言。
我的工作大致就是使用编程语言,将合适的数据通过目前最优的控件显示出来,通过监控用户的动作来实现交互。
先来解释简单的数据库和服务器:
1.数据库:
人类从最初的龟壳到纸张再到现在的计算机,所体现的就是体积越小,存储容量大,查找愈发方便。 一台计算机就能将一个读书馆的所有知识放在数据库中,还能以很快的查找效率找到想要的,关键数据库还有一些其他不能比拟的优点,比如事务,索引,并发,关系型。
1.1事务,比如银行转账,A转给B,那么A的账户需要减少,B需要增加,在代码的世界里总有许多事故,也就是你时常测试时点着点着就不动了,专业术语为异常(Exception),可能为程序问题,网络,硬件,断电问题等等,在A减少成功后,这个时候发生了异常,那么A减少了,B却没有增加,这是绝对不能容忍的,事务就是处理这些一连串操作问题的,要么A减少后B增加完整的完成整个流程,要么任意失败一项就回滚到前面的状态,即A,B不变。这就是事务。
1.2 索引, index,你可以理解为索引,现实中比如书的目录,仓库分类编号,超市XX区,淘宝天猫京东的导航,我们所有的数据都放在一个数据库文件里面,为一个高效率组织数据的文件,我们从数据库拿数据的时候会扫描一次,索引的作用就是扫描部分数据,这样会大大加快查找速度,之前我们做的点餐餐桌页面,下单页面就经过索引优化。一旦数据量很大,查找速度缓慢就得考虑性能优化,任何事物都有俩面性,索引在一方面提升了查找速度,但是在另一方面会降低添加,更新操作效率,因为这些操作需要将数据放到特定的区域,需要额外的时间去处理。脑补读书馆,参照显示原型。
1.3 并发,可能在我们的项目里面体现不大,因为大部分都是一个人或者多个人操作,不会有千万级别的,并发的简单概念,你使用迅雷下载时,你可以同时下载多个任务而不会只是下载一个任务,这就是并发,可能在你看来非常正常,对啊,为什么不能多个下载,但是实质上是CPU只有一个,你开的多个任务其实底层是这样的,例如A,B,C三个任务,先执行一下A,停止A,执行B,停止B,执行C,停止C,执行X,停止X.......... 一直到三个任务完成。 更形象的例子,皇帝翻牌子,皇帝只有一个,而后宫佳丽三千,每天一个,三千个程序,每个程序执行一次进度增加,一直到100%即完成退出翻牌子打入冷宫,真实情况是计算机执行非常之快,所以你看不到什么停留的现场,记住,非常快。但是像百度谷歌那样的公司,即使这么快也没用,还需要加强,因为百度谷歌日访问量太大了。
1.4 关系型,在现实的生活里,你可能有很多人际关系,亲人,同事,男性朋友,女性朋友,同时你身上还有其他信息,比如所在公司,学历,外貌颜值, 那么这些东西如何高效的存储在数据库里面呢,一对一,一对多,多对一,多对多。你的外貌颜值,学历和你的一对一的关系,你和你的朋友是一对多的关系,你和公司是多对一的关系,你们的朋友们组成的网状型关系为多对多(参照fackbook)。 你使用Excel的时候,如下表1.4.1,对应为姓名,职业,战斗力,所属公司,那么公司详细信息存储在另一张表上,里面有公司名称,地址,法定代表人等等一系列详细的信息,如果你不这样做,像1.4.2,虽然看起来很直观,但是将这样的数据存储到数据库文件中会产生数据冗余,就是不必要重复的数据,详细的设计可以看我们项目的代码,这就是关系型的概念。
刘备
|
总经理
|
30000
|
西蜀
|
关羽 | 副总经理 |
10000
|
西蜀
|
张飞 |
副总经理
|
10000
|
西蜀
|
........
|
........
|
........
|
........
|
(表1.4.1)
姓名
|
职位
|
工资
|
公司名称
|
公司地址
|
公司其他信息
|
刘备
|
总经理
|
30000
|
西蜀
| 深圳福田区 |
xxxxxxxxxxxxxx
|
关羽 | 副总经理 |
10000
|
西蜀
|
深圳福田区
|
xxxxxxxxxxxxxx
|
张飞 |
副总经理
|
10000
|
西蜀
|
深圳福田区
|
xxxxxxxxxxxxxx
|
........
|
........
|
........
|
........
|
........
|
........
........
|
(表1.4.2)
2.服务器
我们的项目分为俩个版本,一个为单机版,一个为服务器版,单机版的数据放在本机数据库
中
, CRUD
操作都在本机进行,而服务器版则使用的是作为服务器的那台主机的数据库进行CRUD。 CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写。可以理解为一个面向所有电话的一个中继站,这样就实现了其他设备的交流,就拿网站服务器来说,你通过你的电脑上的Chrom浏览器打开我们的网址,Chrom浏览器将网址包装成一个数据包然后通过我们的路由器经过一系列的转发发送给我们的服务器,服务器接收到后会对数据包进行解析,然后将所请求的数据文件发送给你电脑,你的Chrom浏览器会自动将那些数据和文件解析成恰当的格式给你显示出啦,打开Chrom浏览器按F12可以查看详细信息,那些源代码其实就是一个.html文件,下载到你的电脑中,Chrom浏览器只是做数据包装和解析的。当然我们的项目没有这么多数据格式,我们的项目回传的数据没有文件,只是一串数据,比如订单信息,客户信息等等,是一个纯数据库服务器。不论如何,你将服务器理解为一个数据存储远程基地即可。
3.操作系统
这个我也不知道如何下手,因为涵盖的太广了,简单理解就是这个东西将非常底层的硬件给封装起来只提供方法给软件来调用,是软件和硬件的中间桥梁,要知道底层的硬件代码一般人学习起来门槛高,而且稍微弄不好系统就挂了,所以这堆琐事就给操作系统(OS)了,操作系统常见的有Linux,Unix, Windows。 安卓手机上是一个小型的Linux系统,而Iphone是基于Unix内核的操作系统,windows就不用说了,win7,win10等等,真正的Linux和Unix操作系统一般用于大型服务器,而且没有图形界面,全是密密麻麻的Dos命令,因为最吃内存的就是图形渲染了,这也可以解释为什么win7下设置画质极差的时候系统运行的很快。 但是这种系统一般人不会使用,一般像我们程序员这种开发者才会喜爱。
当你使用Win10点击QQ时,弹出QQ登录界面,实质是开启了QQ的相关程序,OS为其分配内存在界面上渲染图形,OS的键盘(OS硬件)被QQ的相关程序捕捉然后反馈到界面,重新绘制图形,然后点击登录后QQ程序将调用OS的网络服务(OS资源)将数据发送给Tencent的服务器,服务器回传数据给OS,OS再将数据给QQ程序进行解密和解析,然后顺利登陆,开始主面板程序,分配内存,初始化界面......
上面说的OS的作用,和程序密切结合,程序通过OS调用硬件,使用OS的资源,OS的所有都可以看作是资源,CPU,内存,外存,网络。 因为太基础,所以哪里都有OS的影子和作用。
4.编程语言
编程语言从开始至今,已经发展了许多种,从开始的机器语言,汇编语言到现在使用的高级语言,计算机能直接识别的是二进制指令集合,由0和1组成,例如001010101010101001,给计算机去执行,会出现什么结果? 我也不知道,目前已经不使用这种语言,虽然快,但是学习和开发成本太高。 后来出现了汇编,理解为机器语言的封装,但是对于开发和学习成本还是太高,于是就出现了高级语言,可以理解为汇编语言的封装。 比如机器语言的"001010101010101001",使用汇编语言封装为一个符号"+", 高级语言也是这个道理。
目前高级语言比较靠前有java, C, C++, Python, C#, PHP, Javascript........。 Java一般用于安卓,JavaEE企业级应用,比如大型网站,C和C++比较和硬件结合的多,比如智能控制系统,C#和Java类似,PHP和Javascript为动态网站和前段脚本语言......... 世界上没有最好的语言,它只是工具,只有最适合的工具。心中无剑才能无敌于天下。
如何在不知道编程语言的情况下看懂代码?
如何学习编程?
作为一名产品经理,还是需要了解一下基础的编程知识,以java为例,需要了解java的设计哲学"万物皆对象"的面向对象编程思想OOP(Object Oriented Programimng),为什么要OOP,便于管理和理解,将现实生活抽象化,和之前的数据库设计有点类似,一对一,一对多,多对一,多对多。 当然说的太多还不如看实际的代码。
封装,继承,多态。
封装的目的是为了让使用者忽略不必要了解的知识,比如叫外卖,你只需要点餐和付钱,那么美味的凉皮和肉夹馍就自动给你送过来,你不需要了解中间的过程。
继承的目的是为了减少重复代码,比如一个对象,在java中用类表示,人,男人,女人,男人继承人,女人也继承人,那么人就有男人和女人的相同属性,比如有一双眼睛,一双手..... 而男人和女人 不同的属性可以在各自的类中添加进去。 儿子继承父亲,那么就有了父亲的所有属性,多个儿子就不需要一个一个的声明了,说到底是一种编程手法而已。
多态,男人有很多种,女人也有很多种,有些男人比较张狂,有些男人比较沉稳,有些女人比较漂亮,有些女人比较柔情。so,这就是多态。
在我的代码世界里,从刚刚开始的一个小菜鸟成长至今,做的活无非就是调用其它已经写好的接口和方法,知道这一块代码要干什么事,执行后有什么效果,有没有更好的方法去实现,对于别人给的方法和接口,能用就是好的,如果有新功能,那么看看有没有别人已经写好的代码,拿过来能用则用,不能用稍加修改可用就行,如果还是不行,那就去研究相关的API自己造轮子。
我想产品经理应该使用超级语言,也就是在机器语言-> 汇编语言-> 高级语言上的封装语言 -> 超级语言,看懂并和架构师讨论达成
代码模块,至于底层具体实现也不需要了解,那是我们程序员苦力活,懂得apk的运行的大致流程,了解开发的套路,懂得取数据原理,界面的编写方法,事件监听原理。 要用代码说话。刚刚开始不要深入了解代码块,后面可以写个小程序实现。
Jul 2016 | Jul 2015 | Change | Programming Language | Ratings | Change |
---|---|---|---|---|---|
1 | 1 |
| Java | 19.804% | +2.08% |
2 | 2 |
| C | 12.238% | -3.91% |
3 | 3 |
| C++ | 6.311% | -2.33% |
4 | 5 | Python | 4.166% | -0.09% | |
5 | 4 | C# | 3.920% | -1.73% | |
6 | 7 | PHP | 3.272% | +0.38% | |
7 | 9 | JavaScript | 2.643% | +0.45% | |
8 | 8 |
| Visual Basic .NET | 2.517% | +0.09% |
9 | 11 | Perl | 2.428% | +0.62% | |
10 | 12 | Assembly language | 2.281% | +0.75% |
数据来源
http://www.tiobe.com/tiobe_index 获取时间: 2016年7月23日12:35:20
附带一张我们程序员学新技术的图,希望有帮助。
I'm fish. I'm on.