Live data from Hacker News

Coding Skill and the Decline of Stagnation

notch.tumblr.com

71–80 of 206 posts

Re: Coding Skill and the Decline of Stagnation

#71

Does 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…

"Does anybody know if Notch is self taught? I thought he had a CS Degree from somewhere?"

The two are not mutually exclusive.

I was talking with a friend recently who's working on her Ph.D, observing that everyone who thought I was so smart in college is now better educated, officially, than me. She was like "You're basically self-taught, but with a piece of paper that says you were willing to stick around in college for 4 years. Even in college you were self-taught."

One of my teammates at work recently said I should become a professor. I was like "Don't I need a Ph.D for that?" All my other teammates were like "Naw, man, visiting lecturer!"

If you're actually self-taught, you can treat formal education options as a menu that you might or might not choose to sample, depending on your goals at the moment. You don't have to define yourself as one or the other.

Re: Coding Skill and the Decline of Stagnation

#72
post #58
post #36

Earlier quoted context omitted.

Well 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?

I 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 ju…

They probably didn't mean that they "know everything there is to know" unless they are very arrogant.

Perhaps they meant that they knew the syntax to at least one programming language and where at a point where they felt it would be easy to learn more if needed but they no longer felt the need to study it as an end in itself for their purposes.

having said that it's easy to overestimate your level of knowledge when you haven't been introduced to anything more difficult.

You may believe for example that you can easily solve say traveling salesman because you figured out how to write the naive n! solution and tested it with 5 nodes on a fast computer and it worked fine. If you never have to test it with 1000+ nodes then you may never find the performance inadequate so will never have to open the dynamic programming rabbit hole.

Re: Coding Skill and the Decline of Stagnation

#73
post #57

Earlier quoted context omitted.

Does anybody know if Notch is self taught? I thought he had a CS Degree from somewhere? I can't say with any degree of authority, but based on what I've read of his code, I'd guess he's self-taught. My bigoted preconception is that when it comes to abstraction in code, people with CS degrees err on the side of doing too much, creating extremely elaborate object frameworks that close down options as much as they help…

I think that's because university teaches abstractions and pretty much nothing else. A project that is done in the average CS class will be presented as a way to teach a design pattern rather than teaching how to solve a problem. Also the marking scheme will tend to favour a broken solution that is an attempt at an elegant abstraction rather than a more basic abstraction that is well tested and works. There is a cert…

Your assumption that self taught programmers (ie one that did not get a "formal" education) do not understand fundamentals is utter bullshit. You could reverse your statements and they both still work. I've worked with people that have a masters in CS and in general it matters about 1% of the time.

A programmer today has a wealth of information they can pull from that does not require a single ounce of formal education. It takes dedication to the craft not bucket loads of money.

Re: Coding Skill and the Decline of Stagnation

#74
post #64

Earlier quoted context omitted.

I think that's because university teaches abstractions and pretty much nothing else. A project that is done in the average CS class will be presented as a way to teach a design pattern rather than teaching how to solve a problem. Also the marking scheme will tend to favour a broken solution that is an attempt at an elegant abstraction rather than a more basic abstraction that is well tested and works. There is a cert…

> I think that's because university teaches abstractions and pretty much nothing else. Maybe my CS degree was unique (I don't think it was), but at the 400 level we had specialization choices including security, graphics, web development, databases, operating systems, embedded, software engineering, etc. > A project that is done in the average CS class will be presented as a way to teach a design pattern rather than…

That's not quite what I meant, most CS classes cover many other things than design patterns.

The problem is more that in an undergrad degree you are unlikely to need to do any large scale (by industry standards) project. So the way that they teach you good design is largely forced and the most academic way to do that is through a "design patterns" type class where the project that you are building is small enough not to require design patterns in the first place.

This will then educate people that you should really always look for patterns to apply and ways to abstract things since you will be artificially marked up at college for building abstractions and will look for them in every problem you have.

On the other hand someone who is more taught by experience will start by writing awful code like putting their whole program into 1 or 2 functions , they will then experience pain points because of this and realise certain re-occuring problems and either come up with their own solutions to them or read "gang of 4" , this will teach them design patterns the natural way.

Re: Coding Skill and the Decline of Stagnation

#75
post #57

Earlier quoted context omitted.

Does anybody know if Notch is self taught? I thought he had a CS Degree from somewhere? I can't say with any degree of authority, but based on what I've read of his code, I'd guess he's self-taught. My bigoted preconception is that when it comes to abstraction in code, people with CS degrees err on the side of doing too much, creating extremely elaborate object frameworks that close down options as much as they help…

> My bigoted preconception [...] Well, I would have called you on this, but I guess I don't have to. > The abstraction is just barely enough to get the job done [...] Or, in other words, the perfect amount...

[deleted]

Re: Coding Skill and the Decline of Stagnation

#76
post #53

Does 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…

I have similar issues. For most of my adult life I've had so many interests that it is just impossible to keep up with all of them to the level I want. Even within computing as a field I am overloaded. I read a lot of stuff on HN and elsewhere I find interesting and I agree that it makes me feel like I should understand it all. First time I've came to that realization. My current solution to the problem of overwhelmi…

Your other option is to become a consultant, if you can stand it. This is meant both seriously and as a joke.

Re: Coding Skill and the Decline of Stagnation

#77
post #57

Earlier quoted context omitted.

Does anybody know if Notch is self taught? I thought he had a CS Degree from somewhere? I can't say with any degree of authority, but based on what I've read of his code, I'd guess he's self-taught. My bigoted preconception is that when it comes to abstraction in code, people with CS degrees err on the side of doing too much, creating extremely elaborate object frameworks that close down options as much as they help…

> My bigoted preconception [...] Well, I would have called you on this, but I guess I don't have to. > The abstraction is just barely enough to get the job done [...] Or, in other words, the perfect amount...

[deleted]

Re: Coding Skill and the Decline of Stagnation

#78
post #13

Earlier quoted context omitted.

Controversial 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 a…

I 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.

C# allows it but but Java doesn't have this. Hence why it's standard operating procedure to just use setters from the beginning, because it might be nontrivial to update all references.

Re: Coding Skill and the Decline of Stagnation

#79
post #38

Earlier quoted context omitted.

Oh, and for good measure--everytime you force yourself to use an accessor, you are providing the opportunity for somebody down the line to add debug and validation code. Or to add locking and critical sections. Or replace a dumb get and recalculation with caching. Or replace caching with a dumb get. Or a database access. This flexibility is not something you might think you need. You might also never need to debug yo…

> Oh, and for good measure--everytime you force yourself to use an accessor, you are providing the opportunity for somebody down the line to add debug and validation code. So add it then . Don't pre-generalize everything just in case.

Except there are cases where it will be way more pain later and no perceptible loss ahead of time. Imagine you are debugging something and you want to know where your public variable is getting set to 3. If you are using java and public members you will have to check every single call site, whereas if you have a setter you can just add a single if(x==3){} and put a breakpoint in there and you have done in 30 seconds what would have taken 30+ minutes.

Re: Coding Skill and the Decline of Stagnation

#80
post #59

Earlier quoted context omitted.

The problem is when those getters and setters have other effects (maybe invalidating a cache?). In Java, it's considered best to just go ahead and add the getters and setters first, so that when you need to add these side effects later you don't have to modify lots of code using your library (if that is even possible). Languages like Python make this unnecessary since they have first class properties: # Old class Foo…

"In Java, it's considered best to just go ahead and add the getters and setters first" I don't think this is true. I'll concede that it may be a requirement for certain things like an ORM API, but in the general case, it's bad practice. The mere act of adding a getter violates immutability.

All of your objects are immutable? Besides that's hardly an argument for having public members, being able to remove the setter or getter (or conditionally throw exceptions in them) is one of the exact reasons why you write them.

The intent of the comment you are replying to "best practice is if you would add a public member, instead add a private member and a setter & getter" which is generally correct.

Post reply on HN