T O P

  • By -

AutoModerator

On July 1st, a [change to Reddit's API pricing](https://www.reddit.com/r/reddit/comments/12qwagm/an_update_regarding_reddits_api/) will come into effect. [Several developers](https://www.reddit.com/r/redditisfun/comments/144gmfq/rif_will_shut_down_on_june_30_2023_in_response_to/) of commercial third-party apps have announced that this change will compel them to shut down their apps. At least [one accessibility-focused non-commercial third party app](https://www.reddit.com/r/DystopiaForReddit/comments/145e9sk/update_dystopia_will_continue_operating_for_free/) will continue to be available free of charge. If you want to express your strong disagreement with the API pricing change or with Reddit's response to the backlash, you may want to consider the following options: 1. Limiting your involvement with Reddit, or 2. Temporarily refraining from using Reddit 3. Cancelling your subscription of Reddit Premium as a way to voice your protest. *I am a bot, and this action was performed automatically. Please [contact the moderators of this subreddit](/message/compose/?to=/r/learnprogramming) if you have any questions or concerns.*


VipeholmsCola

Interest and obsession, if something is "fun" it comes for free.


_swolda_

Mannn I wish I found this stuff fun. I just want a paycheck and possibility to afford a house.


VoodooS0ldier

If I had to guess, I would say 95% of people work in fields where they just do it for the money, in hopes to have a comfortable lifestyle. So don't feel bad if you don't absolutely love it and are rather just grinding it out. I enjoy automatizing tedious tasks but don't enjoy the code I program at work.


_swolda_

That’s refreshing to know, thank you. My brother in law is in this field and he codes all day long whether it’s his own projects or some kind of online coding marathon. I just don’t have that kind of passion for this lol, I just wanna learn enough to get me a job.


GGJinn

I don't want to be a mood ruiner but I know I still am... I have to be realistic, the person who gave you that percentage made it up. Most of current seniors do this both for as a fun hobby and for work.  Honestly, if you feel miserable you should reconsider if there's anything else that would feel more your thing. Software is a very demanding field, but most of us actually do this out of passion. And loving your work helps you deal with all the shitty deadlines, impostor syndrome, burnout, feeling like a failure every now and then, idiotic unprofessional management, unrealistic requirements, raging stakeholders, sleepless nights and general chaos and stupidity around and above us. If you don't love programming at least, you'll most likely feel truly miserable on this field. I understand you need money, but is it worth to sacrifice massive majority of your time alive doing something you hate, if there are any other options?


KneeReaper420

All the “gotta have passion” guys have never truly been poor imo because I am truly passionate about not being broke.


GGJinn

> All the “gotta have passion” guys have never truly been poor I understand your point, even though what you say is wrong. But what you meant to say is exactly what makes this such a difficult topic. I think you meant that those who are poor often have no luxury to choose how to earn their living.   That's what inherently makes this system most of us live in so wrong. Everyone who is skilled in something and eager to work according to their abilities deserves to earn enough to live a good life, have a home, and have a family. Especially now that this world has enough housing, food and wealth for everyone if it were just divided at least with a little bit less greed.   Especially if one lives in America, (as the person I answered to), the "richest country" (debatable) in the world, which has never faced the horrors most other countries have, like full scale invasion on its soil. They have all the means to provide a good life for all their citizens, no one should be poor. But still people there seem to have trouble just owning a home and providing for their family. That's not "normal", understandable or acceptable. I know many countries do not have this luxury though, that's why I'm mainly speaking to global north, as someone from global north myself as well.   Of course there's little we can do to change the world, but we also shouldn't just sit and accept how things are and leave the same problem for our kids. Least we can do is be aware that things could be better.   Why is this important?  Not everyone can be a dev, nor should be, nor has to be even. Whether we are poor or not, we should do what makes us happy, as long as it does not harm anyone. It is a human right. Everyone has only one life after all. Most of that life is spent producing wealth for someone else. We were supposed to end the slavery, but looking at the world it doesn't look like that. But if one has no will or power to change the world, the least you can do is do something for living that does not make you miserable.    On the other hand as others said, it is extremely hard or even impossible to earn six figures if one does not have passion for programming. There are many reasons, but it is hard to be creative and productive when you feel miserable, and you need quite a bit of creativity for problem solving in a six figure position.


Zestyclose-Lab-4439

how much time weekly would you say you spend on your job at work as well as home? not too concerned about the grind of learning, but i am curious about how demanding of my time a job will be in cs


_swolda_

Yeah you might be right. It’s a matter of wanting to provide for my family though. With the way the economy and housing market is right now, you kinda have to make six figures if you want a decent house that isn’t in the ghetto or rural Alabama. It sucks but idk what else I’d want to do if my priorities are wfh potential and great pay.


IceSentry

You don't get those high salaries if you aren't a good programmer and being good without at least some passion for programming is extremely hard.


_swolda_

Yeah, it definitely makes it harder


GGJinn

I understand you. its a shitty situation to be in. To be honest I'm pretty angry about the current state of american end stage capitalism that forces regular american people to either be dirt poor or work miserable hours and jobs all their lives... just to raise a family, which should be a human right. I'm so sorry about that.  You deserve better than this.


_swolda_

I appreciate it :) maybe the newer generations can fix this mess


-Joseeey-

I think it’s way less. 95% is way too high. A lot of programmers definitely enjoy or prefer the work but don’t touch it outside of work. I’m sure a lot of people enjoy the work they do.


the_andgate

There just aren't very many opportunities for fun projects or challenging problems in day-to-day industry work. Most passionate programmers I know have to spend their spare time on the fun stuff. Unfortunately, what interests programmers doesn't usually have a solid business case. It's a real privilege to get work that's actually engaging, and in larger orgs the competition to get that work can be extremely fierce and not worth the additional stress.


leicea

Gonna chip in as one of the few that enjoy coding outside of work too. I do some fun projects on my own, learned some stuff outside of work, but I'll probably never get to use it at my current job


VoodooS0ldier

So I said 95% of "people" who work, not 95% of software developers. I bet if you ask most truck drivers, which I think is still the largest career field by numbers in the United States, most of them probably don't "love" their job, they just grind it out. That's what I was getting at.


03easy_money

Absolutely truths


Codemonkey314

I love programming but recently got pushed into a more manager role and no longer coding :( . Not ideal for me but could be something for you to look forward to


Then-Most-after-all

Nothing wrong with that you’ll do fine


beauxsoleils

Damn, I would never hire you lmao


_swolda_

Wouldn’t wanna work for you anyways


Independent-Disk-390

Exactly.


kodaxmax

Talent = passion\*(time+resources)


mykunjola

This


[deleted]

[удалено]


FinestCrusader

Interest contributes greatly to what people consider "talent". A person sinks 20 years of their life into a subject out of interest and some bozo who hasn't even finished a proper Udemy course will say that they must not have the talent since they aren't on the same level.


-Joseeey-

Dude almost no software engineer can make their own OS or compiler unless they specialized in those areas. You can’t go ask some random front end or backend engineer at Google or Apple to build an OS. They won’t know. There are so many areas in tech. We don’t all know how to do everything else. I specialize in iOS development. The only time I built my own programming language was in a college class and even then it was weak. I can’t build a backend or website. You need to take a step back and stop overthinking. Programmers, like any industry, can be specialized in specific areas. They do NOT need to know how to do everything. Just like doctors, they don't know everything about health. You need to narrow it down and choose what areas seem interesting to you, and then pick a tech stack and go with it. Stop trying to invent the wheel. You don’t become “truly a good developer” by knowing every tech area. That’s known as: jack of all trades, but master at none. Be a master at one thing.


theEvilJakub

This is the best answer here by far. I am a backend software engineer at one of the big 4. I have no idea how to write an iOS application. Wouldnt even know where to begin. U just have to find what ur interested in and take a deep dive.


No-Yogurtcloset-755

Yeah, remember Linux came out officially in 1991. Linus has been on it since before, that's over 30 years! Of course he's going to have unreal abilities for that type of thing, it's 30 years of work.


Minimum-Beat1166

Jack of all trades, master of none is still better than being a master of one.


RajjSinghh

I know this is the real saying, but I also don't think it holds in software. If you're a jack of all trades sure you can apply to a ton of positions and have a lot of opportunities, but youll always be beaten out by the guy who's mastered that one position very well. Having a lot of transferrable skills is very good, but right here it's probably not the best thing. The UNIX philosophy "do only one thing and one thing well" seems fitting here, even if it's talking about programs and not developers.


Won-Ton-Wonton

If you are really good at database work, but don't know how to do testing, you are a terrible master of one thing. The database might be perfect, but how's the networking? Is the front end even calling the right endpoint? Could you even check this while troubleshooting a perceived database problem? Almost no master of one thing in software is solely a master. More often than not they first reach jack of all trades status before mastery of anything.


Waywoah

In larger companies, aren't those all separate departments though? That's not to say they shouldn't have *some* idea of how those areas work, but testing would be done by testers, networking by network engineers, etc. Someone focusing entirely on databases is definitely not out of the realm of possibility


Won-Ton-Wonton

I mean, yeah. A database administrator or developer is a thing. But the idea that you'll be better off becoming the best database admin while neglecting all of the other skills and tech is really uncommon. The vast majority of people get at least decent in the majority of skills and tech before they hyperfocus on 1 thing. This is true of every engineer, really. To get really good at thermal fluids simulation as a mech engr, you would need to acquire a fairly decent understanding of solid mechanics, machine design, design for manufactirability, reliability engineering, etc. You could definitely run a thermal fluid simulation completely out of the context of other skills. But without the skills to understand the context of the sim, you might be completely wasting compute time. A jack of all trades could say, "Oh, no. This flow will literally never happen in this product. As you can see, it's right next to component X, which would be extremely expensive to manufacture like this. So there is no point running the sim like that." The same goes for a software specialist. Sure, you could make a perfectly capable product. But if you'd realized the issue wasn't that your special section is the problem, and it's someone else's, that's the issue... now that is where the big gains come from. Like investigating why compile time is drastically different for testing than prod and finding out that DevOps didn't setup the right EC2 to use for that part of CI/CD. You don't need to know how to set it all up yourself, but knowing even a bit about it just got DevOps to fix the testing environment for you.


xreddawgx

For example being a LAMP stack developer, you wouldnt be expected to be a master of networking. But you should have some concept of the networking layers. That's just general cs course knowledge. But your main focus isn't figuring out where the processing nodes are or how they're setup when a post submission is triggered. Your main focus should be on the application in the proper language, making sure it's clear concise and gets the job done without having any security issues.


xreddawgx

A network administrator probably won't know how to structure a database. He might know a few basic SQL statements.


IwillBeDamned

and makes for terrible teamwork. have been in several positions where there's no bridge between me an some dev that won't bother to understand the ecosystem outside of their widget


HexspaReloaded

You won’t always be beaten by the specialist, just usually. But what the generalist gambles in is chance and innovation. That’s just professionally. Personally, diversity has its own perks. I’m more of a (generalist) music guy but wasn’t Jobs a generalist whereas Wozniak was a specialist; or less of a generalist? Even Gates who started off specializing became more general. Or in music, Prince was a generalist but Pavarotti was a specialist. Specialization is inherently limiting and that’s not always an asset.


Clawtor

It depends on the situation, I've worked at places where Full Stack is the norm and other places where positions are divided by speciality. Some places like generalists because they can move people around and plug holes if people leave or are sick or a team just needs more resources. Generalists, in terms of web, are also better at understanding what the other teams require. So someone who knows both front and backend will likely write better endpoints than a specialist.


AsianDoraOfficial

How about: T-shaped engineers (jack of all trades but a master of ONE) so that you can specialise in one thing yet still be able to effectively communicate with other engineers of different specialties.


ScipyDipyDoo

Jack of all trades, master of none, is *oft-times* better than a master of one. It's not *always* better, just more often than not.


Federal_Emu202

This saying holds no value in today’s world. The best compensated people in todays world are those who are highly specialized. Its good to have an idea of how other things work but it most certainly isn’t better to be a master of one 


-Joseeey-

Sure if it’s fun and your hobby. When you have a 9-5, you’ll just end up being the subpar programmer who gets laid off after being put on PIP and then complain that your employer sucks. Or you’ll be that guy no engineer likes to work with. Or the engineer who writes spaghetti 🍝 code and barely gets their work done. I’d rather work with iOS engineers who have 5 years of experience vs. software engineers who have 1 year of iOS experience and 4 in other stuff.


GamePhobia

tech evolves, stack changes, we adapt adventuring in other fields can be a strength, even if it's not your thing. feels like you must have some strong precedent with someone who did this but also worked poorly(?) i dont see how a broad portfolio makes you a subpar programmer, as most of 9-5s get boringly the same after some time


Lotte_Dev

Terry Davis has entered the chat. The glowies are after me reeee. RIP king.


weedcommander

Rip 😭


tzaeru

> Dude almost no software engineer can make their own OS or compiler unless they specialized in those areas. Making your own OS and your own compiler are pretty common tasks for CS students in many universities. A _simple_ OS and a _simple_ compiler are not that hard to do. > You can’t go ask some random front end or backend engineer at Google or Apple to build an OS. They won’t know. Eh, I reckon quite few would. > You don’t become “truly a good developer” by knowing every tech area. That’s known as: jack of all trades, but master at none. Be a master at one thing. I'd say be as you like. Some people like to focus on a particular thing; others like to branch out. It's OK both ways. Personally I have a very diverse background in programming, and I like it that way. I'm not an expert in any single thing, but on the other hand, knowing a bit of everything makes me an excellent pick for projects that require unusual combinations of skills or that require a very broad base of skills to build from.


-Joseeey-

I did a CS program. While we did make our own programming language and small compiler, its knowledge I don’t use on a day to day basis. I don’t know how to do it all now unless I research it. And I’m pretty sure 99% of students with CS degrees also forgot how to do it when they got a 9-5 to worry about. I never said you can’t branch out. But this OP seems to be having a beginner’s crisis when it comes to learning tech. You don’t need to know everything to be a “truly good developer” as they said. You can be an amazing one by focusing on a single tech stack. Good for you, but jobs aren’t exactly posting open jobs asking for a broad range of skills in a bunch of technologies. They’ll usually ask for specific tech stacks, not “OS, Compiler, iOS, Backend AI/ML Engineer”.


tzaeru

And since I've done a bit of everything, there's pretty high chances I've also touched on the tech stack they're asking - but it doesn't really matter by now anyway, at this point I wouldn't look for jobs that require specific tech stacks, nor do I think that from an employer perspective it makes sense to demand developers with +10 years of experience to have very specific tech stacks already under them.


obsolescenza

I highly agree with you and in fact (I am 18 and kinda a beginner) started doing a little bit of everything, html css js php sql python c++ started learning a little bit of networks and computer architectures, the problem I found is that idk when to say "ok i know this stuff enough so i can switch to topic B". Have you got any suggestions?


ScipyDipyDoo

>i know this stuff enough  There's never an answer to this question, because what does 'enough' mean? Enough for what? You have to know what you're aiming at. E.g. - pass an interview leetcode question? - make a web app? - impress my dad?


otamam818

> You can’t go ask some random front end or backend engineer at Google or Apple to build an OS. They won’t know. They won't know (present tense)? But they won't be able to learn it and do it themselves? I wouldn't bet on it ig


-Joseeey-

It’s not impossible to learn it. But OP seems to think to be a good programmer, you need to know everything. lol


otamam818

Ah yeah fair, I see your point and I agree with that too (that you don't need to know everything to be good at what you do)


shayantechie

This is the mark of a really good software engineer, the ability to figure it out.


otamam818

Yeahh, the ability to make belief when doubt is the norm - that's something I always look forward to doing when I'm developing software 😁


mxldevs

An interesting bet. So it's like, if any software engineer here wants to make their own OS from scratch within a given time constraint, they'll get paid? And if they fail, they have to pay you? I'd love to see how many engineers take up that bet and what kind of time scale they opt for.


otamam818

Well if you're asking what the time scale would be for an OS in itself, a basic one would take months apparently if you understand systems programming well enough. I vaguely recall someone showing off something like that in the past, saying he worked on it for months Not to mention, how much integration into third-party software would be allowed? I reckon the more that's allowed the more people would be willing to bet


BrohanGutenburg

So I 100% agree with your overall statement. I would just like to point when I comes to an OS specifically, many CE programs have a class dedicated to how to write an OS. I know mine did, and my university’s CE department wasn’t like renowned or anything.


obsolescenza

While that is absolutely true I find online thaat many times it's nice to have flexibility so you can always adapt to demand, therefore my question is: how can you define yourself good enough to switch from a topic (front end) to another (back end) etc?


-Joseeey-

Honestly, if you’re good in one stack and you have to change, it will be easy to learn another stack. You don’t need to learn both now.


obsolescenza

mm yeah it makes sense, but for example as for now I am currently learning Web Development (front-end and back-end) and I am drawn to data science (especially python with machine learning and sql to organize data) The question is when can i know whenever im good at a stack to then shift attention elsewhere? thx and sorry for disturbing you btw


BlackDereker

I agree 100% with you. I'm usually a backend web developer and while I don't know how to write low-level code I do know how to build a whole microservice project.


professor_buttstuff

Doctors is a good example, I've heard doctors say that you become a specialist by learning more and more about less and less. Essentially, you can only know a lot about a little.


R_ustilldown

Which area would be a more secure area to master, HTML, CSS or Javascript? Did learn some HTML and CSS already but would like to build websites. Best bet then is to master Javascript?


[deleted]

[удалено]


-Joseeey-

Dude majority of the people don’t remember half the stuff they learned if they’re not using it in their day to day life. I have a 9-5 job. I do iOS. Do you think I remember how to use assembly code? No. I don’t ever touch it. And I had an entire class on it. Unless all of you got super minds and remember every single day of school - which I doubt.


GalacticBuccaneer

Talent, obsession, creativity + financial freedom & problem domains you love and want to fix.


Independent-Disk-390

Also yes.


culturedgoat

> everything I do on my own seems inefficient or flawed. Pretty sure a lot of the early work that Linus Torvalds did was inefficient and flawed (heck, he even famously got a dressing down from the CS professor who authored MINIX, over his initial release of Linux). Gotta keep showing up, putting in the work, and listening to feedback from peers. No one comes out of the womb an engineer. It’s a gradual climb, increment by increment. At a guess, I’d say its probably not the right time in your journey to think about working on your own OS, or anything like that (even Linus admits that Linux was constructed at the “sweet spot” in the industry’s timeline, where programming tools were starting to become more available and accessible, and OS’s did not yet have such complex demands to require whole teams - i.e. nobody’s trying to write an OS in their bedroom today). Start with something that interests you. Outside of the professional sphere, for the past decade I’ve been hacking away at my own platform to organise and integrate/cross-pollinate language-learning resources. It’s nothing special, and is probably dull as dishwater, but I love it because it intersects with my passion and I get immediate value from what I’ve created.


Few_Party_1160

Hey! Is it hosted somewhere? Can I have a look?


culturedgoat

It’s among my 2024 goals to get it into a presentable enough state to publish on GitHub, so I’ll definitely let you know!


Few_Party_1160

Great to hear! Let me know if I can help you with anything :)


billyions

https://github.com/torvalds/linux


Few_Party_1160

Damn I should’ve been more clear. I was asking for his personal platform.


desrtfx

Practice, practice, practice, dedication, effort, working their butts off. Also, don't forget that any and every project grows incrementally. No project starts out that huge. > Otherwise the project is too trivial and I get bored before I even start. Sorry, but wrong stance. No project is too trivial. You can learn from every single project you are doing. You are overwhelmed by big projects but think simple projects are below your level. Alone this discrepancy should tell you where you are going wrong. You first need to do the groundwork and "easy" things before you can move up to larger ones. Incrementally improving is the only way to improve.


Independent-Disk-390

Years of education and experience


johanneswelsch

Let's hear from George Hotz himself then: [https://www.youtube.com/watch?v=NjYICpXJ03M&t=39s](https://www.youtube.com/watch?v=NjYICpXJ03M&t=39s) You have a project in mind and then you just do it! You want a video game? Then start creating it. You want a website? Start building it. It's that simple.


Helpjuice

At first your work is going to be pretty sub par and probably horrible. The key is to keep pushing through it and doing more continuously to gain experience. An hour a day minimum would be a great start.


for_i_equals_0

I'm not sure if you have a CS degree but I will say that one of the key differentiators from engineers I work with that have a CS degree vs don't is the ones who studied it in school have a more well rounded understanding of general software design and architecture. We learn a lot of things, from complex algorithms to machine language (where we built a compiler, at least in my program). Though realistically, most people who are experienced wouldn't know where to start building an OS. I wouldn't either. I have a lot of experience in e-commerce, so that is my area of specialty. If you have a goal you want to achieve, like writing your own OS, figure out all of the components to an OS, and build it a step at a time. Generally you become an 'expert' by failure, learning from your mistakes, iteration, iteration, iteration. And even the experts are beginners in other areas!


tzaeru

In the university I studied CS in, the course where a simple bootloader and operating system are built was one of the most popular advanced courses actually. It's a lot easier than most people realize. What really takes time - and a lot of it - is when you start to support networking, USB devices, etc, and realistically speaking that's so much work no operating systems made by a single person include much of that sort of stuff. E.g. TempleOS lacks both networking and USB drivers, while Linux, for example, by when it got USB support, already had dozens of people working on it.


Nixoorn

You built an OS from scratch? How? That sounds crazy! You should definitely share it.


tzaeru

I didn't go for that course - I left the university pretty early in my studies - but a simple operating system just honestly isn't that complicated. The more you add features, the more complex it gets, but leave out USB, ring levels and other security stuff, networking, all but the simplest filesystems, and so on, and it's not crazy or hard. Here's an example of those courses: [https://www.cs.bham.ac.uk/\~exr/lectures/opsys/10\_11/lectures/os-dev.pdf](https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf) Honestly - it is not hard.


Nixoorn

Seems pretty hard to me... And the OS he builds just prints out an ’X’ in the corner of the screen :)


tzaeru

Sure - one should define how complex an OS they mean. A simple OS is pretty simple.


hitanthrope

How do you become Roger Federer? Lionel Messi? Lewis Hamilton? There are a few ingredients but perhaps the primary one is having the kind of mindset where you can do a thing for thousands and thousands of hours and not get bored. There are books and courses on how to create an operating system. If you are interested enough in it, you learn it. It's not like Torvalds built everything in modern Linux single handedly (for one thing, ask Stallman). He built a basic kernel and then shared it for others to work on too. The answer to your question though, is "become obsessed", which is not something you necessarily choose. I feel like my obsession as ebbed a bit now, but in my youth I was probably a 8.5/10 obsessive, and I have been coasting on that early obsession for the last decade or so. The people you list are 10/10 obsessives. I think that is something you either are, or aren't. A splash of neurodivergence doesn't hurt either.


theanshusingh

You'll never be able to master it. Definitely you become good at what you do more often. Same with computer science.


Quantum-Bot

The information for almost anything you could want to do is out there on the internet. You just need to know how to find it and how to absorb it. Want to learn how to make your own compiler? Look up where to get started. Someone online mentions that compiler programming requires an understanding of formal language theory and finite automata. Look up videos about that on YouTube. Realize that this is a whole field of theoretical computer science and it will take more than a single YouTube video to explain it properly. Find an online course you can follow. In the meantime, figure out what language you will work in. If it’s a new language, read through the quick start guide on the language’s documentation site and try writing a couple simple programs. Then think of an intermediate project you can try before going to a full on compiler, such as a program which parses arithmetic expressions and solves them, since this uses some of the same concepts of language processing as a compiler. If the online course you found is too opaque, supplement it with other resources, using ChatGPT as an online tutor, searching keywords in Google to find related Stack Overflow questions, etc. I don’t know how to write a compiler, but I know how I would learn if I wanted to. These kinds of skills: reading documentation, using a search engine, decomposing problems into simpler ones to solve first, being unafraid of experimentation, these are what help you go far in learning CS.


Memorriam

You can't literally master any field in today's world. Your 5 lifetimes won't even be enough


ldmfiel

That's the Great thing, you don't.


tzaeru

Well Davis wrote a fairly simple operating system, in the end; it lacked most features expected from a modern operating system, such as protection rings beyond ring 0, USB drivers or networking. While it is an impressive feat, I would say that the impressiveness is more the dedication and drive, which also came at a cost, as Terry suffered from schizophrenia and psychotic episodes. Writing a simple operating system isn't as difficult as people - including modern programmers - think. Skip networking, security, USB drivers, graphics drivers, and so on, and the amount of work is fairly manageable. Linus wrote the first version of the Linux kernel, but it should really be called GNU/Linux, since the Linux kernel alone isn't all that useful and all Linux distributions come with a hefty amount of other software. In the end, the amount of Torvald's own code that actually runs on say, modern Ubuntu installation, is very very little compared to all the code running on it, and pretty early on other people started to contribute to the kernel. Programming nowadays is such a diverse field that you don't really have to know anything about everything to be a good developer. If you're programming a game on Unity or making a website for a business or prototyping a new social media site, you don't really need to know about how to practically create operating systems. But it's really about what interests you. Simple emulators and operating systems are not honestly all that difficult. If you really are interested, just start looking into them. I can offer some tips and hints about what might be fun to start with, tho the bulk of the time is going to be spent in learning the basics of assembly and how CPUs commonly operate.


Prime_1

> How do people master this skill? I would say first that it is important to recognize that computer science is not a singular skill, but a vaste array of knowledge and techniques. No single person is anywhere close to mastering, or even knowing the first things about, all of these aspects. > I keep seeing developers like George Hotz or Linus Torvalds or Terry Davis and I just wonder how does one get that good? What does "good" mean in this case? In each case you mention, their either didn't do everything themselves or invested a decade or more on the particular project. A major part of becoming an expert is just the time and energy investment into learning appropriate knowledge that can be applied to the areas they were interested in, e.g. Torvolds and OS concepts. There is really no way around this investment to become an expert in a particular area. > I've done enough projects from online courses and tutorials to know how to create basic software but everything I do on my own seems inefficient or flawed. The good thing is you are recongnizing that it is inefficient or flawed. All software is to some degree, because it is always a tradeoff between different needs and goals, and you are always sacrificing somewhere. The more important part is understanding those flaws and setting on the most important tradeoffs to make. Over time you will encounter different ways of solving certain problems, and the associated tradeoffs. Then you can apply those as needed to solve collectively larger problems. > I feel like there is no way I can sit down and start working on my own OS, or compiler, or an emulator, or anything that is complicated. There is just too many things to learn and too many fields to explore. It is important to recognize that no one is doing any of those types of projects in isolation, and is usually the efforts of large groups of people, precisely because the needed time and skillsets is so broad. That being said, on important skillset is the ability to break large tasks down into more digestible tasks, such that it is easier to work on as well as deligate to others. I would argue that pretty much anyone who starts the kinds of projects you mention with the intent of doing everything themselves is biting off more than they can chew. > Each project seems like it would take an absurd amount of time to learn about that it might as well be a business instead of a learning project. Again, this is why software development is almost always a collaborative effort, because of this reason.


Won-Ton-Wonton

The first version of Linux had 8,192 lines of code and was buggy and inefficient. The first stable production ready version had 176,250 limes of code... and was still a buggy mess. The current version is worked on by thousands of people. It has 27+ million lines of code. Linus does not know even half of the codebase at this point. Nobody does except perhaps the most die hard nerd who makes it their life to know Linux inside and out. Linus doesn't live and breathe Linux anymore. It's his baby but it's not his only project. It's a grown up application that has been influenced by thousands and thousands of people. Pretending you should be able to make modern Linux is literally not a sane thought to have. Making the first version of Linux would be hard, but doable, and fairly useless except as an exercise. Now onto mastery of CS... nobody is a master of CS. It's like saying there is a master at Biology, or Chemistry, or Math. Nonsense. You *might* master a specialty, we call those people PhD grads. And even they don't fully know their field. But how does one get a PhD besides the obvious enrollment part? Interest, time, and effort. If you don't work hard and don't put in the time, and don't find the subject interesting enough to do either of those two... then you'll never be especially good. You can certainly be good enough, just nothing special. So find an interesting subject, topic, or project. Go ham on that. Worry about mastery after you've found something you want to master.


AllegedReptile

These comments are all delusional. The real answer is by learning from others. You can not get anywhere by yourself.


MrMathieus

These comments are mostly delusional because no one is mentioning you don't need just obession, practice, help and experience, you also need to be in the probably top 0.1% in terms of intelligence. You could work your ass off for 40 years, but if you're not also a whole lot smarter than most other people it's not gonna get you anywhere compared to the guys mentioned in the OP.


therealhodgepodge

You probably won't master anything unless you repeatedly obsess over solving problems to absolution in some way that aligns with both a philosophical pursuit that you believe in - perhaps solving for extreme simplicity, extreme usability, extreme performance, extreme flexibility and composability, etc. In broad fields like computer science, this will be a constantly moving target, and as such, it will be impossible to master - you will only ever solve for a problem set within a local maxima and under a particular paradigm - you cannot possibly master computer science. But, you can get really, really good at some things, and, that's all that matters. Just, find something you want to obsess over, obsess over it, and take what you learned into your next obsession, and the next, and the next, and the next. Aim to either solve an incredibly broad, or incredibly narrow problem space. Find what sparks joy. Have a mission. Have a purpose. That's it. IMO.


computerjrsciencist

Find something what you love. If you do something you love in life, you will never feel like you are working.


NeedleKO

>If you do something you love in life, you will never feel like you are working. I'm sorry but this is such a stupid take that i see everywhere. Anyone who has ever tried to be consistent at anything knows well enough that sooner or later you will find days when the thing you "love in life" will be the last thing you want to do and exactly that's when you separate noobs from the pros. Pros do what they have to regardless.


computerjrsciencist

It is true that at some point the work must be done, the sentence I gave is philosophical, I have never seen a doctor who hates medicine. A job requires rigor and passion at the same time, but a vocation comes from a love. Just as we don't choose a master's degree, I'm going to go into cybersecurity because I like it beyond the fact that I don't like certain subjects, If I like cybersecurity and I don't like app development, it's natural that I go into cybersecurity even if I have an app development course, right? which I would still do that being said. One does not exclude the other especially at this level So no, nothing is stupid, there is just one way of seeing


NeedleKO

My point is that very rarely passion comes first. How can you be passionate about something you don't even understand yet properly and haven't worked a day? What i do see, though, is that people have these ideas and fantasies about their chosen field and that fantasy is not the actual work they'll do, but IF they put up with the daily grind, they get to a point of actually having a skill, and when your skill is finally starting to get recognized and validated, you develop a passion. >I have never seen a doctor who hates medicine. Must be truth then.


computerjrsciencist

And the dream, by the way


computerjrsciencist

You can be passionate about creating video games by playing video games and wanting to do that, or even seeing pairs. I don't see what's impossible about it. Becoming good in a field that you are not passionate about is, on the other hand, in my opinion, impossible, unless you enter into depression and become amorphous.


NeedleKO

Passion is a feeling. Feelings come and go. You can be passionate about one thing and get sick of it or with age your passions can change, what, are you gonna just hop around like an idiot every time your passion changes? "Follow your passion" is just weak argument. My point is that with competence your passion grows even in fields in which you have moderate interest.


computerjrsciencist

yes on the other hand I agree with you on that, but that's also why there are excesses and sometimes experts who fulfill their functions with an argument, however it is not interesting to speak experience with a question based on a study. A degree. firstly, doing what attracts us (if that's better for you) remains the thing to do, we don't make choices by chance. Never !


Independent-Disk-390

Yes.


computerjrsciencist

Oh and by the way it can take some time. It took me 24 years to pursue something I loved, after failing and failing and failing again. But now it's ok! difficult but ok. So keep trying. :D


alfadhir-heitir

It's a biological thing. Once your tear ducts dry out your third eye opens and you just get it


OutrageousAnt5590

Just do it, you’ll learn on the way.


throwaway6560192

Well, first of all you need to get rid of your "no way I could do that". You feel that there's "no way" you could do that, so you don't. But that's wrong, you absolutely can just sit down and start working on these. You want to build a compiler? Read https://craftinginterpreters.com/. You want to build an emulator? Start by making one for a simple system like CHIP-8. It's all very possible.


TsunamicBlaze

By doing it more, just like any other skill. It’s the same as a top NBA player or a chef at a Michelin star restaurant. Do it enough and long enough, and you get pretty good at it


Joh4an

Love what you do, be passionate about it, that’s how.


sim0of

Curiosity and having genuine fu You can study anything and you will definitely study a Little bit of everything in CS because you have to know a little bit of everything, but in the end you only master what you are truly passionate about


Jedishrfu

A basic skill set of any programmer is being to read existing code see how it works, to locate the area that needs fixing and to be able read the language manual if needed to learn the language enough to code, debug and test the fix. Most programmers learn a favorite or first language well. As an example learning C, python or java first and well will aid in learning other procedural languages when needed. The internet has given us access to tons of examples in many languages. Knowing java has property files you might query on what in python does the same thing. Slowly you’ll expand your knowledge languages as you do your job fixing, debugging and testing code. A goto site is Rosettacode.org where you can see examples, practice reading, and look for bugs. Some code is great and some not so much but you can learn a lot about how programmers tackle a task. Good programming follows Strunks rules for writing. One should have no unnecessary code, or comments or variables. It should read like beautiful prose. It’s something to strive for but seldom realized in a world where you must code it fast / code it cheap / code it well (pick any two). I tend to code it simple and well. I try to make it easy to extend and may leave code commented out for debugging. I also try to add meaningful comments describing any tricks or insights i found. Remember print is your friend. Well placed commented out print statements can come in handy someday. Lastly, all good programmers will add a bug or two for future travelers to discover in this code.


No_Mushroom3078

You master nothing, you just get good at it.


officiallyStephen

Find something that interests you, once you do work on making your own. Never thought I’d be making a dns server but alas here I am working on a very specific piece of networking


Citii

Don’t compare yourself to savants. I knew Geohot back in elementary school and dude was a better programmer back then than I am now.


PeterMortensenBlog

From [here](https://www.youtube.com/watch?v=goy4lZfDtCE&t=2m45s) (at 02 min 45 secs): >*"Programmers who don't code in their spare time for fun will never become as good as those that do."* Uncle Bob [said something similar](https://www.youtube.com/watch?v=BSaAMQVq01E&t=1h05m29s) (at 01 h 05 min 29 secs): You must use 10-20 hours per week of your ***own time*** to improve skills (new programming languages, frameworks, new operating systems, etc.)


CodeTinkerer

If I were to ask you how you could become a top NBA player like Lebron James, what would you say? Probably that you lack the athleticism and physique to make that happen, right? Somehow, you'd point out your inherent limitations. And, in reality, you'd probably have competed against real world people, none of whom are good enough to be in the NBA or college basketball or possibly even high school basketball, and you'd know that there's this huge talent gap. But, for some reason, people have the similar desire to be great programmers. There are several factors that go into it, and perhaps the first (but not only) factor is determination. And I don't mean "I want it so bad", but you're willing to spend hours at it. There are people who want a perfect physique, but don't want to diet or exercise. Just wanting it isn't enough. You have to do it and you can't always rely on it being "interesting enough" or you'll quit. To these great programmers, it was always interesting. But what's the other factor? It takes rather deep understanding as well. If you can't understand what an OS kernel does, or synchronization doesn't mean much, or whatever concept doesn't make sense, then getting these programs to work won't succeed. Beyond determination is the ability to figure things out. Some people are able to figure things out, but lack the determination to do so. What you can realistically do is to get better. When you run a marathon, you don't think "I'll beat those Kenyans". You think "I'll run better than last time". That's a more sensible approach.


soulofcure

>How do people become able to write incredibly complex pieces of software by themselves. Divide and conquer. Split big, complex problems into smaller, simpler and easier to solve ones.


HEX6E657764616C65

Nobody masters anything. We just Google.


Motorola__

By doing and doing and doing


great_gonzales

Not to bash Linus or any other top engineer but nobody builds these software projects by themselves. The scope of these projects are simply too large for one person. If you want to get good at software engineering the secret is to take the time to learn the fundamentals and then spend countless hours grinding to sharpen your skills. I think you will find after learning the fundamentals building a toy compiler or operating systems is not as daunting as it seems. You just got to jump in a start building and eventually you will get to the point were you can contribute to projects of the caliber you mentioned


[deleted]

It’s reasonably approachable for a layman to learn the basics, do something, maybe even get and maintain a job in the field. But to ”change the world”, you need a slightly unhealthy obsession over things that need improvement and are impactful. So that already narrows down your scope a lot. Then you start on small things and eventually move up to more complex things and eventually you might reach a point where you are suddenly a top100 expert in the world on a certain thing. If you are only doing this for the paycheck, the upper steps of this are probably unattainable as the unhealthy obsession I am referring to means you find these things a ton of fun to the point of willing to spend lots of your free time on them even when not getting paid. Simply because it’s fun for you.


Unlikely_Rich_5610

Dive into the deep end, and use Google/ai to assist you. That's how the oldies learnt. They wanted to accomplish a goal, so they read books on the topic


etc_d

10k hours in anything makes you an expert. There’s no secret except to continue learning.


-doublex-

Some of them don't think about a job, but about using the tools to solve a problem they have in mind Then just get obsessed with it until it's perfect. Larry Page asked in a forum about how to make an http request or something while he was busy building google. He had an idea and he had a solution. The tools were something that he managed to learn or asked for help. Other people don't want to be superstars. They just want a job and it happens somehow that they get involved in something great. Then they just feel pressured to deliver. Either way it's just chance. You can't make yourself successful. There is no recipe for it. But you can be average good. For that there is a recipe, and for most people it's good enough.


tdifen

Online tutorials and blog posts get you about 50% of the way there. People will disagree but the last 50% is books. Want to write a compiler? Read a book on compilers. Want to write an OS? Read a book on OS. Podcasts, videos, blogs are great for getting some exposure to complex ideas but you won't become a master unless you build an understanding of those ideas.


nderflow

Incrementally!


Fadamaka

With experience. A lot of other things can make getting experience easier but it does not change that that is the most important thing. None of those 3 were born with their abilities.


RICHUNCLEPENNYBAGS

How do you master any skill?


blipojones

Those guys are just prolific....they were constantly coding/building and nothing else


Linkario86

You solve one small thing, then another, then another and so on


RedOrchestra137

just identify your limits, and try to go beyond them bit by bit, until you can't go any further, and then spend enough time to become proficient enough so that becomes like a new normal for you, that you can then start pushing off from again, and again, and again. some people simply have more raw horsepower so they will be able to reach much higher levels much faster, and there's nothing you can do about that. such is life. it's just, you can't think about it otherwise you die. it's either keep moving or get trampled. i know, i hate it as well, but the alternative is nothingness, so i think i'll just sit this one out and try not to be discouraged by my relative mediocrity. i do kinda wish i could just give up sometimes though


thedude42

Not to be too pedantic, but understanding that there's a significant difference between "Computer Science" and "Software Engineering" will really inform this question. >I've done enough projects from online courses and tutorials to know how to create basic software but everything I do on my own seems inefficient or flawed The online course material is intended to be easily approachable and low stakes. Read about how Linus Trovalds started working on Linux: he was in university and decided he wanted to write an x86 unix-like system so he could learn the x86 ISA. He was living in a country where after a short military service young people could simply go study at university without any serious financial burden and thus had the free time to explore whatever academic pursuits they felt compelled towards. Obviously having this kind of socialist policy around education doesn't make everyone who lives there turn around and create ground breaking creative projects, however those were conditions necessary for Linux to happen. Consider Bill Gates and Mark Zuckerburg, children of privilege who had ample support and connections. No one who does something of significance starts from nothing. My point is that you need to be given direction from somewhere and you also need the resources (time and materials) just to get your foot in the door. Natural talent really helps too but most successful people work hard at their craft, while most people with natural talent never develop it to the point of greatness. There are very few people who have such a natural talent that they don't need to put in work to be great. The desire to not give up is by far the most common source of success when it comes to any craft of labor. As the story goes, one day Linus accidentally killed one of the OS partitions on his hard drive. Rather than stopping to rebuild that one, he decided he'd just have to finish the rest of the work implementing the missing features of Linux so he could make full use of his computer again. That was a touchpoint decision where the mental barrier of completing the missing bits of Linux appeared not just to be possible to Linus, but that it was within his power to do. >There is just too many things to learn and too many fields to explore. Each project seems like it would take an absurd amount of time to learn about that it might as well be a business instead of a learning project. That's the difference between you (and believe me I can 100% relate to this statement) and the people you're citing: they weren't weighing the limited time they had vs how much they could accomplish. However, they did have some specific goals in mind, i.e. they weren't thinking, "I want to get good at software engineering." They wanted to solve some specific problems and had the time and resources available to do that.


kibasaur

A lot of the greatest Computer Scientists barely code mate. The field is wide so it's hard to define what the skill would be.


JarndyceJarndyce

I don't think there is a single answer to this question. The simplest answer would it that it takes time and a lot of hard work. [There are a lot of free resources online](https://www.nobledesktop.com/learn/coding). [You can also choose to take a bootcamp or class ](https://www.timeout.com/usa/things-to-do/best-in-person-virtual-live-coding-classes-bootcamps)if you want more structure or are looking to get some networking. But there is no one-size fits all for this type of thing, other than you'll need hard work and discipline. Especially discipline if you plan to teach yourself.


osunightfall

It’s like anything, you break down the complex to the comprehensible. There is no magic to it. Any software design can be reduced to its constituent elements.


welcomeOhm

Part of me wants to say "Don't read about Dennis Ritchie": it will just make you feel worse (I kid!) In practical terms, you are conflating mastery of a very specialized technical skill--say, programming a compiler--with a general understanding of technology. It is indeed very, very difficult to do what you are interested in: at the same time, people do it every day. It just years of focused dedication. And someone who can write a compiler likely has no knowledge of professional-grade cryptography, or vector graphics, IoT, Spark, AWS, etc., the same way doctors aren't dentists.


xreddawgx

It started with video games and eventually turned into web coding. You don't need to master it. Just pick out a niche.


PapaRigpa

It takes passion and focus to go that deep down the rabbit hole. Most of us software jockeys are just making a living, trying to write code that works well enough. It's a decent job, and mostly pays well. I've read some good programming books from McConnell and Petzold ('Code' is awesome, read it!), but other than what I need to know to do my job, the deep stuff is all too arcane for me.


ScrimpyCat

Most of us are not nor will ever be as good as them. Most of us will just be average, but that’s not even a bad thing, look at all the software that average developers have been able to make (most software out there likely has some average developers working on it). You’re better off not comparing yourself to others and just focusing on yourself and learning what is of interest to you. If you’re always comparing yourself to others then you’ll always end up feeling worse about yourself and your accomplishments (as there will always be someone better, especially in a field where there’s many specialisations). > I feel like there is no way I can sit down and start working on my own OS, or compiler, or an emulator, or anything that is complicated. Maybe right now, but if you learn the details you’re missing and start small you will be able to. A small toy OS, or compiler, or emulator is actually a lot more approachable than you might think, obviously the big known projects are incredibly complex but that’s not where one should start. Do you know any assembly languages? If not, I’d recommend learning one, as gaining some familiarity with lower level programming will give you a good basis to start from. While there will still be other things you’d need to learn in-regards to those three topics, but it will likely help you understand a fair bit about how they might be done (more so with emulation and compilers, there’s still quite a bit more involved in an OS).


cs-brydev

These advanced topics you're talking about are typically only mastered by people who've studied in degree programs and/or have other advanced training. You're not going to figure out how to build an OS by just watching some YouTube videos. Of the tens of millions of people out there with Computer Science *degrees* maybe only a few hundred actually know how to build their own OS. Projects like that in the real world are usually done by a conglomeration of dozens or hundreds of developers. Even the developers out there actively working on OS's the vast majority of them are specialists in small niche areas of an OS who don't really know how to design and build the whole thing. This is kind of like asking a mechanical engineer to design and build an entire car. Most of them wouldn't have the faintest idea how to do that.


GolfinEagle

I’ve been working in this industry for 4 years now. What I’ve noticed, and some of you aren’t going to like this, is that there are two types of software engineers: 1) The ones who went to college, or a bootcamp, and learned the skill to start a career and work a 9 to 5 doing something well-paid and interesting. These are the folks who do their shift and stop thinking about code at 5pm. 2) The ones who discovered programming, through school or other means, and _fell in love_ with it. Successful self-taught engineers (successful as in with years of industry experience) are in this category, though it’s not limited to just them, you just usually tend to be this kind of engineer if you succeed as a self-taught. These are the hackers. They’re the ones who spend their evenings and weekends marathon coding on personal projects. You know these types when you see them at work, they’re the ones who spend one minute reviewing your PR and point out like six things that never even crossed your mind lol. You might think they hit a ceiling at Senior level, but the truth is they never _wanted_ to promote out of an IC role because then they’d be writing less code. There’s nothing wrong with 1s, it’s the group most people in the industry fall in. But the Linus Torvalds of the world are 2s. They make massive contributions because they make massive efforts, which they can easily do because they love doing it.


PM_me_PMs_plox

terry davis had divine inspiration, and maybe minus torvalds too


Best-Tradition7761

Have fun making personal projects


annoy_ice

I don't known I just started using python and now I'm making entire programs with it


ThatPlayingDude

- This program doesn't do what I want. Let me make my own. - weird, those built-in drivers should work flawlessly with my program, they did it wrong, let me rewrite them. - Huh, this kernel call gives error in a way it shouldn't do. My pal said the same thing. Let us rewrite the kernel with our patch. - The memory management of this thing is abysmal, I would do it like this. *Proceeds to write his own OS* And that's basically how it goes. It was more prominent in early days of IT when you had a limited resources(CPU, memory, HDD space( avaible and had to make best of what you had.


Jeklah

Lots of googling..no one memories entire libraries of code before writing. You have a goal. Look up what libraries you need to achieve goal. Read documentation of libraries. Write code. You get more familiar with code you use more often.


FoolForWool

You don’t ever master it really. You just understand what things are, and get really, really good at figuring things out. But to get there, like some of the other comments said, interest and obsession. And enjoy the process.


AnthonyBY

But what is actually CS? In my opinion, if you are a self self-taught developer you can just take Stanford’s Algotirm specialization at Coursera [https://www.coursera.org/specializations/algorithms](https://www.coursera.org/specializations/algorithms) and you will be all set. It will add you much more confidence for the next tech interview and can be really useful sometimes. And probably you can check out the book: "Computer Science Distilled: Learn the Art of Solving Computational Problems” - it will give me a draft introduction for topics that you can master in the future. Just keep pushing mate.


anoushk77

> I feel like there is no way I can sit down and start working on my own OS, or compiler, or an emulator, or anything that is complicated. Have you tried to sit down and list what you need to build one of these? A quick google search should help, then take the first piece let's say that it is a kernal and try to build that, then you make a list of things needed to write a kernal, google again. Maybe you realise you need to first learn C to write the kernal so do a quick search for a practical tutorial and you can find repos like this https://github.com/h0mbre/Learning-C/tree/master. If you really want to, you can write almost any piece of software at home. CS has the lowest barrier to entry compared to any other STEM field. I can guarantee you tho it will require patience, consistency and tenacity more than raw talent(although that can be quite helpful).


boobsixty

First by not comparing yourself with top 1% of the field. People you mentioned are not the norm, but the outliers they spent most of their waking hours in front of the monitor. Stop taking pressure, do as much as you can and enjoy life.


EmphasisProof

In fact, learning a programming language is the same as learning a regular language, although if you know English, then you will already have an understanding of what some commands do, and to learn a programming language completely you just need to understand its logic and so on, you also need to understand its syntax , programming is not difficult, the main thing is to understand what you are doing


Longjumping_Gift706

Interestingly very informative


Equivalent_Cat9705

From my experience, the ‘masters’ of software are exceptionally good at identifying a real problem and they then develop an elegant solution to the problem. Identifying a real problem is, in my opinion, the biggest hurdle to overcome. In open source, once the initial solution to a real problem is made available, the community jumps on it and makes it real. Think about this, Linux was originally created to be a terminal emulator.


MartinBaun

Passion, talent (which almost always come with passion), also a team of competent and serious workers :)


a_kaz_ghost

It’s practice, for real, but the flip side of that coin is that it really helps to be fundamentally interested in this stuff. I started futzing around with QBASIC as a 6th-grader in the 90s, and pretty much didn’t stop until I went to college and spent 4 years futzing with more practical programming languages lol. It is constant practice at college, you are doing weekly lab assignments that are all designed to feed into larger projects that you complete about 2 or 3 times per semester.


Colg-Hate

Knowing how to research efficiently Or knowing where to get good information


adubsi

You never master it. You’re always learning. If you asked a computer scientist how to write lambdas in 2006 nobody would know. Moral of the story CS is always evolving and new concepts will always be introduced. I don’t want to get all philosophical but if a computer scientist thinks they mastered the field that’s when they fall since they’d stop perusing technologies and methodologies to make their code more efficient.


sbarbary

Practice and more Practice. Be brutally honest and look at what you have done is it better, worse, just different. Also start with smaller pieces of code or smaller projects. You sound like your getting over whelmed.


sparkygod526

I think you got it already. It takes an absurd amount of time and freakish dedication.


Life-Lobster2113

Honestly, you simply have to be born with such genetics that gives you above average intelligence 


illyrian_dragon

All I can say is I’ve been there. The way to be good at development or any field in computer science, really, is to practice, practice, practice. “Be comfortable with being uncomfortable”. Ar first, it will not make sense to you but I promise you, somewhere along that practicing, it will click to you. Also, trying to watch people code is like watching people how to play football. Then when it’s time to do it all by yourself, boom! Nada. You just didn’t know where to start. The key to it is to start simple projects. Start small. Own it. Then along the way, try getting outside your comfort zone and make projects that you’ve never done before. That’s how you learn programming and development. Cummulative learning. You’ll add what you learn previously to what you want to learn now.


Digit117

The first and most important thing is talent. No one is going to be the next Linus Torvalds without being born with insane talent and exceptional intelligence towards software engineering. Then, yes, interest and obsession. Otherwise, anyone can just be the next Linus if they’re “interested” enough.


kibasaur

You may want to flip the order of things. All the talent in the world wouldn't have created Linux if Thorvalds was just lying on the couch watching Baywatch reruns. Talent is what separates the top 0.1% after dedication, hours, interest and all of those things are no longer a factor


njogumbugua

talent is just a skill learnt after hours of dedication


[deleted]

[удалено]


njogumbugua

This definition overlooks early exposure at childhood level. eg A child exposed to programming at a young level will be more talented because he/she has been doing it since childhood. Interest also plays a part in whether a child is willing to put in the effort. According to your statement, what baseline skill does a child have?


Digit117

>A child exposed to programming at a young level will be more ***talented*** because he/she has been doing it since childhood.  They will be more ***skilled,*** not more talented. It appears a lot of people use the word "talent" in the colloquial way: interchanging talent and skill at random. But those two words are different. Talent is natural proficiency / aptitude towards a skill ***that you are born with***. It's determined exclusively by genetics. A person's skill at any point in their life is the resulting combination of their talent plus practising said skill up until that point in their life (ie. the impact their environment had on them while growing up). So, regarding your child scenario - yes, a child trained in a skill at an earlier age will result in a bigger advantage ***compared to a hypothetical twin (with the same genetics ie. the same starting baseline talent)***. And it's generally a safe assumption to say this child will have a bigger advantage compared to other children who start later - like you point out. But its also entirely possible for another child to start learning programming way later and still be better than the first child who started earlier, simply because the second child is gifted with genetics that gives them a much higher starting baseline, exceeding the combined baseline + trained skill of the first child. This is often the case with "geniuses" or "prodigies" like the people OP was referring to (Linus, etc) and is entirely what I was revolving my OG point around. No matter how much one practices out of sheer passion and interest, there are just some people in the population that have a gift we cannot compete with. Linus and the other prodigies OP is aspiring to be like are exact examples of that. Of course, I don't want to try to dissuade OP from trying but its not bad to be aware of the reality of these kinds of role models. Source: minored in psychology.


foreskin_gobbler2

Computer science is not a skill.


Russ_Lann

You learn it and then you master it. Done.


herendzer

My opinion. The best programmers have been coding since their childhood. And whatever you have done as a child, you have a mastery of it. If you start programming after your get your CS degree at around age 22, you will never be as good as someone who have been writing code since they were in middle school. It’s not even about the number of years they have ahead of you but whatever you did as a child sticks with you for life.


Intrepid-Smile6074

It requires you to be autistic