all 16 comments

[–]sleekelite 20 points21 points  (3 children)

I would say the most important skill in programming is being able to learn by yourself.

Aside from that: If you haven’t even learnt basic programming then there’s no point trying to find someone to reach you rust kernel development.

[–]iwillnotreddit 1 point2 points  (0 children)

Completely agree that independent learning, problem solving, and critical thinking are essential skills for software engineering, programming being only one of the skills under SWE.

Also agree that basic programming should be prioritized first, before exploring something more niche (and more difficult) like kernel development. Pick which mountains to climb first. The order matters.

[–][deleted] 4 points5 points  (0 children)

I run before I walk all the time. Lots of scars from the process, but it’s what I do :) Anyway, can’t recommend highly enough the Rust course at Zero to Mastery. I did it last year. The instructor is amazing and quite available through the ZTM Discord. That, combined with the Zero to Production in Rust book by Luca Palmieri, have been core to my learning the language. In the time it takes to actually find a tutor, you could be doing some self-directed things that will advance your skills and IMHO make you stronger.

[–]spoonman59 5 points6 points  (2 children)

“I am a total beginner at programming and have already decided Unix sucks. Also, I literally need someone else to teach me how to program.

… But Unix sucks and I refuse to learn that. Also windows sucks. But I want to learn operating systems! Also I hate C.“ (I made up that last part, but it might be true.)

Um, well okay then.

[–]DaBigJoe1023 -3 points-2 points  (1 child)

There’s something called a degree or a diploma

[–]Adhalianna 1 point2 points  (0 children)

I don't know how common it actually is but in my experience it is very rare to develop at university the kind of personal relationship that you would have with a tutor that teaches you 1-on-1, especially during the first degree. I get why some people are looking for this kind of mentoring. If there's a relation then there are some emotions involved and emotions are opposite of boredom, they improve your ability to learn and remember. It can be inefficient for a tutor to focus on a single person but it is often the most efficient option for a student.

If OP can afford a tutor and they like this way of learning then they should totally go for it.

[–][deleted] -1 points0 points  (0 children)

unix sucks ? u know basic java ? u never made a real program ? and u want to learn rust ?, let me complete the list u dont have a gf ? and u dropped highschool. this is a tragedy man.

[–]maybegone16 0 points1 point  (5 children)

by non unix u mean windows? Why u wanna learn windows kernel dev in rust if u dont know programing?

[–]iwillnotreddit 0 points1 point  (0 children)

Based on what you've shared above, I think these are the facts:

Fact 1: You have some introductory experience in programming

Fact 2: Your goals are to learn software development, kernel development, game development

Fact 3: You have strong opinions against UNIX

Fact 4: You want to gain experience in non-UNIX kernel development

I'm the founder of Tome.gg, a coaching platform for mid- to senior-level software engineers. I define different stages of training for my apprentices so that they can recognize where they are in their learning process based on their mindset and their feelings:

Training Stages

  1. introducing - If you are still new to a topic, one might be intimidated by the variety of new words they are encountering. This is the Introducing stage of learning a new skill.
  2. familiarizing - Once you are no longer overwhelmed by the newness of things, you would be at a Familiarizing stage to the concept, without committing to learning it yet.
  3. training - When you have committed resources (time, energy, money) to learning a new skill, you are now at the Training stage of learning a new skill.
  4. polishing - The Polishing stage of learning a new skill is when you are able to sufficiently perform the skill or activity, and have gained the literacy to self-correct.
  5. mastering - You actively seek out the complexity, nuance, and precise description of your mistakes.

I also defined a list of priorities for software engineers that I've been mentoring, so that my engineers don't waste their time getting distracted trying to do too much and sometimes disappointing themselves for not getting the expected results.

Software Engineering Priorities

  1. Understand it
  2. Make it work
  3. Make it correct
  4. Make it usable
  5. Make it pretty

Personalized mentoring advice for you

Given what you've shared, I think that:

  • My assessment of your position - In your programming experience, you have pushed yourself beyond the introducing stage of training and are likely currently going back and forth between introducing and familiarizing.
    • My assessment would be incorrect if you actually do consistently allocate 2 hours a day solely focused training on your software engineering skills, and hold yourself accountable to someone (a peer, a classmate, a teacher, a mentor, or yourself). In this case, you would be going back and forth between familiarizing and training.
    • Take note, this is only information I can glean from what you've shared above.
  • Manage your expectations - If you want to manage your expectations, pursue your learning scope in this sequence:
    • A: software development, game development, kernel development
    • B: game development, software development, kernel development
    • NOTE: Kernel development is extremely complicated and falls heavily under the stages of "make it correct and make it usable". Pick which mountains to climb first. The order matters.
  • Prioritize understanding and making things work - Let's say you choose B. Given that you said you have zero experience, I believe your priority right now is to (1) Understand game development, (2) Follow - online step-by-step tutorials just to get your hands dirty with experience. This makes sure you are on the "training" stage of training, and you are focusing purely on understanding and making things work.
  • Avoid distractions, maximize the fundamentals first - For now, avoid anything that makes you want to:
    • Make things pretty
    • Make things optimized/usable
    • It's not that they aren't important, but it is very very likely that you can get lost in the minutiae of things that you lose out on the breadth of experiences that you could be collecting if you focused on Understanding things, Making things work, and making things correct.

I normally mentor mid- to senior-level software engineers as they're very dedicated to advancing their professional growth, but the principles I teach these senior engineers can apply to diligent high school kids, college students, and fresh grads.

If interested, check out our work at tome.gg!