如何能从会编程基础(变量、条件、循环、函数等)跨越到应用自如解决问题的阶段呢?

2012-12-07 00:37:42 +08:00
 tedd
大家大学里面科班出身的在学校是怎么跨过这道坎的?我这些基础都会了,而且还会不止一种语言下面的基础(当然这些基础万变不离其中,只是写法不一样而已),但遇到问题就抓瞎了,因该去熟悉针对具体问题的现成库?获去学习算法?,因为是自学的,所以思路不开阔特来学习下大家经验
3152 次点击
所在节点    问与答
16 条回复
goofansu
2012-12-07 00:40:16 +08:00
找个能解决手头问题的应用开始做呗,不一定非做网站,可以写一些命令行之类的小应用
ultragtx
2012-12-07 08:41:55 +08:00
写多了就自然会了
chaojie
2012-12-07 09:05:57 +08:00
写多,这是知识积累,很重要
思考更重要,就算做不出,能有头绪的话至少自己知道去查什么资料,写不出排序算法可以查相关的资料,不知道要用排序算法说明没有思考
gockxml
2012-12-07 09:48:04 +08:00
just do it , 做一些简单的任务。我曾经在的学生团队会给招进来的新人(有的毫无技术基础)布置3期任务,分别是:写个Windows计算器(XP版本下的), 完全抄一个网站的样式(只写HTML+CSS+JS, 我当年抄的是校内),写个博客系统。前两个任务时限在40-80小时(一周左右),个人觉得非常有效。LZ要是有兴趣,可以做做试试。
tedd
2012-12-07 14:38:45 +08:00
@gockxml 这建议非常具体,感谢!
vampirekiss
2012-12-07 14:58:09 +08:00
会了语法之后,就到了累计经验的地步了。 如果你一直在前进的话,你会发现你以前写的代码都是很幼稚的。 编程这个事情嘛,做啊做啊的就习惯了。
ps: 没事多看些开源软件代码,里面大都有些基本的编程模型或者很棒的idea, 然后你就可以照老虎画猫了。
laskuma
2012-12-07 14:59:36 +08:00
@tedd 感觉楼主被坑了。。。4楼的问题一个都不简单 而且远离windows啊 LZ现在所遇到的问题目测应该是抽象化还未生成 遇到问题不知道该如何下手 推荐去wikipedia看一下关于topdown design的东西,在stanford cs106A里教授也强烈推荐过这种思考方式 可以帮助初学者思考问题。 简而言之就是先思考抽象的大步骤 比如 如何把大象放进冰箱。 分3步,打开门,把大象放进去,把门关上。简单的步骤诸如打开门和关上门,可以用几行代码解决。放进去的过程很复杂就先在main里写成一个函数调用。然后遇到复杂问题就先用函数抽象的代替过去,写完整体过程再回来考虑每个函数怎么写,遇到复杂问题就再次细分,最后复杂问题就会被分解成许许多多简单的小问题,自然也就可以解了。
likuku
2012-12-07 15:06:51 +08:00
处理触手可及的小事,尤其是需要很多重复工作的...

例子:
我有次下载了电影字幕文件,发觉其显示很有问题,与正确字幕文件对比,发现是其中一些行的格式有差异,这种不便用编辑器来修改,有时即便用正则来匹配修改都不方便(自己试了20分钟,电话请教朋友和试验花了40分钟,还是不行[不同编辑器的正则支持还是有差异的])。此时直接拿python写段代码来处理是最快了(将人的处理思路转化为程序自动遍历每行文本并处理),边想边写连同测试到修改好字幕总共耗时10分钟。
tedd
2012-12-07 15:37:43 +08:00
@laskuma 我看了那个的哈,当时教授讲的时候我感觉简直醍醐灌顶,这下没有我写出不来的程序了!结果现实是残酷的,我觉得这个topdown是在基于了你对工具已经很经熟悉的基础上的,不然都不知道到底分解到哪一步才算合适可以写了
vampirekiss
2012-12-07 15:43:23 +08:00
@tedd 《代码之美》 进阶 《架构之美》 辅助 《代码大全》 算法 《编程珠玑》
4本在手,天下我有
gockxml
2012-12-07 15:44:11 +08:00
@tedd @laskuma 我是说仿XP的计算器,不是说一定要在windows下开发。后来我们团队完全不限平台和语言,有的小朋友就用js写了一个。。至于 @laskuma 朋友的方法, 我只能说很美好, 但感觉这么学的人不多,例证太少。我身边绝大部分人绝对是干中学的,就像我们学走路,没有人会从物理学的角度去分析受重力、摩擦力、能量转换blabla,多跌倒几次就学会了。不动手,永远体会不到写程序的艰辛、debug的烦恼和跑通后的成就感。
初学阶段,我觉得还是动手做,建立大概概念和积累经验。等到做完一个任务后再去看看理论知识,说不定会豁然开朗。脑海里没有经验和概念,就去看理论,往往容易一头雾水。
我在上面说的那几个任务,偏颇之处可能在于这些都是GUI相关的,都是”应用“。这和我们团队定位是有关系的。学ACM的任务当然不可能是做这些。所以还要根据lz的实际情况,看看到底做什么任务。但干中学的思路应该是一致的。
Yannis1990
2012-12-07 15:55:30 +08:00
@gockxml gock说的很对~哈哈哈
gockxml
2012-12-07 16:01:01 +08:00
仔细想了想lz的情况,似乎跟着《数据结构》之类的书做点小题目也是个不错的选择(我当年就是这么开始的,因为是为了参加信息学竞赛)。不过现在很多人对这本书比较诟病,不知道其他人有没有其他推荐。
laskuma
2012-12-08 00:35:53 +08:00
@gockxml 我是觉得他第一个都不可能做出来 in order到post或者pre order的转换这样的新人能做出来?他是一点思路都没有,别说基本算法了。
laskuma
2012-12-08 00:38:22 +08:00
@gockxml 我错了…我道歉…刚才脑补了 一想xp下计算器好像不能求长自然等式…一次只能算2个数字…
shellex
2012-12-08 00:48:25 +08:00
无他,但手熟尔。当然大前提是有天赋,有兴趣。

你看,啥都涉猎一点在初期是个好事,因为可以从各方面取得的成果和对各方面的兴趣来确定以后做的方向。但是作为一个以后准备做研发工作的开发者,最好还是在保持对行业新技术的敏感嗅觉的同时,把大部分精力投入到自己认可的能做的收益最大的技术方向。

就我自己的经历来看,最欠缺的就是这个。虽然说职业规划是个。。。伪命题,但是如果对自己多一分了解,那做决定要靠谱很多。

如果楼主愿意研究算法,不妨从算法导论看起,然后去做poj上的算法题。先从简单的题目做起。
如果楼主喜欢捣鼓系统设计,不妨阅读一些感兴趣的开源项目,并多写写自己的程序,多造几个轮子,进步会很快。

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

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

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

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

© 2021 V2EX