Hacker News new | ask | show | jobs
by dreamygeek 3019 days ago
10 years is a bit too much don't you think. I mean comparing 24 hours or 21 days with 10 years is highly demotivating. I think 1 year or 6 months would still be an inviting title and it's not that farfetched. I've seen people become good with a programming language in lesser times than a year.
7 comments

I first read this way back when it was first published. I was still studying full time back then. I recall it being one of the things that really motivated me to learn more. It meant that there would always be something new and interesting for me to learn that would make me a better programmer.

~17 years later that has definitely been my experience.

It’s possible to be very productive in a language after 6-12 months. The code might be decent, or with some talent and hard work, even good. It really doesn’t take all that long to learn enough to produce some cool things. However, I’m almost certain that if you look back at the code you write today in 12 months, 5, or 10 years, you’ll see many things you’d do differently. This is partly because In 10 years you will see many more problems, and solved them in many different ways. Personally, that’s one of the things I really love about this field.

I view programming similar to carpentry or metalwork. You can't really sit down and learn metalwork in 24 hours.

24 hours is not even how long I had to file a metal block until I was deemed ready to use heavy machinery during secondary school. I filed it for 3 weeks, 5 days a week, 9 to 5.

21 days is not enough to master metalwork, even though I was allowed to use heavy machinery, I borked up more than one piece until I eventually got it right at the end of the school year (which was about 6 months of metalwork).

And I think I am still way of from mastering it, not that I want to.

Programming is, IMO very similar. Sure, you can get a hammer and start hammering on a metal sheet and that'll probably produce something in the right shape. But learning to program, mastering it, takes time, 10 years is IMO a good estimate. I've been at it for 8 years now and I still got very much to learn.

Of course people can become good with a programming language, just like you can get good at filing a metal block in 3 weeks. But it doesn't mean you've mastered all the tools yet.

Perhaps we should stop trying to claim we do science or engineering and call it a craft

[0]: https://en.wikipedia.org/wiki/Software_craftsmanship

[1]: http://manifesto.softwarecraftsmanship.org

Well, there are definitely distinctions to be made, as in electrical and electronics work — I'm drawing crude lines here —

An Electrician may be a master of his craft, but yet not an Electrical Engineer, who may be a masterful engineer but yet not possessing as deep an understanding as a Physicist, and so on.

That said, the scale tips both ways. A physicist may know why and how an electron behaves a certain way within a material making up a resistor, but not have the practical know-how to use that in an effective way as an engineer might. An engineer might be able to hack together a prototype, but lack the refined master skill and discipline of an electrician to employ the designs and put it into a real world context on a regular basis. It goes without saying that you'll much more rarely see a physicist out in the field laying cable for power distribution in a new train station, etc. There's an old aphorism that leans into this a bit: "the wise things confound the simple, and the simple things confound the wise". I'm abusing that a bit, but still kind of works.

I'm making a gross guess here, but maybe it's that science and engineering, in modern times, hold more of a lofty position and boast greater intellectual capacity traditionally, that so many would not want to be 'reduced' to a craftsman. We might do better to consider them just different aspects of the same whole.

It's probably not too wrong.

Software development unites a lot of things from science, engineering and craftsmanship. I guess we should stop trying to cram it into preexisting categories and take the best parts of each subcategory.

If more programmers would apply scientific method to their craft they’d engineer much better software.
I don't think Norvig is too worried about giving pep rallies.

At any rate: lately I've been having to interact at work with some folks from another company whose entire outlook of what "programming" is revolves around web CRUD stuff and some interactive-looking front-end... web stuff. So "I learned some new programming skills" to them is closer to "I learned how to make an HTML5 caroussel using jquery and Laravel" than "I learned how to calculate road distances using GIS LineStrings and Djikstra's algorithm". Their whole world looks like a CMS. There's a threshold of "meta" they cannot cross.

I think this is both why PHP is so popular and so despised: it attracts people who wouldn't be able to grok concepts at a higher level of abstraction (say, Python @decorators) so they don't need it. PHP -- and really, Laravel, whatever that is -- is all they need.

As a system administrator, I’m regularly amazed by the number of web developers who have little or no understanding of HTTP, the protocol that underlies the bulk of their work. Many don’t know even know what a transport protocol is in the first place. They know that most form submissions (or AJAX requests) should be POST and that some can be GET but they don’t know that these are HTTP methods.

I’ve had to teach quite a few people the basics of HTTP: a user-agent makes a request and a server replies with a response, that both requests and responses are composed of a header and an (optional) body, and some of the important information that might be included in the headers (cookies, character encoding, caching information, etc.).

... also process context / managment / residency / systems level architecture

everything is running synchronously in the current thread on the same machine (or can be roughly abstracted as a single machine where all backend is simply 'invisible')

like a tv.

Learning to program is not mastering a new language. A good programmer can wrap their head around any language in short time but becoming this good programmer in first place will take years.
I totally agree with this assessment.

This is the reason lots of people learning programming try few months of Javascript/Ruby , then they got stuck to solve any real life programming problem. The reason is that they have not mastered the "basic core concepts" of programming such as traversing an Array backwards, nested loops, two indices one activates after another ete..

"but becoming this good programmer in first place will take years."

> Learning to program is not mastering a new language. A good programmer can wrap their head around any language in short time but becoming this good programmer in first place will take years.

Compare to an instrument. When have you "learned" it? When are you okay at it? When are you good. When are you great? When are you a master? How much effort does each step take to achieve? I think a more apt title, and more inline with his content, would be "Master Programming in 10 Years".
This. Saying "It took Mozart ten years to become Mozart" isn't evidence it takes ten years to become a programmer, it's evidence it takes ten years to become Linus.
Becoming "good" with a language is not equivalent to becoming a productive, efficient, or employable developer.
I don't think it's demotivating. If it only took 6 months, I could put off starting for a few months and still be done by the end of the year.