学习多线程以及 GUI 编程的正确姿势是?

2016-02-03 23:14:53 +08:00
 braineo
Sorry 。昨天发了个贴在工作版没有求到答案。于是到这里再发一次。请各位多多指教。

是这样的:
LZ 在某个大公司供职二年文职工作之后,决意跳到互联网行业……
一年来痛定思痛学习编程刷刷 leetcode ,没想到还真的跳成功了……

自觉水平仍然太菜可能无法胜任,真对不起程序员这个名头。
于是想趁过年期间入职之前再全脱产提高一下自己

想请教一下 多线程(进程), Async ,还有 GUI 编程应该看点什么书提升自己?

自己搜索了一下 直接看<操作系统>的建议很多
我知道这个很重要,但是自己看了一下觉得看不懂概念的也很多而且比较偏理论?
如果能有什么实践导向的我觉得可以学起来没有那么枯燥。
因为个人学习经验上来看,先上理论的会出现看不下去的情况。但是实践过一次再看理论就会有种恍然大悟的感觉

综上,请把各种书或者网站的推荐砸向我 :)谢谢
5368 次点击
所在节点    程序员
60 条回复
zhpech
2016-02-04 00:26:39 +08:00
@braineo ……嗯,这些……操作系统里都会有说……怎么处理情况,协同工作
braineo
2016-02-04 00:31:26 +08:00
@zhpech 好哒……最后文科生还是要上 操作系统 这种教科书了。我下单硬啃去了……
snnn
2016-02-04 00:37:25 +08:00
@braineo 《 C++并行与分布式编程》。我刚搜了下,买不到了。虽然能找到电子版,但是我不觉得有人能在电脑上看完它。
braineo
2016-02-04 00:39:28 +08:00
@snnn 好哒!谢谢你!我先去搜搜……
braineo
2016-02-04 00:46:40 +08:00
@snnn 貌似英文还有卖的,但是挺贵的
em70
2016-02-04 01:19:20 +08:00
@braineo 你这不是正确的学习方法,不去实践,书你肯定看不明白的,计算机是一门实践性极强的学科.至少你得有一个感性的认识,知道 EXE 是如何编译出来的吧,俗话叫:写 hello world. 现在的 IDE 工具和框架可以让任何没有基础的人通过拖动控件把把一个只有界面没有功能的空白程序运行起来
braineo
2016-02-04 07:39:22 +08:00
@em70 那你假设我现在有感性认知了,但我不想在多线程编程里再踩上前面无数人踩过的坑的情况下,什么叫正确的方法?
archxm
2016-02-04 09:01:39 +08:00
非常重要的一点, 不要怕踩坑. GUI 编程, 非常重要的一个知识点: 消息循环, 另外还有绘制, 其实任何控件都可以自己画出来, 当然, 一开始学习, 就用已有的控件, 如果深入研究, 可以了解下自绘
asj
2016-02-04 09:08:32 +08:00
多线程简单,记得一件事就行了





不要自己写多线程代码,你不会用到的
zhuangzhuang1988
2016-02-04 09:30:12 +08:00
<Windows 并发编程指南> http://book.douban.com/subject/4214617/ 一本就够了. 涉及了基本你能遇到的线程模式.
mko0okmko0
2016-02-04 10:03:51 +08:00
一个提前概念.
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 的高计算框架推荐.

当你身边有巨人.就不要自己拿爬梯.
除非你跟巨人不能沟通.
em70
2016-02-04 10:49:14 +08:00
@braineo 别人说这是坑,你不经验证就相信并绕行了,说好听点就是缺乏独立思考能力,说难听点就是懒
haoc
2016-02-04 11:31:40 +08:00
线程,进程是操作系统提出的概念。如果要了解还是去看操作系统的书吧。如果要做并发编程要结合不同的语言来学习,因为每个语言的并发模型都不太一样。
braineo
2016-02-04 12:13:50 +08:00
@archxm 好的谢谢!
braineo
2016-02-04 12:17:32 +08:00
@asj 愿求详解?
braineo
2016-02-04 12:19:47 +08:00
@mko0okmko0 好想给你多发几个金币, 10 个实在太少了
braineo
2016-02-04 12:21:33 +08:00
@haoc
原理性的→操作系统
实际操作→每种语言的并发类的书或者文档

是这种意思是吧?
zhpech
2016-02-04 12:25:09 +08:00
不要怕踩坑……你会发现坑才是记得最牢的东西。

我觉得虽然现在巨人足够大了,站在其基础上确实可以造很多东西,但真正消化和会用是两个境界,有些理论可能自己用不到,但对于未来很多东西的理解上是有非常大的助益的。

然而如果只是要用一个工具,你可能觉得这是弯路,对于长期而言,我觉得是有好处的,个人看法,如果你觉得要避免坑,唯有打好基础了,那些是不该踩得坑,剩下的是新手必经之路……别人要是连这段都帮你走完了,那估摸着就是个搬运工了。

(我又在口胡了,果断光速逃跑)
braineo
2016-02-04 12:29:33 +08:00
@em70 这么说吧。多线程的编程中(我还不会),怎么让两个线程不要相互干扰,怎么在他们之间传递消息,我觉得肯定已经有比较好的实践方法。直接上的话遇到问题要么是我重新发明这些方法,要么是使用一些二逼方法----俗称坑。但无论是哪个都是要耗费时间的,而时间是很富贵的。就像你做研究一样你不会把一个研究从头做起而是看别人的 paper 从别人的基础上做。如果任何研究都从头做起,说好听点叫做认真负责,说不好听点叫做二。
iceleaf
2016-02-04 12:53:47 +08:00
建议楼主先学 python ,然后了解 python 的所有 GUI 绑定,然后你就很快知道 GUI ,多线程是怎么回事儿了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX