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.

Mastering Programming: An Outline

562 pointsby KentBeckalmost 9 years ago

28 comments

keylealmost 9 years ago
Sadly just an outline but I didn&#x27;t mind that. Good read.<p>I&#x27;d add a few things I&#x27;ve noticed over the years. Great developers like to pair program on tricky stuff, because they always learn something. They will try 2 different implementations if they&#x27;re not sure which is best, and then the right one will then be obvious. They back their arguments with real world proofs. They try most fringe&#x2F;new technology, even if it&#x27;s not right for the current project. They hold large amount of domain knowledge in their heads. They admit when something is twisting their brains, draw it on paper, talk about it and then bang it out. They fantasize about what-ifs, in a perfect world, scenarios. And they love to share knowledge.
评论 #11860177 未加载
评论 #11859900 未加载
0mbrealmost 9 years ago
Something that is helping me a lot recently is trying to know all there is to be known about the tools&#x2F;concept that I am using and the problem that I am solving. Too often have I used tools I half understood to solve problem that I didn&#x27;t define clearly enough.
评论 #11860689 未加载
评论 #11860294 未加载
评论 #11935095 未加载
评论 #11863883 未加载
评论 #11863885 未加载
评论 #11935096 未加载
bcbrownalmost 9 years ago
&gt; Call your shot. Before you run code, predict out loud exactly what will happen.<p>That&#x27;s probably my favorite bit of advice. It really helps with understanding how much your assumptions diverge from reality.
评论 #11859831 未加载
评论 #11859151 未加载
评论 #11861779 未加载
评论 #11866094 未加载
评论 #11860584 未加载
评论 #11875464 未加载
评论 #11859764 未加载
shadesofalmost 9 years ago
&gt; When faced with a hard change, first make it easy (warning, this may be hard), then make the easy change.<p>This is my favorite bit. Katrina Owen mentions this in her talk on refactoring. &quot;Make the change easy; then make the easy change.&quot;<p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=59YClXmkCVM" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=59YClXmkCVM</a>
评论 #11860193 未加载
elliotecalmost 9 years ago
I&#x27;d like to see this fleshed out more with examples, because I don&#x27;t really know what some of these mean.
评论 #11860898 未加载
KentBeckalmost 9 years ago
I updated the description of 80&#x2F;15&#x2F;5, a career risk management strategy.
评论 #11859992 未加载
评论 #11861344 未加载
评论 #11860145 未加载
sleepychualmost 9 years ago
My top piece of advice: Programs behave predictably, when something impossible is happening it&#x27;s because one of your assumptions is wrong. When that happens you&#x27;ll find the bug the moment you start testing your full set of assumptions.<p>For some reason, even though this is invariably true, my friends at school didn&#x27;t appreciate &quot;I can&#x27;t understand why I&#x27;m seeing this weird behaviour&quot;, &quot;One of your assumptions is wrong!&quot; xD
评论 #11861265 未加载
评论 #11861011 未加载
jasimalmost 9 years ago
These are attributes that everyone can, on honest personal judgement, can mistake to possessing themselves to varying degrees. But it might be a useful list to read through when stuck at a problem that is simply not giving way.<p>Unless we have the chance to learn from and be coached directly by a master, what would be helpful is narratives on how they think and solve problems.<p>The best I have so far come across in a book is &quot;Coders At Work&quot;. <a href="https:&#x2F;&#x2F;github.com&#x2F;aosabook&#x2F;500lines" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;aosabook&#x2F;500lines</a> promises to be another. Rich Hickey did great service by talking pragmatically about the meta aspects of programming through Hammock Driven Development and Simple is not Easy. Dijkstra&#x27;s and Alan Perlis&#x27; writing that has been gaining a resurgence in popularity is also of a similar ilk. <a href="http:&#x2F;&#x2F;damienkatz.net&#x2F;2005&#x2F;01&#x2F;formula-engine-rewrite.html" rel="nofollow">http:&#x2F;&#x2F;damienkatz.net&#x2F;2005&#x2F;01&#x2F;formula-engine-rewrite.html</a> also is an intriguing story.
sigillalmost 9 years ago
The article makes a number of good points. The first three points in the &quot;Learning&quot; section resonated very well with me.<p>Then there&#x27;s stuff I just don&#x27;t understand. For example:<p>&gt; Multiple scales. Move between scales freely. Maybe this is a design problem, not a testing problem. Maybe it is a people problem, not a technology problem [cheating, this is always true].<p>What does he mean by scales?
评论 #11860288 未加载
评论 #11860316 未加载
quincylaalmost 9 years ago
There is wisdom behind these bullet points. This wisdom could be better communicated through a series of fleshed-out articles with real life examples.<p>Otherwise, these points are difficult to contextualize, retain, and apply.
评论 #11860220 未加载
arekkasalmost 9 years ago
After reading that, I don&#x27;t feel a bit smarter then before. That&#x27;s usually how it goes when you make a bold, universal statement about something and put it into 10 lines of text.<p>I aknowledge what Kent Beck has done and what facebook is doing but this doesn&#x27;t deserve to be on HN front page.
评论 #11863517 未加载
kevindeasisalmost 9 years ago
(゚ヮ゚) Anyone else knows other paths&#x2F;checklist from beginner programmer to expert&#x2F;senior programmer in different domains (front-end,back-end, dev-ops&#x2F;sysadmin, android, ios, system programming, gaming, 3d, image, video) ?
aryehofalmost 9 years ago
I also think it important to understand the nature of the environment your problem is in, because it so much flavors the approach and the solution.<p>If in computer and data science, emphasis is on algorithms, data structures and ADTs. But if in business, commerce and industry it&#x27;s the representation of complex domain concepts, real and abstract, and their interactions that are key.<p>In some ways there is a fundamental divide between the two. While the ops advice is valuable, for me an understanding of where and how to apply techniques across that divide is one of the biggest impediments to &quot;mastering programming&quot;.
makuchakualmost 9 years ago
I just noticed, this note is being served by www.prod.facebook.com? Note : &quot;.prod.facebook&quot;
评论 #11860747 未加载
评论 #11860001 未加载
gavinpcalmost 9 years ago
&quot;Good design is about taking things apart.&quot; --Rich Hickey<p>I think that statement captures several of these. He says it in the context of methodology and &quot;architectural agility&quot; in a great talk called &quot;Simplicity Matters.&quot; [0]<p>[0] <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=rI8tNMsozo0&amp;t=9m49s" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=rI8tNMsozo0&amp;t=9m49s</a>
JayHostalmost 9 years ago
&quot;Move fast and break stuff abstract stuff and build quick Move Fast With Stable Infra&quot;<p>How about just put in the work and learn the hard way?
minusSevenalmost 9 years ago
&gt;Rhythm. Waiting until the right moment preserves energy and avoids clutter. Act with intensity when the time comes to act.<p>What does this mean ?
评论 #11877395 未加载
评论 #11864968 未加载
hcarvalhoalvesalmost 9 years ago
This is a great summary. One could change the title to &quot;Mastering Problem Solving&quot; and it would be just as true.
mathattackalmost 9 years ago
Great outline. Given the source I would like to see it taken down a level of detail in the future.
caseymarquisalmost 9 years ago
It&#x27;d be interesting to compare this to &quot;Ask HN: Habits of the master programmer?&quot;
评论 #11863467 未加载
raartsalmost 9 years ago
Old German proverb: In der Beschränkung zeigt sich erst der Meister.
评论 #11860961 未加载
MciprianMalmost 9 years ago
Why prod.facebook.com?
jonduboisalmost 9 years ago
This article should be called &#x27;Mastering large-scale team programming&#x27;. In reality there is no single correct approach to programming. All programmers&#x2F;engineers&#x2F;developers have different specializations.<p>Some developers are really good at getting an MVP out the door quickly but their code may not quite work at scale. Others are good at working in large teams on large projects, others work better alone or in small teams. These different types will produce different types of code - the utility value of various programming habbits changes based on team size, project size and urgency requirements.<p>There could be some &#x27;Master MVP programmers&#x27; and &#x27;Master team-player programmers&#x27;, &#x27;Master large-project programmers&#x27;... You can rarely put them all under a single label - As developers we tend to get stuck with particular styles depending on which kinds of companies we have worked for.<p>It is not quite correct to assume that because a company is financially successful and handles many millions of users, that its methodologies are the only correct way to do things.<p>Programming is an adaptive skill and should change based on economic&#x2F;scale requirements.
评论 #11860474 未加载
评论 #11860953 未加载
评论 #11861433 未加载
评论 #11860890 未加载
评论 #11861510 未加载
yoyo_ioalmost 9 years ago
www.prod.facebook.com<p>That&#x27;s new to me.
评论 #11864915 未加载
partycoderalmost 9 years ago
While the author is known (technical coach at Facebook, creator of XP software methodology), I sort of disagree.<p>You can follow this guide and still be a low value programmer. This guide won&#x27;t take you to mastery level.<p>And, there is also a sense of irresponsibility around one item: &quot;easy changes&quot;. Easy changes as in, duct tape programming? That&#x27;s pretty much turning your project into a Jenga tower... you add your &quot;easy change&quot;, that incurs technical debt, fix a problem... but lower productivity for following changes. Also sets a bad example for other people to follow.
评论 #11860647 未加载
评论 #11860232 未加载
sklogicalmost 9 years ago
Despite hating anything XP, I can strongly relate to this one:<p>&gt; When faced with a hard change, first make it easy (warning, this may be hard), then make the easy change.<p>It aligns well with my natural process: for any problem, spend most time designing and implementing a DSL for it, and then solve it trivially in this DSL.
Teebooalmost 9 years ago
What? Seriously, what?<p>What argument are you making here? Boxing &#x2F; Ali was an analogy to demonstrate the widespread respect of the engineering community that KB has earned.<p>&#x2F;awkward<p>To be clear; my post was not about you being boxer.<p>&#x2F;awkwardoff
评论 #11863159 未加载
评论 #11861303 未加载
Teebooalmost 9 years ago
EDIT: Just reviewed your Twitter. It&#x27;s 2000 tweets of snark and criticism of everything you come across - GoT, other coders, Agile, politics. I doubt we will get anywhere constructive on this thread but my original post remains below.<p>Original post &gt;&gt;<p>&quot;Doesn&#x27;t give him the chops or credibility to tell others how to program or solve problems.&quot;<p>...that cannot be serious. Am actually smiling at that. Also laughing at the idea that modern coders think they have nothing to learn from Grady Booch.<p>Plinkplonk you are absolutely someone I would never want on my team or contributing to a product I was involved in. Aggressive, combative and dismissive of the precedents that laid the foundations for modern software engineering. You need to mature (my opinion). Your post has not painted you in a flattering light.<p>But feel free to prove me wrong - in your eyes what DOES give someone the chops to support others with engineering advice? What do they need to have accomplished?
评论 #11863093 未加载
评论 #11861072 未加载