非cs怎么学着让coding更专业点

p
piggydudu
楼主 (北美华人网)
华人姐妹牛人多,请教一下。 我是转行的DS, 能写R 和python,但很业余,就是写出来能实现功能,能跑model,但基本想到哪儿写到哪儿,没有很漂亮的结构,也不是很标准。想请问一下有什么途径可以提升一下,学习比较专业的coding方法吗?最好是python的。coursera, udemy上面的课大多是入门级的。有些比较完整的coding教程又大多是java, c#这些。 有没有比较好的书,课程,或者part time online bootcamp推荐? 谢谢。
w
wfmlover
最有用的是看公司内部的production code
c
chanelmiu
是的。读万卷书行万里路。看一本教科书也行。照着写。不要天马行空,尤其是逻辑和格式。
w
wantU
加注释
d
dadaoxiaomai
同求
j
java
熟读唐诗三百首,不会作诗也会吟。多读点教科书里的程序,照葫芦画瓢,怎么也不会太离谱。
一开始不要野路子乱来,养成了坏习惯不容易改的。
f
foreverf
https://google.github.io/styleguide/ 这只是形式。 具体到写出来的东西,不是一天两天的功夫。 比如我写的loop,要run2分钟出结果。 别人给我写的里面加个指数的什么东西,眨眼就能run好,速度指数倍提升。
似曾相识
berkely的61-A是python讲的如果我没记错的话,但也是入门课。
f
fibril
https://google.github.io/styleguide/ 这只是形式。 具体到写出来的东西,不是一天两天的功夫。 比如我写的loop,要run2分钟出结果。 别人给我写的里面加个指数的什么东西,眨眼就能run好,速度指数倍提升。
foreverf 发表于 2021-07-28 11:14

你是认真的吗
h
happywindveryhappy
https://google.github.io/styleguide/ 这只是形式。 具体到写出来的东西,不是一天两天的功夫。 比如我写的loop,要run2分钟出结果。 别人给我写的里面加个指数的什么东西,眨眼就能run好,速度指数倍提升。
foreverf 发表于 2021-07-28 11:14

2 minutes?
h
happywindveryhappy
华人姐妹牛人多,请教一下。 我是转行的DS, 能写R 和python,但很业余,就是写出来能实现功能,能跑model,但基本想到哪儿写到哪儿,没有很漂亮的结构,也不是很标准。想请问一下有什么途径可以提升一下,学习比较专业的coding方法吗?最好是python的。coursera, udemy上面的课大多是入门级的。有些比较完整的coding教程又大多是java, c#这些。 有没有比较好的书,课程,或者part time online bootcamp推荐? 谢谢。
piggydudu 发表于 2021-07-28 10:26

It takes time. 多看别人写的代码。
扶苏
首先你要知道你写code的目的是什么。你要解决的问题是什么。
我个人认为,一个好的coding,根本不需要太多的documentation,应该是旁人(当然是懂行的人)一看就明白在干什么,function是什么,input,output,解决了什么问题,一目了然。我个人是很讨厌,花里胡哨,旁人花力气才能看懂,维护起来也很麻烦的那种code。
我的工作title是software engineer。我对engineer的理解是我是来解决问题的。写code只是解决问题的一个步骤。找出问题的根本,设计解决方案,最后测试自己的方案这个流程才是灵魂。
所以想要让人觉得自己professional,那就得你的思想有engineer的高度。我个人认为,一个好的engineer,一上来先要define,需要解决的问题是什么。搜集资料,做research。然后再设计如何解决这个问题。从不同角度思考。最后定方案的时候,需要知道我为什么选择这个方案。在交流的时候你得言之有物。比如这么做可以延续原有的设计思路,或者这么做节省memory,或者这么做容易maintain。总之一个engineer对于自己采用的方案是有想法的。
等想清楚了以后,那才是coding的部分。其实coding的部分并没那么重要。我工作中用c++,c#。去解决一个问题,可以有不同的方式。就拿loop来说,我可以while,可以for,可以用foreach,等等,方式很多。这个不重要,能实现功能,不要有bug就可以了。但是你写的function,你的设计意图是否清晰,你有没有solve the problem,meet the requriement,你写的东西是否easy to maintain在我看来才是更重要的。
f
foreverf
你是认真的吗

fibril 发表于 2021-07-28 11:47

我很菜。打个简单的比方,比如有几million的rows, check 每个row的missing value,然后fill in xx,我写的loop是要run一会。 反正当年人家帮我改完,我的崇敬之情有如滔滔江水。。。
扶苏
我没学过python。所以就拿熟悉的c#,c++来举例。我看一个engineer写code的水平。第一,如何定义function,function的名字,variable的名字,就能体现一个engineer的水平。一看这个function就一目了然知道干什么的。动词名词的搭配恰到好处,不会有歧义。比较好的结构就是,get information的和change value的function要分开。也就是一个get的function你就老老实实get,一个change value的function你就最好不要return东西,除非是boolean。最怕一个function,既return value,又把class本身的东西改变了。第二,如何定义class。如何inherit,如何设计interface。这些都是最容易看出一个engineer水平的地方。
反而是那种fancy的syntax,什么lambda啦,recurrsive的东西啦,tree啦,这种东西并没那么重要。比如我上学学过tree这个结构。但是在实际工作中几乎没用过。因为根本用不到。function,class写的简洁明了才是王道。easy test,easy debug,easy review。好的interface,用起来就跟说话一样,逻辑鲜明,功能简单,不容易让用的人出错。这些才是反应真正水平的东西。
l
lovesunshine
简单,直接,读公司自己的code
K
KOH
有的厂子规矩大,漂亮的结构不得不有。我头一回写的code,总共30多行,被同事mark出来40多个需要改的地方。。。
t
ted.hanks
多看别人的code, 对于python, 可以看看requests 的实现。
b
burneremaiI
首先你要知道你写code的目的是什么。你要解决的问题是什么。
我个人认为,一个好的coding,根本不需要太多的documentation,应该是旁人(当然是懂行的人)一看就明白在干什么,function是什么,input,output,解决了什么问题,一目了然。我个人是很讨厌,花里胡哨,旁人花力气才能看懂,维护起来也很麻烦的那种code。
我的工作title是software engineer。我对engineer的理解是我是来解决问题的。写code只是解决问题的一个步骤。找出问题的根本,设计解决方案,最后测试自己的方案这个流程才是灵魂。
所以想要让人觉得自己professional,那就得你的思想有engineer的高度。我个人认为,一个好的engineer,一上来先要define,需要解决的问题是什么。搜集资料,做research。然后再设计如何解决这个问题。从不同角度思考。最后定方案的时候,需要知道我为什么选择这个方案。在交流的时候你得言之有物。比如这么做可以延续原有的设计思路,或者这么做节省memory,或者这么做容易maintain。总之一个engineer对于自己采用的方案是有想法的。
等想清楚了以后,那才是coding的部分。其实coding的部分并没那么重要。我工作中用c++,c#。去解决一个问题,可以有不同的方式。就拿loop来说,我可以while,可以for,可以用foreach,等等,方式很多。这个不重要,能实现功能,不要有bug就可以了。但是你写的function,你的设计意图是否清晰,你有没有solve the problem,meet the requriement,你写的东西是否easy to maintain在我看来才是更重要的。
扶苏 发表于 2021-07-28 11:56

难得看到这种回复
我是真叫别人花里胡哨的function给看恶心了,然后一到presentation就叽叽歪歪啥都说不清楚,也不知道解决了什么问题,就反复唠叨自己的input 和各种乱七八糟function
y
yxfabroad
网上应该有很多语言的doc规范 比如effective python 你可以学一下 会有很多例子 好例子坏例子
t
thymesu
回复 17楼ted.hanks的帖子
看别人的code,最主要是structure,github上下人家的solution看对我有帮助,我们是一般的应用层小系统,对速度和资源占用要求都比不了那些分布,及时的大应用。
l
lazycat12345
回复 1楼piggydudu的帖子
先好好找工作,去个大厂,进个好组,然后去看组里senior的code。 对于有的对code要求不严的组,看还不如不看
n
nazaban
华人姐妹牛人多,请教一下。 我是转行的DS, 能写R 和python,但很业余,就是写出来能实现功能,能跑model,但基本想到哪儿写到哪儿,没有很漂亮的结构,也不是很标准。想请问一下有什么途径可以提升一下,学习比较专业的coding方法吗?最好是python的。coursera, udemy上面的课大多是入门级的。有些比较完整的coding教程又大多是java, c#这些。 有没有比较好的书,课程,或者part time online bootcamp推荐? 谢谢。
piggydudu 发表于 2021-07-28 10:26

多刷题比什么格式更管用,真的
卡多司基
很多coding pattern是需要复杂的需求来justify的,需求复杂度上去了,coding pattern是必须的,否则code就无法扩展,无法维护。 如果需求简单,这类pattern就更像是华而不实的噱头。 所以不能一概而论。楼主做的感觉更像是work flow, 如果都各自独立,就好像automation一样,对结构要求应该不会太高,只要优化效率就可以(这个可以case study,每个flow写完给自己个任务去优化就好了)。如果所有的flow综合在一起作为一个系统,就会对结构有一定的要求了,如果你发现要reuse 一部分code,或者仅仅是logging到各个层,或者需要plugin 不同的provider,就会开始有构架的需求,那么coding pattern就变成刚需,没有华而不实的嫌疑。
c
cclmm
我觉得要多看,多写,更重要的是要了解code背后的algorithm, 同时时间允许的情况下,写几种方案也可以比较, Mark Mark
p
piggydudu
首先你要知道你写code的目的是什么。你要解决的问题是什么。
我个人认为,一个好的coding,根本不需要太多的documentation,应该是旁人(当然是懂行的人)一看就明白在干什么,function是什么,input,output,解决了什么问题,一目了然。我个人是很讨厌,花里胡哨,旁人花力气才能看懂,维护起来也很麻烦的那种code。
我的工作title是software engineer。我对engineer的理解是我是来解决问题的。写code只是解决问题的一个步骤。找出问题的根本,设计解决方案,最后测试自己的方案这个流程才是灵魂。
所以想要让人觉得自己professional,那就得你的思想有engineer的高度。我个人认为,一个好的engineer,一上来先要define,需要解决的问题是什么。搜集资料,做research。然后再设计如何解决这个问题。从不同角度思考。最后定方案的时候,需要知道我为什么选择这个方案。在交流的时候你得言之有物。比如这么做可以延续原有的设计思路,或者这么做节省memory,或者这么做容易maintain。总之一个engineer对于自己采用的方案是有想法的。
等想清楚了以后,那才是coding的部分。其实coding的部分并没那么重要。我工作中用c++,c#。去解决一个问题,可以有不同的方式。就拿loop来说,我可以while,可以for,可以用foreach,等等,方式很多。这个不重要,能实现功能,不要有bug就可以了。但是你写的function,你的设计意图是否清晰,你有没有solve the problem,meet the requriement,你写的东西是否easy to maintain在我看来才是更重要的。
扶苏 发表于 2021-07-28 11:56

谢谢mm! 听君一席话,胜读十年书! 你说的很多地方正好是我的问题。特别是在开始coding之前先有详细的规划,确实是我没有做到的
p
piggydudu
我没学过python。所以就拿熟悉的c#,c++来举例。我看一个engineer写code的水平。第一,如何定义function,function的名字,variable的名字,就能体现一个engineer的水平。一看这个function就一目了然知道干什么的。动词名词的搭配恰到好处,不会有歧义。比较好的结构就是,get information的和change value的function要分开。也就是一个get的function你就老老实实get,一个change value的function你就最好不要return东西,除非是boolean。最怕一个function,既return value,又把class本身的东西改变了。第二,如何定义class。如何inherit,如何设计interface。这些都是最容易看出一个engineer水平的地方。
反而是那种fancy的syntax,什么lambda啦,recurrsive的东西啦,tree啦,这种东西并没那么重要。比如我上学学过tree这个结构。但是在实际工作中几乎没用过。因为根本用不到。function,class写的简洁明了才是王道。easy test,easy debug,easy review。好的interface,用起来就跟说话一样,逻辑鲜明,功能简单,不容易让用的人出错。这些才是反应真正水平的东西。
扶苏 发表于 2021-07-28 12:04

真是直达我这个起名废的痛点
p
piggydudu
简单,直接,读公司自己的code
lovesunshine 发表于 2021-07-28 12:51

我们是传统公司,不是IT大厂,我们整个组都是从统计转DS的,coding都挺水的。 IT部门的code我们看不到
p
piggydudu
回复 1楼piggydudu的帖子
先好好找工作,去个大厂,进个好组,然后去看组里senior的code。 对于有的对code要求不严的组,看还不如不看
lazycat12345 发表于 2021-07-28 13:27

写好code进大厂好组,和进大厂好组写好code,互为因果
c
crazymutt
现在各种博主贴code,搞project,搞得不弄些fancy formating或者tool都不好意上传。
l
lazycat12345
写好code进大厂好组,和进大厂好组写好code,互为因果
piggydudu 发表于 2021-07-28 17:36

前者不需要你把code写整齐。。
T
TOR123
第一份工作去大厂,会给你很好的培训,混几年大厂后写出来的东西会比较规整。
S
Snowpig
找比较挑剔的人做code review, 从结构,扩展性,正确性,效率,安全,可读性,连续性等等方方面面往死里造,造几遍就有感觉了。
至少看看系统里以前的CR的comments
l
lauraoyzj
最好就是不容易出错,出了错容易找容易改,以后加新的东西不用把现有的东西改成屎。
t
ted.hanks
我们是传统公司,不是IT大厂,我们整个组都是从统计转DS的,coding都挺水的。 IT部门的code我们看不到
piggydudu 发表于 2021-07-28 17:33

这个我们内部也讨论过, 为啥ds的python code 写得那么烂? 原因有几个吧:
大多数code 都是用完就扔的, 写完了弄出数据就好。 code review 都是pair program, 所以code里不需要太多的上下文。
要想提高,还是要多些production 的code, 需要维护的code 肯定要写的好一些。
p
piggydudu
这个我们内部也讨论过, 为啥ds的python code 写得那么烂? 原因有几个吧:
大多数code 都是用完就扔的, 写完了弄出数据就好。 code review 都是pair program, 所以code里不需要太多的上下文。
要想提高,还是要多些production 的code, 需要维护的code 肯定要写的好一些。
ted.hanks 发表于 2021-07-28 18:11

Exactly!我们就是做完就扔, 而且基本是自己写自己用,不需要太多的合作,所以写得烂也能混。。。但也是限制自己发展的一个瓶颈,所以还是想突破一下
l
lauraoyzj
Exactly!我们就是做完就扔, 而且基本是自己写自己用,不需要太多的合作,所以写得烂也能混。。。但也是限制自己发展的一个瓶颈,所以还是想突破一下
piggydudu 发表于 2021-07-28 21:29

做完就扔也是有改进空间的,比如,这次做的和下次做的有没有相似的,可以抽象一下reuse的
p
piggydudu
做完就扔也是有改进空间的,比如,这次做的和下次做的有没有相似的,可以抽象一下reuse的
lauraoyzj 发表于 2021-07-29 14:38

是的,这些都是在改进的地方,所以需要学习
k
k.hao
首先你要知道你写code的目的是什么。你要解决的问题是什么。
我个人认为,一个好的coding,根本不需要太多的documentation,应该是旁人(当然是懂行的人)一看就明白在干什么,function是什么,input,output,解决了什么问题,一目了然。我个人是很讨厌,花里胡哨,旁人花力气才能看懂,维护起来也很麻烦的那种code。
我的工作title是software engineer。我对engineer的理解是我是来解决问题的。写code只是解决问题的一个步骤。找出问题的根本,设计解决方案,最后测试自己的方案这个流程才是灵魂。
所以想要让人觉得自己professional,那就得你的思想有engineer的高度。我个人认为,一个好的engineer,一上来先要define,需要解决的问题是什么。搜集资料,做research。然后再设计如何解决这个问题。从不同角度思考。最后定方案的时候,需要知道我为什么选择这个方案。在交流的时候你得言之有物。比如这么做可以延续原有的设计思路,或者这么做节省memory,或者这么做容易maintain。总之一个engineer对于自己采用的方案是有想法的。
等想清楚了以后,那才是coding的部分。其实coding的部分并没那么重要。我工作中用c++,c#。去解决一个问题,可以有不同的方式。就拿loop来说,我可以while,可以for,可以用foreach,等等,方式很多。这个不重要,能实现功能,不要有bug就可以了。但是你写的function,你的设计意图是否清晰,你有没有solve the problem,meet the requriement,你写的东西是否easy to maintain在我看来才是更重要的。
扶苏 发表于 2021-07-28 11:56

等想清楚了以后,那才是coding的部分。
-- 赞。
“现在公司” 里的要求是一天一变。。。写的model 出来还有去改,或者重新写。
所以很多coding 问题不是没有写好,而是没有时间去想, 然后写。 因为问题一直在变, 要求也在变。。
1
160erskine
易读和易维护通常是冲突的,找个平衡点
r
ray_golden
这个看你遇到啥样的同事,我们组有个reviewer的小白我怀疑他是文科生,在公司review是臭名昭著,而且经常change request 别人的PR。我们曾经为了扯On-prem究竟是怎样的组合扯了十几个回合,究竟是带不带dash,是不是Uppercase ,因为官方的写法就不符合英语规范,扯这个其实很无聊,但是现在很多文科转行的喜欢纠这个,多扯几次就老实了。
b
bw376
Mark
c
cosc
Mark. Good coding.
l
landscape_Blue
mark
l
laiquziyou
不错啊
y
yulingxi
看大神华山论剑