14 ms·
Coding Skill and the Decline of Stagnation
- seanalltogether 15y ago"I had to work on programming more carefully and think things through before diving in, or I’d have a hard time working in a large group." This pretty accurately describes what I went through before joining a larger organization. However sometimes larger companies train you into a mentality of working fast and letting QA sort it out, which isn't always the best thing.
- wvenable 15y agoAfter watching notch code a bit, I'd say that the way he dives in and works has been very successful for him. It's a different style but I don't think it's bad in of itself. I might definitely be bad when working in large groups, but that is not the only way to work. I personally don't think working in a large group is particularly rewarding for a programmer.
- jiggy2011 15y agoIt's easier to "dive in" when it's a short term project that you are working on alone and it's in a problem domain that you are familiar with (in notch's case games programming). I'm at the point know where I can build an E-Commerce site in an MVC framework and implement Client & Admin Logins , Stock management , product search and a shopping cart without having to engage my brain because the structure to me is fairly obvious. On the other hand if I had to design a game I would have to think long and hard about how the different components would fit together and even then I would most likely get it wrong somewhere.
- nardsurfer 15y ago"Point is, SOPA sucks." haha, nice
- bdg 15y agoInstantly made me think of "Carthago delenda est" http://en.wikipedia.org/wiki/Carthago_delenda_est http://en.wikipedia.org/wiki/Carthago_delenda_est
- switz 15y agoI died laughing when I read, "Point is, SOPA sucks."
- djtriptych 15y agoAs did I. Wish more authors rewarded you like that for reading to the end
- sb1752 15y agoHaha that was awesome
- X-Istence 15y agoIt came out of left field, completely unwarranted and unexpected and made me laugh for minutes. My room mates were looking at me funny. Not many people would throw a non-sequitor out there that nonchalantly and have it work so well.
- bbwharris 15y agoThere is no "Gospel" when it comes to programming. There is a lot of code out there that isn't pretty, but it works and brings money into businesses. I think we can all agree that Notch didn't make any mistakes. Minecraft is a huge success. They are called "best practices", not "the only practices". But good for Notch to want to be like everyone else.
- hello_moto 15y agoBest Practices are like patterns, solutions to common problems. Sometime there are problems that require uncommon solution. They are rare, but they exist. I just hope people don't disagree with Best Practices just because they want to show their displease with the authoritative...
- itmag 15y agoBest Practices are like patterns, solutions to common problems. Sometime there are problems that require uncommon solution. They are rare, but they exist. This is very interesting, and mirrors some thought I've been having myself. I would like to see someone create a list of examples of uncommon design patterns, and list cases in which they might be warranted.
- jiggy2011 15y agoI think he wants to improve his design skills , not necessarily "be like everyone else" Just because minecraft is a success does not mean there are not going to be parts of it's codebase that could be improved in such a way that it would improve their ability to iterate and add more features quickly in future.
- bbwharris 15y agoIn my experience adding new features quickly is a loaded term. My guess is that Notch would know exactly how to add new features to Minecraft very quickly. He has intimate knowledge of the codebase. However, asking someone else to do so is where this ability to iterate will be lost. I admire well written code, but a lot of times I see gold plating where is isn't really necessary, because "maybe one day we could add X". You still have to maintain the knowledge of where that easy addition could be plugged in. Code is great, we can just throw parts of it away and refactor it to add new features. Which is possible if you follow best practices. ;)
- jasonallen 15y agoInteresting post. A couple of observations: 1. I think programming is a multi-disciplinary task. Notch is obviously among the best at "writing a lot of working code". He's pointing out that he could improve in software design. I've work with many folks who are obviously strong in one area but weaker in others. 2. I think his coding sloppiness comes through in minecraft: it's an incredible game, but I've stopped playing at times due to frustration with crashes and corruption. ...oh, and 3. My guess is that the "large US based game developer" was Valve.
- hythloday 15y agoJust guesswork, but I'd imagine it was EA, who have a subsidiary (DICE) in Stockholm, where Notch lives. Valve (as far as I know) don't have any Scandinavian subsidiaries.
- jdost 15y agoI think the biggest thing he emphasized is the fact that you can never be "The Best Programmer" because there is always something to learn and ways to grow. That is probably one of the keys to a good developer, they know that there is still plenty for them to learn.
- jgw 15y agoYeah. A couple of times, I've met people who have "dabbled" in programming - maybe done it for a year or two professionally - and said they left the profession because they's pretty much learned everything there was to know about programming. I'm always impressed with their capacity to absorb so much, since I started programming when I was 8 (on a ship, in the middle of the Atlantic, without a computer) and I'm now 37 and estimate I know about 5% of all there is to know about programming (an estimate that continually drops as I learn more). They must be really good. :)
- UK-Al05 15y agoWell it depends. You could probably never stop learning the tools or the new languages; they're continually re-invented. However you can certainly become bored with it; learning new tools and languages becomes a skill in its self. At which you think i've learned a new tool, so what?
- jgw 15y agoI have no beef with someone getting bored of what they're doing, but then they should say just that. To say "I know everything there is to know about programming" after programming for a year is laughable. You're right that if you know C++ and you learn Java, you're not really learning all that much. But if you've spent your entire life programming in those types of language, and then learn Lisp, or Forth, or even just assembly language, your entire mental model of computation is turned on its head. Heck, learning C would be an eye-opener for someone who has known only Java. You can go even further. My own trade is ASIC verification - writing testbenches to test functional correctness of chip designs. I've done a bit of FPGA design, too. I've chatted to software guys far above my humble skill level who don't grok either of those two domains because they're completely foreign to their way of thinking. But I'd file both under the broad umbrella of "programming". I think you can learn constantly for a lot longer than a year or two without learning any new languages or tools, just working on different project, in different domains, using different paradigms. [EDIT:clarification]
- pigs 15y ago"I still stubbornly believe the whole “private members accessed via accessors” thing in java is bullcrap for internal projects. It adds piles of useless boilerplate code for absolutely no gain when you can just right click a field and chose “add setter/getter” if you NEED an accessor in the future." Is this a controversial stance? It seems like common sense, unless I'm misunderstanding something. EDIT: To clarify: I assume he's saying "don't add accessors by default for all private members unless you need to, because you can always go back and add it if you really need it", which is common sense for any project, external or internal. I'm pretty sure he's not saying "don't add accessors, just use public members", which is controversial, IMO, even for internal projects.
- jarrett 15y agoControversial might be too strong a word, but there is a counterargument to be made. Suppose you have a member named "x." Someday, you might want to stop storing x, and instead make it a calculated value. At which point you'll need a method. Or, when setting x, you may someday want to increment a counter, or transform the input data, or take some other action. Again, you'll need a method. Yes, it's very easy to add an accessor later. But then you'll most likely have to edit every line of code that accessed the now-defunct member variable. Your IDE may make this easy, but I'd still prefer not to have to do it. That's not to say writing accessors is always the best choice. I'm just saying there can be good reasons to do it. Like all things in software engineering, there's no one-size-fits-all rule about this. Notch is right about the bloat accessors create, so you have to weight the advantages and disadvantages yourself in each case.
- lclarkmichalek 15y agoA lot of languages have constructs that allow changing an attribute into a method call transparently (@property in python and D)
- jiggy2011 15y agoI think this idea is that you can use "properties" rather than public class variables. Then you can convert your public vars into properties at a later date. This means that you will not have to (necessarily) rewrite your code as the language knows that a = myobj.myvar now should call getmyvar() in the containing class and: myob.myvar = a should call setmyvar(a) , I know that C# certainly allows this.
- jb55 15y agoWhen watching Notch code I noticed a lot of code smelly habits, relying on inheritance over composition is one example. But my god his level of productivity and ability to get shit done is lightyears ahead of your average programmer, and you got to respect that more than anything.
- itmag 15y agoIs Notch's coding habits supposed to be common knowledge? Got any links?
- jiggy2011 15y agohttp://www.twitch.tv/notch/b/302823358 http://www.twitch.tv/notch/b/302823358 This is the start of the 48 hour video showing him building a 2d game for the lundum dare compo.
- jarrettcoggin 15y agoCan you provide any examples? Was it the tools he was using, notes he was making, or diagrams he was drawing? I haven't seen him program, so I'm curious as to what makes him so much more productive.
- kenjackson 15y agoShow me someone who doesn't have code smelly habits and I'll show you a book author or a pedantic blogger -- not a production coder.
- mjwalshe 15y agoAmen Borther "forgive me father I used 5 GOTOs last week"
- InclinedPlane 15y agoHe uses Java, there's only so much stink you can remove from Java code, mostly you just push it around and try to make it as small as possible. Java is still a decent production language for some tasks, but its lack of some basic features and syntactic niceties means you have to hold your nose while coding most of the time.
- whimsy 15y agoI think there's something to be said for starting out with this sort of confidence, especially when you're self-taught. That sort of confidence can provide some incredible motivation. If we realized how much it work it would take to become well and truly good at things like coding, would we start down the path with such fervor? Point is, SOPA sucks.
- bobfunk 15y agoAs a self-taught programmer I started out with completely the opposite level of confidence, and considered myself a really lousy programmer. I always assumed there were all these "real", "professional" programmers out there that really knew what they're doing, pick crystal clear abstractions, had profound knowledge of security implications, database optimization, data structure usage, good use of object orientation, introduced no memory leaks, knew just what algorithm to pick and wrote great, clear and understandable code. I still kinda think I suck, but at least now I know that I'm not alone :)
- jiggy2011 15y agoDoes anybody know if Notch is self taught? I thought he had a CS Degree from somewhere? I can fluctuate between thinking I am a fairly competent developer to thinking that I am possibly the worst programmer there is. I'm not sure which is a better attitude to have, hopefully I am somewhere in the middle. I think the issue with reading some of the discussion on HN is that you get people talking in detail about things like functional programming languages , systems with huge scalability , hardcore math problems and the finer points of memory management in the Linux kernel that you feel it is obvious that you should understand this stuff. I have been trying to do some more book reading to improve, of course the issue is that whenever you read any book recommendation threads of HN there is always at least 30 or so recommendations of some pretty thick books and no chance I'd have time to read them all. There is also a difference between having deep knowledge of the tools and libraries that you are using right now and having a deeper understanding of theory for example learning git vs learning graph theory etc.
- csomar 15y agoThere is much knowledge than you can learn. Try to focus your learning on what help you solve your clients problems. You'll become an expert only in a thing or two, and you'll be able to talk about it like the people here on HN. Also the smart comment writer is not a representative of the average HN visitor/population. There are always people who are expert in their niches.
- jiggy2011 15y agoThis is true, However at some point I want to move my career in a different direction and most of what I learn on the job is industry specific and the industry itself is not something that hugely interests me (although I have not decided for sure what I want to do). So I am trying to learn as much fundamental stuff as possible. The issue is deciding how much one should know about something before you confidently put it on your resume. For example I would say that I am an OK Java programmer but I avoid using enterprise frameworks which are commonly used in many companies so there are many parts of the language which I am not familiar with simply because I have never had cause to use them, for example I do almost all of my persistence using a database and ORM so I almost never have to use Java's concurrency locking features in the wild as I do all my locking in the DB. The same with functional programming, there is no reason to learn it for my job but I get a feeling it will become more important as time moves on so I should know something about it. There is allot of stuff on HN with people saying that everyone should have implemented a toy compiler at somepoint and if you haven't then your not a serious programmer , or perhaps it is a Toy OS etc etc.
- frederico 15y agoloved reading the last comment: point is SOPA sucks.
- jseims 15y agoThere are many dimensions to "how good you are as a programmer". How you approach a 1000 line project is different from a 100,000 line project. The best practices for a good solo developer are different from a team developer. And most importantly, the internal elegance of your code is independent from how useful / cool your product is.
- gambler 15y agoI honestly don't see what about this post is Hacker News worthy. Is it just the fact that the post was written by the Minecraft developer? Or it it the (somewhat questionable) display of humility? It's sort of like posting a long list of your accomplishments and then saying "but I don't consider myself special, and I have much more to learn". If the sentiment was true, you probably wouldn't say it, and almost certainly wouldn't say it this particular way.
- ohashi 15y agoThere is definitely a star power associated with someone like Notch which automatically gets more views. Same goes for a lot of the people you see get submitted here and voted up. Is that the only reason? Probably not, but when someone famous says something it will get a lot more attention than if a nobody says it. Cet par.
- FrankBooth 15y agoIf you aren't interested in a post, don't vote it up and don't comment on it. This type of meta-commentary is not useful. The (as of right now) 161 votes and 99 comments on this post indicate that it certainly is HN worthy to a significant number of people.
- methodin 15y agoReiterates the fact that the more you realize you are a terrible programmer, the better you are. Very awesome of someone with his stature to flat out admit the fact that he has flaws. Kudos!
- noonespecial 15y agoThere are two truths I try to keep in mind whenever I start feeling either extreme: 1. There are people who are so much better at programming than me, that I could work my entire life and never be as good as they are right now. 2. There are people who are so much worse at programming than me, that they could work their entire lives and never be as good as I am right now. Its a continuum, a hill. Feel the gradient, walk uphill.
- stephth 15y agoI empathize with not wanting to become cocky, but I feel like you're lying to yourself. I could see them as truths if we were talking about triathlon, but something intellectual and logical as programming? If you are able to reach the point where you find yourself enjoying programming, then I think there's good chances that it's only a matter of time - and rightly focused effort - until you are able to produce work of any level of quality, including the current level of the best programmer, and beyond. What sort of limitations make you think otherwise?
- SoftwareMaven 15y agoIn my experience, it's the capacity for holding abstraction in mind that determines how far up the hill a person can go. I don't think there is ever a time where you can't move uphill, but the effort required to move increases more the closer you get to saturating that capacity.
- gbog 15y agoI see what you mean. This is about very complex structures and interactions. But in fact, I believe with enough time you can get used to any level complexity and find your way through it. It is a bit like a big city: however complex it is (intertwined roads, subways, highways, etc.), if you live there long enough, you will get a precise mental model. Same with software projects: after some time, abstraction will not be those foreign short lived unstable concretions that you hold in your head and that vanish away if someone says hello. They will be good old friends and the sole invocation of their name will instantly call a lot of solid knowledge to the bar. So in this line, I'd say clever guys are just faster and more agile (maybe both are the same thing). Above a certain level of tolerance to abstract thinking, anyone can understand and work on big complex projects, given enough time. There is another difference between good and great developers, though. It is the "best path-finding skill". For instance, given enough time, I would probably be able to write a Python script solving most sudokus, but I fear I wouldn't find as elegant and straightforward a path as Norvig's. http://norvig.com/sudoku.html http://norvig.com/sudoku.html
- devs1010 15y agoI think that the languages and platforms used shape the way one thinks about programming more than anything and that being exposed to different ecosystems is important. For example, working in a team of experienced developers that uses Java will probably rid one of most "cowboy coder" tendencies and instill a tendency for reflection on architectural patterns, etc, however it can also lead to over-engineering, "architectural astronauts", etc so then going to a more dynamic platform like Ruby on Rails (or at least using their methodologies in projects) helps balance this out. Programming is constantly evolving and it can be hard to figure out which patterns and processes to follow but one thing I feel is important is working in teams as it provides a good way to gauge yourself against others and help expose your own weaknesses.
- losethos 15y agoPrivate member access is intentional due to the unique case of LoseThos' purpose. "Mapping the Commodore 64" was a cherished childhood book. It told what everthing did, including all the zero-page variables. Those are obviously private.
- kenrik 15y agoIf (There will always be someone better or worse than you.) Than { Does it really matter? :Bool } Return: Nope.
- insertnickname 15y agoThen
- chj 15y agoI have a Master Degree in CS but programming mostly is self taught by reading other people's code, good code and ugly code. I know about design patterns only enough to avoid them like shit. It is just easier to hide shit under a shinning cover. There is a saying for writers : "every word tells". My principle is "every line counts". However, this is almost impossible in a team environment, so I still think that best code is one man job.
- nubela 15y ago""" But. I still stubbornly believe the whole “private members accessed via accessors” thing in java is bullcrap for internal projects. It adds piles of useless boilerplate code for absolutely no gain when you can just right click a field and chose “add setter/getter” if you NEED an accessor in the future. """ YES.
- leon_ 15y ago> I am a decent programmer. He's a decent comedian it seems.
- Smudge 15y agoOuch, but probably true for many self-proclaimed "programmers." His success goes to prove that mastery of skill isn't everything.
- richardk 15y agoIt's comforting to see that other people fluctuate between thinking they're awesome and thinking they're awful. Experience has taught me this: Never build your self-esteem on comparison with another And by that I mean, you should never judge your own programming abilities based on other peoples' apparent abilities. If you're programming new stuff regularly, enjoying it and listening to what other programmers have to say, then the chances are you're getting better at it, and that's enough.
- olifante 15y agoI want to agree, but it's hard to fight against ingrained human instincts. The need for social validation is very powerful. I would say instead: If you have to build your self-esteem by comparing to others, do it by looking at what you've created, not what you know.
- alexwolfe 15y agoHave the confidence to know you can do anything. Have the humility to know you can always get better. The moment you believe your the best at anything it becomes very dangerous because you have no reason to improve, your the best. Generally speaking there are very few people that are the best at anything (In fact only one for each thing). Most likely there is plenty of room for growth. I'm glad the author used the negative comment as motivation to get better.