[HN Gopher] Teach Yourself Programming in Ten Years (1998)
___________________________________________________________________
Teach Yourself Programming in Ten Years (1998)
Author : MindGods
Score : 227 points
Date : 2021-06-06 06:45 UTC (16 hours ago)
(HTM) web link (norvig.com)
(TXT) w3m dump (norvig.com)
| snarfy wrote:
| 30 years on, still learning
| quickthrower2 wrote:
| Programming is like the universe. There are parts of of
| expanding faster than I can ever learn so are unreachable even
| with unlimited time.
| LoveMortuus wrote:
| That's a trick title, because a big flag of someone still
| learning programming, is when they say that they're no longer
| learning programming.
|
| Programming is like life, constant learning, constant mistakes,
| constant improvements. And that's why it's so beautiful.
|
| A life long partner ^^
| rafaelvasco wrote:
| You can learn to program in a month or less. But it takes 10
| years to actually put out quality code that is easy to maintain,
| readable and efficient in CPU and memory allocation. It took me a
| little less than that only because I was a code freak for several
| years and used to code more than go out.
| tempodox wrote:
| I agree with the article, ~10 yrs will give you a good start if
| you stay with it.
|
| When asked by others how much it would take, I try to avoid
| giving a number like that because it might discourage them. Who
| knows, had I heard or read that number early in my involvement,
| it might have discouraged me. However, my innate curiosity and
| fascination for the field made the time fly by without me
| noticing it. If you're in doubt, you might take that as
| encouragement. Programming is a field where the learning never
| stops, and if that's your thing, the time required will become
| secondary at most.
| foxpurple wrote:
| The number means nothing anyway. What do you get at 10 years
| that you didn't have at 9 or don't yet have from 11.
|
| You can have a well paying job as a programmer in only a few
| years.
| tempodox wrote:
| > The number means nothing anyway...
|
| Yep, that's why I put the "~" in front of it and called it a
| start, not the end of the journey.
|
| > You can have a well paying job as a programmer in only a
| few years.
|
| Absolutely, if that's the extent of what you want out of it,
| you could achieve that and call it a day. But programming is
| also a field that's ever evolving. If you catch yourself
| thinking, "I've learned everything I ever need to learn",
| then chances are that you'll find yourself left behind at
| some point in the future.
| neilv wrote:
| > _One of the best programmers I ever hired had only a High
| School degree; he 's produced a lot of great software, has his
| own news group, and made enough in stock options to buy his own
| nightclub._
|
| How did Norvig interview JWZ?
|
| Did he use the whiteboarding rituals promoted by Norvig's
| company?
| abecedarius wrote:
| This was written before he joined Google, if that's what you
| mean.
|
| I don't remember a lot about my interview around then, but one
| bit that stuck: when he outlined some problem he had at the
| time, and I was like "maybe bayesian networks would be good for
| this", I felt rather silly saying so since it'd been his book
| where I learned about bayesian networks.
| SMAAART wrote:
| We love in a world where businesses at large make money by
| overpromising and underdelivering; people buy these
| goods/services as a "alibi" of some sort, so that they can say
| "it's not my fault, I even tried [insert here alibi product].
|
| That's what stupid people do.
|
| When smart people need to solve a problem, they find a system,
| they make time to work long and hard, and they keep on going,
| each and every day, failing often failing fast, and then, little
| by little, they incorporate the new knowledge, understanding and
| experience into their life.
|
| 2-3 years often gives good skills borderline mastery, 3-10 true
| mastery.
|
| It's a system, not a goal.
| asicsp wrote:
| Previous discussions:
| https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...
| mehphp wrote:
| 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.
| cube2222 wrote:
| I don't think this is (1998) if Clojure (2007) is referenced in
| it.
| ritchiea wrote:
| It's originally from 1998 and has been updated since then.
| thanatos519 wrote:
| I started to learn programming when I was 9 and it took about 10
| years. About half of his suggestions came after that. Good tips
| if you're starting as an adult I suppose.
| laurieg wrote:
| How long does it take to learn programming is like asking "How
| long does it take to learn 'sport'?".
|
| You could learn the basics of football in an afternoon or spend a
| solid few years getting good. If you started playing futsal,
| you'd do ok. Maybe you could hold your own as a sprinter. You'd
| probably have a terrible time with a javelin.
|
| In the same way, programming experience in one area transfers to
| others but not completely.
| tchalla wrote:
| The power of compounding which comes from discipline is one of
| the most underrated concepts. There's one caveat to "keep at it
| for x years"; deliberate practice. You have to work towards being
| aware of gaps, identifying them and improving them. In addition,
| the amount of effort required to go from 0-40 is different from
| the one required to go from 50-70 or 80-95. The recognition and
| acceptance that a 100m sprint is different for Usain Bolt than it
| is for you could give you inner peace and focus.
| 0xfaded wrote:
| Learn linear algebra properly and this will ring true. If you
| know the math, it's trivial to pick up control, computer
| vision, back propagation, optimization, I'm sure many others.
| mirker wrote:
| More like linear algebra, real analysis, and probability for
| the areas you listed.
| [deleted]
| KingOfCoders wrote:
| I've learned programming as a kid in a department store watching
| other kids hack in BASIC.
|
| Writing code for 40+ years I still make mistakes, don't know a
| lot of things, make the wrong decisions sometimes and learn every
| day - currently fighting Rust lifetimes.
| binbag wrote:
| It does not take ten years to learn things. It might take 10
| years to be good at something. I recently took up lawn bowls. I
| learned it in about 30 mins. It's quite simple. I'm not any good
| at it.
|
| I used the Learn C++ in 24 Hours book as an undergraduate. It was
| excellent. It was the book the university recommended, and it was
| probably the only book I bought as an undergraduate engineer that
| was actually indispensable. I actually used it, page by page, and
| during that course I produced a really cool 'moon lander' game in
| 3D. Was I an accomplished programmer? Absolutely not. Had I
| learned the basics? Yeh. Good enough for an undergrad electrical
| engineer.
|
| It feels like you are railing against one premise (a programming
| language can be learned in 24 Hours) only to propose another
| similarly bonkers premise (a programming language can't be
| learned in less than 10 years). What's the point?
| CraigJPerry wrote:
| >> 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 (ownership), Go (async done better, although i
| also really like core.async in clojure too), Python (trio
| nursery), C++ (asan, msan, tsan).
|
| There's some blogs continually give me good food for thought in
| this space, all signal no noise:
|
| Eli Bendersky, (every language under the sun) e.g.
| https://eli.thegreenplace.net/2016/the-expression-problem-an...
|
| Fasterthanli.me (Go, Rust, others) e.g.
| https://fasterthanli.me/articles/so-you-want-to-live-reload-...
|
| Mechanical Sympathy (Java), defunct but still worth visiting
| https://mechanical-sympathy.blogspot.com/
| stephc_int13 wrote:
| The thing, in my opinion, is to avoid spreading yourself too
| thin.
|
| I started using C/C++ more than 20 years ago and even if I feel
| really comfortable with the language (except the latest
| revisions) I am still learning and improving.
|
| I don't think I could achieve the same level of mastery on half
| a dozen languages.
| tempodox wrote:
| 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 FP
| features to "OOP" languages considerably widened the field of
| possibilities.
| vidarh wrote:
| 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...
| CraigJPerry wrote:
| Yeah i agree, I was a bit clumsy about it but this is really
| what i was digging at in my examples.
|
| I see a lot of conversation on here dedicated to whether
| you'd like your data with your functions (objects) or your
| functions with your data (closures). Rarely see array, logic
| or constraint programming paradigms mentioned.
|
| FP has been rediscovered again and it's the hotness right now
| but it'll die out again like it did before OO stole its
| lunch, i can almost write the blog post headlines just now
| "arity considered harmful", "OO and side-effect management
| not mutually exclusive after all!"
|
| I've got a fiver on the next big one being a re-visit of
| structured programming.
| morelisp wrote:
| > a re-visit of structured programming.
|
| God I hope so, probably the worst time I have teaching
| junior developers is helping those who have only used for-
| each write a loop with a useful invariant and not a garbage
| fire of breaks/continues.
| bjornjajayaja wrote:
| 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++ for the main event and Perl
| for everything else on the systems side.
|
| JavaScript is obviously ubiquitous on the front-end but it
| feels very clumsy. Not a huge fan of that on the back-end
| system it's just too weird to do simple stuff like "parse a
| file" or "rip through a directory tree" or call a shell
| command.
| barrkel wrote:
| 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.
| bjornjajayaja wrote:
| Subjectivity aside: the fact stands that Perl is the most
| ubiquitous scripting language on Unix and the de facto
| standard. You'll find it by default on many container
| environments as well--but hell if you'll find Ruby. ;)
| tgragnato wrote:
| On most of my Linux systems Perl is only installed as a
| dependency of debconf or git.
|
| I'm sure the Linux kernel community is still using it,
| but FreeBSD even managed to remove it from the base
| system.
|
| It's still ubiquitous... "standard"?
| bcrosby95 wrote:
| I think it's fine to "learn" lots of languages, but you're
| going to be pretty bad at most of them. And I personally
| wouldn't be comfortable with building a system that will reach
| hundreds of thousands of LOC in the majority of the dozen or so
| languages I've "learned" over the years.
|
| If you're really going to learn a language - as in, build
| idiomatic programs - its a constantly moving target and
| requires a lot of effort to maintain.
|
| I think it's better to learn 2-3 languages, and have passing
| familiarity with others. People like to pretend that language
| choice solves all your problems, but usually you're talking in
| percentages: one language is a 80% fit for your problem,
| another is an 85% fit... there is never a 100% fit - are these
| differences worth working in a language you barely have any
| experience in?
| inamiyar wrote:
| I think it depends on the language and background. Learning
| Go is maybe a 20 hour enterprise. Learning C++ if you're
| coming from Rust? Maybe 20-40 hours, not sure. Learning C++
| coming from Python? Well....buckle up.
|
| Same in reverse btw. Going from C++ to Python is probably
| easier than Python to C++, but it's still not going to be as
| easy as, let's say, java -> C# imo.
| kragen wrote:
| I mostly agree, but I think 2-3 is too few. I think I'm
| pretty good at C, bash, Python, make, and JS, and also (if
| we're counting languages that aren't programming languages)
| SQL and HTML. I used to be pretty good at Perl, but the
| language has moved on since then. I think I have more than
| "passing familiarity" with i386 assembly, PostScript, OCaml,
| Java, C++, BASIC, Bicicleta, Scheme, Lua, and Brainfuck; that
| is, I can figure out how to write things in them without
| constantly looking stuff up, and I'd be comfortable writing
| hundreds of KLOC in them, but what I write is surely not
| fully idiomatic. And there are another 32-64 languages I have
| passing familarity with, meaning that I've written useful
| complete programs in them, including Golang, Rust, Excel,
| Smalltalk, PV-WAVE IDL, Prolog, Common Lisp, Scala, Octave,
| Elisp, Ruby, Pascal, Clojure, Forth, R, and Tcl, but I can't
| think of most of them right now.
|
| I guess in the context of your comment this sounds like
| bragging, but that's not my intent; I'm trying to rebut your
| comment, using myself as an example, because I think this
| level of polyglot programming is pretty close to normal, at
| least after you've been at this stuff for a few decades.
| Maybe if you're getting into a rut of only knowing 2-3
| languages well, you'd benefit from putting more effort into
| exploration. Unless you're about to stop programming, in
| which case you won't have time to take advantage of your
| newfound powers.
|
| I don't think percentages are a good way to think about
| language fit. I think it's more like an effort multiplier. In
| theory I can solve any programming problem in C, but when the
| problem isn't huge and performance isn't much of a challenge,
| I can usually solve it about with about a tenth of the effort
| in Python. There are problems where solving them in SQL is
| about three times easier than in Python, and problems which
| can barely be solved in SQL, so solving them in Python is
| about a hundred times easier.
|
| As an example, in my experience it's pretty common for Python
| to be about half as much effort as Scheme, but there are much
| better Scheme implementations out there, so when performance
| is a challenge, solving them in Scheme can be a hundred times
| easier than solving them in Python. But if you know Scheme
| and not Python, you can often get twice as much done by
| learning Python, even for problems where you might say Scheme
| is a pretty good fit. But it's true that at the beginning,
| when you have barely any experience in Python, you won't be
| faster; you'll be slower. And you won't know if that will
| ever change.
|
| Most commonly, though, people use the language that is best
| integrated with their chosen platform, because that saves
| them the effort of writing a bunch of integration code in
| addition to the actual application code. If you're writing
| DHTML, for example, use JS, not C. If you need to invoke JVM
| libraries, reasonable options include Python, JS, Kotlin,
| Clojure, and Java, but not Perl, C, or C#. If you're writing
| a Minetest mod, do it in Lua.
|
| So, if you only have more than passing familiarity with 2-3
| languages, I think you're going to frequently run into cases
| where that ignorance costs you a factor of 2 or 3 in effort.
|
| I certainly agree, though, that choosing the right language
| won't solve all your problems, and it's easy to have
| exaggerated hopes for it.
| quickthrower2 wrote:
| 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.
| TchoBeer wrote:
| Haskell is also garbage collected
| Hendrikto wrote:
| JS isn't a general purpose language, even though is has been
| shoehorned to be one.
| runarberg wrote:
| 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.
| quickthrower2 wrote:
| Yes I mean JS with node
| JrProgrammer wrote:
| I would say it is. It didn't start as one but over the
| decades it sure has become a general purpose language.
|
| I can't find a domain where JS wouldn't fit the
| description. While it may be a bad fit for certain
| problems, it can still be done.
| dgfitz wrote:
| Safety-critical controller for manned or unmanned
| aircraft, ground vehicles, etc. High frequency trading.
| Tiny embedded devices. System libraries.
|
| I'm sure I could come up with more. JavaScript is a tool,
| just like c, go, rust, python, lisps, etc. I'm going to
| give you the benefit of the doubt and hope you just
| didn't consider all of these other domains when you made
| this comment.
|
| Cheers!
| wongarsu wrote:
| 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.
| ravenstine wrote:
| 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.
| freedomben wrote:
| I'd be curious to hear some examples where JS doesn't fit
| as a general purpose language. In my arrogance I suspect it
| would be hard to give examples that don't also disqualify
| other scripting langs like python and ruby. Perhaps you
| don't consider those to be general purpose either?
| Hendrikto wrote:
| For example, without something like Node, you cannot even
| open a file. I consider this a very basic requirement for
| being "general purpose".
| fnord77 wrote:
| I was one of those who disagreed with that, but then I was
| forced to learn several new languages for work. Now I agree
| with it wholeheartedly.
|
| my favs:
|
| -clojure for processing deeply nested data
|
| -rust for general stuff
|
| -java for concurrency support and general stuff
|
| -c for easy pointer manipulation and "tricks"
|
| -sql
|
| -bash for scripting (I'm that weirdo who would rather make a
| huge shell script rather than using python)
|
| I still need to find something good for arrays/ matrices.
| MATLAB was kinda fun I can't see it being used in production in
| anger too easily
| hpb42 wrote:
| For arrays/matrices I'm falling back to Fortran. It has
| builtin support to matrix/vector multiplication (and other
| operations of course). There's no need to install other
| libraries, or to deal with virtualenvs, or package managers.
| Fortran is not that sold creepy thing from the 70s anymore,
| Fortran90 (and later) is pretty elegant IMO.
| Raro wrote:
| Python's NumPy library deliberately emulates much of the
| functionality of Matlab's core (similarly, fundamental
| plotting with matplotlib follow similar design cues). As a
| lapsed long-time Matlab user, I think they're just as fun to
| use.
|
| There is also Octave, an open-source Matlab alternative, but
| when I last used it (admittedly quite a while ago) it had
| limited support for toolboxes (e.g. signal processing). I
| imagine it has only improved since.
| galangalalgol wrote:
| For elegant matrix syntax I like julia or fortran better,
| if I need a lack of a license or more speed. Octave is good
| too, but it is much slower than Matlab. Numpy is in a weird
| spot. Its still slower than Matlab, but its everywhere, but
| all the versions and environments are different so you need
| containers to be portable.
| barrkel wrote:
| The biggest advantage of bash over scripts is parallelism.
| It's not bad at job control, and if you write your scripts so
| they communicate well with streams, you can scale them up
| with a little bit of bash, xargs -P, parallel, etc.
| SiliconMage wrote:
| APL is awesome for matrices.
|
| https://en.wikipedia.org/wiki/APL_(programming_language)
| belter wrote:
| Careful with Bash... https://mywiki.wooledge.org/BashPitfalls
| voakbasda wrote:
| I write huge scripts with bash. I know many of the pitfalls
| referenced on that list (and more), but this a great
| resource for teaching others. Thanks for sharing it!
| whynaut wrote:
| > I still need to find something good for arrays/ matrices
|
| R?
| trutannus wrote:
| MATLAB, if you can get a license would likely be better.
| Name literally means "matrix lab". Has excellent matrix
| manipulation features.
| blacktriangle wrote:
| And Octave(https://www.gnu.org/software/octave/index) if
| you can't get a license.
|
| I actually had one hectic weekend porting our whole
| departments MATLAB code over to Octave due to a hardware
| failure of our licensing server and some stonewalling
| from Mathworks, Octave is pretty close to fully MATLAB
| compatible.
| _the_inflator wrote:
| Well, this advice is from 1998 and still got some truth to it.
|
| In 1998 languages did not have that many features and were in
| my opinion easier to grasp. Just have a look at modern C++ or
| Java's cadence of new features.
|
| In 1998 Java and JavaScript were new. Now they evolved into
| widely adopted general purpose languages.
| CraigJPerry wrote:
| I remember 1998 pretty well - mostly for Linux distros
| becoming mature enough to be accessible for "normal"-ish
| people but it was a pretty exciting year for languages too.
| There was an absolute ton of hype for Eiffel, every month dr
| dobbs mentioned it at least once and Ada95 was enjoying a
| renaissance too - i forget the specifics but something
| changed in licensing and GNAT was integrated more with the
| GCC. Haskell was a hive of activity and Python was starting
| to gain widespread attention but it was no where near to
| dethroning the favourite language of people who signed their
| emails "JAPH" :-)
|
| Your comment reminds me how much i miss dr dobbs journal. I
| learned so much on those pages.
| z3t4 wrote:
| 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.
| vbsteven wrote:
| This is a great strategy to have but I would reformulate it
| as "make sure you know enough languages to solve system,
| scripting, frontend and backend problems efficiently".
|
| You don't necessarily need a separate language for each
| domain.
| wongarsu wrote:
| 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
| vitus wrote:
| Incidentally, ASAN / MSAN / TSAN are part of Clang and GCC, not
| C++ itself, so they're available for other languages, e.g. Rust
| (https://github.com/japaric/rust-san describes how to use them)
| and Golang (well, TSAN and MSAN at this time).
|
| Related: MSAN is made so much better by -fsanitize-memory-
| track-origins. I can't count how many times MSAN caught an
| error, and with that flag enabled, it directly pointed to the
| exact line of code at fault.
| kenny87 wrote:
| Ten years later I still struggle to get involved language
| standardization effort.
| BossingAround wrote:
| 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 long until I become employable," not "how
| long until I become an expert".
|
| The answer to the former is months of deliberate practice. The
| answer to the latter is [tens of] years of deliberate practice.
|
| Books with titles like "learn C++ in 24 hours" target the former.
| And, I would say that the number of jobs that require the mastery
| of the craft is not large.
| lmilcin wrote:
| > Most people do not want to learn programming to become
| experts, most people want to learn programming to get a job.
|
| No, I think it is little bit different.
|
| "Most people think they will get a job and then will become
| experts after some time of performing the job"
|
| And they are right. But they are mistaken what kind of expert
| they become -- they are becoming experts at what they are doing
| which means, if they are mindlessly repeating same things they
| are becoming experts at mindlessly repeating same things.
| Dah00n wrote:
| >they are becoming experts at what they are doing which
| means, if they are mindlessly repeating same things they are
| becoming experts at mindlessly repeating same things.
|
| That's a great way to explain it. Totally stealing that!
| einpoklum wrote:
| > 10 years is not to "teach yourself programming," it's to
| "become an expert in programming."
|
| I've been programming for a lot more than 10 years, and would
| barely call myself an expert on anything. 10 years is a decent
| amount of time to learn to be a decent programmer. As a rule of
| thumb at least.
| herodoturtle wrote:
| 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 of "jobs" requiring mastery, but they
| certainly do become available less often (or rather, they're
| usually quietly filled without much public notice).
| gombosg wrote:
| 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 <5. E.g. see [1] - 16 times more engineers filling the
| SO survey with <5 years of experience compared to >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...
| BossingAround wrote:
| What are some of the jobs that require mastery in your mind?
| I suspect we'll diverge in that opinion, hence our different
| conclusions.
| yosito wrote:
| Agreed. I can teach my 12 year old cousin how to program in
| half an hour. This isn't about simply knowing the basic
| starting point. It's about becoming an expert.
| Hendrikto wrote:
| > 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 an
| architect who knows just enough to complete the job and does
| not care a bit for more?
|
| It does not take mastery to write one-off scripts that "get the
| job done". However, they will probably not be a general purpose
| solution of the problem at hand, ignore corner cases, contain
| bugs... and the real test comes when requirements inevitably
| change.
|
| If you want to write dependable, high-quality, maintainable,
| reusable software you better know more than the bare minimum.
| lordnacho wrote:
| How often do you check your surgeon's grades?
|
| Or any of those things you mention? I normally just trust
| that the bus company has hired a guy with a license.
| akiselev wrote:
| When people say driver license, they mean the one kids can
| get at age 16. Driving a bus requires a _commercial_ driver
| license, which is referred to as a CDL - it 's a much more
| rigorous test.
|
| How often are you driven around by bus drivers who just
| finished their learner's permit?
| dahart wrote:
| > 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.
|
| No, it's not. Changing requirements by adding features is by
| far the biggest cause of badly designed and buggy software.
| I've worked on multiple teams where everyone was fully
| committed and highly skilled, and it didn't magically fix the
| problems of software. It wasn't any better than working on
| teams of people who were less interested. Our inability to
| stop adding features is what kills us, and this inability is
| actually stronger with people who think they've 'mastered'
| the art of programming than with people who can finish a one-
| off task.
|
| > they will probably not be a general purpose solution of the
| problem at hand
|
| Ironically, perhaps, in my decades of professional
| programming, the number one biggest waste of money I've seen
| is people over-engineering something under the banner of
| making something "general purpose" that didn't need to be.
| I've watched a couple of different teams of very smart people
| waste literally tens of millions of dollars by deciding to
| rewrite something that didn't need rewriting, and
| dramatically overestimate their ability to finish it in a
| reasonable amount of time and avoid the same mistakes they
| made the first time.
|
| > If you want to write dependable, high-quality,
| maintainable, reusable software you better know more than the
| bare minimum.
|
| This sounds good in theory, but is specious. The real way to
| get high quality software is to define what that means and
| stick to it ruthlessly. You don't need to know a lot about
| programming. You need a management that is okay lengthening
| schedules to make room for testing. You need a CEO who is
| okay with saying no to customer demands for features that the
| competition has. You need programmers who know when to stop
| programming and when to avoid rationalizing their 'general
| purpose' solution that solves problems that don't actually
| exist.
|
| Good luck in your search for high quality software, it's very
| very difficult to find a team who can commit to it, and there
| are good reasons why: it's extremely expensive.
| Zababa wrote:
| > 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 an architect who knows just enough to complete the job and
| does not care a bit for more?
|
| I don't think this part is useful. If you're writing directly
| code for an application you don't usually need to be the
| best, and your errors can be handled by layers of
| supervision/QA. If you're writing internal libraries and
| tools, you need to be a better programmer. If you're in one
| of the let's say Rust compiler groups, you will need to
| really know your stuff. But even the Rust compiler has issues
| for newcommers that aren't too hard.
|
| I don't think comparing software engineering to bus drivers
| and bridge architects leads to useful insight. I do agree
| with the rest of your post though. A part of my day job is to
| develop and maintain applications made by people that
| didn't/couldn't program "properly" (shadow IT). Everything
| more or less work and the end users are satisfied, but I
| often fear that one day something will depend on one of those
| applications. On the other hand taking the time to do
| everything "properly" would lead to a lot less
| experimentations and/or use a lot more resources. It's hard
| to find a good balance.
| graphtrader wrote:
| I have always assumed many programmers are terrible at
| sports in general so they turn programming into this weird
| sport of who can be the Cristiano Ronaldo of programming.
| Zababa wrote:
| That's a pretty unfair way to put it. People that do "too
| much" to try to impress their collegues or themselves
| exist everywhere. You can see it in some people's code,
| you can see it in the way some people dress, you can see
| it in some powerpoint presentations, you can see it in
| sports.
| Yiin wrote:
| 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.
| jackcviers3 wrote:
| I hate to do this, but:
|
| Stop equating programming and bus drivers or waiters. They
| aren't equal. Programming is difficult in its depth and
| breadth in a way that waiting tables is not.
|
| Stop treating all programming tasks as equal. They are not.
| Most of the easy ones are only easy because they run on top
| of all the difficult programs. That is the goal of the
| difficult programs, to make it possible for laymen to do
| work that would require an expert for certain repetitive
| tasks if the underlying program did not exist.
|
| Most people would not be capable of getting Hello World to
| run without the OS and high-level abstractions that take
| expertise to develop. And making that possible requires
| many many experts in many different kinds of programming.
|
| Stepping off of the single thread and single machine model
| into concurrent and distributed computing to enable even
| more laymen to make stuff takes even more experts.
|
| There is a meme in the industry that people shouldn't
| strive for expertise. We still need more experts, and you
| become an expert through practice while still a layman.
| Nothing would be worse off if we had more experts capable
| of deciding when to use something extensible off of the
| shelf to enable laymen to do simple tasks, and when to
| build a platform to eventually enable that task to be done
| by a layman.
|
| A lot of things would be worse off if we encouraged all
| people to stop at the layman level. We should encourage
| everyone to at least become a layman for their own
| enrichment. But we should also encourage laymen to strive
| for expertise to lower the barriers to entry to produce
| more laymen capable of doing simple tasks.
| Dah00n wrote:
| 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(!). Most
| software is on the "let's use an anchor to stop our newly
| developed car because we have used anchors for decades and
| understand them better than drum brakes" level of quality.
|
| * Bad code because of a lack of understanding and/or time
| constraints. But developers don't mind coding bad code (not
| enough to refuse at least). Developers need to be more like
| doctors and engineers. Accountability and proven skill
| matters and would force managements hand like at hospitals
| and building projects.
| runawaybottle wrote:
| Bad code is happening for non-malicious reasons. I'll
| suggest these two being the main factors, and I'll
| concede that it is conjecture, but I'm drawn to these two
| since I assume good-faith amongst all actors:
|
| 1)
|
| Everyone needs to pump out all of their bad code before
| they get to their decent code. Imagine your lifetime
| array of code, it will look like this [bad, bad, ...(lots
| of bad), bad, good, bad, good, good, ...(lots of good),
| good]. As you can see, you'll have to pop (poop) all the
| bad out before you get to good. Some people have a
| smaller length array due to other factors (talent), but
| even so, there is bad in front of the array.
|
| What are the implications of this? That should be
| obvious. This industry hires people straight out of
| college or people in their mid 20s to be project leads.
| You do the math.
|
| 2)
|
| Lack of suffering. Many people haven't had to toil in
| someone else's codebase. Many people are given green-
| field projects that are scrapped quickly, at which point
| the business (or another business) gives a brand new
| project. Constantly building shit from scratch by
| yourself means you don't understand pain. Go work in
| someone else's garbage app to feel pain. Then you will
| rethink what good code is. Good code is not painful, and
| the definition of 'not painful' will be obvious to the
| survivors of pain.
|
| Solution:
|
| Continue to crap out your bad code in non impactful areas
| of the codebase and avoid crapping in critical parts. You
| have to crap somewhere, and that is understandable.
| Lastly, don't turn down the experience of working in
| someone else's labyrinth. The experience is valuable.
| gombosg wrote:
| 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" should not be about code &
| feature quality but rather about determining proper
| scope, splitting features sensibly etc. But then we still
| have deadlines to meet and code quality suffers.
|
| What I'm saying that this kind of fast-moving environment
| actively discourages traditional (like doctors & civil
| engineers) engineering practices.
|
| You might have lots of (unit|integration|E2E) tests but
| the company may miss practices like proper security
| reviews and code won't be reviewed, tested and approved
| by multiple people like, say, bridge building plans are.
|
| This problem mostly comes up not with your usual web app
| but when critical systems are affected (like in the
| aerospace industry or industrial systems). But through
| supply chain attacks, nearly any system can be vulnerable
| these days.
|
| We should definitely have better regulation on how
| software is made.
| wongarsu wrote:
| 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
| ptx wrote:
| 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.)
| pkdpic_y9k wrote:
| This one time I had a waiter who it turned out wasn't
| even our waiter and we gave him our money and the food
| was good but where did he get the food?
|
| Also there are some great thoughts in this thread on why
| there is such a shocking amount of spaghetti code out
| there and I like the ransomware note also. Thought
| provoking. Too bad I'm such a terrible programmer.
| Aeolun wrote:
| > the number of jobs that require the mastery of the craft is
| not large
|
| The number of jobs that _benefit_ from mastery of the craft is
| essentially equal to the number of jobs.
|
| I do not enjoy finding the work of a bunch of people that
| studied enough to get hired and no more.
| BossingAround wrote:
| > The number of jobs that benefit from mastery of the craft
| is essentially equal to the number of jobs.
|
| I think this is true. Nobody disputes that.
|
| Imagine you'd hire Torvalds to debug and fix why your
| Wordpress does not work. I truly think he'd do an excellent
| job figuring out that AWS has a firewall that's blocking the
| connection from your WP node to your MySQL node...
|
| Somehow, the example above feels bizarre and yet these are
| the types of issues a lot of architects, consultants, and
| other highly-paid job positions deal with on a daily basis.
|
| > I do not enjoy finding the work of a bunch of people that
| studied enough to get hired and no more.
|
| This sentence makes no sense to me. I'd say you "find the
| work of people that studied enough to get hired and no more"
| possibly just slightly more often as you "find work of people
| who never wrote anything public until they mastered
| everything they could, from building computers from NAND
| gates up to AI/ML".
| kbmunchkin wrote:
| They may benefit from it, but they won't pay more if it's not
| required. So if you expect more compensation for your
| mastery, you may get passed over for someone with less skill,
| but the required skill.
| vladharbuz wrote:
| Everything you say is true, and leads to the oft-repeated "why
| would I want to learn this complicated programming concept,
| when my job doesn't require it?". That is, it encourages the
| idea that employment is the yardstick.
|
| The rub is that this all depends on what you find personally
| rewarding. If what leads to a rewarding life to you is having a
| good job, then absolutely, you probably don't need more than a
| certain amount of depth and knowledge on the subject.
|
| But if depth and knowledge on the subject is what you find
| personally rewarding, then suddenly putting in all this work
| makes sense. For many, lifelong learning is what is most
| rewarding and brings most joy, which one might argue is the
| most important thing as long as you have a sufficient income.
|
| If you do want to frame it in terms of achievement, it's also
| obvious that many prolific people in their fields were driven
| by a passion for what they do -- the playful nature of Feynman,
| Shannon and others comes to mind.
| skohan wrote:
| I don't think the title is misleading, it's deliberately
| placing itself in contrast to the glut of content that is
| already out there geared towards people who want to become
| programmers as fast as possible to get a job. Programming may
| be a job, but it's also a craft, and I'm happy to see content
| in that direction.
|
| Also as someone who has had to hire a team of programmers in
| the last 18 months, it's clear there's an industry of snake-oil
| salesmen willing to promise to teach you to be employable in 3
| months or less, and they're not benefitting the industry in
| need of good programmers, or the people paying them thousands
| of dollars in hopes of improving their employment prospects.
|
| A 4 year degree is not necessary to become an employable
| programmer, but imho what we need more of are 2-year programs
| which properly teach the fundamentals of computer science
| alongside practical skills, not 6 week or 3 month bootcamps
| which only teach the bare minimum.
| basicplus2 wrote:
| From the article..
|
| http://abstrusegoose.com/249
| nindalf wrote:
| This needs to be higher. This guide shows it's possible to
| learn C++ in 21 days.
| Zababa wrote:
| I know that it's probably a joke but to take it seriously:
| no, I don't think it does. It shows how to circumvent the 21
| days constraint but the whole point of that discussion is
| that time is limited.
| stickfigure wrote:
| I've always considered this the most reasonable method to "Teach
| Yourself C++ In 21 Days":
|
| https://abstrusegoose.com/249
|
| (note: is comic)
| TrackerFF wrote:
| People learn at different speeds, and intelligence + natural
| talent is a huge factor when it comes to learning this stuff. The
| two most talented programmers I know have quite different
| backgrounds: One is your archetypical hacker - started coding as
| a young child, demo-scene by the time he was 13, and got
| headhunted before he could enroll college.
|
| The other guy didn't write a line of code until he was 21, after
| switching majors from econ to engineering - three years later, he
| was getting offers from FAANG companies and quant/hedge funds.
|
| But, I do think that if people consistently work and study
| programming for 10 years, then most will have a solid grasp
| afterwards. That means doing actual constructive work almost
| every day, for 10 years - doing work that either challenges you,
| or teaches you how to use the tools.
|
| Being an expert (or highly competent) programmer is not only
| about knowing CS-theory at heart, and being able to translate
| that into working code - it's also being fluid with the tools.
| And, luckily, becoming good with tools doesn't take much more
| than time and effort.
|
| You could be the worst programmer in the world, but given enough
| time, you could learn every nook and cranny of some language and
| its ecosystem.
| SiliconMage wrote:
| One of the concepts in the name that tune, errr learn to Code in
| fewer days than the other brands of books is that each chapter is
| a Lesson that should be worked on for a while before proceeding
| to the next lesson.
|
| So while it is 24 hours or 7 days or whatever, they are not meant
| to be a sequential 24 hours, but 24 hours spread over a period of
| time.
|
| I could never interest a publisher in creating a series called
| "Learn in 23 Hours", I'm sure it would have a clear advantage
| over its slower 24 hour competition. Perhaps 23.99 hours?
| FridayoLeary wrote:
| Anyone here from the 2008 graduating class?
| PinkPigeon wrote:
| I really like the advice in this.
|
| At the same time, I often find it dispiriting to hear "it takes x
| amount of time", be that 10 years, 10,000 hours or a lifetime.
|
| While I understand that it is important to have these metrics
| precisely to dispel the idea that anyone can learn c++ in any
| meaningful way in 24h, at the same time I find it harder to start
| something when I am constantly reminded of the fact that nothing
| I produce will be worth anything compared to those with a giant
| head start (yes, yes, never compare yourself to others, just to
| yourself from x time ago).
|
| The 10 year thing means I can meaningfully learn, what, 70 thing
| in life if I am not spending the vast majority of my time at a
| full time job? So, that makes it 3-4 things?
|
| How depressing.
|
| Admittedly, I feel I have almost never studied deliberately. I
| happen to have learned about 3 things to reasonable expertise in
| my 30 ish years. All three just happened. It was effortless to
| learn, as it was interesting to learn.
|
| I simply cannot imagine what it would mean to have to dedicate 10
| years or 10,000 hours of practice to something I am not
| interested in. In my own experience I would go so far as to say
| that I either love something enough to want to do it 8h a day, or
| not at all.
|
| I wonder if I'll ever find a 4th thing, later in life. I really
| want to learn more things, but the rule of x hours is
| discouraging to think about when I have 30 something years less
| left on this planet than when I started.
| hellbannedguy wrote:
| I think the 10 year, or 10,000 hours are for learning stuff you
| are not completely in love with.
|
| It would take me 10,000 hours to become a proficient
| Programmer.
|
| Now---stuff I am truly interested in took me less time to
| learn. I was going to say "master", but I didn't master
| anything in my life. I'm a good mechanic, and Watchmaker only
| because learning it was easy because I was interested.
|
| It took me less than 4 years to become good at Watchmaking. Why
| --because for some reason I became facinated with watches, and
| clocks.
|
| I can strum exactly 12 guitar chords. I memorized the charts,
| and then memorized the finger positions on the fret. I can play
| a few songs. I sometimes wonder why I don't practice more. The
| reason is I don't love it. When playing a mental picture of
| Blutto pops up from Animal House.
|
| Pick something you love. You never know where it will take you.
| Then again--maybe I should have learned things that society
| valued, and paid highly for?
| icoder wrote:
| Yes our lives are limited so we can not do it all. And comming
| to peace with that is a process that is different for everyone.
| Every choice rules out others, hence the paradox of it.
|
| Your own struggle with learning new things does have some
| openings to look at it a bit lighter. Most things are already
| useful, fun, interesting with less than 10k hours. Way less.
| You don't need to be an expert to enrich your life and that of
| others with a new skill!
|
| In addition, learning related things goes much quicker (ie I
| enjoy doing CAD recently using Fusion 360 and I find that many
| aspects of it fit my programmer mind very well, same for
| expanding foreigbln languages, different instruments, etc).
| nathias wrote:
| That just applies to the one thing, you can find things that
| fit well together where some portion of you other skills still
| apply, but that will depend to the individual. You also
| shouldn't only learn things to be an expert in them, a very
| small initial input makes a lot more of a difference than
| honing those skills.
| eggdie wrote:
| If you are 30ish now, you will be 40ish in 10 years. Might as
| well develop a new skill or two. Though I completely agree that
| it should be something you are truly interested in.
___________________________________________________________________
(page generated 2021-06-06 23:02 UTC)