Well look the sad truth is 50% of developers are below average. Actually due to the Jon Skeet factor it's more like 65%. But that doesn't mean you should throw in the towel. (If everyone did that it would only serve to set the bar even higher, making even more people depressed about it.)
At least you acknowledge the fact that you aren't satisfied with yourself and want to be better. I know people that write terrible code and think it's the greatest thing in the world. But I don't think I've ever met a good developer that wasn't embarrassed of the code he wrote 6 months ago. It's normal and it's a sign of progress.
What hobbyist developer should do: (I am not an expert; I have listed down all my thoughts. Please correct me, If I am wrong)
Need to learn the language(C, C++, or Java) thoroughly. Many of us fascinated towards computers and programming and we started learning and building pieces of software for fun. Many book you can find on amazon.com about best practices. One can go through that.
Learn concepts like OOPs, Design Patterns, UML. Before all these, one should ask "why" for every answers. Which will help you understand, best ways of modeling the system. Many C programmers when moved to C++, they uses Class like a container for storing all there variable and methods. So how to create a class, why I have to create an abstract class. So "Why" is useful.
Pick up core concepts, like Operating system, Computer organization, Computer Architecture, Algorithms, software engineering etc. Most of us are just programmers (designation says "Software engineer"). We all know how to code and get the working solution. Beyond this, most of us don't know anything about computers. Because, many programmers are from different streams of engineering. Learned these programming concepts and started building applications and joined as software engineers in some company. But we (other stream) never learnt these concepts. So need to pick up these concepts which will help in understanding and coding better.
Participating in conferences (like Microsoft TechEd), which helps understanding the upcoming technologies.
Writing the blog about the best practices, your findings, new concepts, work around solutions. Blog will act like a discussion book, where visitor will tell their views, which will help you understanding the concepts better.
Subscribing to RSS from blogs. This is really helpful.
Amazon.com. I found amazon.com is really helpful in picking up the right book for learning new concepts. user reviews and also check for list of books.
If I could give you two pieces of advice, they would be to introduce yourself to Test Driven Development and follow an online community related to TDD in the language of your choice and secondly, go learn about the SOLID design principles for object-oriented programming.
If you do this, you may drop some of the spagetti code habits that you have developed in the last few years. Both of these topics are very approachable, have a lot of literature, both in print and online and they have pretty vibrant online communities to give you help and advice.
As a hobbyist, don't stop ENJOYing programming or reading other codings. You have no bussiness pressures!
It's time for you to educate yourself with Object Oriented Programming (OOP) concepts like encapsulation, separations of concerns, decoupled design, etc. These are some of the basics you need to master at this time. Most of the good practices have foundations on such principles.
Reading books/blogs/websites is a good and absolutely necessary way to build up the knowledge base. However, to get out of writing bad code, nothing beats outside help. With this I mean practices like pair programming, code reviews and such.
For a professional this is of course much easier as most of us are not the only coders at their workplace. For a hobbyist... well, I guess the only way is to find a friend (from next door or from internet) who is interested to start a coding project with you.
Trust me, another view to your code can greatly expand your own view.
I would like to warn you about all that has been said.
More precisely about mainstream language. Learning "mainstream" language is not always the good way. By mainstream I mean (Java, C#, C++, PHP ...) I don't mean that there a bad, it just that they most of the time failed to teach you concept right.
Mainstream language most of the time are incidentally taking old concept and promote them as new.
For example now in PHP you have closure(actually there are lambda but ...), in C# too... Closure/lambda are a very old concept from LISP, back in the 60's.
So be in alert and alway try to really found out were all things come from. This is difficult but the more you do it the more the sharper you mind will be, like many other things in fact :).
发布评论
评论(8)
参与某种开源项目。
Get involved in an open source project of some kind.
好吧,可悲的事实是 50% 的开发人员低于平均水平。实际上,由于 Jon Skeet 因素,这个比例更像是 65%。但这并不意味着你应该认输。 (如果每个人都这样做,只会把标准定得更高,让更多的人为此感到沮丧。)
至少你承认你对自己不满意并希望变得更好。我认识一些人,他们写出糟糕的代码,却认为这是世界上最伟大的事情。但我认为我遇到过的优秀开发人员都对他 6 个月前编写的代码感到尴尬。这是正常的,也是进步的标志。
Well look the sad truth is 50% of developers are below average. Actually due to the Jon Skeet factor it's more like 65%. But that doesn't mean you should throw in the towel. (If everyone did that it would only serve to set the bar even higher, making even more people depressed about it.)
At least you acknowledge the fact that you aren't satisfied with yourself and want to be better. I know people that write terrible code and think it's the greatest thing in the world. But I don't think I've ever met a good developer that wasn't embarrassed of the code he wrote 6 months ago. It's normal and it's a sign of progress.
业余开发者应该做什么:
(我不是专家;我已经列出了我的所有想法。如果我错了,请纠正我)
需要彻底学习语言(C、C++ 或 Java)。我们中的许多人都对计算机和编程着迷,我们开始学习和构建软件以获取乐趣。您可以在 amazon.com 上找到许多有关最佳实践的书籍。人们可以经历这一点。
学习 OOP、设计模式、UML 等概念。在所有这些之前,每个人都应该问“为什么”。这将帮助您理解系统建模的最佳方法。许多 C 程序员在转向 C++ 时,他们使用类作为容器来存储所有变量和方法。那么如何创建一个类,为什么我要创建一个抽象类。所以“为什么”是有用的。
学习核心概念,例如操作系统、计算机组织、计算机体系结构、算法、软件工程等。我们大多数人只是程序员(职称“软件工程师”)。我们都知道如何编码并获得可行的解决方案。除此之外,我们大多数人对计算机一无所知。因为,许多程序员来自不同的工程流派。学习了这些编程概念并开始构建应用程序并作为软件工程师加入了一些公司。但我们(其他流)从未学过这些概念。因此需要掌握这些概念,这将有助于更好地理解和编码。
参加会议(例如 Microsoft TechEd),这有助于了解即将推出的技术。
撰写有关最佳实践、您的发现、新概念、解决方案的博客。博客将像一本讨论书,访问者将在其中讲述他们的观点,这将帮助您更好地理解概念。
从博客订阅 RSS。这确实很有帮助。
亚马逊网站。我发现 amazon.com 对于挑选合适的书籍来学习新概念非常有帮助。用户评论并检查图书列表。
What hobbyist developer should do:
(I am not an expert; I have listed down all my thoughts. Please correct me, If I am wrong)
Need to learn the language(C, C++, or Java) thoroughly. Many of us fascinated towards computers and programming and we started learning and building pieces of software for fun. Many book you can find on amazon.com about best practices. One can go through that.
Learn concepts like OOPs, Design Patterns, UML. Before all these, one should ask "why" for every answers. Which will help you understand, best ways of modeling the system. Many C programmers when moved to C++, they uses Class like a container for storing all there variable and methods. So how to create a class, why I have to create an abstract class. So "Why" is useful.
Pick up core concepts, like Operating system, Computer organization, Computer Architecture, Algorithms, software engineering etc. Most of us are just programmers (designation says "Software engineer"). We all know how to code and get the working solution. Beyond this, most of us don't know anything about computers. Because, many programmers are from different streams of engineering. Learned these programming concepts and started building applications and joined as software engineers in some company. But we (other stream) never learnt these concepts. So need to pick up these concepts which will help in understanding and coding better.
Participating in conferences (like Microsoft TechEd), which helps understanding the upcoming technologies.
Writing the blog about the best practices, your findings, new concepts, work around solutions. Blog will act like a discussion book, where visitor will tell their views, which will help you understanding the concepts better.
Subscribing to RSS from blogs. This is really helpful.
Amazon.com. I found amazon.com is really helpful in picking up the right book for learning new concepts. user reviews and also check for list of books.
如果我可以给你两条建议,那就是向你介绍测试驱动开发,并用你选择的语言关注与 TDD 相关的在线社区,其次,去了解面向对象编程的 SOLID 设计原则。
如果你这样做,你可能会放弃过去几年养成的一些意大利式代码习惯。这两个主题都非常平易近人,有大量印刷版和在线文献,并且有非常活跃的在线社区可以为您提供帮助和建议。
干杯。
If I could give you two pieces of advice, they would be to introduce yourself to Test Driven Development and follow an online community related to TDD in the language of your choice and secondly, go learn about the SOLID design principles for object-oriented programming.
If you do this, you may drop some of the spagetti code habits that you have developed in the last few years. Both of these topics are very approachable, have a lot of literature, both in print and online and they have pretty vibrant online communities to give you help and advice.
Cheers.
作为一名业余爱好者,不要停止享受编程或阅读其他编码。您没有业务压力!
现在是您自学面向对象编程 (OOP) 概念的时候了,例如封装、关注点分离、解耦设计等。这些是您此时需要掌握的一些基础知识。大多数良好实践都是以这些原则为基础的。
As a hobbyist, don't stop ENJOYing programming or reading other codings. You have no bussiness pressures!
It's time for you to educate yourself with Object Oriented Programming (OOP) concepts like encapsulation, separations of concerns, decoupled design, etc. These are some of the basics you need to master at this time. Most of the good practices have foundations on such principles.
学习如何正确编码,如何用尽可能少的代码表达自己。
忘记 RAD 的一切,只使用单元测试来开发代码并遵循设计模式和最佳实践。
不要写垃圾代码,禁止自己使用复制和复制代码。粘贴但创建您自己的可重用类库。
然后 - 发挥功能(认真地)。
哦,如果您使用 Java,请认真切换到 C#。更好的基础设施、更好的工具、更简洁的语言。
Learn how to code correctly, how to express yourself in the least amount of code possible.
Forget everything about RAD, use unit tests exclusively to develop your code and follow design patterns and best practices.
Don't write garbage code, forbid yourself to use copy & paste but create your own library of reusable classes.
And then - GO FUNCTIONAL (seriously).
Oh, and if you use Java - switch to C#, seriously. Much better infrastructure, much better tools, much cleaner language.
阅读书籍/博客/网站是建立知识库的一个很好且绝对必要的方法。然而,为了避免编写糟糕的代码,没有什么比外部帮助更好的了。我指的是结对编程、代码审查等实践。
对于专业人士来说,这当然要容易得多,因为我们大多数人并不是工作场所唯一的程序员。对于业余爱好者......好吧,我想唯一的方法是找到一个有兴趣与您一起启动编码项目的朋友(来自隔壁或来自互联网)。
相信我,对您的代码的另一种看法可以极大地扩展您自己的看法。
Reading books/blogs/websites is a good and absolutely necessary way to build up the knowledge base. However, to get out of writing bad code, nothing beats outside help. With this I mean practices like pair programming, code reviews and such.
For a professional this is of course much easier as most of us are not the only coders at their workplace. For a hobbyist... well, I guess the only way is to find a friend (from next door or from internet) who is interested to start a coding project with you.
Trust me, another view to your code can greatly expand your own view.
我想警告您注意以上所说的一切。
更准确地说是关于主流语言。
学习“主流”语言并不总是好方法。
我所说的主流是指(Java、C#、C++、PHP ...)
我并不是说有什么不好,只是他们大多数时候没能教给你正确的概念。
主流语言大多数时候都是顺便把旧概念推为新概念。
例如,现在在 PHP 中你有闭包(实际上有 lambda 但...),在 C# 中也有...
闭包/lambda 是 LISP 中一个非常古老的概念,可以追溯到 60 年代。
因此,要保持警惕,并始终尝试真正找出所有事物的来源。这很困难,但你做得越多,你的头脑就会变得越敏锐,就像事实上的许多其他事情一样:)。
I would like to warn you about all that has been said.
More precisely about mainstream language.
Learning "mainstream" language is not always the good way.
By mainstream I mean (Java, C#, C++, PHP ...)
I don't mean that there a bad, it just that they most of the time failed to teach you concept right.
Mainstream language most of the time are incidentally taking old concept and promote them as new.
For example now in PHP you have closure(actually there are lambda but ...), in C# too...
Closure/lambda are a very old concept from LISP, back in the 60's.
So be in alert and alway try to really found out were all things come from. This is difficult but the more you do it the more the sharper you mind will be, like many other things in fact :).