The problem with programming nowadays is not so much the programming language or the algorithm. The problem is the ecosystem. "In the old world" (as an example) you bought Turbo Pascal, installed it on your MS-DOS and practiced and explored the system, one step at a time. Nowadays, aside the OS, the IDE and the language, you have to deep-dive into different frameworks, different tools that all do the same thing in the end and understand how the pipeline works that, in the end and due to some magic produces something.
I just write Swift, every day (like, seven days a week, 52.4 weeks per year)[0].<p>It certainly seems to help me to be very productive. I am not as advanced as Swift scientists and academicians, but I speak it without an accent.<p>As far as automating everything; I automate some stuff, but not that much. If the act of doing the automation teaches me something, I guess that's good.<p>However, automation often encourages a "Greatest Common Denominator" approach to things that may be best served as hand-crafted, artisanal work. An example is what I'm working on, right now. I'm preparing an app for App Store release, so I have to do a whole bunch of screengrabs and videos. It's a big fat pain. Many shops automate this.<p>But I am also carefully choreographing the process, and ensuring the best Quality for everything. The App Store page is incredibly important to branding (something many techs don't take as seriously as they should, IMNSHO). It's worth it to spend as much time as possible, working on it. I only do this, every now and then, so it's not really a big deal.<p>[0] <a href="https://github.com/ChrisMarshallNY#github-stuff">https://github.com/ChrisMarshallNY#github-stuff</a>
A huge +1 for automating all the things as a form of practice! I don’t even think that you have to (strictly speaking) end up saving time on a particular task for a lot of automation to be worth it. The act of practicing automation makes you more efficient at future automation. Even a failed attempt at automating something can teach you stuff about why certain things are hard to automate that can make you a better engineer.<p>Getting in the habit of automating stuff in your editor and environment can also have a real snowballing effect. Yes, you end up “wasting” some time with yak shaves that don’t work out. But it doesn’t take long before the scope of what you can tackle in a day grows. It’s really profound how much friction you can remove, and how much friction there is in fresh environments.<p>Also, and ymmv, but a lot of repetitive tasks can be pretty soul crushing. Too much toil and you can come to dread your job. Automating something away almost always feels rewarding to me. Keeping yourself happy and motivated in your work should also count for something.
I do practice and depending on my goals I take different approaches.<p>The two main ones are: <i>data structures and algorithms</i> and <i>rapid prototyping</i>.<p>The former is basically leetcode stuff and straight forward. I want to be able to implement bread-first search without having to look it up. And I want to be able to do it without it occupying too much space in my mind. Repeated practice helps me retain this kind of stuff so that it becomes reflexive and almost like muscle memory.<p>The other kind of practice takes a bit more work. I did this for a period where I produced a body of small prototype games. The idea was to write them in the fastest way I could. I forgot all about coding practices that you would use in production code and went all in on, “how fast can I get from typing the first byte of source code to user interaction?”<p>For these projects I used a timer. Everything was permissible. It was code I wouldn’t use again so I didn’t care about it being reusable or readable or anything like that. I kept light notes on my experiences with each of them.<p>Prototyping is an oft-overlooked skill that can some times be useful. The idea is to write some code to hash out the idea; experiment with it in the fastest way possible with the goal of finding out whether the idea itself is viable. For a mountain of a task like developing a game, and in boring stuff like enterprise software, it’s useful to save yourself a bit of work from going down a dead end if you can scout ahead a little bit.
I do practice programming, but I feel like the practice is not deliberate. Most of the time I find myself lost in whatever side project I have going on rather than being mindful about the improvement of my craft. As stated in the article, it is tough to keep up with practice due to life changing. I now have to take much better care of myself than I used to to be present with my family. This takes time away that I used to spend learning.<p>Something I've found tough at this point in my career 10 years in is trying to practice skills that I don't care as much about but can be necessary at times. I have many friends in my area that are very skilled at frontend development. I am not. I will reach for the first template library I can find to get a frontend built. I wish that I could take the time to properly sit down and learn HTML/CSS/JS but every time I do I get some weird focus block. It's almost as if my brain shuts down and refuses to take that information in. Maybe because I know that my time is limited?<p>I have to set really strict schedules with myself to get any kind of practice in. Sometimes this works and sometimes it doesn't. Oh well.<p>I'd love to start automating more common tasks for myself.
What this actually sounds like is building up a base of tricks and tools. Like a senior dev who has utility code they bring with them from job to job. The same applies to paradigms and code patterns.<p>The fun thing about programming tasks and tools in particular though is that you crystalize your mental models into tools because of the natural of computers.
For me, automating things was the karate kid thing only with programming. Automating is just like cleaning an old person's house just to realize you know Karate
One thing that i self-regconized is, the more lazy you are, the better tool you'll implement ! Only lazy people can know what to automate to keep being lazy at work.<p>The "busy" developers never or hardly see that problem, because they're happy with their business already !
Only intentional practice I’ve been doing has been learning Rust. Everything else is just solving classic compsci problems over and over again, in C, on little embedded systems, which I guess is practice too but it just doesn’t have a steep leaning curve.
Do you "practice programming" or you you "make something cool"?<p>Both lead to learning to program I suppose. But the former is an alien concept to me. The latter is the more natural.