What is the most important thing you've done to improve your programming abilities?

September 9, 2016 2.7k views

The internet is full of resources about programing: blog posts, podcasts, interactive courses, and challenges. I'm always interested in hearing about what's worked for others. What have you done to help improve your programing abilities, and what would recomend to others looking to improve?

For myself, I've always found that I learn best by just jumping into the source, looking at how others structure their projects, and approach different problems in practice. Contributing to open source has been a great entry point for doing that.

1 comment
  • Personally, I leverage strong knowledge in one language, and learn how to do similar things in other languages, then break it into pieces and try to do it. Examples:

    • scripting tutorial (params, env vars, file i/o, string/array/hash operations/functions) in perl, python, ruby, tcl, bash, ksh, powershell, vbscript, jscript
    • oop tutorials (student from parent, circle/triangle/rectangle from abstract shape) in ruby, python, c++, objc, java, c#, javascript, coffeescript, typescript, dart
    • serialization of config (ruby, python, bash) for yaml, json, xml, sqlite3, csv, columns, ini
    • web microframework (/hello/<name> route) for flask, sinatra, expressjs, dancer, nancy, spark

    Online Stuff, I came across:

    For tools in DevOps, I like

    If I took my language learning style to devops stuff, I might do the chef tutorials with Ansible, Puppet, and others. For the Docker stuff, I could redo them in older material. I am looking for good microservice and/or cluster material, and then compose these with homegrown scripts (ansible, nginx, consul) or fully baked clustering systems (kubernetes, swarm, fleet, mesos). Right now I am experimenting with Apache Storm cluster, only using shell scripts at the moment.

    Lastly, I use visualization, so activity diagrams, class diagrams, mind maps, help me organize not only studies, but relationships in systems I use or want to create.

11 Answers

Looking at other's code is a fantastic way to learn new things. I've picked up so much purely by being curious enough to examine how someone else's code works and then applying that knowledge in the future.

Get your teeth into as much code as you can and don't be afraid to push yourself either. Knowing you have no choice but to come up with the solution to a problem that you've never encountered before is excellent motivation to learn something new!

I think if I were to try to single out one particular pattern to ascribe my skill progression and career development (such as it is) to, it would simply be saying "yes" to new things.

New languages. New platforms. New frameworks. New environments. With every new project or job that I have taken on and been responsible for, there's been this necessary learning. Over the years that accumulates and now here I am with a lot of really varied experience and having been exposed to lots of techniques and stacks and tools.

If you want to improve and grow...just do things. When given opportunities, take them.

Say, "yes!".

  • I couldn't agree with you more. So many people are too afraid to take on new challenges and stagnate. I think in this world where things are developing constantly you need to be able to run with it and have confidence in your own abilities that you'll figure it out.

  • Very accurate for me as well. Choosing to pick up a new language for the next project or completely rewriting old code in new languages or techniques even if you don't fully grasp them yet has been a major step forwards for me. It's really been about exposing myself to new concepts of coding and present technologies and knowing that there are probably better ways of doing things...and then seeking out for those 'better ways'.

Teaching others has always been the best way for me to learn things in a meaningful way. I need to really understand the algorithms that are underlying code in order to be able to successfully relay programming concepts to someone else. Teaching happens in a lot of informal ways and can be part of a collaborative project with all team members teaching and learning together.

For me, it was working on a small startup project. It was myself, and 2 other people. One had been a developer for several years, and had a lot of experience. It was crazy how much I learned by working with him. The other guy, was our devops guru. He now works for AWS as an technical account manager. Needless to say, I agree that diving into source and seeing how others made it work is always good. For me, surrounding myself with people that had way more knowledge and experience was the best thing I've done to further my abilities.

There are a couple of things that have worked best for me.

  1. Have a list of projects or application ideas that you would like to implement. Then dive headlong into it and try to create these projects with the new language / framework. It will throw up enough questions to help you dive deeper into different programming areas.
  2. Teach the topic to a list of developers or speak at a group/meetup. This creates a healthy amount of pressure for you to learn more about the topic, anticipate questions and more. Take the Q&A session at the end of the session in a positive way, even if you could not answer a few questions. Those questions would be your starting point to dig deeper into areas and the answers to them will help build your knowledge. You can substitute teaching/talking with blogging too to a certain extent.

Well, two things come to mind:

  • Help other people. At the time I went to phpBB support forums and helped people who got weird errors after moding their forum. Nowadays I'd say that StackOverflow is the right place for that.
  • Find a mentor. Someone that finds everything easy and that will present you an easy answer to the problems you encounter.

I figured with time that coding is just copy/pasting until you know and understand all copy/pastes.

Teaching or helping people with their projects is what works for me. Things stick that way and there's a lot of motivation and purpose to truly understand when you're learning so you can teach someone else.

Back in high school, we had a really great chemistry teacher. When he taught how to balance chemical equations, he practically wrote (not balanced) them like basic English. You only get that good from doing (teaching) over and over again.

I learn by creating new things myself. Write down on paper what you want to make, not something super difficult, something easy->middle.

Choose language/tools, read basic intro to language and start. When you stuck at any element, read how other people done it, there is many open-source projects, blogs, StackOverflow... But I try never to just copy code, this will lead me nowhere, write it yourself. If you find something you could change, change it now.

At first point make it work, when I make it work, I go fixing warnings, and reading guidelines. Than I spent most time reading other projects and optimizing it to work best.

After I polished everything, if I have enough time, I start new project...

This could have flaws, like you could skip some important thing about language/framework but you will learn at least basic things. After that you can reefer to some advanced book or anything like.

I just find that for myself this works best when I want to get into new language.
Also it can very help if you find somewhere who knows about you do, and are will to review you code, so it can give you some guides what you could polish and learn.

I just used this summer break to learn Golang this way, and it worked pretty well :D

First things first! Always!

I generally try to master the basics of whatever I am learning. I try to learn every single fracking piece of basic topic before going any further. So, when I'm studying something more complex, like proposed architectures/methodologies/paradigms/etc. with given tools/languages/libs/etc. (ex.: FP with JavaScript), I don't need to keep revising basic stuff and my learning rhythm gets boosted.

It has a slower rhythm in the short run, but the benefits for the career as a whole it's very rewarding.

I build side projects and learn from books. Side projects are great playground for learning and testing new technologies/approaches/frameworks in practical way. Popular Open Source libraries are also fantastic source of knowledge! ;)

I always try to start a new project in a language / framework I don't know.

If the project doesn't work for the market, at least I learned!

Have another answer? Share your knowledge.