
Ask HN: What is your programming training schedule? - muzani
Like athletes, there needs to be some time allocated to training yourself to perform faster, better. Time needs to be allocated to resting too, so it might not be optimal to learn more on weekends and nights.<p>Good training usually involves something tough, that strains you to your limit. A big part of it is scheduling that training properly so that you can keep improving, and yet aren&#x27;t too exhausted to get work done.<p>How do you keep improving yourself? Learning new languages &amp; libraries, shortcuts, better tools, etc?
======
marktangotango
Here are some things I've down over the years in no particular order.

Work on algorithm problems during slow times at work, or when I know I'll be
interviewing soon. I'd just search google for tech interview questions, then
implement so that I really understood the solution.

I used to write 2d games as a hobby, I made Tetris, the most ambitious game I
completed was a jump n run with a simple level. This taught me 2d graphics,
animation, simple physics, and managing state of a lot of interacting
entities.

I implemented software 3d with flat shaded polygons and used that to make a
demake of an old game. This taught a lot about 3D, matrix math and modeling.

I've implemented parsers and interpreters for simple languages multiple times.
I personally think this is the most bang for the buck type of project, you
learn a lot about working with text, recursion and tree data structures.

I wrote an emulator for an old architecture. This taught me a lot about
assembler and how machines operate.

I wrote a couple of simple games for gameboy color and ran them on an emulator
using homebrew tools. This taught me a lot about assembler programming an old
game consoles.

I wrote client server library kind of like zeromq. This taught me a lot about
socket programming and threads.

There was other stuff. Note all these projects were for my own edification and
amusement and were never released anywhere. It was all basically an excercise
in "ok that's how that all work", then moved on. There was never a goal or
schedule. These were just things that interested me.

------
oblib
I spend a lot of time learning new things. For the past couple years I've been
focused on learning Javascript but also boning up on CSS and HTML5.

I do most of this on a "need to know" basis most everyday, and on a "curious
to know" basis when I'm curious, which is pretty often.

As for improving, first I labor on getting my code working and that, for me,
can be a pretty messy process. Afterwards I look for ways to improve it and
clean it up. I generally learn a lot doing that.

Aside from that, I read "How To" articles (a lot), and also spend time
browsing APIs, and as soon as I need to figure out how to do something I do a
web search on it and go read up on it.

For example, I saw a link about "Learning Javascript" here a week or so ago
and went and read the article. It was pretty good and I learned a bit from it.
It had an exercise to find numbers in a "fibonacci" sequence which was fun. It
was pretty simple exercise in logic but since I'd never played with it I found
it interesting and kept poking at it a bit more :D

------
muzani
I decide what to learn mostly from looking at job requirements of similar
fields. Most companies usually adopt things that work and save them time. This
was also how I picked up on the Kotlin wave before it went mainstream for
Android.

If something makes me uncomfortable, I try to look at it. Usually it's things
that seem really powerful, which people hate, but don't really justify why.
React and MongoDB are prime examples.

I find that most of the "fun" and interesting tech isn't really that helpful
to work with. The best tech is tiresome to learn, especially in Android.

I freelance, so usually I would allocate a couple of days just to grind up
programming skills in certain things. I used to do something like 30 mins a
morning to warm up my typing speed, but it doesn't stick when I have to deal
with deadlines.

------
jpamata
I prefer to learn from books as I find it easier to pace oneself. Every day, I
check out what book packtpub is offering for free. Aside from that, I also
subscribe to safari books (they have a free trial - no credit card required,
check it out). Every now and then I see something that interests me and I
spend at least a week or two going through the book. If a topic interests me
enough, I'd check out another book, look at online courses, spend my time on
the forums delving deeper, and maybe start a project.

Link: [https://www.packtpub.com/packt/offers/free-
learning](https://www.packtpub.com/packt/offers/free-learning)

~~~
muzani
Do you have any particular way of reading? Like just read the same book in
your spare time, or flip between books as long as they hold your interest? Or
even a way of choosing which books to read?

~~~
jpamata
Most of the time, I flip between two books. The trick is to pick books that
complement each other. Like say maths and machine learning, or a book on
JavaScript and a JS framework. I usually read on the mornings & weekends and
then spend an hour or two doing the exercises/projects at night, after work.

------
itamarst
These days I only practice at work, because it's the best place to practice if
you can manage it: more time, better motivation, specific tasks in mind, help
more available, realistic problems, and so on.

E.g. as an example, learning a programming language:
[https://codewithoutrules.com/2017/09/09/learn-a-new-
programm...](https://codewithoutrules.com/2017/09/09/learn-a-new-programming-
language/)

------
sotojuan
Feel free to ignore/downvote me - just wondering: is this a thing people do?

I certainly understand and support it, but I have never seen it happen at work
(and I work in a start up, not some old boring enterprise shop). After eight
hours, if I want to program at all I'll probably mess around with some new
language or whatever, not "train". Same with my coworkers. Maybe I am lucky,
but the things I do at work challenge me such that I learn something after
every project.

Anyway, I did ask a similar question one time, check it out:

[https://lobste.rs/s/uu6v1o/what_is_deliberate_practice_for](https://lobste.rs/s/uu6v1o/what_is_deliberate_practice_for)

To give you a direct answer, how about doing LeetCode exercises, starting from
the easiest and building up? If you take your time and note down how you
solved each problem, you will start to notice patterns and can apply those at
work to solve stuff quicker. But IMO, if we are talking about performing
"better" at work programming, it's more about the skill of taking business
specs/feature request and fitting them with the existing codebase :-)

~~~
muzani
I think it's less likely to happen at a startup, because there is more work to
be done. Larger companies often have some kind of official training (even the
boring enterprises). I know this, because I freelance with a training company
and often do things like training courses to teach a bunch of companies how to
do Material Design.

It takes a lot of time and error to mess around, and some libraries have such
immense productivity boosts that it's a waste of time not to do them.

In my case, I once bought an ergonomic keyboard and realized that I was typing
the wrong way for years. My typing speed halved for about a week, so I did
some 30 min/day training routine until I got it back up to an acceptable rate.
But I think that I could actually be typing a lot faster if I bother to
practice with it. There are some other things - debugging tools, keyboard
shortcuts.

And there are some major things like learning RxJava, Kotlin, Butterknife, or
some architecture, which isn't always possible with 30 mins/day, but may cost
productivity if delayed and something you want the whole team up to date with.

------
thiagooffm
I read programming websites and whenever I read something seem to be useful
and get excited about it, I try it out.

Has worked well so far. Been reading HN since from the very beginning and
tested most of the stuff which was added here, some of them snatching me a job
in Europe(I'm from a third-world country).

And also has been able to keep me pretty much well on the market. I could have
had better results if I just sat down in one tech, but I find it boring.

------
jetti
I have an hour and a half commute (each way) and majority is spent on the
train. I have a hotspot and do all my fun programming on there. Learning a new
language, learning a new framework or just creating something. It's a great
way to pass the time on the long commute.

------
androidrobo
You would like to understand user experience (UX) and DevOps, or want to make
sure you’re designing secure databases, Global Knowledge has a course that
will teach the latest technology trends and embed lifelong application
development and programming skills.

