1
allenforrest 2016-02-03 23:25:35 +08:00
你先说说你即将入职的工作是做哪方面的?桌面应用? iOS App ? Android App ?
|
2
Mirana 2016-02-03 23:27:02 +08:00
确实光看理论会看不下去的,所以你入职要做的东西是什么?
|
3
em70 2016-02-03 23:27:50 +08:00 via iPhone
既然要实践,为什么还要让人给你推荐书
GUI 编程建议安装一个 Delphi ,不写一行代码就可以快速做出能运行的 win, mac, Android 界面,然后再慢慢学习给界面添加各种功能,很适合你的需求 |
4
braineo OP @allenforrest 我觉得应该是桌面, Android 跟 iOS 我也不怎么会……
|
6
allenforrest 2016-02-03 23:32:25 +08:00 1
@braineo Windows 下桌面开发还是跨平台,前者就找微软的书看把,后者可能是用 Qt ,可以看 C++ GUI programming with Qt
|
7
braineo OP @em70 可能我表达得不太好。直接上确实是可以啊,但是不会踩上很多坑吗?如果看前人总结出来的经验去实践的话就可以少踩很多坑啦
|
8
braineo OP @allenforrest 前者.Net 后者 C++ GUI programming with Qt ?好哒!谢谢
|
9
hardware 2016-02-03 23:39:20 +08:00
不用学那些乱七八糟的
Html5+css+javascript 学会了就能去找工作了 |
11
zhpech 2016-02-03 23:45:21 +08:00 1
线程本来就是理论的东西吧,我当时直接上来写的时候一知半解,直到操作系统里的各种模型理论概念有了之后才理解了很多东西。《操作系统》确实很有用。
GUI 编程?看楼主用什么语言吧。 |
13
braineo OP @zhpech 所以还是建议上 操作系统 吗?呃,其实 GUI 的话与其说是想要具体编程的教材 更加偏向于怎么设计 GUI 的架构 以及 线程?的总论一样的书。因为具体工具的书搜索的话其实出来的比较多,比较好找
|
14
braineo OP @hardware 卧槽 这么厉害的。我不太懂这个,这样的网页的线程其实就是全在后端了前段的话只是起到了显示的作用吗?
|
15
zhpech 2016-02-03 23:55:40 +08:00 1
@braineo 不是写客户端的 不清楚 GUI 方面的理论 指的是计算机图形学么?操作系统的话 多线程(多进程)本来也只是里面很小的一块,如果楼主不是对整个都感兴趣的话,也可以只看那些,一边理论一边就着实现生产者消费者和读者写者模型,基本上就妥妥的了(我们老师说实际生产中用到的最多的也就生产者消费者了……)
|
16
snnn 2016-02-03 23:59:35 +08:00
我能想到的书都是很老的书……
|
17
braineo OP @zhpech 我搜出来的一些概念级信息是一个 GUI 如果只有一个线程?那么在处理长时间任务的时候 UI 就会卡住 要再开一个线程处理后面的东西还要保持前端的响应。但是如果内部的模块很多就要开很多线程去分别处理,就可能会产生很多问题(但是没说是什么问题...)
就是说操作系统的多线程部分 跟 设计模式 可能比较接近我提问的意图?然后搞个什么上手实践 |
19
zhpech 2016-02-04 00:15:35 +08:00 via Android 1
@braineo 嗷这个和 GUI 没关系~主要还是进程、线程以及一些其他理论的东西,如果资源不进行共享的话,多线程没啥难度,资源共享见我上面说的,一本非常有名的书叫做现代操作系统(并且不断更新再办)
我们这么想好啦,线程(或者进程,取决于最小单位)是个很单纯的小朋友,你叫他去画画,他就不能同时在那边打草稿计算,你让他先画直线,就不能再让他同时先去画圆,他必须画完了画,才能去打草稿,这样你就会很长一段时间觉得好无聊啊,怎么那么慢。 这就是你说的那个栗子,然后你再多叫一个小朋友去计算呢,是不是能快一点,如果同时很多小朋友在计算,那会不会更快?但这就涉及了共享问题了(๑•̀㉨•́ฅ✧ |
20
braineo OP @zhpech 所以我是没提问在点子上啊!终归还是多线程的问题然后绕回到了操作系统...
共享问题是 小朋友多了的话先算好的要等没算好的? 还是最后还有一个小朋友要把计算结果合并起来? 还是小朋友 A 不小心把小朋友 B 的计算结果盖过去了? |
26
em70 2016-02-04 01:19:20 +08:00
@braineo 你这不是正确的学习方法,不去实践,书你肯定看不明白的,计算机是一门实践性极强的学科.至少你得有一个感性的认识,知道 EXE 是如何编译出来的吧,俗话叫:写 hello world. 现在的 IDE 工具和框架可以让任何没有基础的人通过拖动控件把把一个只有界面没有功能的空白程序运行起来
|
27
braineo OP @em70 那你假设我现在有感性认知了,但我不想在多线程编程里再踩上前面无数人踩过的坑的情况下,什么叫正确的方法?
|
28
archxm 2016-02-04 09:01:39 +08:00 1
非常重要的一点, 不要怕踩坑. GUI 编程, 非常重要的一个知识点: 消息循环, 另外还有绘制, 其实任何控件都可以自己画出来, 当然, 一开始学习, 就用已有的控件, 如果深入研究, 可以了解下自绘
|
29
asj 2016-02-04 09:08:32 +08:00 via Android
多线程简单,记得一件事就行了
不要自己写多线程代码,你不会用到的 |
30
zhuangzhuang1988 2016-02-04 09:30:12 +08:00 1
<Windows 并发编程指南> http://book.douban.com/subject/4214617/ 一本就够了. 涉及了基本你能遇到的线程模式.
|
31
mko0okmko0 2016-02-04 10:03:51 +08:00 1
一个提前概念.
1.大部分的程式语言本质都不是一定需要桌面才能动的. 然后为了让这些持式语言能写桌面程式.就有了 QT 这一类的"桌面应用开发工具包". 2.每个人的推荐有不同角度与考量.我推荐的是最快入门跟生产力. 做得出来能用才是重点.其他都其次.因为时间和金钱不会等你. 3.除了传统的 GUI 执行绪+背景执行绪.还有种东西叫做 Actor/akka. 很多语言都有 Actor/akka 的实现(他是一种概念).高性能.高并行.可跨机连机. 但概念比较不线性.弄懂并熟悉后.你就会把执行绪这东西丢掉. 只有 win 的需求: VS2015 果断完整安装,支持 C#/vb.net/F#/c/c++/JS/HTML/CSS/XML/...等语言. 并可用外挂套件管理器.新增其他语言的支持 VS 开专案的时候.选桌面应用程式专案.然后选语言.C#或 VB.NET 都很好入手.我个人推荐 C#. 之后就看 C#/VB.net 的视窗程式设计的网站或书籍. C#/VB.net 有很多很潮的语法支持.使用后会上瘾. 例如动态结构资料处理的 linq.自动并行计算的"Parallel For(each)"语法(linq 本身也有自动并行语法). 在观念不清的情况下.C#跟 VB.net 的视窗应用程式专案.有一个作弊的语法.可让背景执行绪直接操作 GUI. win/linux/mac 桌面需求: 果断学 QT......备选 JAVA(FX/awt/swing).但个人不看好 FX. QT 其实应该说是桌面应用工具包.所以 QT 可以搭配很多种语言. 所以你应该搜寻 QT+"某程式语言" 看看是否有支持.有就可以开始了. 某语言你就选你最熟的. 不然就 python.因为入门快.只是 py 本身是单核心的.所以大量计算的需要用多点方法解决这个问题. py 可以搭配 C/C++...等速度较快的.也支持多核心的语言. 所以你知道某问题需要 py 大量计算,记得你还有 C/C++...等程式语言可以混搭. 不要太纠结 y 的单核心问题.搜寻 "py 多核心" 一堆快速解,最佳解. JAVA(awt/swing/FX)是 JAVA 为了桌面平台做的东西.不难用但这 3 个东西有重复.又常混在一起用. 想厘清 awt/swing/FX.就去搜寻这三个字.会有史诗级的故事. 嫌 C#/VB.net/JAVA 慢?py 都能接受那这些都不算慢了.所以高计算还是让 C/C++来吧. scala 是建立在 JAVA 的一种变种.核心偏向是 Actor/akka.可以 java/scala 互相引用. 3 桌面又跨手机...果断要会网页. 前端 html/css/js.后端 php/nodejs..等.后端只要能建立 http server 的语言都可以.不要限制自己的思想. FB 有出一东西叫 React.本身是一种网页前端框架. 然后可以开发近原生的手机 APP.叫做 ReactNative. React(Native)的速度就是 JS 的速度.应该跟 py 算同一个等级. 有人用 JS 做出高计算的框架.如果有 React(Native)的高计算需求.去 JS 社群问 JS 的高计算框架推荐. 当你身边有巨人.就不要自己拿爬梯. 除非你跟巨人不能沟通. |
33
haoc 2016-02-04 11:31:40 +08:00 1
线程,进程是操作系统提出的概念。如果要了解还是去看操作系统的书吧。如果要做并发编程要结合不同的语言来学习,因为每个语言的并发模型都不太一样。
|
36
braineo OP @mko0okmko0 好想给你多发几个金币, 10 个实在太少了
|
38
zhpech 2016-02-04 12:25:09 +08:00
不要怕踩坑……你会发现坑才是记得最牢的东西。
我觉得虽然现在巨人足够大了,站在其基础上确实可以造很多东西,但真正消化和会用是两个境界,有些理论可能自己用不到,但对于未来很多东西的理解上是有非常大的助益的。 然而如果只是要用一个工具,你可能觉得这是弯路,对于长期而言,我觉得是有好处的,个人看法,如果你觉得要避免坑,唯有打好基础了,那些是不该踩得坑,剩下的是新手必经之路……别人要是连这段都帮你走完了,那估摸着就是个搬运工了。 (我又在口胡了,果断光速逃跑) |
39
braineo OP @em70 这么说吧。多线程的编程中(我还不会),怎么让两个线程不要相互干扰,怎么在他们之间传递消息,我觉得肯定已经有比较好的实践方法。直接上的话遇到问题要么是我重新发明这些方法,要么是使用一些二逼方法----俗称坑。但无论是哪个都是要耗费时间的,而时间是很富贵的。就像你做研究一样你不会把一个研究从头做起而是看别人的 paper 从别人的基础上做。如果任何研究都从头做起,说好听点叫做认真负责,说不好听点叫做二。
|
40
iceleaf 2016-02-04 12:53:47 +08:00
建议楼主先学 python ,然后了解 python 的所有 GUI 绑定,然后你就很快知道 GUI ,多线程是怎么回事儿了
|
41
braineo OP @zhpech 见上一条回复。就是理论上的坑 实践的方法上求能不跳就不跳。简单的例子就是,有 quick sort 这种东西了,刷题的时候让你写一个搜索你要么重新发明一个 quick sort 或者 merge sort ,不然就 brute force sort.正常来说我不需要把 quick sort 的算法从新发明呀。但是就算知道原理在实现的时候肯定会有坑,那种是我想避免的
|
42
Andiry 2016-02-04 13:05:02 +08:00 1
@braineo 最简单的方法:加锁。任何一本操作系统书上都会讲,原理很简单。 so 去看书。
至于跳坑,那是无法避免的,我还没见过学习并发编程没踩过坑的人。 |
43
Andiry 2016-02-04 13:07:57 +08:00 1
专门讲并发编程的书: perfbook ,多处理器编程的艺术
|
44
zhpech 2016-02-04 13:16:26 +08:00 1
@braineo 呃……楼主有这点时间跟我们口胡这么多东西,早就把理论知识点看得差不多了吧,另外我以前也觉得什么 qsort ,数据结构都有现成的,为什么还要自己去写一遍,但是现在觉得他们都有助于理解很多东西,并且很锻炼思维,从坑中也收获颇多,你所谓的理论上的坑,不就是想得太多,看得太少么?
自己想的算法同理,感悟更深刻。 学而不思则罔,思而不学则殆。 楼上所说的加锁确实是行之有效的方法,但锁到什么精度,对于效率是截然不同的,实践可能就会告诉你,加个锁就行了,但操作系统每个可能会告诉你,怎么锁更好,就是这个道理。 同理,只有你自己鼓捣了东西之后你才会发现现有轮子的美。 |
45
haoc 2016-02-04 13:17:09 +08:00 1
@braineo 是的。。个人觉得一开始系统不用看太深入,了解基本概念和原理还有比较重要的问题就行了。因为大部分语言都对操作系统的线程有自己的抽象。
还有,不要用**python/ruby** :p |
46
em70 2016-02-04 14:00:36 +08:00 via iPhone
@braineo 任何语言都内置多线程支持,哪需要你去考虑线程互斥,你亲手做一遍啥都明白了,连做一遍的能力都没有?你压根没入门,你知道吗,多线程是相对高级的应用,你先得学会爬
|
47
louk78 2016-02-04 14:34:24 +08:00
学 C++吧,多线程是 C++最基础的东西
|
48
braineo OP @zhpech 楼主还没放假,楼主还在上班做文职工作,楼主上班没法看别的书但是可以口胡 2 分钟,楼主正在思而不学则 die
|
50
braineo OP @em70 我知道是比较进阶的用法。我自己斤两自己惦记着,我也没提出过于泛泛的问题,你为啥觉得我不会爬啊?还是说在愉快地鄙视文科生?
|
51
yuriko 2016-02-04 15:38:50 +08:00 1
lz 怎么提问显然是还没入门啊……
多线程显然不是你现在需要考虑的问题 入门过程中应该是思考:如何实现->逻辑正确->性能正确->体验优化 多线程至少不是第一步需要考虑和学习的 程序是个实践主导的领域,没有绝对正确的做法,只有合适与否。线程问题同样,连领域都不确定,具体场景也没有,让别人给你个设计指导,这不是说空话么,纸上谈兵的事情在很多实际场景中并不是一回事 |
55
RqPS6rhmP3Nyn3Tm 2016-02-04 19:47:30 +08:00 via iPad
据说高手都是用纯 C 的?
|
56
isnowify 2016-02-04 22:28:12 +08:00 via iPhone
head first 系列找来看看? 挺有趣的
|
57
yuriko 2016-02-05 07:52:42 +08:00
@braineo 并没有说没入门不对
而是说正因为你没入门,还不知道现在真正的关键在哪里,作为一个编程的入门者,完全还没有到需要考虑多线程的时候,你现在需要掌握的是如何在某一个具体实现领域深入下去,当你随随便便就能正确完善的实现功能时,自然会去考虑并发问题。 所以你现在就属于步子太大扯着蛋的典范,让我觉得好想就是连加法还没做好的时候,觉得好多人大学高数要挂,于是就到处问别人微积分怎么做一样。 而且,在不同语言,不同框架,不同应用场景,多线程 /进程,虽然原理大同小异,但实现的时候所考虑的细节却是不同的。 |
59
wizardforcel 2016-02-05 19:26:17 +08:00 via Android
gui 随便找本书就好了。(或者再看看设计方面的?)
并发的相关内容应该在编程书讲线程书的时候也一起讲了,但是,国内的垃圾教材好像不怎么提及。既然你已经被垃圾教材坑了,现在最好的办法是《 apue 》和《七周七并发模型》。前者讲了线程和锁的基本设施,后者是各种架构上的用法。 async 这种语言级别的特性,编程书怎么可能不讲? |
60
hqs123 2016-02-06 08:18:46 +08:00
windows 核心编程里面也有涉及多线程编程东西楼主可以看下。
|