我已经编程好几年了,从那时起,我学到了一些概念和技术,这些概念和技术使我成为了一个更好的程序员(即 OOP、MVC、正则表达式、散列等)。我也觉得通过学习几种语言(basic、pascal、C/C++、lisp、prolog、python),我以一种非常积极的方式拓宽了我的视野。但是从前一段时间我觉得我没有学习任何新的好“技巧”。你能推荐一些有趣的概念/技术/技巧,让我重新学习吗?
19 回答
YAGNI(你不需要它)和 DTSTTCPW(做最简单的可能工作)
很容易花很多时间思考边缘情况,然后发现你已经实现了一些完全没用的东西。我相信一个更好的方法是敲出一个简单的原型,然后戳它,直到你对领域足够了解以创建生产代码。
但是,要认识到,无论您喜欢与否,您的原型都将演变为生产代码。因此,请记住这一点。
学习如何使用您的 IDE 和工具。对我来说,这大大提高了生产力。
举些例子:
- 学习如何使用源代码级调试器
- 使用 purify/boundschecker 等工具
- 外汇警察
等等。我意识到我在和自己约会,但这些都是很大的步骤。还有很多。
任何时候你可以改变你思考问题的方式或解决问题而不必撤销以前的工作是巨大的收获。流程、工具等都可以提供帮助。不要局限于寻找提高生产力的灵丹妙药。
观察富有成效的人工作并让他们告诉你他们在做什么以及为什么这样做也是非常宝贵的。
老实说,使用和学习像 .NET 这样的优秀框架确实提高了我的工作效率。
我经常对人们愿意重新发明的东西感到惊讶,因为他们不知道框架中已经存在相同的功能。
VIM 快速参考卡。在我开始使用高级 vim(宏、插件)后,我已经停止在手动编码期间执行任何重复操作。
除此之外,Scrum 和晚上工作,没有人打断你给了我最大的好处。
敏捷,尤其是测试驱动开发。自面向对象设计发明以来,软件开发发生的最好的事情。
如果您想将您的经验扩展到 Web 编程,您应该尝试掌握 HTTP 请求/响应范式。这将使您更轻松地创建 Web 应用程序,因为您了解底层框架。
(http)://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
试着学会从用户的角度看事情。例如:
- 学习如何编写有意义的错误信息
- 学习如何制作可用的应用程序
- 学习一些基本的速度优化技术
请记住,用户看到的是您的应用程序,而不是您的代码。
设计模式。学习如何打破对实现和继承的依赖,以及依赖接口(契约),反而改变了我对编程的看法。
调试。一旦我弄清楚如何实际单步执行代码并逐行检查底层状态,它就彻底改变了我对代码进行故障排除的方式。
练习,练习练习:直到相对较短的时间之前,我才意识到在工作之外继续练习我的技能是多么重要。我在家里犯的错误和解决方案使我在工作中成为更好的程序员,反之亦然。如果你想擅长某事,学习永远不要停止,编程也不例外。
如果我只能选择一个,我会说测试驱动设计,也就是 TDD:在增量添加功能之前编写单元测试(并检查它们是否失败) 。
我会看一些结合了面向对象和功能元素的新语言,比如 C# 或 Scala。
学习 Smalltalk 帮助我变得更有效率。它是一种易于学习的语言,并且可以非常快速地构建事物。要获得令人惊叹的生产力帮助,请查看Seaside,它是用于构建 Web 应用程序的框架。而且,如果你只习惯了花括号语言,Smalltalk 也会让你微笑!
按此顺序,我得到了以下范例的帮助:
1)自底向上编程 2)自顶向下编程(C、Pascal) 3)面向对象编程(Smalltalk、Java) 4)函数式编程(lisp、Mathematica)
在(序言)中加入了一些逻辑编程。
nHibernate 放下手。我不需要为我的业务对象编写数据库功能这一事实非常有用且节省时间。
代码生成器。它们是软件工程中最好的东西。
你想用 asm 写你所有的项目吗?不,让我们从 C++ 生成它。或者来自位于 JVM 之上的东西,它努力生成必要的机器代码。
到处复制相同的源代码,但坚持使用一种坚持线路噪音的语言?使用宏。
想要在没有它们的语言中使用 lambda?弄清楚如何伪造所需的匿名名称和变量范围,然后生成样板。
没有一种现成的语言完全符合您的思维模式、所需的语法甚至语义?为新的编译器编写一个编译器。
更好的语言很好。更好的设计模式很好。Emacs 很棒。但是编译器是我们领域的全部力量所在。我怀疑在其他任何答案中都没有提到它们的唯一原因是我们无法想象没有任何东西的编程。
复制/粘贴技术