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.

How to improve your programming skills

232 pointsby antoartsalmost 14 years ago

28 comments

edw519almost 14 years ago
11. Rewrite something that desperately needs to be rewritten.<p>So many times I've encountered something and thought, "I can't believe that people are actually expected to use this software."<p>It was bad from a user perspective: difficult to use, slow, tedious to do what you actually needed to do, unable to "get there from here".<p>Then once I looked under the hood, it was often worse: built upon a horribly designed data structure, inflexible with constants where there should have been parameters, no apparent thought put into its use, too many violations of acceptable practice to mention, looking as if it evolved haphazardly (which it probably did).<p>It's easy to bitch about stuff like this, but you often have to go to the next level to <i>do something about it</i>. It's amazing how much rethinking you have to do and how many tools you have to build to turn horrible software into what should have "obviously" been done in the first place.<p>Easier said than done. And often, some of my best learning experiences.
评论 #2714574 未加载
评论 #2717315 未加载
DavidMcLaughlinalmost 14 years ago
"Learn a new programming language"<p>I would rephrase this to learn a new programming <i>paradigm</i>. There are fundamental differences between static typing and dynamic typing, object orientation and functional, manual memory management and garbage collection. There are also "pure" single-paradigm languages and multi-paradigm languages. If you learn the same type of language multiple times, you're really just learning new syntax and probably a couple of extra idiosyncrasies, so it's important that you pick languages with fundamental differences.<p>Compare going through this learning path:<p>Perl -&#62; PHP -&#62; JavaScript -&#62; Python -&#62; Ruby -&#62; Node.js<p>To going through this:<p>Java -&#62; C -&#62; Scheme -&#62; JavaScript -&#62; Erlang<p>For example.
评论 #2714600 未加载
评论 #2714145 未加载
评论 #2714135 未加载
peteretepalmost 14 years ago
Learning Javascript changed my Perl for the ... more fun to write. Possibly better, too. I've started passing around coderefs as arguments to functions a lot more recently, and allowing people who use my APIs to do just that...<p>I've been writing code that allows you to describe a website in data and at a high level recently, and builds you up all the methods you need to interact with it. In general, when people need to provide parameters, I also let them pass in coderefs that can be executed to provide those eg:<p><pre><code> my $name = ref($args{'form_name'}) eq 'CODE' ? $args{'form_name'}-&#62;( $self, @user_options ) : $args{'form_name'}; my $form = $self-&#62;mech-&#62;form_name( $name );</code></pre>
评论 #2713954 未加载
评论 #2714053 未加载
评论 #2715407 未加载
评论 #2729222 未加载
peteretepalmost 14 years ago
Also, randomly: I started putting bug bounties on my code on CPAN:<p><a href="http://search.cpan.org/~sargie/Data-Google-Visualization-DataTable-0.08/lib/Data/Google/Visualization/DataTable.pm#BUG_BOUNTY" rel="nofollow">http://search.cpan.org/~sargie/Data-Google-Visualization-Dat...</a><p>This made me more conscientious about what I release ;-)
评论 #2713948 未加载
JesseAldridgealmost 14 years ago
&#62; 10. Don’t rush to StackOverflow. Think!<p>Disagree with this one. My rule is, "If you get stuck for more than 10 minutes, post to StackOverflow." I'll post my question then continue trying to solve it myself. Sometimes someone will post a good answer right away, saving me lots of time. Other times I'll end up solving my problem on my own, but I'll still learn something valuable from a comment or answer somebody posts to my question. Here's a good example of what I'm talking about:<p><a href="http://stackoverflow.com/questions/6327396/set-time-part-of-datetime-in-ruby" rel="nofollow">http://stackoverflow.com/questions/6327396/set-time-part-of-...</a>
评论 #2719064 未加载
评论 #2716739 未加载
评论 #2717211 未加载
评论 #2715932 未加载
synnikalmost 14 years ago
11. Learn how the entire stack works. I see way too many people coding around problems that could be solved at the server level, the network layer, etc.
stephen_drydenalmost 14 years ago
Really good article, I agree with every point.<p>If I were to add to it I stress the importance of reading books by different authors and publishers, even if they're about the same subject. This helps you get a much wider, well-rounded view and it often improves the learning experience.
评论 #2714690 未加载
评论 #2713770 未加载
Androsynthalmost 14 years ago
-Build something that is bigger/more complex than your current skill level.<p>This will not only improve your skills in general, but learning from the mistakes you make is probably the best way to grow as a programmer.
评论 #2714904 未加载
highacealmost 14 years ago
+1 for don't rush to StackOverflow!<p>You don't get better if you don't tax your brain a little, much like how you don't get stronger if you use a winch or wheelbarrow to carry a load instead of carrying it yourself.
评论 #2713893 未加载
kenjacksonalmost 14 years ago
While people recommend reading code, like the Linux sources, I also find more code focused sites like Code Project (www.codeproject.com) very useful. These aren't blogs like Coding Horror, which are more "philosophy". These articles on Code Project typically are explaining code in detail.
zwentzalmost 14 years ago
I find that trying to ask my question at StackOverflow is the best way to improve. Because I have to think about how best to word my problem, and really make it clear and concise. And usually when I do that, I end up just solving the problem on my own.<p>Of course, I see a lot of give me teh codez there, so I can see where the author is coming from. Nevertheless, I find it to be a useful tool in helping me become a better programmer.
评论 #2714249 未加载
评论 #2714227 未加载
pherefordalmost 14 years ago
I got a "Database Connection Error" (I am sure your server got hit hard with being top 5 on HN). :) The irony makes me giddy.
评论 #2714043 未加载
评论 #2713980 未加载
joecasperalmost 14 years ago
Really good article. Another way to improve your programming skills would be to teach someone else. I find this to be one of the best ways to solidify your understanding of something.
bajsejohannesalmost 14 years ago
The article suggest reading code, which I agree is a good way to improve programming skills. But I'm a bit unsure what to do with the advice to read the linux source code. Where would you start? I find the only way to actually get to reading code, is if you have a need to understand some part of it (e.g. to fix a bug or add a feature).<p>So perhaps a more actionable proposal is to try to fix a bug, preferably one you care about, in some open source project.
评论 #2713937 未加载
antoartsalmost 14 years ago
For those of you who get a database error, I think it is the huge amount of traffic I'm getting at the moment which causes this (&#62;1000 visits last hour). I'm using shared hosting, which might have problems with this, so in one way, you are DDOSing my site ;-). I don't know if it is safe to tell you to just wait and reload the page, but do that, BUT NOT TOO FAST!
评论 #2714501 未加载
nu2ycombinatoralmost 14 years ago
What I observe so far is people who learn all kind of programming languages will become very good programmers. And one who see language as a tool to solve problem and applies it smartly will become millionaire providing food for remaining good programmers.
blaaahalmost 14 years ago
But how does one get ideas for a project? I started learning programming using C++ about 5 months ago. I've been making good progress on learning the concepts but I just can't think of anything useful to create.
评论 #2715601 未加载
isomorphalmost 14 years ago
I like how "Program" is all the way down at number 5
lhnzalmost 14 years ago
1. Learn paradigms, kinds of problems and computer science fundamentals.<p>2. Work on poorly-run large projects with (a) performance problems or (b) code organisation problems.<p>3. Work on other projects with developers that use (1) to solve the problems of (2). You'll be surprised how quickly you learn when you've seen the benefits to be had by doing things better... ;)
shiialmost 14 years ago
Reading and trying to work with the Linux kernel source is hardly a good way to get better programming skills. It's really large and hard to understand. Something like Minix, MenuetOS, or LoseThos is a much better alternative to hack on. LoseThos particularly reminds me of old school hackable boxes like the Commodore64.
pmr_almost 14 years ago
All of the advice given here is good and none of the tips here are going to hurt you.<p>It's just another less abstract reiteration of a few truths that encompass much more than programming.<p>Work with different tools. Think. Talk about what you do with other people. Do all of it a lot.
评论 #2733559 未加载
antoartsalmost 14 years ago
I hope that I fixed the problem now by installing a plugin (QuickCache) which caches pages and serves a normal, static HTML page when possible instead of generating a new dynamically from the PHP scripts each time. I <i>hope</i>.
kvgralmost 14 years ago
8. is very important. Once you decide to write article, you got to have solid knowledge about the topic. You just can't write the code and see if it works :) you got to know why and how!
Morendilalmost 14 years ago
This is severely biased toward things that require no in-person interaction.<p>So I'll add two:<p>0. talk to other programmers 11. attend a Coding Dojo
jrockwayalmost 14 years ago
One way to improve your programming skills: stop reading programming blogs and start programming.
评论 #2733547 未加载
coreyhainesalmost 14 years ago
Also, spend time doing focused practices. Attend a coderetreat (www.coderetreat.com)
atarantoalmost 14 years ago
1. Find something that you can't do. 2. Do it. 3. Repeat.
knownalmost 14 years ago
Debug other people's code.