TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Codeacademy for competent programmers?

51 pointsby eluosover 12 years ago
Where can a good programmer learn to be a great programmer? How does one go from a builder to a polyglot expert in design patterns, someone who makes beautiful, modular, maintainable code? A coder's coder.

16 comments

nostrademonsover 12 years ago
Work with other great programmers. When you outgrow your current company, move to a better one. When you outgrow your current team, move to a better one.<p>(BTW, "beautiful, modular, maintainable code" is <i>one</i> skillset necessary to be a great programmer, and a relatively minor one at that. Much more important is knowing <i>when</i> to write beautiful, modular, maintainable code, and when to bang out a piece of shit that nobody will ever want to look at again, but will quickly prove or disprove a hypothesis and let you know whether an idea is worth pursuing.)
评论 #4434967 未加载
adolfopaover 12 years ago
While this is nothing new (it has been said a thousand times by now) you'll have to:<p>1. Read a ton of (good) books: this will expose you to new (and old) ideas and techniques.<p>2. Read a lot of code: this will expose you to good, bad and awful code. As you suffer other people's bad ideas, you'll learn to recognize and avoid them.<p>3. Practice, practice, practice.<p>About the #1 point, it's very important to read not only fashionable books or things related to your immediate work. Try to be broad: read the classics, even if their ideas seem outdated to you. Read about the history of the field and the old programming languages and systems (you'll notice that things haven't changed that much).<p>Also, try to learn a couple of languages that are really different from each other. If you know Java, learning C# won't give you anything. Good languages to expand your mind are: Racket/Scheme/CommonLisp/Clojure (DSLs, metaprogramming, FP, OO, almost anything ...), Haskell/Scala/ML ("real" static typing and FP), Smalltalk (like Java but fun!), Factor/Forth ...; explore a couple of them and pick the ones that make you feel "weird": those are the ones you'll learn interesting things from.<p>And don't rush: becoming a good programmer will take your whole life; but it's fun and extremely rewarding.
评论 #4435051 未加载
exDM69over 12 years ago
Quite simple: write more code. Go outside your comfort zone and do a project that is unlike anything you've done before. Write an interpreter or a compiler or an operating system skeleton or something else you've never done before.<p>And if you don't come up with an interesting learning project, you can always learn new programming languages. I've found that the best learning experiences have been the languages that least resemble what I use daily. I'm a C programmer but for learning purposes I recommend learning a Lisp, ML or Haskell and Prolog. An alternative to Prolog is going through the logic programming chapter of SICP and writing your own Lisp-based logic programming language and having fun with that (I actually used Haskell + Parsec to implement a logic language).
abecedariusover 12 years ago
Just one resource, but Peter Norvig's course <a href="http://www.udacity.com/view#Course/cs212" rel="nofollow">http://www.udacity.com/view#Course/cs212</a> aims at this sort of thing. (I helped a bit in preparing it.)
aniketpantover 12 years ago
This is one of the worst kind of questions one can come up with.<p>It's absolutely impossible to turn an average coder into a great coder. Because the things about code you mention in the question -<p>1. Beautiful 2. Modular 3. Modular 4. Maintainable<p>All of the four things above do not come by direct learning. They come with experience and a <i>lot</i> of practice.<p>I agree with the fact that you can make a platform to provide the user with questions that will challenge him but still there will be a part where you will give him some hints. And that will just spoil the entire working.
评论 #4434767 未加载
评论 #4434864 未加载
SudarshanPover 12 years ago
github. Write code that others would love to clone ;-). Fork other projects and improve them to grok awesome ideas and practices. OSS in general not just github...
评论 #4434670 未加载
评论 #4434760 未加载
Jemmover 12 years ago
I love that not one comment mentioned post graduate university as an option.
评论 #4435705 未加载
geofftover 12 years ago
Find some good-quality open-source project and get involved in it.<p>This has two benefits, and the primary one is that it gets you _reading_ good code. The second benefit is that, if the project is any quality, it forces you to write good code, both because of the project's standards and because the software is well-designed enough that the easiest thing to do is to make new features match that good design.
gershover 12 years ago
Read good code, and think about how they've done it. Read all the major open source projects. Really try to understand how different people organize different types of projects. Learn different programming languages, and learn how to code in different styles.
评论 #4434759 未加载
ludicastover 12 years ago
As far as online stuff goes, I can't recommend codeschool enough. Really kicking myself that I didn't contribute to their IOS Kickstarter (good excuse - I planned to yesterday but I forgot I was having surgery :)).<p>You really would do well to subscribe, bang through their javascript/coffeescript/git stuff and if rails/ruby intrigues you stay a while. Otherwise cancel your subscription (they are very rails-centric so there will be a continued focus on that I believe) and just go forth from there.<p>Not to throw conspiracies out there, but I think they are suspiciously un-emphasized here a lot because they are competitors of codecademy with a better product...
评论 #4449689 未加载
TheMillerover 12 years ago
Lots of ways to learn. Aside from what others have already mentioned, work on a lot of existing code. This can be others' code, or code you wrote yourself months or years ago. Whether you're fixing a bug, or adding an enhancement, or just trying to clean it up and make it better, stop and ask yourself occasionally: What made this difficult to understand or modify? How could it have been organized better? The other sources (books, courses, etc.) provide starting points for answering those questions but you need to apply that knowledge to real code, to test it and learn where it does and does not apply.
ozneover 12 years ago
I think you should pick a technology you want to learn, get a book or two, and create actual solutions using those technology's.<p><a href="http://www.safaribooksonline.com/" rel="nofollow">http://www.safaribooksonline.com/</a> This site is awesome for computing information, its about $10 per month and you can read 5 books per month. Books in general give you a more comprehensive understanding of the subject.<p>Amazon top sellers lists for programming category's are also worth looking at:<p><a href="http://goo.gl/L0lZ3" rel="nofollow">http://goo.gl/L0lZ3</a> <a href="http://goo.gl/ptZCN" rel="nofollow">http://goo.gl/ptZCN</a>
douglascalhounover 12 years ago
I'll throw in another one: screencasts.<p>Peep Code, Destroy All Software, Railscasts... It's like watching over the shoulders of some of the best programmers in the world as they teach you everything they know.
redsquirrelover 12 years ago
My advice to a good programmer who wants to be great is to spend as much time with great programmers as possible. Consider an apprenticeship program, or create your own apprenticeship with mentors, conferences, tons of practice, and tons of reading. If you're already good, everything you need to be great is accessible and cheap, you simply need to focus your efforts and work hard at learning to be great.
kellrosover 12 years ago
Practice!
davidjnelsonover 12 years ago
Write failing tests first. You will be amazed by the quality and lean nature of the code you create to make the tests pass.