How to Learn New Things as an Adult - <AUTHOR> https://www.theatlantic.com/science/archive/2017/03/how-to-learn-new-things-as-an-adult/519687/?single_page=true <comment><USER9> I really don't think there's much difference between learning as an adult or a teenager. It's just that we have less time.

A few months ago I wanted to learn to appreciate and listen to classical music. I woke up an hour earlier every morning and read a book, listened to an audio course (Robert Greenberg's How to Listen to and Understand Great Music), and listened to actual music then and throughout the day. A few months later I can recognize the structure of most pieces and if the composer "broke the rules" (and why). I can't read music or tell which note is which (yet!) but I made a lot of progress.

Unless it's a particularly difficult subject, simple daily practice and learning goes a long way.

<comment><USER10> > I really don't think there's much difference between learning as an adult or > a teenager. It's just that we have less time.

I am a 40-year-old full time student with a kid, but no job. I disagree completely. I've got the time. When I was 20, I remembered everything I saw or heard even once. I could recall it with ease. Concepts came easily when they were explained in text or in lecture. Now? I'm still plenty smart and usually get the best grade in my class, but I have to work hard for it, where before I never worked at all at it. I have to spend time actually _memorizing_ things. I have to take time to think about concepts in order to understand them. (Weird, right?)

As far as I can tell, the only real advantages I have over my younger self are that I am better disciplined and I appreciate my education more.

<comment><USER11> You also _might_ be remembering your skills inaccurately. In jr high and high school I also got top grades easily and rarely studied. In college I finally had to. I wondered where my ease of learning had gone, but eventually realized the most likely explanation was that the material had simply been much easier/more intuitive and that I was tricking myself with selection bias.

<comment><USER12> I'm not the same person, but I never studied in college either. I would go to lecture and get 90%+ on the exam. I would get Bs and Cs because I would never do any homework. I could use concepts from math classes without having used them before, as long as they were explained in lecture.

</comment></comment></comment></comment><comment><USER13> I just re-learned skateboarding. I spent a lot of time skating in my late teens (37 now), and was decent at it. I noticed three things throughout the learning process this time around. First, there is so much more information available today than when I was a kid. YouTube videos alone could keep me busy for years. Then you add in the GoPro and my phone, and you have an entirely new world available. The one downside here is that I find myself edging towards "paralysis by analysis." Less doing, more thinking, which I never experienced as a kid. Second, I'm forced to take things a little slower because of my age and reluctance to get hurt. This means I've gradually progressed through the learning steps, which has resulted in a stronger foundation than I had as a kid. Third, and this is the big'un, I see angles I never considered before. I'll never be confused for a smart person, and I've always been one step away from "getting it" when learning most new things. Now that I'm older and more aware of what it takes to "get me there" I can better create that learning environment. Example: There is a very subtle part of the tail "pop" in an ollie that I just never fully understood until I started skating again recently, but this time I "got it."

(I realize this falls more in the "relearning" than "learning something new" category, but I've typed too much at this point to bail.)

<comment><USER14> As someone who tried snowboarding for the first time this weekend and fell over around 200 times, this gives me some heart.

<comment><USER15> Don't worry, snowboarding gets really easy really quick. If you'd snowboard for a week straight, you'd already be able to go really quick without falling and looking pretty cool along the way. The issue is most people only do it at most 3-4 days a year for just a couple hours, so it looks like it took them "years" to snowboard decently.

<comment><USER16> This. Its like learning how to do anything else using edges like surfing, ice skating, skiing. First you learn how to balance and then you learn how to turn. After that, you can basically ski 50% of most mountains (that is in bounds terrain). Just keep falling and watching how other people transition between edges and you'll figure it out pretty quick.

</comment></comment></comment></comment><comment><USER17> This article seems to be an advertisement so I don't have a positive disposition towards it.

There's this free online course: [https://www.coursera.org/learn/learning-how- to-learn](https://www.coursera.org/learn/learning-how-to-learn) which I think might be preferable to the book in the article, since it has transcribed video that you can speed up, exercises, and quizzes.

<comment><USER18> I took that course. I didn't gain much from it. There is some interesting theory about how we learn.

The best (er.. only) trick I remember: rather than re-reading material, reflect on it for a few minutes after you've read it, trying to recall and organize it in your mind.

<comment><USER19> You are probably already a great learner then. I took the course and can definitely say it was an eye opener.

Few additional tricks I picked up: * Recall(as you mentioned) is critical to understanding. Effective recall also connects a topic just learned with other known topics. * A problem looks solvable but its important to actually apply yourself and arrive at the solution. The process of learning does not offer rewards until the mind has been exercised. * Deliberate practice of poorly understood concepts. Don't fall into the trap of fooling yourself to believe that you have understood a concept or practicing problems that you are already good at. * Read through material quickly to to create a "framework" or stick- figures in the mind. Gradually add new concepts to the basic framework. * Learning is best done with frequent breaks to absorb information. Learning is also a passive process where the neurons need time to grow. * Repetition spaced across several days forces us to recall. This helps strengthen memories and filing concepts into long-term memory bank. * Better sleep helps.

I could go on. Really wonderful course.

<comment><USER20> All these are basic Common Sense, aren't they though? In fact, structuring them like this appears to take all the fun out of the process of learning, reducing it to a mere mechanical algorithm.

My take is this - you learn best when you are curious or can get curious about something. That kind of learning sticks. Or maybe I'm just different.

<comment><USER19> When im reading purely driven by curiosity, I find myself skimming for new info, giving myself shot after shot of dopamine by going "Aha! familiar", "Aha! know that", but never really doing full justice to the text. I feel like all these years of curious reading has given me a mile of breadth but only and inch of depth in many topics.

The course teaches not just "how to learn" but really "how to learn and become a master of the subject". While being curious and interested definitely gets the learning cart rolling, I doubt one can become a master without deliberately focusing on weak areas of understanding, practice and reflection -- all painful tedious stuff. For me learning sticks when I associate it with things I already know, zoomed in and out a couple of times to both understand a concept itself and how it fits in the big picture. So I do believe having "a method" to learn and deploy new learnings.

Some like me grew up in a culture of rote learning where we repeatedly read and smear the same text over and over again hoping something would stick. A lot of the teaching of the courses were completely counter-intuitive to me. I have spent close to 25k hours studying CS in an academic setting and could have saved myself so much time studying effectively. I've been working in SV for several years now and into some serious studying again so this course was very timely for me.

</comment></comment></comment></comment></comment><comment><USER21> It's not that we are getting dumber. We are just changing our skill set. Remembering where to find a set of information or how to find a set of information is more effective than remebering each item in the set. Search engines have changed us so we don't have to remember trivia and can focus on larger ideas that can't be searched.

<comment><USER22> Except that without knowing those useless trivia you won't even have the chance to draw connections and associations between them, which is essential for working with these "larger ideas" of yours. No, search engines won't make up for simple lack of knowledge. You have to know what to search for in the first place.

<comment><USER21> I see your point, and I feel you have unfairly made my comment mean something much more than it originally was intended to be. I want to make it clear. I am not advocating not knowing things. I am advocating that some things are "trivia" and some things are not. I feel from your post that you have put more things in the "trivia" category than I would.

This article opened up asking a single question; "what's the capital of Australia?" -- in an attempt to make the reader feel dumb. The name of a capital of a country you don't live in is just the sort of data I would classify as trivia. Knowing that there is something called an atlas, or even more precise that there is a book that organizes this sort of information, or even more recently a website that you can ask this question to and receive back reasonable answer is far more important to know than knowing Canberra is the capital of Australia. Without knowing where to find or how to find the answer you would just have to answer "I don't know", but knowing these other concepts would allow you to answer "I don't know, but I am reasonably sure I can find out".

It should also pointed out that countries have capitals -- is the "larger idea" \-- and the fact that Canberra is the capital of Australia is triva. A good way to look at this; things that have unique names but can be categorized in groups are often trivia and the groups they make are the knowledge. The article actually picked a excellent topic to illustrate this notion. The big ideas are countries, states, provinces, territories. Learning the unique names of these things teaching you nothing new -- other than the name. No new ideas are conveyed by learning a new name. Learning that there are states and provinces, how they work, and what their differences is far more valuable than the names of each of the individual states and provinces. So yes, not knowing the triva can still allow you to work my "larger ideas".

<comment><USER23> I wouldn't dismiss trivia so ... trivially. Trivia has value.

Getting to know the capital of a country is like creating a tiny hook onto which other information accretes. It creates a sense of familiarity about a place, which sensitises you to other news about the area (for example, the #StopAdani movement which, tragically, is going to fail).

Five years back, I started playing these trivia games at Sporcle (sparkle.com). I mean, what is the use of knowing all the periodic table elements? Then it turns out, a niece independently fell in love with chemistry and the periodic table, which has opened up a nice new channel of talking to each other. And I'm looking forward to visiting Ytterby[1] this summer

[1] [http://www.slate.com/articles/health_and_science/elements/fe...](http://www.slate.com/articles/health_and_science/elements/features/2010/blogging_the_periodic_table/ytterby_the_tiny_swedish_island_that_gave_the_periodic_table_four_different_elements.html)

<comment><USER21> While I did take my example to an extreme to illustrate my point I think we can agree that trivia will be learned along the way, it just not what should be the meat of the teaching or testing.

Your example of #StopAdani made me smile (not because it will fail) But because it sort of proved my point. I did not know who Adani is or what they were doing. But I knew how to search and what sites to go to to get some context. I was ignorant that Gautam Adani and that the Adani group is trying to make a coal mine in Australia -- but not dumb, stupid or helpless. A week from now I will likely have flushed Adani from my mind, but I will remember some company is trying to setup a coal mine and there is some movement to stop it. I will likely remember that I can find more information about this on my hacker news comments history and from there be able to then provide the remaining details.

What I think you have touched on is something entirely different than learning a skill that will provide lasting enhancements to your life. Learning to tie your shoe, or riding a bicycle is a lasting life long skill. Learning that a multinational corporation from India is trying to open a coal mine in Australia is a current event. At most will give you a good talking topic with a buddy where you can exchange trivial information -- much of which you will forget years later.

After writing this I realize that yes, having a relationship with your niece is will provide lasting enhancements to your life, but I think we can all agree the type of knowledge we are talking about here is not relationship building or social skills. While knowing trivia is definitely a good skill for those things it's not the type of knowledge and skill sets I have been talking about.

There was a journal entry [1] by Richard Feynman shared with me on HN recently -- strangely enough on a very similar topic -- thanks stcredzero. I think this journal entry shows the dangers of trivia teaching and testing and why as a society we need to accept not knowing a easily looked up question does not make someone dumb or stupid. We should be concerning our self with ensuring we know the concepts, how to apply them, and how and where to lookup the information needed to complete the loop.

<rant> On a side note, I link to think of my computer as an extension to my mind. I dabble in many areas of computers and robotics. I could not possibly remember everything needed to do the things i do. Maybe I have subpar memory. And remembering how to find things and answer my own questions with the resources of the computer and internet is a cheap hack. Nevertheless it has allowed me to do some pretty amazing things that I otherwise would have not been able to do. The particular skill I have is something that is becoming more popular and mainstream. I think they call it critical thinking. The particular subskill of critical thinking is problem solving. If I relied on trivia and came across something I did not understand and lacked the skills of knowing how and where to find things I would have not achieved a 1000th of what I have. Bringing this back to the original article and its attempt to make the readers feel dumb because they did not know the capital of a random country -- without critical thinking and problem solving skills and the ability to recognize I have a problem in the first place, I could never have solved the problem. I would have just thrown my hands up and said welp, I don't know, shit out of luck. We are only lucky the the dialog in the article told us the capital, as we were told no googling although they did not say anything about looking up the answer in a atlas. </rant>

[1] [http://v.cx/2010/04/feynman-brazil- education](http://v.cx/2010/04/feynman-brazil-education)

<comment><USER23> That Feynman link was very good indeed. Your point is well-taken. There is not enough time and energy to be interested in everything. At the limit, one can say that being interested in everything is being interested in nothing.

At the same time, I must say that playing around with random Sporcle trivia quizzes keeps paying off in unexpected ways, both in my work and social life. As I think about it while composing this response, it seems like the payoff is in making connections with people, although I play without having an end in mind or make a particular effort to remember anything. It is not the individual trivia point; it is more the stochastic effect.

</comment></comment></comment></comment></comment></comment><comment><USER24> The trick to learning new things as an adult is to never stop learning. For many people university (or highschool, for the slightly less fortunate) is the last time they will actively learn, after that they are 'done learning'.

But you're never done learning! In a world that changes as fast as ours does you'll be learning until you die if you want to keep up and stay relevant in the near future. Even more so in the IT domain.

So don't stop learning, or you'll be playing catch-up with very little chance of success once you do stop.

<comment><USER25> I wish people would understand that such a world means that new children have less and less of a chance at success.

<comment><USER24> No, that's not true. They will simply have a new baseline when they exit their secondary education.

Secondary education levels have been a moving target ever since we started educating people to the state-of-the-art. It's been a long time (centuries, really) since an individual could hold the complete state of science in their head so it is _all_ teamwork now and nobody knows everything.

So if you do your education today you simply learn more of something narrower.

</comment></comment></comment><comment><USER26> How to learn new things as an adult:

1) Accept that you're going to suck at the thing.

2) Do the thing.

3) Keep doing the thing.

<comment><USER27> Brain plasticity and learning "power" aside, I believe the biggest difference between learning something as a child and as an adult is simple how conscious we are that we're trying to learn something and how much we self-reflect and analyse our own abilities and progress.

As a child we typically do things just because we enjoy them, and often don't have an idea of a goal or target, other than simply doing the thing because we find it intrinsically fun. As an adult however we become highly analytic, self-reflective and critical of both ourselves and others, and we start to do things with a consciousness and awareness of others.

Additionally, by the time you reach adulthood there's a high chance that there's a thing that you've done enough to be in a fairly experienced position with, so anything new undertaken as an adult will now be judged in terms of the things you can already do, which means it will feel difficult and you'll believe that you suck at it. Which you do, because you're a beginner, and that's normal and is precisely what it means to be taking up something new!

While trying to play the piano as a child I had no thoughts of achieving a goal or getting to a specific level, and I certainly didn't compare myself to others. I just did it because it was fun. By the time I was more conscious of enjoying it and knew that I wanted to learn more seriously I'd already acquired a basic level of keyboard fluency.

So, having bought a guitar a few weeks ago and finding that all of a sudden trying to acquire a new physical skill is actually difficult (particularly important to remember as a developer where often what we're learning is a variation on an existing technique), I keep having to remind myself that it only feels difficult because it's new, and it would feel just as difficult if I were starting from a younger age, except I just wouldn't be so darn self- conscious about it.

<comment><USER28> How far along are you with the guitar? I bought mine in 1996 and have been trying to learn it on and off since then. I still don't know a single song, other than the little toy songs in the Hal Leonard books (and only if I have the books in front of me). It's incredibly frustrating.

I bought a second guitar a few years ago to keep at work and I use it during times when I need a break. Even though all I do are scales and nursery rhymes, it's still pretty relaxing.

I've had two different teachers, I've used games like Rocksmith, I've done online self-study courses (Justin Sandercoe seems like a wonderful person), bought the sheet music for my favorite records, etc...

My kids, on the other hand, made progress on their instruments (piano and violin) unbelievably quickly.

<comment><USER29> Scales and nursery rhymes?

If you want to play songs learn chords. Learn A, D and E, play wild thing. Takes like 20 minutes play badly, a couple of days to play ok.

Scales are for soloing rather than rhythm guitar.

<comment><USER28> I know some chords: A, Am, C, C7, D, D7, E, Em, G, G7

I can switch between those fairly fluidly.

Even Wild Thing has a solo part in the middle. A, D, and E really aren't enough, are they?

Can you name a few other _real_ songs that you think are early beginner level?

<comment><USER30> Knocking On Heaven's Door was the first 'real' song I could make sound halfway decent.

<comment><USER28> Bob Dylan's version?

Any other suggestions?

<comment><USER30> Yes, Dylan's version, you can do it with only about four chords.

Others I have enjoyed learning are REM's Country Feedback (not the slide bit, the chords) and Bowie's cover of Jacques Brel's Amsterdam - this has an F but you can get away with Fmaj7, which is much easier.

I'm very much a beginner too - coming towards the end of the Justin Guitar beginner's course. The song book that goes along with it has some good tunes.

<comment><USER29> That reminds me, Blowing in the wind's an incredibly easy to learn song too, four chords, easy progressions, only one quick change to an easy Em (I believe).

[https://tabs.ultimate- guitar.com/b/bob_dylan/blowin_in_the_w...](https://tabs.ultimate- guitar.com/b/bob_dylan/blowin_in_the_wind_ver3_crd.htm)

You can also do it without the Em, but it doesn't sound as good.

[https://tabs.ultimate- guitar.com/b/bob_dylan/blowin_in_the_w...](https://tabs.ultimate- guitar.com/b/bob_dylan/blowin_in_the_wind_ver10_crd.htm)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER31> My favorite teacher in grade school, and echoed by my favorite teachers later in life, told me that the most important thing they are trying to teach us is how to learn because we'd all be learning for the rest of our lives.

I still strongly agree with that sentiment, but the difference/problem with learning as an adult is two-fold: _why_ I am learning, and how much time I have to learn/apply that knowledge.

There is a difference in learning material to 'ace' a midterm/final exam, versus learning something to figure out a novel way, or picking up a new technology, to accomplish some task (e.g., at work). Part of the difference is who decides what can be "pruned", and especially when. I think back on all the 'stuff' I knew I would never need again once the final was over. Admittedly, I wasn't always correct, but age and experience increased my hit rate, and what subjects I under or over estimated could be whole other threads.

I am retired now, but have gotten into learning, mostly just for fun, some of the most complex (nasty) subject matter that I never had time for before. If I want to go off on some tangent, or deep dive, I can. The amount of free (or inexpensive) courses out there is wonderful and exciting.

</comment><comment><USER32> Motivation and perseverance are the keys. If can somehow keep those fires burning in the long run, you'll do well.

My problem is that I tend to get really interested in learning something, work really intensely at it for a while, then get bored and move on to something else, leaving dozens of unfinished projects in my wake.

<comment><USER9> > My problem is that I tend to get really interested in learning something, > work really intensely at it for a while, then get bored and move on to > something else, leaving dozens of unfinished projects in my wake.

This isn't necessarily bad, just that the thing you learned wasn't actually something you needed to learn. I don't mean that negatively though. For example, I use JavaScript and Python at work. I recently read a Haskell book and learned enough to do its exercises. I won't use Haskell at work any time soon and I don't have that much time for personal projects... so was it a waste of time? I don't think so, since I enjoyed the process of learning and a lot of concepts will stay with me.

If you want to do project X and can't focus on learning what you need for that, that's a problem. Otherwise, you're not much different from figures such as Theodore Roosevelt who'd read books on a thousand different subjects every year, for fun.

<comment><USER32> It's not a complete waste, at least not all of the time, though I do forget much more than I remember. It's just frustrating to know I could achieve something but miss out again and again and again due to lack of discipline and perseverance.

</comment></comment></comment><comment><USER33> If you really need to memorise hard numbers, use a memory palace.

By mapping numbers to consonants and then putting vowels in between you can make any word. The system I use is the following:

1 - <USER2>

2 - <USER3>

3 - <USER4>

4 - <USER5>

5 - <USER6>

6 - <USER7>

7 - <USER8>

8 - k,g

9 - p,b

0 - s,z

For example, Pi starts with 3.14159265. Chunk this into pairs of digits: 14, 15, 92, 65, or in consonants we find, tr, tl, pn, jl. We can create a story with this: trtl, pan, jelly. To find the numbers just "invert" the story!

Shameless plug to my own blog [1], I get no advertising revenue or anything from this I would just love to share this with you guys as I feel like you guys might find it interesting. In the post I detail how I memorised the first 37 digits of Pi.

I honestly think it's amazing that I can still recall, with ease, the first 37 digits of Pi 5 (!) months after first memorising them.

[1] [http://rainymood.github.io/jekyll/update/2017/03/13/how- to-m...](http://rainymood.github.io/jekyll/update/2017/03/13/how-to-memorise- pi.html)

<comment><USER34> Does this really work? I've never had any success with mnemonics. The best way I've found to remember numbers is to type them on number keyboard from time to time and let the muscle memory do its work.

<comment><USER33> >Does this really work?

Well, obviously N = 1 but if I can't convince you with "I can recall a string of 37 digits 5 months after memorising them" I don't know what will!

It is SO weird but it just works. It's hard to explain and really paradoxical because I use it for everything now ... Allais paradox 1953 (lm => lam => drunk in dutch), Ellsberg paradox 1961 (jt => jeti => jeti chasing jedi with urns on a mountain). In my honest opinion its a skill worth learning. If this didn't convince you, Sherlock also uses it in the series ;)

</comment></comment></comment><comment><USER35> I find it much easier to learn things as an adult than I did as a teenager. I have more discipline, confidence, and experience in learning.

</comment><comment><USER36> There's some value to be gained here from orthodox Indian philosophical schools. All roughly agree to three stages of learning:

\- _shravana_ (literally 'listening', as India's philosophical traditions were mostly oral, but more broadly may be understood to also be 'reading.')

\- _manana_ ('reflection' upon that which was heard. May include exercises, debate and such)

\- _nididhyasana_ ('meditation,' may be taken to mean experience)

Further, knowing is then classified into two types - _jñana_ and _vijñana_. These correspond to mere apprehension of information ('knowledge') and integration of that into action, life and experience ('wisdom').

Knowledge is transformed into wisdom by a process of reflection which is active. Passively obtaining new information is unlikely to result in wisdom (which is useful) without reflection.

Thought this might be interesting to those in this thread who are looking to learn and improve themselves.

Questions? my_hn_username at gmail.

Disclaimer: Have studied Vedanta in India under a master (A Parthasarathy). This information may be found in his _magnum_ _opus_ , Vedanta Treatise: The Eternities[0].

[0] [https://www.amazon.com/gp/aw/d/9381094160/ref=mp_s_a_1_1?ie=...](https://www.amazon.com/gp/aw/d/9381094160/ref=mp_s_a_1_1?ie=UTF8&qid=1489989012&sr=8-1&pi=SL75_QL70&keywords=Vedanta+Treatise)

EDIT: formatting and email address.

</comment><comment><USER37> There are certain tennis strokes that adults can't learn. For instance, adults can't learn to hit a "kick" serve that has a lot of topspin. I think part of the problem is that the kick serve requires counterintuitively hitting the ball to the sky and letting gravity and spin pull it down to earth. Adults can't handle the idea of hitting up, it just seems wrong. I learned kick serves as a kid and it's like riding a bicycle, I never forgot though I stopped playing tennis for ten years. Also, some strokes decline with age. Federer's backhand is now much better than when he was in his physical peak at 26, though his forehand is probably not as good; the same is true of nearly all players, the backhand improves but the forehand declines. The more instinctive a shot is, the harder it is to maintain and learn as you get older.

<comment><USER38>
       There are certain tennis strokes that adults can't learn. For instance,
       adults can't learn to hit a "kick" serve that has a lot of topspin.

Do you have anything to back this claim? I don't believe this at all. The plasticity changes as we get older, but the human brains does not lose the ability to learn things, counter intuitive or not.

<comment><USER39> I agree - surely adults _can_ learn these tennis strokes, even if they are harder to pick up.

There is an absolutely fascinating video about plasticity of learning between adults and children that I'd highly recommend watching [1].

A man built a "backwards bicycle", where the handlebars steer the bike in the opposite direction to what you would expect. It was almost impossible for him to ride the bike more than a few feet at a time before falling off. Finally, after _8 months_ of consistent practice, he could ride it relatively well.

When he put his 6-year-old son on the bike (who'd been riding a normal bicycle for 3 years), he had it mastered just _2 weeks later_.

[1] [https://www.youtube.com/watch?v=MFzDaBzBlL0](https://www.youtube.com/watch?v=MFzDaBzBlL0)

<comment><USER40> He does say in the video that wasn't trying to actively learn to ride it. Where as the guy in this video [1] claims it only took him 1 h 29 min. You could probably argue that his age might have helped, but it could also be equally true that he used better methods of practice to achieve that goal.

Destin also admits

"It took me 8 months to learn how to do this, but I was only picking up the bike and running to the end of the driveway and back every day. I wasn't "ACTIVELY" trying to learn. Meaning... I wasn't struggling and trying to make my brain learn. I simply got on the bike every day, tried to operate it to the end of the driveway, turned around and tried to operate it back. The goal was to understand how my brain figured things out on its own, without trying to force it to. Many people have built bikes like this and figured it out in much less than 1 day by staying on the bike until they were able to master it. I had no timelines, and was using this as an exploratory activity to learn how I learn."

[1][https://youtu.be/nFw2JiWhTUk](https://youtu.be/nFw2JiWhTUk)

<comment><USER38> With that in mind I wouldn't be surprised if he could learn it in a few hours if he really put effort into it.

</comment></comment></comment></comment></comment><comment><USER41> Nootropic supplements should be mentioned here as a way to boost brain performance in general, which could assist in learning new things both for children and adults.

The scientific consensus on the effects of nootropics is kinda all over the place (there are a bunch of different types out there, and different studies for the different types), but there's enough information to make an informed decision.

I had a daily nootropic "stack" that included choline and piracetam, and noticed an improvement in recall and focus. Whether it was placebo or not, I certainly felt like I was more capable of learning than baseline.

During my foray into the nootropic world, I also came across discussions about Hericium erinaceus, or lion's mane mushrooms. Studies have shown it to increase the 'nerve growth factor' which is a key measurement when it comes to growing new neurons. And since growing new neurons and making new connections between them is correlated to learning new things, and if this factor of 'neuroplasticity' decreases with age, my guess is that lion's mane can come in handy if you are an adult and want to learn to do other stuff good too.

However, I'm no expert; maybe someone with more direct experience or knowledge can weigh in.

</comment><comment><USER42> Recommended free MOOC: "Learning how to learn"

[https://www.coursera.org/learn/learning-how-to- learn](https://www.coursera.org/learn/learning-how-to-learn)

They put some interesting brain research into that course. I started last week and love it so far.

</comment><comment><USER43> Because we're all getting `dumber in the age of Google`

What's wrong with that ? I fail to understand ? If you start putting everything into your brain, you'll soon go mad. A regular cleanup of the information in your brain to retain only what's relevant for your survival is okay. It's best such things are left googleable. What is the use of keeping in memory the capital of australia, when that trivia contributes a total `0` to do what you do.

If you keep doing, implementing and executing stuff that you are passionate about, I think you'll keep learning. Only thing is that we become more focussed as adults about our interests, than we are as children (inquisitive about everything).

</comment><comment><USER44> "I hear and I forget. I see and I remember. I do and I understand." \-- Confucius

</comment><comment><USER20> It's more about drive than anything else. If one is able to maintain one's sense of curiosity and inquisitiveness, then one can always continue learning as effectively (albeit a bit more slowly) throughout one's life.

</comment><comment><USER45> Youtube is an amazing resource. In the past I would read, but I'm finding that videos (and audiobooks) help speed learning:

Basic machining from MIT (I now need a milling machine and lathe):

[https://www.youtube.com/watch?v=-4McYKCd2Hg](https://www.youtube.com/watch?v=-4McYKCd2Hg)

Learn about Synchrotrons from UC Berkeley (Undulators and Wigglers):

[https://www.youtube.com/watch?v=1WWnxA6odso](https://www.youtube.com/watch?v=1WWnxA6odso)

</comment><comment><USER46> A much harder thing for adults is to re-learn something they already know in a different way. For example, I thought I knew how to swim until I took private lessons with an instructor. I spent most of the time 'unlearning' the wrong techniques. The muscle memory was just engraved. I know guys don't ask for directions, but if you want results, pro help can really pay off.

<comment><USER47> Why did you take private lessons if you already knew how to swim?

I also swim in a non-proper way and I recently found a "new way" of swimming after seeing some video about it, and it is fairly easy. But due to muscle memory I find myself going back to my own way.

My own way being: Imagine doing a front split[1], then pushing your body up into a standing position, while angling your upper body 90 degrees (plane with the water, that is).

[1] [https://en.wikipedia.org/wiki/Split_(gymnastics)](https://en.wikipedia.org/wiki/Split_\(gymnastics\))

<comment><USER46> I wanted to learn how to swim butterfly. This is difficult to master on your own.

<comment><USER47> Oh I see, makes sense.

</comment></comment></comment></comment><comment><USER48> > Boser explains why some of the most common ways we try to memorize > information are actually totally ineffective, and he reveals what to do > instead.

I couldn't get past the first paragraph. I don't think memorisation and learning should be conflated as it appears to be in this article. Perhaps it's the fault of the title -- clickbait?

<comment><USER49> Clearly you didn't get past the first paragraph.

</comment></comment><comment><USER12> I forgot the name of my first crush. I have since remembered it, but names still elude me.

Of course, I knew the capital of Australia.

</comment><comment><USER50> For learning just facts, solving crossword puzzles regularly helps a lot (not cryptic ones). More complicated matters are going to get forgotten rather quickly anyway unless you need them in your daily life.

</comment><comment><USER51> "A journey of a thousand miles begins with a single step".

</comment><comment><USER20> In other words what the smart folks already do. Heh.

</comment><comment><USER52> in my opinion,just absorb the knowledge or the information is not enough, we should practice them.

</comment><comment><USER53> I don't really think there is a difference between adults and children in learning, this whole piece is simply about efficiency in learning and different ways of learning.

Still I think this piece misses some points. I believe there is a threshold (perhaps different for everyone) for the types of learning the piece is about. There is learning by forcing knowledge in by repetition. If you need to remember a small list not based on any logic, this is the only way. Knowing that Canberra is the capital of Australia is a poor example for the point the author tries to make. There is no logic behind capital city names, a human choose the name and it was not chosen according to any rules. There is no understanding involved at all.

However, for a Buick (or i.e. the Human Body) it is different, those "things" work according to the laws of physics, a Buick is build using a specific design and it has a limited set of necessary components. During its operation a repeating cycle of steps is executed. There is a very limited number of states in which a Buick can function but not be completely broken compared to the number of states it can be in. If you understand how a Buick was build, you can play its function in your head and simulate what could cause the noise a person on the phone is describing.

From childhood onward this is the way I have learned, I always felt like there was a point in time in which my knowledge became like self contained ball in my head, I would even visualize said ball. There is a moment of understanding, of seeing the beauty and logic of a system. In that moment you say: "Ah yes it felt very complicated before, but now that I get it, I would have designed it quite like that actually." In programming it works the same, that moment when you understand what a class is... it's beauty, you will program differently from that moment on. In biology one can have the same but often one must conclude: "Ok I would have designed it differently but in terms of evolution, it does make sense indeed."

I have a lot of trouble learning new languages, I also struggle playing elaborate games like Descent... Until that feeling of ahhhh I understand why a game designer put that weird element in, it balances the game, it adds some unpredictability to it. Only then does it become fun.

I'm told I am a very good and fast learner and have a good memory but I feel it is not true, I use this systems approach. As soon as you understand what a carburetor should do, it becomes very easy to remember how it does it. As a scientist that means constantly updating and changing ones view of reality itself based on new evidence. It's about building a mind model but always knowing that model is an oversimplification that is only useful as long as it explains your experimental results (more specifically, as long as it explains your experimental controls).

My wife is often amazed at how I can be so highly educated and smart in some ways and so stupid or un-understanding in others. I feel it is because I sometimes lack a "mind-model" for certain things of situation that I can interact with/in, I still need to build it, or it is insanely difficult to build it. Trying to build such models for the humans in my life may my biggest fallacy yet. It leads to countless hours of grinding thoughts, simulating conversations that will never occur.

<comment><USER54> I think he was trying to make the point that the embarrassmen of not knowing the capital was going to make that fact stay in the journalists head for much more time that the mere fact of hearing it mentioned. Even if there is no logic on naming cities.

</comment></comment><comment><USER55> Spoilers: the same way you did as a kid. Just with more attention.

</comment><comment><USER56> Trick question. Australia has 8 capital cities.

[https://en.m.wikipedia.org/wiki/List_of_Australian_capital_c...](https://en.m.wikipedia.org/wiki/List_of_Australian_capital_cities)

That aside, the article is rather bunk and claims to have authority. Memorization isnt learning.

<comment><USER57> It's not a trick question at all. There is only one capital of Australia, the others are capitals of their respective states. This response is as though I asked where the US government is located and you said "trick question, there are 51 US governments!"</comment></comment>


Being confidently programming language agnostic - <AUTHOR> https://blog.bradfieldcs.com/in-2017-learn-every-language-59b11f68eee <comment><USER2> Discussion a few weeks ago: [https://news.ycombinator.com/item?id=13291593](https://news.ycombinator.com/item?id=13291593)

</comment><comment><USER3> I've been programming for 20+ years, and recently moved over to Python. Sure, I could code on day one and figure out how to get programs working pretty easily. But the nuances with it are still things I need to work on a lot. I still don't program Pythonicly, I program like a C programmer writing Python. In fact, I probably program in all languages like I would a C programmer, and that's not good enough, in my opinion.

I have fallen in love with Python because it's so damn easy to get productive, and I really want to be a great Python programmer. That takes a lot more time than the OP suggests, and requires you to immerse yourself in the patterns of the language and in the community, in my opinion. Not just dabble a bit and then check a box saying "I'm a polyglot!"

<comment><USER4> It takes a while to get used to the idiomatic constructs of a language. Luckily it's much easier than with natural languages.

My first Ruby programs were very Java like. I doubt that my first Java programs were C like, if you use classes and methods it just can't be. No problem with using Python and Ruby together. They are maybe like German and English, close but clearly distinguishable. And Javascript, Perl, PHP, Elixir... too long to write about.

A consequence of multilingualism is that one starts noticing the differences in the implementation of the same features in different languages. Some are smooth, others are frustratingly hard to use or to remember. A quick test on a trivial nuisance, you must not Google it: in Python it's array.join(",") or ",".join(array)? And "1,2,3".split(",") or ",".split("1,2,3")? I remember only that "," goes to the opposite ends in the two expressions and I can't understand why that should be good.

<comment><USER5> The first one is neither - it's string.join(iterable). If you keep that in mind then the design becomes clear - it would have been weirder to force every iterable to have some string-related method. Better to put it on string, where it more reasonably belongs.

The second one is the typical OO pattern where you ask an object to perform some operation on itself. This is how split works in just about every OO language - if you have trouble remembering it, it might be helpful to remember split can be called without any parameters - in that case your alternative variant won't make any sense.

<comment><USER4> It makes more sense now, thanks. I missed that the argument is an iterable. Ruby's join is a method of Array and of nothing else. Examples with ranges:

Ruby's range must be converted to Array.

        > (1..20).to_a.join(",")
        "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20"

Python's range must be converted to a list of strings.

        > ",".join([str(i) for i in range(1,21)])
        '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'

</comment></comment></comment></comment><comment><USER6> I know formal education often gets a lot of criticism around HN, but I think the approach the article is talking about is heavily mirrored in most university computer science curriculums.

Universities tend to focus on paradigms and patterns, and typically force a student to learn at least 3 languages throughout their education (much more if they want to). Just in my undergrad I learned C, C++, C#, Objective C, Swift, assembler, Java, Go, Javascript, Python, and Haskell. My personal experience is that university grads are much better at adapting to new languages than someone with 4 years experience in only a single language.

That's of course not to say you can't do the exact same sort of education without going to school (and probably in less time).

<comment><USER7> I think the top-10 universities do it right and the rest don't. (This is a bit of an exaggeration but you most likely know what I mean).

Most of my classmates don't usually "learn" a language. They do an assignment by copying, hammering at the computer, or just asking for help. The basis of how university is set up is antithetical to the learning and exploration of new programming languages. This is based on one simple thing that most universities do and is very easy to fix.

       Don't mandate a programming language for you assignments

If this one thing was done, we'd probably instantly see a much higher failure rate and a much hire quality of turnout. If early on in the curriculum students got a tour of every one of the big name languages and got to just choose the best tool for the job for the rest of their time at university there'd be a much closer approximation to how things (at least for me) work.

If one of your projects is something like "scrape a webpage for X data" you wouldn't want to write that in a bash script (which I've been made to do [0]) I'd want to do that in Python with BS4. Or if your project is to write a parallel dot product function you wouldn't want to write that in C (which I've been made to do [1]). I'd want to write that in Julia.

Even in my class that I took for exploring programming languages we were forced to use C++. We were writing an interpreter using C++ which I'd rather have done in some Lisp-like languages.

Unfortunatly I've not been able to make the design decition to play with other language (in school) to see how they will better impact the development of these applications. I've not had to prototype stuff to see what language it will work best in (in school). These are decitions made for me.

I've found that this isn't how things work, at least for me, and I'm the one who is told "Do X" and I pick a way to do it. Whether it's by setting up a spreadsheet it a macro in it that generates the data or writing some real code. I get to choose the most elegant solution and I suffer the consequences then I didn't choose the most elegant solution since I have to my software when it breaks 2 years down the line.

[0] - [https://web.njit.edu/~sohna/cs288/hw3.html](https://web.njit.edu/~sohna/cs288/hw3.html) [1] - [https://web.njit.edu/~sohna/cs288/hw10.html](https://web.njit.edu/~sohna/cs288/hw10.html)

<comment><USER8> There are three problems with "Don't mandate a programming language" \-- I'm a lecturer and I've done it for advanced practicals in later years.

* Students expect to be able to get help when they have problems. There is a good chance no member of staff knows Julia / Moonscript / ...

* Some languages make tasks trivial -- while this is nice when you are in the real world, if I want to test student's ability to create something I don't want some students missing most of the work. How do I then mark it?

* Similarly, if the question was "implement a malloc-like memory manager", well you really have to do that in C,C++,Objective-C, maybe Rust, but it makes less sense in python.

Also, getting a "quick tour" of (say) C++ isn't really useful, students who try to pick it up by just googling are likely to write terrible code. Learning a language properly takes work.

<comment><USER7> > Students expect to be able to get help when they have problems. There is a > good chance no member of staff knows Julia / Moonscript / ...

For this I have two answers. Past the first year people shouldn't be getting help with "my code won't compile". They should be able to develop the skills needed to search that on google and find SOF links.

The second answer is a question: Why don't members of staff know "Julia / Moonscript / ..." and if they don't why can't they logically reason about what's going on in the language without having used it? I don't know Go but when people have asked me to look at some Go code to see there is a bug I can still reason about what's happening. Isn't that what this article is about? All languages are just mix-matches of common idioms with new ways of expressing them. If the best of the best, those who are teaching the future generations of computer scientists, can't do this it would seems strange to me.

> Some languages make tasks trivial -- while this is nice when you are in the > real world, if I want to test student's ability to create something I don't > want some students missing most of the work. How do I then mark it?

If the student understands how to use the abstraction then they have likely learned something far more valuable. If you're assigning labs that consist of basic idioms that can be whisked away by common library functions then you might consider changing your curriculum to focus more on solving problems rather then codifying solutions.

> Similarly, if the question was "implement a malloc-like memory manager", > well you really have to do that in C,C++,Objective-C, maybe Rust, but it > makes less sense in python.

I see no reason why you'd have to write that in C/C++/Objective-C/Rust. If you're going after the idea of writing a working memory manager, and not write me a kernel that has a memory manager, then Python would work great for it. Here is an example:

       class Allocation:
               def __init__(self, start, size):
                       self.start = start
                       self.size = size

               @property
               def end():
                       return self.start + self.size + 1

       class FirstFit:
               def __init__(self, total_memory):
                       self.allocations = []
                       self.total_memory = total_memory

               def alloc(self, size):
                       if not self.allocations:
                               allocation = Allocation(0, size)
                       else:
                               allocation = None
                               for i in range(len(self.allocations)):
                                       current = self.allocations[i]

                                       if i + 1 < len(self.allocations):
                                               # Check to see if we can fit inbetween this current allocation and the next
                                               if not self.allocations[i + 1] - current.end >= size:
                                                       continue
                                       else:
                                               # Check to see if we can fit inbetween this end allocation and the end of memory
                                               if not self.total_memory - current.end >= size:
                                                       continue

                                       # We can so allocate
                                       allocation = Allocation(current.end, size)

                               if not allocation: # We can't so return NULL
                                       return None

                       self.allocations.push(allocation) # Store this allocation in our memory allocation table
                       return allocation[0]
               def free(self, start):
                       for i in self.allocations:
                               if self.allocations[i].start == start: # Find out pointer
                                       self.allocations = self.allocations[:i] + self.allocations[i + 1:] # Slice it out
                                       return True # We made it!
                       return False # We couldn't find this! PANIC!

This is crappy code but it can be done very eligently and I think this gets across the theory better then doing this in C. In this you can also experiment is far more complex datastructures easily. (What if I think of memroy as a Tree and divide the value of my node by 2 every time it's size is too big?)

> Also, getting a "quick tour" of (say) C++ isn't really useful, students who > try to pick it up by just googling are likely to write terrible code. > Learning a language properly takes work.

I'd say that's just because of the poor design of modern C++. You can do a quick tour of python and easily get basics, of C and easily get the basiscs, of Java and get the basics, of Common Lisp and get the basics. You don't need to master a language to see where it is applicable.

<comment><USER8> > Why don't members of staff know "Julia / Moonscript / ..." and if they don't > why can't they logically reason about what's going on in the language > without having used it?

If the bug is a shallow/algorithmic bug, that's reasonable. Recently I was helping someone debug some javascript code. Eventually, we found the problem was that, in javascript, that [11] < [2]. I'm not particularly knowledgeable on javascript, so I didn't know it did < comparison of arrays by string comparison. That's the kind of thing that really needs.

> If the student understands how to use the abstraction then they have likely > learned something far more valuable. If you're assigning labs that consist > of basic idioms that can be whisked away by common library functions then > you might consider changing your curriculum to focus more on solving > problems rather then codifying solutions.

This I just have to disagree with. I think it's valuable for students to learn how to implement quick sort. It's useful to learn how to implement big-integer arithmetic. It's useful to learn how you can "fake" Java-style inheritance with structs and function pointers, so you really understand what's going on under the hood.

Of course long term, you wouldn't typically implement these things yourself, but understanding the fundamentals is important.

Also, if I set a practical which involves (for example) connecting to a HTTP server, intending them to do the raw connection themselves, and they use a 3 line python program, using the standard library, have they really learnt anything at all?

There certainly is a place for giving students more freedom, particularly in later years. It's clear the modern world is moving into "slap together 50 javascript/python packages with string" type programs (and that's because it's a great way to be productive quickly), which universities don't currently teach that well. But don't throw the baby out with the bathwater!

<comment><USER7> > This I just have to disagree with. I think it's valuable for students to > learn how to implement quick sort.

I'd rather the students kow how to implement large software architectures, keep line counts down, abstract problems correctly, and learn how things are done in the real world.

> It's useful to learn how to implement big-integer arithmetic

Not in my opinion. Maybe, maybe, show them how emulating FP math works but writing big-integer arithmatic functions is pretty useless for most people and is far too strait forward to require them to develop their skills of development software architectures.

> It's useful to learn how you can "fake" Java-style inheritance with structs > and function pointers

You can't force them to learn patterns, you can only give them work that is better suited to using the patterns provided. You can even hint to your students "Hey you can make a get_car and get_bike and make a Drivable struct that has a Drivable->stear() and stear can be a function pointer!" Forcing them to use a pattern isn't useful.

> so you really understand what's going on under the hood

Using function pointers isn't really correct for how Java stores class/object information. This is kind of only used in virtual functions IIRC. When I've decompiled static bytecode you see stuff like LString(some function).

> Also, if I set a practical which involves (for example) connecting to a HTTP > server, intending them to do the raw connection themselves, and they use a 3 > line python program, using the standard library, have they really learnt > anything at all?

You're assigning the wrong problem. Don't say "Make and HTTP request" say "implement an HTTP header parser". The problem is now language and abstraction agnostic and involves a much more complex problem who's complexity lays in the realm of the software organization. The HTTP Parser code can be used to read and write requests and the next lab can be to use your new library in a larger project. I think that is far more useful.

> There certainly is a place for giving students more freedom, particularly in > later years. It's clear the modern world is moving into "slap together 50 > javascript/python packages with string" type programs (and that's because > it's a great way to be productive quickly), which universities don't > currently teach that well. But don't throw the baby out with the bathwater!

There is a measurable reason for this and it's not because of productivity. It's about maintainableilty, consistency, and bug erradication. I'd love for you to read this paper Do Code Clones Matter? [0] to see what they have found.

Making it so people know how to:

       * List all the featurs that a library will need
       * Take those features and write them in a clean API
       * Do it in the most clean language-specific way (ex Pythonic code)
       * Distribution methodologies
       * Maintainablilty and support of these libraries
       * Using these, and others, libraries in larger applications
       * Documentation & Technical writing

I'd really love it if you could email me and follow up after you read that paper and tell me what you think. My school username is jk369 and my school's email server is @njit.edu. (I've split this up to avoid spam)

[0] - [https://arxiv.org/pdf/1701.05472.pdf](https://arxiv.org/pdf/1701.05472.pdf)

<comment><USER8> I will look at your paper, but I think it depends what your target is, for students.

Many of our students go on to do PhDs. For that an understanding of deep algorithmics is much more important than being able to use and distribute a library, or building larger applications. They need, in their field of student, to be able to reimplement and understand many important difficult algorithms, not (for example) put together some node.js libraries.

However, there is a place for that kind of degree. Someone once said to me something which stuck with me: "You wouldn't try to merge a maths, and accounting degree, just because they both contain numbers", yet that's still what we do in computer science.

<comment><USER7> > I will look at your paper

I just want to make sure, and state for everyone, that I'm far too lazy to do work that good. That's done by people much further along in their development of their profecian then I. Not my work just something that I think is good.

> Many of our students go on to do PhDs. For that an understanding of deep > algorithmics is much more important than being able to use and distribute a > library, or building larger applications

It depends on what their PhD or major is. Many CS majors here go into math and physics and they would have done better to learn how to write pythonic (or matlabic?) code and learn how to correcly design APIs. For instance, tonight I'm going to be rewriting a library from Python 2 to Python 3 and I have no way to tell if there's been any regression because of a lack of testing frameworks, consistentcy in APIs and lack of modularity. I'd be basically impossible for me to mock even single parts of this.

> They need, in their field of student, to be able to reimplement and > understand many important difficult algorithms, not (for example) put > together some node.js libraries.

I don't think left-pad is a good charictarization of my position here. I think that the hardest part of large scale software development is the architecture portion and that's mainly because very few people ever actually start large complex projects on their own and no universities offer courses in such a field that practicies that.

> However, there is a place for that kind of degree. Someone once said to me > something which stuck with me: "You wouldn't try to merge a maths, and > accounting degree, just because they both contain numbers", yet that's still > what we do in computer science.

The moment you, or one of your coworkers, creates a major like that (Software Engineering and Developemnt or something) I'll be transfering over from my Computer Science degree. It's useless for anything but the name and the prestige that gets my foot in the door for a lot of very fun and interesting opportunities. I've had to hobcobble together everything I've needed to learn from a software perspective on reverse engineering, bare-metal systems devlopment, assembly, networking, game development, operating system development, web development, and many abstractions/patterns that go along with all of those. It was very difficult and I'd rather have given 30k/year over 4 years to a school who could teach me the "real" way from "professionals" and end up with a piece of extremely expensive framed paper that says my name and "degree" on it.

I'd also like for a school to hold my hand while exploring different paradigms.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> I used to arrogantly think I could be productive in any language given a week or so to adapt. I often used the phrase "a good dev is a good dev in any language." That belief was rather abruptly broken when I joined a project using C++/CX it was so far outside of my previous experience that I had a really bad time of it.

I happily picked up the actual language very quickly. It was the surrounding ecosystem of compilers, build tools, debugging tools, libraries, standard patterns and best practises that was too deep for me to become proficient in.

That said. Learning every language you can is definitely beneficial. Just don't expect to hit the same level of productivity in all of them.

<comment><USER10> I agree. It's not always the language which makes it tough to integrate yourself into a project, sometimes it's all the frameworks, libraries, build tools, and general makeup of the project itself.

I worked for a company a few years back doing ASP.NET (my experience is mostly Linux based tech, but you can pick up a language, right?). The language was fine, the design patterns used all quite standard, but the project had an array of frameworks and libraries which made maintaining it painstaking.

In fact, I think you worked on it too.

<comment><USER11> I still find the "frameworks and libraries" argument to be false, but enough people say it that I believe it must be at least partially true. I'll settle for a belief that the argument is overstated.

IMO the largest issue is the breadth of one's experience, or lack thereof. And by that I don't mean simply the number of languages but how well versed one is in _different_ languages and their surrounding ecosystems. For instance having good knowledge of both C# and Java isn't what I'm describing here.

<comment><USER9> I think it's about how much newness you have to handle at the same time. I can happily take a project using a framework or two I've never touched before. Or something in a new language but similar domain. But when you have the perfect storm of new language, tools and framework (and maybe OS) that's when it hurts. I'm not saying I totally couldn't switch, but it made me change me attitude a bit from '2 weeks and I'll be back at full productivity' to something more like '2 to the power of number of new things'. The more newness that has to be handled at the same time, the longer it takes to pick up all the interconnections.

<comment><USER11> This is also true, I would say it's a combo of the two. The more new things at once the more likely it is that you'll be working with something without a good correlation to something in your previous experience. But at the same time having a broader and richer base of experience will make it more likely that you'll have an easier go of it for any of those individual things.

</comment></comment></comment></comment></comment><comment><USER12> I think nowadays people spend too much time learning new tools and too less time doing something really valuable using that tools. I wish I had only one language, so I can concentrate on more interesting things rather than learning yet another random set of operators and library function's names.

<comment><USER13> While using fewer, better languages for more is fantastic, I doubt you really want a single language.

Try replacing shell, Structured Query Language, and C with the same language. I won't say that it can't be done, but I think you'll lose a lot if you succeed.

<comment><USER14> I'd hope that with embedded DSLs we can get closer. People are already doing lots of it in Haskell, including domains you listed. Of course there is always the risk that one invents an "inner language" with poorer semantics and tools.

<comment><USER15> Haskell is a pretty good host for DSLs. But if you want to go lower level than Haskell, you have to essentially write compilers for your embedded DSL rather than the usual interpreters.

And of course, Haskell's type system is not endlessly flexible (yet..). Eg Haskell still struggles expressing relational programming or linear types / uniqueness.

<comment><USER14> Yes the low-level DSLs tend to become their own compilers. But the good thing is that they as a side-effect also have an API, so they can hopefully be reused for new DSLs. Interoperability of different DSLs does not neccesarily follow though, unfortunately...

<comment><USER15> Yes. And of course, you still need to write a decent compiler to produce decent code.

The situation is similar to Lisp macros: yes, you can implement Prolog in Common Lisp in a few lines, but no, it won't be a fully featured and fast production system, unless you actually put in the work. (Paul Graham's 'On Lisp' makes these excellent points in the chapter on the Prolog interpreter.)

Of course, you might want to go all the way to dependent typing. I think one of Ysabelle or Idris actually compile to 'low-level' languages like Haskell by default?

The main benefit I would like to see in Haskell is totality / termination of programs by default, and hiding Turing completeness behind something like unsafePerformCompute. Similar, we could split IO into IOReadWrite and IOReadOnly.

The former would be the same as the old IO, the latter's actions could depend on the environment but wouldn't be allowed to influence it (or weaker: would at least require idempotence?)---thus allowing more scope for optimization and human understanding when reading code.

</comment></comment></comment></comment></comment></comment><comment><USER16> After you have some experience with, say, 3 to 5 different languages, you can learn new ones very quickly (hours, days) with little effort because you know almost all of the core concepts (OOP, FP, mutability, generics, ...). There's no point in learning "all of the languages" for its own sake. Just learn a bunch of different ones to learn different ideas and programming styles.

What takes more time is the standard library, common libraries, tools. A good example of that is iOS development in Swift. Learning the language is almost negligible compared to learning all of the technologies and tools. But coming from Android, I think I'm close to about 50 % of full productivity after two weeks.

I never understood why there's so much focus on the "x years experience in y" in the industry. A solid developer should be able to become fluent in any language and technology within a month or two.

<comment><USER17> "I never understood why there's so much focus on the "x years experience in y" in the industry. A solid developer should be able to become fluent in any language and technology within a month or two."

I don't think any developer can become fluent at a new language in 1-2 months. I have seen so much terrible code over the years the compiles and appears to run just fine but with massive performance issues, poor design, unreadable, security issues, memory leaks, etc. etc.

I see learning the syntax of a language to be something like 0-5% of the effort of mastering a language, knowing how to properly use a language really does take years. Although I agree that # of years of experience is not a perfect metric.

</comment></comment><comment><USER18> I'm glad that the trend is slowly going towards hiring generally smart people instead of a "PHP/Rails/Python programmer". I'd say, better hire people that can easily adapt something new if needed rather than saying "I am a PHP programmer, I don't want to do this new project in Ruby." (I met my good share of people in previous companies thinking in that way to the extend that they would quit if asked to write in something else than what they were hired for)

In my current company they were looking for a Go programmer. I never wrote a single line Go before, yet they hired me and now I am writing Go. Then we had a deficit in the iOS team, so I learned Swift and now work on our app.

</comment><comment><USER19> I have a sort of an issue with learning a lot of new languages. As much as I like to try them out, I like (and have) to learn things like big data processing or devops stuff and distributed systems and so on. And to be honest, when I get into the theory of those fields, the language does not mean so much. At the end I end up using what the targeted industry is searching for, and they do not need languages, they need solutions. And the language is rarely a solution.

In that set of things, a new language is somewhere lower in the priority list for learning new things. Sry.

</comment><comment><USER20> A few recommendations on this, since at where I work a talk is organized on this very topic today.

1\. A great book that covers multiple paradigms of programming is Roy and Haridi's "Concepts, Techniques and Models of Computer Programming" [https://mitpress.mit.edu/books/concepts-techniques-and- model...](https://mitpress.mit.edu/books/concepts-techniques-and-models- computer-programming) . This stands hand in hand with the better known SICP.

2\. Folks in the CS and programming world seem to ignore bleeding edge work being done in the arts space. To get a broader view of languages than "characters that go into a plain text file", expose yourself to the live-ness of the following -

2.ø Smalltalk - one of the first fully available language and runtime that is still usable today.

2.a Max/MSP/Jitter - by David Zicrelli and Millet Pickette's - Visual data flow programming language with decades of dominance in the Computer Music scene.

2.b SuperCollider - for architecture lessons as well as another multi-paradigm language.

2.c Impromptu - a Scheme based live coding environment for music and visuals by Andrew Sorenson. Normal REPLs will bow in front of most "live coding" languages used for music.

2.d Ixilang by Thor Magnusson - another live coding language, where the language is in a sense inseparable from its run time environment. The current running behaviour of a textual program could also depend on how the program evolved.

In short, break out of normal modes of thinking and attain Turing nature, at which point you can proclaim that all languages have Turing nature and yet retain your discriminating view.

<comment><USER21> A few other data flow programming languages, LabView (which has been around for a very long time) and is extremely popular for data acquisition (it's basically the goto choice most of the time) and the Houdini computer graphics software (there's other examples in CG as well). I pick Houdini because there's a version people can download and try. It actually works pretty well for most things.

</comment></comment><comment><USER22> I feel we are starting to lose the plot. The problem isn't about learning another language or which to use next. Instead it is about how to solve and represent complex problems and systems in code.

Any language is a means to an end, not the end itself.

Focusing on languages and language constructs is of value to those in academia and those working solely in the domains of computing and computer science. For the rest, it is the equivalent of navel gazing, the equivalent of focusing on grammar, when the task is authoring a novel.

<comment><USER23> I agree whole-heartedly. However, as we take on projects of larger scope and complexity, reflecting on the craft in a measured and skeptical way can be powerful and productive. It's a tricky line to walk.

</comment></comment><comment><USER24> Languages are easy, libraries are hard.

<comment><USER25> This seems to be the message fron most of the comments

<comment><USER24> I'd be surprised if it wasn't. This is immediately obvious to anyone who's tried to solve practical problems in languages, rather than just learned them for resume embellishment purposes. That's also why sane companies limit the languages that can be used for development: if you let your "theoreticians" run wild, you will soon end up with code written in Brainfuck and Malbolge using libraries no one understands. I'm exaggerating, obviously, but only slightly.

</comment></comment></comment><comment><USER17> Interesting article, love the emphasis on continual learning.

But I actually think we (software devs) need to focus more on mastering languages as opposed to learning many languages at a surface level.

Books like "Effective C++" ([https://www.amazon.ca/Effective-Specific-Improve- Programs-De...](https://www.amazon.ca/Effective-Specific-Improve-Programs- Designs/dp/0321334876)) really showed me the huge divide between knowing a language and mastering a language.

</comment><comment><USER26> I think Norvig and the author are wrong about "parallelism" requirement. I mean it's good to know what's out there, but you can't really understand it if you try to learn it from a multithreading point of view. Fundamentals for it are part of distributed systems and this is where people should get into and learn things about ordering, consensus, asynchronous and synchronous systems, etc.

<comment><USER15> There's of course also the distinction between parallel and concurrent.

<comment><USER26> Yeah, they are mixing all kinds of things together, Go with Erlang and even throwing a GPU in there. These are all very different worlds and none of them teach you fundamentals. I remember how useless the parallel programming class was, I only started to understand the underlying ideas behind semaphores, mutexes and memory barriers long after I got into distributed systems.

</comment></comment></comment><comment><USER27> It's far from enough to know a programming language. If someone knows how to write binary search on C++, he can rewrite it on Python, JS or C# pretty easily.

But software development is not about writing pure functions, it's about writing applications, so frameworks and good practices is more important than the language.

</comment><comment><USER28> What you should really do is learn the concepts of structured programming. Every language is just a notation on top of a fundamental programming construct. If you learn those instead, you'll know every language.

I recommend reading Exercises in Programming Style by Cristina Lopes as a good starting point.

</comment><comment><USER29> CPU is managed by the Kernel, and Memory is managed by You in C/C++;

CPU is managed by the Kernel, and Memory is managed by Perl/PHP/Python/Java;

</comment><comment><USER30> I think that learning C before C++ might hurt you.

[https://www.youtube.com/watch?v=YnWhqhNdYyk](https://www.youtube.com/watch?v=YnWhqhNdYyk)

<comment><USER31> Note: I didn't watch the video yet and my opinion might change by then.

C teaches you something very useful, which is how the computer works under the hood. Most things you do in C loosely match to what the computer does, and learning C helps you understanding the computer.

I'm not saying that it's a good language to start with, but it's okay. Unlike C++.

IMO, C++ is the worst possible language to start with. The reason for this is that C++ tries to support everything, often using handy but cryptic syntax. C++ doesn't guide you to program one way or another, it simply adapts to every possible way to solve the problem. This might be good on the hands of someone that already knows how to solve the problem, but it's completly overwhelming for a begginer. It feels like you're taking the wrong turn at every step.

A much better alternative would be JavaScript. Yes, it does have flaws, but it's much simpler and has personality.

<comment><USER30> The argument is that learning C before C++ teaches you how to program C++ wrong. Nothing more, nothing less.

I wasn't judging C++ as a beginner language. I wasn't judging C either.

<comment><USER32> IMHO "wrong" being mostly the opinion of the evangelists who think C++ is a completely different language, and have been trying to push it in that direction, but it's still mostly C at the core with a _thick_ layer of abstraction/indirection on top. Don't believe all the hype. "Climbing the ladder of abstraction" is the best way to learn how everything works.

</comment></comment></comment></comment><comment><USER33> An excellent article, well worth reading. As it points out, implementing the idea of learning a programming language for the sake of learning requires being highly selective in deciding which languages to learn. One language I would advise against learning is C++ - because, first, it may take too much time to learn to be worth the effort, and, second, the language itself is not all that interesting, and its standard library (especially STL), while does bring some novel ideas to the table, is so heavily affected by the particulars of the language itself, that maybe the D language would serve the same purpose better. Also, please do yourself a service and learn C# instead of Java. (This is not to create any doubt in the _extreme_ usefulness of learning both C++ and/or Java for practical purposes.)

<comment><USER34> > Also, please do yourself a service and learn C# instead of Java.

Nah. Learn whatever takes your fancy. Or whatever you think will get you a job. Or learn whatever you can get tutored in because it's almost always easier to learn when you have someone you can ask questions to in person.

Learn structure and logic, but don't tell anyone they're less of a programmer because they use X instead of Y.</comment></comment>


FCC chairman acknowledges Russia interfered in net neutrality public comments - <AUTHOR> https://thehill.com/policy/technology/419846-fcc-chairman-acknowledges-russia-interfered-in-net-neutrality-public <comment><USER2> This would be interesting if the process were that the FCC accepted public comments, and made a decision based on evaluating those comments. Then it would indeed be a problem if the comments weren't representative of American public opinion.

However, it seems that FCC had pre-decided, based on top-down politics, what they were going to do and the public comments were a formality.

So focusing on who made what comments, and the details of technical failures in the comment process, is a distraction from the issue that matters: should your cable provider be able to decide what websites you can visit?

</comment><comment><USER3> Just release the data already. We want to know who faked the anti net neutrality comments, too.</comment>


Installing Antergos Linux on an Ideapad 720s dual booting with Windows 10 - <AUTHOR> https://medium.com/@bigilui/installing-antergos-linux-on-a-lenovo-ideapad-720s-amd-ryzen-dual-booting-with-windows-10-1ac8e2bd94a6 <comment><AUTHOR> It has been tricky installing Linux on the Lenovo Ideapad 720s and I wanted to write down all the research I did to get it working. It was also my first time playing with an Arch-based distro (Antergos) and it has been fun. Hope someone will find this helpful.</comment>


Domesticating Kubernetes - <AUTHOR> https://blog.quickbird.uk/domesticating-kubernetes-d49c178ebc41 <comment><USER2> Why would you do this for simple home apps? k8s is complete overkill. At home, there is little reason to drag in all that complexity to host a blog or whatever.

Kubernetes drags in a tremendous amount of complexity, background knowledge, and strange constraints, even on small installations. I really do not see its benefit for small apps and projects.

Are you hosting your blog? You don't need k8s. Are you running a small app server at home? Nope, don't need it. Are you running an auto-scaling app with many hundreds or thousands of worker instances, and need to support non- disruptive roll-in upgrades across multiple clouds and have many services which need to scale independently? Maybe you need k8s, but only in some circumstances.

For the record, I run many k8s clusters across several clouds, using 1,000 - 50,000 cores at any one time, so I've dealt with quite a bit of k8s complexity, and I'm still on the fence whether it's the right answer for us, but it's allowed us to standardize our software to k8s and only worry about getting that running well in each deployment, which put the cross-cloud work on the infrastructure teams versus the software development teams. The price you pay for this is that you still need to do non-k8s stuff if you need some cloud specific resources more than simple compute and routing, so you have both k8s and cloud specific code.

<comment> g-clef I'll bite.

One thing I found in running my home lab was that I kept having to burn it to the ground & rebuild it regularly anyway. For example, dist-upgrade never really works: every time I try I just end up wasting a couple days wrestling with it and then giving up and rebuilding the machine from scratch. Even if I just assumed that I'd have to build from scratch every time, differing app and library versions meant that I couldn't count on a new build being a simple, clean install.

So going with the regular "run things as a daemon on a server" model wasn't actually saving me that much time.

Basically I could to do one of two things:

1\. keep using purpose-configured machines and spend a bunch of time writing ansible scripts to automatically re-create them when everything goes pear- shaped and then re-write the scripts when a new version changes stuff.

2\. container-ize all my tasks, and make everything else vanilla and effectively disposable. I have to spend some initial time to rewrite my stuff in container-speak, but that's a one-time cost.

Presented like that, option 2 looked like a better option. When a machine has a problem or needs to be rebuilt, I build it with the completely vanilla setup (ubuntu lts, conjure-up k8s) and push my k8s jobs and pods up to it. That's 2 hours instead of a day and a half. (Yes, in theory I could docker-ize everything and run docker-swarm, but it's a small step from there to k8s, and conjure-up makes installing k8s fairly straightforward.)

Frankly, I have a family now, and fucking with fiddly settings and library dependencies isn't fun anymore. I'd rather spend that time _doing_ stuff. k8s lets me divorce my hobby work from the infrastructure, and I like that.

<comment><USER3> I think you could achieve something similar but by just using simple standalone containers that you start with Podman or Docker. Once you have the OS up and running, then all you need to do is push the configuration to the server (I just rsync systemd service files) and start the services. Persistent data is stored elsewhere anyway, so moving a service is just a matter of copying a directory over to another machine and ensuring that the permissions are correct.

k8s is probably great for many things, but as time goes on I really appreciate the ability to debug things effectively and by keeping my homelab setup as simple as possible I avoid the complexity of whatever advanced solution that is out there.

<comment> g-clef I could, but with the same effort to set that up, I could have a full k8s setup...it doesn't actually save me any time to do it the "simple" way.

</comment></comment></comment></comment><comment><USER4> I've given up running my own k8s at home a couple of times. It does seem to be getting easier, but then upgrading and maintaining breaks me again. \+ the other stuff like running your own container registry. Then with new centos podman breaks everything that worked OK in docker. I hate this stuff, so many problems its worth ignoring the whole stack.

<comment><USER5> what do you end up using instead of k8s?

<comment><USER6> I mostly use docker compose. Perfect fit for tinkering but not over complicated and huge ram eater.

Also:k3s might be an option.

<comment><USER7> Compose is great for home use.

If you run your home server on a separate box, like a RaspPi or NUC, docker- machine via SSH can make provisioning and updating a tad easier.

</comment></comment></comment></comment><comment><USER8> I can attest to RPI i/o speed: its horrible. Combined with the fact that I have to build Docker containers on the RPIs themselves(because of arm), its more of a hassle than a cool add-on (to be clear I'm running Docker Swarm in a way that isn't too different from the setup of OP).

Only reason I can see RPIs in kubernetes is if you're exclusively using ARM everywhere and/or are running some distributed cluster among different locations (like Chick-fil-a).

<comment><USER9> Is there an RPi alternative (ie. similar size, form etc.) that has better IO/Network speed?

I used RPis for my robot ([https://sendc.at/dl/Kjjbt3dij6T733YgWsyv3p3Vv5GPGKO1q5IEFStV...](https://sendc.at/dl/Kjjbt3dij6T733YgWsyv3p3Vv5GPGKO1q5IEFStVngrkI6EVupm8dtT)) with daughter boards for motor control) and they wre pretty convenient, but never really considered running anything server-like on them because they have reportedly woeful network performance.

<comment><USER10> I have this [https://www.hardkernel.com/shop/odroid-n2-with-4gbyte- ram/](https://www.hardkernel.com/shop/odroid-n2-with-4gbyte-ram/)

It's pretty powerful for the cost and has no fan etc. Arm64.

<comment><USER9> Those look sweet, thanks!

</comment></comment></comment></comment><comment><USER11> What I miss from all of these tutorials is one very important piece - how to handle network routing and dns automation within your home network, that's in typical scenario is being handled by the ingress/cloud controller. Without having automated (or easy enough) way of reaching the apps you're deploying there, each of these clusters is pretty much useless for users except for maybe learning basics of k8s, what's easier done with minikube.

<comment><USER12> Few things to do:

\- specify a LAN IP for your ingress controller so it doesn't change.

\- Use ddwrt/dnsmasq to point *.k8s.myhomenetwork.local to said IP

Once that's configured, you just configure the ingress hostname on services as you would "normally".

<comment><USER13> Also - do not use .local tld. It is a reserved one (RFC6762), for mDNS/Bonjour:

> This document specifies that the DNS top-level domain ".local." is a special > domain with special semantics, namely that any fully qualified name ending > in ".local." is link-local, and names within this domain are meaningful only > on the link where they originate. This is analogous to IPv4 addresses in the > 169.254/16 prefix or IPv6 addresses in the FE80::/10 prefix, which are link- > local and meaningful only on the link where they originate.

Microsoft used to recommend .local TLD for AD deployment as a best practice, and nowadays there are companies stuck with this decision. Do not make the same mistake; unlike companies, you probably want your zeroconf stuff to work.

<comment><USER14> So what breaks if you use "*.[lastname].local" for your home network?

<comment><USER13> On zeroconf aware systems, it is still expected to be resolved via multicast; service discovery works by looking up srv/ptr/txt records on __$service.__$protocol.$hostname.local.

How it will behave will depend on your specific stack. Zeroconf aware (Macs, iOS devices, Linux with Avahi - i.e. most modern distributions) one will use multicast, zeroconf unaware (Windows) will use your DNS resolver. Devices (printers, etc) are a toss of a coin.

<comment><USER15> I'd like to note that a default behavior of Avahi in Debian/Ubuntu/RH/SUSE prevents resolving *.local via unicast DNS to avoid this collision.

</comment></comment></comment></comment></comment></comment><comment><USER16> I think what type of k8s environment you use very much depends on what you're looking to get out of it.

If it's experience deploying applications into containerized environments, then micro-k8s and k3s seem like reasonable choices, you don't really care about the setup of the underlying components, just that they present the k8s API.

If you're looking for experience of managing k8s clusters, then either the distribution you're looking to run in prod. or something like kubeadm are perhaps a better option. kubeadm is very "vanilla" in terms of how it's deployed so it's quite representative of production (on-prem) deployments, perhaps unlike k3s which makes changes to how k8s works.

If you're looking to quickly test things in k8s, I'd recommend kind as the easiest way to stand up and remove clusters quickly.

And if you're looking for something to run your home services long term, I would recommend not using Kubernetes :) (unless you have a really complex home network which might justify adding k8s to the mix)

<comment><USER17> > if you're looking for something to run your home services long term, I would > recommend not using Kubernetes

If we disregard one's experience with Kubernetes as a factor, are there any other reasons you see to not use k8s at home?

<comment><USER13> Do you really have that many computers at home, so you need container orchestration for that? A single machine is capable of handling most home workloads.

So outside of playing with Kubernetes for experience, why would you do that?

<comment><USER5> i have to agree with you on this. i've been using k8s at work for over 4 years but operating k8s for home workload is still too much; unless, it's for tinkering/testing.

</comment></comment></comment></comment><comment><USER18> I've spent a decent amount of time fighting k8s at work. The GCP k8s which abstracts away a bunch of things, but still it can be a bit crazy.

Docker compose is really great but only works on a single machine. Also docker compose makes rolling updates a PITA.

What I really want is something like Cloud Run but locally tunable.

Google Cloud Run is essentially: here is a docker image, when you get a http request, spin up a container, when there are no requests for 10 minutes, spin it down. If there are more than 80 req/s, replicate to handle the spike.

Now I want to say, here's a bunch of Ubuntu machines with X cores, Y RAM and Y SSD storage. Go run these images on it and auto scale it up and down.

I know k8s was meant to solve this problem but the layers of abstraction on top of abstractions are insane.

I just want to specify my compute/storage pool of machines, my docker images, how they should connect to each other and scale up/down. Boom! It just works.

Is there something that does this?

</comment><comment><USER19> you can run a kubernetes stack using k3s on a rpi stack within minutes. and it runs far better than all of these.

[https://blog.alexellis.io/test-drive-k3s-on-raspberry- pi/](https://blog.alexellis.io/test-drive-k3s-on-raspberry-pi/)

here's a live walkthrough - [https://www.youtube.com/watch?v=DjpVtNjiXSU](https://www.youtube.com/watch?v=DjpVtNjiXSU)

<comment><USER20> The author mentions the differences between k3s and micro k8s in the post and concludes that due to the quirks of k3s (subset of features running in a single binary) it's only really preferable if you want to run rancher.

<comment><USER19> That is not true. We have personally run k3s on AWS including cluster-scaler and spot instances.

Last I checked, K3s is a fully certified distro of k8s.

</comment></comment></comment><comment><USER21> I recently gave up on home network clustering/kubernetes. I've since moved to digital ocean. I was working on data heavy apps for testing. I had several SSD zfs pools which was the driving reason, and a lot of RAM to work with.

My setup did work initially. I had a dedicated server acting as the metal lb, about 20$ a month. That was then connected through a wireguard tunnel to my home dmz network. Which backed to a dual xeon v2 work station. The latency was very good under 20ms, and really good speeds. I'm lucky to have fios in my area.

The Xeon workstation died, I then backed up to several think pads. Those were not performant either. So I got several HP t610 nodes, raspberry pi speed with sata 3. Rook took all CPU, and to boot they were running at 90c constantly. Even after re paste and with fan mods. I didn't want five little space heaters next to my desk.

After all this I ditched the home setup. I had gotten parts for a local Epyc server after my xeon's died. But sold them due the current situation.

In the end I had wanted to start a series of blogs on Kubernetes and micro service development. To help me learn and flesh out my under standing of Kubernetes.

I don't feel I wasted several months setting up Kube. I now know about under the cover stuff. Having deployed OkD, Rancher, kubespray, and kube adm. The initial wire guard set up helped cement a lot of the internal networking model. I was mildly acquainted with having worked on openvswitch and open stack before.

If you're doing local. I would really recommend a Ryzen 1600af (6c/12t zen+ 65w), either asrock rack x470, or a basic b450. Both can take ECC, and should land a little node under 500ish or so. There are also SFF PCs Lenovo ThinkCentre M93, comes to mind. But at that price 90$ a node, I'd rather move up the stack a little bit.

If you're waiting to buy local. DigitalOcean has been very well priced. If you want to learn the internals, grab a dedicated server and set up KVM, to get familiar with the internals. On the upper end you can get a new ryzen 3rd gen dedicated for 90$ a month. I look at it as a 90$ class I take once.

I'm not saying Kube is always right. But I avoided it for a long time, backing up to docker swarm. Now, I feel at a base it's not much more complicated than docker swarm, now that I've done this deep dive. Kube adm is on ease of use with docker swarm to me. Add in Metal LB, and Gitlab to help manage the cluster, you have a personal little cloud. It's also good to know for future job searches.

</comment><comment><USER22> All of these trap your mind in the k8s spiral arm and watch how adroit I am at building something no one would want to troubleshoot articles are hipster reminders of why I only create occasional throwaways for this site.

</comment><comment><USER23> Curios how the benchmark compares when adding SSD on RPI 4? [https://jamesachambers.com/raspberry-pi-4-usb-boot-config- gu...](https://jamesachambers.com/raspberry-pi-4-usb-boot-config-guide-for- ssd-flash-drives/)

I don't think it beats anything, but I am sure IO improves fairly significantly.

One of the things I found to be a problem is that most container images found on different registries are built for x86_64. You would need to rebuild those containers yourself on the RPI.

</comment><comment><USER24> Happy to see this. I think more orgs should be running more on-prem or colocated in a data center somewhere. Public clouds can be a rip off for larger projects

<comment><USER25> There's a massive difference between running a Kubernetes setup, like the one in the article, for you home lab, and the attempting to run Kubernetes on-prem for a business. I would recommend against the latter, unless your sure you can afford it, in term of staffing.

</comment></comment><comment><USER5> question: if not k8s, what everyone has been using to orchestrate containers at home? Ideally, I just want something easy to setup, low maintenance cost and easy to backup and restore if sth went wrong.

i've been using k8s at work for over 4 years but for home usage, it's just too much.

<comment><USER26> Nomad

<comment><USER27> Can you post a short, high-level overview of how you use Nomad? What does it do for you exactly?</comment></comment></comment>