Live data from Hacker News

Teach Yourself Programming in Ten Years (1998)

norvig.com

61–70 of 117 posts

Re: Teach Yourself Programming in Ten Years (1998)

#61
Man, I remember reading this article while I was still getting my bachelors in Mechanical Engineering (a little over 10 years ago) but was tinkering with programming.

Made the switch to software and am now a senior software engineer. Didn’t know then that I would somewhat follow the trajectory outlined here.

Re: Teach Yourself Programming in Ten Years (1998)

#62

The title is a bit misleading to me. 10 years is not to "teach yourself programming," it's to "become an expert in programming." Most people do not want to learn programming to become experts, most people want to learn programming to get a job. After getting a job, some will plateau right away, others will plateau after some time, and others still will keep learning even after years and years. The problem is "how lon…

I agree with everything you said. Not sure about this though: > I would say that the number of jobs that require the mastery of the craft is not large. Perhaps the number of jobs that require mastery is less well known? i.e. Not advertised as often / not vacant as often. I suppose I'm splitting hairs here in one's definition of "not large", by in my circles (~25 years of dev working experience) there are quite a lot…

Also, the number of developers is increasing exponentially over time. There are maybe a hundred thousand people out there who have >25 years of dev experience, and millions who have 25.

The job market has to roughly follow this demographic trend, otherwise companies would fall behind competitors.

[1] https://insights.stackoverflow.com/survey/2020#developer-pro...

Re: Teach Yourself Programming in Ten Years (1998)

#63
post #27

>> Learn at least a half dozen programming languages I'm always surprised by how many people disagree with this; they're on the search for that one language they can use for every task. Or even worse, they think they've found it and their search is over, that's a tragic situation given how spoiled we are for great languages today. Clojure (STM / refs, vars, atoms & agents), kdb/q (non-loopy array code), Rust (ownersh…

Languages evolve and it takes time to learn all the quirks. Usually you need a systems language, a scripting/shell language, and a front-end language. Sure you can get good at the entire stack, but that take time. I would say spend 70% of your time to get shit done, then 30% learning/researching.

I could write a backend in Elixir, Go, JavaScript, Python or C#, and language choice alone will lead me to very different architectures. Knowing multiple languages from the same category broadens your horizon, and choosing the right one helps you to work with the language and its ecosystem instead of constantly fighting against it

Re: Teach Yourself Programming in Ten Years (1998)

#64

Earlier quoted context omitted.

I like the general purpose GC languages like Java JS c# python lisp for most tasks though, and then go with something a bit wilder or low level like Go Haskell Rust Erlang c++ c when needed. Or R/apl for a mathy problem. Since I enjoy high level programming and the natural experience chicken/egg I never do the low level stuff. Not since Acorn Electron assembler! But I know of it.

JS isn‘t a general purpose language, even though is has been shoehorned to be one.

You might be confusing the JavaScript programming language and the browser runtime.

The former is a general purpose programing language that favors prototypical object oriented programing paradigm but supports multiple other paradigms such as imperative and functional.

The latter uses the JavaScript language and adds on a bunch of specific APIs (such as the DOM) for specific purposes. This includes APIs for DOM manipulation, playing audio, validating inputs, parsing forms, handling key presses, etc.

Re: Teach Yourself Programming in Ten Years (1998)

#65

>> Learn at least a half dozen programming languages I'm always surprised by how many people disagree with this; they're on the search for that one language they can use for every task. Or even worse, they think they've found it and their search is over, that's a tragic situation given how spoiled we are for great languages today. Clojure (STM / refs, vars, atoms & agents), kdb/q (non-loopy array code), Rust (ownersh…

Even more important than different languages is to learn about different execution models. For instance, the difference between Java and C++ is relatively minor from that perspective, compared to (e.g.) understanding how Prolog works. That will open entirely new horizons if your previous experience was based on C(++)/Java(Script)/Python (just to mention a few of the usual suspects). Just look at how the addition of F…

Learning (very basic) Prolog indirectly caused me to learn to write parsers, AST transformations and symbolic derivation - I picked up a book on Prolog and was mystified by how simple the examples of symbolic derivation were in Prolog, a subject I was struggling with. So I sat down and figured out how to do an expression parser just so I could write a solver that mimicked how Prolog did it to understand how it worked. And in the process I learned a lot more.

It was transformational in a way my maths teacher was not...

Re: Teach Yourself Programming in Ten Years (1998)

#66

Earlier quoted context omitted.

I like the general purpose GC languages like Java JS c# python lisp for most tasks though, and then go with something a bit wilder or low level like Go Haskell Rust Erlang c++ c when needed. Or R/apl for a mathy problem. Since I enjoy high level programming and the natural experience chicken/egg I never do the low level stuff. Not since Acorn Electron assembler! But I know of it.

JS isn‘t a general purpose language, even though is has been shoehorned to be one.

JS is incredibly versatile, though I would agree that that's mostly JavaScript being equally bad in nearly every domain :)

I wonder how much of the horizontal scaling trend is driven by JavaScript's horrible threading story.

Re: Teach Yourself Programming in Ten Years (1998)

#67
post #58
post #44

Earlier quoted context omitted.

This is mostly just a rant not directed at you but on the state of software... The Colonial Pipeline ransomware wasn't life threatening. These things happen because of bad* developers and zero accountability from developers over publishers to software owners. As it is now pretty much all commercial software is "first time waiter" quality. Granted it isn't all on the actual developers but on the whole pipeline(!). Mos…

I'd like to add that modern agile IT environments are different than that of traditional engineering. We aim for fast MVPs, fast iterations, "failing fast", "moving fast", "delivering value quickly", generally preferring speed over quality, agility over "waterfall" planning, continuous delivery over batched releases and, well, often accruing tech debt over shipping features later. One can argue that "fail fast" shoul…

The problem with the waterfall model is that it only works if you can determine the requirements up front and they stay fairly static. Sometimes that's true, but all too often its impossible.

But iterative development and fail-fast are independent of quality. If a company skips security reviews and is fine with technical debt because "it works, just ship it", what makes you think they would do security reviews or care about better-than-minimum code quality when following a waterfall system

Re: Teach Yourself Programming in Ten Years (1998)

#68

Earlier quoted context omitted.

I like the general purpose GC languages like Java JS c# python lisp for most tasks though, and then go with something a bit wilder or low level like Go Haskell Rust Erlang c++ c when needed. Or R/apl for a mathy problem. Since I enjoy high level programming and the natural experience chicken/egg I never do the low level stuff. Not since Acorn Electron assembler! But I know of it.

JS isn‘t a general purpose language, even though is has been shoehorned to be one.

What does that even mean? I've pretty much gotten away with using JS for just about everything for the last 4 years. The evolution of a language to make it compete with other languages isn't necessarily "shoehorning". Am I not a true developer because I like JS and haven't found a need to write code in something like Rust?

EDIT: Do you mean that it lacks certain features without a runtime like Node or the browser? For instance, it doesn't have a language construct for opening files like Python or Ruby. If so, I don't think that's a good argument.

Re: Teach Yourself Programming in Ten Years (1998)

#69
post #39

Earlier quoted context omitted.

> And, I would say that the number of jobs that require the mastery of the craft is not large. This mindset is how we end up with layers upon layers of badly designed and buggy software that underpins almost every aspect of modern life. Just apply the same reasoning to other areas: Would you want to drive in a bus with a bus driver who just barely got his driver's license? Would you want to use a bridge designed by a…

not all code is life threatening in worst case scenario. Better comparison would be "would you like to be served by first time waiter or rather expert one?". In most cases it doesn't matter, and when it does, the price point of the service is significantly higher.

I once experienced a waiter holding raw meat (to be cooked at the table) over the drinks while serving, unknowingly letting it drip into the glass. (But as I didn't want to find out if it would life-threatening or not, I didn't try the drink.)

Re: Teach Yourself Programming in Ten Years (1998)

#70

>> Learn at least a half dozen programming languages I'm always surprised by how many people disagree with this; they're on the search for that one language they can use for every task. Or even worse, they think they've found it and their search is over, that's a tragic situation given how spoiled we are for great languages today. Clojure (STM / refs, vars, atoms & agents), kdb/q (non-loopy array code), Rust (ownersh…

I’m surprised you don’t mention Perl in this list. It’s the de facto Unix scripting language and frankly more suitable to the task than others. Perl on the command line is beautifully concise; it’s easily embedded into CI/CD pipelines because the q, qq, etc escaped quotes; it has best-in-class regex support; calling external utilities equally concise with qx or back-ticks; etc etc. Personally I tend to favor C/C++ fo…

Ruby is a better Perl; it's closer to Perl than e.g. Python, it has fewer footguns but is also very expressive. It also has alternative quotes, backtick, shellescape etc. for ad hoc shell integration though you're better off learning IO.popen and others to take the shell out of the equation.
Post reply on HN